145 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			145 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // src/build-source-map-tree.ts
 | |
| import { TraceMap } from "@jridgewell/trace-mapping";
 | |
| 
 | |
| // src/source-map-tree.ts
 | |
| import { GenMapping, maybeAddSegment, setIgnore, setSourceContent } from "@jridgewell/gen-mapping";
 | |
| import { traceSegment, decodedMappings } from "@jridgewell/trace-mapping";
 | |
| var SOURCELESS_MAPPING = /* @__PURE__ */ SegmentObject("", -1, -1, "", null, false);
 | |
| var EMPTY_SOURCES = [];
 | |
| function SegmentObject(source, line, column, name, content, ignore) {
 | |
|   return { source, line, column, name, content, ignore };
 | |
| }
 | |
| function Source(map, sources, source, content, ignore) {
 | |
|   return {
 | |
|     map,
 | |
|     sources,
 | |
|     source,
 | |
|     content,
 | |
|     ignore
 | |
|   };
 | |
| }
 | |
| function MapSource(map, sources) {
 | |
|   return Source(map, sources, "", null, false);
 | |
| }
 | |
| function OriginalSource(source, content, ignore) {
 | |
|   return Source(null, EMPTY_SOURCES, source, content, ignore);
 | |
| }
 | |
| function traceMappings(tree) {
 | |
|   const gen = new GenMapping({ file: tree.map.file });
 | |
|   const { sources: rootSources, map } = tree;
 | |
|   const rootNames = map.names;
 | |
|   const rootMappings = decodedMappings(map);
 | |
|   for (let i = 0; i < rootMappings.length; i++) {
 | |
|     const segments = rootMappings[i];
 | |
|     for (let j = 0; j < segments.length; j++) {
 | |
|       const segment = segments[j];
 | |
|       const genCol = segment[0];
 | |
|       let traced = SOURCELESS_MAPPING;
 | |
|       if (segment.length !== 1) {
 | |
|         const source2 = rootSources[segment[1]];
 | |
|         traced = originalPositionFor(
 | |
|           source2,
 | |
|           segment[2],
 | |
|           segment[3],
 | |
|           segment.length === 5 ? rootNames[segment[4]] : ""
 | |
|         );
 | |
|         if (traced == null) continue;
 | |
|       }
 | |
|       const { column, line, name, content, source, ignore } = traced;
 | |
|       maybeAddSegment(gen, i, genCol, source, line, column, name);
 | |
|       if (source && content != null) setSourceContent(gen, source, content);
 | |
|       if (ignore) setIgnore(gen, source, true);
 | |
|     }
 | |
|   }
 | |
|   return gen;
 | |
| }
 | |
| function originalPositionFor(source, line, column, name) {
 | |
|   if (!source.map) {
 | |
|     return SegmentObject(source.source, line, column, name, source.content, source.ignore);
 | |
|   }
 | |
|   const segment = traceSegment(source.map, line, column);
 | |
|   if (segment == null) return null;
 | |
|   if (segment.length === 1) return SOURCELESS_MAPPING;
 | |
|   return originalPositionFor(
 | |
|     source.sources[segment[1]],
 | |
|     segment[2],
 | |
|     segment[3],
 | |
|     segment.length === 5 ? source.map.names[segment[4]] : name
 | |
|   );
 | |
| }
 | |
| 
 | |
| // src/build-source-map-tree.ts
 | |
| function asArray(value) {
 | |
|   if (Array.isArray(value)) return value;
 | |
|   return [value];
 | |
| }
 | |
| function buildSourceMapTree(input, loader) {
 | |
|   const maps = asArray(input).map((m) => new TraceMap(m, ""));
 | |
|   const map = maps.pop();
 | |
|   for (let i = 0; i < maps.length; i++) {
 | |
|     if (maps[i].sources.length > 1) {
 | |
|       throw new Error(
 | |
|         `Transformation map ${i} must have exactly one source file.
 | |
| Did you specify these with the most recent transformation maps first?`
 | |
|       );
 | |
|     }
 | |
|   }
 | |
|   let tree = build(map, loader, "", 0);
 | |
|   for (let i = maps.length - 1; i >= 0; i--) {
 | |
|     tree = MapSource(maps[i], [tree]);
 | |
|   }
 | |
|   return tree;
 | |
| }
 | |
| function build(map, loader, importer, importerDepth) {
 | |
|   const { resolvedSources, sourcesContent, ignoreList } = map;
 | |
|   const depth = importerDepth + 1;
 | |
|   const children = resolvedSources.map((sourceFile, i) => {
 | |
|     const ctx = {
 | |
|       importer,
 | |
|       depth,
 | |
|       source: sourceFile || "",
 | |
|       content: void 0,
 | |
|       ignore: void 0
 | |
|     };
 | |
|     const sourceMap = loader(ctx.source, ctx);
 | |
|     const { source, content, ignore } = ctx;
 | |
|     if (sourceMap) return build(new TraceMap(sourceMap, source), loader, source, depth);
 | |
|     const sourceContent = content !== void 0 ? content : sourcesContent ? sourcesContent[i] : null;
 | |
|     const ignored = ignore !== void 0 ? ignore : ignoreList ? ignoreList.includes(i) : false;
 | |
|     return OriginalSource(source, sourceContent, ignored);
 | |
|   });
 | |
|   return MapSource(map, children);
 | |
| }
 | |
| 
 | |
| // src/source-map.ts
 | |
| import { toDecodedMap, toEncodedMap } from "@jridgewell/gen-mapping";
 | |
| var SourceMap = class {
 | |
|   constructor(map, options) {
 | |
|     const out = options.decodedMappings ? toDecodedMap(map) : toEncodedMap(map);
 | |
|     this.version = out.version;
 | |
|     this.file = out.file;
 | |
|     this.mappings = out.mappings;
 | |
|     this.names = out.names;
 | |
|     this.ignoreList = out.ignoreList;
 | |
|     this.sourceRoot = out.sourceRoot;
 | |
|     this.sources = out.sources;
 | |
|     if (!options.excludeContent) {
 | |
|       this.sourcesContent = out.sourcesContent;
 | |
|     }
 | |
|   }
 | |
|   toString() {
 | |
|     return JSON.stringify(this);
 | |
|   }
 | |
| };
 | |
| 
 | |
| // src/remapping.ts
 | |
| function remapping(input, loader, options) {
 | |
|   const opts = typeof options === "object" ? options : { excludeContent: !!options, decodedMappings: false };
 | |
|   const tree = buildSourceMapTree(input, loader);
 | |
|   return new SourceMap(traceMappings(tree), opts);
 | |
| }
 | |
| export {
 | |
|   remapping as default
 | |
| };
 | |
| //# sourceMappingURL=remapping.mjs.map
 |