@bian-womp/spark-graph 0.2.16 → 0.2.18
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 +165 -189
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/builder/GraphBuilder.d.ts.map +1 -1
- package/lib/cjs/src/core/types.d.ts +3 -4
- package/lib/cjs/src/core/types.d.ts.map +1 -1
- package/lib/cjs/src/misc/base.d.ts.map +1 -1
- package/lib/cjs/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/lib/esm/index.js +165 -189
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/builder/GraphBuilder.d.ts.map +1 -1
- package/lib/esm/src/core/types.d.ts +3 -4
- package/lib/esm/src/core/types.d.ts.map +1 -1
- package/lib/esm/src/misc/base.d.ts.map +1 -1
- package/lib/esm/src/runtime/GraphRuntime.d.ts.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphBuilder.d.ts","sourceRoot":"","sources":["../../../../src/builder/GraphBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"GraphBuilder.d.ts","sourceRoot":"","sources":["../../../../src/builder/GraphBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EAGf,kBAAkB,EAEnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AACD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAEtC,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB;IAiRhD,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,YAAY;IAI9D,UAAU,CACR,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC3D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC7D,EACD,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CAkC1C"}
|
|
@@ -76,11 +76,9 @@ export interface NodeTypeDescriptor<I extends Record<string, InputHandleDescript
|
|
|
76
76
|
}) => {
|
|
77
77
|
inputs?: Record<string, InputHandleDescriptor>;
|
|
78
78
|
outputs?: Record<string, DataTypeId | DataTypeId[]>;
|
|
79
|
+
inputDefaults?: Record<string, unknown>;
|
|
79
80
|
};
|
|
80
|
-
inputDefaults?: Record<string, unknown
|
|
81
|
-
params?: Record<string, unknown>;
|
|
82
|
-
environment: Record<string, unknown>;
|
|
83
|
-
}) => Record<string, unknown>);
|
|
81
|
+
inputDefaults?: Record<string, unknown>;
|
|
84
82
|
lifecycle?: {
|
|
85
83
|
init?: (initial: Record<string, unknown>, ctx: NodeContext<State>) => void | Promise<void>;
|
|
86
84
|
dispose?: (ctx: NodeContext<State>) => void;
|
|
@@ -89,6 +87,7 @@ export interface NodeTypeDescriptor<I extends Record<string, InputHandleDescript
|
|
|
89
87
|
export type ResolvedHandles = {
|
|
90
88
|
inputs: Record<string, InputHandleDescriptor>;
|
|
91
89
|
outputs: Record<string, DataTypeId | DataTypeId[]>;
|
|
90
|
+
inputDefaults?: Record<string, unknown>;
|
|
92
91
|
};
|
|
93
92
|
export interface GraphNodeDefinition {
|
|
94
93
|
nodeId: NodeInstanceId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/misc/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,eAAe,CAAC;AA+IvB,wBAAgB,uBAAuB,IAAI,QAAQ,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/misc/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,eAAe,CAAC;AA+IvB,wBAAgB,uBAAuB,IAAI,QAAQ,CAq8BlD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,QA+BnD;AAqBD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,QA6BvD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,6BAUrE"}
|
|
@@ -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,EAGhB,eAAe,EAChB,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;IAElC,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,SAAS,CAGb;IACJ,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,MAAM,CAAS;IAIvB,OAAO,CAAC,iBAAiB,CAGrB;IAGJ,OAAO,CAAC,WAAW;IAanB,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,QAAQ,EAClB,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAC/C,YAAY;
|
|
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
|
@@ -475,23 +475,20 @@ class GraphRuntime {
|
|
|
475
475
|
}
|
|
476
476
|
// Instantiate edges
|
|
477
477
|
gr.edges = GraphRuntime.buildEdges(def, registry, gr.resolvedByNode);
|
|
478
|
-
// After nodes and edges exist, seed registry- and graph-level defaults
|
|
478
|
+
// After nodes and edges exist, seed registry-, dynamic- and graph-level defaults
|
|
479
479
|
for (const n of def.nodes) {
|
|
480
480
|
const node = gr.nodes.get(n.nodeId);
|
|
481
481
|
const desc = registry.nodes.get(n.typeId);
|
|
482
482
|
if (!node || !desc)
|
|
483
483
|
continue;
|
|
484
|
-
// Resolve registry-level defaults
|
|
485
|
-
const regDefaults =
|
|
486
|
-
|
|
487
|
-
params: n.params,
|
|
488
|
-
environment: gr.environment,
|
|
489
|
-
})
|
|
490
|
-
: desc.inputDefaults ?? {};
|
|
484
|
+
// Resolve registry-level defaults and dynamic (resolved) defaults
|
|
485
|
+
const regDefaults = desc.inputDefaults ?? {};
|
|
486
|
+
const dynDefaults = gr.resolvedByNode.get(n.nodeId)?.inputDefaults ?? {};
|
|
491
487
|
const graphDefaults = n.initialInputs ?? {};
|
|
492
|
-
// Apply precedence: graph-level overrides registry-level
|
|
488
|
+
// Apply precedence: graph-level overrides dynamic, which overrides registry-level
|
|
493
489
|
const merged = {
|
|
494
490
|
...regDefaults,
|
|
491
|
+
...dynDefaults,
|
|
495
492
|
...graphDefaults,
|
|
496
493
|
};
|
|
497
494
|
for (const [handle, value] of Object.entries(merged)) {
|
|
@@ -913,10 +910,12 @@ class GraphRuntime {
|
|
|
913
910
|
continue;
|
|
914
911
|
const overrideInputs = n.resolvedHandles?.inputs;
|
|
915
912
|
const overrideOutputs = n.resolvedHandles?.outputs;
|
|
913
|
+
const overrideDefaults = n.resolvedHandles?.inputDefaults;
|
|
916
914
|
// Merge base with overrides (allow partial resolvedHandles)
|
|
917
915
|
const inputs = { ...desc.inputs, ...overrideInputs };
|
|
918
916
|
const outputs = { ...desc.outputs, ...overrideOutputs };
|
|
919
|
-
|
|
917
|
+
const inputDefaults = { ...desc.inputDefaults, ...overrideDefaults };
|
|
918
|
+
out.set(n.nodeId, { inputs, outputs, inputDefaults });
|
|
920
919
|
}
|
|
921
920
|
return out;
|
|
922
921
|
}
|
|
@@ -1324,15 +1323,12 @@ class GraphRuntime {
|
|
|
1324
1323
|
if (defNode) {
|
|
1325
1324
|
const desc = registry.nodes.get(defNode.typeId);
|
|
1326
1325
|
if (desc) {
|
|
1327
|
-
const regDefaults =
|
|
1328
|
-
|
|
1329
|
-
params: defNode.params,
|
|
1330
|
-
environment: this.environment,
|
|
1331
|
-
})
|
|
1332
|
-
: desc.inputDefaults ?? {};
|
|
1326
|
+
const regDefaults = desc.inputDefaults ?? {};
|
|
1327
|
+
const dynDefaults = this.resolvedByNode.get(defNode.nodeId)?.inputDefaults ?? {};
|
|
1333
1328
|
const graphDefaults = defNode.initialInputs ?? {};
|
|
1334
1329
|
const merged = {
|
|
1335
1330
|
...regDefaults,
|
|
1331
|
+
...dynDefaults,
|
|
1336
1332
|
...graphDefaults,
|
|
1337
1333
|
};
|
|
1338
1334
|
for (const h of Array.from(prevSet)) {
|
|
@@ -1404,6 +1400,34 @@ class GraphRuntime {
|
|
|
1404
1400
|
}
|
|
1405
1401
|
}
|
|
1406
1402
|
}
|
|
1403
|
+
// Seed defaults for nodes (new or existing) where inputs are still undefined and not inbound
|
|
1404
|
+
for (const n of def.nodes) {
|
|
1405
|
+
const node = this.nodes.get(n.nodeId);
|
|
1406
|
+
const desc = registry.nodes.get(n.typeId);
|
|
1407
|
+
if (!node || !desc)
|
|
1408
|
+
continue;
|
|
1409
|
+
const regDefaults = desc.inputDefaults ?? {};
|
|
1410
|
+
const dynDefaults = this.resolvedByNode.get(n.nodeId)?.inputDefaults ?? {};
|
|
1411
|
+
const graphDefaults = n.initialInputs ?? {};
|
|
1412
|
+
const merged = {
|
|
1413
|
+
...regDefaults,
|
|
1414
|
+
...dynDefaults,
|
|
1415
|
+
...graphDefaults,
|
|
1416
|
+
};
|
|
1417
|
+
const inboundSet = nextInbound.get(n.nodeId) ?? new Set();
|
|
1418
|
+
for (const [handle, value] of Object.entries(merged)) {
|
|
1419
|
+
if (value === undefined)
|
|
1420
|
+
continue;
|
|
1421
|
+
if (inboundSet.has(handle))
|
|
1422
|
+
continue;
|
|
1423
|
+
if (node.inputs[handle] !== undefined)
|
|
1424
|
+
continue;
|
|
1425
|
+
node.inputs[handle] =
|
|
1426
|
+
typeof structuredClone === "function"
|
|
1427
|
+
? structuredClone(value)
|
|
1428
|
+
: JSON.parse(JSON.stringify(value));
|
|
1429
|
+
}
|
|
1430
|
+
}
|
|
1407
1431
|
// Prune array bucket contributions for edges that no longer exist
|
|
1408
1432
|
const validPerTarget = new Map();
|
|
1409
1433
|
for (const ed of this.edges) {
|
|
@@ -1438,35 +1462,56 @@ class GraphBuilder {
|
|
|
1438
1462
|
const issues = [];
|
|
1439
1463
|
const nodeIds = new Set();
|
|
1440
1464
|
const edgeIds = new Set();
|
|
1465
|
+
// Precompute effective handle maps (registry statics merged with per-node resolvedHandles)
|
|
1466
|
+
const nodeById = new Map();
|
|
1467
|
+
const effByNodeId = new Map();
|
|
1468
|
+
const getEffectiveHandles = (n) => {
|
|
1469
|
+
if (!n)
|
|
1470
|
+
return { inputs: {}, outputs: {} };
|
|
1471
|
+
const desc = this.registry.nodes.get(n.typeId);
|
|
1472
|
+
const resolved = n.resolvedHandles || {};
|
|
1473
|
+
const inputs = { ...desc?.inputs, ...resolved.inputs };
|
|
1474
|
+
const outputs = { ...desc?.outputs, ...resolved.outputs };
|
|
1475
|
+
return { inputs, outputs };
|
|
1476
|
+
};
|
|
1477
|
+
const normOut = (decl) => Array.isArray(decl) ? decl : decl ? [decl] : [];
|
|
1478
|
+
const inferEdgeType = (srcDeclared, dstDeclared, explicit) => {
|
|
1479
|
+
if (explicit)
|
|
1480
|
+
return explicit;
|
|
1481
|
+
if (Array.isArray(srcDeclared) && dstDeclared)
|
|
1482
|
+
return dstDeclared;
|
|
1483
|
+
if (srcDeclared)
|
|
1484
|
+
return Array.isArray(srcDeclared) ? srcDeclared[0] : srcDeclared;
|
|
1485
|
+
return undefined;
|
|
1486
|
+
};
|
|
1487
|
+
const canFlow = (from, to) => {
|
|
1488
|
+
if (!to || !from)
|
|
1489
|
+
return true;
|
|
1490
|
+
const arr = Array.isArray(from) ? from : [from];
|
|
1491
|
+
return arr.every((s) => s === to || !!this.registry.canCoerce(s, to));
|
|
1492
|
+
};
|
|
1493
|
+
const pushIssue = (level, code, message, data) => {
|
|
1494
|
+
issues.push({ level, code, message, data });
|
|
1495
|
+
};
|
|
1441
1496
|
// nodes exist, ids unique, and categories registered
|
|
1442
1497
|
for (const n of def.nodes) {
|
|
1443
1498
|
if (nodeIds.has(n.nodeId)) {
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
code: "NODE_ID_DUP",
|
|
1447
|
-
message: `Duplicate nodeId ${n.nodeId}`,
|
|
1448
|
-
data: { nodeId: n.nodeId },
|
|
1499
|
+
pushIssue("error", "NODE_ID_DUP", `Duplicate nodeId ${n.nodeId}`, {
|
|
1500
|
+
nodeId: n.nodeId,
|
|
1449
1501
|
});
|
|
1450
1502
|
}
|
|
1451
1503
|
else {
|
|
1452
1504
|
nodeIds.add(n.nodeId);
|
|
1453
1505
|
}
|
|
1506
|
+
nodeById.set(n.nodeId, n);
|
|
1507
|
+
effByNodeId.set(n.nodeId, getEffectiveHandles(n));
|
|
1454
1508
|
const nodeType = this.registry.nodes.get(n.typeId);
|
|
1455
1509
|
if (!nodeType) {
|
|
1456
|
-
|
|
1457
|
-
level: "error",
|
|
1458
|
-
code: "NODE_TYPE_MISSING",
|
|
1459
|
-
message: `Unknown node type ${n.typeId}`,
|
|
1460
|
-
data: { typeId: n.typeId, nodeId: n.nodeId },
|
|
1461
|
-
});
|
|
1510
|
+
pushIssue("error", "NODE_TYPE_MISSING", `Unknown node type ${n.typeId}`, { typeId: n.typeId, nodeId: n.nodeId });
|
|
1462
1511
|
continue;
|
|
1463
1512
|
}
|
|
1464
1513
|
if (!this.registry.categories.has(nodeType.categoryId)) {
|
|
1465
|
-
|
|
1466
|
-
level: "error",
|
|
1467
|
-
code: "CATEGORY_MISSING",
|
|
1468
|
-
message: `Unknown category ${nodeType.categoryId} for node type ${n.typeId}`,
|
|
1469
|
-
});
|
|
1514
|
+
pushIssue("error", "CATEGORY_MISSING", `Unknown category ${nodeType.categoryId} for node type ${n.typeId}`);
|
|
1470
1515
|
}
|
|
1471
1516
|
}
|
|
1472
1517
|
// edges validation: nodes exist, handles exist, type exists
|
|
@@ -1475,186 +1520,96 @@ class GraphBuilder {
|
|
|
1475
1520
|
const inboundArrayOk = new Set();
|
|
1476
1521
|
for (const e of def.edges) {
|
|
1477
1522
|
if (edgeIds.has(e.id)) {
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
code: "EDGE_ID_DUP",
|
|
1481
|
-
message: `Duplicate edge id ${e.id}`,
|
|
1482
|
-
data: { edgeId: e.id },
|
|
1523
|
+
pushIssue("error", "EDGE_ID_DUP", `Duplicate edge id ${e.id}`, {
|
|
1524
|
+
edgeId: e.id,
|
|
1483
1525
|
});
|
|
1484
1526
|
}
|
|
1485
1527
|
else {
|
|
1486
1528
|
edgeIds.add(e.id);
|
|
1487
1529
|
}
|
|
1488
|
-
const srcNode =
|
|
1489
|
-
const dstNode =
|
|
1530
|
+
const srcNode = nodeById.get(e.source.nodeId);
|
|
1531
|
+
const dstNode = nodeById.get(e.target.nodeId);
|
|
1490
1532
|
if (!srcNode)
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
code: "EDGE_SOURCE_MISSING",
|
|
1494
|
-
message: `Edge ${e.id} source node missing`,
|
|
1495
|
-
data: { edgeId: e.id },
|
|
1533
|
+
pushIssue("error", "EDGE_SOURCE_MISSING", `Edge ${e.id} source node missing`, {
|
|
1534
|
+
edgeId: e.id,
|
|
1496
1535
|
});
|
|
1497
1536
|
if (!dstNode)
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
code: "EDGE_TARGET_MISSING",
|
|
1501
|
-
message: `Edge ${e.id} target node missing`,
|
|
1502
|
-
data: { edgeId: e.id },
|
|
1537
|
+
pushIssue("error", "EDGE_TARGET_MISSING", `Edge ${e.id} target node missing`, {
|
|
1538
|
+
edgeId: e.id,
|
|
1503
1539
|
});
|
|
1504
|
-
//
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
if (!effectiveTypeId) {
|
|
1519
|
-
if (Array.isArray(_srcDeclared) && _dstDeclared) {
|
|
1520
|
-
// When source is a union and target input type is known, adopt the input type
|
|
1521
|
-
// so validation checks are performed against the target, not an arbitrary variant.
|
|
1522
|
-
effectiveTypeId = _dstDeclared;
|
|
1523
|
-
}
|
|
1524
|
-
else if (_srcDeclared) {
|
|
1525
|
-
effectiveTypeId = Array.isArray(_srcDeclared)
|
|
1526
|
-
? _srcDeclared[0]
|
|
1527
|
-
: _srcDeclared;
|
|
1528
|
-
}
|
|
1529
|
-
}
|
|
1540
|
+
// Effective handle declarations
|
|
1541
|
+
const srcEff = effByNodeId.get(e.source.nodeId) || {
|
|
1542
|
+
outputs: {},
|
|
1543
|
+
};
|
|
1544
|
+
const dstEff = effByNodeId.get(e.target.nodeId) || {
|
|
1545
|
+
inputs: {}};
|
|
1546
|
+
const _srcDeclared = srcNode
|
|
1547
|
+
? srcEff.outputs[e.source.handle]
|
|
1548
|
+
: undefined;
|
|
1549
|
+
const _dstDeclared = dstNode
|
|
1550
|
+
? getInputTypeId(dstEff.inputs, e.target.handle)
|
|
1551
|
+
: undefined;
|
|
1552
|
+
// Effective edge type
|
|
1553
|
+
const effectiveTypeId = inferEdgeType(_srcDeclared, _dstDeclared, e.typeId);
|
|
1530
1554
|
const type = effectiveTypeId
|
|
1531
1555
|
? this.registry.types.get(effectiveTypeId)
|
|
1532
1556
|
: undefined;
|
|
1533
1557
|
if (!type) {
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
code: "TYPE_MISSING",
|
|
1537
|
-
message: `Edge ${e.id} type missing or unknown`,
|
|
1538
|
-
data: { edgeId: e.id },
|
|
1558
|
+
pushIssue("error", "TYPE_MISSING", `Edge ${e.id} type missing or unknown`, {
|
|
1559
|
+
edgeId: e.id,
|
|
1539
1560
|
});
|
|
1540
1561
|
}
|
|
1541
1562
|
if (srcNode) {
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
issues.push({
|
|
1545
|
-
level: "error",
|
|
1546
|
-
code: "OUTPUT_MISSING",
|
|
1547
|
-
message: `Edge ${e.id} source output ${e.source.handle} missing on ${srcNode.typeId}`,
|
|
1548
|
-
data: {
|
|
1549
|
-
edgeId: e.id,
|
|
1550
|
-
nodeId: srcNode.nodeId,
|
|
1551
|
-
output: e.source.handle,
|
|
1552
|
-
},
|
|
1553
|
-
});
|
|
1563
|
+
if (!(e.source.handle in srcEff.outputs)) {
|
|
1564
|
+
pushIssue("error", "OUTPUT_MISSING", `Edge ${e.id} source output ${e.source.handle} missing on ${srcNode.typeId}`, { edgeId: e.id, nodeId: srcNode.nodeId, output: e.source.handle });
|
|
1554
1565
|
}
|
|
1555
|
-
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
issues.push({
|
|
1567
|
-
level: "error",
|
|
1568
|
-
code: "TYPE_MISMATCH_OUTPUT",
|
|
1569
|
-
message: `Edge ${e.id} type ${effectiveTypeId} mismatches source output ${srcNode.typeId}.${e.source.handle} (${s}) and no coercion exists`,
|
|
1570
|
-
data: {
|
|
1571
|
-
edgeId: e.id,
|
|
1572
|
-
nodeId: srcNode.nodeId,
|
|
1573
|
-
output: e.source.handle,
|
|
1574
|
-
declared: s,
|
|
1575
|
-
effectiveTypeId,
|
|
1576
|
-
},
|
|
1577
|
-
});
|
|
1578
|
-
}
|
|
1579
|
-
}
|
|
1580
|
-
}
|
|
1566
|
+
const declaredArr = normOut(srcEff.outputs[e.source.handle]);
|
|
1567
|
+
if (declaredArr.length > 0 &&
|
|
1568
|
+
effectiveTypeId &&
|
|
1569
|
+
!canFlow(declaredArr, effectiveTypeId)) {
|
|
1570
|
+
pushIssue("error", "TYPE_MISMATCH_OUTPUT", `Edge ${e.id} type ${effectiveTypeId} mismatches source output ${srcNode.typeId}.${e.source.handle} (${declaredArr.join("|")}) and no coercion exists`, {
|
|
1571
|
+
edgeId: e.id,
|
|
1572
|
+
nodeId: srcNode.nodeId,
|
|
1573
|
+
output: e.source.handle,
|
|
1574
|
+
declared: declaredArr.join("|"),
|
|
1575
|
+
effectiveTypeId,
|
|
1576
|
+
});
|
|
1581
1577
|
}
|
|
1582
1578
|
}
|
|
1583
1579
|
if (dstNode) {
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
data: {
|
|
1591
|
-
edgeId: e.id,
|
|
1592
|
-
nodeId: dstNode.nodeId,
|
|
1593
|
-
input: e.target.handle,
|
|
1594
|
-
},
|
|
1595
|
-
});
|
|
1580
|
+
if (!(e.target.handle in dstEff.inputs)) {
|
|
1581
|
+
pushIssue("error", "INPUT_MISSING", `Edge ${e.id} target input ${e.target.handle} missing on ${dstNode.typeId}`, { edgeId: e.id, nodeId: dstNode.nodeId, input: e.target.handle });
|
|
1582
|
+
}
|
|
1583
|
+
// Private inputs should not accept edges
|
|
1584
|
+
if (isInputPrivate(dstEff.inputs, e.target.handle)) {
|
|
1585
|
+
pushIssue("error", "INPUT_PRIVATE", `Edge ${e.id} targets private input ${dstNode.typeId}.${e.target.handle}`, { edgeId: e.id, nodeId: dstNode.nodeId, input: e.target.handle });
|
|
1596
1586
|
}
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
if (
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1587
|
+
const declaredIn = getInputTypeId(dstEff.inputs, e.target.handle);
|
|
1588
|
+
if (declaredIn && effectiveTypeId) {
|
|
1589
|
+
if (srcNode) {
|
|
1590
|
+
const srcDeclared = srcEff.outputs[e.source.handle];
|
|
1591
|
+
const srcArr = normOut(srcDeclared).length
|
|
1592
|
+
? normOut(srcDeclared)
|
|
1593
|
+
: [effectiveTypeId];
|
|
1594
|
+
if (!canFlow(srcArr, declaredIn)) {
|
|
1595
|
+
pushIssue("error", "TYPE_MISMATCH_INPUT", `Edge ${e.id} output type ${srcArr.join("|")} not convertible to target input ${dstNode.typeId}.${e.target.handle} (${declaredIn})`, {
|
|
1605
1596
|
edgeId: e.id,
|
|
1606
1597
|
nodeId: dstNode.nodeId,
|
|
1607
1598
|
input: e.target.handle,
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
}
|
|
1611
|
-
const declaredIn = getInputTypeId(dstType.inputs, e.target.handle);
|
|
1612
|
-
if (declaredIn && effectiveTypeId) {
|
|
1613
|
-
// If source is a union, ensure each variant can reach declaredIn
|
|
1614
|
-
if (srcNode) {
|
|
1615
|
-
const srcType = this.registry.nodes.get(srcNode.typeId);
|
|
1616
|
-
const srcDeclared = srcType?.outputs[e.source.handle];
|
|
1617
|
-
const srcArr = Array.isArray(srcDeclared)
|
|
1618
|
-
? srcDeclared
|
|
1619
|
-
: srcDeclared
|
|
1620
|
-
? [srcDeclared]
|
|
1621
|
-
: effectiveTypeId
|
|
1622
|
-
? [effectiveTypeId]
|
|
1623
|
-
: [];
|
|
1624
|
-
for (const s of srcArr) {
|
|
1625
|
-
if (s !== declaredIn &&
|
|
1626
|
-
!this.registry.canCoerce(s, declaredIn)) {
|
|
1627
|
-
issues.push({
|
|
1628
|
-
level: "error",
|
|
1629
|
-
code: "TYPE_MISMATCH_INPUT",
|
|
1630
|
-
message: `Edge ${e.id} output type ${s} not convertible to target input ${dstNode.typeId}.${e.target.handle} (${declaredIn})`,
|
|
1631
|
-
data: {
|
|
1632
|
-
edgeId: e.id,
|
|
1633
|
-
nodeId: dstNode.nodeId,
|
|
1634
|
-
input: e.target.handle,
|
|
1635
|
-
declared: declaredIn,
|
|
1636
|
-
effectiveTypeId: s,
|
|
1637
|
-
},
|
|
1638
|
-
});
|
|
1639
|
-
}
|
|
1640
|
-
}
|
|
1641
|
-
}
|
|
1642
|
-
else if (declaredIn !== effectiveTypeId &&
|
|
1643
|
-
!this.registry.canCoerce(effectiveTypeId, declaredIn)) {
|
|
1644
|
-
issues.push({
|
|
1645
|
-
level: "error",
|
|
1646
|
-
code: "TYPE_MISMATCH_INPUT",
|
|
1647
|
-
message: `Edge ${e.id} type ${effectiveTypeId} mismatches target input ${dstNode.typeId}.${e.target.handle} (${declaredIn}) and no coercion exists`,
|
|
1648
|
-
data: {
|
|
1649
|
-
edgeId: e.id,
|
|
1650
|
-
nodeId: dstNode.nodeId,
|
|
1651
|
-
input: e.target.handle,
|
|
1652
|
-
declared: declaredIn,
|
|
1653
|
-
effectiveTypeId,
|
|
1654
|
-
},
|
|
1599
|
+
declared: declaredIn,
|
|
1600
|
+
effectiveTypeId: srcArr.join("|"),
|
|
1655
1601
|
});
|
|
1656
1602
|
}
|
|
1657
1603
|
}
|
|
1604
|
+
else if (!canFlow(effectiveTypeId, declaredIn)) {
|
|
1605
|
+
pushIssue("error", "TYPE_MISMATCH_INPUT", `Edge ${e.id} type ${effectiveTypeId} mismatches target input ${dstNode.typeId}.${e.target.handle} (${declaredIn}) and no coercion exists`, {
|
|
1606
|
+
edgeId: e.id,
|
|
1607
|
+
nodeId: dstNode.nodeId,
|
|
1608
|
+
input: e.target.handle,
|
|
1609
|
+
declared: declaredIn,
|
|
1610
|
+
effectiveTypeId,
|
|
1611
|
+
});
|
|
1612
|
+
}
|
|
1658
1613
|
}
|
|
1659
1614
|
}
|
|
1660
1615
|
// Track multiple inbound edges targeting the same input handle
|
|
@@ -1662,10 +1617,7 @@ class GraphBuilder {
|
|
|
1662
1617
|
inboundCounts.set(inboundKey, (inboundCounts.get(inboundKey) ?? 0) + 1);
|
|
1663
1618
|
// If the target input is declared as an array type, allow multi-inbound (runtime will append)
|
|
1664
1619
|
if (dstNode) {
|
|
1665
|
-
const
|
|
1666
|
-
const declaredIn = dstType
|
|
1667
|
-
? getInputTypeId(dstType.inputs, e.target.handle)
|
|
1668
|
-
: undefined;
|
|
1620
|
+
const declaredIn = getInputTypeId((effByNodeId.get(dstNode.nodeId) || { inputs: {} }).inputs, e.target.handle);
|
|
1669
1621
|
if (typeof declaredIn === "string" && declaredIn.endsWith("[]")) {
|
|
1670
1622
|
inboundArrayOk.add(inboundKey);
|
|
1671
1623
|
}
|
|
@@ -2687,6 +2639,30 @@ function setupBasicGraphRegistry() {
|
|
|
2687
2639
|
return { Items: Array.from({ length }, (_, i) => ins[`Item${i}`]) };
|
|
2688
2640
|
},
|
|
2689
2641
|
});
|
|
2642
|
+
// Decompose array into dynamic item outputs
|
|
2643
|
+
registry.registerNode({
|
|
2644
|
+
id: "base.array.decompose",
|
|
2645
|
+
categoryId: "compute",
|
|
2646
|
+
inputs: { Items: "base.object" },
|
|
2647
|
+
outputs: {},
|
|
2648
|
+
resolveHandles: ({ inputs }) => {
|
|
2649
|
+
const maxLen = 64;
|
|
2650
|
+
const arr = Array.isArray(inputs?.Items) ? inputs?.Items : [];
|
|
2651
|
+
const n = Math.max(0, Math.min(maxLen, arr.length));
|
|
2652
|
+
const dyn = {};
|
|
2653
|
+
for (let i = 0; i < n; i++)
|
|
2654
|
+
dyn[`Item${i}`] = "base.object";
|
|
2655
|
+
return { outputs: dyn };
|
|
2656
|
+
},
|
|
2657
|
+
impl: (ins) => {
|
|
2658
|
+
const arr = Array.isArray(ins.Items) ? ins.Items : [];
|
|
2659
|
+
const out = {};
|
|
2660
|
+
const n = Math.max(0, Math.min(64, arr.length));
|
|
2661
|
+
for (let i = 0; i < n; i++)
|
|
2662
|
+
out[`Item${i}`] = arr[i];
|
|
2663
|
+
return out;
|
|
2664
|
+
},
|
|
2665
|
+
});
|
|
2690
2666
|
// Select
|
|
2691
2667
|
registry.registerNode({
|
|
2692
2668
|
id: "base.select",
|