import { ContextDependency, GraphAction, GraphNode, GraphOperation, NodeData, NodeDefinition, NodeDependency, NodeExecutionContext, NodeName, NodeProperties, NodeState, OperationName, SerializedNodeProperties, StatefulGraphNode, StatefulNodeType, StatelessNodeType, StaticNodeType } from '../types/graph'; import { ShapeFields } from '../types/matchers'; export declare type NodeTypeDefinition = StaticNodeTypeDefinition | StatelessNodeTypeDefinition | StatefulNodeTypeDefinition; export declare type OperationHandlerDefinition = StatelessOperationHandlerDefinition | StatefulOperationHandlerDefinition; export interface StaticNodeTypeDefinition

{ shape: ShapeFields

; serialize?: false | ((value: P, serialize: (node: NodeDefinition) => T) => V); deserialize?: false | ((properties: V, deserialize: (node: T) => NodeDefinition) => P); getType?: (properties: P, getType: (value: any) => string) => string; } export interface StatelessNodeTypeDefinition extends StaticNodeTypeDefinition { operations?: { [K in M]: StatelessOperationHandlerDefinition>; }; } export interface StatelessOperationHandlerDefinition = GraphOperation> { cacheable?: boolean; getDependencies?: (properties: P, options: O) => Array; getContextDependencies?: (properties: P, options: O) => Array; run(node: GraphNode, operation: O, dependencies: Array, context: Array): NodeDefinition | GraphNode | GraphAction; } export interface StatefulNodeTypeDefinition extends StaticNodeTypeDefinition { state: ShapeFields; getInitialState(properties: P): S; onSubscribe?(this: NodeExecutionContext, node: StatefulGraphNode): void; onUpdate?(this: NodeExecutionContext, node: StatefulGraphNode, dependencies: Array, previousDependencies: Array): void; onUnsubscribe?(this: NodeExecutionContext, node: StatefulGraphNode): void; operations?: { [K in M]: StatefulOperationHandlerDefinition>; }; } export interface StatefulOperationHandlerDefinition = GraphOperation> { cacheable?: boolean; getDependencies?: (properties: P, options: O) => Array; getContextDependencies?: (properties: P, options: O) => Array; run(node: GraphNode, operation: O, dependencies: Array, context: Array, state: S): NodeDefinition | GraphNode | GraphAction; onInvalidate?(this: NodeExecutionContext, node: StatefulGraphNode>, operation: O): void; onSubscribe?(this: NodeExecutionContext, node: StatefulGraphNode>, operation: O): void; onUpdate?(this: NodeExecutionContext, node: StatefulGraphNode>, operation: O, dependencies: Array, contextDependencies: Array, previousDependencies: Array | undefined): void; onUnsubscribe?(this: NodeExecutionContext, node: StatefulGraphNode>, operation: O): void; } export declare function createNodeType(name: T): StaticNodeType; export declare function createNodeType(name: T, definition: StaticNodeTypeDefinition): StaticNodeType; export declare function createNodeType(name: T, definition: StatelessNodeTypeDefinition): StatelessNodeType; export declare function createNodeType = GraphOperation>(name: T, definition: Omit, 'shape'>): StatelessNodeType; export declare function createNodeType = GraphOperation>(name: T, definition: StatefulNodeTypeDefinition): StatefulNodeType;