@bian-womp/spark-workbench 0.3.86 → 0.3.88

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
@@ -1357,9 +1357,9 @@ class LocalGraphRunner extends AbstractGraphRunner {
1357
1357
  this.engine.setInputs(nodeId, map);
1358
1358
  }
1359
1359
  }
1360
- async computeNode(nodeId, options) {
1360
+ async computeNode(nodeId) {
1361
1361
  if (this.engine)
1362
- await this.engine.computeNode(nodeId, options);
1362
+ await this.engine.computeNode(nodeId);
1363
1363
  }
1364
1364
  async runFromHere(nodeId) {
1365
1365
  if (this.engine)
@@ -1970,9 +1970,9 @@ class RemoteGraphRunner extends AbstractGraphRunner {
1970
1970
  this.emit("status", { running: true, runMode });
1971
1971
  }
1972
1972
  }
1973
- async computeNode(nodeId, options) {
1973
+ async computeNode(nodeId) {
1974
1974
  const client = await this.ensureClient();
1975
- await client.engine.computeNode(nodeId, options);
1975
+ await client.engine.computeNode(nodeId);
1976
1976
  }
1977
1977
  async runFromHere(nodeId) {
1978
1978
  const client = await this.ensureClient();
@@ -4475,125 +4475,94 @@ function WorkbenchProvider({ wb, runner, overrides, uiVersion, children, }) {
4475
4475
  const offWbGraphUiChangedForLog = wb.on("graphUiChanged", add("workbench", "graphUiChanged"));
4476
4476
  const offWbValidationChanged = wb.on("validationChanged", add("workbench", "validationChanged"));
4477
4477
  // Ensure newly added nodes start as invalidated until first evaluation
4478
- const offWbGraphChangedForUpdate = wb.on("graphChanged", async (event) => {
4479
- // Handle batched compound operations (duplicate, paste, delete, bake)
4480
- if (event.change?.type === "batch") {
4481
- const { changes } = event.change;
4482
- const isDry = !!event.dry;
4483
- const batchReason = event.reason ?? "batch";
4484
- try {
4485
- if (runner.isRunning()) {
4486
- const hasNodeOps = changes.some((c) => c.type === "addNode" && (c.inputs || c.copyOutputsFrom));
4487
- await runner.update(event.def, { dry: isDry || hasNodeOps });
4488
- for (const change of changes) {
4489
- if (change.type === "addNode") {
4490
- if (change.inputs) {
4491
- await runner.setInputs(change.nodeId, change.inputs, { dry: isDry });
4492
- }
4493
- if (change.copyOutputsFrom) {
4494
- await runner.copyOutputs(change.copyOutputsFrom, change.nodeId, { dry: isDry });
4495
- }
4496
- }
4497
- if (change.type === "setInputs") {
4498
- await runner.setInputs(change.nodeId, change.inputs, { dry: isDry });
4499
- }
4500
- }
4501
- }
4502
- if (event.commit) {
4503
- await saveUiRuntimeMetadata(wb, runner);
4504
- const history = await runner.commit(batchReason).catch((err) => {
4505
- console.error("[WorkbenchContext] Error committing batch:", err);
4506
- return undefined;
4507
- });
4508
- if (history)
4509
- wb.setHistory(history);
4510
- }
4511
- }
4512
- catch (err) {
4513
- console.error("[WorkbenchContext] Error processing batch:", err);
4514
- }
4478
+ const GRAPH_REASON_BY_CHANGE = {
4479
+ addNode: "add-node",
4480
+ removeNode: "remove-node",
4481
+ connect: "connect-edge",
4482
+ disconnect: "disconnect-edge",
4483
+ updateParams: "update-node-params",
4484
+ updateEdgeType: "update-edge-type",
4485
+ setInputs: "set-inputs",
4486
+ updateResolvedHandles: "update-resolved-handles",
4487
+ };
4488
+ const getGraphReason = (event) => {
4489
+ const changeType = event.change?.type;
4490
+ return (changeType && GRAPH_REASON_BY_CHANGE[changeType]) || "graph-changed";
4491
+ };
4492
+ const commitGraphChange = async (shouldCommit, reason, errorPrefix) => {
4493
+ if (!shouldCommit)
4515
4494
  return;
4495
+ await saveUiRuntimeMetadata(wb, runner);
4496
+ const history = await runner.commit(reason).catch((err) => {
4497
+ console.error(errorPrefix, err);
4498
+ return undefined;
4499
+ });
4500
+ if (history)
4501
+ wb.setHistory(history);
4502
+ };
4503
+ const applyAddNodeEffects = async (nodeId, inputs, copyOutputsFrom, dry) => {
4504
+ if (inputs) {
4505
+ await runner.setInputs(nodeId, inputs, { dry });
4516
4506
  }
4517
- // Build detailed reason from change type
4518
- let reason = "graph-changed";
4519
- if (event.change) {
4520
- const changeType = event.change.type;
4521
- if (changeType === "addNode") {
4522
- reason = "add-node";
4523
- }
4524
- else if (changeType === "removeNode") {
4525
- reason = "remove-node";
4526
- }
4527
- else if (changeType === "connect") {
4528
- reason = "connect-edge";
4529
- }
4530
- else if (changeType === "disconnect") {
4531
- reason = "disconnect-edge";
4532
- }
4533
- else if (changeType === "updateParams") {
4534
- reason = "update-node-params";
4535
- }
4536
- else if (changeType === "updateEdgeType") {
4537
- reason = "update-edge-type";
4538
- }
4539
- else if (changeType === "setInputs") {
4540
- reason = "set-inputs";
4507
+ if (copyOutputsFrom) {
4508
+ await runner.copyOutputs(copyOutputsFrom, nodeId, { dry });
4509
+ }
4510
+ };
4511
+ const applyBatchGraphChange = async (event) => {
4512
+ if (event.change?.type !== "batch")
4513
+ return;
4514
+ const { changes } = event.change;
4515
+ const dry = !!event.dry;
4516
+ if (!runner.isRunning())
4517
+ return;
4518
+ const hasNodeOps = changes.some((c) => c.type === "addNode" && (c.inputs || c.copyOutputsFrom));
4519
+ await runner.update(event.def, { dry: dry || hasNodeOps });
4520
+ for (const change of changes) {
4521
+ if (change.type === "addNode") {
4522
+ await applyAddNodeEffects(change.nodeId, change.inputs, change.copyOutputsFrom, dry);
4541
4523
  }
4542
- else if (changeType === "updateResolvedHandles") {
4543
- reason = "update-resolved-handles";
4524
+ else if (change.type === "setInputs") {
4525
+ await runner.setInputs(change.nodeId, change.inputs, { dry });
4544
4526
  }
4545
4527
  }
4528
+ };
4529
+ const applySingleGraphChange = async (event) => {
4530
+ if (event.change?.type === "batch")
4531
+ return;
4546
4532
  if (event.change?.type === "setInputs") {
4547
4533
  const { nodeId, inputs } = event.change;
4548
4534
  await runner.setInputs(nodeId, inputs, { dry: event.dry });
4549
4535
  }
4550
- if (!runner.isRunning()) {
4551
- if (event.commit) {
4552
- await saveUiRuntimeMetadata(wb, runner);
4553
- const history = await runner.commit(reason).catch((err) => {
4554
- console.error("[WorkbenchContext] Error committing:", err);
4555
- return undefined;
4556
- });
4557
- if (history)
4558
- wb.setHistory(history);
4536
+ if (!runner.isRunning())
4537
+ return;
4538
+ if (event.change?.type === "addNode") {
4539
+ const { nodeId, inputs, copyOutputsFrom } = event.change;
4540
+ if (event.dry) {
4541
+ await runner.update(event.def, { dry: true });
4542
+ await applyAddNodeEffects(nodeId, inputs, copyOutputsFrom, true);
4543
+ return;
4559
4544
  }
4545
+ await runner.update(event.def, { dry: !!inputs });
4546
+ await applyAddNodeEffects(nodeId, inputs, undefined, false);
4560
4547
  return;
4561
4548
  }
4549
+ if (event.change?.type !== "setInputs" && event.change?.type !== "updateResolvedHandles") {
4550
+ await runner.update(event.def, { dry: event.dry });
4551
+ }
4552
+ };
4553
+ const offWbGraphChangedForUpdate = wb.on("graphChanged", async (event) => {
4562
4554
  try {
4563
- if (event.change?.type === "addNode") {
4564
- const { nodeId, inputs, copyOutputsFrom } = event.change;
4565
- if (event.dry) {
4566
- await runner.update(event.def, { dry: true });
4567
- if (inputs) {
4568
- await runner.setInputs(nodeId, inputs, { dry: true });
4569
- }
4570
- if (copyOutputsFrom) {
4571
- await runner.copyOutputs(copyOutputsFrom, nodeId, { dry: true });
4572
- }
4573
- }
4574
- else {
4575
- await runner.update(event.def, { dry: !!inputs });
4576
- if (inputs) {
4577
- await runner.setInputs(nodeId, inputs, { dry: false });
4578
- }
4579
- }
4580
- }
4581
- else if (event.change?.type !== "setInputs" && event.change?.type !== "updateResolvedHandles") {
4582
- await runner.update(event.def, { dry: event.dry });
4583
- }
4584
- if (event.commit) {
4585
- await saveUiRuntimeMetadata(wb, runner);
4586
- const history = await runner.commit(event.reason ?? reason).catch((err) => {
4587
- console.error("[WorkbenchContext] Error committing after update:", err);
4588
- return undefined;
4589
- });
4590
- if (history) {
4591
- wb.setHistory(history);
4592
- }
4555
+ if (event.change?.type === "batch") {
4556
+ await applyBatchGraphChange(event);
4557
+ await commitGraphChange(event.commit, event.reason ?? "batch", "[WorkbenchContext] Error committing batch:");
4558
+ return;
4593
4559
  }
4560
+ const reason = getGraphReason(event);
4561
+ await applySingleGraphChange(event);
4562
+ await commitGraphChange(event.commit, event.reason ?? reason, "[WorkbenchContext] Error committing:");
4594
4563
  }
4595
4564
  catch (err) {
4596
- console.error("[WorkbenchContext] Error updating graph:", err);
4565
+ console.error("[WorkbenchContext] Error processing graph change:", err);
4597
4566
  }
4598
4567
  });
4599
4568
  const offWbSetValidation = wb.on("validationChanged", (r) => setValidation(r));