195 lines
5.9 KiB
JavaScript
195 lines
5.9 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true,
|
|
});
|
|
exports.default = void 0;
|
|
var _AbstractConsumer = _interopRequireDefault(require("./AbstractConsumer"));
|
|
var _constants = require("./constants");
|
|
var _normalizeSourcePath = _interopRequireDefault(
|
|
require("./normalizeSourcePath"),
|
|
);
|
|
var _search = require("./search");
|
|
var _invariant = _interopRequireDefault(require("invariant"));
|
|
var _ob = require("ob1");
|
|
var _vlq = require("vlq");
|
|
function _interopRequireDefault(e) {
|
|
return e && e.__esModule ? e : { default: e };
|
|
}
|
|
class MappingsConsumer extends _AbstractConsumer.default {
|
|
constructor(sourceMap) {
|
|
super(sourceMap);
|
|
this._sourceMap = sourceMap;
|
|
this._decodedMappings = null;
|
|
this._normalizedSources = null;
|
|
}
|
|
originalPositionFor(generatedPosition) {
|
|
const { line, column } = generatedPosition;
|
|
if (line == null || column == null) {
|
|
return {
|
|
..._constants.EMPTY_POSITION,
|
|
};
|
|
}
|
|
if (generatedPosition.bias != null) {
|
|
(0, _invariant.default)(
|
|
generatedPosition.bias === _constants.GREATEST_LOWER_BOUND,
|
|
`Unimplemented lookup bias: ${(0, _constants.lookupBiasToString)(generatedPosition.bias)}`,
|
|
);
|
|
}
|
|
const mappings = this._decodeAndCacheMappings();
|
|
const index = (0, _search.greatestLowerBound)(
|
|
mappings,
|
|
{
|
|
line,
|
|
column,
|
|
},
|
|
(position, mapping) => {
|
|
if (position.line === mapping.generatedLine) {
|
|
return (0, _ob.get0)(
|
|
(0, _ob.sub)(position.column, mapping.generatedColumn),
|
|
);
|
|
}
|
|
return (0, _ob.get0)(
|
|
(0, _ob.sub)(position.line, mapping.generatedLine),
|
|
);
|
|
},
|
|
);
|
|
if (
|
|
index != null &&
|
|
mappings[index].generatedLine === generatedPosition.line
|
|
) {
|
|
const mapping = mappings[index];
|
|
return {
|
|
source: mapping.source,
|
|
name: mapping.name,
|
|
line: mapping.originalLine,
|
|
column: mapping.originalColumn,
|
|
};
|
|
}
|
|
return {
|
|
..._constants.EMPTY_POSITION,
|
|
};
|
|
}
|
|
*_decodeMappings() {
|
|
let generatedLine = _constants.FIRST_LINE;
|
|
let generatedColumn = _constants.FIRST_COLUMN;
|
|
let originalLine = _constants.FIRST_LINE;
|
|
let originalColumn = _constants.FIRST_COLUMN;
|
|
let nameIndex = (0, _ob.add0)(0);
|
|
let sourceIndex = (0, _ob.add0)(0);
|
|
const normalizedSources = this._normalizeAndCacheSources();
|
|
const { mappings: mappingsRaw, names } = this._sourceMap;
|
|
let next;
|
|
const vlqCache = new Map();
|
|
for (let i = 0; i < mappingsRaw.length; i = next) {
|
|
switch (mappingsRaw[i]) {
|
|
case ";":
|
|
generatedLine = (0, _ob.inc)(generatedLine);
|
|
generatedColumn = _constants.FIRST_COLUMN;
|
|
case ",":
|
|
next = i + 1;
|
|
continue;
|
|
}
|
|
findNext: for (next = i + 1; next < mappingsRaw.length; ++next) {
|
|
switch (mappingsRaw[next]) {
|
|
case ";":
|
|
case ",":
|
|
break findNext;
|
|
}
|
|
}
|
|
const mappingRaw = mappingsRaw.slice(i, next);
|
|
let decodedVlqValues;
|
|
if (vlqCache.has(mappingRaw)) {
|
|
decodedVlqValues = vlqCache.get(mappingRaw);
|
|
} else {
|
|
decodedVlqValues = (0, _vlq.decode)(mappingRaw);
|
|
vlqCache.set(mappingRaw, decodedVlqValues);
|
|
}
|
|
(0, _invariant.default)(
|
|
Array.isArray(decodedVlqValues),
|
|
"Decoding VLQ tuple failed",
|
|
);
|
|
const [
|
|
generatedColumnDelta,
|
|
sourceIndexDelta,
|
|
originalLineDelta,
|
|
originalColumnDelta,
|
|
nameIndexDelta,
|
|
] = decodedVlqValues;
|
|
(0, _vlq.decode)(mappingRaw);
|
|
(0, _invariant.default)(
|
|
generatedColumnDelta != null,
|
|
"Invalid generated column delta",
|
|
);
|
|
generatedColumn = (0, _ob.add)(generatedColumn, generatedColumnDelta);
|
|
const mapping = {
|
|
generatedLine,
|
|
generatedColumn,
|
|
source: null,
|
|
name: null,
|
|
originalLine: null,
|
|
originalColumn: null,
|
|
};
|
|
if (sourceIndexDelta != null) {
|
|
sourceIndex = (0, _ob.add)(sourceIndex, sourceIndexDelta);
|
|
mapping.source = normalizedSources[(0, _ob.get0)(sourceIndex)];
|
|
(0, _invariant.default)(
|
|
originalLineDelta != null,
|
|
"Invalid original line delta",
|
|
);
|
|
(0, _invariant.default)(
|
|
originalColumnDelta != null,
|
|
"Invalid original column delta",
|
|
);
|
|
originalLine = (0, _ob.add)(originalLine, originalLineDelta);
|
|
originalColumn = (0, _ob.add)(originalColumn, originalColumnDelta);
|
|
mapping.originalLine = originalLine;
|
|
mapping.originalColumn = originalColumn;
|
|
if (nameIndexDelta != null) {
|
|
nameIndex = (0, _ob.add)(nameIndex, nameIndexDelta);
|
|
mapping.name = names[(0, _ob.get0)(nameIndex)];
|
|
}
|
|
}
|
|
yield mapping;
|
|
}
|
|
}
|
|
_normalizeAndCacheSources() {
|
|
if (!this._normalizedSources) {
|
|
this._normalizedSources = this._sourceMap.sources.map((source) =>
|
|
(0, _normalizeSourcePath.default)(source, this._sourceMap),
|
|
);
|
|
}
|
|
return this._normalizedSources;
|
|
}
|
|
_decodeAndCacheMappings() {
|
|
if (!this._decodedMappings) {
|
|
this._decodedMappings = [...this._decodeMappings()];
|
|
}
|
|
return this._decodedMappings;
|
|
}
|
|
generatedMappings() {
|
|
return this._decodeAndCacheMappings();
|
|
}
|
|
_indexOfSource(source) {
|
|
const idx = this._normalizeAndCacheSources().indexOf(
|
|
(0, _normalizeSourcePath.default)(source, this._sourceMap),
|
|
);
|
|
if (idx === -1) {
|
|
return null;
|
|
}
|
|
return (0, _ob.add0)(idx);
|
|
}
|
|
sourceContentFor(source, nullOnMissing) {
|
|
const { sourcesContent } = this._sourceMap;
|
|
if (!sourcesContent) {
|
|
return null;
|
|
}
|
|
const idx = this._indexOfSource(source);
|
|
if (idx == null) {
|
|
return null;
|
|
}
|
|
return sourcesContent[(0, _ob.get0)(idx)] ?? null;
|
|
}
|
|
}
|
|
exports.default = MappingsConsumer;
|