67 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
| 	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;
 |