diff options
Diffstat (limited to 'node_modules/source-list-map/lib/SingleLineNode.js')
| -rw-r--r-- | node_modules/source-list-map/lib/SingleLineNode.js | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/node_modules/source-list-map/lib/SingleLineNode.js b/node_modules/source-list-map/lib/SingleLineNode.js new file mode 100644 index 00000000..bbc1b5db --- /dev/null +++ b/node_modules/source-list-map/lib/SingleLineNode.js @@ -0,0 +1,93 @@ +/* + MIT License http://www.opensource.org/licenses/mit-license.php + Author Tobias Koppers @sokra +*/ +"use strict"; + +const base64VLQ = require("./base64-vlq"); +const getNumberOfLines = require("./helpers").getNumberOfLines; +const getUnfinishedLine = require("./helpers").getUnfinishedLine; + +const LINE_MAPPING = ";AAAA"; + +class SingleLineNode { + + constructor(generatedCode, source, originalSource, line) { + this.generatedCode = generatedCode; + this.originalSource = originalSource; + this.source = source; + this.line = line || 1; + this._numberOfLines = getNumberOfLines(this.generatedCode); + this._endsWithNewLine = generatedCode[generatedCode.length - 1] === "\n"; + } + + clone() { + return new SingleLineNode(this.generatedCode, this.source, this.originalSource, this.line); + } + + getGeneratedCode() { + return this.generatedCode; + } + + getMappings(mappingsContext) { + if(!this.generatedCode) + return ""; + const lines = this._numberOfLines; + const sourceIdx = mappingsContext.ensureSource(this.source, this.originalSource); + let mappings = "A"; // generated column 0 + if(mappingsContext.unfinishedGeneratedLine) + mappings = "," + base64VLQ.encode(mappingsContext.unfinishedGeneratedLine); + mappings += base64VLQ.encode(sourceIdx - mappingsContext.currentSource); // source index + mappings += base64VLQ.encode(this.line - mappingsContext.currentOriginalLine); // original line index + mappings += "A"; // original column 0 + mappingsContext.currentSource = sourceIdx; + mappingsContext.currentOriginalLine = this.line; + const unfinishedGeneratedLine = mappingsContext.unfinishedGeneratedLine = getUnfinishedLine(this.generatedCode) + mappings += Array(lines).join(LINE_MAPPING); + if(unfinishedGeneratedLine === 0) { + mappings += ";"; + } else { + if(lines !== 0) + mappings += LINE_MAPPING; + } + return mappings; + } + + getNormalizedNodes() { + return [this]; + } + + mapGeneratedCode(fn) { + const generatedCode = fn(this.generatedCode); + return new SingleLineNode(generatedCode, this.source, this.originalSource, this.line); + } + + merge(otherNode) { + if(otherNode instanceof SingleLineNode) { + return this.mergeSingleLineNode(otherNode); + } + return false; + } + + mergeSingleLineNode(otherNode) { + if(this.source === otherNode.source && + this.originalSource === otherNode.originalSource) { + if(this.line === otherNode.line) { + this.generatedCode += otherNode.generatedCode; + this._numberOfLines += otherNode._numberOfLines; + this._endsWithNewLine = otherNode._endsWithNewLine; + return this; + } else if(this.line + 1 === otherNode.line && + this._endsWithNewLine && + this._numberOfLines === 1 && + otherNode._numberOfLines <= 1) { + return new SourceNode(this.generatedCode + otherNode.generatedCode, this.source, this.originalSource, this.line); + } + } + return false; + } +} + +module.exports = SingleLineNode; + +const SourceNode = require("./SourceNode"); // circular dependency |
