66 lines
		
	
	
		
			1019 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			66 lines
		
	
	
		
			1019 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | import Node, { addNodeClass } from '../core/Node.js'; | ||
|  | 
 | ||
|  | class ConvertNode extends Node { | ||
|  | 
 | ||
|  | 	constructor( node, convertTo ) { | ||
|  | 
 | ||
|  | 		super(); | ||
|  | 
 | ||
|  | 		this.node = node; | ||
|  | 		this.convertTo = convertTo; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	getNodeType( builder ) { | ||
|  | 
 | ||
|  | 		const requestType = this.node.getNodeType( builder ); | ||
|  | 
 | ||
|  | 		let convertTo = null; | ||
|  | 
 | ||
|  | 		for ( const overloadingType of this.convertTo.split( '|' ) ) { | ||
|  | 
 | ||
|  | 			if ( convertTo === null || builder.getTypeLength( requestType ) === builder.getTypeLength( overloadingType ) ) { | ||
|  | 
 | ||
|  | 				convertTo = overloadingType; | ||
|  | 
 | ||
|  | 			} | ||
|  | 
 | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return convertTo; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	serialize( data ) { | ||
|  | 
 | ||
|  | 		super.serialize( data ); | ||
|  | 
 | ||
|  | 		data.convertTo = this.convertTo; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	deserialize( data ) { | ||
|  | 
 | ||
|  | 		super.deserialize( data ); | ||
|  | 
 | ||
|  | 		this.convertTo = data.convertTo; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	generate( builder, output ) { | ||
|  | 
 | ||
|  | 		const node = this.node; | ||
|  | 		const type = this.getNodeType( builder ); | ||
|  | 
 | ||
|  | 		const snippet = node.build( builder, type ); | ||
|  | 
 | ||
|  | 		return builder.format( snippet, type, output ); | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | export default ConvertNode; | ||
|  | 
 | ||
|  | addNodeClass( 'ConvertNode', ConvertNode ); |