@uipath/maestro-builder-sdk 6.18.9 → 6.19.0
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/dist/api-index.md +185 -184
- package/dist/api-members.md +504 -473
- package/dist/bpmn/uipath-moddle.v1.json +5 -0
- package/dist/case/decompile-cli.js +2 -8
- package/dist/check.js +177 -650
- package/dist/core/actions.d.ts +119 -760
- package/dist/core/actions.js +0 -306
- package/dist/core/error-port.d.ts +6 -0
- package/dist/core/error-port.js +9 -0
- package/dist/core/node-classes.d.ts +4 -63
- package/dist/core/node-classes.js +0 -112
- package/dist/core/nodes/family.d.ts +36 -0
- package/dist/core/nodes/family.js +1 -0
- package/dist/core/nodes/node-type.d.ts +136 -0
- package/dist/core/nodes/node-type.js +1 -0
- package/dist/core/nodes/registry.d.ts +57 -0
- package/dist/core/nodes/registry.js +122 -0
- package/dist/core/nodes/versioned.d.ts +50 -0
- package/dist/core/nodes/versioned.js +46 -0
- package/dist/core/typed-raw-node.d.ts +13 -62
- package/dist/core/typed-raw-node.js +40 -154
- package/dist/decompile-cli.js +2 -9
- package/dist/decompile.js +92 -271
- package/dist/flow-definitions.d.ts +10 -0
- package/dist/flow-definitions.js +35 -0
- package/dist/flow-node-registry.d.ts +13 -0
- package/dist/flow-node-registry.js +19 -0
- package/dist/flow-node-type.d.ts +192 -0
- package/dist/flow-node-type.js +1 -0
- package/dist/flow-sdk.d.ts +7 -0
- package/dist/flow-sdk.js +8 -0
- package/dist/nodes/data-fabric/flow/check.d.ts +13 -0
- package/dist/nodes/data-fabric/flow/check.js +164 -0
- package/dist/nodes/data-fabric/flow/factories.d.ts +113 -0
- package/dist/nodes/data-fabric/flow/factories.js +134 -0
- package/dist/nodes/data-fabric/flow/family.d.ts +7 -0
- package/dist/nodes/data-fabric/flow/family.js +9 -0
- package/dist/nodes/data-fabric/flow/index.d.ts +8 -0
- package/dist/nodes/data-fabric/flow/index.js +8 -0
- package/dist/nodes/data-fabric/flow/raw.d.ts +32 -0
- package/dist/nodes/data-fabric/flow/raw.js +100 -0
- package/dist/nodes/data-fabric/flow/shared.d.ts +77 -0
- package/dist/nodes/data-fabric/flow/shared.js +174 -0
- package/dist/nodes/data-fabric/flow/spec.d.ts +238 -0
- package/dist/nodes/data-fabric/flow/spec.js +1 -0
- package/dist/nodes/data-fabric/flow/verbs.d.ts +29 -0
- package/dist/nodes/data-fabric/flow/verbs.js +239 -0
- package/dist/nodes/delay/flow/check.d.ts +16 -0
- package/dist/nodes/delay/flow/check.js +86 -0
- package/dist/nodes/delay/flow/factories.d.ts +28 -0
- package/dist/nodes/delay/flow/factories.js +38 -0
- package/dist/nodes/delay/flow/family.d.ts +3 -0
- package/dist/nodes/delay/flow/family.js +8 -0
- package/dist/nodes/delay/flow/index.d.ts +3 -0
- package/dist/nodes/delay/flow/index.js +3 -0
- package/dist/nodes/delay/flow/node-type.d.ts +13 -0
- package/dist/nodes/delay/flow/node-type.js +71 -0
- package/dist/nodes/delay/flow/spec.d.ts +43 -0
- package/dist/nodes/delay/flow/spec.js +16 -0
- package/dist/nodes/document/flow/factories.d.ts +27 -0
- package/dist/nodes/document/flow/factories.js +30 -0
- package/dist/nodes/document/flow/family.d.ts +3 -0
- package/dist/nodes/document/flow/family.js +7 -0
- package/dist/nodes/document/flow/index.d.ts +3 -0
- package/dist/nodes/document/flow/index.js +3 -0
- package/dist/nodes/document/flow/node-type.d.ts +14 -0
- package/dist/nodes/document/flow/node-type.js +150 -0
- package/dist/nodes/document/flow/spec.d.ts +65 -0
- package/dist/nodes/document/flow/spec.js +1 -0
- package/dist/nodes/mock/flow/factories.d.ts +51 -0
- package/dist/nodes/mock/flow/factories.js +47 -0
- package/dist/nodes/mock/flow/family.d.ts +3 -0
- package/dist/nodes/mock/flow/family.js +7 -0
- package/dist/nodes/mock/flow/index.d.ts +2 -0
- package/dist/nodes/mock/flow/index.js +2 -0
- package/dist/nodes/mock/flow/node-type.d.ts +11 -0
- package/dist/nodes/mock/flow/node-type.js +51 -0
- package/dist/nodes/script/flow/check.d.ts +19 -0
- package/dist/nodes/script/flow/check.js +49 -0
- package/dist/nodes/script/flow/factories.d.ts +14 -0
- package/dist/nodes/script/flow/factories.js +15 -0
- package/dist/nodes/script/flow/family.d.ts +3 -0
- package/dist/nodes/script/flow/family.js +8 -0
- package/dist/nodes/script/flow/index.d.ts +3 -0
- package/dist/nodes/script/flow/index.js +3 -0
- package/dist/nodes/script/flow/node-type.d.ts +7 -0
- package/dist/nodes/script/flow/node-type.js +125 -0
- package/dist/nodes/script/flow/spec.d.ts +52 -0
- package/dist/nodes/script/flow/spec.js +1 -0
- package/dist/nodes/transform/flow/check.d.ts +6 -0
- package/dist/nodes/transform/flow/check.js +229 -0
- package/dist/nodes/transform/flow/factories.d.ts +52 -0
- package/dist/nodes/transform/flow/factories.js +53 -0
- package/dist/nodes/transform/flow/family.d.ts +3 -0
- package/dist/nodes/transform/flow/family.js +8 -0
- package/dist/nodes/transform/flow/index.d.ts +3 -0
- package/dist/nodes/transform/flow/index.js +3 -0
- package/dist/nodes/transform/flow/node-type.d.ts +7 -0
- package/dist/nodes/transform/flow/node-type.js +244 -0
- package/dist/nodes/transform/flow/spec.d.ts +116 -0
- package/dist/nodes/transform/flow/spec.js +10 -0
- package/dist/raw-node-advice.d.ts +16 -0
- package/dist/raw-node-advice.js +36 -0
- package/dist/raw-node.d.ts +71 -0
- package/dist/raw-node.js +116 -0
- package/dist/registry/uip/launch.d.ts +11 -1
- package/dist/registry/uip/launch.js +50 -43
- package/dist/registry/uip/pipeline-front-door.d.ts +2 -0
- package/dist/registry/uip/pipeline-front-door.js +88 -0
- package/dist/serialize.js +138 -492
- package/package.json +2 -2
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Internal: what `check`
|
|
3
|
-
*
|
|
2
|
+
* Internal: what `check` says about a `rawNode` for a node type the SDK has a
|
|
3
|
+
* typed factory for, for the families not yet on the node-type registry. A
|
|
4
|
+
* registered type carries its own advice (FlowNodeType.rawNode; raw-node.ts asks
|
|
5
|
+
* the registry first), so a family's entries leave this table when it is ported.
|
|
4
6
|
* Not re-exported from the package entry point.
|
|
5
7
|
*/
|
|
6
8
|
import { ownEntry } from './own-entry.js';
|
|
@@ -15,110 +17,41 @@ import { ownEntry } from './own-entry.js';
|
|
|
15
17
|
* (`uipath.agent.resource.*`, attached to an agent). `decompile` keeps an
|
|
16
18
|
* orphaned one as a `rawNode`, and a warning on that round trip would be noise.
|
|
17
19
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* have a typed spelling.
|
|
20
|
+
* A REGISTERED family's types are not here: they carry the same advice
|
|
21
|
+
* themselves (the Data Fabric verbs, since Phase 3).
|
|
21
22
|
*/
|
|
22
23
|
export const TYPED_FACTORIES = {
|
|
23
|
-
'core.action.http': { factory: 'http({ managed: false })'
|
|
24
|
-
'core.action.http.v2': { factory: 'http({ managed: true })'
|
|
25
|
-
'core.action.queue.create': { factory: 'queueItem()'
|
|
26
|
-
'core.action.queue.create-and-wait': { factory: 'queueItem({ wait: true })'
|
|
27
|
-
'core.
|
|
28
|
-
'core.
|
|
29
|
-
'core.
|
|
30
|
-
'core.
|
|
31
|
-
'core.
|
|
32
|
-
'core.
|
|
33
|
-
'core.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
},
|
|
38
|
-
'
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
},
|
|
42
|
-
'
|
|
43
|
-
|
|
44
|
-
bundled: ['1.0', '1.3'],
|
|
45
|
-
},
|
|
46
|
-
'core.datafabric.delete': {
|
|
47
|
-
factory: 'dataFabricDelete({ entity, record: { byId } | { fromRead }, folderKey })',
|
|
48
|
-
bundled: ['1.3'],
|
|
49
|
-
},
|
|
50
|
-
'core.logic.decision': { factory: '.branch()', bundled: ['1.0.0', '1.3'] },
|
|
51
|
-
'core.logic.delay': { factory: 'delay({ duration })', bundled: ['1.0.0', '1.0'] },
|
|
52
|
-
'core.logic.dowhile': { factory: '.doWhile(name, condition, body, { limit, breakEnabled })', bundled: ['1.0'] },
|
|
53
|
-
'core.logic.loop': { factory: '.loop()', bundled: ['1.0.0', '2.4'] },
|
|
54
|
-
'core.logic.merge': { factory: '.parallel() rejoin', bundled: ['1.0.0', '1.0'] },
|
|
55
|
-
'core.logic.mock': { factory: 'mock()', bundled: ['1.0.0', '1.0'] },
|
|
56
|
-
'core.logic.switch': { factory: '.switch()', bundled: ['1.0.0', '1.1'] },
|
|
57
|
-
'core.logic.terminate': { factory: '.terminate()', bundled: ['1.0.0', '1.0'] },
|
|
58
|
-
'core.subflow': { factory: 'subflow(child, inputs)', bundled: ['1.0.0', '1.0'] },
|
|
59
|
-
'uipath.agent.autonomous': { factory: 'inlineAgent()', bundled: ['1.2', '1.3', '1.4'] },
|
|
60
|
-
'uipath.agent.conversational': { factory: 'conversationalAgent()', bundled: ['1.6', '1.7'] },
|
|
61
|
-
'uipath.agent.voice': { factory: 'voiceAgent()', bundled: ['1.0', '1.1'] },
|
|
62
|
-
'uipath.conversational.get-conversation-context': { factory: 'conversationContext()', bundled: ['1.0'] },
|
|
63
|
-
'uipath.conversational.send-message': { factory: 'sendMessage()', bundled: ['1.0', '1.1'] },
|
|
64
|
-
'uipath.conversational.voice.create-outgoing-call': { factory: 'createOutgoingCall()', bundled: ['1.0'] },
|
|
65
|
-
'uipath.conversational.voice.end-call': { factory: 'endCall()', bundled: ['1.0'] },
|
|
66
|
-
'uipath.conversational.wait-for-message': { factory: 'waitForMessage()', bundled: ['1.0', '1.1'] },
|
|
67
|
-
'uipath.document.classify': { factory: 'documentClassify()', bundled: ['1.0'] },
|
|
68
|
-
'uipath.human-in-the-loop': { factory: 'hitl()', bundled: ['1.0', '1.1', '1.2'] },
|
|
24
|
+
'core.action.http': { factory: 'http({ managed: false })' },
|
|
25
|
+
'core.action.http.v2': { factory: 'http({ managed: true })' },
|
|
26
|
+
'core.action.queue.create': { factory: 'queueItem()' },
|
|
27
|
+
'core.action.queue.create-and-wait': { factory: 'queueItem({ wait: true })' },
|
|
28
|
+
'core.control.end': { factory: '.return()' },
|
|
29
|
+
'core.logic.decision': { factory: '.branch()' },
|
|
30
|
+
'core.logic.dowhile': { factory: '.doWhile(name, condition, body, { limit, breakEnabled })' },
|
|
31
|
+
'core.logic.loop': { factory: '.loop()' },
|
|
32
|
+
'core.logic.merge': { factory: '.parallel() rejoin' },
|
|
33
|
+
'core.logic.switch': { factory: '.switch()' },
|
|
34
|
+
'core.logic.terminate': { factory: '.terminate()' },
|
|
35
|
+
'core.subflow': { factory: 'subflow(child, inputs)' },
|
|
36
|
+
'uipath.agent.autonomous': { factory: 'inlineAgent()' },
|
|
37
|
+
'uipath.agent.conversational': { factory: 'conversationalAgent()' },
|
|
38
|
+
'uipath.agent.voice': { factory: 'voiceAgent()' },
|
|
39
|
+
'uipath.conversational.get-conversation-context': { factory: 'conversationContext()' },
|
|
40
|
+
'uipath.conversational.send-message': { factory: 'sendMessage()' },
|
|
41
|
+
'uipath.conversational.voice.create-outgoing-call': { factory: 'createOutgoingCall()' },
|
|
42
|
+
'uipath.conversational.voice.end-call': { factory: 'endCall()' },
|
|
43
|
+
'uipath.conversational.wait-for-message': { factory: 'waitForMessage()' },
|
|
44
|
+
'uipath.human-in-the-loop': { factory: 'hitl()' },
|
|
69
45
|
'uipath.human-in-the-loop.coded-action-app': {
|
|
70
46
|
factory: "hitl({ variant: 'action-app' })",
|
|
71
|
-
bundled: ['1.0', '1.1'],
|
|
72
47
|
},
|
|
73
48
|
'uipath.human-in-the-loop.document-validation': {
|
|
74
49
|
factory: "hitl({ variant: 'document-validation' })",
|
|
75
|
-
bundled: ['1.0'],
|
|
76
50
|
},
|
|
77
|
-
'uipath.human-in-the-loop.quick-form': { factory: "hitl({ variant: 'quick-form' })"
|
|
78
|
-
'uipath.pattern.batch-transform': { factory: 'batchTransform()'
|
|
79
|
-
'uipath.pattern.deep-rag': { factory: 'summarize()'
|
|
80
|
-
'uipath.ixp.extract-document-builder': { factory: 'dynamicExtract()', bundled: ['1.0.0'] },
|
|
51
|
+
'uipath.human-in-the-loop.quick-form': { factory: "hitl({ variant: 'quick-form' })" },
|
|
52
|
+
'uipath.pattern.batch-transform': { factory: 'batchTransform()' },
|
|
53
|
+
'uipath.pattern.deep-rag': { factory: 'summarize()' },
|
|
81
54
|
};
|
|
82
|
-
/**
|
|
83
|
-
* Every `entityConfig` key the product reads or persists on a Data Fabric node,
|
|
84
|
-
* across the four verbs. flow-workbench develop `eed682f19`:
|
|
85
|
-
*
|
|
86
|
-
* - services `serialization/entity-vdo.ts` `interface EntityConfig` (:229-272):
|
|
87
|
-
* `entityName`, `resultMode`, `_recordLimit`, `_skip`, `_sort`,
|
|
88
|
-
* `_selectedFieldNames`, `_filters`, `_entityFields`, `_relatedFields`,
|
|
89
|
-
* `_folderKey`, `_entityKey`, `_resourceKey`, `_outputSchema`;
|
|
90
|
-
* `CreateEntityConfig` (:719) adds `fieldValues`; `UpdateEntityConfig` (:744)
|
|
91
|
-
* adds `recordSource`, `readEntityNodeId`, `recordId`, `fieldUpdates`.
|
|
92
|
-
* - canvas `properties-panel/EntityConfigField.tsx` `EntityConfigInputs`
|
|
93
|
-
* (:85-110) and `entity/useEntityPanelState.ts` `EntitySelectionPatch`
|
|
94
|
-
* (:248-270), which the panels persist on an entity pick:
|
|
95
|
-
* `_entityDisplayName`, `_choiceSets`, `_folderPath`, `_entitySubType`.
|
|
96
|
-
* - Create/Update/DeleteEntityConfigField.tsx declare nothing beyond these.
|
|
97
|
-
*
|
|
98
|
-
* One union rather than one set per verb: a key another verb reads is at worst
|
|
99
|
-
* ignored, and a per-verb split would refuse a canvas-written key on a verb
|
|
100
|
-
* whose panel happens not to declare it. The test pins every key the typed
|
|
101
|
-
* factories write to this set.
|
|
102
|
-
*/
|
|
103
|
-
export const DATAFABRIC_ENTITY_CONFIG_KEYS = new Set([
|
|
104
|
-
'entityName', 'resultMode',
|
|
105
|
-
'_recordLimit', '_skip', '_sort', '_selectedFieldNames', '_filters',
|
|
106
|
-
'_entityFields', '_relatedFields', '_choiceSets', '_outputSchema',
|
|
107
|
-
'_folderKey', '_folderPath', '_entityKey', '_resourceKey', '_entityDisplayName', '_entitySubType',
|
|
108
|
-
'fieldValues', 'fieldUpdates', 'recordSource', 'readEntityNodeId', 'recordId',
|
|
109
|
-
]);
|
|
110
|
-
/**
|
|
111
|
-
* What the Data Fabric factories write, and what they do not, as the typed-family
|
|
112
|
-
* warning states it. The factories do not author the canvas's column snapshots,
|
|
113
|
-
* so a related-path filter (`customer.Name`) still needs a raw node carrying
|
|
114
|
-
* `_entityFields` (core/actions.ts `DataFabricFilter.field`).
|
|
115
|
-
*/
|
|
116
|
-
const DATAFABRIC_HINT = ' The factory writes the query and write keys: `filters` becomes `_filters` (flat rows; `or: true` '
|
|
117
|
-
+ 'starts each OR alternative), `sort` is `_sort`, `limit`/`skip`/`fields` are '
|
|
118
|
-
+ '`_recordLimit`/`_skip`/`_selectedFieldNames`, `values`/`set` are `fieldValues`/`fieldUpdates`, '
|
|
119
|
-
+ 'and `record` is `recordSource`. It does not write the column snapshots `_entityFields`, '
|
|
120
|
-
+ '`_relatedFields`, `_choiceSets` or `_outputSchema`; a related-path filter such as '
|
|
121
|
-
+ '`customer.Name` needs `_entityFields`, so for that a raw node is still the way.';
|
|
122
55
|
/**
|
|
123
56
|
* A reminder, as a `warning`, that a `rawNode` stands in for a typed factory,
|
|
124
57
|
* or `undefined` for a type with no factory.
|
|
@@ -128,7 +61,7 @@ const DATAFABRIC_HINT = ' The factory writes the query and write keys: `filters`
|
|
|
128
61
|
* related-path filter needs), and nothing checks factory coverage family by
|
|
129
62
|
* family. So the raw node keeps compiling at every version. The one failure
|
|
130
63
|
* the eval archive measured, an invented key the node never reads, is refused
|
|
131
|
-
* by
|
|
64
|
+
* by the node type's own `rawNode.inputProblem` instead (Data Fabric).
|
|
132
65
|
*
|
|
133
66
|
* @param nodeType - The definition's `nodeType`, as passed to `rawNode`.
|
|
134
67
|
* @returns The warning, or `undefined` for a type with no typed factory.
|
|
@@ -139,63 +72,16 @@ export function typedFamilyRawNodeWarning(nodeType) {
|
|
|
139
72
|
const entry = ownEntry(TYPED_FACTORIES, nodeType);
|
|
140
73
|
if (entry === undefined)
|
|
141
74
|
return undefined;
|
|
142
|
-
|
|
143
|
-
return `rawNode("${nodeType}"): this SDK has a typed factory, ${entry.factory}. A raw node keeps its `
|
|
144
|
-
+ `inputs verbatim, and \`validate\` cannot see a key the registry definition does not declare, so a `
|
|
145
|
-
+ `misspelled input compiles and is ignored at run time. Prefer the factory unless you need an input it `
|
|
146
|
-
+ `does not write.${hint}`;
|
|
75
|
+
return typedFactoryWarning(nodeType, entry.factory);
|
|
147
76
|
}
|
|
148
|
-
const isPlainObject = (v) => typeof v === 'object' && v !== null && !Array.isArray(v) && Object.getPrototypeOf(v) === Object.prototype;
|
|
149
77
|
/**
|
|
150
|
-
*
|
|
151
|
-
*
|
|
152
|
-
*
|
|
153
|
-
* This is where the eval failure became possible. A raw node renders its inputs
|
|
154
|
-
* verbatim, and `core.datafabric.read@1.4`'s registry definition declares only
|
|
155
|
-
* `entityName` and `resultMode`, so `validate` cannot see any other key. Measured
|
|
156
|
-
* on the eval archive (2026-09-23, skill-flow-datafabric-native-contract-intake-pipeline):
|
|
157
|
-
* the agent wrote `_sortOptions: [{ fieldName, isDescending }]` in place of
|
|
158
|
-
* `_sort`, `check` printed "no issues", `validate` said Valid, and the query
|
|
159
|
-
* would have run unsorted. The allowed set is what the product reads
|
|
160
|
-
* ({@link DATAFABRIC_ENTITY_CONFIG_KEYS}), so `_entityFields` and the other
|
|
161
|
-
* canvas snapshots stay legal.
|
|
162
|
-
*
|
|
163
|
-
* Severity follows the version: at a bundled `<nodeType>@<version>` the key set
|
|
164
|
-
* is known, so the key is refused (`error`); at a version this SDK has not
|
|
165
|
-
* synced, a newer node could read a new key, so it is reported (`warning`).
|
|
166
|
-
*
|
|
167
|
-
* @param nodeType - The node's type.
|
|
168
|
-
* @param version - The version the node is emitted at.
|
|
169
|
-
* @param inputs - The node's inputs, before rendering.
|
|
170
|
-
* @returns The diagnostic, or `undefined` for a clean node or a non-Data-Fabric type.
|
|
78
|
+
* The RAW_NODE_TYPED_FAMILY sentence for `nodeType`, naming its typed `factory`
|
|
79
|
+
* and appending a family's `hint`. One spelling for the not-yet-ported table
|
|
80
|
+
* above and for a registered node type's own advice (raw-node.ts).
|
|
171
81
|
*/
|
|
172
|
-
export function
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const unknown = Object.keys(inputs).filter((k) => k !== 'entityConfig');
|
|
178
|
-
const cfg = inputs.entityConfig;
|
|
179
|
-
if (isPlainObject(cfg)) {
|
|
180
|
-
for (const k of Object.keys(cfg))
|
|
181
|
-
if (!DATAFABRIC_ENTITY_CONFIG_KEYS.has(k))
|
|
182
|
-
unknown.push(`entityConfig.${k}`);
|
|
183
|
-
}
|
|
184
|
-
if (unknown.length === 0)
|
|
185
|
-
return undefined;
|
|
186
|
-
const bundled = ownEntry(TYPED_FACTORIES, nodeType)?.bundled.includes(version) ?? false;
|
|
187
|
-
const named = unknown.map((k) => `\`${k}\``).join(', ');
|
|
188
|
-
const factory = ownEntry(TYPED_FACTORIES, nodeType)?.factory;
|
|
189
|
-
const base = `${nodeType}@${version} carries ${named}, which the platform never reads: Data Fabric `
|
|
190
|
-
+ `nodes read only \`inputs.entityConfig\`, with the keys ${[...DATAFABRIC_ENTITY_CONFIG_KEYS].join(', ')} `
|
|
191
|
-
+ `(flow-workbench entity-vdo.ts \`EntityConfig\` and the entity panels). \`validate\` cannot see `
|
|
192
|
-
+ `the key, so it compiles and is ignored at run time; for example a sort is \`_sort: { field, direction }\`, `
|
|
193
|
-
+ `not \`_sortOptions\`.${factory ? ` The typed factory, ${factory}, writes only keys the node reads.` : ''}`;
|
|
194
|
-
if (bundled)
|
|
195
|
-
return { severity: 'error', message: base };
|
|
196
|
-
return {
|
|
197
|
-
severity: 'warning',
|
|
198
|
-
message: `${base} This SDK does not bundle ${nodeType}@${version}, so a newer node may read the key; `
|
|
199
|
-
+ 'it compiles as written.',
|
|
200
|
-
};
|
|
82
|
+
export function typedFactoryWarning(nodeType, factory, hint = '') {
|
|
83
|
+
return `rawNode("${nodeType}"): this SDK has a typed factory, ${factory}. A raw node keeps its `
|
|
84
|
+
+ `inputs verbatim, and \`validate\` cannot see a key the registry definition does not declare, so a `
|
|
85
|
+
+ `misspelled input compiles and is ignored at run time. Prefer the factory unless you need an input it `
|
|
86
|
+
+ `does not write.${hint}`;
|
|
201
87
|
}
|
package/dist/decompile-cli.js
CHANGED
|
@@ -26,6 +26,7 @@ import { resolveFlowRefs } from './ref-resolve.js';
|
|
|
26
26
|
import { flagValue, runWhenInvokedDirectly } from './cli-run.js';
|
|
27
27
|
import { PACKAGE_NAME } from './package-name.js';
|
|
28
28
|
import { commentText } from './core/comment-text.js';
|
|
29
|
+
import { pipelineFrontDoor } from './registry/uip/pipeline-front-door.js';
|
|
29
30
|
/** Derive a PascalCase base name from the flow name/id for the default output file. */
|
|
30
31
|
function baseName(flow) {
|
|
31
32
|
const src = flow.name ?? flow.id ?? 'Flow';
|
|
@@ -103,8 +104,7 @@ function pipelineScript(originalPath, tsPath, pipelinePath) {
|
|
|
103
104
|
return `#!/usr/bin/env node
|
|
104
105
|
// Generated by flow-decompile — the brownfield read/modify/write pipeline for
|
|
105
106
|
// ${commentText(basename(originalPath))}. Run it, edit ${commentText(basename(tsPath))}, run it again.
|
|
106
|
-
|
|
107
|
-
import { existsSync } from 'node:fs';
|
|
107
|
+
${pipelineFrontDoor('flow')}
|
|
108
108
|
|
|
109
109
|
const ORIGINAL = ${JSON.stringify(originalPath)};
|
|
110
110
|
const TS = ${JSON.stringify(tsPath)};
|
|
@@ -112,13 +112,6 @@ const BASELINE = ${JSON.stringify(base + '.baseline.flow')};
|
|
|
112
112
|
const EDITED = ${JSON.stringify(base + '.edited.flow')};
|
|
113
113
|
const MERGED = ${JSON.stringify(base + '.merged.flow')};
|
|
114
114
|
|
|
115
|
-
const uipProbe = spawnSync('uip', ['maestro', 'flow', 'compile', '--help'], { stdio: 'ignore' });
|
|
116
|
-
const frontDoor = !uipProbe.error && uipProbe.status === 0
|
|
117
|
-
? { file: 'uip', prefix: ['maestro', 'flow'] }
|
|
118
|
-
: { file: 'npx', prefix: ['--no-install', 'flow-sdk', 'flow'] };
|
|
119
|
-
const run = (verb, args) =>
|
|
120
|
-
execFileSync(frontDoor.file, [...frontDoor.prefix, verb, ...args], { stdio: 'inherit' });
|
|
121
|
-
|
|
122
115
|
// Ensure the decompiled source exists (a fresh clone may have only the .flow).
|
|
123
116
|
if (!existsSync(TS)) run('decompile', [ORIGINAL, '-o', TS, '--no-pipeline']);
|
|
124
117
|
|