@bian-womp/spark-graph 0.3.59 → 0.3.60

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 CHANGED
@@ -919,14 +919,6 @@ class Graph {
919
919
  setResolvedHandles(nodeId, handles) {
920
920
  this.resolvedByNode.set(nodeId, handles);
921
921
  }
922
- /**
923
- * Iterate over resolved handles safely
924
- */
925
- forEachResolvedHandles(callback) {
926
- for (const [nodeId, handles] of this.resolvedByNode.entries()) {
927
- callback(handles, nodeId);
928
- }
929
- }
930
922
  // ==================== Utility Methods ====================
931
923
  /**
932
924
  * Check if all inbound edges for a node have values
@@ -2128,11 +2120,11 @@ function tryHandleResolving(def, registry, environment) {
2128
2120
  }
2129
2121
  return { resolved: out, pending };
2130
2122
  }
2131
- function buildEdges(def, registry, resolvedByNode) {
2123
+ function buildEdges(def, registry, graph) {
2132
2124
  return def.edges.map((e) => {
2133
2125
  const srcNode = def.nodes.find((n) => n.nodeId === e.source.nodeId);
2134
2126
  const dstNode = def.nodes.find((n) => n.nodeId === e.target.nodeId);
2135
- const { srcDeclared, dstDeclared } = extractEdgeTypes(e.source.nodeId, e.source.handle, e.target.nodeId, e.target.handle, resolvedByNode);
2127
+ const { srcDeclared, dstDeclared } = extractEdgeTypes(e.source.nodeId, e.source.handle, e.target.nodeId, e.target.handle, registry, graph);
2136
2128
  const { convert, convertAsync } = buildEdgeConverters(srcDeclared, dstDeclared, registry, `buildEdges: ${srcNode?.typeId || ""}.${e.source.nodeId}.${e.source.handle} -> ${dstNode?.typeId || ""}.${e.target.nodeId}.${e.target.handle}`);
2137
2129
  return {
2138
2130
  id: e.id,
@@ -2152,15 +2144,13 @@ function buildEdges(def, registry, resolvedByNode) {
2152
2144
  * Used by both buildEdges and updateNodeHandles to avoid duplication
2153
2145
  * Now supports union types on both source (output) and destination (input) handles
2154
2146
  */
2155
- function extractEdgeTypes(sourceNodeId, sourceHandle, targetNodeId, targetHandle, resolvedByNode) {
2156
- const srcResolved = resolvedByNode.get(sourceNodeId);
2157
- const dstResolved = resolvedByNode.get(targetNodeId);
2147
+ function extractEdgeTypes(sourceNodeId, sourceHandle, targetNodeId, targetHandle, registry, graph) {
2148
+ const srcResolved = graph.getResolvedHandles(sourceNodeId);
2149
+ const dstResolved = graph.getResolvedHandles(targetNodeId);
2158
2150
  const srcDeclared = srcResolved
2159
2151
  ? srcResolved.outputs[sourceHandle]
2160
- : undefined;
2161
- const dstDeclared = dstResolved
2162
- ? getInputDeclaredTypes(dstResolved.inputs, targetHandle)
2163
- : undefined;
2152
+ : registry.nodes.get(sourceNodeId)?.outputs[sourceHandle];
2153
+ const dstDeclared = getInputDeclaredTypes(dstResolved ? dstResolved.inputs : registry.nodes.get(targetNodeId)?.inputs, targetHandle);
2164
2154
  return {
2165
2155
  srcDeclared,
2166
2156
  dstDeclared,
@@ -2426,10 +2416,6 @@ class HandleResolver {
2426
2416
  if (!node)
2427
2417
  return;
2428
2418
  this.graph.setResolvedHandles(nodeId, handles);
2429
- const resolvedByNode = new Map();
2430
- this.graph.forEachResolvedHandles((handles, nodeId) => {
2431
- resolvedByNode.set(nodeId, handles);
2432
- });
2433
2419
  const registry = this.registry; // Store for use in callback
2434
2420
  this.graph.forEachEdge((e, _index) => {
2435
2421
  // Only update edges that touch the changed node
@@ -2440,7 +2426,7 @@ class HandleResolver {
2440
2426
  const dstNode = this.graph.getNode(e.target.nodeId);
2441
2427
  const oldDstDeclared = e.dstDeclared;
2442
2428
  // Extract edge types using shared helper (handles both source and target updates)
2443
- const { srcDeclared, dstDeclared } = extractEdgeTypes(e.source.nodeId, e.source.handle, e.target.nodeId, e.target.handle, resolvedByNode);
2429
+ const { srcDeclared, dstDeclared } = extractEdgeTypes(e.source.nodeId, e.source.handle, e.target.nodeId, e.target.handle, registry, this.graph);
2444
2430
  // Update converters
2445
2431
  const conv = buildEdgeConverters(srcDeclared, dstDeclared, registry, `updateNodeHandles: ${srcNode?.typeId || ""}.${e.source.nodeId}.${e.source.handle} -> ${dstNode?.typeId || ""}.${e.target.nodeId}.${e.target.handle}`);
2446
2432
  // Update edge properties via Graph
@@ -3737,11 +3723,7 @@ class GraphRuntime {
3737
3723
  gr.graph.setNode(n.nodeId, rn);
3738
3724
  }
3739
3725
  // Instantiate edges
3740
- const resolvedByNode = new Map();
3741
- gr.graph.forEachResolvedHandles((handles, nodeId) => {
3742
- resolvedByNode.set(nodeId, handles);
3743
- });
3744
- const edges = buildEdges(def, registry, resolvedByNode);
3726
+ const edges = buildEdges(def, registry, gr.graph);
3745
3727
  gr.graph.setEdges(edges);
3746
3728
  // Schedule async recompute only for nodes that indicated Promise-based resolveHandles
3747
3729
  for (const nodeId of initial.pending) {
@@ -4249,11 +4231,7 @@ class GraphRuntime {
4249
4231
  for (const [nodeId, handles] of result.resolved) {
4250
4232
  this.graph.setResolvedHandles(nodeId, handles);
4251
4233
  }
4252
- const resolvedByNode = new Map();
4253
- this.graph.forEachResolvedHandles((handles, nodeId) => {
4254
- resolvedByNode.set(nodeId, handles);
4255
- });
4256
- const afterEdges = buildEdges(def, registry, resolvedByNode);
4234
+ const afterEdges = buildEdges(def, registry, this.graph);
4257
4235
  this.graph.setEdges(afterEdges);
4258
4236
  for (const nodeId of result.pending) {
4259
4237
  this.handleResolver.scheduleRecomputeHandles(nodeId);