forked from mirrors/gecko-dev
Backed out changeset 0965e956200a (bug 1834725) Backed out changeset 4a8151163607 (bug 1834725) Backed out changeset a56f42223377 (bug 1834725) Backed out changeset a920356b63eb (bug 1834725)
106 lines
2.9 KiB
JavaScript
106 lines
2.9 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
|
|
|
|
"use strict";
|
|
|
|
const {
|
|
generatedToOriginalId,
|
|
} = require("resource://devtools/client/shared/source-map-loader/utils/index.js");
|
|
|
|
const sourceMapRequests = new Map();
|
|
|
|
function clearSourceMaps() {
|
|
for (const [, metadataPromise] of sourceMapRequests) {
|
|
// The source-map module leaks memory unless `.destroy` is called on
|
|
// the consumer instances when they are no longer being used.
|
|
metadataPromise.then(
|
|
metadata => {
|
|
if (metadata) {
|
|
metadata.map.destroy();
|
|
}
|
|
},
|
|
// We don't want this to cause any unhandled rejection errors.
|
|
() => {}
|
|
);
|
|
}
|
|
|
|
sourceMapRequests.clear();
|
|
}
|
|
|
|
/**
|
|
* For a given generated source, retrieve an object with many attributes:
|
|
* @param {String} generatedSourceId
|
|
* The id of the generated source
|
|
*
|
|
* @return {Object} Meta data object with many attributes
|
|
* - map: The SourceMapConsumer or WasmRemap instance
|
|
* - urlsById Map of Original Source ID (string) to Source URL (string)
|
|
* - sources: Array of object with the two following attributes:
|
|
* - id: Original Source ID (string)
|
|
* - url: Original Source URL (string)
|
|
*/
|
|
function getSourceMapWithMetadata(generatedSourceId) {
|
|
return sourceMapRequests.get(generatedSourceId);
|
|
}
|
|
|
|
/**
|
|
* Retrieve the SourceMapConsumer or WasmRemap instance for a given generated source.
|
|
*
|
|
* @param {String} generatedSourceId
|
|
* The id of the generated source
|
|
*
|
|
* @return null | Promise<SourceMapConsumer | WasmRemap>
|
|
*/
|
|
function getSourceMap(generatedSourceId) {
|
|
const request = getSourceMapWithMetadata(generatedSourceId);
|
|
if (!request) {
|
|
return null;
|
|
}
|
|
|
|
return request.then(result => result?.map);
|
|
}
|
|
|
|
/**
|
|
* Record the SourceMapConsumer or WasmRemap instance for a given generated source.
|
|
*
|
|
* @param {String} generatedId
|
|
* The generated source ID.
|
|
* @param {Promise<SourceMapConsumer or WasmRemap>} request
|
|
* A promise which should resolve to either a SourceMapConsume or WasmRemap instance.
|
|
*/
|
|
function setSourceMap(generatedId, request) {
|
|
sourceMapRequests.set(
|
|
generatedId,
|
|
request.then(map => {
|
|
if (!map || !map.sources) {
|
|
return null;
|
|
}
|
|
|
|
const urlsById = new Map();
|
|
const sources = [];
|
|
let ignoreListUrls = [];
|
|
|
|
if (map.x_google_ignoreList?.length) {
|
|
ignoreListUrls = map.x_google_ignoreList.map(
|
|
sourceIndex => map.sources[sourceIndex]
|
|
);
|
|
}
|
|
|
|
for (const url of map.sources) {
|
|
const id = generatedToOriginalId(generatedId, url);
|
|
|
|
urlsById.set(id, url);
|
|
sources.push({ id, url });
|
|
}
|
|
return { map, urlsById, sources, ignoreListUrls };
|
|
})
|
|
);
|
|
}
|
|
|
|
module.exports = {
|
|
clearSourceMaps,
|
|
getSourceMapWithMetadata,
|
|
getSourceMap,
|
|
setSourceMap,
|
|
};
|