gecko-dev/devtools/shared/wasm-source-map.js

115 lines
2.5 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";
/**
* SourceMapConsumer for WebAssembly source maps. It transposes columns with
* lines, which allows mapping data to be used with SpiderMonkey Debugger API.
*/
class WasmRemap {
/**
* @param map SourceMapConsumer
*/
constructor(map) {
this._map = map;
this.version = map.version;
this.file = map.file;
this._computeColumnSpans = false;
}
get sources() {
return this._map.sources;
}
get sourceRoot() {
return this._map.sourceRoot;
}
/**
* @param url string
*/
set sourceRoot(url) {
// important, since sources are using this.
this._map.sourceRoot = url;
}
get names() {
return this._map.names;
}
get sourcesContent() {
return this._map.sourcesContent;
}
get mappings() {
throw new Error("not supported");
}
computeColumnSpans() {
this._computeColumnSpans = true;
}
originalPositionFor(generatedPosition) {
const result = this._map.originalPositionFor({
line: 1,
column: generatedPosition.line,
bias: generatedPosition.bias,
});
return result;
}
_remapGeneratedPosition(position) {
const generatedPosition = {
line: position.column,
column: 0,
};
if (this._computeColumnSpans) {
generatedPosition.lastColumn = Infinity;
}
return generatedPosition;
}
generatedPositionFor(originalPosition) {
const position = this._map.generatedPositionFor(originalPosition);
return this._remapGeneratedPosition(position);
}
allGeneratedPositionsFor(originalPosition) {
const positions = this._map.allGeneratedPositionsFor(originalPosition);
return positions.map(position => {
return this._remapGeneratedPosition(position);
});
}
hasContentsOfAllSources() {
return this._map.hasContentsOfAllSources();
}
sourceContentFor(source, returnNullOnMissing) {
return this._map.sourceContentFor(source, returnNullOnMissing);
}
eachMapping(callback, context, order) {
this._map.eachMapping(
entry => {
const { source, generatedColumn, originalLine, originalColumn, name } =
entry;
callback({
source,
generatedLine: generatedColumn,
generatedColumn: 0,
originalLine,
originalColumn,
name,
});
},
context,
order
);
}
}
exports.WasmRemap = WasmRemap;