fune/devtools/client/shared/source-map-loader/utils/sourceMapRequests.js
Alexandre Poirot ae7b6ea7e4 Bug 1794693 - [devtools] Move devtools-source-map to regular mozilla-central code. r=bomsy,perftest-reviewers,jdescottes,sparky
This used to be a node package. Let's make it become regular commonjs devtools modules.
This will make it trivial to migrate this to ES Modules.
Also possibly make this code become the unique layer in m-c on top of the source-map package.

We no longer use webpack to build the two bundles (index.js and worker.js),
instead, we are using the toolkit worker loader (require.js) in order to load
all this code without any build step.

As this is no longer a node package, I removed node-specific modules (assertRoot/wasmAsset)
and simplify the definition of wasm file URIs as they are now fixed.

Also moving the debugger to load internal "devtools/client/shared/source-map/source-map.js"
module in jest as running the Web Worker instantiated by source-map/index.js is too complex.

Differential Revision: https://phabricator.services.mozilla.com/D159115
2022-11-08 16:01:01 +00:00

71 lines
1.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();
}
function getSourceMapWithMetadata(generatedSourceId) {
return sourceMapRequests.get(generatedSourceId);
}
function getSourceMap(generatedSourceId) {
const request = getSourceMapWithMetadata(generatedSourceId);
if (!request) {
return null;
}
return request.then(result => (result ? result.map : null));
}
function setSourceMap(generatedId, request) {
sourceMapRequests.set(
generatedId,
request.then(map => {
if (!map || !map.sources) {
return null;
}
const urlsById = new Map();
const sources = [];
for (const url of map.sources) {
const id = generatedToOriginalId(generatedId, url);
urlsById.set(id, url);
sources.push({ id, url });
}
return { map, urlsById, sources };
})
);
}
module.exports = {
clearSourceMaps,
getSourceMapWithMetadata,
getSourceMap,
setSourceMap,
};