@bian-womp/spark-graph 0.2.11 → 0.2.12
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 +63 -3
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts +1 -0
- package/lib/cjs/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/esm/index.js +63 -3
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts +1 -0
- package/lib/esm/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -15,6 +15,7 @@ export declare class GraphRuntime {
|
|
|
15
15
|
private listeners;
|
|
16
16
|
private environment;
|
|
17
17
|
private paused;
|
|
18
|
+
private arrayInputBuckets;
|
|
18
19
|
private valuesEqual;
|
|
19
20
|
static create(def: GraphDefinition, registry: Registry, opts?: {
|
|
20
21
|
environment?: Record<string, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphRuntime.d.ts","sourceRoot":"","sources":["../../../../src/runtime/GraphRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,eAAe,EAIf,gBAAgB,EAGjB,MAAM,eAAe,CAAC;AAQvB,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAE/C,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,gBAAgB,IAAI,CAC7D,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,KAClB,IAAI,CAAC;AAEV,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1E,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC;CACrB;AAmCD,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,SAAS,CAGb;IACJ,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,MAAM,CAAS;
|
|
1
|
+
{"version":3,"file":"GraphRuntime.d.ts","sourceRoot":"","sources":["../../../../src/runtime/GraphRuntime.ts"],"names":[],"mappings":"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"}
|
package/lib/esm/index.js
CHANGED
|
@@ -407,6 +407,10 @@ class GraphRuntime {
|
|
|
407
407
|
this.listeners = new Map();
|
|
408
408
|
this.environment = {};
|
|
409
409
|
this.paused = false;
|
|
410
|
+
// For array-typed target inputs, keep per-edge contributions so successive runs
|
|
411
|
+
// from the same source replace their slice instead of accumulating forever.
|
|
412
|
+
// Structure: nodeId -> handle -> edgeId -> values[]
|
|
413
|
+
this.arrayInputBuckets = new Map();
|
|
410
414
|
}
|
|
411
415
|
// Shallow/deep-ish equality to avoid unnecessary runs on identical values
|
|
412
416
|
valuesEqual(a, b) {
|
|
@@ -840,11 +844,31 @@ class GraphRuntime {
|
|
|
840
844
|
return;
|
|
841
845
|
const dstIsArray = typeof e.dstDeclared === "string" && e.dstDeclared.endsWith("[]");
|
|
842
846
|
let next = v;
|
|
843
|
-
// If target input is an array type,
|
|
847
|
+
// If target input is an array type, merge per-edge contributions deterministically
|
|
844
848
|
if (dstIsArray) {
|
|
845
849
|
const toArray = (x) => Array.isArray(x) ? x : x === undefined ? [] : [x];
|
|
846
|
-
|
|
847
|
-
|
|
850
|
+
// Update this edge's contribution
|
|
851
|
+
let forNode = this.arrayInputBuckets.get(e.target.nodeId);
|
|
852
|
+
if (!forNode) {
|
|
853
|
+
forNode = new Map();
|
|
854
|
+
this.arrayInputBuckets.set(e.target.nodeId, forNode);
|
|
855
|
+
}
|
|
856
|
+
let forHandle = forNode.get(e.target.handle);
|
|
857
|
+
if (!forHandle) {
|
|
858
|
+
forHandle = new Map();
|
|
859
|
+
forNode.set(e.target.handle, forHandle);
|
|
860
|
+
}
|
|
861
|
+
forHandle.set(e.id, toArray(v));
|
|
862
|
+
// Compute merged array in the order of current edges list
|
|
863
|
+
const merged = [];
|
|
864
|
+
for (const ed of this.edges) {
|
|
865
|
+
if (ed.target.nodeId === e.target.nodeId &&
|
|
866
|
+
ed.target.handle === e.target.handle) {
|
|
867
|
+
const part = forHandle.get(ed.id);
|
|
868
|
+
if (part && part.length)
|
|
869
|
+
merged.push(...part);
|
|
870
|
+
}
|
|
871
|
+
}
|
|
848
872
|
next = merged;
|
|
849
873
|
}
|
|
850
874
|
const prev = dstNode.inputs[e.target.handle];
|
|
@@ -995,6 +1019,7 @@ class GraphRuntime {
|
|
|
995
1019
|
this.nodes.clear();
|
|
996
1020
|
this.edges = [];
|
|
997
1021
|
this.listeners.clear();
|
|
1022
|
+
this.arrayInputBuckets.clear();
|
|
998
1023
|
}
|
|
999
1024
|
getNodeIds() {
|
|
1000
1025
|
return Array.from(this.nodes.keys());
|
|
@@ -1122,6 +1147,8 @@ class GraphRuntime {
|
|
|
1122
1147
|
setState: (next) => Object.assign(node.state, next),
|
|
1123
1148
|
});
|
|
1124
1149
|
this.nodes.delete(nodeId);
|
|
1150
|
+
// Clear any array buckets for this node
|
|
1151
|
+
this.arrayInputBuckets.delete(nodeId);
|
|
1125
1152
|
}
|
|
1126
1153
|
}
|
|
1127
1154
|
// Add or update existing nodes
|
|
@@ -1299,6 +1326,16 @@ class GraphRuntime {
|
|
|
1299
1326
|
}
|
|
1300
1327
|
}
|
|
1301
1328
|
}
|
|
1329
|
+
// Clear buckets for handles that lost inbound
|
|
1330
|
+
const bucketsForNode = this.arrayInputBuckets.get(nodeId);
|
|
1331
|
+
if (bucketsForNode) {
|
|
1332
|
+
for (const handle of Array.from(prevSet)) {
|
|
1333
|
+
if (!currSet.has(handle))
|
|
1334
|
+
bucketsForNode.delete(handle);
|
|
1335
|
+
}
|
|
1336
|
+
if (bucketsForNode.size === 0)
|
|
1337
|
+
this.arrayInputBuckets.delete(nodeId);
|
|
1338
|
+
}
|
|
1302
1339
|
this.scheduleInputsChanged(nodeId);
|
|
1303
1340
|
}
|
|
1304
1341
|
}
|
|
@@ -1346,6 +1383,29 @@ class GraphRuntime {
|
|
|
1346
1383
|
}
|
|
1347
1384
|
}
|
|
1348
1385
|
}
|
|
1386
|
+
// Prune array bucket contributions for edges that no longer exist
|
|
1387
|
+
const validPerTarget = new Map();
|
|
1388
|
+
for (const ed of this.edges) {
|
|
1389
|
+
const m = validPerTarget.get(ed.target.nodeId) ?? new Map();
|
|
1390
|
+
const s = m.get(ed.target.handle) ?? new Set();
|
|
1391
|
+
s.add(ed.id);
|
|
1392
|
+
m.set(ed.target.handle, s);
|
|
1393
|
+
validPerTarget.set(ed.target.nodeId, m);
|
|
1394
|
+
}
|
|
1395
|
+
for (const [nodeId, byHandle] of Array.from(this.arrayInputBuckets)) {
|
|
1396
|
+
const validHandles = validPerTarget.get(nodeId) ?? new Map();
|
|
1397
|
+
for (const [handle, perEdge] of Array.from(byHandle)) {
|
|
1398
|
+
const validEdgeIds = validHandles.get(handle) ?? new Set();
|
|
1399
|
+
for (const edgeId of Array.from(perEdge.keys())) {
|
|
1400
|
+
if (!validEdgeIds.has(edgeId))
|
|
1401
|
+
perEdge.delete(edgeId);
|
|
1402
|
+
}
|
|
1403
|
+
if (perEdge.size === 0)
|
|
1404
|
+
byHandle.delete(handle);
|
|
1405
|
+
}
|
|
1406
|
+
if (byHandle.size === 0)
|
|
1407
|
+
this.arrayInputBuckets.delete(nodeId);
|
|
1408
|
+
}
|
|
1349
1409
|
}
|
|
1350
1410
|
}
|
|
1351
1411
|
|