| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const Source = require("./Source");const RawSource = require("./RawSource");const streamChunks = require("./helpers/streamChunks");const { getMap, getSourceAndMap } = require("./helpers/getFromStreamChunks");const REPLACE_REGEX = /\n(?=.|\s)/g;class PrefixSource extends Source {	constructor(prefix, source) {		super();		this._source =			typeof source === "string" || Buffer.isBuffer(source)				? new RawSource(source, true)				: source;		this._prefix = prefix;	}	getPrefix() {		return this._prefix;	}	original() {		return this._source;	}	source() {		const node = this._source.source();		const prefix = this._prefix;		return prefix + node.replace(REPLACE_REGEX, "\n" + prefix);	}	// TODO efficient buffer() implementation	map(options) {		return getMap(this, options);	}	sourceAndMap(options) {		return getSourceAndMap(this, options);	}	streamChunks(options, onChunk, onSource, onName) {		const prefix = this._prefix;		const prefixOffset = prefix.length;		const linesOnly = !!(options && options.columns === false);		const { generatedLine, generatedColumn, source } = streamChunks(			this._source,			options,			(				chunk,				generatedLine,				generatedColumn,				sourceIndex,				originalLine,				originalColumn,				nameIndex			) => {				if (generatedColumn !== 0) {					// In the middle of the line, we just adject the column					generatedColumn += prefixOffset;				} else if (chunk !== undefined) {					// At the start of the line, when we have source content					// add the prefix as generated mapping					// (in lines only mode we just add it to the original mapping					// for performance reasons)					if (linesOnly || sourceIndex < 0) {						chunk = prefix + chunk;					} else if (prefixOffset > 0) {						onChunk(prefix, generatedLine, generatedColumn, -1, -1, -1, -1);						generatedColumn += prefixOffset;					}				} else if (!linesOnly) {					// Without source content, we only need to adject the column info					// expect in lines only mode where prefix is added to original mapping					generatedColumn += prefixOffset;				}				onChunk(					chunk,					generatedLine,					generatedColumn,					sourceIndex,					originalLine,					originalColumn,					nameIndex				);			},			onSource,			onName		);		return {			generatedLine,			generatedColumn:				generatedColumn === 0 ? 0 : prefixOffset + generatedColumn,			source:				source !== undefined					? prefix + source.replace(REPLACE_REGEX, "\n" + prefix)					: undefined		};	}	updateHash(hash) {		hash.update("PrefixSource");		this._source.updateHash(hash);		hash.update(this._prefix);	}}module.exports = PrefixSource;
 |