Skip to content

⬅️ Back to Table of Contents

📄 ConvertNode.js

📊 Analysis Summary

Metric Count
🔧 Functions 4
🧱 Classes 1
📦 Imports 1
📊 Variables & Constants 2

📚 Table of Contents

🛠️ File Location:

📂 src/nodes/utils/ConvertNode.js

📦 Imports

Name Source
Node ../core/Node.js

Variables & Constants

Name Type Kind Value Exported
convertTo any let/var null
node Node let/var this.node

Functions

ConvertNode.getNodeType(builder: NodeBuilder): string

JSDoc:

/**
     * This method is overwritten since the implementation tries to infer the best
     * matching type from the {@link ConvertNode#convertTo} property.
     *
     * @param {NodeBuilder} builder - The current node builder.
     * @return {string} The node type.
     */

Parameters:

  • builder NodeBuilder

Returns: string

Calls:

  • this.node.getNodeType
  • this.convertTo.split
  • builder.getTypeLength
Code
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;

    }

ConvertNode.serialize(data: any): void

Parameters:

  • data any

Returns: void

Calls:

  • super.serialize
Code
serialize( data ) {

        super.serialize( data );

        data.convertTo = this.convertTo;

    }

ConvertNode.deserialize(data: any): void

Parameters:

  • data any

Returns: void

Calls:

  • super.deserialize
Code
deserialize( data ) {

        super.deserialize( data );

        this.convertTo = data.convertTo;

    }

ConvertNode.generate(builder: any, output: any): any

Parameters:

  • builder any
  • output any

Returns: any

Calls:

  • this.getNodeType
  • node.build
  • builder.format
Code
generate( builder, output ) {

        const node = this.node;
        const type = this.getNodeType( builder );

        const snippet = node.build( builder, type );

        return builder.format( snippet, type, output );

    }

Classes

ConvertNode

Class Code
class ConvertNode extends Node {

    static get type() {

        return 'ConvertNode';

    }

    /**
     * Constructs a new convert node.
     *
     * @param {Node} node - The node which type should be converted.
     * @param {string} convertTo - The target node type. Multiple types can be defined by separating them with a `|` sign.
     */
    constructor( node, convertTo ) {

        super();

        /**
         * The node which type should be converted.
         *
         * @type {Node}
         */
        this.node = node;

        /**
         * The target node type. Multiple types can be defined by separating them with a `|` sign.
         *
         * @type {string}
         */
        this.convertTo = convertTo;

    }

    /**
     * This method is overwritten since the implementation tries to infer the best
     * matching type from the {@link ConvertNode#convertTo} property.
     *
     * @param {NodeBuilder} builder - The current node builder.
     * @return {string} The node type.
     */
    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 );

    }

}

Methods

getNodeType(builder: NodeBuilder): string
Code
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: any): void
Code
serialize( data ) {

        super.serialize( data );

        data.convertTo = this.convertTo;

    }
deserialize(data: any): void
Code
deserialize( data ) {

        super.deserialize( data );

        this.convertTo = data.convertTo;

    }
generate(builder: any, output: any): any
Code
generate( builder, output ) {

        const node = this.node;
        const type = this.getNodeType( builder );

        const snippet = node.build( builder, type );

        return builder.format( snippet, type, output );

    }