| /* | 
|     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 |