import { Node } from '../core/Node.js'; class SwitchNode extends Node { constructor( node, components ) { super(); this.node = node; this.components = components || 'x'; } getType( builder ) { return builder.getTypeFromLength( this.components.length ); } generate( builder, output ) { const type = this.node.getType( builder ), inputLength = builder.getTypeLength( type ) - 1; let node = this.node.build( builder, type ); if ( inputLength > 0 ) { // get max length let outputLength = 0; const components = builder.colorToVectorProperties( this.components ); let i; const len = components.length; for ( i = 0; i < len; i ++ ) { outputLength = Math.max( outputLength, builder.getIndexByElement( components.charAt( i ) ) ); } if ( outputLength > inputLength ) outputLength = inputLength; // split node += '.'; for ( i = 0; i < len; i ++ ) { let idx = builder.getIndexByElement( components.charAt( i ) ); if ( idx > outputLength ) idx = outputLength; node += builder.getElementByIndex( idx ); } return builder.format( node, this.getType( builder ), output ); } else { // join return builder.format( node, type, output ); } } copy( source ) { super.copy( source ); this.node = source.node; this.components = source.components; return this; } toJSON( meta ) { let data = this.getJSONNode( meta ); if ( ! data ) { data = this.createJSONNode( meta ); data.node = this.node.toJSON( meta ).uuid; data.components = this.components; } return data; } } SwitchNode.prototype.nodeType = 'Switch'; export { SwitchNode };