| (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.sourcemapCodec = {})); |
| })(this, (function (exports) { 'use strict'; |
| |
| const comma = ','.charCodeAt(0); |
| const semicolon = ';'.charCodeAt(0); |
| const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; |
| const intToChar = new Uint8Array(64); // 64 possible chars. |
| const charToInt = new Uint8Array(128); // z is 122 in ASCII |
| for (let i = 0; i < chars.length; i++) { |
| const c = chars.charCodeAt(i); |
| intToChar[i] = c; |
| charToInt[c] = i; |
| } |
| function decodeInteger(reader, relative) { |
| let value = 0; |
| let shift = 0; |
| let integer = 0; |
| do { |
| const c = reader.next(); |
| integer = charToInt[c]; |
| value |= (integer & 31) << shift; |
| shift += 5; |
| } while (integer & 32); |
| const shouldNegate = value & 1; |
| value >>>= 1; |
| if (shouldNegate) { |
| value = -0x80000000 | -value; |
| } |
| return relative + value; |
| } |
| function encodeInteger(builder, num, relative) { |
| let delta = num - relative; |
| delta = delta < 0 ? (-delta << 1) | 1 : delta << 1; |
| do { |
| let clamped = delta & 0b011111; |
| delta >>>= 5; |
| if (delta > 0) |
| clamped |= 0b100000; |
| builder.write(intToChar[clamped]); |
| } while (delta > 0); |
| return num; |
| } |
| function hasMoreVlq(reader, max) { |
| if (reader.pos >= max) |
| return false; |
| return reader.peek() !== comma; |
| } |
| |
| const bufLength = 1024 * 16; |
| // Provide a fallback for older environments. |
| const td = typeof TextDecoder !== 'undefined' |
| ? /* #__PURE__ */ 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; |
| }, |
| }; |
| class StringWriter { |
| constructor() { |
| this.pos = 0; |
| this.out = ''; |
| this.buffer = new Uint8Array(bufLength); |
| } |
| write(v) { |
| const { buffer } = this; |
| buffer[this.pos++] = v; |
| if (this.pos === bufLength) { |
| this.out += td.decode(buffer); |
| this.pos = 0; |
| } |
| } |
| flush() { |
| const { buffer, out, pos } = this; |
| return pos > 0 ? out + td.decode(buffer.subarray(0, pos)) : out; |
| } |
| } |
| class StringReader { |
| constructor(buffer) { |
| this.pos = 0; |
| this.buffer = buffer; |
| } |
| next() { |
| return this.buffer.charCodeAt(this.pos++); |
| } |
| peek() { |
| return this.buffer.charCodeAt(this.pos); |
| } |
| indexOf(char) { |
| const { buffer, pos } = this; |
| const idx = buffer.indexOf(char, pos); |
| return idx === -1 ? buffer.length : idx; |
| } |
| } |
| |
| const EMPTY = []; |
| function decodeOriginalScopes(input) { |
| const { length } = input; |
| const reader = new StringReader(input); |
| const scopes = []; |
| const stack = []; |
| let line = 0; |
| for (; reader.pos < length; reader.pos++) { |
| line = decodeInteger(reader, line); |
| const column = decodeInteger(reader, 0); |
| if (!hasMoreVlq(reader, length)) { |
| const last = stack.pop(); |
| last[2] = line; |
| last[3] = column; |
| continue; |
| } |
| const kind = decodeInteger(reader, 0); |
| const fields = decodeInteger(reader, 0); |
| const hasName = fields & 0b0001; |
| const scope = (hasName ? [line, column, 0, 0, kind, decodeInteger(reader, 0)] : [line, column, 0, 0, kind]); |
| let vars = EMPTY; |
| if (hasMoreVlq(reader, length)) { |
| vars = []; |
| do { |
| const varsIndex = decodeInteger(reader, 0); |
| vars.push(varsIndex); |
| } while (hasMoreVlq(reader, length)); |
| } |
| scope.vars = vars; |
| scopes.push(scope); |
| stack.push(scope); |
| } |
| return scopes; |
| } |
| function encodeOriginalScopes(scopes) { |
| const writer = new StringWriter(); |
| for (let i = 0; i < scopes.length;) { |
| i = _encodeOriginalScopes(scopes, i, writer, [0]); |
| } |
| return writer.flush(); |
| } |
| function _encodeOriginalScopes(scopes, index, writer, state) { |
| const scope = scopes[index]; |
| const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, 4: kind, vars } = scope; |
| if (index > 0) |
| writer.write(comma); |
| state[0] = encodeInteger(writer, startLine, state[0]); |
| encodeInteger(writer, startColumn, 0); |
| encodeInteger(writer, kind, 0); |
| const fields = scope.length === 6 ? 0b0001 : 0; |
| encodeInteger(writer, fields, 0); |
| if (scope.length === 6) |
| encodeInteger(writer, scope[5], 0); |
| for (const v of vars) { |
| encodeInteger(writer, v, 0); |
| } |
| for (index++; index < scopes.length;) { |
| const next = scopes[index]; |
| const { 0: l, 1: c } = next; |
| if (l > endLine || (l === endLine && c >= endColumn)) { |
| break; |
| } |
| index = _encodeOriginalScopes(scopes, index, writer, state); |
| } |
| writer.write(comma); |
| state[0] = encodeInteger(writer, endLine, state[0]); |
| encodeInteger(writer, endColumn, 0); |
| return index; |
| } |
| function decodeGeneratedRanges(input) { |
| const { length } = input; |
| const reader = new StringReader(input); |
| const ranges = []; |
| const stack = []; |
| let genLine = 0; |
| let definitionSourcesIndex = 0; |
| let definitionScopeIndex = 0; |
| let callsiteSourcesIndex = 0; |
| let callsiteLine = 0; |
| let callsiteColumn = 0; |
| let bindingLine = 0; |
| let bindingColumn = 0; |
| do { |
| const semi = reader.indexOf(';'); |
| let genColumn = 0; |
| for (; reader.pos < semi; reader.pos++) { |
| genColumn = decodeInteger(reader, genColumn); |
| if (!hasMoreVlq(reader, semi)) { |
| const last = stack.pop(); |
| last[2] = genLine; |
| last[3] = genColumn; |
| continue; |
| } |
| const fields = decodeInteger(reader, 0); |
| const hasDefinition = fields & 0b0001; |
| const hasCallsite = fields & 0b0010; |
| const hasScope = fields & 0b0100; |
| let callsite = null; |
| let bindings = EMPTY; |
| let range; |
| if (hasDefinition) { |
| const defSourcesIndex = decodeInteger(reader, definitionSourcesIndex); |
| definitionScopeIndex = decodeInteger(reader, definitionSourcesIndex === defSourcesIndex ? definitionScopeIndex : 0); |
| definitionSourcesIndex = defSourcesIndex; |
| range = [genLine, genColumn, 0, 0, defSourcesIndex, definitionScopeIndex]; |
| } |
| else { |
| range = [genLine, genColumn, 0, 0]; |
| } |
| range.isScope = !!hasScope; |
| if (hasCallsite) { |
| const prevCsi = callsiteSourcesIndex; |
| const prevLine = callsiteLine; |
| callsiteSourcesIndex = decodeInteger(reader, callsiteSourcesIndex); |
| const sameSource = prevCsi === callsiteSourcesIndex; |
| callsiteLine = decodeInteger(reader, sameSource ? callsiteLine : 0); |
| callsiteColumn = decodeInteger(reader, sameSource && prevLine === callsiteLine ? callsiteColumn : 0); |
| callsite = [callsiteSourcesIndex, callsiteLine, callsiteColumn]; |
| } |
| range.callsite = callsite; |
| if (hasMoreVlq(reader, semi)) { |
| bindings = []; |
| do { |
| bindingLine = genLine; |
| bindingColumn = genColumn; |
| const expressionsCount = decodeInteger(reader, 0); |
| let expressionRanges; |
| if (expressionsCount < -1) { |
| expressionRanges = [[decodeInteger(reader, 0)]]; |
| for (let i = -1; i > expressionsCount; i--) { |
| const prevBl = bindingLine; |
| bindingLine = decodeInteger(reader, bindingLine); |
| bindingColumn = decodeInteger(reader, bindingLine === prevBl ? bindingColumn : 0); |
| const expression = decodeInteger(reader, 0); |
| expressionRanges.push([expression, bindingLine, bindingColumn]); |
| } |
| } |
| else { |
| expressionRanges = [[expressionsCount]]; |
| } |
| bindings.push(expressionRanges); |
| } while (hasMoreVlq(reader, semi)); |
| } |
| range.bindings = bindings; |
| ranges.push(range); |
| stack.push(range); |
| } |
| genLine++; |
| reader.pos = semi + 1; |
| } while (reader.pos < length); |
| return ranges; |
| } |
| function encodeGeneratedRanges(ranges) { |
| if (ranges.length === 0) |
| return ''; |
| const writer = new StringWriter(); |
| for (let i = 0; i < ranges.length;) { |
| i = _encodeGeneratedRanges(ranges, i, writer, [0, 0, 0, 0, 0, 0, 0]); |
| } |
| return writer.flush(); |
| } |
| function _encodeGeneratedRanges(ranges, index, writer, state) { |
| const range = ranges[index]; |
| const { 0: startLine, 1: startColumn, 2: endLine, 3: endColumn, isScope, callsite, bindings, } = range; |
| if (state[0] < startLine) { |
| catchupLine(writer, state[0], startLine); |
| state[0] = startLine; |
| state[1] = 0; |
| } |
| else if (index > 0) { |
| writer.write(comma); |
| } |
| state[1] = encodeInteger(writer, range[1], state[1]); |
| const fields = (range.length === 6 ? 0b0001 : 0) | (callsite ? 0b0010 : 0) | (isScope ? 0b0100 : 0); |
| encodeInteger(writer, fields, 0); |
| if (range.length === 6) { |
| const { 4: sourcesIndex, 5: scopesIndex } = range; |
| if (sourcesIndex !== state[2]) { |
| state[3] = 0; |
| } |
| state[2] = encodeInteger(writer, sourcesIndex, state[2]); |
| state[3] = encodeInteger(writer, scopesIndex, state[3]); |
| } |
| if (callsite) { |
| const { 0: sourcesIndex, 1: callLine, 2: callColumn } = range.callsite; |
| if (sourcesIndex !== state[4]) { |
| state[5] = 0; |
| state[6] = 0; |
| } |
| else if (callLine !== state[5]) { |
| state[6] = 0; |
| } |
| state[4] = encodeInteger(writer, sourcesIndex, state[4]); |
| state[5] = encodeInteger(writer, callLine, state[5]); |
| state[6] = encodeInteger(writer, callColumn, state[6]); |
| } |
| if (bindings) { |
| for (const binding of bindings) { |
| if (binding.length > 1) |
| encodeInteger(writer, -binding.length, 0); |
| const expression = binding[0][0]; |
| encodeInteger(writer, expression, 0); |
| let bindingStartLine = startLine; |
| let bindingStartColumn = startColumn; |
| for (let i = 1; i < binding.length; i++) { |
| const expRange = binding[i]; |
| bindingStartLine = encodeInteger(writer, expRange[1], bindingStartLine); |
| bindingStartColumn = encodeInteger(writer, expRange[2], bindingStartColumn); |
| encodeInteger(writer, expRange[0], 0); |
| } |
| } |
| } |
| for (index++; index < ranges.length;) { |
| const next = ranges[index]; |
| const { 0: l, 1: c } = next; |
| if (l > endLine || (l === endLine && c >= endColumn)) { |
| break; |
| } |
| index = _encodeGeneratedRanges(ranges, index, writer, state); |
| } |
| if (state[0] < endLine) { |
| catchupLine(writer, state[0], endLine); |
| state[0] = endLine; |
| state[1] = 0; |
| } |
| else { |
| writer.write(comma); |
| } |
| state[1] = encodeInteger(writer, endColumn, state[1]); |
| return index; |
| } |
| function catchupLine(writer, lastLine, line) { |
| do { |
| writer.write(semicolon); |
| } while (++lastLine < line); |
| } |
| |
| function decode(mappings) { |
| const { length } = mappings; |
| const reader = new StringReader(mappings); |
| const decoded = []; |
| let genColumn = 0; |
| let sourcesIndex = 0; |
| let sourceLine = 0; |
| let sourceColumn = 0; |
| let namesIndex = 0; |
| do { |
| const semi = reader.indexOf(';'); |
| const line = []; |
| let sorted = true; |
| let lastCol = 0; |
| genColumn = 0; |
| while (reader.pos < semi) { |
| let seg; |
| genColumn = decodeInteger(reader, genColumn); |
| if (genColumn < lastCol) |
| sorted = false; |
| lastCol = genColumn; |
| if (hasMoreVlq(reader, semi)) { |
| sourcesIndex = decodeInteger(reader, sourcesIndex); |
| sourceLine = decodeInteger(reader, sourceLine); |
| sourceColumn = decodeInteger(reader, sourceColumn); |
| if (hasMoreVlq(reader, semi)) { |
| namesIndex = decodeInteger(reader, namesIndex); |
| seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]; |
| } |
| else { |
| seg = [genColumn, sourcesIndex, sourceLine, sourceColumn]; |
| } |
| } |
| else { |
| seg = [genColumn]; |
| } |
| line.push(seg); |
| reader.pos++; |
| } |
| if (!sorted) |
| sort(line); |
| decoded.push(line); |
| reader.pos = semi + 1; |
| } while (reader.pos <= length); |
| return decoded; |
| } |
| function sort(line) { |
| line.sort(sortComparator); |
| } |
| function sortComparator(a, b) { |
| return a[0] - b[0]; |
| } |
| function encode(decoded) { |
| const writer = new StringWriter(); |
| let sourcesIndex = 0; |
| let sourceLine = 0; |
| let sourceColumn = 0; |
| let namesIndex = 0; |
| for (let i = 0; i < decoded.length; i++) { |
| const line = decoded[i]; |
| if (i > 0) |
| writer.write(semicolon); |
| if (line.length === 0) |
| continue; |
| let genColumn = 0; |
| for (let j = 0; j < line.length; j++) { |
| const segment = line[j]; |
| if (j > 0) |
| writer.write(comma); |
| genColumn = encodeInteger(writer, segment[0], genColumn); |
| if (segment.length === 1) |
| continue; |
| sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex); |
| sourceLine = encodeInteger(writer, segment[2], sourceLine); |
| sourceColumn = encodeInteger(writer, segment[3], sourceColumn); |
| if (segment.length === 4) |
| continue; |
| namesIndex = encodeInteger(writer, segment[4], namesIndex); |
| } |
| } |
| return writer.flush(); |
| } |
| |
| exports.decode = decode; |
| exports.decodeGeneratedRanges = decodeGeneratedRanges; |
| exports.decodeOriginalScopes = decodeOriginalScopes; |
| exports.encode = encode; |
| exports.encodeGeneratedRanges = encodeGeneratedRanges; |
| exports.encodeOriginalScopes = encodeOriginalScopes; |
| |
| Object.defineProperty(exports, '__esModule', { value: true }); |
| |
| })); |
| //# sourceMappingURL=sourcemap-codec.umd.js.map |