aboutsummaryrefslogtreecommitdiff
path: root/node_modules/source-list-map/lib/SourceListMap.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/source-list-map/lib/SourceListMap.js')
-rw-r--r--node_modules/source-list-map/lib/SourceListMap.js117
1 files changed, 117 insertions, 0 deletions
diff --git a/node_modules/source-list-map/lib/SourceListMap.js b/node_modules/source-list-map/lib/SourceListMap.js
new file mode 100644
index 00000000..575b2d71
--- /dev/null
+++ b/node_modules/source-list-map/lib/SourceListMap.js
@@ -0,0 +1,117 @@
+/*
+ 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;