@nodetool-ai/node-sdk 0.7.0-rc.11

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.
Files changed (61) hide show
  1. package/dist/base-node.d.ts +141 -0
  2. package/dist/base-node.d.ts.map +1 -0
  3. package/dist/base-node.js +225 -0
  4. package/dist/base-node.js.map +1 -0
  5. package/dist/decorators.d.ts +19 -0
  6. package/dist/decorators.d.ts.map +1 -0
  7. package/dist/decorators.js +42 -0
  8. package/dist/decorators.js.map +1 -0
  9. package/dist/docs/index.d.ts +4 -0
  10. package/dist/docs/index.d.ts.map +1 -0
  11. package/dist/docs/index.js +4 -0
  12. package/dist/docs/index.js.map +1 -0
  13. package/dist/docs/nodes.d.ts +10 -0
  14. package/dist/docs/nodes.d.ts.map +1 -0
  15. package/dist/docs/nodes.js +99 -0
  16. package/dist/docs/nodes.js.map +1 -0
  17. package/dist/docs/overview.d.ts +6 -0
  18. package/dist/docs/overview.d.ts.map +1 -0
  19. package/dist/docs/overview.js +71 -0
  20. package/dist/docs/overview.js.map +1 -0
  21. package/dist/docs/workflows.d.ts +10 -0
  22. package/dist/docs/workflows.d.ts.map +1 -0
  23. package/dist/docs/workflows.js +112 -0
  24. package/dist/docs/workflows.js.map +1 -0
  25. package/dist/index.d.ts +14 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +12 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/metadata.d.ts +76 -0
  30. package/dist/metadata.d.ts.map +1 -0
  31. package/dist/metadata.js +247 -0
  32. package/dist/metadata.js.map +1 -0
  33. package/dist/node-metadata.d.ts +16 -0
  34. package/dist/node-metadata.d.ts.map +1 -0
  35. package/dist/node-metadata.js +266 -0
  36. package/dist/node-metadata.js.map +1 -0
  37. package/dist/nodes/test-nodes.d.ts +215 -0
  38. package/dist/nodes/test-nodes.d.ts.map +1 -0
  39. package/dist/nodes/test-nodes.js +436 -0
  40. package/dist/nodes/test-nodes.js.map +1 -0
  41. package/dist/package-registry-client.d.ts +12 -0
  42. package/dist/package-registry-client.d.ts.map +1 -0
  43. package/dist/package-registry-client.js +40 -0
  44. package/dist/package-registry-client.js.map +1 -0
  45. package/dist/python-package-scan.d.ts +45 -0
  46. package/dist/python-package-scan.d.ts.map +1 -0
  47. package/dist/python-package-scan.js +158 -0
  48. package/dist/python-package-scan.js.map +1 -0
  49. package/dist/registry.d.ts +55 -0
  50. package/dist/registry.d.ts.map +1 -0
  51. package/dist/registry.js +188 -0
  52. package/dist/registry.js.map +1 -0
  53. package/dist/search.d.ts +58 -0
  54. package/dist/search.d.ts.map +1 -0
  55. package/dist/search.js +127 -0
  56. package/dist/search.js.map +1 -0
  57. package/dist/validation.d.ts +63 -0
  58. package/dist/validation.d.ts.map +1 -0
  59. package/dist/validation.js +138 -0
  60. package/dist/validation.js.map +1 -0
  61. package/package.json +49 -0
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Node metadata introspection.
3
+ *
4
+ * TS classes are authoritative when no Python metadata is loaded. When Python
5
+ * metadata is available for a node, registry-emitted metadata should match the
6
+ * Python package JSON exactly so downstream consumers see a stable shape.
7
+ */
8
+ function mapScalarTypeName(typeName) {
9
+ const normalized = typeName.trim().toLowerCase();
10
+ if (normalized === "string")
11
+ return "str";
12
+ if (normalized === "integer")
13
+ return "int";
14
+ if (normalized === "boolean")
15
+ return "bool";
16
+ if (normalized === "number")
17
+ return "float";
18
+ return normalized || "any";
19
+ }
20
+ function parseTypeString(typeName) {
21
+ const trimmed = typeName.trim();
22
+ if (!trimmed)
23
+ return { type: "any", type_args: [] };
24
+ const firstBracket = trimmed.indexOf("[");
25
+ if (firstBracket < 0 || !trimmed.endsWith("]")) {
26
+ return { type: mapScalarTypeName(trimmed), type_args: [] };
27
+ }
28
+ const base = mapScalarTypeName(trimmed.slice(0, firstBracket));
29
+ const inner = trimmed.slice(firstBracket + 1, -1).trim();
30
+ if (!inner)
31
+ return { type: base, type_args: [] };
32
+ const parts = [];
33
+ let depth = 0;
34
+ let current = "";
35
+ for (let i = 0; i < inner.length; i++) {
36
+ const ch = inner[i];
37
+ if (ch === "[") {
38
+ depth++;
39
+ current += ch;
40
+ continue;
41
+ }
42
+ if (ch === "]") {
43
+ depth--;
44
+ current += ch;
45
+ continue;
46
+ }
47
+ if (ch === "," && depth === 0) {
48
+ if (current.trim())
49
+ parts.push(current.trim());
50
+ current = "";
51
+ continue;
52
+ }
53
+ current += ch;
54
+ }
55
+ if (current.trim())
56
+ parts.push(current.trim());
57
+ return {
58
+ type: base,
59
+ type_args: parts.map(parseTypeString)
60
+ };
61
+ }
62
+ function deriveNamespace(nodeType) {
63
+ const lastDot = nodeType.lastIndexOf(".");
64
+ return lastDot > 0 ? nodeType.slice(0, lastDot) : "";
65
+ }
66
+ function toMetadataType(typeMeta) {
67
+ return {
68
+ ...typeMeta,
69
+ type: mapScalarTypeName(typeMeta.type),
70
+ type_args: (typeMeta.type_args ?? []).map(toMetadataType)
71
+ };
72
+ }
73
+ function cloneTypeMetadata(typeMeta) {
74
+ return {
75
+ ...typeMeta,
76
+ type_args: (typeMeta.type_args ?? []).map(cloneTypeMetadata)
77
+ };
78
+ }
79
+ function clonePropertyMetadata(prop) {
80
+ const cloned = {
81
+ ...prop,
82
+ type: cloneTypeMetadata(prop.type)
83
+ };
84
+ if (Object.prototype.hasOwnProperty.call(prop, "default")) {
85
+ cloned.default = prop.default;
86
+ }
87
+ return cloned;
88
+ }
89
+ function cloneOutputMetadata(output) {
90
+ return {
91
+ ...output,
92
+ type: cloneTypeMetadata(output.type)
93
+ };
94
+ }
95
+ function mergeMetadata(tsMetadata, pyMetadata) {
96
+ if (!pyMetadata)
97
+ return tsMetadata;
98
+ // TS class definitions are authoritative. Python metadata is used only to
99
+ // backfill fields that the TS introspection does not populate (e.g.
100
+ // layout, model_packs) and to enrich property descriptions/defaults when
101
+ // the TS class omits them.
102
+ const tsProps = new Map(tsMetadata.properties.map((p) => [p.name, p]));
103
+ const mergedProperties = tsMetadata.properties.map((tsProp) => {
104
+ const pyProp = pyMetadata.properties?.find((p) => p.name === tsProp.name);
105
+ if (!pyProp)
106
+ return tsProp;
107
+ // Backfill description and title from Python if TS doesn't set them
108
+ return {
109
+ ...tsProp,
110
+ description: tsProp.description ?? pyProp.description,
111
+ title: tsProp.title ?? pyProp.title
112
+ };
113
+ });
114
+ // Append Python-only properties that don't exist in TS (rare, but keeps
115
+ // backward compatibility for dynamic properties not declared via @prop).
116
+ for (const pyProp of pyMetadata.properties ?? []) {
117
+ if (!tsProps.has(pyProp.name)) {
118
+ mergedProperties.push(clonePropertyMetadata(pyProp));
119
+ }
120
+ }
121
+ return {
122
+ ...tsMetadata,
123
+ properties: mergedProperties,
124
+ outputs: tsMetadata.outputs.length > 0
125
+ ? tsMetadata.outputs
126
+ : (pyMetadata.outputs ?? []).map(cloneOutputMetadata),
127
+ // Backfill optional fields from Python when TS doesn't set them
128
+ layout: tsMetadata.layout ?? pyMetadata.layout,
129
+ model_packs: tsMetadata.model_packs ?? pyMetadata.model_packs
130
+ };
131
+ }
132
+ function getDecoratedProperties(nodeClass) {
133
+ return nodeClass.getDeclaredProperties().map((entry) => {
134
+ const opts = entry.options;
135
+ const type = parseTypeString(opts.type);
136
+ // Attach enum values to TypeMetadata so the frontend can detect them
137
+ if (opts.values?.length) {
138
+ type.values = opts.values;
139
+ }
140
+ const result = {
141
+ name: entry.name,
142
+ type,
143
+ required: opts.required ?? false,
144
+ title: opts.title,
145
+ description: opts.description,
146
+ min: opts.min,
147
+ max: opts.max,
148
+ values: opts.values,
149
+ json_schema_extra: opts.json_schema_extra
150
+ };
151
+ if (Object.prototype.hasOwnProperty.call(opts, "default")) {
152
+ result.default = opts.default;
153
+ }
154
+ return result;
155
+ });
156
+ }
157
+ function getOutputs(nodeClass) {
158
+ const outputs = [];
159
+ const declared = nodeClass.metadataOutputTypes ?? nodeClass.getDeclaredOutputs();
160
+ if (Object.keys(declared).length > 0) {
161
+ for (const [name, typeName] of Object.entries(declared)) {
162
+ outputs.push({
163
+ name,
164
+ type: parseTypeString(typeName)
165
+ });
166
+ }
167
+ return outputs;
168
+ }
169
+ const descriptor = nodeClass.toDescriptor();
170
+ if (descriptor.outputs && Object.keys(descriptor.outputs).length > 0) {
171
+ for (const [name, typeName] of Object.entries(descriptor.outputs)) {
172
+ outputs.push({
173
+ name,
174
+ type: parseTypeString(typeName)
175
+ });
176
+ }
177
+ }
178
+ return outputs;
179
+ }
180
+ /** Media/data types that represent primary node inputs (not tuning parameters). */
181
+ const PRIMARY_INPUT_TYPES = new Set([
182
+ "image",
183
+ "video",
184
+ "audio",
185
+ "text",
186
+ "str",
187
+ "dataframe",
188
+ "tensor",
189
+ "folder",
190
+ "thread",
191
+ "thread_message",
192
+ "task",
193
+ "workflow",
194
+ "agent",
195
+ "any"
196
+ ]);
197
+ /** Type-name prefixes that mark a prop as a model-selector and therefore primary. */
198
+ const PRIMARY_TYPE_PREFIXES = ["tjs."];
199
+ function isPrimaryType(typeName) {
200
+ if (PRIMARY_INPUT_TYPES.has(typeName))
201
+ return true;
202
+ return PRIMARY_TYPE_PREFIXES.some((prefix) => typeName.startsWith(prefix));
203
+ }
204
+ /**
205
+ * When a node doesn't explicitly set basicFields, derive them:
206
+ * - Nodes with ≤3 properties: show all
207
+ * - Nodes with >3 properties: primary inputs (media/data types,
208
+ * model-selector types like `tjs.*`) and required props are basic;
209
+ * scalar tuning params are advanced.
210
+ * - If heuristic produces no basic or no advanced fields, show all.
211
+ */
212
+ function deriveBasicFields(properties) {
213
+ const allNames = properties.map((p) => p.name);
214
+ if (properties.length <= 3)
215
+ return allNames;
216
+ const basic = properties
217
+ .filter((p) => p.required || isPrimaryType(p.type.type))
218
+ .map((p) => p.name);
219
+ // If heuristic is unhelpful (all or none are basic), show everything
220
+ if (basic.length === 0 || basic.length >= properties.length) {
221
+ return allNames;
222
+ }
223
+ return basic;
224
+ }
225
+ export function getNodeMetadata(nodeClass, options = {}) {
226
+ const nodeType = nodeClass.nodeType;
227
+ const namespace = deriveNamespace(nodeType);
228
+ const properties = getDecoratedProperties(nodeClass).map((p) => ({
229
+ ...p,
230
+ type: toMetadataType(p.type)
231
+ }));
232
+ const outputs = getOutputs(nodeClass).map((o) => ({
233
+ ...o,
234
+ type: toMetadataType(o.type)
235
+ }));
236
+ const tsMetadata = {
237
+ title: nodeClass.title || nodeType,
238
+ description: nodeClass.description || "",
239
+ namespace,
240
+ node_type: nodeType,
241
+ layout: nodeClass.layout ?? "default",
242
+ properties,
243
+ outputs,
244
+ recommended_models: nodeClass.recommendedModels ?? [],
245
+ basic_fields: nodeClass.basicFields ??
246
+ deriveBasicFields(properties),
247
+ required_settings: nodeClass.requiredSettings ?? [],
248
+ required_runtimes: nodeClass.requiredRuntimes ?? [],
249
+ is_streaming_input: nodeClass.isStreamingInput || false,
250
+ is_streaming_output: nodeClass.isStreamingOutput || false,
251
+ is_controlled: nodeClass.isControlled || false,
252
+ is_dynamic: nodeClass.isDynamic || false,
253
+ expose_as_tool: nodeClass.exposeAsTool,
254
+ supports_dynamic_outputs: nodeClass.supportsDynamicOutputs,
255
+ auto_save_asset: nodeClass.autoSaveAsset || undefined,
256
+ model_packs: nodeClass.modelPacks
257
+ };
258
+ if (!options.mergePythonBackfill) {
259
+ return tsMetadata;
260
+ }
261
+ return mergeMetadata(tsMetadata, options.pythonMetadata);
262
+ }
263
+ export function getNodeMetadataBatch(nodeClasses, options = {}) {
264
+ return nodeClasses.map((nodeClass) => getNodeMetadata(nodeClass, options));
265
+ }
266
+ //# sourceMappingURL=node-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-metadata.js","sourceRoot":"","sources":["../src/node-metadata.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ import { BaseNode } from "../base-node.js";
2
+ export declare class Passthrough extends BaseNode {
3
+ static readonly nodeType = "nodetool.test.Passthrough";
4
+ static readonly title = "Passthrough";
5
+ static readonly description = "Passes input value through unchanged";
6
+ value: any;
7
+ process(): Promise<Record<string, unknown>>;
8
+ }
9
+ export declare class Add extends BaseNode {
10
+ static readonly nodeType = "nodetool.test.Add";
11
+ static readonly title = "Add";
12
+ static readonly description = "Adds two numbers";
13
+ static readonly isDynamic = true;
14
+ a: any;
15
+ b: any;
16
+ process(): Promise<Record<string, unknown>>;
17
+ }
18
+ export declare class Multiply extends BaseNode {
19
+ static readonly nodeType = "nodetool.test.Multiply";
20
+ static readonly title = "Multiply";
21
+ static readonly description = "Multiplies two numbers";
22
+ a: any;
23
+ b: any;
24
+ process(): Promise<Record<string, unknown>>;
25
+ }
26
+ export declare class Constant extends BaseNode {
27
+ static readonly nodeType = "nodetool.test.Constant";
28
+ static readonly title = "Constant";
29
+ static readonly description = "Outputs a constant value";
30
+ value: any;
31
+ process(): Promise<Record<string, unknown>>;
32
+ }
33
+ export declare class StringConcat extends BaseNode {
34
+ static readonly nodeType = "nodetool.test.StringConcat";
35
+ static readonly title = "String Concat";
36
+ static readonly description = "Concatenates strings";
37
+ static readonly isDynamic = true;
38
+ a: any;
39
+ b: any;
40
+ separator: any;
41
+ process(): Promise<Record<string, unknown>>;
42
+ }
43
+ export declare class FormatText extends BaseNode {
44
+ static readonly nodeType = "nodetool.test.FormatText";
45
+ static readonly title = "Format Text";
46
+ static readonly description = "Formats text by replacing {{ text }} in a template";
47
+ template: any;
48
+ text: any;
49
+ process(): Promise<Record<string, unknown>>;
50
+ }
51
+ export declare class ThresholdProcessor extends BaseNode {
52
+ static readonly nodeType = "nodetool.test.ThresholdProcessor";
53
+ static readonly title = "Threshold Processor";
54
+ static readonly description = "Checks if a value exceeds a threshold";
55
+ static readonly isControlled = true;
56
+ value: any;
57
+ threshold: any;
58
+ mode: any;
59
+ process(): Promise<Record<string, unknown>>;
60
+ }
61
+ export declare class ErrorNode extends BaseNode {
62
+ static readonly nodeType = "nodetool.test.ErrorNode";
63
+ static readonly title = "Error Node";
64
+ static readonly description = "Always throws an error";
65
+ message: any;
66
+ process(): Promise<Record<string, unknown>>;
67
+ }
68
+ export declare class SlowNode extends BaseNode {
69
+ static readonly nodeType = "nodetool.test.SlowNode";
70
+ static readonly title = "Slow Node";
71
+ static readonly description = "Delays for a given number of milliseconds";
72
+ delayMs: any;
73
+ process(): Promise<Record<string, unknown>>;
74
+ }
75
+ export declare class StreamingCounter extends BaseNode {
76
+ static readonly nodeType = "nodetool.test.StreamingCounter";
77
+ static readonly title = "Streaming Counter";
78
+ static readonly description = "Streams integers from 0 to count-1";
79
+ static readonly isStreamingOutput = true;
80
+ count: any;
81
+ start: any;
82
+ process(): Promise<Record<string, unknown>>;
83
+ genProcess(): AsyncGenerator<Record<string, unknown>>;
84
+ }
85
+ export declare class IntAccumulator extends BaseNode {
86
+ static readonly nodeType = "nodetool.test.IntAccumulator";
87
+ static readonly title = "Int Accumulator";
88
+ static readonly description = "Accumulates integer inputs and tracks execution count";
89
+ private _execCount;
90
+ private _accumulated;
91
+ value: any;
92
+ process(): Promise<Record<string, unknown>>;
93
+ }
94
+ /**
95
+ * Source node that emits a single RunEvent on its __control__ output handle.
96
+ * Connect via a control edge (edge_type: "control") to a controlled node.
97
+ */
98
+ export declare class SimpleController extends BaseNode {
99
+ static readonly nodeType = "nodetool.test.SimpleController";
100
+ static readonly title = "Simple Controller";
101
+ static readonly description = "Emits one RunEvent via __control__ handle";
102
+ static readonly isStreamingOutput = true;
103
+ threshold: any;
104
+ mode: any;
105
+ process(): Promise<Record<string, unknown>>;
106
+ genProcess(): AsyncGenerator<Record<string, unknown>>;
107
+ }
108
+ /**
109
+ * Source node that emits N RunEvents on its __control__ output handle.
110
+ */
111
+ export declare class MultiTriggerController extends BaseNode {
112
+ static readonly nodeType = "nodetool.test.MultiTriggerController";
113
+ static readonly title = "Multi Trigger Controller";
114
+ static readonly description = "Emits N RunEvents via __control__ handle";
115
+ static readonly isStreamingOutput = true;
116
+ count: any;
117
+ threshold: any;
118
+ process(): Promise<Record<string, unknown>>;
119
+ genProcess(): AsyncGenerator<Record<string, unknown>>;
120
+ }
121
+ /**
122
+ * Source node that emits a StopEvent on its __control__ handle,
123
+ * causing the controlled node to stop immediately.
124
+ */
125
+ export declare class StopEventController extends BaseNode {
126
+ static readonly nodeType = "nodetool.test.StopEventController";
127
+ static readonly title = "Stop Event Controller";
128
+ static readonly description = "Emits a StopEvent via __control__ handle";
129
+ static readonly isStreamingOutput = true;
130
+ process(): Promise<Record<string, unknown>>;
131
+ genProcess(): AsyncGenerator<Record<string, unknown>>;
132
+ }
133
+ /**
134
+ * Node with is_streaming_input: true.
135
+ * Called once with empty inputs by the actor.
136
+ */
137
+ export declare class StreamingInputProcessor extends BaseNode {
138
+ static readonly nodeType = "nodetool.test.StreamingInputProcessor";
139
+ static readonly title = "Streaming Input Processor";
140
+ static readonly description = "Streaming input node \u2013 called once with empty inputs";
141
+ static readonly isStreamingInput = true;
142
+ process(): Promise<Record<string, unknown>>;
143
+ }
144
+ /**
145
+ * Node with both is_streaming_input and is_streaming_output set.
146
+ * Called once with empty inputs (streaming input takes priority in actor).
147
+ */
148
+ export declare class FullStreamingNode extends BaseNode {
149
+ static readonly nodeType = "nodetool.test.FullStreamingNode";
150
+ static readonly title = "Full Streaming Node";
151
+ static readonly description = "Both streaming input and output";
152
+ static readonly isStreamingInput = true;
153
+ static readonly isStreamingOutput = true;
154
+ count: any;
155
+ process(): Promise<Record<string, unknown>>;
156
+ genProcess(): AsyncGenerator<Record<string, unknown>>;
157
+ }
158
+ /**
159
+ * Accepts a list of numbers and emits their sum.
160
+ */
161
+ export declare class ListSumProcessor extends BaseNode {
162
+ static readonly nodeType = "nodetool.test.ListSumProcessor";
163
+ static readonly title = "List Sum Processor";
164
+ static readonly description = "Sums an array of numbers";
165
+ values: any;
166
+ process(): Promise<Record<string, unknown>>;
167
+ }
168
+ /**
169
+ * Throws if shouldFail input or prop is true.
170
+ */
171
+ export declare class ConditionalErrorProcessor extends BaseNode {
172
+ static readonly nodeType = "nodetool.test.ConditionalErrorProcessor";
173
+ static readonly title = "Conditional Error Processor";
174
+ static readonly description = "Throws only if shouldFail is true";
175
+ shouldFail: any;
176
+ message: any;
177
+ process(): Promise<Record<string, unknown>>;
178
+ }
179
+ /**
180
+ * Runs successfully but emits no output values.
181
+ */
182
+ export declare class SilentNode extends BaseNode {
183
+ static readonly nodeType = "nodetool.test.SilentNode";
184
+ static readonly title = "Silent Node";
185
+ static readonly description = "Runs but emits no output";
186
+ process(): Promise<Record<string, unknown>>;
187
+ }
188
+ export declare class IntInput extends BaseNode {
189
+ static readonly nodeType = "nodetool.test.IntInput";
190
+ static readonly title = "Int Input";
191
+ static readonly description = "Source node that emits an integer";
192
+ value: any;
193
+ process(): Promise<Record<string, unknown>>;
194
+ }
195
+ export declare class FloatInput extends BaseNode {
196
+ static readonly nodeType = "nodetool.test.FloatInput";
197
+ static readonly title = "Float Input";
198
+ static readonly description = "Source node that emits a float";
199
+ value: any;
200
+ process(): Promise<Record<string, unknown>>;
201
+ }
202
+ export declare class StringInput extends BaseNode {
203
+ static readonly nodeType = "nodetool.test.StringInput";
204
+ static readonly title = "String Input";
205
+ static readonly description = "Source node that emits a string";
206
+ value: any;
207
+ process(): Promise<Record<string, unknown>>;
208
+ }
209
+ /** All original test nodes */
210
+ export declare const ALL_TEST_NODES: readonly [typeof Passthrough, typeof Add, typeof Multiply, typeof Constant, typeof StringConcat, typeof FormatText, typeof ThresholdProcessor, typeof ErrorNode, typeof SlowNode, typeof StreamingCounter, typeof IntAccumulator];
211
+ /** Additional E2E-focused test nodes */
212
+ export declare const ALL_CONTROLLER_NODES: readonly [typeof SimpleController, typeof MultiTriggerController, typeof StopEventController, typeof StreamingInputProcessor, typeof FullStreamingNode, typeof ListSumProcessor, typeof ConditionalErrorProcessor, typeof SilentNode, typeof IntInput, typeof FloatInput, typeof StringInput];
213
+ /** Combined: all test nodes including controller/e2e nodes */
214
+ export declare const ALL_E2E_NODES: readonly [typeof Passthrough, typeof Add, typeof Multiply, typeof Constant, typeof StringConcat, typeof FormatText, typeof ThresholdProcessor, typeof ErrorNode, typeof SlowNode, typeof StreamingCounter, typeof IntAccumulator, typeof SimpleController, typeof MultiTriggerController, typeof StopEventController, typeof StreamingInputProcessor, typeof FullStreamingNode, typeof ListSumProcessor, typeof ConditionalErrorProcessor, typeof SilentNode, typeof IntInput, typeof FloatInput, typeof StringInput];
215
+ //# sourceMappingURL=test-nodes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-nodes.d.ts","sourceRoot":"","sources":["../../src/nodes/test-nodes.ts"],"names":[],"mappings":"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"}