CoolFace
Apppublic

sourav-das/stem-separator

sourceHugging Facemitupdated 6mo agoView on Hugging Face
3likes
sourcemap-codec.ts112 linesDownload Raw Back to src
1import { comma, decodeInteger, encodeInteger, hasMoreVlq, semicolon } from './vlq';2import { StringWriter, StringReader } from './strings';3 4export {5  decodeOriginalScopes,6  encodeOriginalScopes,7  decodeGeneratedRanges,8  encodeGeneratedRanges,9} from './scopes';10export type { OriginalScope, GeneratedRange, CallSite, BindingExpressionRange } from './scopes';11 12export type SourceMapSegment =13  | [number]14  | [number, number, number, number]15  | [number, number, number, number, number];16export type SourceMapLine = SourceMapSegment[];17export type SourceMapMappings = SourceMapLine[];18 19export function decode(mappings: string): SourceMapMappings {20  const { length } = mappings;21  const reader = new StringReader(mappings);22  const decoded: SourceMapMappings = [];23  let genColumn = 0;24  let sourcesIndex = 0;25  let sourceLine = 0;26  let sourceColumn = 0;27  let namesIndex = 0;28 29  do {30    const semi = reader.indexOf(';');31    const line: SourceMapLine = [];32    let sorted = true;33    let lastCol = 0;34    genColumn = 0;35 36    while (reader.pos < semi) {37      let seg: SourceMapSegment;38 39      genColumn = decodeInteger(reader, genColumn);40      if (genColumn < lastCol) sorted = false;41      lastCol = genColumn;42 43      if (hasMoreVlq(reader, semi)) {44        sourcesIndex = decodeInteger(reader, sourcesIndex);45        sourceLine = decodeInteger(reader, sourceLine);46        sourceColumn = decodeInteger(reader, sourceColumn);47 48        if (hasMoreVlq(reader, semi)) {49          namesIndex = decodeInteger(reader, namesIndex);50          seg = [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex];51        } else {52          seg = [genColumn, sourcesIndex, sourceLine, sourceColumn];53        }54      } else {55        seg = [genColumn];56      }57 58      line.push(seg);59      reader.pos++;60    }61 62    if (!sorted) sort(line);63    decoded.push(line);64    reader.pos = semi + 1;65  } while (reader.pos <= length);66 67  return decoded;68}69 70function sort(line: SourceMapSegment[]) {71  line.sort(sortComparator);72}73 74function sortComparator(a: SourceMapSegment, b: SourceMapSegment): number {75  return a[0] - b[0];76}77 78export function encode(decoded: SourceMapMappings): string;79export function encode(decoded: Readonly<SourceMapMappings>): string;80export function encode(decoded: Readonly<SourceMapMappings>): string {81  const writer = new StringWriter();82  let sourcesIndex = 0;83  let sourceLine = 0;84  let sourceColumn = 0;85  let namesIndex = 0;86 87  for (let i = 0; i < decoded.length; i++) {88    const line = decoded[i];89    if (i > 0) writer.write(semicolon);90    if (line.length === 0) continue;91 92    let genColumn = 0;93 94    for (let j = 0; j < line.length; j++) {95      const segment = line[j];96      if (j > 0) writer.write(comma);97 98      genColumn = encodeInteger(writer, segment[0], genColumn);99 100      if (segment.length === 1) continue;101      sourcesIndex = encodeInteger(writer, segment[1], sourcesIndex);102      sourceLine = encodeInteger(writer, segment[2], sourceLine);103      sourceColumn = encodeInteger(writer, segment[3], sourceColumn);104 105      if (segment.length === 4) continue;106      namesIndex = encodeInteger(writer, segment[4], namesIndex);107    }108  }109 110  return writer.flush();111}112