import { INode , INodeCredentials , INodeParameters , INodePropertyOptions , INodeTypeNameVersion , INodeTypes , IWorkflowExecuteAdditionalData , Workflow , } from 'n8n-workflow' ; import { NodeExecuteFunctions } from '.' ; const TEMP_NODE_NAME = 'Temp-Node' ; const TEMP_WORKFLOW_NAME = 'Temp-Workflow' ; export class LoadNodeParameterOptions { path : string ; workflow : Workflow ; constructor ( nodeTypeNameAndVersion , nodeTypes , path , currentNodeParameters , credentials ? ) { const nodeType = nodeTypes . getByNameAndVersion ( nodeTypeNameAndVersion . name , nodeTypeNameAndVersion . version ) ; this . path = path ; if ( nodeType === undefined ) { throw new Error ( `The node-type "${ nodeTypeNameAndVersion . name } v${ nodeTypeNameAndVersion . version }"  is not known!` ) ; } const nodeData = { parameters : currentNodeParameters , name : TEMP_NODE_NAME , type : nodeTypeNameAndVersion . name , typeVersion : nodeTypeNameAndVersion . version , position : [ 0 , 0 ] , } ; if ( credentials ) { nodeData . credentials = credentials ; } const workflowData = { nodes : [ nodeData ] , connections : { } , } ; this . workflow = new Workflow ( { nodes : workflowData . nodes , connections : workflowData . connections , active : false , nodeTypes , } ) ; } returns memberof getWorkflowData ( ) { return { name : TEMP_WORKFLOW_NAME , active : false , connections : { } , nodes : Object . values ( this . workflow . nodes ) , createdAt : new Date ( ) , updatedAt : new Date ( ) , } ; } param { string } methodName param { IWorkflowExecuteAdditionalData } additionalData returns { Promise < INodePropertyOptions [ ] > } memberof async getOptions ( methodName , additionalData ) { const node = this . workflow . getNode ( TEMP_NODE_NAME ) ; const nodeType = this . workflow . nodeTypes . getByNameAndVersion ( node ! . type , node ?. typeVersion ) ; if ( ! nodeType || nodeType . methods === undefined || nodeType . methods . loadOptions === undefined || nodeType . methods . loadOptions [ methodName ] === undefined ) { throw new Error ( `The node-type "${ node ! . type }" does not have the method "${ methodName }" defined!` ) ; } const thisArgs = NodeExecuteFunctions . getLoadOptionsFunctions ( this . workflow , node ! , this . path , additionalData ) ; return nodeType . methods . loadOptions [ methodName ] . call ( thisArgs ) ; } }