| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | 
							- /*
 
- 	MIT License http://www.opensource.org/licenses/mit-license.php
 
- 	Author Tobias Koppers @sokra
 
- */
 
- "use strict";
 
- const { getMap, getSourceAndMap } = require("./helpers/getFromStreamChunks");
 
- const splitIntoLines = require("./helpers/splitIntoLines");
 
- const getGeneratedSourceInfo = require("./helpers/getGeneratedSourceInfo");
 
- const Source = require("./Source");
 
- const splitIntoPotentialTokens = require("./helpers/splitIntoPotentialTokens");
 
- class OriginalSource extends Source {
 
- 	constructor(value, name) {
 
- 		super();
 
- 		const isBuffer = Buffer.isBuffer(value);
 
- 		this._value = isBuffer ? undefined : value;
 
- 		this._valueAsBuffer = isBuffer ? value : undefined;
 
- 		this._name = name;
 
- 	}
 
- 	getName() {
 
- 		return this._name;
 
- 	}
 
- 	source() {
 
- 		if (this._value === undefined) {
 
- 			this._value = this._valueAsBuffer.toString("utf-8");
 
- 		}
 
- 		return this._value;
 
- 	}
 
- 	buffer() {
 
- 		if (this._valueAsBuffer === undefined) {
 
- 			this._valueAsBuffer = Buffer.from(this._value, "utf-8");
 
- 		}
 
- 		return this._valueAsBuffer;
 
- 	}
 
- 	map(options) {
 
- 		return getMap(this, options);
 
- 	}
 
- 	sourceAndMap(options) {
 
- 		return getSourceAndMap(this, options);
 
- 	}
 
- 	/**
 
- 	 * @param {object} options options
 
- 	 * @param {function(string, number, number, number, number, number, number): void} onChunk called for each chunk of code
 
- 	 * @param {function(number, string, string)} onSource called for each source
 
- 	 * @param {function(number, string)} onName called for each name
 
- 	 * @returns {void}
 
- 	 */
 
- 	streamChunks(options, onChunk, onSource, onName) {
 
- 		if (this._value === undefined) {
 
- 			this._value = this._valueAsBuffer.toString("utf-8");
 
- 		}
 
- 		onSource(0, this._name, this._value);
 
- 		const finalSource = !!(options && options.finalSource);
 
- 		if (!options || options.columns !== false) {
 
- 			// With column info we need to read all lines and split them
 
- 			const matches = splitIntoPotentialTokens(this._value);
 
- 			let line = 1;
 
- 			let column = 0;
 
- 			if (matches !== null) {
 
- 				for (const match of matches) {
 
- 					const isEndOfLine = match.endsWith("\n");
 
- 					if (isEndOfLine && match.length === 1) {
 
- 						if (!finalSource) onChunk(match, line, column, -1, -1, -1, -1);
 
- 					} else {
 
- 						const chunk = finalSource ? undefined : match;
 
- 						onChunk(chunk, line, column, 0, line, column, -1);
 
- 					}
 
- 					if (isEndOfLine) {
 
- 						line++;
 
- 						column = 0;
 
- 					} else {
 
- 						column += match.length;
 
- 					}
 
- 				}
 
- 			}
 
- 			return {
 
- 				generatedLine: line,
 
- 				generatedColumn: column,
 
- 				source: finalSource ? this._value : undefined
 
- 			};
 
- 		} else if (finalSource) {
 
- 			// Without column info and with final source we only
 
- 			// need meta info to generate mapping
 
- 			const result = getGeneratedSourceInfo(this._value);
 
- 			const { generatedLine, generatedColumn } = result;
 
- 			if (generatedColumn === 0) {
 
- 				for (let line = 1; line < generatedLine; line++)
 
- 					onChunk(undefined, line, 0, 0, line, 0, -1);
 
- 			} else {
 
- 				for (let line = 1; line <= generatedLine; line++)
 
- 					onChunk(undefined, line, 0, 0, line, 0, -1);
 
- 			}
 
- 			return result;
 
- 		} else {
 
- 			// Without column info, but also without final source
 
- 			// we need to split source by lines
 
- 			let line = 1;
 
- 			const matches = splitIntoLines(this._value);
 
- 			let match;
 
- 			for (match of matches) {
 
- 				onChunk(finalSource ? undefined : match, line, 0, 0, line, 0, -1);
 
- 				line++;
 
- 			}
 
- 			return matches.length === 0 || match.endsWith("\n")
 
- 				? {
 
- 						generatedLine: matches.length + 1,
 
- 						generatedColumn: 0,
 
- 						source: finalSource ? this._value : undefined
 
- 				  }
 
- 				: {
 
- 						generatedLine: matches.length,
 
- 						generatedColumn: match.length,
 
- 						source: finalSource ? this._value : undefined
 
- 				  };
 
- 		}
 
- 	}
 
- 	updateHash(hash) {
 
- 		if (this._valueAsBuffer === undefined) {
 
- 			this._valueAsBuffer = Buffer.from(this._value, "utf-8");
 
- 		}
 
- 		hash.update("OriginalSource");
 
- 		hash.update(this._valueAsBuffer);
 
- 		hash.update(this._name || "");
 
- 	}
 
- }
 
- module.exports = OriginalSource;
 
 
  |