You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							125 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
	
	
							125 lines
						
					
					
						
							4.1 KiB
						
					
					
				| 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
 |