import { Engine } from '../Execution/Engine.js'; import { FiberListenerInner } from '../Execution/Fiber.js'; import { IGraph } from '../Graphs/Graph.js'; import { Choices } from '../Sockets/Socket.js'; import { NodeConfiguration } from './Node.js'; import { INode } from './NodeInstance.js'; import { NodeCategory } from './Registry/NodeCategory.js'; import { NodeConfigurationDescription } from './Registry/NodeDescription.js'; export interface SocketDefinition { valueType: string; defaultValue?: any; choices?: Choices; label?: string; } export type SocketsMap = Record SocketDefinition)>; export type SocketListDefinition = SocketDefinition & { key: string; }; export type SocketsList = SocketListDefinition[]; export type SocketsGeneratorFromConfig = (nodeConfig: NodeConfiguration, graph: IGraph) => SocketsList; export type SocketsDefinition = SocketsMap | SocketsGeneratorFromConfig; export type NodeFactory = (graph: IGraph, config: NodeConfiguration, id: string) => INode; export interface IHasNodeFactory { readonly nodeFactory: NodeFactory; } export interface INodeDefinition extends IHasNodeFactory { category?: NodeCategory; typeName: string; otherTypeNames?: string[]; aliases?: string[]; helpDescription?: string; label?: string; in: TInput; out: TOutput; configuration?: TConfig; } export type SocketNames = TSockets extends SocketsMap ? keyof TSockets : any; export type Dependencies = Record; export type TriggeredFn = (params: { read(inValueName: SocketNames): T; write(outValueName: SocketNames, value: T): void; commit(outFlowName: SocketNames, fiberCompletedListener?: FiberListenerInner): void; outputSocketKeys: SocketNames[]; triggeringSocketName: keyof TInput; state: TState; engine?: Engine; node?: INode; graph: IGraph; configuration: NodeConfiguration; finished?: () => void; }) => StateReturn | Promise>; /** Flow Node Definition */ export type TriggeredParams = Parameters>[0]; export interface IHasInitialState { initialState: TState; } export interface IHasTriggered extends IHasInitialState { triggered: TriggeredFn; } export type StateReturn = TState extends undefined ? void : TState; export type EventNodeSetupParams = Omit, 'triggeringSocketName'>; export interface IHasInit { init: (params: EventNodeSetupParams) => StateReturn; } export interface IHasDispose { dispose: (params: { state: TState; graph: IGraph; }) => StateReturn; } export interface IFlowNodeDefinition extends INodeDefinition, IHasInitialState, IHasTriggered { } export interface IAsyncNodeDefinition extends INodeDefinition, IHasInitialState, IHasTriggered, IHasDispose { } type OmitFactoryAndType = Omit; export interface FunctionNodeExecParams { read(inValueName: SocketNames): T; write(outValueName: SocketNames, value: T): void; graph: IGraph; configuration: NodeConfiguration; } export interface IFunctionNodeDefinition extends INodeDefinition { exec: (params: FunctionNodeExecParams) => Promise | void; } export interface IEventNodeDefinition extends INodeDefinition, IHasInitialState, IHasInit, IHasDispose { } export declare function makeFlowNodeDefinition(definition: OmitFactoryAndType>): IFlowNodeDefinition; export declare function makeAsyncNodeDefinition(definition: OmitFactoryAndType>): IAsyncNodeDefinition; export declare function makeFunctionNodeDefinition(definition: OmitFactoryAndType>): IFunctionNodeDefinition; export declare function makeEventNodeDefinition(definition: OmitFactoryAndType>): IEventNodeDefinition; export { NodeCategory } from './Registry/NodeCategory.js';