| |
| var SetArray = class { |
| constructor() { |
| this._indexes = { __proto__: null }; |
| this.array = []; |
| } |
| }; |
| function cast(set) { |
| return set; |
| } |
| function get(setarr, key) { |
| return cast(setarr)._indexes[key]; |
| } |
| function put(setarr, key) { |
| const index = get(setarr, key); |
| if (index !== void 0) return index; |
| const { array, _indexes: indexes } = cast(setarr); |
| const length = array.push(key); |
| return indexes[key] = length - 1; |
| } |
| function remove(setarr, key) { |
| const index = get(setarr, key); |
| if (index === void 0) return; |
| const { array, _indexes: indexes } = cast(setarr); |
| for (let i = index + 1; i < array.length; i++) { |
| const k = array[i]; |
| array[i - 1] = k; |
| indexes[k]--; |
| } |
| indexes[key] = void 0; |
| array.pop(); |
| } |
|
|
| |
| import { |
| encode |
| } from "@jridgewell/sourcemap-codec"; |
| import { TraceMap, decodedMappings } from "@jridgewell/trace-mapping"; |
|
|
| |
| var COLUMN = 0; |
| var SOURCES_INDEX = 1; |
| var SOURCE_LINE = 2; |
| var SOURCE_COLUMN = 3; |
| var NAMES_INDEX = 4; |
|
|
| |
| var NO_NAME = -1; |
| var GenMapping = class { |
| constructor({ file, sourceRoot } = {}) { |
| this._names = new SetArray(); |
| this._sources = new SetArray(); |
| this._sourcesContent = []; |
| this._mappings = []; |
| this.file = file; |
| this.sourceRoot = sourceRoot; |
| this._ignoreList = new SetArray(); |
| } |
| }; |
| function cast2(map) { |
| return map; |
| } |
| function addSegment(map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) { |
| return addSegmentInternal( |
| false, |
| map, |
| genLine, |
| genColumn, |
| source, |
| sourceLine, |
| sourceColumn, |
| name, |
| content |
| ); |
| } |
| function addMapping(map, mapping) { |
| return addMappingInternal(false, map, mapping); |
| } |
| var maybeAddSegment = (map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) => { |
| return addSegmentInternal( |
| true, |
| map, |
| genLine, |
| genColumn, |
| source, |
| sourceLine, |
| sourceColumn, |
| name, |
| content |
| ); |
| }; |
| var maybeAddMapping = (map, mapping) => { |
| return addMappingInternal(true, map, mapping); |
| }; |
| function setSourceContent(map, source, content) { |
| const { |
| _sources: sources, |
| _sourcesContent: sourcesContent |
| |
| } = cast2(map); |
| const index = put(sources, source); |
| sourcesContent[index] = content; |
| } |
| function setIgnore(map, source, ignore = true) { |
| const { |
| _sources: sources, |
| _sourcesContent: sourcesContent, |
| _ignoreList: ignoreList |
| |
| } = cast2(map); |
| const index = put(sources, source); |
| if (index === sourcesContent.length) sourcesContent[index] = null; |
| if (ignore) put(ignoreList, index); |
| else remove(ignoreList, index); |
| } |
| function toDecodedMap(map) { |
| const { |
| _mappings: mappings, |
| _sources: sources, |
| _sourcesContent: sourcesContent, |
| _names: names, |
| _ignoreList: ignoreList |
| |
| |
| } = cast2(map); |
| removeEmptyFinalLines(mappings); |
| return { |
| version: 3, |
| file: map.file || void 0, |
| names: names.array, |
| sourceRoot: map.sourceRoot || void 0, |
| sources: sources.array, |
| sourcesContent, |
| mappings, |
| |
| |
| ignoreList: ignoreList.array |
| }; |
| } |
| function toEncodedMap(map) { |
| const decoded = toDecodedMap(map); |
| return Object.assign({}, decoded, { |
| |
| |
| mappings: encode(decoded.mappings) |
| }); |
| } |
| function fromMap(input) { |
| const map = new TraceMap(input); |
| const gen = new GenMapping({ file: map.file, sourceRoot: map.sourceRoot }); |
| putAll(cast2(gen)._names, map.names); |
| putAll(cast2(gen)._sources, map.sources); |
| cast2(gen)._sourcesContent = map.sourcesContent || map.sources.map(() => null); |
| cast2(gen)._mappings = decodedMappings(map); |
| if (map.ignoreList) putAll(cast2(gen)._ignoreList, map.ignoreList); |
| return gen; |
| } |
| function allMappings(map) { |
| const out = []; |
| const { _mappings: mappings, _sources: sources, _names: names } = cast2(map); |
| for (let i = 0; i < mappings.length; i++) { |
| const line = mappings[i]; |
| for (let j = 0; j < line.length; j++) { |
| const seg = line[j]; |
| const generated = { line: i + 1, column: seg[COLUMN] }; |
| let source = void 0; |
| let original = void 0; |
| let name = void 0; |
| if (seg.length !== 1) { |
| source = sources.array[seg[SOURCES_INDEX]]; |
| original = { line: seg[SOURCE_LINE] + 1, column: seg[SOURCE_COLUMN] }; |
| if (seg.length === 5) name = names.array[seg[NAMES_INDEX]]; |
| } |
| out.push({ generated, source, original, name }); |
| } |
| } |
| return out; |
| } |
| function addSegmentInternal(skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) { |
| const { |
| _mappings: mappings, |
| _sources: sources, |
| _sourcesContent: sourcesContent, |
| _names: names |
| |
| } = cast2(map); |
| const line = getIndex(mappings, genLine); |
| const index = getColumnIndex(line, genColumn); |
| if (!source) { |
| if (skipable && skipSourceless(line, index)) return; |
| return insert(line, index, [genColumn]); |
| } |
| assert(sourceLine); |
| assert(sourceColumn); |
| const sourcesIndex = put(sources, source); |
| const namesIndex = name ? put(names, name) : NO_NAME; |
| if (sourcesIndex === sourcesContent.length) sourcesContent[sourcesIndex] = content != null ? content : null; |
| if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) { |
| return; |
| } |
| return insert( |
| line, |
| index, |
| name ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex] : [genColumn, sourcesIndex, sourceLine, sourceColumn] |
| ); |
| } |
| function assert(_val) { |
| } |
| function getIndex(arr, index) { |
| for (let i = arr.length; i <= index; i++) { |
| arr[i] = []; |
| } |
| return arr[index]; |
| } |
| function getColumnIndex(line, genColumn) { |
| let index = line.length; |
| for (let i = index - 1; i >= 0; index = i--) { |
| const current = line[i]; |
| if (genColumn >= current[COLUMN]) break; |
| } |
| return index; |
| } |
| function insert(array, index, value) { |
| for (let i = array.length; i > index; i--) { |
| array[i] = array[i - 1]; |
| } |
| array[index] = value; |
| } |
| function removeEmptyFinalLines(mappings) { |
| const { length } = mappings; |
| let len = length; |
| for (let i = len - 1; i >= 0; len = i, i--) { |
| if (mappings[i].length > 0) break; |
| } |
| if (len < length) mappings.length = len; |
| } |
| function putAll(setarr, array) { |
| for (let i = 0; i < array.length; i++) put(setarr, array[i]); |
| } |
| function skipSourceless(line, index) { |
| if (index === 0) return true; |
| const prev = line[index - 1]; |
| return prev.length === 1; |
| } |
| function skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) { |
| if (index === 0) return false; |
| const prev = line[index - 1]; |
| if (prev.length === 1) return false; |
| return sourcesIndex === prev[SOURCES_INDEX] && sourceLine === prev[SOURCE_LINE] && sourceColumn === prev[SOURCE_COLUMN] && namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME); |
| } |
| function addMappingInternal(skipable, map, mapping) { |
| const { generated, source, original, name, content } = mapping; |
| if (!source) { |
| return addSegmentInternal( |
| skipable, |
| map, |
| generated.line - 1, |
| generated.column, |
| null, |
| null, |
| null, |
| null, |
| null |
| ); |
| } |
| assert(original); |
| return addSegmentInternal( |
| skipable, |
| map, |
| generated.line - 1, |
| generated.column, |
| source, |
| original.line - 1, |
| original.column, |
| name, |
| content |
| ); |
| } |
| export { |
| GenMapping, |
| addMapping, |
| addSegment, |
| allMappings, |
| fromMap, |
| maybeAddMapping, |
| maybeAddSegment, |
| setIgnore, |
| setSourceContent, |
| toDecodedMap, |
| toEncodedMap |
| }; |
| |
|
|