| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 | 
							- /*
 
- 	MIT License http://www.opensource.org/licenses/mit-license.php
 
- 	Author Tobias Koppers @sokra
 
- */
 
- "use strict";
 
- const RawSource = require("./RawSource");
 
- const Source = require("./Source");
 
- const { getMap, getSourceAndMap } = require("./helpers/getFromStreamChunks");
 
- const streamChunks = require("./helpers/streamChunks");
 
- /** @typedef {import("./Source").HashLike} HashLike */
 
- /** @typedef {import("./Source").MapOptions} MapOptions */
 
- /** @typedef {import("./Source").RawSourceMap} RawSourceMap */
 
- /** @typedef {import("./Source").SourceAndMap} SourceAndMap */
 
- /** @typedef {import("./Source").SourceValue} SourceValue */
 
- /** @typedef {import("./helpers/getGeneratedSourceInfo").GeneratedSourceInfo} GeneratedSourceInfo */
 
- /** @typedef {import("./helpers/streamChunks").OnChunk} OnChunk */
 
- /** @typedef {import("./helpers/streamChunks").OnName} OnName */
 
- /** @typedef {import("./helpers/streamChunks").OnSource} OnSource */
 
- /** @typedef {import("./helpers/streamChunks").Options} Options */
 
- const REPLACE_REGEX = /\n(?=.|\s)/g;
 
- class PrefixSource extends Source {
 
- 	/**
 
- 	 * @param {string} prefix prefix
 
- 	 * @param {string | Buffer | Source} source source
 
- 	 */
 
- 	constructor(prefix, source) {
 
- 		super();
 
- 		/**
 
- 		 * @private
 
- 		 * @type {Source}
 
- 		 */
 
- 		this._source =
 
- 			typeof source === "string" || Buffer.isBuffer(source)
 
- 				? new RawSource(source, true)
 
- 				: source;
 
- 		this._prefix = prefix;
 
- 	}
 
- 	getPrefix() {
 
- 		return this._prefix;
 
- 	}
 
- 	original() {
 
- 		return this._source;
 
- 	}
 
- 	/**
 
- 	 * @returns {SourceValue} source
 
- 	 */
 
- 	source() {
 
- 		const node = /** @type {string} */ (this._source.source());
 
- 		const prefix = this._prefix;
 
- 		return prefix + node.replace(REPLACE_REGEX, `\n${prefix}`);
 
- 	}
 
- 	// TODO efficient buffer() implementation
 
- 	/**
 
- 	 * @param {MapOptions=} options map options
 
- 	 * @returns {RawSourceMap | null} map
 
- 	 */
 
- 	map(options) {
 
- 		return getMap(this, options);
 
- 	}
 
- 	/**
 
- 	 * @param {MapOptions=} options map options
 
- 	 * @returns {SourceAndMap} source and map
 
- 	 */
 
- 	sourceAndMap(options) {
 
- 		return getSourceAndMap(this, options);
 
- 	}
 
- 	/**
 
- 	 * @param {Options} options options
 
- 	 * @param {OnChunk} onChunk called for each chunk of code
 
- 	 * @param {OnSource} onSource called for each source
 
- 	 * @param {OnName} onName called for each name
 
- 	 * @returns {GeneratedSourceInfo} generated source info
 
- 	 */
 
- 	streamChunks(options, onChunk, onSource, onName) {
 
- 		const prefix = this._prefix;
 
- 		const prefixOffset = prefix.length;
 
- 		const linesOnly = Boolean(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 + /** @type {number} */ (generatedColumn),
 
- 			source:
 
- 				source !== undefined
 
- 					? prefix + source.replace(REPLACE_REGEX, `\n${prefix}`)
 
- 					: undefined,
 
- 		};
 
- 	}
 
- 	/**
 
- 	 * @param {HashLike} hash hash
 
- 	 * @returns {void}
 
- 	 */
 
- 	updateHash(hash) {
 
- 		hash.update("PrefixSource");
 
- 		this._source.updateHash(hash);
 
- 		hash.update(this._prefix);
 
- 	}
 
- }
 
- module.exports = PrefixSource;
 
 
  |