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