123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- var charToInteger = {};
- var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
- for (var i = 0; i < chars.length; i++) {
- charToInteger[chars.charCodeAt(i)] = i;
- }
- function decode(mappings) {
- var decoded = [];
- var line = [];
- var segment = [
- 0,
- 0,
- 0,
- 0,
- 0,
- ];
- var j = 0;
- for (var i = 0, shift = 0, value = 0; i < mappings.length; i++) {
- var c = mappings.charCodeAt(i);
- if (c === 44) { // ","
- segmentify(line, segment, j);
- j = 0;
- }
- else if (c === 59) { // ";"
- segmentify(line, segment, j);
- j = 0;
- decoded.push(line);
- line = [];
- segment[0] = 0;
- }
- else {
- var integer = charToInteger[c];
- if (integer === undefined) {
- throw new Error('Invalid character (' + String.fromCharCode(c) + ')');
- }
- var hasContinuationBit = integer & 32;
- integer &= 31;
- value += integer << shift;
- if (hasContinuationBit) {
- shift += 5;
- }
- else {
- var shouldNegate = value & 1;
- value >>>= 1;
- if (shouldNegate) {
- value = value === 0 ? -0x80000000 : -value;
- }
- segment[j] += value;
- j++;
- value = shift = 0; // reset
- }
- }
- }
- segmentify(line, segment, j);
- decoded.push(line);
- return decoded;
- }
- function segmentify(line, segment, j) {
- // This looks ugly, but we're creating specialized arrays with a specific
- // length. This is much faster than creating a new array (which v8 expands to
- // a capacity of 17 after pushing the first item), or slicing out a subarray
- // (which is slow). Length 4 is assumed to be the most frequent, followed by
- // length 5 (since not everything will have an associated name), followed by
- // length 1 (it's probably rare for a source substring to not have an
- // associated segment data).
- if (j === 4)
- line.push([segment[0], segment[1], segment[2], segment[3]]);
- else if (j === 5)
- line.push([segment[0], segment[1], segment[2], segment[3], segment[4]]);
- else if (j === 1)
- line.push([segment[0]]);
- }
- function encode(decoded) {
- var sourceFileIndex = 0; // second field
- var sourceCodeLine = 0; // third field
- var sourceCodeColumn = 0; // fourth field
- var nameIndex = 0; // fifth field
- var mappings = '';
- for (var i = 0; i < decoded.length; i++) {
- var line = decoded[i];
- if (i > 0)
- mappings += ';';
- if (line.length === 0)
- continue;
- var generatedCodeColumn = 0; // first field
- var lineMappings = [];
- for (var _i = 0, line_1 = line; _i < line_1.length; _i++) {
- var segment = line_1[_i];
- var segmentMappings = encodeInteger(segment[0] - generatedCodeColumn);
- generatedCodeColumn = segment[0];
- if (segment.length > 1) {
- segmentMappings +=
- encodeInteger(segment[1] - sourceFileIndex) +
- encodeInteger(segment[2] - sourceCodeLine) +
- encodeInteger(segment[3] - sourceCodeColumn);
- sourceFileIndex = segment[1];
- sourceCodeLine = segment[2];
- sourceCodeColumn = segment[3];
- }
- if (segment.length === 5) {
- segmentMappings += encodeInteger(segment[4] - nameIndex);
- nameIndex = segment[4];
- }
- lineMappings.push(segmentMappings);
- }
- mappings += lineMappings.join(',');
- }
- return mappings;
- }
- function encodeInteger(num) {
- var result = '';
- num = num < 0 ? (-num << 1) | 1 : num << 1;
- do {
- var clamped = num & 31;
- num >>>= 5;
- if (num > 0) {
- clamped |= 32;
- }
- result += chars[clamped];
- } while (num > 0);
- return result;
- }
- export { decode, encode };
- //# sourceMappingURL=sourcemap-codec.es.js.map
|