| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 | 
							- /*
 
- 	MIT License http://www.opensource.org/licenses/mit-license.php
 
- 	Author Tobias Koppers @sokra
 
- */
 
- "use strict";
 
- const ALPHABET =
 
- 	"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
 
- const CONTINUATION_BIT = 0x20;
 
- const END_SEGMENT_BIT = 0x40;
 
- const NEXT_LINE = END_SEGMENT_BIT | 0x01;
 
- const INVALID = END_SEGMENT_BIT | 0x02;
 
- const DATA_MASK = 0x1f;
 
- const ccToValue = new Uint8Array("z".charCodeAt(0) + 1);
 
- ccToValue.fill(INVALID);
 
- for (let i = 0; i < ALPHABET.length; i++) {
 
- 	ccToValue[ALPHABET.charCodeAt(i)] = i;
 
- }
 
- ccToValue[",".charCodeAt(0)] = END_SEGMENT_BIT;
 
- ccToValue[";".charCodeAt(0)] = NEXT_LINE;
 
- const ccMax = ccToValue.length - 1;
 
- /** @typedef {(generatedLine: number, generatedColumn: number, sourceIndex: number, originalLine: number, originalColumn: number, nameIndex: number) => void} OnMapping */
 
- /**
 
-  * @param {string} mappings the mappings string
 
-  * @param {OnMapping} onMapping called for each mapping
 
-  * @returns {void}
 
-  */
 
- const readMappings = (mappings, onMapping) => {
 
- 	// generatedColumn, [sourceIndex, originalLine, orignalColumn, [nameIndex]]
 
- 	const currentData = new Uint32Array([0, 0, 1, 0, 0]);
 
- 	let currentDataPos = 0;
 
- 	// currentValue will include a sign bit at bit 0
 
- 	let currentValue = 0;
 
- 	let currentValuePos = 0;
 
- 	let generatedLine = 1;
 
- 	let generatedColumn = -1;
 
- 	for (let i = 0; i < mappings.length; i++) {
 
- 		const cc = mappings.charCodeAt(i);
 
- 		if (cc > ccMax) continue;
 
- 		const value = ccToValue[cc];
 
- 		if ((value & END_SEGMENT_BIT) !== 0) {
 
- 			// End current segment
 
- 			if (currentData[0] > generatedColumn) {
 
- 				if (currentDataPos === 1) {
 
- 					onMapping(generatedLine, currentData[0], -1, -1, -1, -1);
 
- 				} else if (currentDataPos === 4) {
 
- 					onMapping(
 
- 						generatedLine,
 
- 						currentData[0],
 
- 						currentData[1],
 
- 						currentData[2],
 
- 						currentData[3],
 
- 						-1,
 
- 					);
 
- 				} else if (currentDataPos === 5) {
 
- 					onMapping(
 
- 						generatedLine,
 
- 						currentData[0],
 
- 						currentData[1],
 
- 						currentData[2],
 
- 						currentData[3],
 
- 						currentData[4],
 
- 					);
 
- 				}
 
- 				[generatedColumn] = currentData;
 
- 			}
 
- 			currentDataPos = 0;
 
- 			if (value === NEXT_LINE) {
 
- 				// Start new line
 
- 				generatedLine++;
 
- 				currentData[0] = 0;
 
- 				generatedColumn = -1;
 
- 			}
 
- 		} else if ((value & CONTINUATION_BIT) === 0) {
 
- 			// last sextet
 
- 			currentValue |= value << currentValuePos;
 
- 			const finalValue =
 
- 				currentValue & 1 ? -(currentValue >> 1) : currentValue >> 1;
 
- 			currentData[currentDataPos++] += finalValue;
 
- 			currentValuePos = 0;
 
- 			currentValue = 0;
 
- 		} else {
 
- 			currentValue |= (value & DATA_MASK) << currentValuePos;
 
- 			currentValuePos += 5;
 
- 		}
 
- 	}
 
- 	// End current segment
 
- 	if (currentDataPos === 1) {
 
- 		onMapping(generatedLine, currentData[0], -1, -1, -1, -1);
 
- 	} else if (currentDataPos === 4) {
 
- 		onMapping(
 
- 			generatedLine,
 
- 			currentData[0],
 
- 			currentData[1],
 
- 			currentData[2],
 
- 			currentData[3],
 
- 			-1,
 
- 		);
 
- 	} else if (currentDataPos === 5) {
 
- 		onMapping(
 
- 			generatedLine,
 
- 			currentData[0],
 
- 			currentData[1],
 
- 			currentData[2],
 
- 			currentData[3],
 
- 			currentData[4],
 
- 		);
 
- 	}
 
- };
 
- module.exports = readMappings;
 
 
  |