@bian-womp/spark-graph 0.1.4 → 0.1.6

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
@@ -19,11 +19,11 @@ class Registry {
19
19
  constructor() {
20
20
  this.types = new Map();
21
21
  this.nodes = new Map();
22
+ this.enums = new Map();
22
23
  this.categories = new CategoryRegistry();
23
24
  this.serializers = new Map();
24
25
  this.coercions = new Map();
25
26
  this.asyncCoercions = new Map();
26
- this.enums = new Map();
27
27
  }
28
28
  registerType(desc, opts) {
29
29
  this.types.set(desc.id, desc);
@@ -124,33 +124,37 @@ class Registry {
124
124
  return out;
125
125
  }
126
126
  // Enum support
127
- registerEnum(enumTypeId, options, labelType, valueType) {
127
+ registerEnum(desc) {
128
+ const { id, displayName, options, opts } = desc;
129
+ const labelType = opts?.labelType ?? "base.string";
130
+ const valueType = opts?.valueType ?? "base.float";
128
131
  const valueToLabel = new Map();
129
132
  const labelToValue = new Map();
130
133
  for (const { value, label } of options) {
131
134
  valueToLabel.set(value, label);
132
135
  labelToValue.set(label.toLowerCase(), value);
133
136
  }
134
- this.enums.set(enumTypeId, {
137
+ this.enums.set(id, {
135
138
  options,
136
139
  valueToLabel,
137
140
  labelToValue,
138
141
  });
139
142
  // Register type descriptor and serializer for enum (stored as number)
140
143
  this.registerType({
141
- id: enumTypeId,
144
+ id,
145
+ displayName,
142
146
  validate: (v) => typeof v === "number" && valueToLabel.has(Number(v)),
143
- });
144
- this.registerSerializer(enumTypeId, {
147
+ }, opts);
148
+ this.registerSerializer(id, {
145
149
  serialize: (v) => v,
146
150
  deserialize: (d) => Number(d),
147
151
  });
148
152
  // Coercions: string -> enum (by label), float -> enum (by numeric value), enum -> string (label)
149
- this.registerCoercion(labelType, enumTypeId, (value) => {
153
+ this.registerCoercion(labelType, id, (value) => {
150
154
  const s = String(value ?? "")
151
155
  .trim()
152
156
  .toLowerCase();
153
- const rec = this.enums.get(enumTypeId);
157
+ const rec = this.enums.get(id);
154
158
  if (!rec)
155
159
  return value;
156
160
  if (rec.labelToValue.has(s))
@@ -160,33 +164,24 @@ class Registry {
160
164
  return asNum;
161
165
  return Array.from(rec.valueToLabel.keys())[0] ?? 0;
162
166
  });
163
- this.registerCoercion(valueType, enumTypeId, (value) => {
167
+ this.registerCoercion(valueType, id, (value) => {
164
168
  const n = Number(value);
165
- const rec = this.enums.get(enumTypeId);
169
+ const rec = this.enums.get(id);
166
170
  if (!rec)
167
171
  return value;
168
172
  return rec.valueToLabel.has(n)
169
173
  ? n
170
174
  : Array.from(rec.valueToLabel.keys())[0] ?? 0;
171
175
  });
172
- this.registerCoercion(enumTypeId, labelType, (value) => {
176
+ this.registerCoercion(id, labelType, (value) => {
173
177
  const n = Number(value);
174
- const rec = this.enums.get(enumTypeId);
178
+ const rec = this.enums.get(id);
175
179
  if (!rec)
176
180
  return String(value);
177
181
  return rec.valueToLabel.get(n) ?? String(n);
178
182
  });
179
183
  return this;
180
184
  }
181
- getEnumOptions(enumTypeId) {
182
- return this.enums.get(enumTypeId)?.options ?? [];
183
- }
184
- getEnumLabel(enumTypeId, value) {
185
- return this.enums.get(enumTypeId)?.valueToLabel.get(value);
186
- }
187
- getEnumValue(enumTypeId, label) {
188
- return this.enums.get(enumTypeId)?.labelToValue.get(label.toLowerCase());
189
- }
190
185
  }
191
186
 
192
187
  class GraphRuntime {
@@ -1436,25 +1431,31 @@ function setupBasicGraphRegistry() {
1436
1431
  impl: (ins) => ({ Text: String(ins.Value) }),
1437
1432
  });
1438
1433
  // Enums: Math Operation
1439
- registry.registerEnum("base.enum:math.operation", [
1440
- { value: 0, label: "Add" },
1441
- { value: 1, label: "Subtract" },
1442
- { value: 2, label: "Multiply" },
1443
- { value: 3, label: "Divide" },
1444
- { value: 4, label: "Min" },
1445
- { value: 5, label: "Max" },
1446
- { value: 6, label: "Modulo" },
1447
- { value: 7, label: "Power" },
1448
- ], "base.string", "base.float");
1434
+ registry.registerEnum({
1435
+ id: "base.enum:math.operation",
1436
+ options: [
1437
+ { value: 0, label: "Add" },
1438
+ { value: 1, label: "Subtract" },
1439
+ { value: 2, label: "Multiply" },
1440
+ { value: 3, label: "Divide" },
1441
+ { value: 4, label: "Min" },
1442
+ { value: 5, label: "Max" },
1443
+ { value: 6, label: "Modulo" },
1444
+ { value: 7, label: "Power" },
1445
+ ],
1446
+ });
1449
1447
  // Enums: Compare Operation
1450
- registry.registerEnum("base.enum:compare.operation", [
1451
- { value: 0, label: "LessThan" },
1452
- { value: 1, label: "LessThanOrEqual" },
1453
- { value: 2, label: "GreaterThan" },
1454
- { value: 3, label: "GreaterThanOrEqual" },
1455
- { value: 4, label: "Equal" },
1456
- { value: 5, label: "NotEqual" },
1457
- ], "base.string", "base.float");
1448
+ registry.registerEnum({
1449
+ id: "base.enum:compare.operation",
1450
+ options: [
1451
+ { value: 0, label: "LessThan" },
1452
+ { value: 1, label: "LessThanOrEqual" },
1453
+ { value: 2, label: "GreaterThan" },
1454
+ { value: 3, label: "GreaterThanOrEqual" },
1455
+ { value: 4, label: "Equal" },
1456
+ { value: 5, label: "NotEqual" },
1457
+ ],
1458
+ });
1458
1459
  // Clamp
1459
1460
  registry.registerNode({
1460
1461
  id: "base.clamp",