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
			| 
											3 years ago
										 | 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
 |