@bian-womp/spark-graph 0.3.88 → 0.3.90
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/index.cjs +9 -5
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/cjs/src/runtime/components/HandleResolver.d.ts.map +1 -1
- package/lib/cjs/src/runtime/components/NodeExecutor.d.ts.map +1 -1
- package/lib/esm/index.js +9 -5
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/esm/src/runtime/components/HandleResolver.d.ts.map +1 -1
- package/lib/esm/src/runtime/components/NodeExecutor.d.ts.map +1 -1
- package/lib/src/builder/GraphBuilder.d.ts +43 -0
- package/lib/src/builder/GraphBuilder.d.ts.map +1 -0
- package/lib/src/builder/GraphBuilder.js +279 -0
- package/lib/src/builder/GraphBuilder.js.map +1 -0
- package/lib/src/builder/Registry.d.ts +87 -0
- package/lib/src/builder/Registry.d.ts.map +1 -0
- package/lib/src/builder/Registry.js +390 -0
- package/lib/src/builder/Registry.js.map +1 -0
- package/lib/src/core/categories.d.ts +22 -0
- package/lib/src/core/categories.d.ts.map +1 -0
- package/lib/src/core/categories.js +2 -0
- package/lib/src/core/categories.js.map +1 -0
- package/lib/src/core/order.d.ts +7 -0
- package/lib/src/core/order.d.ts.map +1 -0
- package/lib/src/core/order.js +66 -0
- package/lib/src/core/order.js.map +1 -0
- package/lib/src/core/type-utils.d.ts +29 -0
- package/lib/src/core/type-utils.d.ts.map +1 -0
- package/lib/src/core/type-utils.js +92 -0
- package/lib/src/core/type-utils.js.map +1 -0
- package/lib/src/core/types.d.ts +95 -0
- package/lib/src/core/types.d.ts.map +1 -0
- package/lib/src/core/types.js +2 -0
- package/lib/src/core/types.js.map +1 -0
- package/lib/src/examples/arrays.d.ts +5 -0
- package/lib/src/examples/arrays.d.ts.map +1 -0
- package/lib/src/examples/arrays.js +49 -0
- package/lib/src/examples/arrays.js.map +1 -0
- package/lib/src/examples/async.d.ts +5 -0
- package/lib/src/examples/async.d.ts.map +1 -0
- package/lib/src/examples/async.js +91 -0
- package/lib/src/examples/async.js.map +1 -0
- package/lib/src/examples/progress.d.ts +5 -0
- package/lib/src/examples/progress.d.ts.map +1 -0
- package/lib/src/examples/progress.js +51 -0
- package/lib/src/examples/progress.js.map +1 -0
- package/lib/src/examples/run.d.ts +2 -0
- package/lib/src/examples/run.d.ts.map +1 -0
- package/lib/src/examples/run.js +32 -0
- package/lib/src/examples/run.js.map +1 -0
- package/lib/src/examples/runMode.d.ts +2 -0
- package/lib/src/examples/runMode.d.ts.map +1 -0
- package/lib/src/examples/runMode.js +223 -0
- package/lib/src/examples/runMode.js.map +1 -0
- package/lib/src/examples/shared.d.ts +5 -0
- package/lib/src/examples/shared.d.ts.map +1 -0
- package/lib/src/examples/shared.js +47 -0
- package/lib/src/examples/shared.js.map +1 -0
- package/lib/src/examples/simple.d.ts +5 -0
- package/lib/src/examples/simple.d.ts.map +1 -0
- package/lib/src/examples/simple.js +79 -0
- package/lib/src/examples/simple.js.map +1 -0
- package/lib/src/examples/snapshot.d.ts +4 -0
- package/lib/src/examples/snapshot.d.ts.map +1 -0
- package/lib/src/examples/snapshot.js +58 -0
- package/lib/src/examples/snapshot.js.map +1 -0
- package/lib/src/examples/validation.d.ts +5 -0
- package/lib/src/examples/validation.d.ts.map +1 -0
- package/lib/src/examples/validation.js +105 -0
- package/lib/src/examples/validation.js.map +1 -0
- package/lib/src/index.d.ts +27 -0
- package/lib/src/index.d.ts.map +1 -0
- package/lib/src/index.js +19 -0
- package/lib/src/index.js.map +1 -0
- package/lib/src/misc/base.d.ts +51 -0
- package/lib/src/misc/base.d.ts.map +1 -0
- package/lib/src/misc/base.js +1091 -0
- package/lib/src/misc/base.js.map +1 -0
- package/lib/src/misc/utils/LevelLogger.d.ts +150 -0
- package/lib/src/misc/utils/LevelLogger.d.ts.map +1 -0
- package/lib/src/misc/utils/LevelLogger.js +420 -0
- package/lib/src/misc/utils/LevelLogger.js.map +1 -0
- package/lib/src/misc/utils/LevelLogger.test.d.ts +2 -0
- package/lib/src/misc/utils/LevelLogger.test.d.ts.map +1 -0
- package/lib/src/misc/utils/LevelLogger.test.js +283 -0
- package/lib/src/misc/utils/LevelLogger.test.js.map +1 -0
- package/lib/src/misc/utils/json.d.ts +34 -0
- package/lib/src/misc/utils/json.d.ts.map +1 -0
- package/lib/src/misc/utils/json.js +471 -0
- package/lib/src/misc/utils/json.js.map +1 -0
- package/lib/src/misc/utils/merge.d.ts +51 -0
- package/lib/src/misc/utils/merge.d.ts.map +1 -0
- package/lib/src/misc/utils/merge.js +591 -0
- package/lib/src/misc/utils/merge.js.map +1 -0
- package/lib/src/misc/utils/test-logger-output.d.ts +7 -0
- package/lib/src/misc/utils/test-logger-output.d.ts.map +1 -0
- package/lib/src/misc/utils/test-logger-output.js +48 -0
- package/lib/src/misc/utils/test-logger-output.js.map +1 -0
- package/lib/src/plugins/composite.d.ts +22 -0
- package/lib/src/plugins/composite.d.ts.map +1 -0
- package/lib/src/plugins/composite.js +59 -0
- package/lib/src/plugins/composite.js.map +1 -0
- package/lib/src/plugins/compute.d.ts +5 -0
- package/lib/src/plugins/compute.d.ts.map +1 -0
- package/lib/src/plugins/compute.js +39 -0
- package/lib/src/plugins/compute.js.map +1 -0
- package/lib/src/runtime/Engine.d.ts +26 -0
- package/lib/src/runtime/Engine.d.ts.map +1 -0
- package/lib/src/runtime/Engine.js +2 -0
- package/lib/src/runtime/Engine.js.map +1 -0
- package/lib/src/runtime/GraphLifecycleApi.d.ts +46 -0
- package/lib/src/runtime/GraphLifecycleApi.d.ts.map +1 -0
- package/lib/src/runtime/GraphLifecycleApi.js +2 -0
- package/lib/src/runtime/GraphLifecycleApi.js.map +1 -0
- package/lib/src/runtime/GraphRuntime.d.ts +111 -0
- package/lib/src/runtime/GraphRuntime.d.ts.map +1 -0
- package/lib/src/runtime/GraphRuntime.js +791 -0
- package/lib/src/runtime/GraphRuntime.js.map +1 -0
- package/lib/src/runtime/LocalEngine.d.ts +41 -0
- package/lib/src/runtime/LocalEngine.d.ts.map +1 -0
- package/lib/src/runtime/LocalEngine.js +89 -0
- package/lib/src/runtime/LocalEngine.js.map +1 -0
- package/lib/src/runtime/components/EdgePropagator.d.ts +93 -0
- package/lib/src/runtime/components/EdgePropagator.d.ts.map +1 -0
- package/lib/src/runtime/components/EdgePropagator.js +378 -0
- package/lib/src/runtime/components/EdgePropagator.js.map +1 -0
- package/lib/src/runtime/components/EventEmitter.d.ts +12 -0
- package/lib/src/runtime/components/EventEmitter.d.ts.map +1 -0
- package/lib/src/runtime/components/EventEmitter.js +33 -0
- package/lib/src/runtime/components/EventEmitter.js.map +1 -0
- package/lib/src/runtime/components/Graph.d.ts +208 -0
- package/lib/src/runtime/components/Graph.d.ts.map +1 -0
- package/lib/src/runtime/components/Graph.js +452 -0
- package/lib/src/runtime/components/Graph.js.map +1 -0
- package/lib/src/runtime/components/HandleResolver.d.ts +36 -0
- package/lib/src/runtime/components/HandleResolver.d.ts.map +1 -0
- package/lib/src/runtime/components/HandleResolver.js +229 -0
- package/lib/src/runtime/components/HandleResolver.js.map +1 -0
- package/lib/src/runtime/components/NodeExecutor.d.ts +116 -0
- package/lib/src/runtime/components/NodeExecutor.d.ts.map +1 -0
- package/lib/src/runtime/components/NodeExecutor.js +648 -0
- package/lib/src/runtime/components/NodeExecutor.js.map +1 -0
- package/lib/src/runtime/components/RunContextManager.d.ts +90 -0
- package/lib/src/runtime/components/RunContextManager.d.ts.map +1 -0
- package/lib/src/runtime/components/RunContextManager.js +329 -0
- package/lib/src/runtime/components/RunContextManager.js.map +1 -0
- package/lib/src/runtime/components/RuntimeValidatorManager.d.ts +31 -0
- package/lib/src/runtime/components/RuntimeValidatorManager.d.ts.map +1 -0
- package/lib/src/runtime/components/RuntimeValidatorManager.js +56 -0
- package/lib/src/runtime/components/RuntimeValidatorManager.js.map +1 -0
- package/lib/src/runtime/components/graph-utils.d.ts +33 -0
- package/lib/src/runtime/components/graph-utils.d.ts.map +1 -0
- package/lib/src/runtime/components/graph-utils.js +300 -0
- package/lib/src/runtime/components/graph-utils.js.map +1 -0
- package/lib/src/runtime/components/interfaces.d.ts +59 -0
- package/lib/src/runtime/components/interfaces.d.ts.map +1 -0
- package/lib/src/runtime/components/interfaces.js +2 -0
- package/lib/src/runtime/components/interfaces.js.map +1 -0
- package/lib/src/runtime/components/types.d.ts +57 -0
- package/lib/src/runtime/components/types.d.ts.map +1 -0
- package/lib/src/runtime/components/types.js +2 -0
- package/lib/src/runtime/components/types.js.map +1 -0
- package/lib/src/runtime/utils.d.ts +21 -0
- package/lib/src/runtime/utils.d.ts.map +1 -0
- package/lib/src/runtime/utils.js +41 -0
- package/lib/src/runtime/utils.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import { isTyped, unwrapTypeId } from "../../core/type-utils";
|
|
2
|
+
import { formatNodeRef, valuesEqual } from "../utils";
|
|
3
|
+
/**
|
|
4
|
+
* EdgePropagator component - handles value propagation through edges
|
|
5
|
+
*/
|
|
6
|
+
export class EdgePropagator {
|
|
7
|
+
constructor(graph, eventEmitter, runContextManager, nodeExecutor, runtime) {
|
|
8
|
+
this.graph = graph;
|
|
9
|
+
this.eventEmitter = eventEmitter;
|
|
10
|
+
this.runContextManager = runContextManager;
|
|
11
|
+
this.nodeExecutor = nodeExecutor;
|
|
12
|
+
this.runtime = runtime;
|
|
13
|
+
this.arrayInputBuckets = new Map();
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Set source output value and emit event
|
|
17
|
+
*/
|
|
18
|
+
setSourceOutput(srcNodeId, srcHandle, value) {
|
|
19
|
+
if (!this.graph.hasNode(srcNodeId)) {
|
|
20
|
+
// Node was removed (e.g., graph updated) but an async emit arrived late; ignore
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
this.graph.updateNodeOutput(srcNodeId, srcHandle, value);
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Find all outgoing edges from a source node handle
|
|
28
|
+
*/
|
|
29
|
+
findOutgoingEdges(srcNodeId, srcHandle) {
|
|
30
|
+
return this.graph.getEdgesBySource(srcNodeId, srcHandle);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Propagate value to a single edge
|
|
34
|
+
*/
|
|
35
|
+
propagateToEdge(edge, value, srcNodeId, runContextIds) {
|
|
36
|
+
// Filter run-contexts
|
|
37
|
+
const effectiveRunContexts = runContextIds && runContextIds.size > 0
|
|
38
|
+
? this.filterEffectiveRunContexts(edge, srcNodeId, runContextIds)
|
|
39
|
+
: undefined;
|
|
40
|
+
if (runContextIds && runContextIds.size > 0 && !(effectiveRunContexts && effectiveRunContexts.size > 0)) {
|
|
41
|
+
return; // No valid run-contexts for this edge
|
|
42
|
+
}
|
|
43
|
+
// Validate union types
|
|
44
|
+
if (!this.validateUnionType(edge, value, srcNodeId)) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// Clone value per edge to isolate conversions
|
|
48
|
+
let nextVal = structuredClone(value);
|
|
49
|
+
// Apply conversion and propagate
|
|
50
|
+
if (edge.convertAsync) {
|
|
51
|
+
this.handleAsyncConversion(edge, nextVal, effectiveRunContexts);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
this.handleSyncConversion(edge, nextVal, effectiveRunContexts);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Filter run-contexts to exclude cancelled nodes
|
|
59
|
+
*/
|
|
60
|
+
filterEffectiveRunContexts(edge, srcNodeId, runContextIds) {
|
|
61
|
+
const effectiveRunContexts = new Set();
|
|
62
|
+
for (const id of runContextIds) {
|
|
63
|
+
const ctx = this.runContextManager.getRunContext(id);
|
|
64
|
+
if (!ctx)
|
|
65
|
+
continue;
|
|
66
|
+
if (ctx.cancelledNodes.has(srcNodeId))
|
|
67
|
+
continue;
|
|
68
|
+
if (ctx.cancelledNodes.has(edge.target.nodeId))
|
|
69
|
+
continue;
|
|
70
|
+
effectiveRunContexts.add(id);
|
|
71
|
+
}
|
|
72
|
+
return effectiveRunContexts.size > 0 ? effectiveRunContexts : undefined;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Validate union type requirements
|
|
76
|
+
*/
|
|
77
|
+
validateUnionType(edge, value, srcNodeId) {
|
|
78
|
+
const isUnion = Array.isArray(edge.srcUnionTypes);
|
|
79
|
+
const isTypedValue = isTyped(value);
|
|
80
|
+
if (isUnion && !isTypedValue) {
|
|
81
|
+
const sourceTypeId = this.graph.getNode(edge.source.nodeId)?.typeId;
|
|
82
|
+
const targetTypeId = this.graph.getNode(edge.target.nodeId)?.typeId;
|
|
83
|
+
const err = new Error(`Output ${srcNodeId}.${edge.source.handle} requires typed value for union output (allowed: ${edge.srcUnionTypes.join("|")})`);
|
|
84
|
+
this.eventEmitter.emit("error", {
|
|
85
|
+
kind: "edge-convert",
|
|
86
|
+
edgeId: edge.id,
|
|
87
|
+
source: { nodeId: edge.source.nodeId, handle: edge.source.handle },
|
|
88
|
+
target: { nodeId: edge.target.nodeId, handle: edge.target.handle },
|
|
89
|
+
sourceTypeId,
|
|
90
|
+
targetTypeId,
|
|
91
|
+
err,
|
|
92
|
+
});
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Handle synchronous conversion
|
|
99
|
+
*/
|
|
100
|
+
handleSyncConversion(edge, value, effectiveRunContexts) {
|
|
101
|
+
let convertedValue = value;
|
|
102
|
+
if (edge.convert) {
|
|
103
|
+
convertedValue = edge.convert(value);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
const srcResolved = this.graph.getResolvedHandles(edge.source.nodeId);
|
|
107
|
+
const dstResolved = this.graph.getResolvedHandles(edge.target.nodeId);
|
|
108
|
+
const srcResolvedNode = srcResolved !== undefined;
|
|
109
|
+
const dstResolvedNode = dstResolved !== undefined;
|
|
110
|
+
const srcResolvedHandle = srcResolvedNode && srcResolved.outputs?.[edge.source.handle] !== undefined;
|
|
111
|
+
const dstResolvedHandle = dstResolvedNode && dstResolved.inputs?.[edge.target.handle] !== undefined;
|
|
112
|
+
const fromType = (Array.isArray(edge.srcUnionTypes) && edge.srcUnionTypes.length > 0
|
|
113
|
+
? edge.srcUnionTypes.join("|")
|
|
114
|
+
: undefined) ??
|
|
115
|
+
unwrapTypeId(value) ??
|
|
116
|
+
(Array.isArray(edge.srcDeclared) ? edge.srcDeclared.join("|") : edge.srcDeclared) ??
|
|
117
|
+
edge.typeId ??
|
|
118
|
+
"unknown";
|
|
119
|
+
const toType = Array.isArray(edge.dstDeclared) ? edge.dstDeclared.join("|") : (edge.dstDeclared ?? "unknown");
|
|
120
|
+
console.warn(`No convert function for edge ${edge.id} [${formatNodeRef(this.graph, edge.source.nodeId)}.${edge.source.handle} -> ${formatNodeRef(this.graph, edge.target.nodeId)}.${edge.target.handle}] from:${fromType} to:${toType}`);
|
|
121
|
+
console.warn(`Edge ${edge.id} unresolved-handle details: resolvedHandles:{srcNode:${srcResolvedNode},srcHandle:${srcResolvedHandle},dstNode:${dstResolvedNode},dstHandle:${dstResolvedHandle}}`);
|
|
122
|
+
}
|
|
123
|
+
this.applyToTarget(edge, convertedValue, effectiveRunContexts);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Handle asynchronous conversion
|
|
127
|
+
*/
|
|
128
|
+
handleAsyncConversion(edge, value, effectiveRunContexts) {
|
|
129
|
+
if (!edge.convertAsync)
|
|
130
|
+
return;
|
|
131
|
+
// Track edge run-context IDs for pendingEdges tracking
|
|
132
|
+
const edgeRunContextIds = effectiveRunContexts ? Array.from(effectiveRunContexts) : undefined;
|
|
133
|
+
if (edgeRunContextIds) {
|
|
134
|
+
for (const id of edgeRunContextIds) {
|
|
135
|
+
this.runContextManager.startEdgeConversion(id, edge.id);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const sourceTypeId = this.graph.getNode(edge.source.nodeId)?.typeId;
|
|
139
|
+
const targetTypeId = this.graph.getNode(edge.target.nodeId)?.typeId;
|
|
140
|
+
this.eventEmitter.emit("stats", {
|
|
141
|
+
kind: "edge-start",
|
|
142
|
+
edgeId: edge.id,
|
|
143
|
+
typeId: edge.typeId,
|
|
144
|
+
source: { nodeId: edge.source.nodeId, handle: edge.source.handle },
|
|
145
|
+
target: { nodeId: edge.target.nodeId, handle: edge.target.handle },
|
|
146
|
+
sourceTypeId,
|
|
147
|
+
targetTypeId,
|
|
148
|
+
});
|
|
149
|
+
const controller = new AbortController();
|
|
150
|
+
const startAt = Date.now();
|
|
151
|
+
const currentStats = edge.stats;
|
|
152
|
+
this.graph.updateEdgeStats(edge.id, {
|
|
153
|
+
runs: currentStats.runs + 1,
|
|
154
|
+
inFlight: true,
|
|
155
|
+
progress: 0,
|
|
156
|
+
});
|
|
157
|
+
edge
|
|
158
|
+
.convertAsync(value, controller.signal)
|
|
159
|
+
.then((converted) => {
|
|
160
|
+
if (!controller.signal.aborted) {
|
|
161
|
+
this.applyToTarget(edge, converted, effectiveRunContexts);
|
|
162
|
+
this.updateEdgeStatsOnSuccess(edge, startAt);
|
|
163
|
+
}
|
|
164
|
+
})
|
|
165
|
+
.catch((err) => {
|
|
166
|
+
if (controller.signal.aborted)
|
|
167
|
+
return;
|
|
168
|
+
this.handleEdgeConversionError(edge, err);
|
|
169
|
+
})
|
|
170
|
+
.finally(() => {
|
|
171
|
+
this.finishEdgeConversion(edgeRunContextIds, edge.id);
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Apply value to target node input
|
|
176
|
+
*/
|
|
177
|
+
applyToTarget(edge, value, effectiveRunContexts) {
|
|
178
|
+
const dstNode = this.graph.getNode(edge.target.nodeId);
|
|
179
|
+
if (!dstNode)
|
|
180
|
+
return;
|
|
181
|
+
// Skip writing to unresolved handles
|
|
182
|
+
if (edge.dstDeclared === undefined)
|
|
183
|
+
return;
|
|
184
|
+
// Handle array types
|
|
185
|
+
const processedValue = this.processArrayInput(edge, value);
|
|
186
|
+
// Check if value changed
|
|
187
|
+
const prev = dstNode.inputs[edge.target.handle];
|
|
188
|
+
const valueChanged = !valuesEqual(prev, processedValue);
|
|
189
|
+
// Check if we should execute even if value is same:
|
|
190
|
+
// 1. If node has rerunOnSameInput policy (from node params or registry)
|
|
191
|
+
// 2. If input was set after last successful run (stale input detection)
|
|
192
|
+
const registry = this.graph.getRegistry();
|
|
193
|
+
const desc = registry?.nodes.get(dstNode.typeId);
|
|
194
|
+
const nodeRerunPolicy = dstNode.policy?.rerunOnSameInput === true;
|
|
195
|
+
const descRerunPolicy = desc?.policy?.rerunOnSameInput === true;
|
|
196
|
+
const shouldRerunOnSameInput = nodeRerunPolicy || descRerunPolicy;
|
|
197
|
+
const inputWasSetAfterLastRun = !dstNode.lastInputAt?.[edge.target.handle] ||
|
|
198
|
+
!dstNode.lastSuccessAt ||
|
|
199
|
+
dstNode.lastInputAt[edge.target.handle] > dstNode.lastSuccessAt;
|
|
200
|
+
const shouldExecute = valueChanged || shouldRerunOnSameInput || inputWasSetAfterLastRun;
|
|
201
|
+
if (!shouldExecute) {
|
|
202
|
+
return; // No change and no reason to rerun
|
|
203
|
+
}
|
|
204
|
+
// Set input value
|
|
205
|
+
if (valueChanged) {
|
|
206
|
+
this.runtime.setTargetInput(edge, processedValue, "applyToTarget");
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
// Even if value didn't change, update timestamp if we're forcing execution
|
|
210
|
+
const now = Date.now();
|
|
211
|
+
this.graph.updateNodeLastInputAt(edge.target.nodeId, edge.target.handle, now);
|
|
212
|
+
}
|
|
213
|
+
// Schedule downstream execution
|
|
214
|
+
this.executeDownstream(edge.target.nodeId, effectiveRunContexts);
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Process array input by merging values from all edges
|
|
218
|
+
*/
|
|
219
|
+
processArrayInput(edge, value) {
|
|
220
|
+
const dstIsArray = typeof edge.dstDeclared === "string" && edge.dstDeclared.endsWith("[]");
|
|
221
|
+
if (!dstIsArray) {
|
|
222
|
+
return value;
|
|
223
|
+
}
|
|
224
|
+
const toArray = (x) => (Array.isArray(x) ? x : x === undefined ? [] : [x]);
|
|
225
|
+
let forNode = this.arrayInputBuckets.get(edge.target.nodeId);
|
|
226
|
+
if (!forNode) {
|
|
227
|
+
forNode = new Map();
|
|
228
|
+
this.arrayInputBuckets.set(edge.target.nodeId, forNode);
|
|
229
|
+
}
|
|
230
|
+
let forHandle = forNode.get(edge.target.handle);
|
|
231
|
+
if (!forHandle) {
|
|
232
|
+
forHandle = new Map();
|
|
233
|
+
forNode.set(edge.target.handle, forHandle);
|
|
234
|
+
}
|
|
235
|
+
forHandle.set(edge.id, toArray(value));
|
|
236
|
+
// Merge all parts for this handle
|
|
237
|
+
const targetEdges = this.graph.getEdgesByTarget(edge.target.nodeId, edge.target.handle);
|
|
238
|
+
const merged = [];
|
|
239
|
+
for (const ed of targetEdges) {
|
|
240
|
+
const part = forHandle.get(ed.id);
|
|
241
|
+
if (part && part.length)
|
|
242
|
+
merged.push(...part);
|
|
243
|
+
}
|
|
244
|
+
return merged;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Execute downstream if conditions are met
|
|
248
|
+
*/
|
|
249
|
+
executeDownstream(targetNodeId, effectiveRunContexts) {
|
|
250
|
+
// Determine if we should propagate
|
|
251
|
+
const shouldPropagate = this.shouldPropagateExecution(effectiveRunContexts);
|
|
252
|
+
if (shouldPropagate && this.graph.allInboundHaveValue(targetNodeId)) {
|
|
253
|
+
this.nodeExecutor.execute(targetNodeId, {
|
|
254
|
+
runContextIds: effectiveRunContexts,
|
|
255
|
+
reason: "executeDownstream",
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Check if execution should propagate
|
|
261
|
+
*/
|
|
262
|
+
shouldPropagateExecution(effectiveRunContexts) {
|
|
263
|
+
if (!effectiveRunContexts) {
|
|
264
|
+
// Without run-context IDs, only auto mode should schedule downstream execution.
|
|
265
|
+
// In manual mode this path is used for value refresh/re-emits (e.g. handle updates),
|
|
266
|
+
// and should not implicitly trigger node runs.
|
|
267
|
+
return this.runtime.getRunMode() === "auto";
|
|
268
|
+
}
|
|
269
|
+
// Check propagate flag (only in run-context mode)
|
|
270
|
+
for (const id of effectiveRunContexts) {
|
|
271
|
+
const ctx = this.runContextManager.getRunContext(id);
|
|
272
|
+
if (ctx && ctx.propagate) {
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return false;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Update edge stats on successful conversion
|
|
280
|
+
*/
|
|
281
|
+
updateEdgeStatsOnSuccess(edge, startAt) {
|
|
282
|
+
const duration = Date.now() - startAt;
|
|
283
|
+
this.graph.updateEdgeStats(edge.id, {
|
|
284
|
+
inFlight: false,
|
|
285
|
+
lastDurationMs: duration,
|
|
286
|
+
lastEndAt: Date.now(),
|
|
287
|
+
lastError: undefined,
|
|
288
|
+
});
|
|
289
|
+
this.eventEmitter.emit("stats", {
|
|
290
|
+
kind: "edge-done",
|
|
291
|
+
edgeId: edge.id,
|
|
292
|
+
typeId: edge.typeId,
|
|
293
|
+
source: { nodeId: edge.source.nodeId, handle: edge.source.handle },
|
|
294
|
+
target: { nodeId: edge.target.nodeId, handle: edge.target.handle },
|
|
295
|
+
sourceTypeId: this.graph.getNode(edge.source.nodeId)?.typeId,
|
|
296
|
+
targetTypeId: this.graph.getNode(edge.target.nodeId)?.typeId,
|
|
297
|
+
durationMs: duration,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Handle edge conversion error
|
|
302
|
+
*/
|
|
303
|
+
handleEdgeConversionError(edge, err) {
|
|
304
|
+
this.graph.updateEdgeStats(edge.id, {
|
|
305
|
+
inFlight: false,
|
|
306
|
+
lastError: err,
|
|
307
|
+
});
|
|
308
|
+
this.eventEmitter.emit("error", {
|
|
309
|
+
kind: "edge-convert",
|
|
310
|
+
edgeId: edge.id,
|
|
311
|
+
source: { nodeId: edge.source.nodeId, handle: edge.source.handle },
|
|
312
|
+
target: { nodeId: edge.target.nodeId, handle: edge.target.handle },
|
|
313
|
+
sourceTypeId: this.graph.getNode(edge.source.nodeId)?.typeId,
|
|
314
|
+
targetTypeId: this.graph.getNode(edge.target.nodeId)?.typeId,
|
|
315
|
+
err,
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Finish edge conversion and decrement pending edges
|
|
320
|
+
*/
|
|
321
|
+
finishEdgeConversion(edgeRunContextIds, edgeId) {
|
|
322
|
+
if (!edgeRunContextIds)
|
|
323
|
+
return;
|
|
324
|
+
for (const id of edgeRunContextIds) {
|
|
325
|
+
this.runContextManager.finishEdgeConversion(id, edgeId);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Propagate value through edges
|
|
330
|
+
* @param runContextIds - Optional set of run-context IDs. If provided, propagation is run-context aware.
|
|
331
|
+
* If undefined or empty, behaves like auto mode (always propagates values and execution).
|
|
332
|
+
*/
|
|
333
|
+
propagate(srcNodeId, srcHandle, value, runContextIds) {
|
|
334
|
+
// Set source output
|
|
335
|
+
if (!this.setSourceOutput(srcNodeId, srcHandle, value)) {
|
|
336
|
+
return; // Node was removed
|
|
337
|
+
}
|
|
338
|
+
// Find outgoing edges
|
|
339
|
+
const outEdges = this.findOutgoingEdges(srcNodeId, srcHandle);
|
|
340
|
+
// Process each edge
|
|
341
|
+
for (const edge of outEdges) {
|
|
342
|
+
this.propagateToEdge(edge, value, srcNodeId, runContextIds);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Re-emit all outputs from a node (used when graph updates)
|
|
347
|
+
* Only re-emits outputs that are valid according to resolved handles
|
|
348
|
+
*/
|
|
349
|
+
invalidateDownstream(nodeId) {
|
|
350
|
+
const node = this.graph.getNode(nodeId);
|
|
351
|
+
if (!node)
|
|
352
|
+
return;
|
|
353
|
+
// Get resolved handles to filter out invalid outputs
|
|
354
|
+
const resolved = this.graph.getResolvedHandles(nodeId);
|
|
355
|
+
const validOutputHandles = resolved?.outputs ? new Set(Object.keys(resolved.outputs)) : new Set();
|
|
356
|
+
// Use node's activeRunContexts to propagate to new nodes that were added
|
|
357
|
+
const activeRunContextIds = this.graph.getNodeRunContextIds(nodeId);
|
|
358
|
+
for (const [handle, value] of Object.entries(node.outputs)) {
|
|
359
|
+
// Only re-emit if this handle is still valid
|
|
360
|
+
if (validOutputHandles.has(handle)) {
|
|
361
|
+
this.propagate(nodeId, handle, value, activeRunContextIds.size > 0 ? activeRunContextIds : undefined);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Clear array input buckets for a node (when node is deleted)
|
|
367
|
+
*/
|
|
368
|
+
clearArrayBuckets(nodeId) {
|
|
369
|
+
this.arrayInputBuckets.delete(nodeId);
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Clear all array buckets
|
|
373
|
+
*/
|
|
374
|
+
clearAllArrayBuckets() {
|
|
375
|
+
this.arrayInputBuckets.clear();
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
//# sourceMappingURL=EdgePropagator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EdgePropagator.js","sourceRoot":"","sources":["../../../../src/runtime/components/EdgePropagator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { RuntimeEventName, RuntimeEventMap, RuntimeEventListener } from "../GraphRuntime";
|
|
2
|
+
/**
|
|
3
|
+
* Event emitter component for GraphRuntime
|
|
4
|
+
* Handles all event listener management and emission
|
|
5
|
+
*/
|
|
6
|
+
export declare class EventEmitter {
|
|
7
|
+
private listeners;
|
|
8
|
+
on<K extends RuntimeEventName>(event: K, handler: RuntimeEventListener<K>): () => void;
|
|
9
|
+
emit<K extends RuntimeEventName>(event: K, payload: RuntimeEventMap[K]): void;
|
|
10
|
+
clear(): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=EventEmitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventEmitter.d.ts","sourceRoot":"","sources":["../../../../src/runtime/components/EventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE/F;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAA4E;IAE7F,EAAE,CAAC,CAAC,SAAS,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAOtF,IAAI,CAAC,CAAC,SAAS,gBAAgB,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;IAY7E,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event emitter component for GraphRuntime
|
|
3
|
+
* Handles all event listener management and emission
|
|
4
|
+
*/
|
|
5
|
+
export class EventEmitter {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.listeners = new Map();
|
|
8
|
+
}
|
|
9
|
+
on(event, handler) {
|
|
10
|
+
if (!this.listeners.has(event))
|
|
11
|
+
this.listeners.set(event, new Set());
|
|
12
|
+
const set = this.listeners.get(event);
|
|
13
|
+
set.add(handler);
|
|
14
|
+
return () => set.delete(handler);
|
|
15
|
+
}
|
|
16
|
+
emit(event, payload) {
|
|
17
|
+
const set = this.listeners.get(event);
|
|
18
|
+
if (!set)
|
|
19
|
+
return;
|
|
20
|
+
for (const handler of Array.from(set)) {
|
|
21
|
+
try {
|
|
22
|
+
handler(payload);
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
console.error(`Error in ${event} handler:`, err);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
clear() {
|
|
30
|
+
this.listeners.clear();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=EventEmitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EventEmitter.js","sourceRoot":"","sources":["../../../../src/runtime/components/EventEmitter.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,OAAO,YAAY;IAAzB;QACU,cAAS,GAAG,IAAI,GAAG,EAAiE,CAAC;IAwB/F,CAAC;IAtBC,EAAE,CAA6B,KAAQ,EAAE,OAAgC;QACvE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAiC,CAAC;QACtE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,CAA6B,KAAQ,EAAE,OAA2B;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO;QACjB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC;gBACH,OAAO,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,YAAY,KAAK,WAAW,EAAE,GAAG,CAAC,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import type { ResolvedHandles } from "@bian-womp/spark-protocol";
|
|
2
|
+
import { Registry } from "../../builder/Registry";
|
|
3
|
+
import { EventEmitter } from "./EventEmitter";
|
|
4
|
+
import type { RuntimeNode, RuntimeEdge, ReadonlyRuntimeNode, ExecutionPlan } from "./types";
|
|
5
|
+
/**
|
|
6
|
+
* Graph component - manages nodes, edges, and handle resolution
|
|
7
|
+
* This is the ONLY place where nodes, edges, and resolvedByNode are directly updated.
|
|
8
|
+
*/
|
|
9
|
+
export declare class Graph {
|
|
10
|
+
private eventEmitter;
|
|
11
|
+
private registry?;
|
|
12
|
+
private nodes;
|
|
13
|
+
private edges;
|
|
14
|
+
private resolvedByNode;
|
|
15
|
+
constructor(eventEmitter: EventEmitter, registry?: Registry | undefined);
|
|
16
|
+
/**
|
|
17
|
+
* Get a node by ID (readonly to prevent accidental modifications)
|
|
18
|
+
*/
|
|
19
|
+
getNode(nodeId: string): ReadonlyRuntimeNode<any> | undefined;
|
|
20
|
+
/**
|
|
21
|
+
* Get a node by ID (mutable, for internal use only)
|
|
22
|
+
* @internal
|
|
23
|
+
*/
|
|
24
|
+
private getNodeMutable;
|
|
25
|
+
/**
|
|
26
|
+
* Iterate over all nodes safely (readonly to prevent accidental modifications)
|
|
27
|
+
*/
|
|
28
|
+
forEachNode(callback: (node: ReadonlyRuntimeNode<any>, nodeId: string) => void): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get all node IDs
|
|
31
|
+
*/
|
|
32
|
+
getNodeIds(): string[];
|
|
33
|
+
/**
|
|
34
|
+
* Check if a node exists
|
|
35
|
+
*/
|
|
36
|
+
hasNode(nodeId: string): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Set a node (creates or replaces)
|
|
39
|
+
*/
|
|
40
|
+
setNode(nodeId: string, node: RuntimeNode<any>): void;
|
|
41
|
+
/**
|
|
42
|
+
* Delete a node
|
|
43
|
+
*/
|
|
44
|
+
deleteNode(nodeId: string): void;
|
|
45
|
+
/**
|
|
46
|
+
* Update node inputs
|
|
47
|
+
*/
|
|
48
|
+
updateNodeInput(nodeId: string, handle: string, value: unknown, calculated?: boolean): void;
|
|
49
|
+
/**
|
|
50
|
+
* Update node outputs
|
|
51
|
+
*/
|
|
52
|
+
updateNodeOutput(nodeId: string, handle: string, value: unknown): void;
|
|
53
|
+
/**
|
|
54
|
+
* Update node state
|
|
55
|
+
*/
|
|
56
|
+
updateNodeState(nodeId: string, updates: Partial<RuntimeNode<any>["state"]>): void;
|
|
57
|
+
/**
|
|
58
|
+
* Update node params
|
|
59
|
+
*/
|
|
60
|
+
updateNodeParams(nodeId: string, params: Record<string, unknown> | undefined): void;
|
|
61
|
+
/**
|
|
62
|
+
* Update node policy
|
|
63
|
+
*/
|
|
64
|
+
updateNodePolicy(nodeId: string, policy: Partial<RuntimeNode<any>["policy"]>): void;
|
|
65
|
+
/**
|
|
66
|
+
* Update node stats
|
|
67
|
+
*/
|
|
68
|
+
updateNodeStats(nodeId: string, updates: Partial<RuntimeNode<any>["stats"]>): void;
|
|
69
|
+
/**
|
|
70
|
+
* Increment node runSeq
|
|
71
|
+
*/
|
|
72
|
+
incrementNodeRunSeq(nodeId: string): number;
|
|
73
|
+
/**
|
|
74
|
+
* Set node latestRunId
|
|
75
|
+
*/
|
|
76
|
+
setNodeLatestRunId(nodeId: string, runId: string): void;
|
|
77
|
+
/**
|
|
78
|
+
* Set node lastScheduledAt
|
|
79
|
+
*/
|
|
80
|
+
setNodeLastScheduledAt(nodeId: string, timestamp: number): void;
|
|
81
|
+
/**
|
|
82
|
+
* Update node lastInputAt timestamp for a handle
|
|
83
|
+
*/
|
|
84
|
+
updateNodeLastInputAt(nodeId: string, handle: string, timestamp: number): void;
|
|
85
|
+
/**
|
|
86
|
+
* Set node lastSuccessAt timestamp
|
|
87
|
+
*/
|
|
88
|
+
setNodeLastSuccessAt(nodeId: string, timestamp: number): void;
|
|
89
|
+
/**
|
|
90
|
+
* Add item to node queue
|
|
91
|
+
*/
|
|
92
|
+
addToNodeQueue(nodeId: string, item: ExecutionPlan): void;
|
|
93
|
+
/**
|
|
94
|
+
* Remove first item from node queue
|
|
95
|
+
*/
|
|
96
|
+
shiftNodeQueue(nodeId: string): ExecutionPlan | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Clear node queue
|
|
99
|
+
*/
|
|
100
|
+
clearNodeQueue(nodeId: string): void;
|
|
101
|
+
/**
|
|
102
|
+
* Replace node queue
|
|
103
|
+
*/
|
|
104
|
+
replaceNodeQueue(nodeId: string, items: ExecutionPlan[]): void;
|
|
105
|
+
/**
|
|
106
|
+
* Add controller to node
|
|
107
|
+
*/
|
|
108
|
+
addNodeController(nodeId: string, controller: AbortController, runId: string): void;
|
|
109
|
+
/**
|
|
110
|
+
* Remove controller from node
|
|
111
|
+
*/
|
|
112
|
+
removeNodeController(nodeId: string, controller: AbortController): void;
|
|
113
|
+
/**
|
|
114
|
+
* Clear all controllers from node
|
|
115
|
+
*/
|
|
116
|
+
clearNodeControllers(nodeId: string): void;
|
|
117
|
+
/**
|
|
118
|
+
* Get all controllers for a node
|
|
119
|
+
*/
|
|
120
|
+
getNodeControllers(nodeId: string): Set<AbortController>;
|
|
121
|
+
/**
|
|
122
|
+
* Add run context ID to node
|
|
123
|
+
*/
|
|
124
|
+
addNodeRunContextId(nodeId: string, runContextId: string): void;
|
|
125
|
+
/**
|
|
126
|
+
* Add multiple run context IDs to node
|
|
127
|
+
*/
|
|
128
|
+
addNodeRunContextIds(nodeId: string, runContextIds: Set<string>): void;
|
|
129
|
+
/**
|
|
130
|
+
* Remove run context ID from node
|
|
131
|
+
*/
|
|
132
|
+
removeNodeRunContextId(nodeId: string, runContextId: string): void;
|
|
133
|
+
/**
|
|
134
|
+
* Clear all run context IDs from node
|
|
135
|
+
*/
|
|
136
|
+
clearNodeRunContextIds(nodeId: string): void;
|
|
137
|
+
/**
|
|
138
|
+
* Get run context IDs for a node
|
|
139
|
+
*/
|
|
140
|
+
getNodeRunContextIds(nodeId: string): Set<string>;
|
|
141
|
+
/**
|
|
142
|
+
* Add snapshot cancelled run ID to node
|
|
143
|
+
*/
|
|
144
|
+
addSnapshotCancelledRunId(nodeId: string, runId: string): void;
|
|
145
|
+
/**
|
|
146
|
+
* Iterate over all edges safely
|
|
147
|
+
*/
|
|
148
|
+
forEachEdge(callback: (edge: RuntimeEdge, index: number) => void): void;
|
|
149
|
+
/**
|
|
150
|
+
* Find edges matching a predicate
|
|
151
|
+
*/
|
|
152
|
+
findEdges(predicate: (edge: RuntimeEdge) => boolean): RuntimeEdge[];
|
|
153
|
+
/**
|
|
154
|
+
* Get edges by source node and handle
|
|
155
|
+
*/
|
|
156
|
+
getEdgesBySource(srcNodeId: string, srcHandle: string): RuntimeEdge[];
|
|
157
|
+
/**
|
|
158
|
+
* Get edges by target node and handle
|
|
159
|
+
*/
|
|
160
|
+
getEdgesByTarget(targetNodeId: string, targetHandle: string): RuntimeEdge[];
|
|
161
|
+
/**
|
|
162
|
+
* Get inbound edges for a node
|
|
163
|
+
*/
|
|
164
|
+
getInboundEdges(nodeId: string): RuntimeEdge[];
|
|
165
|
+
/**
|
|
166
|
+
* Get outbound edges for a node
|
|
167
|
+
*/
|
|
168
|
+
getOutboundEdges(nodeId: string): RuntimeEdge[];
|
|
169
|
+
/**
|
|
170
|
+
* Set all edges (replaces existing)
|
|
171
|
+
*/
|
|
172
|
+
setEdges(edges: RuntimeEdge[]): void;
|
|
173
|
+
/**
|
|
174
|
+
* Update an edge by ID
|
|
175
|
+
*/
|
|
176
|
+
updateEdge(edgeId: string, updates: Partial<RuntimeEdge>): void;
|
|
177
|
+
/**
|
|
178
|
+
* Update edge properties (convert, convertAsync, types, etc.)
|
|
179
|
+
*/
|
|
180
|
+
updateEdgeProperties(edgeId: string, updates: {
|
|
181
|
+
srcDeclared?: string | string[];
|
|
182
|
+
dstDeclared?: string | string[];
|
|
183
|
+
srcUnionTypes?: string[] | undefined;
|
|
184
|
+
convert?: ((value: unknown) => unknown) | undefined;
|
|
185
|
+
convertAsync?: ((value: unknown, signal: AbortSignal) => Promise<unknown>) | undefined;
|
|
186
|
+
}): void;
|
|
187
|
+
/**
|
|
188
|
+
* Update edge stats
|
|
189
|
+
*/
|
|
190
|
+
updateEdgeStats(edgeId: string, updates: Partial<RuntimeEdge["stats"]>): void;
|
|
191
|
+
/**
|
|
192
|
+
* Get edge by ID
|
|
193
|
+
*/
|
|
194
|
+
getEdge(edgeId: string): RuntimeEdge | undefined;
|
|
195
|
+
getRegistry(): Registry | undefined;
|
|
196
|
+
setRegistry(registry: Registry): void;
|
|
197
|
+
getResolvedHandles(nodeId: string): ResolvedHandles | undefined;
|
|
198
|
+
setResolvedHandles(nodeId: string, handles: ResolvedHandles): void;
|
|
199
|
+
/**
|
|
200
|
+
* Check if all inbound edges for a node have values
|
|
201
|
+
*/
|
|
202
|
+
allInboundHaveValue(nodeId: string): boolean;
|
|
203
|
+
/**
|
|
204
|
+
* Clear all data
|
|
205
|
+
*/
|
|
206
|
+
clear(): void;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=Graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Graph.d.ts","sourceRoot":"","sources":["../../../../src/runtime/components/Graph.ts"],"names":[],"mappings":"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"}
|