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.
		
		
		
		
		
			
		
			
				
					
					
						
							136 lines
						
					
					
						
							4.6 KiB
						
					
					
				
			
		
		
	
	
							136 lines
						
					
					
						
							4.6 KiB
						
					
					
				| (function (global, factory) {
 | |
| 	typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
 | |
| 	typeof define === 'function' && define.amd ? define(['exports'], factory) :
 | |
| 	(global = global || self, factory(global.sourcemapCodec = {}));
 | |
| }(this, function (exports) { 'use strict';
 | |
| 
 | |
| 	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;
 | |
| 	}
 | |
| 
 | |
| 	exports.decode = decode;
 | |
| 	exports.encode = encode;
 | |
| 
 | |
| 	Object.defineProperty(exports, '__esModule', { value: true });
 | |
| 
 | |
| }));
 | |
| //# sourceMappingURL=sourcemap-codec.umd.js.map
 |