You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
3.1 KiB
91 lines
3.1 KiB
4 weeks ago
|
import { AnyMap, encodedMappings, originalPositionFor, generatedPositionFor, allGeneratedPositionsFor, sourceContentFor, eachMapping } from '@jridgewell/trace-mapping';
|
||
|
import { GenMapping, fromMap, maybeAddMapping, setSourceContent, toEncodedMap, toDecodedMap } from '@jridgewell/gen-mapping';
|
||
|
|
||
|
class SourceMapConsumer {
|
||
|
constructor(map, mapUrl) {
|
||
|
const trace = (this._map = new AnyMap(map, mapUrl));
|
||
|
this.file = trace.file;
|
||
|
this.names = trace.names;
|
||
|
this.sourceRoot = trace.sourceRoot;
|
||
|
this.sources = trace.resolvedSources;
|
||
|
this.sourcesContent = trace.sourcesContent;
|
||
|
this.version = trace.version;
|
||
|
}
|
||
|
static fromSourceMap(map, mapUrl) {
|
||
|
// This is more performant if we receive
|
||
|
// a @jridgewell/source-map SourceMapGenerator
|
||
|
if (map.toDecodedMap) {
|
||
|
return new SourceMapConsumer(map.toDecodedMap(), mapUrl);
|
||
|
}
|
||
|
// This is a fallback for `source-map` and `source-map-js`
|
||
|
return new SourceMapConsumer(map.toJSON(), mapUrl);
|
||
|
}
|
||
|
get mappings() {
|
||
|
return encodedMappings(this._map);
|
||
|
}
|
||
|
originalPositionFor(needle) {
|
||
|
return originalPositionFor(this._map, needle);
|
||
|
}
|
||
|
generatedPositionFor(originalPosition) {
|
||
|
return generatedPositionFor(this._map, originalPosition);
|
||
|
}
|
||
|
allGeneratedPositionsFor(originalPosition) {
|
||
|
return allGeneratedPositionsFor(this._map, originalPosition);
|
||
|
}
|
||
|
hasContentsOfAllSources() {
|
||
|
if (!this.sourcesContent || this.sourcesContent.length !== this.sources.length) {
|
||
|
return false;
|
||
|
}
|
||
|
for (const content of this.sourcesContent) {
|
||
|
if (content == null) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
sourceContentFor(source, nullOnMissing) {
|
||
|
const sourceContent = sourceContentFor(this._map, source);
|
||
|
if (sourceContent != null) {
|
||
|
return sourceContent;
|
||
|
}
|
||
|
if (nullOnMissing) {
|
||
|
return null;
|
||
|
}
|
||
|
throw new Error(`"${source}" is not in the SourceMap.`);
|
||
|
}
|
||
|
eachMapping(callback, context /*, order?: number*/) {
|
||
|
// order is ignored as @jridgewell/trace-map doesn't implement it
|
||
|
eachMapping(this._map, context ? callback.bind(context) : callback);
|
||
|
}
|
||
|
destroy() {
|
||
|
// noop.
|
||
|
}
|
||
|
}
|
||
|
class SourceMapGenerator {
|
||
|
constructor(opts) {
|
||
|
// TODO :: should this be duck-typed ?
|
||
|
this._map = opts instanceof GenMapping ? opts : new GenMapping(opts);
|
||
|
}
|
||
|
static fromSourceMap(consumer) {
|
||
|
return new SourceMapGenerator(fromMap(consumer));
|
||
|
}
|
||
|
addMapping(mapping) {
|
||
|
maybeAddMapping(this._map, mapping);
|
||
|
}
|
||
|
setSourceContent(source, content) {
|
||
|
setSourceContent(this._map, source, content);
|
||
|
}
|
||
|
toJSON() {
|
||
|
return toEncodedMap(this._map);
|
||
|
}
|
||
|
toString() {
|
||
|
return JSON.stringify(this.toJSON());
|
||
|
}
|
||
|
toDecodedMap() {
|
||
|
return toDecodedMap(this._map);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export { SourceMapConsumer, SourceMapGenerator };
|
||
|
//# sourceMappingURL=source-map.mjs.map
|