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
 |