2017-06-19 18:55:20 +03:00
|
|
|
/* 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) {
|
2018-06-01 13:36:09 +03:00
|
|
|
const result = this._map.originalPositionFor({
|
2017-06-19 18:55:20 +03:00
|
|
|
line: 1,
|
|
|
|
column: generatedPosition.line,
|
|
|
|
bias: generatedPosition.bias,
|
|
|
|
});
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
_remapGeneratedPosition(position) {
|
2018-06-01 13:36:09 +03:00
|
|
|
const generatedPosition = {
|
2017-06-19 18:55:20 +03:00
|
|
|
line: position.column,
|
|
|
|
column: 0,
|
|
|
|
};
|
|
|
|
if (this._computeColumnSpans) {
|
|
|
|
generatedPosition.lastColumn = Infinity;
|
|
|
|
}
|
|
|
|
return generatedPosition;
|
|
|
|
}
|
|
|
|
|
|
|
|
generatedPositionFor(originalPosition) {
|
2018-06-01 13:36:09 +03:00
|
|
|
const position = this._map.generatedPositionFor(originalPosition);
|
2017-06-19 18:55:20 +03:00
|
|
|
return this._remapGeneratedPosition(position);
|
|
|
|
}
|
|
|
|
|
|
|
|
allGeneratedPositionsFor(originalPosition) {
|
2018-06-01 13:36:09 +03:00
|
|
|
const positions = this._map.allGeneratedPositionsFor(originalPosition);
|
2017-06-19 18:55:20 +03:00
|
|
|
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 => {
|
2023-05-20 15:26:53 +03:00
|
|
|
const { source, generatedColumn, originalLine, originalColumn, name } =
|
|
|
|
entry;
|
2017-06-19 18:55:20 +03:00
|
|
|
callback({
|
|
|
|
source,
|
|
|
|
generatedLine: generatedColumn,
|
|
|
|
generatedColumn: 0,
|
|
|
|
originalLine,
|
|
|
|
originalColumn,
|
|
|
|
name,
|
|
|
|
});
|
|
|
|
},
|
|
|
|
context,
|
|
|
|
order
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
exports.WasmRemap = WasmRemap;
|