1 | var charToInteger = {};
|
2 | var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
3 | for (var i = 0; i < chars.length; i++) {
|
4 | charToInteger[chars.charCodeAt(i)] = i;
|
5 | }
|
6 | function decode(mappings) {
|
7 | var generatedCodeColumn = 0;
|
8 | var sourceFileIndex = 0;
|
9 | var sourceCodeLine = 0;
|
10 | var sourceCodeColumn = 0;
|
11 | var nameIndex = 0;
|
12 | var decoded = [];
|
13 | var line = [];
|
14 | var segment = [];
|
15 | for (var i = 0, j = 0, shift = 0, value = 0, len = mappings.length; i < len; i++) {
|
16 | var c = mappings.charCodeAt(i);
|
17 | if (c === 44) {
|
18 | if (segment.length)
|
19 | line.push(new Int32Array(segment));
|
20 | segment = [];
|
21 | j = 0;
|
22 | }
|
23 | else if (c === 59) {
|
24 | if (segment.length)
|
25 | line.push(new Int32Array(segment));
|
26 | segment = [];
|
27 | j = 0;
|
28 | decoded.push(line);
|
29 | line = [];
|
30 | generatedCodeColumn = 0;
|
31 | }
|
32 | else {
|
33 | var integer = charToInteger[c];
|
34 | if (integer === undefined) {
|
35 | throw new Error('Invalid character (' + String.fromCharCode(c) + ')');
|
36 | }
|
37 | var hasContinuationBit = integer & 32;
|
38 | integer &= 31;
|
39 | value += integer << shift;
|
40 | if (hasContinuationBit) {
|
41 | shift += 5;
|
42 | }
|
43 | else {
|
44 | var shouldNegate = value & 1;
|
45 | value >>>= 1;
|
46 | if (shouldNegate) {
|
47 | value = -value;
|
48 | if (value === 0)
|
49 | value = -0x80000000;
|
50 | }
|
51 | if (j == 0) {
|
52 | generatedCodeColumn += value;
|
53 | segment.push(generatedCodeColumn);
|
54 | }
|
55 | else if (j === 1) {
|
56 | sourceFileIndex += value;
|
57 | segment.push(sourceFileIndex);
|
58 | }
|
59 | else if (j === 2) {
|
60 | sourceCodeLine += value;
|
61 | segment.push(sourceCodeLine);
|
62 | }
|
63 | else if (j === 3) {
|
64 | sourceCodeColumn += value;
|
65 | segment.push(sourceCodeColumn);
|
66 | }
|
67 | else if (j === 4) {
|
68 | nameIndex += value;
|
69 | segment.push(nameIndex);
|
70 | }
|
71 | j++;
|
72 | value = shift = 0;
|
73 | }
|
74 | }
|
75 | }
|
76 | if (segment.length)
|
77 | line.push(new Int32Array(segment));
|
78 | decoded.push(line);
|
79 | return decoded;
|
80 | }
|
81 | function encode(decoded) {
|
82 | var sourceFileIndex = 0;
|
83 | var sourceCodeLine = 0;
|
84 | var sourceCodeColumn = 0;
|
85 | var nameIndex = 0;
|
86 | var mappings = '';
|
87 | for (var i = 0; i < decoded.length; i++) {
|
88 | var line = decoded[i];
|
89 | if (i > 0)
|
90 | mappings += ';';
|
91 | if (line.length === 0)
|
92 | continue;
|
93 | var generatedCodeColumn = 0;
|
94 | var lineMappings = [];
|
95 | for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {
|
96 | var segment = line_1[_i];
|
97 | var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);
|
98 | generatedCodeColumn = segment[0];
|
99 | if (segment.length > 1) {
|
100 | segmentMappings +=
|
101 | encodeInteger(segment[1] - sourceFileIndex) +
|
102 | encodeInteger(segment[2] - sourceCodeLine) +
|
103 | encodeInteger(segment[3] - sourceCodeColumn);
|
104 | sourceFileIndex = segment[1];
|
105 | sourceCodeLine = segment[2];
|
106 | sourceCodeColumn = segment[3];
|
107 | }
|
108 | if (segment.length === 5) {
|
109 | segmentMappings += encodeInteger(segment[4] - nameIndex);
|
110 | nameIndex = segment[4];
|
111 | }
|
112 | lineMappings.push(segmentMappings);
|
113 | }
|
114 | mappings += lineMappings.join(',');
|
115 | }
|
116 | return mappings;
|
117 | }
|
118 | function encodeInteger(num) {
|
119 | var result = '';
|
120 | num = num < 0 ? (-num << 1) | 1 : num << 1;
|
121 | do {
|
122 | var clamped = num & 31;
|
123 | num >>>= 5;
|
124 | if (num > 0) {
|
125 | clamped |= 32;
|
126 | }
|
127 | result += chars[clamped];
|
128 | } while (num > 0);
|
129 | return result;
|
130 | }
|
131 |
|
132 | export { decode, encode };
|
133 |
|