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
							 |