@bian-womp/spark-graph 0.2.1 → 0.2.3

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":"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,CAq3BlD;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
+ {"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,CA64BlD;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":"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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
@@ -801,6 +801,10 @@ class GraphRuntime {
801
801
  propagate(srcNodeId, srcHandle, value) {
802
802
  // set source output
803
803
  const srcNode = this.nodes.get(srcNodeId);
804
+ if (!srcNode) {
805
+ // Node was removed (e.g., graph updated) but an async emit arrived late; ignore
806
+ return;
807
+ }
804
808
  srcNode.outputs[srcHandle] = value;
805
809
  this.emit("value", {
806
810
  nodeId: srcNodeId,
@@ -2006,35 +2010,38 @@ function setupBasicGraphRegistry() {
2006
2010
  registry.registerCoercion("base.string", "base.float", (v) => Number(v));
2007
2011
  // Object <-> String
2008
2012
  registry.registerCoercion("base.string", "base.object", (v) => {
2009
- try {
2010
- return JSON.parse(String(v));
2011
- }
2012
- catch {
2013
- return undefined;
2014
- }
2013
+ return v;
2015
2014
  });
2016
2015
  registry.registerCoercion("base.object", "base.string", (v) => {
2017
- try {
2018
- return JSON.stringify(v);
2019
- }
2020
- catch {
2021
- return String(v);
2022
- }
2016
+ if (typeof v === "string")
2017
+ return v;
2018
+ return undefined;
2019
+ });
2020
+ registry.registerCoercion("base.bool", "base.object", (v) => {
2021
+ return v;
2022
+ });
2023
+ registry.registerCoercion("base.object", "base.bool", (v) => {
2024
+ if (typeof v === "boolean")
2025
+ return v;
2026
+ return undefined;
2027
+ });
2028
+ registry.registerCoercion("base.float", "base.object", (v) => {
2029
+ return v;
2030
+ });
2031
+ registry.registerCoercion("base.object", "base.float", (v) => {
2032
+ if (typeof v === "number")
2033
+ return v;
2034
+ return undefined;
2023
2035
  });
2024
2036
  registry.registerCoercion("base.vec3", "base.object", (v) => {
2025
- try {
2026
- return v ? JSON.stringify(v) : undefined;
2027
- }
2028
- catch {
2029
- return undefined;
2030
- }
2037
+ return v;
2031
2038
  });
2032
2039
  registry.registerCoercion("base.object", "base.vec3", (v) => {
2033
2040
  try {
2034
- const result = JSON.parse(v);
2035
- if (result.length === 3 &&
2036
- result.every((x) => typeof x === "number")) {
2037
- return result;
2041
+ if (Array.isArray(v) &&
2042
+ v.length === 3 &&
2043
+ v.every((x) => typeof x === "number")) {
2044
+ return v;
2038
2045
  }
2039
2046
  return undefined;
2040
2047
  }
@@ -2115,6 +2122,20 @@ function setupBasicGraphRegistry() {
2115
2122
  outputs: { Result: "base.float" },
2116
2123
  impl: (ins) => ({ Result: Number(ins.Value) }),
2117
2124
  });
2125
+ registry.registerNode({
2126
+ id: "base.string",
2127
+ categoryId: "compute",
2128
+ inputs: { Value: "base.string" },
2129
+ outputs: { Result: "base.string" },
2130
+ impl: (ins) => ({ Result: String(ins.Value) }),
2131
+ });
2132
+ registry.registerNode({
2133
+ id: "base.bool",
2134
+ categoryId: "compute",
2135
+ inputs: { Value: "base.bool" },
2136
+ outputs: { Result: "base.bool" },
2137
+ impl: (ins) => ({ Result: Boolean(ins.Value) }),
2138
+ });
2118
2139
  // Integer
2119
2140
  registry.registerNode({
2120
2141
  id: "base.int",
@@ -2127,7 +2148,7 @@ function setupBasicGraphRegistry() {
2127
2148
  });
2128
2149
  // JSON parser node: base.stringToObject
2129
2150
  registry.registerNode({
2130
- id: "base.stringToObject",
2151
+ id: "base.string.toObject",
2131
2152
  categoryId: "compute",
2132
2153
  inputs: { Text: "base.string" },
2133
2154
  outputs: { Object: "base.object" },
@@ -2142,13 +2163,14 @@ function setupBasicGraphRegistry() {
2142
2163
  }
2143
2164
  },
2144
2165
  });
2145
- // Number to String
2146
2166
  registry.registerNode({
2147
- id: "base.numberToString",
2167
+ id: "base.object.toString",
2148
2168
  categoryId: "compute",
2149
- inputs: { Value: "base.float" },
2169
+ inputs: { Object: "base.object" },
2150
2170
  outputs: { Text: "base.string" },
2151
- impl: (ins) => ({ Text: String(ins.Value) }),
2171
+ impl: (ins) => {
2172
+ return { Text: JSON.stringify(ins.Object) };
2173
+ },
2152
2174
  });
2153
2175
  // Clamp
2154
2176
  registry.registerNode({
@@ -2232,7 +2254,7 @@ function setupBasicGraphRegistry() {
2232
2254
  impl: (ins) => {
2233
2255
  const a = asArray(ins.A ?? []);
2234
2256
  const b = asArray(ins.B ?? []);
2235
- const op = Number(ins.Operation ?? 0) | 0;
2257
+ const op = Number(ins.Operation ?? BaseMathOperation.Add);
2236
2258
  const unaryByOp = {
2237
2259
  [BaseMathOperation.Round]: (x) => Math.round(x),
2238
2260
  [BaseMathOperation.Floor]: (x) => Math.floor(x),
@@ -2293,7 +2315,7 @@ function setupBasicGraphRegistry() {
2293
2315
  outputs: { Result: "base.bool[]" },
2294
2316
  impl: (ins) => {
2295
2317
  const [a, b] = broadcast(ins.A, ins.B);
2296
- const op = Number(ins.Operation ?? BaseCompareOperation.Equal) | 0;
2318
+ const op = Number(ins.Operation ?? BaseCompareOperation.Equal);
2297
2319
  const compareByOp = {
2298
2320
  [BaseCompareOperation.LessThan]: (x, y) => x < y,
2299
2321
  [BaseCompareOperation.LessThanOrEqual]: (x, y) => x <= y,
@@ -2318,7 +2340,7 @@ function setupBasicGraphRegistry() {
2318
2340
  outputs: { Result: "base.bool[]" },
2319
2341
  inputDefaults: { Operation: BaseLogicOperation.Not },
2320
2342
  impl: (ins) => {
2321
- const op = Number(ins.Operation ?? BaseLogicOperation.Not) | 0;
2343
+ const op = Number(ins.Operation ?? BaseLogicOperation.Not);
2322
2344
  if (op === BaseLogicOperation.Not) {
2323
2345
  const a = asBoolArray(ins.A ?? []);
2324
2346
  return { Result: a.map((x) => !x) };
@@ -2978,7 +3000,7 @@ function createValidationGraphDef() {
2978
3000
  { nodeId: "nA", typeId: "base.number" },
2979
3001
  { nodeId: "nB", typeId: "base.number" },
2980
3002
  { nodeId: "nC", typeId: "base.math" },
2981
- { nodeId: "s1", typeId: "base.numberToString" },
3003
+ { nodeId: "s1", typeId: "base.object.toString" },
2982
3004
  { nodeId: "cmp", typeId: "base.compare" },
2983
3005
  // Global validation issue: unknown node type (no nodeId/edgeId in data)
2984
3006
  { nodeId: "bad", typeId: "unknownType" },