| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const createMappingsSerializer = require("./createMappingsSerializer");/** @typedef {import("../Source").RawSourceMap} RawSourceMap *//** @typedef {import("../Source").SourceAndMap} SourceAndMap *//** @typedef {import("./streamChunks").Options} Options *//** @typedef {import("./streamChunks").StreamChunksFunction} StreamChunksFunction *//** @typedef {{ streamChunks: StreamChunksFunction }} SourceLikeWithStreamChunks *//** * @param {SourceLikeWithStreamChunks} inputSource input source * @param {Options=} options options * @returns {SourceAndMap} map */module.exports.getSourceAndMap = (inputSource, options) => {	let code = "";	let mappings = "";	/** @type {(string | null)[]} */	const potentialSources = [];	/** @type {(string | null)[]} */	const potentialSourcesContent = [];	/** @type {(string | null)[]} */	const potentialNames = [];	const addMapping = createMappingsSerializer(options);	const { source } = inputSource.streamChunks(		{ ...options, finalSource: true },		(			chunk,			generatedLine,			generatedColumn,			sourceIndex,			originalLine,			originalColumn,			nameIndex,		) => {			if (chunk !== undefined) code += chunk;			mappings += addMapping(				generatedLine,				generatedColumn,				sourceIndex,				originalLine,				originalColumn,				nameIndex,			);		},		(sourceIndex, source, sourceContent) => {			while (potentialSources.length < sourceIndex) {				potentialSources.push(null);			}			potentialSources[sourceIndex] = source;			if (sourceContent !== undefined) {				while (potentialSourcesContent.length < sourceIndex) {					potentialSourcesContent.push(null);				}				potentialSourcesContent[sourceIndex] = sourceContent;			}		},		(nameIndex, name) => {			while (potentialNames.length < nameIndex) {				potentialNames.push(null);			}			potentialNames[nameIndex] = name;		},	);	return {		source: source !== undefined ? source : code,		map:			mappings.length > 0				? {						version: 3,						file: "x",						mappings,						// We handle broken sources as `null`, in spec this field should be string, but no information what we should do in such cases if we change type it will be breaking change						sources: /** @type {string[]} */ (potentialSources),						sourcesContent:							potentialSourcesContent.length > 0								? /** @type {string[]} */ (potentialSourcesContent)								: undefined,						names: /** @type {string[]} */ (potentialNames),					}				: null,	};};/** * @param {SourceLikeWithStreamChunks} source source * @param {Options=} options options * @returns {RawSourceMap | null} map */module.exports.getMap = (source, options) => {	let mappings = "";	/** @type {(string | null)[]} */	const potentialSources = [];	/** @type {(string | null)[]} */	const potentialSourcesContent = [];	/** @type {(string | null)[]} */	const potentialNames = [];	const addMapping = createMappingsSerializer(options);	source.streamChunks(		{ ...options, source: false, finalSource: true },		(			chunk,			generatedLine,			generatedColumn,			sourceIndex,			originalLine,			originalColumn,			nameIndex,		) => {			mappings += addMapping(				generatedLine,				generatedColumn,				sourceIndex,				originalLine,				originalColumn,				nameIndex,			);		},		(sourceIndex, source, sourceContent) => {			while (potentialSources.length < sourceIndex) {				potentialSources.push(null);			}			potentialSources[sourceIndex] = source;			if (sourceContent !== undefined) {				while (potentialSourcesContent.length < sourceIndex) {					potentialSourcesContent.push(null);				}				potentialSourcesContent[sourceIndex] = sourceContent;			}		},		(nameIndex, name) => {			while (potentialNames.length < nameIndex) {				potentialNames.push(null);			}			potentialNames[nameIndex] = name;		},	);	return mappings.length > 0		? {				version: 3,				file: "x",				mappings,				// We handle broken sources as `null`, in spec this field should be string, but no information what we should do in such cases if we change type it will be breaking change				sources: /** @type {string[]} */ (potentialSources),				sourcesContent:					potentialSourcesContent.length > 0						? /** @type {string[]} */ (potentialSourcesContent)						: undefined,				names: /** @type {string[]} */ (potentialNames),			}		: null;};
 |