| (function (global, factory) { |
| typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : |
| typeof define === 'function' && define.amd ? define(['exports'], factory) : |
| (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.sourceMap = {})); |
| })(this, (function (exports) { 'use strict'; |
|
|
| const comma = ','.charCodeAt(0); |
| const semicolon = ';'.charCodeAt(0); |
| const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; |
| const intToChar = new Uint8Array(64); |
| const charToInt = new Uint8Array(128); |
| for (let i = 0; i < chars.length; i++) { |
| const c = chars.charCodeAt(i); |
| intToChar[i] = c; |
| charToInt[c] = i; |
| } |
| |
| const td = typeof TextDecoder !== 'undefined' |
| ? new TextDecoder() |
| : typeof Buffer !== 'undefined' |
| ? { |
| decode(buf) { |
| const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength); |
| return out.toString(); |
| }, |
| } |
| : { |
| decode(buf) { |
| let out = ''; |
| for (let i = 0; i < buf.length; i++) { |
| out += String.fromCharCode(buf[i]); |
| } |
| return out; |
| }, |
| }; |
| function decode(mappings) { |
| const state = new Int32Array(5); |
| const decoded = []; |
| let index = 0; |
| do { |
| const semi = indexOf(mappings, index); |
| const line = []; |
| let sorted = true; |
| let lastCol = 0; |
| state[0] = 0; |
| for (let i = index; i < semi; i++) { |
| let seg; |
| i = decodeInteger(mappings, i, state, 0); |
| const col = state[0]; |
| if (col < lastCol) |
| sorted = false; |
| lastCol = col; |
| if (hasMoreVlq(mappings, i, semi)) { |
| i = decodeInteger(mappings, i, state, 1); |
| i = decodeInteger(mappings, i, state, 2); |
| i = decodeInteger(mappings, i, state, 3); |
| if (hasMoreVlq(mappings, i, semi)) { |
| i = decodeInteger(mappings, i, state, 4); |
| seg = [col, state[1], state[2], state[3], state[4]]; |
| } |
| else { |
| seg = [col, state[1], state[2], state[3]]; |
| } |
| } |
| else { |
| seg = [col]; |
| } |
| line.push(seg); |
| } |
| if (!sorted) |
| sort(line); |
| decoded.push(line); |
| index = semi + 1; |
| } while (index <= mappings.length); |
| return decoded; |
| } |
| function indexOf(mappings, index) { |
| const idx = mappings.indexOf(';', index); |
| return idx === -1 ? mappings.length : idx; |
| } |
| function decodeInteger(mappings, pos, state, j) { |
| let value = 0; |
| let shift = 0; |
| let integer = 0; |
| do { |
| const c = mappings.charCodeAt(pos++); |
| integer = charToInt[c]; |
| value |= (integer & 31) << shift; |
| shift += 5; |
| } while (integer & 32); |
| const shouldNegate = value & 1; |
| value >>>= 1; |
| if (shouldNegate) { |
| value = -0x80000000 | -value; |
| } |
| state[j] += value; |
| return pos; |
| } |
| function hasMoreVlq(mappings, i, length) { |
| if (i >= length) |
| return false; |
| return mappings.charCodeAt(i) !== comma; |
| } |
| function sort(line) { |
| line.sort(sortComparator$1); |
| } |
| function sortComparator$1(a, b) { |
| return a[0] - b[0]; |
| } |
| function encode(decoded) { |
| const state = new Int32Array(5); |
| const bufLength = 1024 * 16; |
| const subLength = bufLength - 36; |
| const buf = new Uint8Array(bufLength); |
| const sub = buf.subarray(0, subLength); |
| let pos = 0; |
| let out = ''; |
| for (let i = 0; i < decoded.length; i++) { |
| const line = decoded[i]; |
| if (i > 0) { |
| if (pos === bufLength) { |
| out += td.decode(buf); |
| pos = 0; |
| } |
| buf[pos++] = semicolon; |
| } |
| if (line.length === 0) |
| continue; |
| state[0] = 0; |
| for (let j = 0; j < line.length; j++) { |
| const segment = line[j]; |
| |
| |
| if (pos > subLength) { |
| out += td.decode(sub); |
| buf.copyWithin(0, subLength, pos); |
| pos -= subLength; |
| } |
| if (j > 0) |
| buf[pos++] = comma; |
| pos = encodeInteger(buf, pos, state, segment, 0); |
| if (segment.length === 1) |
| continue; |
| pos = encodeInteger(buf, pos, state, segment, 1); |
| pos = encodeInteger(buf, pos, state, segment, 2); |
| pos = encodeInteger(buf, pos, state, segment, 3); |
| if (segment.length === 4) |
| continue; |
| pos = encodeInteger(buf, pos, state, segment, 4); |
| } |
| } |
| return out + td.decode(buf.subarray(0, pos)); |
| } |
| function encodeInteger(buf, pos, state, segment, j) { |
| const next = segment[j]; |
| let num = next - state[j]; |
| state[j] = next; |
| num = num < 0 ? (-num << 1) | 1 : num << 1; |
| do { |
| let clamped = num & 0b011111; |
| num >>>= 5; |
| if (num > 0) |
| clamped |= 0b100000; |
| buf[pos++] = intToChar[clamped]; |
| } while (num > 0); |
| return pos; |
| } |
|
|
| |
| const schemeRegex = /^[\w+.-]+:\/\//; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?(\?[^#]*)?(#.*)?/; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| const fileRegex = /^file:(?:\/\/((?![a-z]:)[^/#?]*)?)?(\/?[^#?]*)(\?[^#]*)?(#.*)?/i; |
| function isAbsoluteUrl(input) { |
| return schemeRegex.test(input); |
| } |
| function isSchemeRelativeUrl(input) { |
| return input.startsWith('//'); |
| } |
| function isAbsolutePath(input) { |
| return input.startsWith('/'); |
| } |
| function isFileUrl(input) { |
| return input.startsWith('file:'); |
| } |
| function isRelative(input) { |
| return /^[.?#]/.test(input); |
| } |
| function parseAbsoluteUrl(input) { |
| const match = urlRegex.exec(input); |
| return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/', match[6] || '', match[7] || ''); |
| } |
| function parseFileUrl(input) { |
| const match = fileRegex.exec(input); |
| const path = match[2]; |
| return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path, match[3] || '', match[4] || ''); |
| } |
| function makeUrl(scheme, user, host, port, path, query, hash) { |
| return { |
| scheme, |
| user, |
| host, |
| port, |
| path, |
| query, |
| hash, |
| type: 7 , |
| }; |
| } |
| function parseUrl(input) { |
| if (isSchemeRelativeUrl(input)) { |
| const url = parseAbsoluteUrl('http:' + input); |
| url.scheme = ''; |
| url.type = 6 ; |
| return url; |
| } |
| if (isAbsolutePath(input)) { |
| const url = parseAbsoluteUrl('http://foo.com' + input); |
| url.scheme = ''; |
| url.host = ''; |
| url.type = 5 ; |
| return url; |
| } |
| if (isFileUrl(input)) |
| return parseFileUrl(input); |
| if (isAbsoluteUrl(input)) |
| return parseAbsoluteUrl(input); |
| const url = parseAbsoluteUrl('http://foo.com/' + input); |
| url.scheme = ''; |
| url.host = ''; |
| url.type = input |
| ? input.startsWith('?') |
| ? 3 |
| : input.startsWith('#') |
| ? 2 |
| : 4 |
| : 1 ; |
| return url; |
| } |
| function stripPathFilename(path) { |
| |
| |
| if (path.endsWith('/..')) |
| return path; |
| const index = path.lastIndexOf('/'); |
| return path.slice(0, index + 1); |
| } |
| function mergePaths(url, base) { |
| normalizePath(base, base.type); |
| |
| |
| if (url.path === '/') { |
| url.path = base.path; |
| } |
| else { |
| |
| url.path = stripPathFilename(base.path) + url.path; |
| } |
| } |
| |
| |
| |
| |
| function normalizePath(url, type) { |
| const rel = type <= 4 ; |
| const pieces = url.path.split('/'); |
| |
| |
| let pointer = 1; |
| |
| |
| let positive = 0; |
| |
| |
| |
| let addTrailingSlash = false; |
| for (let i = 1; i < pieces.length; i++) { |
| const piece = pieces[i]; |
| |
| if (!piece) { |
| addTrailingSlash = true; |
| continue; |
| } |
| |
| addTrailingSlash = false; |
| |
| if (piece === '.') |
| continue; |
| |
| |
| if (piece === '..') { |
| if (positive) { |
| addTrailingSlash = true; |
| positive--; |
| pointer--; |
| } |
| else if (rel) { |
| |
| |
| pieces[pointer++] = piece; |
| } |
| continue; |
| } |
| |
| |
| pieces[pointer++] = piece; |
| positive++; |
| } |
| let path = ''; |
| for (let i = 1; i < pointer; i++) { |
| path += '/' + pieces[i]; |
| } |
| if (!path || (addTrailingSlash && !path.endsWith('/..'))) { |
| path += '/'; |
| } |
| url.path = path; |
| } |
| |
| |
| |
| function resolve$1(input, base) { |
| if (!input && !base) |
| return ''; |
| const url = parseUrl(input); |
| let inputType = url.type; |
| if (base && inputType !== 7 ) { |
| const baseUrl = parseUrl(base); |
| const baseType = baseUrl.type; |
| switch (inputType) { |
| case 1 : |
| url.hash = baseUrl.hash; |
| |
| case 2 : |
| url.query = baseUrl.query; |
| |
| case 3 : |
| case 4 : |
| mergePaths(url, baseUrl); |
| |
| case 5 : |
| |
| url.user = baseUrl.user; |
| url.host = baseUrl.host; |
| url.port = baseUrl.port; |
| |
| case 6 : |
| |
| url.scheme = baseUrl.scheme; |
| } |
| if (baseType > inputType) |
| inputType = baseType; |
| } |
| normalizePath(url, inputType); |
| const queryHash = url.query + url.hash; |
| switch (inputType) { |
| |
| |
| case 2 : |
| case 3 : |
| return queryHash; |
| case 4 : { |
| |
| const path = url.path.slice(1); |
| if (!path) |
| return queryHash || '.'; |
| if (isRelative(base || input) && !isRelative(path)) { |
| |
| |
| |
| return './' + path + queryHash; |
| } |
| return path + queryHash; |
| } |
| case 5 : |
| return url.path + queryHash; |
| default: |
| return url.scheme + '//' + url.user + url.host + url.port + url.path + queryHash; |
| } |
| } |
|
|
| function resolve(input, base) { |
| |
| |
| |
| if (base && !base.endsWith('/')) |
| base += '/'; |
| return resolve$1(input, base); |
| } |
|
|
| |
| |
| |
| function stripFilename(path) { |
| if (!path) |
| return ''; |
| const index = path.lastIndexOf('/'); |
| return path.slice(0, index + 1); |
| } |
|
|
| const COLUMN$1 = 0; |
| const SOURCES_INDEX$1 = 1; |
| const SOURCE_LINE$1 = 2; |
| const SOURCE_COLUMN$1 = 3; |
| const NAMES_INDEX$1 = 4; |
| const REV_GENERATED_LINE = 1; |
| const REV_GENERATED_COLUMN = 2; |
|
|
| function maybeSort(mappings, owned) { |
| const unsortedIndex = nextUnsortedSegmentLine(mappings, 0); |
| if (unsortedIndex === mappings.length) |
| return mappings; |
| |
| |
| if (!owned) |
| mappings = mappings.slice(); |
| for (let i = unsortedIndex; i < mappings.length; i = nextUnsortedSegmentLine(mappings, i + 1)) { |
| mappings[i] = sortSegments(mappings[i], owned); |
| } |
| return mappings; |
| } |
| function nextUnsortedSegmentLine(mappings, start) { |
| for (let i = start; i < mappings.length; i++) { |
| if (!isSorted(mappings[i])) |
| return i; |
| } |
| return mappings.length; |
| } |
| function isSorted(line) { |
| for (let j = 1; j < line.length; j++) { |
| if (line[j][COLUMN$1] < line[j - 1][COLUMN$1]) { |
| return false; |
| } |
| } |
| return true; |
| } |
| function sortSegments(line, owned) { |
| if (!owned) |
| line = line.slice(); |
| return line.sort(sortComparator); |
| } |
| function sortComparator(a, b) { |
| return a[COLUMN$1] - b[COLUMN$1]; |
| } |
|
|
| let found = false; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| function binarySearch(haystack, needle, low, high) { |
| while (low <= high) { |
| const mid = low + ((high - low) >> 1); |
| const cmp = haystack[mid][COLUMN$1] - needle; |
| if (cmp === 0) { |
| found = true; |
| return mid; |
| } |
| if (cmp < 0) { |
| low = mid + 1; |
| } |
| else { |
| high = mid - 1; |
| } |
| } |
| found = false; |
| return low - 1; |
| } |
| function upperBound(haystack, needle, index) { |
| for (let i = index + 1; i < haystack.length; index = i++) { |
| if (haystack[i][COLUMN$1] !== needle) |
| break; |
| } |
| return index; |
| } |
| function lowerBound(haystack, needle, index) { |
| for (let i = index - 1; i >= 0; index = i--) { |
| if (haystack[i][COLUMN$1] !== needle) |
| break; |
| } |
| return index; |
| } |
| function memoizedState() { |
| return { |
| lastKey: -1, |
| lastNeedle: -1, |
| lastIndex: -1, |
| }; |
| } |
| |
| |
| |
| |
| function memoizedBinarySearch(haystack, needle, state, key) { |
| const { lastKey, lastNeedle, lastIndex } = state; |
| let low = 0; |
| let high = haystack.length - 1; |
| if (key === lastKey) { |
| if (needle === lastNeedle) { |
| found = lastIndex !== -1 && haystack[lastIndex][COLUMN$1] === needle; |
| return lastIndex; |
| } |
| if (needle >= lastNeedle) { |
| |
| low = lastIndex === -1 ? 0 : lastIndex; |
| } |
| else { |
| high = lastIndex; |
| } |
| } |
| state.lastKey = key; |
| state.lastNeedle = needle; |
| return (state.lastIndex = binarySearch(haystack, needle, low, high)); |
| } |
|
|
| |
| |
| function buildBySources(decoded, memos) { |
| const sources = memos.map(buildNullArray); |
| for (let i = 0; i < decoded.length; i++) { |
| const line = decoded[i]; |
| for (let j = 0; j < line.length; j++) { |
| const seg = line[j]; |
| if (seg.length === 1) |
| continue; |
| const sourceIndex = seg[SOURCES_INDEX$1]; |
| const sourceLine = seg[SOURCE_LINE$1]; |
| const sourceColumn = seg[SOURCE_COLUMN$1]; |
| const originalSource = sources[sourceIndex]; |
| const originalLine = (originalSource[sourceLine] || (originalSource[sourceLine] = [])); |
| const memo = memos[sourceIndex]; |
| |
| |
| |
| |
| let index = upperBound(originalLine, sourceColumn, memoizedBinarySearch(originalLine, sourceColumn, memo, sourceLine)); |
| memo.lastIndex = ++index; |
| insert$1(originalLine, index, [sourceColumn, i, seg[COLUMN$1]]); |
| } |
| } |
| return sources; |
| } |
| function insert$1(array, index, value) { |
| for (let i = array.length; i > index; i--) { |
| array[i] = array[i - 1]; |
| } |
| array[index] = value; |
| } |
| |
| |
| |
| |
| |
| function buildNullArray() { |
| return { __proto__: null }; |
| } |
|
|
| const AnyMap = function (map, mapUrl) { |
| const parsed = parse(map); |
| if (!('sections' in parsed)) { |
| return new TraceMap(parsed, mapUrl); |
| } |
| const mappings = []; |
| const sources = []; |
| const sourcesContent = []; |
| const names = []; |
| const ignoreList = []; |
| recurse(parsed, mapUrl, mappings, sources, sourcesContent, names, ignoreList, 0, 0, Infinity, Infinity); |
| const joined = { |
| version: 3, |
| file: parsed.file, |
| names, |
| sources, |
| sourcesContent, |
| mappings, |
| ignoreList, |
| }; |
| return presortedDecodedMap(joined); |
| }; |
| function parse(map) { |
| return typeof map === 'string' ? JSON.parse(map) : map; |
| } |
| function recurse(input, mapUrl, mappings, sources, sourcesContent, names, ignoreList, lineOffset, columnOffset, stopLine, stopColumn) { |
| const { sections } = input; |
| for (let i = 0; i < sections.length; i++) { |
| const { map, offset } = sections[i]; |
| let sl = stopLine; |
| let sc = stopColumn; |
| if (i + 1 < sections.length) { |
| const nextOffset = sections[i + 1].offset; |
| sl = Math.min(stopLine, lineOffset + nextOffset.line); |
| if (sl === stopLine) { |
| sc = Math.min(stopColumn, columnOffset + nextOffset.column); |
| } |
| else if (sl < stopLine) { |
| sc = columnOffset + nextOffset.column; |
| } |
| } |
| addSection(map, mapUrl, mappings, sources, sourcesContent, names, ignoreList, lineOffset + offset.line, columnOffset + offset.column, sl, sc); |
| } |
| } |
| function addSection(input, mapUrl, mappings, sources, sourcesContent, names, ignoreList, lineOffset, columnOffset, stopLine, stopColumn) { |
| const parsed = parse(input); |
| if ('sections' in parsed) |
| return recurse(...arguments); |
| const map = new TraceMap(parsed, mapUrl); |
| const sourcesOffset = sources.length; |
| const namesOffset = names.length; |
| const decoded = decodedMappings(map); |
| const { resolvedSources, sourcesContent: contents, ignoreList: ignores } = map; |
| append(sources, resolvedSources); |
| append(names, map.names); |
| if (contents) |
| append(sourcesContent, contents); |
| else |
| for (let i = 0; i < resolvedSources.length; i++) |
| sourcesContent.push(null); |
| if (ignores) |
| for (let i = 0; i < ignores.length; i++) |
| ignoreList.push(ignores[i] + sourcesOffset); |
| for (let i = 0; i < decoded.length; i++) { |
| const lineI = lineOffset + i; |
| |
| |
| |
| |
| if (lineI > stopLine) |
| return; |
| |
| |
| const out = getLine$1(mappings, lineI); |
| |
| |
| const cOffset = i === 0 ? columnOffset : 0; |
| const line = decoded[i]; |
| for (let j = 0; j < line.length; j++) { |
| const seg = line[j]; |
| const column = cOffset + seg[COLUMN$1]; |
| |
| |
| if (lineI === stopLine && column >= stopColumn) |
| return; |
| if (seg.length === 1) { |
| out.push([column]); |
| continue; |
| } |
| const sourcesIndex = sourcesOffset + seg[SOURCES_INDEX$1]; |
| const sourceLine = seg[SOURCE_LINE$1]; |
| const sourceColumn = seg[SOURCE_COLUMN$1]; |
| out.push(seg.length === 4 |
| ? [column, sourcesIndex, sourceLine, sourceColumn] |
| : [column, sourcesIndex, sourceLine, sourceColumn, namesOffset + seg[NAMES_INDEX$1]]); |
| } |
| } |
| } |
| function append(arr, other) { |
| for (let i = 0; i < other.length; i++) |
| arr.push(other[i]); |
| } |
| function getLine$1(arr, index) { |
| for (let i = arr.length; i <= index; i++) |
| arr[i] = []; |
| return arr[index]; |
| } |
|
|
| const LINE_GTR_ZERO = '`line` must be greater than 0 (lines start at line 1)'; |
| const COL_GTR_EQ_ZERO = '`column` must be greater than or equal to 0 (columns start at column 0)'; |
| const LEAST_UPPER_BOUND = -1; |
| const GREATEST_LOWER_BOUND = 1; |
| class TraceMap { |
| constructor(map, mapUrl) { |
| const isString = typeof map === 'string'; |
| if (!isString && map._decodedMemo) |
| return map; |
| const parsed = (isString ? JSON.parse(map) : map); |
| const { version, file, names, sourceRoot, sources, sourcesContent } = parsed; |
| this.version = version; |
| this.file = file; |
| this.names = names || []; |
| this.sourceRoot = sourceRoot; |
| this.sources = sources; |
| this.sourcesContent = sourcesContent; |
| this.ignoreList = parsed.ignoreList || parsed.x_google_ignoreList || undefined; |
| const from = resolve(sourceRoot || '', stripFilename(mapUrl)); |
| this.resolvedSources = sources.map((s) => resolve(s || '', from)); |
| const { mappings } = parsed; |
| if (typeof mappings === 'string') { |
| this._encoded = mappings; |
| this._decoded = undefined; |
| } |
| else { |
| this._encoded = undefined; |
| this._decoded = maybeSort(mappings, isString); |
| } |
| this._decodedMemo = memoizedState(); |
| this._bySources = undefined; |
| this._bySourceMemos = undefined; |
| } |
| } |
| |
| |
| |
| |
| function cast$2(map) { |
| return map; |
| } |
| |
| |
| |
| function encodedMappings(map) { |
| var _a; |
| var _b; |
| return ((_a = (_b = cast$2(map))._encoded) !== null && _a !== void 0 ? _a : (_b._encoded = encode(cast$2(map)._decoded))); |
| } |
| |
| |
| |
| function decodedMappings(map) { |
| var _a; |
| return ((_a = cast$2(map))._decoded || (_a._decoded = decode(cast$2(map)._encoded))); |
| } |
| |
| |
| |
| |
| |
| function originalPositionFor(map, needle) { |
| let { line, column, bias } = needle; |
| line--; |
| if (line < 0) |
| throw new Error(LINE_GTR_ZERO); |
| if (column < 0) |
| throw new Error(COL_GTR_EQ_ZERO); |
| const decoded = decodedMappings(map); |
| |
| |
| if (line >= decoded.length) |
| return OMapping(null, null, null, null); |
| const segments = decoded[line]; |
| const index = traceSegmentInternal(segments, cast$2(map)._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND); |
| if (index === -1) |
| return OMapping(null, null, null, null); |
| const segment = segments[index]; |
| if (segment.length === 1) |
| return OMapping(null, null, null, null); |
| const { names, resolvedSources } = map; |
| return OMapping(resolvedSources[segment[SOURCES_INDEX$1]], segment[SOURCE_LINE$1] + 1, segment[SOURCE_COLUMN$1], segment.length === 5 ? names[segment[NAMES_INDEX$1]] : null); |
| } |
| |
| |
| |
| function generatedPositionFor(map, needle) { |
| const { source, line, column, bias } = needle; |
| return generatedPosition(map, source, line, column, bias || GREATEST_LOWER_BOUND, false); |
| } |
| |
| |
| |
| function allGeneratedPositionsFor(map, needle) { |
| const { source, line, column, bias } = needle; |
| |
| return generatedPosition(map, source, line, column, bias || LEAST_UPPER_BOUND, true); |
| } |
| |
| |
| |
| function eachMapping(map, cb) { |
| const decoded = decodedMappings(map); |
| const { names, resolvedSources } = map; |
| for (let i = 0; i < decoded.length; i++) { |
| const line = decoded[i]; |
| for (let j = 0; j < line.length; j++) { |
| const seg = line[j]; |
| const generatedLine = i + 1; |
| const generatedColumn = seg[0]; |
| let source = null; |
| let originalLine = null; |
| let originalColumn = null; |
| let name = null; |
| if (seg.length !== 1) { |
| source = resolvedSources[seg[1]]; |
| originalLine = seg[2] + 1; |
| originalColumn = seg[3]; |
| } |
| if (seg.length === 5) |
| name = names[seg[4]]; |
| cb({ |
| generatedLine, |
| generatedColumn, |
| source, |
| originalLine, |
| originalColumn, |
| name, |
| }); |
| } |
| } |
| } |
| function sourceIndex(map, source) { |
| const { sources, resolvedSources } = map; |
| let index = sources.indexOf(source); |
| if (index === -1) |
| index = resolvedSources.indexOf(source); |
| return index; |
| } |
| |
| |
| |
| function sourceContentFor(map, source) { |
| const { sourcesContent } = map; |
| if (sourcesContent == null) |
| return null; |
| const index = sourceIndex(map, source); |
| return index === -1 ? null : sourcesContent[index]; |
| } |
| |
| |
| |
| |
| function presortedDecodedMap(map, mapUrl) { |
| const tracer = new TraceMap(clone(map, []), mapUrl); |
| cast$2(tracer)._decoded = map.mappings; |
| return tracer; |
| } |
| function clone(map, mappings) { |
| return { |
| version: map.version, |
| file: map.file, |
| names: map.names, |
| sourceRoot: map.sourceRoot, |
| sources: map.sources, |
| sourcesContent: map.sourcesContent, |
| mappings, |
| ignoreList: map.ignoreList || map.x_google_ignoreList, |
| }; |
| } |
| function OMapping(source, line, column, name) { |
| return { source, line, column, name }; |
| } |
| function GMapping(line, column) { |
| return { line, column }; |
| } |
| function traceSegmentInternal(segments, memo, line, column, bias) { |
| let index = memoizedBinarySearch(segments, column, memo, line); |
| if (found) { |
| index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index); |
| } |
| else if (bias === LEAST_UPPER_BOUND) |
| index++; |
| if (index === -1 || index === segments.length) |
| return -1; |
| return index; |
| } |
| function sliceGeneratedPositions(segments, memo, line, column, bias) { |
| let min = traceSegmentInternal(segments, memo, line, column, GREATEST_LOWER_BOUND); |
| |
| |
| |
| |
| |
| |
| if (!found && bias === LEAST_UPPER_BOUND) |
| min++; |
| if (min === -1 || min === segments.length) |
| return []; |
| |
| |
| |
| const matchedColumn = found ? column : segments[min][COLUMN$1]; |
| |
| if (!found) |
| min = lowerBound(segments, matchedColumn, min); |
| const max = upperBound(segments, matchedColumn, min); |
| const result = []; |
| for (; min <= max; min++) { |
| const segment = segments[min]; |
| result.push(GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN])); |
| } |
| return result; |
| } |
| function generatedPosition(map, source, line, column, bias, all) { |
| var _a; |
| line--; |
| if (line < 0) |
| throw new Error(LINE_GTR_ZERO); |
| if (column < 0) |
| throw new Error(COL_GTR_EQ_ZERO); |
| const { sources, resolvedSources } = map; |
| let sourceIndex = sources.indexOf(source); |
| if (sourceIndex === -1) |
| sourceIndex = resolvedSources.indexOf(source); |
| if (sourceIndex === -1) |
| return all ? [] : GMapping(null, null); |
| const generated = ((_a = cast$2(map))._bySources || (_a._bySources = buildBySources(decodedMappings(map), (cast$2(map)._bySourceMemos = sources.map(memoizedState))))); |
| const segments = generated[sourceIndex][line]; |
| if (segments == null) |
| return all ? [] : GMapping(null, null); |
| const memo = cast$2(map)._bySourceMemos[sourceIndex]; |
| if (all) |
| return sliceGeneratedPositions(segments, memo, line, column, bias); |
| const index = traceSegmentInternal(segments, memo, line, column, bias); |
| if (index === -1) |
| return GMapping(null, null); |
| const segment = segments[index]; |
| return GMapping(segment[REV_GENERATED_LINE] + 1, segment[REV_GENERATED_COLUMN]); |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| class SetArray { |
| constructor() { |
| this._indexes = { __proto__: null }; |
| this.array = []; |
| } |
| } |
| |
| |
| |
| |
| function cast$1(set) { |
| return set; |
| } |
| |
| |
| |
| function get(setarr, key) { |
| return cast$1(setarr)._indexes[key]; |
| } |
| |
| |
| |
| |
| function put(setarr, key) { |
| |
| const index = get(setarr, key); |
| if (index !== undefined) |
| return index; |
| const { array, _indexes: indexes } = cast$1(setarr); |
| const length = array.push(key); |
| return (indexes[key] = length - 1); |
| } |
|
|
| const COLUMN = 0; |
| const SOURCES_INDEX = 1; |
| const SOURCE_LINE = 2; |
| const SOURCE_COLUMN = 3; |
| const NAMES_INDEX = 4; |
|
|
| const NO_NAME = -1; |
| |
| |
| |
| class GenMapping { |
| 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 cast(map) { |
| return map; |
| } |
| |
| |
| |
| |
| |
| const maybeAddMapping = (map, mapping) => { |
| return addMappingInternal(true, map, mapping); |
| }; |
| |
| |
| |
| function setSourceContent(map, source, content) { |
| const { _sources: sources, _sourcesContent: sourcesContent } = cast(map); |
| const index = put(sources, source); |
| sourcesContent[index] = content; |
| } |
| |
| |
| |
| |
| function toDecodedMap(map) { |
| const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, _ignoreList: ignoreList, } = cast(map); |
| removeEmptyFinalLines(mappings); |
| return { |
| version: 3, |
| file: map.file || undefined, |
| names: names.array, |
| sourceRoot: map.sourceRoot || undefined, |
| sources: sources.array, |
| sourcesContent, |
| mappings, |
| ignoreList: ignoreList.array, |
| }; |
| } |
| |
| |
| |
| |
| function toEncodedMap(map) { |
| const decoded = toDecodedMap(map); |
| return Object.assign(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(cast(gen)._names, map.names); |
| putAll(cast(gen)._sources, map.sources); |
| cast(gen)._sourcesContent = map.sourcesContent || map.sources.map(() => null); |
| cast(gen)._mappings = decodedMappings(map); |
| if (map.ignoreList) |
| putAll(cast(gen)._ignoreList, map.ignoreList); |
| return gen; |
| } |
| |
| function addSegmentInternal(skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name, content) { |
| const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = cast(map); |
| const line = getLine(mappings, genLine); |
| const index = getColumnIndex(line, genColumn); |
| if (!source) { |
| if (skipable && skipSourceless(line, index)) |
| return; |
| return insert(line, index, [genColumn]); |
| } |
| const sourcesIndex = put(sources, source); |
| const namesIndex = name ? put(names, name) : NO_NAME; |
| if (sourcesIndex === sourcesContent.length) |
| sourcesContent[sourcesIndex] = content !== null && content !== void 0 ? 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 getLine(mappings, index) { |
| for (let i = mappings.length; i <= index; i++) { |
| mappings[i] = []; |
| } |
| return mappings[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); |
| } |
| return addSegmentInternal(skipable, map, generated.line - 1, generated.column, source, original.line - 1, original.column, name, content); |
| } |
|
|
| 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) { |
| |
| |
| if (map.toDecodedMap) { |
| return new SourceMapConsumer(map.toDecodedMap(), mapUrl); |
| } |
| |
| 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 ) { |
| |
| eachMapping(this._map, context ? callback.bind(context) : callback); |
| } |
| destroy() { |
| |
| } |
| } |
| class SourceMapGenerator { |
| constructor(opts) { |
| |
| 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); |
| } |
| } |
|
|
| exports.SourceMapConsumer = SourceMapConsumer; |
| exports.SourceMapGenerator = SourceMapGenerator; |
|
|
| Object.defineProperty(exports, '__esModule', { value: true }); |
|
|
| })); |
| |
|
|