@bian-womp/spark-workbench 0.3.67 → 0.3.68

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.
@@ -1,7 +1,8 @@
1
1
  import type { OnConnect, OnEdgesChange, OnEdgesDelete, OnNodesChange, OnNodesDelete } from "@xyflow/react";
2
+ import type { ResolvedHandles } from "@bian-womp/spark-protocol";
2
3
  import type { InMemoryWorkbench } from "../core/InMemoryWorkbench";
3
4
  import { IGraphRunner } from "../runtime/IGraphRunner";
4
- export declare function useWorkbenchBridge(wb: InMemoryWorkbench): {
5
+ export declare function useWorkbenchBridge(wb: InMemoryWorkbench, handlesMap?: Record<string, ResolvedHandles>): {
5
6
  onConnect: OnConnect;
6
7
  onNodesChange: OnNodesChange;
7
8
  onEdgesChange: OnEdgesChange;
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../src/misc/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,SAAS,EACT,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EAEd,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,iBAAiB;;;;;;EAsJvD;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,iBAAiB,UAU1D;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,iBAAiB,UAW5D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,UAoB3D;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,CAwCpE;AAWD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,OAAO,GACpB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,CA0BjC;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC,CAyBvD"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../../src/misc/hooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,SAAS,EACT,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,EAEd,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,iBAAiB,EACrB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;;;;;;EA8K7C;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,iBAAiB,UAU1D;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,iBAAiB,UAW5D;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,YAAY,UAoB3D;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,CAwCpE;AAWD,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,OAAO,GACpB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,CA0BjC;AAED,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC,CAyBvD"}
package/lib/esm/index.js CHANGED
@@ -2540,7 +2540,7 @@ function layoutNode(args, overrides) {
2540
2540
  };
2541
2541
  }
2542
2542
 
2543
- function useWorkbenchBridge(wb) {
2543
+ function useWorkbenchBridge(wb, handlesMap) {
2544
2544
  const onConnect = useCallback((params) => {
2545
2545
  if (!params.source || !params.target)
2546
2546
  return;
@@ -2553,11 +2553,27 @@ function useWorkbenchBridge(wb) {
2553
2553
  e.target.handle === params.targetHandle);
2554
2554
  if (exists)
2555
2555
  return;
2556
+ // Check if target input handle is a non-array type (typeId doesn't end with [])
2557
+ // If so, remove any existing connections to that handle before connecting
2558
+ const targetHandles = handlesMap?.[params.target];
2559
+ const targetTypeId = targetHandles
2560
+ ? getInputTypeId(targetHandles.inputs, params.targetHandle)
2561
+ : undefined;
2562
+ const isArrayInput = targetTypeId?.endsWith("[]") ?? false;
2563
+ if (!isArrayInput) {
2564
+ // Find existing edges to this input handle
2565
+ const existingEdges = wb.def.edges.filter((e) => e.target.nodeId === params.target &&
2566
+ e.target.handle === params.targetHandle);
2567
+ // Remove existing edges (without committing yet)
2568
+ for (const edge of existingEdges) {
2569
+ wb.disconnect(edge.id, { commit: false });
2570
+ }
2571
+ }
2556
2572
  wb.connect({
2557
2573
  source: { nodeId: params.source, handle: params.sourceHandle },
2558
2574
  target: { nodeId: params.target, handle: params.targetHandle },
2559
2575
  }, { commit: true });
2560
- }, [wb]);
2576
+ }, [wb, handlesMap]);
2561
2577
  const onNodesChange = useCallback((changes) => {
2562
2578
  const positions = {};
2563
2579
  let commit = false;
@@ -5999,7 +6015,7 @@ const WorkbenchCanvasComponent = React.forwardRef((props, ref) => {
5999
6015
  }
6000
6016
  },
6001
6017
  }), []);
6002
- const { onConnect, onNodesChange, onEdgesChange, onEdgesDelete, onNodesDelete, } = useWorkbenchBridge(wb);
6018
+ const { onConnect, onNodesChange, onEdgesChange, onEdgesDelete, onNodesDelete, } = useWorkbenchBridge(wb, handlesMap);
6003
6019
  const ui = useMemo(() => wb.getUI(), [wb, uiVersion]);
6004
6020
  const { nodeTypes, resolveNodeType } = useMemo(() => {
6005
6021
  // Build nodeTypes map using UI extension registry