@bian-womp/spark-graph 0.3.37 → 0.3.39

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 +1 @@
1
- {"version":3,"file":"GraphBuilder.d.ts","sourceRoot":"","sources":["../../../../src/builder/GraphBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAMxD,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;CACnB;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;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAEtC,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB;IAmVhD,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;CAmC1C"}
1
+ {"version":3,"file":"GraphBuilder.d.ts","sourceRoot":"","sources":["../../../../src/builder/GraphBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAGhB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAMxD,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;CACnB;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;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAEtC,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB;IA0XhD,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;CAmC1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"GraphRuntime.d.ts","sourceRoot":"","sources":["../../../../src/runtime/GraphRuntime.ts"],"names":[],"mappings":"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"}
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
@@ -3134,22 +3134,33 @@ class GraphRuntime {
3134
3134
  if (value !== undefined && registry) {
3135
3135
  const desc = registry.nodes.get(node.typeId);
3136
3136
  const resolved = this.graph.getResolvedHandles(nodeId);
3137
- // Get typeId from resolved handles first, then registry statics
3138
- const typeId = resolved
3139
- ? getInputTypeId(resolved.inputs, handle)
3137
+ // Get declared types (may be union); prefer resolved handles over registry statics
3138
+ const declaredTypes = resolved
3139
+ ? getInputDeclaredTypes(resolved.inputs, handle)
3140
3140
  : desc
3141
- ? getInputTypeId(desc.inputs, handle)
3141
+ ? getInputDeclaredTypes(desc.inputs, handle)
3142
3142
  : undefined;
3143
- if (typeId) {
3144
- const typeDesc = registry.types.get(typeId);
3145
- if (typeDesc?.validate && !typeDesc.validate(value)) {
3146
- // Emit error event for invalid input value and reject it
3147
- const errorMessage = `Invalid value for input ${nodeId}.${handle} (type ${typeId}): ${JSON.stringify(value)}`;
3143
+ const typeIds = Array.isArray(declaredTypes)
3144
+ ? declaredTypes
3145
+ : declaredTypes
3146
+ ? [declaredTypes]
3147
+ : [];
3148
+ if (typeIds.length > 0) {
3149
+ const isValidForAny = typeIds.some((tId) => {
3150
+ const typeDesc = registry.types.get(tId);
3151
+ // If no validate function, consider it valid
3152
+ if (!typeDesc?.validate)
3153
+ return true;
3154
+ return typeDesc.validate(value);
3155
+ });
3156
+ if (!isValidForAny) {
3157
+ const typeLabel = typeIds.join("|");
3158
+ const errorMessage = `Invalid value for input ${nodeId}.${handle} (type ${typeLabel}): ${JSON.stringify(value)}`;
3148
3159
  this.eventEmitter.emit("error", {
3149
3160
  kind: "input-validation",
3150
3161
  nodeId,
3151
3162
  handle,
3152
- typeId,
3163
+ typeId: typeLabel,
3153
3164
  value,
3154
3165
  message: errorMessage,
3155
3166
  });
@@ -3739,11 +3750,30 @@ class GraphBuilder {
3739
3750
  return { inputs: {}, outputs: {} };
3740
3751
  const desc = this.registry.nodes.get(n.typeId);
3741
3752
  const resolved = n.resolvedHandles || {};
3742
- const inputs = { ...desc?.inputs, ...resolved.inputs };
3753
+ // Merge inputs properly, handling union types and metadata
3754
+ const inputs = {};
3755
+ // First, add all static handles
3756
+ if (desc?.inputs) {
3757
+ for (const [handle, staticDesc] of Object.entries(desc.inputs)) {
3758
+ inputs[handle] = staticDesc;
3759
+ }
3760
+ }
3761
+ // Then, merge resolved handles (which may override/extend static handles)
3762
+ if (resolved.inputs) {
3763
+ for (const [handle, resolvedDesc] of Object.entries(resolved.inputs)) {
3764
+ const staticDesc = desc?.inputs?.[handle];
3765
+ const merged = mergeInputHandleDescriptors(staticDesc, resolvedDesc);
3766
+ if (merged) {
3767
+ inputs[handle] = merged;
3768
+ }
3769
+ }
3770
+ }
3743
3771
  const outputs = { ...desc?.outputs, ...resolved.outputs };
3744
3772
  return { inputs, outputs };
3745
3773
  };
3746
3774
  const normOut = (decl) => Array.isArray(decl) ? decl : decl ? [decl] : [];
3775
+ const getEnumTypes = (decl) => normOut(decl).filter((t) => t.startsWith("enum:"));
3776
+ const hasArrayType = (decl) => normOut(decl).some((t) => t.endsWith("[]"));
3747
3777
  const canFlow = (from, to) => {
3748
3778
  if (!to || !from)
3749
3779
  return true;
@@ -3793,19 +3823,20 @@ class GraphBuilder {
3793
3823
  if (paramKey === "policy")
3794
3824
  continue;
3795
3825
  // Check if this param corresponds to an input handle
3796
- const inputTypeId = getInputTypeId(effectiveHandles.inputs, paramKey);
3797
- if (inputTypeId && inputTypeId.startsWith("enum:")) {
3798
- if (!validateEnumValue(inputTypeId, paramValue, n.nodeId)) {
3799
- const enumDef = this.registry.enums.get(inputTypeId);
3800
- const validValues = enumDef
3801
- ? Array.from(enumDef.valueToLabel.keys()).join(", ")
3802
- : "unknown";
3803
- pushIssue("error", "ENUM_VALUE_INVALID", `Node ${n.nodeId} param ${paramKey} has invalid enum value ${paramValue}. Valid values: ${validValues}`, {
3804
- nodeId: n.nodeId,
3805
- input: paramKey,
3806
- typeId: inputTypeId,
3807
- });
3808
- }
3826
+ const declaredTypes = getInputDeclaredTypes(effectiveHandles.inputs, paramKey);
3827
+ const enumTypes = getEnumTypes(declaredTypes);
3828
+ if (enumTypes.length > 0 &&
3829
+ typeof paramValue === "number" &&
3830
+ !enumTypes.some((et) => validateEnumValue(et, paramValue, n.nodeId))) {
3831
+ const enumDef = this.registry.enums.get(enumTypes[0]);
3832
+ const validValues = enumDef
3833
+ ? Array.from(enumDef.valueToLabel.keys()).join(", ")
3834
+ : "unknown";
3835
+ pushIssue("error", "ENUM_VALUE_INVALID", `Node ${n.nodeId} param ${paramKey} has invalid enum value ${paramValue}. Valid values: ${validValues}`, {
3836
+ nodeId: n.nodeId,
3837
+ input: paramKey,
3838
+ typeId: enumTypes.join("|"),
3839
+ });
3809
3840
  }
3810
3841
  }
3811
3842
  }
@@ -3814,19 +3845,20 @@ class GraphBuilder {
3814
3845
  if (resolved?.inputDefaults) {
3815
3846
  const effectiveHandles = getEffectiveHandles(n);
3816
3847
  for (const [handle, defaultValue] of Object.entries(resolved.inputDefaults)) {
3817
- const inputTypeId = getInputTypeId(effectiveHandles.inputs, handle);
3818
- if (inputTypeId && inputTypeId.startsWith("enum:")) {
3819
- if (!validateEnumValue(inputTypeId, defaultValue, n.nodeId)) {
3820
- const enumDef = this.registry.enums.get(inputTypeId);
3821
- const validValues = enumDef
3822
- ? Array.from(enumDef.valueToLabel.keys()).join(", ")
3823
- : "unknown";
3824
- pushIssue("warning", "ENUM_DEFAULT_INVALID", `Node ${n.nodeId} input default ${handle} has invalid enum value ${defaultValue}. Valid values: ${validValues}`, {
3825
- nodeId: n.nodeId,
3826
- input: handle,
3827
- typeId: inputTypeId,
3828
- });
3829
- }
3848
+ const declaredTypes = getInputDeclaredTypes(effectiveHandles.inputs, handle);
3849
+ const enumTypes = getEnumTypes(declaredTypes);
3850
+ if (enumTypes.length > 0 &&
3851
+ typeof defaultValue === "number" &&
3852
+ !enumTypes.some((et) => validateEnumValue(et, defaultValue, n.nodeId))) {
3853
+ const enumDef = this.registry.enums.get(enumTypes[0]);
3854
+ const validValues = enumDef
3855
+ ? Array.from(enumDef.valueToLabel.keys()).join(", ")
3856
+ : "unknown";
3857
+ pushIssue("warning", "ENUM_DEFAULT_INVALID", `Node ${n.nodeId} input default ${handle} has invalid enum value ${defaultValue}. Valid values: ${validValues}`, {
3858
+ nodeId: n.nodeId,
3859
+ input: handle,
3860
+ typeId: enumTypes.join("|"),
3861
+ });
3830
3862
  }
3831
3863
  }
3832
3864
  }
@@ -3926,8 +3958,8 @@ class GraphBuilder {
3926
3958
  inboundCounts.set(inboundKey, (inboundCounts.get(inboundKey) ?? 0) + 1);
3927
3959
  // If the target input is declared as an array type, allow multi-inbound (runtime will append)
3928
3960
  if (dstNode) {
3929
- const declaredIn = getInputTypeId((effByNodeId.get(dstNode.nodeId) || { inputs: {} }).inputs, e.target.handle);
3930
- if (typeof declaredIn === "string" && declaredIn.endsWith("[]")) {
3961
+ const declaredIn = getInputDeclaredTypes((effByNodeId.get(dstNode.nodeId) || { inputs: {} }).inputs, e.target.handle);
3962
+ if (hasArrayType(declaredIn)) {
3931
3963
  inboundArrayOk.add(inboundKey);
3932
3964
  }
3933
3965
  }
@@ -3956,10 +3988,10 @@ class GraphBuilder {
3956
3988
  const innerDesc = innerNode
3957
3989
  ? this.registry.nodes.get(innerNode.typeId)
3958
3990
  : undefined;
3959
- const typeId = innerDesc
3960
- ? getInputTypeId(innerDesc.inputs, map.handle)
3991
+ const typeIds = innerDesc
3992
+ ? getInputDeclaredTypes(innerDesc.inputs, map.handle)
3961
3993
  : undefined;
3962
- inputTypes[outerIn] = typeId ?? "untyped";
3994
+ inputTypes[outerIn] = typeIds ?? "unknown";
3963
3995
  }
3964
3996
  for (const [outerOut, map] of Object.entries(exposure.outputs)) {
3965
3997
  const innerNode = def.nodes.find((n) => n.nodeId === map.nodeId);
@@ -3968,7 +4000,7 @@ class GraphBuilder {
3968
4000
  : undefined;
3969
4001
  const typeId = innerDesc ? innerDesc.outputs[map.handle] : undefined;
3970
4002
  const single = Array.isArray(typeId) ? typeId[0] : typeId;
3971
- outputTypes[outerOut] = single ?? "untyped";
4003
+ outputTypes[outerOut] = single ?? "unknown";
3972
4004
  }
3973
4005
  return {
3974
4006
  id: nodeTypeId,