| /* |
| MIT License http://www.opensource.org/licenses/mit-license.php |
| Author Tobias Koppers @sokra |
| */ |
| "use strict"; |
| |
| const getNumberOfLines = require("./helpers").getNumberOfLines; |
| const getUnfinishedLine = require("./helpers").getUnfinishedLine; |
| |
| class CodeNode { |
| constructor(generatedCode) { |
| this.generatedCode = generatedCode; |
| } |
| |
| clone() { |
| return new CodeNode(this.generatedCode); |
| } |
| |
| getGeneratedCode() { |
| return this.generatedCode; |
| } |
| |
| getMappings(mappingsContext) { |
| const lines = getNumberOfLines(this.generatedCode); |
| const mapping = Array(lines+1).join(";"); |
| if(lines > 0) { |
| mappingsContext.unfinishedGeneratedLine = getUnfinishedLine(this.generatedCode); |
| if(mappingsContext.unfinishedGeneratedLine > 0) { |
| return mapping + "A"; |
| } else { |
| return mapping; |
| } |
| } else { |
| const prevUnfinished = mappingsContext.unfinishedGeneratedLine; |
| mappingsContext.unfinishedGeneratedLine += getUnfinishedLine(this.generatedCode); |
| if(prevUnfinished === 0 && mappingsContext.unfinishedGeneratedLine > 0) { |
| return "A"; |
| } else { |
| return ""; |
| } |
| } |
| } |
| |
| addGeneratedCode(generatedCode) { |
| this.generatedCode += generatedCode; |
| } |
| |
| mapGeneratedCode(fn) { |
| const generatedCode = fn(this.generatedCode); |
| return new CodeNode(generatedCode); |
| } |
| |
| getNormalizedNodes() { |
| return [this]; |
| } |
| |
| merge(otherNode) { |
| if(otherNode instanceof CodeNode) { |
| this.generatedCode += otherNode.generatedCode; |
| return this; |
| } |
| return false; |
| } |
| } |
| |
| module.exports = CodeNode; |