@bian-womp/spark-graph 0.1.3 → 0.1.5
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 +40 -39
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/cjs/src/builder/Registry.d.ts +23 -11
- package/lib/cjs/src/builder/Registry.d.ts.map +1 -1
- package/lib/cjs/src/examples/shared.d.ts.map +1 -1
- package/lib/esm/index.js +40 -39
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/src/builder/Registry.d.ts +23 -11
- package/lib/esm/src/builder/Registry.d.ts.map +1 -1
- package/lib/esm/src/examples/shared.d.ts.map +1 -1
- package/package.json +1 -1
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(
|
|
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(
|
|
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
|
|
144
|
+
id,
|
|
145
|
+
displayName,
|
|
142
146
|
validate: (v) => typeof v === "number" && valueToLabel.has(Number(v)),
|
|
143
|
-
});
|
|
144
|
-
this.registerSerializer(
|
|
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,
|
|
153
|
+
this.registerCoercion(labelType, id, (value) => {
|
|
150
154
|
const s = String(value ?? "")
|
|
151
155
|
.trim()
|
|
152
156
|
.toLowerCase();
|
|
153
|
-
const rec = this.enums.get(
|
|
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,
|
|
167
|
+
this.registerCoercion(valueType, id, (value) => {
|
|
164
168
|
const n = Number(value);
|
|
165
|
-
const rec = this.enums.get(
|
|
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(
|
|
176
|
+
this.registerCoercion(id, labelType, (value) => {
|
|
173
177
|
const n = Number(value);
|
|
174
|
-
const rec = this.enums.get(
|
|
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(
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
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(
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
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",
|