import { Operation } from 'fast-json-patch'; import { PayloadAction } from '../../action'; import { FlavoredId } from '../../utils'; export type NodeId = FlavoredId; type Checkpoint = { type: 'checkpoint'; val: State; }; type Patches = { type: 'patch'; checkpointRef: NodeId; val: Array; }; export type StateLike = Checkpoint | Patches; /** * Node Artifact Type */ /** * Artifact Types */ export type ArtifactId = FlavoredId; export type Artifact = { id: ArtifactId; createdOn: number; val: unknown; }; export type NodeArtifact = Array; /** * Node Metadata Type */ export type MetadataId = FlavoredId; export type Metadata = { id: MetadataId; type: string; createdOn: number; val: T; }; type NodeMetadata = { annotation: Array>; bookmark: Array>; [key: string]: Array>; }; /** * Node Types */ type BaseNode = { label: string; id: NodeId; createdOn: number; artifacts: NodeArtifact; meta: NodeMetadata; children: NodeId[]; state: StateLike; level: number; }; export type RootNode = BaseNode & { event: 'Root'; }; export type SideEffects = { do: Array>; undo: Array>; }; export type StateNode = BaseNode & { event: Event; parent: NodeId; sideEffects: SideEffects; }; export type ProvenanceNode = RootNode | StateNode; export type Nodes = Record>; export declare function isStateNode(node: ProvenanceNode): node is StateNode; export declare function isRootNode(node: ProvenanceNode): node is RootNode; export declare function createRootNode(args: { state: State; initialMetadata?: Record; initialArtifact?: unknown; label?: string; }): RootNode; export declare function createStateNode({ parent, state, label, sideEffects, initialMetadata, initialArtifact, event, }: { parent: ProvenanceNode; state: StateLike; initialMetadata?: Record; initialArtifact?: unknown; label: string; sideEffects?: SideEffects; event: Event; }): StateNode; export {};