forked from mirrors/gecko-dev
Extract information out of the source map worker to be stored into the Debugger store. Renamed SourceMapLoader getOriginalURLs to loadSourceMap to better translate the heavy process involved in this method. While doing that, also inline the transfer of source map ignore list in this call (instead of always having another worker message right after). This will be used and tested in the next changeset. Differential Revision: https://phabricator.services.mozilla.com/D188585
96 lines
2.7 KiB
JavaScript
96 lines
2.7 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();
|
|
|
|
for (const url of map.sources) {
|
|
const id = generatedToOriginalId(generatedId, url);
|
|
urlsById.set(id, url);
|
|
}
|
|
return { map, urlsById };
|
|
})
|
|
);
|
|
}
|
|
|
|
module.exports = {
|
|
clearSourceMaps,
|
|
getSourceMapWithMetadata,
|
|
getSourceMap,
|
|
setSourceMap,
|
|
};
|