| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const CodeNode = require("./CodeNode");const SourceNode = require("./SourceNode");const MappingsContext = require("./MappingsContext");const getNumberOfLines = require("./helpers").getNumberOfLines;class SourceListMap {	constructor(generatedCode, source, originalSource) {		if(Array.isArray(generatedCode)) {			this.children = generatedCode;		} else {			this.children = [];			if(generatedCode || source)				this.add(generatedCode, source, originalSource);		}	}	add(generatedCode, source, originalSource) {		if(typeof generatedCode === "string") {			if(source) {				this.children.push(new SourceNode(generatedCode, source, originalSource));			} else if(this.children.length > 0 && this.children[this.children.length - 1] instanceof CodeNode) {				this.children[this.children.length - 1].addGeneratedCode(generatedCode);			} else {				this.children.push(new CodeNode(generatedCode));			}		} else if(generatedCode.getMappings && generatedCode.getGeneratedCode) {			this.children.push(generatedCode);		} else if(generatedCode.children) {			generatedCode.children.forEach(function(sln) {				this.children.push(sln);			}, this);		} else {			throw new Error("Invalid arguments to SourceListMap.protfotype.add: Expected string, Node or SourceListMap");		}	};	preprend(generatedCode, source, originalSource) {		if(typeof generatedCode === "string") {			if(source) {				this.children.unshift(new SourceNode(generatedCode, source, originalSource));			} else if(this.children.length > 0 && this.children[this.children.length - 1].preprendGeneratedCode) {				this.children[this.children.length - 1].preprendGeneratedCode(generatedCode);			} else {				this.children.unshift(new CodeNode(generatedCode));			}		} else if(generatedCode.getMappings && generatedCode.getGeneratedCode) {			this.children.unshift(generatedCode);		} else if(generatedCode.children) {			generatedCode.children.slice().reverse().forEach(function(sln) {				this.children.unshift(sln);			}, this);		} else {			throw new Error("Invalid arguments to SourceListMap.protfotype.prerend: Expected string, Node or SourceListMap");		}	};	mapGeneratedCode(fn) {		const normalizedNodes = [];		this.children.forEach(function(sln) {			sln.getNormalizedNodes().forEach(function(newNode) {				normalizedNodes.push(newNode);			});		});		const optimizedNodes = [];		normalizedNodes.forEach(function(sln) {			sln = sln.mapGeneratedCode(fn);			if(optimizedNodes.length === 0) {				optimizedNodes.push(sln);			} else {				const last = optimizedNodes[optimizedNodes.length - 1];				const mergedNode = last.merge(sln);				if(mergedNode) {					optimizedNodes[optimizedNodes.length - 1] = mergedNode;				} else {					optimizedNodes.push(sln);				}			}		});		return new SourceListMap(optimizedNodes);	};	toString() {		return this.children.map(function(sln) {			return sln.getGeneratedCode();		}).join("");	};	toStringWithSourceMap(options) {		const mappingsContext = new MappingsContext();		const source = this.children.map(function(sln) {			return sln.getGeneratedCode();		}).join("");		const mappings = this.children.map(function(sln) {			return sln.getMappings(mappingsContext);		}).join("");		const arrays = mappingsContext.getArrays();		return {			source,			map: {				version: 3,				file: options && options.file,				sources: arrays.sources,				sourcesContent: mappingsContext.hasSourceContent ? arrays.sourcesContent : undefined,				mappings: mappings			}		};	}}module.exports = SourceListMap;
 |