| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 | 
							- /*
 
- 	MIT License http://www.opensource.org/licenses/mit-license.php
 
- 	Author Tobias Koppers @sokra
 
- */
 
- "use strict";
 
- /**
 
-  * @callback MappingsSerializer
 
-  * @param {number} generatedLine generated line
 
-  * @param {number} generatedColumn generated column
 
-  * @param {number} sourceIndex source index
 
-  * @param {number} originalLine original line
 
-  * @param {number} originalColumn generated line
 
-  * @param {number} nameIndex generated line
 
-  * @returns {string} result
 
-  */
 
- const ALPHABET = [
 
- 	..."ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
 
- ];
 
- const CONTINUATION_BIT = 0x20;
 
- const createFullMappingsSerializer = () => {
 
- 	let currentLine = 1;
 
- 	let currentColumn = 0;
 
- 	let currentSourceIndex = 0;
 
- 	let currentOriginalLine = 1;
 
- 	let currentOriginalColumn = 0;
 
- 	let currentNameIndex = 0;
 
- 	let activeMapping = false;
 
- 	let activeName = false;
 
- 	let initial = true;
 
- 	/** @type {MappingsSerializer} */
 
- 	return (
 
- 		generatedLine,
 
- 		generatedColumn,
 
- 		sourceIndex,
 
- 		originalLine,
 
- 		originalColumn,
 
- 		nameIndex,
 
- 	) => {
 
- 		if (activeMapping && currentLine === generatedLine) {
 
- 			// A mapping is still active
 
- 			if (
 
- 				sourceIndex === currentSourceIndex &&
 
- 				originalLine === currentOriginalLine &&
 
- 				originalColumn === currentOriginalColumn &&
 
- 				!activeName &&
 
- 				nameIndex < 0
 
- 			) {
 
- 				// avoid repeating the same original mapping
 
- 				return "";
 
- 			}
 
- 		}
 
- 		// No mapping is active
 
- 		else if (sourceIndex < 0) {
 
- 			// avoid writing unneccessary generated mappings
 
- 			return "";
 
- 		}
 
- 		/** @type {undefined | string} */
 
- 		let str;
 
- 		if (currentLine < generatedLine) {
 
- 			str = ";".repeat(generatedLine - currentLine);
 
- 			currentLine = generatedLine;
 
- 			currentColumn = 0;
 
- 			initial = false;
 
- 		} else if (initial) {
 
- 			str = "";
 
- 			initial = false;
 
- 		} else {
 
- 			str = ",";
 
- 		}
 
- 		/**
 
- 		 * @param {number} value value
 
- 		 * @returns {void}
 
- 		 */
 
- 		const writeValue = (value) => {
 
- 			const sign = (value >>> 31) & 1;
 
- 			const mask = value >> 31;
 
- 			const absValue = (value + mask) ^ mask;
 
- 			let data = (absValue << 1) | sign;
 
- 			for (;;) {
 
- 				const sextet = data & 0x1f;
 
- 				data >>= 5;
 
- 				if (data === 0) {
 
- 					str += ALPHABET[sextet];
 
- 					break;
 
- 				} else {
 
- 					str += ALPHABET[sextet | CONTINUATION_BIT];
 
- 				}
 
- 			}
 
- 		};
 
- 		writeValue(generatedColumn - currentColumn);
 
- 		currentColumn = generatedColumn;
 
- 		if (sourceIndex >= 0) {
 
- 			activeMapping = true;
 
- 			if (sourceIndex === currentSourceIndex) {
 
- 				str += "A";
 
- 			} else {
 
- 				writeValue(sourceIndex - currentSourceIndex);
 
- 				currentSourceIndex = sourceIndex;
 
- 			}
 
- 			writeValue(originalLine - currentOriginalLine);
 
- 			currentOriginalLine = originalLine;
 
- 			if (originalColumn === currentOriginalColumn) {
 
- 				str += "A";
 
- 			} else {
 
- 				writeValue(originalColumn - currentOriginalColumn);
 
- 				currentOriginalColumn = originalColumn;
 
- 			}
 
- 			if (nameIndex >= 0) {
 
- 				writeValue(nameIndex - currentNameIndex);
 
- 				currentNameIndex = nameIndex;
 
- 				activeName = true;
 
- 			} else {
 
- 				activeName = false;
 
- 			}
 
- 		} else {
 
- 			activeMapping = false;
 
- 		}
 
- 		return str;
 
- 	};
 
- };
 
