@bian-womp/spark-graph 0.2.15 → 0.2.16
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 +41 -6
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/core/types.d.ts +2 -1
- package/lib/cjs/src/core/types.d.ts.map +1 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts +3 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/esm/index.js +41 -6
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/core/types.d.ts +2 -1
- package/lib/esm/src/core/types.d.ts.map +1 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts +3 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/package.json +2 -2
package/lib/cjs/index.cjs
CHANGED
|
@@ -406,6 +406,8 @@ class GraphRuntime {
|
|
|
406
406
|
constructor() {
|
|
407
407
|
this.nodes = new Map();
|
|
408
408
|
this.edges = [];
|
|
409
|
+
// Current resolved handles per node (registry statics merged with per-node overrides)
|
|
410
|
+
this.resolvedByNode = new Map();
|
|
409
411
|
this.listeners = new Map();
|
|
410
412
|
this.environment = {};
|
|
411
413
|
this.paused = false;
|
|
@@ -434,7 +436,7 @@ class GraphRuntime {
|
|
|
434
436
|
const gr = new GraphRuntime();
|
|
435
437
|
gr.environment = opts?.environment ?? {};
|
|
436
438
|
// Precompute per-node resolved handles (use def-provided overrides; do not compute dynamically here)
|
|
437
|
-
|
|
439
|
+
gr.resolvedByNode = GraphRuntime.computeResolvedHandleMap(def, registry);
|
|
438
440
|
// Instantiate nodes
|
|
439
441
|
for (const n of def.nodes) {
|
|
440
442
|
const desc = registry.nodes.get(n.typeId);
|
|
@@ -474,7 +476,7 @@ class GraphRuntime {
|
|
|
474
476
|
gr.nodes.set(n.nodeId, rn);
|
|
475
477
|
}
|
|
476
478
|
// Instantiate edges
|
|
477
|
-
gr.edges = GraphRuntime.buildEdges(def, registry, resolvedByNode);
|
|
479
|
+
gr.edges = GraphRuntime.buildEdges(def, registry, gr.resolvedByNode);
|
|
478
480
|
// After nodes and edges exist, seed registry- and graph-level defaults
|
|
479
481
|
for (const n of def.nodes) {
|
|
480
482
|
const node = gr.nodes.get(n.nodeId);
|
|
@@ -967,6 +969,39 @@ class GraphRuntime {
|
|
|
967
969
|
this.propagate(nodeId, handle, value);
|
|
968
970
|
}
|
|
969
971
|
}
|
|
972
|
+
// Update resolved handles for a single node and refresh edge converters/types that touch it
|
|
973
|
+
updateNodeHandles(nodeId, handles, registry) {
|
|
974
|
+
this.resolvedByNode.set(nodeId, handles);
|
|
975
|
+
// Recompute edge converter/type for edges where this node is source or target
|
|
976
|
+
for (const e of this.edges) {
|
|
977
|
+
let srcDeclared = e.typeId;
|
|
978
|
+
let dstDeclared = e.dstDeclared;
|
|
979
|
+
if (e.source.nodeId === nodeId) {
|
|
980
|
+
const resolved = this.resolvedByNode.get(nodeId);
|
|
981
|
+
srcDeclared = resolved
|
|
982
|
+
? resolved.outputs[e.source.handle]
|
|
983
|
+
: srcDeclared;
|
|
984
|
+
// If edge had no explicit typeId, infer from updated src
|
|
985
|
+
if (!e.typeId) {
|
|
986
|
+
e.typeId = Array.isArray(srcDeclared)
|
|
987
|
+
? srcDeclared?.[0]
|
|
988
|
+
: srcDeclared;
|
|
989
|
+
}
|
|
990
|
+
}
|
|
991
|
+
if (e.target.nodeId === nodeId) {
|
|
992
|
+
const resolved = this.resolvedByNode.get(nodeId);
|
|
993
|
+
if (resolved) {
|
|
994
|
+
dstDeclared = getInputTypeId(resolved.inputs, e.target.handle);
|
|
995
|
+
e.dstDeclared = dstDeclared;
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
const conv = GraphRuntime.buildEdgeConverters(srcDeclared, dstDeclared, registry);
|
|
999
|
+
e.convert = conv.convert;
|
|
1000
|
+
e.convertAsync = conv.convertAsync;
|
|
1001
|
+
}
|
|
1002
|
+
// Invalidate downstream for this node so UI refreshes
|
|
1003
|
+
this.invalidateDownstream(nodeId);
|
|
1004
|
+
}
|
|
970
1005
|
launch() {
|
|
971
1006
|
// call onActivated for nodes that implement it
|
|
972
1007
|
for (const node of this.nodes.values()) {
|
|
@@ -1260,9 +1295,9 @@ class GraphRuntime {
|
|
|
1260
1295
|
prevOutTargets.set(e.source.nodeId, tmap);
|
|
1261
1296
|
}
|
|
1262
1297
|
// Precompute per-node resolved handles for updated graph
|
|
1263
|
-
|
|
1298
|
+
this.resolvedByNode = GraphRuntime.computeResolvedHandleMap(def, registry);
|
|
1264
1299
|
// Rebuild edges mapping with coercions
|
|
1265
|
-
this.edges = GraphRuntime.buildEdges(def, registry, resolvedByNode);
|
|
1300
|
+
this.edges = GraphRuntime.buildEdges(def, registry, this.resolvedByNode);
|
|
1266
1301
|
// Build new inbound map
|
|
1267
1302
|
const nextInbound = new Map();
|
|
1268
1303
|
for (const e of this.edges) {
|
|
@@ -2635,9 +2670,9 @@ function setupBasicGraphRegistry() {
|
|
|
2635
2670
|
categoryId: "compute",
|
|
2636
2671
|
inputs: { Length: "base.float" },
|
|
2637
2672
|
outputs: { Items: "base.object" },
|
|
2638
|
-
resolveHandles: ({
|
|
2673
|
+
resolveHandles: ({ inputs }) => {
|
|
2639
2674
|
const maxLen = 64;
|
|
2640
|
-
const raw =
|
|
2675
|
+
const raw = inputs?.Length ?? 0;
|
|
2641
2676
|
const n = Math.max(0, Math.min(maxLen, Math.trunc(Number(raw ?? 0))));
|
|
2642
2677
|
if (!Number.isFinite(n))
|
|
2643
2678
|
return { inputs: {} };
|