@bian-womp/spark-graph 0.3.59 → 0.3.61

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
@@ -877,18 +877,10 @@ class Graph {
877
877
  const edge = this.edges.find((e) => e.id === edgeId);
878
878
  if (!edge)
879
879
  return;
880
- if (updates.dstDeclared !== undefined) {
881
- edge.dstDeclared = updates.dstDeclared;
882
- }
883
- if (updates.srcUnionTypes !== undefined) {
884
- edge.srcUnionTypes = updates.srcUnionTypes;
885
- }
886
- if (updates.convert !== undefined) {
887
- edge.convert = updates.convert;
888
- }
889
- if (updates.convertAsync !== undefined) {
890
- edge.convertAsync = updates.convertAsync;
891
- }
880
+ edge.dstDeclared = updates.dstDeclared;
881
+ edge.srcUnionTypes = updates.srcUnionTypes;
882
+ edge.convert = updates.convert;
883
+ edge.convertAsync = updates.convertAsync;
892
884
  }
893
885
  /**
894
886
  * Update edge stats
@@ -919,14 +911,6 @@ class Graph {
919
911
  setResolvedHandles(nodeId, handles) {
920
912
  this.resolvedByNode.set(nodeId, handles);
921
913
  }
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
914
  // ==================== Utility Methods ====================
931
915
  /**
932
916
  * Check if all inbound edges for a node have values
@@ -2128,11 +2112,11 @@ function tryHandleResolving(def, registry, environment) {
2128
2112
  }
2129
2113
  return { resolved: out, pending };
2130
2114
  }
2131
- function buildEdges(def, registry, resolvedByNode) {
2115
+ function buildEdges(def, registry, graph) {
2132
2116
  return def.edges.map((e) => {
2133
2117
  const srcNode = def.nodes.find((n) => n.nodeId === e.source.nodeId);
2134
2118
  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);
2119
+ const { srcDeclared, dstDeclared } = extractEdgeTypes(e.source.nodeId, e.source.handle, e.target.nodeId, e.target.handle, registry, graph);
2136
2120
  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
2121
  return {
2138
2122
  id: e.id,
@@ -2152,15 +2136,13 @@ function buildEdges(def, registry, resolvedByNode) {
2152
2136
  * Used by both buildEdges and updateNodeHandles to avoid duplication
2153
2137
  * Now supports union types on both source (output) and destination (input) handles
2154
2138
  */
2155
- function extractEdgeTypes(sourceNodeId, sourceHandle, targetNodeId, targetHandle, resolvedByNode) {
2156
- const srcResolved = resolvedByNode.get(sourceNodeId);
2157
- const dstResolved = resolvedByNode.get(targetNodeId);
2139
+ function extractEdgeTypes(sourceNodeId, sourceHandle, targetNodeId, targetHandle, registry, graph) {
2140
+ const srcResolved = graph.getResolvedHandles(sourceNodeId);
2141
+ const dstResolved = graph.getResolvedHandles(targetNodeId);
2158
2142
  const srcDeclared = srcResolved
2159
2143
  ? srcResolved.outputs[sourceHandle]
2160
- : undefined;
2161
- const dstDeclared = dstResolved
2162
- ? getInputDeclaredTypes(dstResolved.inputs, targetHandle)
2163
- : undefined;
2144
+ : registry.nodes.get(sourceNodeId)?.outputs[sourceHandle];
2145
+ const dstDeclared = getInputDeclaredTypes(dstResolved ? dstResolved.inputs : registry.nodes.get(targetNodeId)?.inputs, targetHandle);
2164
2146
  return {
2165
2147
  srcDeclared,
2166
2148
  dstDeclared,
@@ -2426,10 +2408,6 @@ class HandleResolver {
2426
2408
  if (!node)
2427
2409
  return;
2428
2410
  this.graph.setResolvedHandles(nodeId, handles);
2429
- const resolvedByNode = new Map();
2430
- this.graph.forEachResolvedHandles((handles, nodeId) => {
2431
- resolvedByNode.set(nodeId, handles);
2432
- });
2433
2411
  const registry = this.registry; // Store for use in callback
2434
2412
  this.graph.forEachEdge((e, _index) => {
2435
2413
  // Only update edges that touch the changed node
@@ -2440,7 +2418,7 @@ class HandleResolver {
2440
2418
  const dstNode = this.graph.getNode(e.target.nodeId);
2441
2419
  const oldDstDeclared = e.dstDeclared;
2442
2420
  // 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);
2421
+ const { srcDeclared, dstDeclared } = extractEdgeTypes(e.source.nodeId, e.source.handle, e.target.nodeId, e.target.handle, registry, this.graph);
2444
2422
  // Update converters
2445
2423
  const conv = buildEdgeConverters(srcDeclared, dstDeclared, registry, `updateNodeHandles: ${srcNode?.typeId || ""}.${e.source.nodeId}.${e.source.handle} -> ${dstNode?.typeId || ""}.${e.target.nodeId}.${e.target.handle}`);
2446
2424
  // Update edge properties via Graph
@@ -3737,11 +3715,7 @@ class GraphRuntime {
3737
3715
  gr.graph.setNode(n.nodeId, rn);
3738
3716
  }
3739
3717
  // 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);
3718
+ const edges = buildEdges(def, registry, gr.graph);
3745
3719
  gr.graph.setEdges(edges);
3746
3720
  // Schedule async recompute only for nodes that indicated Promise-based resolveHandles
3747
3721
  for (const nodeId of initial.pending) {
@@ -4249,11 +4223,7 @@ class GraphRuntime {
4249
4223
  for (const [nodeId, handles] of result.resolved) {
4250
4224
  this.graph.setResolvedHandles(nodeId, handles);
4251
4225
  }
4252
- const resolvedByNode = new Map();
4253
- this.graph.forEachResolvedHandles((handles, nodeId) => {
4254
- resolvedByNode.set(nodeId, handles);
4255
- });
4256
- const afterEdges = buildEdges(def, registry, resolvedByNode);
4226
+ const afterEdges = buildEdges(def, registry, this.graph);
4257
4227
  this.graph.setEdges(afterEdges);
4258
4228
  for (const nodeId of result.pending) {
4259
4229
  this.handleResolver.scheduleRecomputeHandles(nodeId);