source: frontend/node_modules/@jridgewell/sourcemap-codec/src/sourcemap-codec.ts

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 13 days ago

Fix frontend appearance

  • Property mode set to 100644
File size: 3.1 KB
Line 
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}
Note: See TracBrowser for help on using the repository browser.