- const createLinesOnlyMappingsSerializer = () => {
 
- 	let lastWrittenLine = 0;
 
- 	let currentLine = 1;
 
- 	let currentSourceIndex = 0;
 
- 	let currentOriginalLine = 1;
 
- 	/** @type {MappingsSerializer} */
 
- 	return (
 
- 		generatedLine,
 
- 		_generatedColumn,
 
- 		sourceIndex,
 
- 		originalLine,
 
- 		_originalColumn,
 
- 		_nameIndex,
 
- 	) => {
 
- 		if (sourceIndex < 0) {
 
- 			// avoid writing generated mappings at all
 
- 			return "";
 
- 		}
 
- 		if (lastWrittenLine === generatedLine) {
 
- 			// avoid writing multiple original mappings per line
 
- 			return "";
 
- 		}
 
- 		/** @type {undefined | string} */
 
- 		let str;
 
- 		/**
 
- 		 * @param {number} value value
 
- 		 * @returns {void}
 
- 		 */
 
- 		const writeValue = (value) => {
 
- 			const sign = (value >>> 31) & 1;
 
- 			const mask = value >> 31;
 
- 			const absValue = (value + mask) ^ mask;
 
- 			let data = (absValue << 1) | sign;
 
- 			for (;;) {
 
- 				const sextet = data & 0x1f;
 
- 				data >>= 5;
 
- 				if (data === 0) {
 
- 					str += ALPHABET[sextet];
 
- 					break;
 
- 				} else {
 
- 					str += ALPHABET[sextet | CONTINUATION_BIT];
 
- 				}
 
- 			}
 
- 		};
 
- 		lastWrittenLine = generatedLine;
 
- 		if (generatedLine === currentLine + 1) {
 
- 			currentLine = generatedLine;
 
- 			if (sourceIndex === currentSourceIndex) {
 
- 				if (originalLine === currentOriginalLine + 1) {
 
- 					currentOriginalLine = originalLine;
 
- 					return ";AACA";
 
- 				}
 
- 				str = ";AA";
 
- 				writeValue(originalLine - currentOriginalLine);
 
- 				currentOriginalLine = originalLine;
 
- 				return `${str}A`;
 
- 			}
 
- 			str = ";A";
 
- 			writeValue(sourceIndex - currentSourceIndex);
 
- 			currentSourceIndex = sourceIndex;
 
- 			writeValue(originalLine - currentOriginalLine);
 
- 			currentOriginalLine = originalLine;
 
- 			return `${str}A`;
 
- 		}
 
- 		str = ";".repeat(generatedLine - currentLine);
 
- 		currentLine = generatedLine;
 
- 		if (sourceIndex === currentSourceIndex) {
 
- 			if (originalLine === currentOriginalLine + 1) {
 
- 				currentOriginalLine = originalLine;
 
- 				return `${str}AACA`;
 
- 			}
 
- 			str += "AA";
 
- 			writeValue(originalLine - currentOriginalLine);
 
- 			currentOriginalLine = originalLine;
 
- 			return `${str}A`;
 
- 		}
 
- 		str += "A";
 
- 		writeValue(sourceIndex - currentSourceIndex);
 
- 		currentSourceIndex = sourceIndex;
 
- 		writeValue(originalLine - currentOriginalLine);
 
- 		currentOriginalLine = originalLine;
 
- 		return `${str}A`;
 
- 	};
 
- };
 
- /**
 
-  * @param {{ columns?: boolean }=} options options
 
-  * @returns {MappingsSerializer} mappings serializer
 
-  */
 
- const createMappingsSerializer = (options) => {
 
- 	const linesOnly = options && options.columns === false;
 
- 	return linesOnly
 
- 		? createLinesOnlyMappingsSerializer()
 
- 		: createFullMappingsSerializer();
 
- };
 
- module.exports = createMappingsSerializer;
 
 
  |