@uipath/maestro-builder-sdk 6.25.0 → 6.26.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 CHANGED
@@ -57,13 +57,13 @@ could hand you spans for a version you do not have.
57
57
  | `apiWorkflow` | function | `dist/core/actions.d.ts:1658-1692` | Actions | Invoke a deployed API workflow — a coded workflow published to Orchestrator, run as a serverless job rather than by a… |
58
58
  | `ApiWorkflowInputs` | interface | `dist/core/actions.d.ts:411-442` | Option shapes | 5 field(s) |
59
59
  | `AppRef` | interface | `dist/nodes/hitl/flow/spec.d.ts:140-185` | Supporting types | A deployed Action App that supplies a human task's form — the `'action-app'` variant's subject. |
60
- | `ArmBuilder` | class | `dist/flow-sdk.d.ts:1187-1210` | Builders | The sub-builder an ARM callback receives — a `StepList` that can also name itself with `.label(...)`. |
60
+ | `ArmBuilder` | class | `dist/flow-sdk.d.ts:1193-1216` | Builders | The sub-builder an ARM callback receives — a `StepList` that can also name itself with `.label(...)`. |
61
61
  | `AskedField` | interface | `dist/core/actions.d.ts:79-89` | Supporting types | A value the reviewer FILLS IN: read downstream with `out('<step>', '<id>')`. |
62
62
  | `batchTransform` | function | `dist/nodes/ai-patterns/flow/factories.d.ts:49-83` | Actions | Add AI-generated columns to a CSV — the platform's **Batch transform** node, `uipath.pattern.batch-transform` (service… |
63
63
  | `BatchTransformInputs` | interface | `dist/nodes/ai-patterns/flow/spec.d.ts:48-63` | Option shapes | 4 field(s) |
64
64
  | `BindingContribution` | interface | `dist/core/node-classes.d.ts:80-101` | Supporting types | A resource binding a contribution hoists to the flow's top-level `bindings` array — the shape the `.flow` format… |
65
65
  | `BuiltEntryPoint` | interface | `dist/flow-sdk.d.ts:695-707` | Supporting types | One additional flow root, built by `.entryPoint()`. |
66
- | `BuiltFlow` | interface | `dist/flow-sdk.d.ts:708-743` | Supporting types | 15 field(s) |
66
+ | `BuiltFlow` | interface | `dist/flow-sdk.d.ts:708-749` | Supporting types | 16 field(s) |
67
67
  | `BuiltinToolName` | type | `dist/core/actions.d.ts:1066-1067` | Supporting types | The three platform-shipped built-in tools (fixed registry types). |
68
68
  | `BuiltinToolRef` | interface | `dist/core/actions.d.ts:1199-1219` | Supporting types | A platform built-in tool. |
69
69
  | `BuiltInValidatorGuardrail` | interface | `dist/core/actions.d.ts:762-803` | Supporting types | A platform-shipped validator, configured by parameters. |
@@ -128,11 +128,11 @@ could hand you spans for a version you do not have.
128
128
  | `FilterCondition` | type | `dist/nodes/transform/flow/spec.d.ts:10-11` | Supporting types | Comparison a filter rule applies to a field. |
129
129
  | `FilterMatch` | type | `dist/nodes/transform/flow/spec.d.ts:8-9` | Supporting types | How a filter combines its rules: every rule must match, or any one. |
130
130
  | `FilterRule` | interface | `dist/nodes/transform/flow/spec.d.ts:12-24` | Supporting types | 3 field(s) |
131
- | `flow` | function | `dist/flow-sdk.d.ts:1493-1508` | Flow construction | Start building a flow with the given id. |
131
+ | `flow` | function | `dist/flow-sdk.d.ts:1541-1556` | Flow construction | Start building a flow with the given id. |
132
132
  | `FlowAction` | class | `dist/core/node-classes.d.ts:162-168` | Supporting types | A node placed as a step — pass an instance to `.step(name, …)`. |
133
133
  | `FlowActionSpec` | type | `dist/flow-sdk.d.ts:53-54` | Supporting types | What `.step()` accepts here: the shared actions plus this SDK's subflow. |
134
134
  | `FlowActionSpecs` | interface | `dist/core/actions.d.ts:1443-1520` | Supporting types | Every action kind, keyed by kind, to the body of its spec — the arm's fields other than `kind`. |
135
- | `FlowBuilder` | class | `dist/flow-sdk.d.ts:1211-1492` | Builders | 13 member(s) |
135
+ | `FlowBuilder` | class | `dist/flow-sdk.d.ts:1217-1540` | Builders | 14 member(s) |
136
136
  | `FlowLayout` | interface | `dist/flow-sdk.d.ts:681-694` | Supporting types | Designer layout for a flow, keyed by AUTHOR-level ids: node entries by step name (plus the trigger id and `end`), edge… |
137
137
  | `FlowNode` | class | `dist/core/node-classes.d.ts:126-161` | Supporting types | The abstract root of every definition-backed node the builder can place. |
138
138
  | `FlowResource` | class | `dist/core/node-classes.d.ts:176-183` | Supporting types | A node attached to another semantic node — an inline agent's tool, context, memory, or escalation. |
@@ -225,11 +225,11 @@ could hand you spans for a version you do not have.
225
225
  | `SendMessageInputs` | interface | `dist/nodes/conversation/flow/spec.d.ts:8-27` | Option shapes | 4 field(s) |
226
226
  | `ShownField` | interface | `dist/core/actions.d.ts:63-78` | Supporting types | A value the reviewer READS: shown on the form, filled in from the flow. |
227
227
  | `Step` | type | `dist/flow-sdk.d.ts:484-603` | Supporting types | |
228
- | `StepList` | class | `dist/flow-sdk.d.ts:744-1186` | Builders | Collects a sequence of steps. |
228
+ | `StepList` | class | `dist/flow-sdk.d.ts:750-1192` | Builders | Collects a sequence of steps. |
229
229
  | `STICKY_NOTE_COLORS` | const | `dist/flow-sdk.d.ts:634-639` | Flow construction | The designer's sticky-note palette. |
230
230
  | `StickyNote` | interface | `dist/flow-sdk.d.ts:646-680` | Supporting types | A canvas sticky note — free text pinned to the diagram, for the humans reading it. |
231
231
  | `StickyNoteColor` | type | `dist/flow-sdk.d.ts:640-645` | Supporting types | A sticky note's swatch. |
232
- | `subflow` | function | `dist/flow-sdk.d.ts:1509-1548` | Flow construction | Run another flow as one step, and read back what it returns. |
232
+ | `subflow` | function | `dist/flow-sdk.d.ts:1557-1596` | Flow construction | Run another flow as one step, and read back what it returns. |
233
233
  | `SubflowSpec` | interface | `dist/flow-sdk.d.ts:45-52` | Supporting types | A step that runs a child flow. |
234
234
  | `summarize` | function | `dist/nodes/ai-patterns/flow/factories.d.ts:8-48` | Actions | Summarize a document with citations — the platform's **Summarize** node. |
235
235
  | `SummarizeInputs` | interface | `dist/nodes/ai-patterns/flow/spec.d.ts:8-40` | Option shapes | 3 field(s) |
@@ -5,12 +5,12 @@
5
5
 
6
6
  # Maestro Builder SDK — member index
7
7
 
8
- **A lookup table of 1113 rows — match one name in it, do not read it.**
8
+ **A lookup table of 1115 rows — match one name in it, do not read it.**
9
9
  Grep or search for the member you have; the row it lands on is the whole
10
10
  answer. Reading top to bottom costs ~20x what the one row does and tells you
11
11
  nothing you asked for.
12
12
 
13
- Every field and method of every exported shape — 1113 across
13
+ Every field and method of every exported shape — 1115 across
14
14
  200 interfaces and classes — keyed by the MEMBER's own name.
15
15
 
16
16
  **Use this when the name you have is a field or a method**, which is usually
@@ -28,7 +28,7 @@ truncated summary would, for less. Read the span.
28
28
  Member names repeat across shapes (`name` is declared on 69 of them), so the
29
29
  `Declared on` column is what makes a match actionable. For the whole shape
30
30
  rather than the one field, look that name up in [`api-index.md`](api-index.md) —
31
- which is why its span is not repeated on all 1113 rows here.
31
+ which is why its span is not repeated on all 1115 rows here.
32
32
 
33
33
  **A name that misses both indexes is probably not part of the API.** The one
34
34
  that comes up is a RUNTIME output key — a human task's `Action`, a step's
@@ -66,7 +66,7 @@ not find it either.
66
66
  | `app` | property | `HumanTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1337-1338` |
67
67
  | `appSystemName` | property | `AppRef` | `dist/nodes/hitl/flow/spec.d.ts:170-175` |
68
68
  | `appVersion` | property | `HumanTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1339-1340` |
69
- | `armLabel` | property | `ArmBuilder` | `dist/flow-sdk.d.ts:1199` |
69
+ | `armLabel` | property | `ArmBuilder` | `dist/flow-sdk.d.ts:1205` |
70
70
  | `assignee` | property | `HitlRecipient` | `dist/nodes/hitl/flow/spec.d.ts:52-63` |
71
71
  | `async` | property | `OrchestratorAsyncOpts` | `dist/bpmn/bpmn-sdk.d.ts:1281-1285` |
72
72
  | `atRiskPercentage` | property | `EscalationOpts` | `dist/case/case-sdk.d.ts:132-137` |
@@ -97,14 +97,14 @@ not find it either.
97
97
  | `body` | property | `TypedContextRow` | `dist/bpmn/typed-node.d.ts:176-181` |
98
98
  | `body` | property | `TypedInputRow` | `dist/bpmn/typed-node.d.ts:207-208` |
99
99
  | `boundaryEvent` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:2239-2246` |
100
- | `branch` | method | `StepList` | `dist/flow-sdk.d.ts:943-961` |
100
+ | `branch` | method | `StepList` | `dist/flow-sdk.d.ts:949-967` |
101
101
  | `branches` | property | `HttpInputsBase` | `dist/nodes/http/flow/spec.d.ts:25-30` |
102
- | `break` | method | `StepList` | `dist/flow-sdk.d.ts:1071-1080` |
102
+ | `break` | method | `StepList` | `dist/flow-sdk.d.ts:1077-1086` |
103
103
  | `breakEnabled` | property | `DoWhileOptions` | `dist/flow-sdk.d.ts:481-482` |
104
104
  | `breakEnabled` | property | `LoopOptions` | `dist/flow-sdk.d.ts:468-472` |
105
105
  | `build` | method | `BpmnBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3483-3488` |
106
106
  | `build` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1269-1274` |
107
- | `build` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1485-1491` |
107
+ | `build` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1533-1539` |
108
108
  | `businessRule` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:2527-2573` |
109
109
  | `by` | property | `LookupResolution` | `dist/core/lookups.d.ts:164` |
110
110
  | `by` | property | `LookupSpec` | `dist/core/lookups.d.ts:27-28` |
@@ -172,7 +172,7 @@ not find it either.
172
172
  | `context` | property | `RegistryTypeSpec` | `dist/bpmn/typed-node.d.ts:87` |
173
173
  | `contextRows` | property | `ActivityNodeOpts` | `dist/bpmn/bpmn-sdk.d.ts:1528-1535` |
174
174
  | `contextVerbatim` | property | `ActivityNodeOpts` | `dist/bpmn/bpmn-sdk.d.ts:1600-1605` |
175
- | `continue` | method | `StepList` | `dist/flow-sdk.d.ts:1081-1095` |
175
+ | `continue` | method | `StepList` | `dist/flow-sdk.d.ts:1087-1101` |
176
176
  | `contribute` | method | `FlowNode` | `dist/core/node-classes.d.ts:144-153` |
177
177
  | `conversationalAgent` | property | `FlowActionSpecs` | `dist/core/actions.d.ts:1479-1482` |
178
178
  | `conversationContext` | property | `FlowActionSpecs` | `dist/nodes/conversation/flow/spec.d.ts:55-58` |
@@ -207,6 +207,8 @@ not find it either.
207
207
  | `defaultOf` | property | `PendingExit` | `dist/bpmn/bpmn-sdk.d.ts:1924-1925` |
208
208
  | `deferDate` | property | `QueueItemInputs` | `dist/nodes/queue/flow/spec.d.ts:48-49` |
209
209
  | `definition` | property | `NodeContribution` | `dist/core/node-classes.d.ts:111-112` |
210
+ | `definitions` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:734-739` |
211
+ | `definitions` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1433-1473` |
210
212
  | `delay` | property | `FlowActionSpecs` | `dist/nodes/delay/flow/spec.d.ts:38-41` |
211
213
  | `dependsOn` | property | `LookupSpec` | `dist/core/lookups.d.ts:34-35` |
212
214
  | `description` | property | `AgentMemoryRef` | `dist/core/actions.d.ts:1187` |
@@ -223,7 +225,7 @@ not find it either.
223
225
  | `description` | property | `CustomGuardrail` | `dist/core/actions.d.ts:755` |
224
226
  | `description` | property | `EscalationRef` | `dist/core/actions.d.ts:1349-1350` |
225
227
  | `description` | property | `EventTriggerOpts` | `dist/case/case-sdk.d.ts:241` |
226
- | `description` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1235-1242` |
228
+ | `description` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1242-1249` |
227
229
  | `description` | property | `HttpRequestToolRef` | `dist/core/actions.d.ts:1154` |
228
230
  | `description` | property | `IxpExtractInputs` | `dist/core/actions.d.ts:337-344` |
229
231
  | `description` | property | `IxpToolRef` | `dist/core/actions.d.ts:1327-1328` |
@@ -265,7 +267,7 @@ not find it either.
265
267
  | `document` | property | `HitlInputs` | `dist/nodes/hitl/flow/spec.d.ts:252-256` |
266
268
  | `documentClassify` | property | `FlowActionSpecs` | `dist/nodes/document/flow/spec.d.ts:56-59` |
267
269
  | `documentId` | property | `DocValidationInputs` | `dist/nodes/hitl/flow/spec.d.ts:84-85` |
268
- | `doWhile` | method | `StepList` | `dist/flow-sdk.d.ts:1046-1070` |
270
+ | `doWhile` | method | `StepList` | `dist/flow-sdk.d.ts:1052-1076` |
269
271
  | `dueDate` | property | `QueueItemInputs` | `dist/nodes/queue/flow/spec.d.ts:50-51` |
270
272
  | `duration` | property | `TimerSpec` | `dist/bpmn/bpmn-sdk.d.ts:33-34` |
271
273
  | `dynamicExtract` | property | `FlowActionSpecs` | `dist/nodes/document/flow/spec.d.ts:60-63` |
@@ -289,12 +291,12 @@ not find it either.
289
291
  | `entity` | property | `DataServiceOpts` | `dist/bpmn/bpmn-sdk.d.ts:1090-1091` |
290
292
  | `entry` | property | `BuiltStage` | `dist/case/case-sdk.d.ts:528` |
291
293
  | `entry` | property | `BuiltTask` | `dist/case/case-sdk.d.ts:520` |
292
- | `entryPoint` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1301-1351` |
294
+ | `entryPoint` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1308-1358` |
293
295
  | `entryPointId` | property | `ProcessMetadata` | `dist/bpmn/bpmn-sdk.d.ts:534-539` |
294
- | `entryPoints` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:734-735` |
296
+ | `entryPoints` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:740-741` |
295
297
  | `entryWhen` | method | `StageBuilder` | `dist/case/case-sdk.d.ts:1004-1011` |
296
298
  | `entryWhen` | method | `TaskBuilder` | `dist/case/case-sdk.d.ts:947-956` |
297
- | `err` | method | `StepList` | `dist/flow-sdk.d.ts:752-777` |
299
+ | `err` | method | `StepList` | `dist/flow-sdk.d.ts:758-783` |
298
300
  | `error` | property | `BoundaryOpts` | `dist/bpmn/bpmn-sdk.d.ts:750-754` |
299
301
  | `error` | property | `EndOpts` | `dist/bpmn/bpmn-sdk.d.ts:696-706` |
300
302
  | `error` | property | `EventSubProcessOpts` | `dist/bpmn/bpmn-sdk.d.ts:1842-1847` |
@@ -459,7 +461,7 @@ not find it either.
459
461
  | `inclusiveGateway` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:2266-2273` |
460
462
  | `inlineAgent` | property | `FlowActionSpecs` | `dist/core/actions.d.ts:1491-1494` |
461
463
  | `input` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1160-1185` |
462
- | `input` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1426-1438` |
464
+ | `input` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1474-1486` |
463
465
  | `input` | property | `HumanTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1355-1356` |
464
466
  | `input` | property | `OrchestratorOpts` | `dist/bpmn/bpmn-sdk.d.ts:1241-1242` |
465
467
  | `input` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3068-3076` |
@@ -532,7 +534,7 @@ not find it either.
532
534
  | `kind` | property | `SubflowSpec` | `dist/flow-sdk.d.ts:47` |
533
535
  | `kind` | property | `WhenExpression` | `dist/case/case-sdk.d.ts:99-100` |
534
536
  | `kValue` | property | `AgentMemoryRef` | `dist/core/actions.d.ts:1194-1195` |
535
- | `label` | method | `ArmBuilder` | `dist/flow-sdk.d.ts:1200-1209` |
537
+ | `label` | method | `ArmBuilder` | `dist/flow-sdk.d.ts:1206-1215` |
536
538
  | `label` | property | `AskedField` | `dist/core/actions.d.ts:83-84` |
537
539
  | `label` | property | `BuiltStage` | `dist/case/case-sdk.d.ts:523` |
538
540
  | `label` | property | `InOutField` | `dist/core/actions.d.ts:99-100` |
@@ -546,7 +548,7 @@ not find it either.
546
548
  | `layout` | property | `BuiltCase` | `dist/case/case-sdk.d.ts:646-647` |
547
549
  | `layout` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:730-731` |
548
550
  | `layout` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1139-1159` |
549
- | `layout` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1243-1253` |
551
+ | `layout` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1250-1260` |
550
552
  | `limit` | property | `DataFabricReadInputs` | `dist/nodes/data-fabric/flow/spec.d.ts:95-100` |
551
553
  | `limit` | property | `DoWhileOptions` | `dist/flow-sdk.d.ts:479-480` |
552
554
  | `literal` | property | `Expr` | `dist/core/expr.d.ts:18` |
@@ -556,7 +558,7 @@ not find it either.
556
558
  | `lookups` | property | `ConnectorMeta` | `dist/core/connectors.d.ts:76-87` |
557
559
  | `loop` | property | `ActivityNodeFields` | `dist/bpmn/bpmn-sdk.d.ts:335-336` |
558
560
  | `loop` | property | `ActivityOpts` | `dist/bpmn/bpmn-sdk.d.ts:832-833` |
559
- | `loop` | method | `StepList` | `dist/flow-sdk.d.ts:1034-1045` |
561
+ | `loop` | method | `StepList` | `dist/flow-sdk.d.ts:1040-1051` |
560
562
  | `managed` | property | `HttpInputsBase` | `dist/nodes/http/flow/spec.d.ts:37-67` |
561
563
  | `marksCaseComplete` | property | `BuiltCaseExitCondition` | `dist/case/case-sdk.d.ts:354` |
562
564
  | `marksStageComplete` | property | `BuiltExitCondition` | `dist/case/case-sdk.d.ts:321` |
@@ -645,7 +647,7 @@ not find it either.
645
647
  | `name` | property | `EventSubProcessOpts` | `dist/bpmn/bpmn-sdk.d.ts:1840-1841` |
646
648
  | `name` | property | `EventTriggerOpts` | `dist/case/case-sdk.d.ts:240` |
647
649
  | `name` | property | `ExternalTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1499-1500` |
648
- | `name` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1227-1234` |
650
+ | `name` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1234-1241` |
649
651
  | `name` | property | `FlowOpts` | `dist/bpmn/bpmn-sdk.d.ts:1637-1638` |
650
652
  | `name` | property | `GatewayOpts` | `dist/bpmn/bpmn-sdk.d.ts:760-761` |
651
653
  | `name` | property | `HandlerOpts` | `dist/bpmn/bpmn-sdk.d.ts:1735-1736` |
@@ -707,7 +709,7 @@ not find it either.
707
709
  | `onError` | method | `ActivityBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3259-3266` |
708
710
  | `onError` | method | `ActivityBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3267-3274` |
709
711
  | `onError` | method | `ActivityBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3275-3283` |
710
- | `onError` | method | `StepList` | `dist/flow-sdk.d.ts:832-892` |
712
+ | `onError` | method | `StepList` | `dist/flow-sdk.d.ts:838-898` |
711
713
  | `onMessage` | method | `ActivityBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3302-3310` |
712
714
  | `onMessage` | method | `ActivityBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3311-3319` |
713
715
  | `onTimer` | method | `ActivityBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3284-3292` |
@@ -725,7 +727,7 @@ not find it either.
725
727
  | `outcomes` | property | `EscalationRef` | `dist/core/actions.d.ts:1395-1400` |
726
728
  | `outcomes` | property | `HitlInputs` | `dist/nodes/hitl/flow/spec.d.ts:211-225` |
727
729
  | `output` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1186-1198` |
728
- | `output` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1439-1474` |
730
+ | `output` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1487-1522` |
729
731
  | `output` | property | `RegistryTypeSpec` | `dist/bpmn/typed-node.d.ts:90` |
730
732
  | `output` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3077-3085` |
731
733
  | `outputColumns` | property | `BatchTransformInputs` | `dist/nodes/ai-patterns/flow/spec.d.ts:56-60` |
@@ -761,7 +763,7 @@ not find it either.
761
763
  | `pageRange` | property | `DynamicExtractInputs` | `dist/nodes/document/flow/spec.d.ts:49-50` |
762
764
  | `pageRange` | property | `IxpExtractInputs` | `dist/core/actions.d.ts:326-327` |
763
765
  | `parallel` | property | `LoopOptions` | `dist/flow-sdk.d.ts:461-462` |
764
- | `parallel` | method | `StepList` | `dist/flow-sdk.d.ts:998-1033` |
766
+ | `parallel` | method | `StepList` | `dist/flow-sdk.d.ts:1004-1039` |
765
767
  | `parallelGateway` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:2256-2265` |
766
768
  | `parameters` | property | `ConnectorEventOpts` | `dist/bpmn/bpmn-sdk.d.ts:1479-1480` |
767
769
  | `parameters` | property | `HttpOpts` | `dist/bpmn/bpmn-sdk.d.ts:1140-1145` |
@@ -860,7 +862,7 @@ not find it either.
860
862
  | `retry` | property | `ActivityOpts` | `dist/bpmn/bpmn-sdk.d.ts:830-831` |
861
863
  | `retryable` | property | `ErrorMappingRow` | `dist/bpmn/bpmn-sdk.d.ts:308-309` |
862
864
  | `retryCount` | property | `HttpInputsBase` | `dist/nodes/http/flow/spec.d.ts:109-123` |
863
- | `return` | method | `StepList` | `dist/flow-sdk.d.ts:1176-1185` |
865
+ | `return` | method | `StepList` | `dist/flow-sdk.d.ts:1182-1191` |
864
866
  | `returnCitations` | property | `SummarizeInputs` | `dist/nodes/ai-patterns/flow/spec.d.ts:34-39` |
865
867
  | `returns` | property | `AgentInputs` | `dist/core/actions.d.ts:641-660` |
866
868
  | `returns` | property | `ApiWorkflowInputs` | `dist/core/actions.d.ts:429-441` |
@@ -901,7 +903,7 @@ not find it either.
901
903
  | `schemaVersion` | method | `BpmnBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3375-3404` |
902
904
  | `schemaVersion` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:714-720` |
903
905
  | `schemaVersion` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1068-1094` |
904
- | `schemaVersion` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1386-1425` |
906
+ | `schemaVersion` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1393-1432` |
905
907
  | `scope` | property | `EscalationRecipient` | `dist/case/case-sdk.d.ts:121` |
906
908
  | `scopes` | property | `GuardrailSelector` | `dist/core/actions.d.ts:701` |
907
909
  | `script` | property | `FlowActionSpecs` | `dist/nodes/script/flow/spec.d.ts:47-50` |
@@ -973,16 +975,16 @@ not find it either.
973
975
  | `startName` | property | `EventSubProcessOpts` | `dist/bpmn/bpmn-sdk.d.ts:1887-1888` |
974
976
  | `startPayload` | property | `EventSubProcessOpts` | `dist/bpmn/bpmn-sdk.d.ts:1889-1890` |
975
977
  | `startProcess` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:2459-2478` |
976
- | `step` | method | `StepList` | `dist/flow-sdk.d.ts:778-788` |
978
+ | `step` | method | `StepList` | `dist/flow-sdk.d.ts:784-794` |
977
979
  | `steps` | property | `BuiltEntryPoint` | `dist/flow-sdk.d.ts:705-706` |
978
980
  | `steps` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:724` |
979
- | `steps` | property | `StepList` | `dist/flow-sdk.d.ts:746` |
980
- | `stepSwitch` | method | `StepList` | `dist/flow-sdk.d.ts:789-831` |
981
- | `stepToList` | method | `StepList` | `dist/flow-sdk.d.ts:906-934` |
982
- | `stepToRef` | method | `StepList` | `dist/flow-sdk.d.ts:1127-1155` |
983
- | `stepToRef` | method | `StepList` | `dist/flow-sdk.d.ts:1156-1175` |
981
+ | `steps` | property | `StepList` | `dist/flow-sdk.d.ts:752` |
982
+ | `stepSwitch` | method | `StepList` | `dist/flow-sdk.d.ts:795-837` |
983
+ | `stepToList` | method | `StepList` | `dist/flow-sdk.d.ts:912-940` |
984
+ | `stepToRef` | method | `StepList` | `dist/flow-sdk.d.ts:1133-1161` |
985
+ | `stepToRef` | method | `StepList` | `dist/flow-sdk.d.ts:1162-1181` |
984
986
  | `stickyNotes` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:732-733` |
985
- | `stickyNotes` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1254-1279` |
987
+ | `stickyNotes` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1261-1286` |
986
988
  | `storageBucket` | property | `DocValidationInputs` | `dist/nodes/hitl/flow/spec.d.ts:82-83` |
987
989
  | `strategy` | property | `LookupSpec` | `dist/core/lookups.d.ts:33` |
988
990
  | `style` | property | `CaseNodeLayout` | `dist/case/case-sdk.d.ts:597-598` |
@@ -995,7 +997,7 @@ not find it either.
995
997
  | `subType` | property | `VarSpec` | `dist/flow-sdk.d.ts:84-85` |
996
998
  | `summarize` | property | `FlowActionSpecs` | `dist/nodes/ai-patterns/flow/spec.d.ts:66-69` |
997
999
  | `summary` | property | `CaseAppConfig` | `dist/case/case-sdk.d.ts:585-586` |
998
- | `switch` | method | `StepList` | `dist/flow-sdk.d.ts:962-997` |
1000
+ | `switch` | method | `StepList` | `dist/flow-sdk.d.ts:968-1003` |
999
1001
  | `systemPrompt` | property | `ConversationalAgentInputs` | `dist/core/actions.d.ts:134-139` |
1000
1002
  | `systemPrompt` | property | `InlineAgentInputs` | `dist/core/actions.d.ts:814-863` |
1001
1003
  | `systemPrompt` | property | `VoiceAgentInputs` | `dist/core/actions.d.ts:221-226` |
@@ -1020,7 +1022,7 @@ not find it either.
1020
1022
  | `temperature` | property | `InlineAgentInputs` | `dist/core/actions.d.ts:924-925` |
1021
1023
  | `temperature` | property | `VoiceSettings` | `dist/core/actions.d.ts:213-214` |
1022
1024
  | `terminate` | property | `EndOpts` | `dist/bpmn/bpmn-sdk.d.ts:692-693` |
1023
- | `terminate` | method | `StepList` | `dist/flow-sdk.d.ts:1096-1126` |
1025
+ | `terminate` | method | `StepList` | `dist/flow-sdk.d.ts:1102-1132` |
1024
1026
  | `threshold` | property | `ContextIndexRef` | `dist/core/actions.d.ts:1438-1439` |
1025
1027
  | `timeCycle` | property | `BuiltTrigger` | `dist/case/case-sdk.d.ts:201-202` |
1026
1028
  | `timeout` | property | `HttpInputsBase` | `dist/nodes/http/flow/spec.d.ts:91-108` |
@@ -1044,11 +1046,11 @@ not find it either.
1044
1046
  | `trigger` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:725-727` |
1045
1047
  | `trigger` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1224-1232` |
1046
1048
  | `trigger` | property | `EscalationOpts` | `dist/case/case-sdk.d.ts:128-129` |
1047
- | `trigger` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1280-1300` |
1049
+ | `trigger` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1287-1307` |
1048
1050
  | `trigger` | property | `StartOpts` | `dist/bpmn/bpmn-sdk.d.ts:624-671` |
1049
1051
  | `triggeredByEvent` | property | `SubProcessOpts` | `dist/bpmn/bpmn-sdk.d.ts:976-977` |
1050
- | `triggerId` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:736-742` |
1051
- | `triggerId` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1352-1371` |
1052
+ | `triggerId` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:742-748` |
1053
+ | `triggerId` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1359-1378` |
1052
1054
  | `triggerOptions` | property | `BuiltFlow` | `dist/flow-sdk.d.ts:728-729` |
1053
1055
  | `triggers` | property | `BuiltCase` | `dist/case/case-sdk.d.ts:644-645` |
1054
1056
  | `triggers` | property | `CaseLayout` | `dist/case/case-sdk.d.ts:620-621` |
@@ -1104,7 +1106,7 @@ not find it either.
1104
1106
  | `value` | property | `TypedInputRow` | `dist/bpmn/typed-node.d.ts:205-206` |
1105
1107
  | `values` | property | `DataFabricCreateInputs` | `dist/nodes/data-fabric/flow/spec.d.ts:132-137` |
1106
1108
  | `var` | method | `CaseBuilder` | `dist/case/case-sdk.d.ts:1199-1223` |
1107
- | `var` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1475-1484` |
1109
+ | `var` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1523-1532` |
1108
1110
  | `var` | method | `ScopeBuilder` | `dist/bpmn/bpmn-sdk.d.ts:3059-3067` |
1109
1111
  | `var` | property | `TaskOutputBinding` | `dist/case/case-sdk.d.ts:494-495` |
1110
1112
  | `var` | property | `TypedOutputRow` | `dist/bpmn/typed-node.d.ts:251-252` |
@@ -1127,7 +1129,7 @@ not find it either.
1127
1129
  | `version` | property | `ConnectorToolRef` | `dist/core/actions.d.ts:1232-1233` |
1128
1130
  | `version` | property | `EventSubscription` | `dist/core/actions.d.ts:2116` |
1129
1131
  | `version` | property | `ExternalTaskOpts` | `dist/bpmn/bpmn-sdk.d.ts:1507-1508` |
1130
- | `version` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1372-1385` |
1132
+ | `version` | method | `FlowBuilder` | `dist/flow-sdk.d.ts:1379-1392` |
1131
1133
  | `version` | property | `NodeOptions` | `dist/flow-sdk.d.ts:373-380` |
1132
1134
  | `version` | property | `TriggerMeta` | `dist/core/connectors.d.ts:126` |
1133
1135
  | `version` | property | `TriggerOptions` | `dist/core/actions.d.ts:2073-2074` |
@@ -10,7 +10,8 @@
10
10
  * Output defaults to the plan file the project in the working directory ships
11
11
  * (`caseplan.case` for a project `uip maestro case init` scaffolded), else
12
12
  * `caseplan.json`. An `-o` that names a different plan file than the project
13
- * ships is refused (CASE_OUTPUT_NOT_SHIPPED).
13
+ * ships is refused (CASE_OUTPUT_NOT_SHIPPED), and so is a plan file written into
14
+ * a solution directory above its Case project (CASE_OUTPUT_OUTSIDE_PROJECT).
14
15
  */
15
16
  import { reportDiagnostics, reportResult, thrownDiagnostic } from '../cli-result.js';
16
17
  import { writeJsonFile } from '../core/json-file.js';
@@ -67,7 +68,7 @@ export async function run(argv) {
67
68
  const out = flagValue(argv, '-o') ?? shippedCasePlanName('.') ?? 'caseplan.json';
68
69
  const shadow = shadowedOutputDiagnostic(out);
69
70
  if (shadow) {
70
- console.error(` ✗ [${shadow.code}] ${shadow.message}`);
71
+ console.error(` ✗ [${shadow.code}] ${shadow.message} Fix: ${shadow.suggestion}.`);
71
72
  reportDiagnostics([...diags, shadow]);
72
73
  console.error('compile: 1 error(s); not emitting.');
73
74
  return 1;
@@ -96,6 +97,9 @@ export async function run(argv) {
96
97
  * `uip maestro case init` scaffolds `caseplan.case` since uipath-cli#5004.
97
98
  */
98
99
  const CASE_PLAN_FILE_NAMES = ['caseplan.case', 'caseplan.json', 'case.stage.json', 'default.stage.json'];
100
+ /** The file that makes a directory a project, and the `ProjectType` a Case project declares in it. */
101
+ const PROJECT_FILE = 'project.uiproj';
102
+ const CASE_PROJECT_TYPE = 'CaseManagement';
99
103
  /**
100
104
  * The plan file the project in `dir` ships, or undefined when `dir` is not a
101
105
  * Case project. Decided as the packager decides: the first plan file present in
@@ -126,6 +130,11 @@ function shadowedOutputDiagnostic(outPath) {
126
130
  if (!CASE_PLAN_FILE_NAMES.includes(name.toLowerCase()))
127
131
  return undefined;
128
132
  const dir = dirname(outPath);
133
+ // First: a plan file already in a solution directory would otherwise make it
134
+ // look like a project that ships that file.
135
+ const outside = outsideProjectDiagnostic(outPath);
136
+ if (outside)
137
+ return outside;
129
138
  const shipped = shippedCasePlanName(dir);
130
139
  if (!shipped || shipped === name)
131
140
  return undefined;
@@ -138,6 +147,53 @@ function shadowedOutputDiagnostic(outPath) {
138
147
  suggestion: `compile with -o ${target}`,
139
148
  };
140
149
  }
150
+ /**
151
+ * A plan file in a non-project dir that holds Case projects (a solution dir) is
152
+ * packed by none. A directory that is itself a project, or holds no Case
153
+ * project, is not checked.
154
+ */
155
+ function outsideProjectDiagnostic(outPath) {
156
+ const dir = dirname(outPath);
157
+ if (existsSync(join(dir, PROJECT_FILE)))
158
+ return undefined;
159
+ const projects = childCaseProjects(dir);
160
+ if (projects.length === 0)
161
+ return undefined;
162
+ const targets = projects.map((p) => join(dir, p, shippedCasePlanName(join(dir, p)) ?? CASE_PLAN_FILE_NAMES[0]));
163
+ return {
164
+ level: 'error',
165
+ code: 'CASE_OUTPUT_OUTSIDE_PROJECT',
166
+ message: `${outPath} is in a solution directory, not a Case project; no project packs it. ` +
167
+ `The Case project${projects.length > 1 ? 's here are' : ' here is'} ${projects.map((p) => join(dir, p)).join(', ')}.`,
168
+ suggestion: projects.length === 1 ? `compile with -o ${targets[0]}` : `compile with -o one of: ${targets.join(', ')}`,
169
+ };
170
+ }
171
+ /**
172
+ * Subdirectories of `dir` (or links to one) whose `project.uiproj` declares a
173
+ * CaseManagement project.
174
+ */
175
+ function childCaseProjects(dir) {
176
+ let entries;
177
+ try {
178
+ entries = readdirSync(dir, { withFileTypes: true });
179
+ }
180
+ catch {
181
+ return [];
182
+ }
183
+ return entries
184
+ // A link counts: the read below fails for a link to a file.
185
+ .filter((e) => e.isDirectory() || e.isSymbolicLink())
186
+ .map((e) => e.name)
187
+ .filter((name) => {
188
+ try {
189
+ return JSON.parse(readFileSync(join(dir, name, PROJECT_FILE), 'utf8'))?.ProjectType === CASE_PROJECT_TYPE;
190
+ }
191
+ catch {
192
+ return false;
193
+ }
194
+ })
195
+ .sort();
196
+ }
141
197
  /** The case file `package-descriptor.json` in `dir` ships, if it names one. */
142
198
  function describedCaseFileName(dir) {
143
199
  const descriptorPath = join(dir, 'package-descriptor.json');
package/dist/check.js CHANGED
@@ -29,7 +29,7 @@ import { ownEntry } from './core/own-entry.js';
29
29
  import { FLOW_NODE_TYPES } from './flow-node-registry.js';
30
30
  import { stepExits } from './flow-step-exits.js';
31
31
  import { plainHttpOnErrorMessage } from './nodes/http/flow/family.js';
32
- import { resolveVersion } from './core/nodes/versioned.js';
32
+ import { resolveVersion, resolveVersionCarried } from './core/nodes/versioned.js';
33
33
  import { declaredErrorPortRefusal } from './core/error-port.js';
34
34
  export function check(built, opts = {}) {
35
35
  let diags = [];
@@ -275,7 +275,7 @@ function checkFlow(built, ancestors, opts = {}) {
275
275
  declared.add(s.name); // a step's output is referenceable by name
276
276
  }
277
277
  if ((s.kind === 'stepToList' || s.kind === 'stepToRef') && s.port === 'error')
278
- checkOnError(s, prevPortSource, diags, prevPortSource && checkedSteps.get(prevPortSource.name));
278
+ checkOnError(s, prevPortSource, diags, prevPortSource && checkedSteps.get(prevPortSource.name), carriedLookup([built, ...ancestors]));
279
279
  if ((s.kind === 'stepToList' || s.kind === 'stepToRef') && s.port.startsWith('branch-')) {
280
280
  const want = s.port.slice('branch-'.length);
281
281
  const prevSpec = prevAction?.spec;
@@ -381,7 +381,7 @@ function checkFlow(built, ancestors, opts = {}) {
381
381
  prevPortSource = s;
382
382
  const registered = registeredKind(s.spec);
383
383
  if (registered) {
384
- const { placed, checked } = checkRegisteredStep(registered, s, exprs, errorSource, opts, diags, typeOf, triggerId);
384
+ const { placed, checked } = checkRegisteredStep(registered, s, exprs, errorSource, opts, diags, typeOf, triggerId, carriedLookup([built, ...ancestors]));
385
385
  checkedSteps.set(s.name, checked);
386
386
  if (placed)
387
387
  registeredSteps.set(s.name, checked);
@@ -3977,6 +3977,11 @@ const LOOP_FIELDS = new Set(['currentItem', 'currentIteration', 'collection', 'o
3977
3977
  * before the 2.4 default (#868); its own fields are not audited here.
3978
3978
  */
3979
3979
  const LOOP_FIELDS_1_0_0 = new Set(['currentItem', 'currentIndex', 'collection', 'output', 'error']);
3980
+ /** The {@link CarriedLookup} over `scopes` — the flow being checked first, then its ancestors. */
3981
+ function carriedLookup(scopes) {
3982
+ const all = scopes.flatMap((b) => b.definitions ?? []);
3983
+ return Object.assign((typeName, version) => all.find((d) => d.nodeType === typeName && d.version === version), { versions: (typeName) => [...new Set(all.filter((d) => d.nodeType === typeName).map((d) => String(d.version)))] });
3984
+ }
3980
3985
  /** The registered node type for a spec's kind, or undefined (a custom FlowAction has no kind). */
3981
3986
  function registeredKind(spec) {
3982
3987
  const kind = spec?.kind;
@@ -3994,14 +3999,15 @@ function registeredKind(spec) {
3994
3999
  * which serialize enforces (#942) and the type's tests pin; an author cannot
3995
4000
  * cause the gap, so there is no author diagnostic to report.
3996
4001
  */
3997
- function checkRegisteredStep(entry, s, exprs, errorSource, opts, diags, typeOf, triggerId) {
4002
+ function checkRegisteredStep(entry, s, exprs, errorSource, opts, diags, typeOf, triggerId, carried) {
3998
4003
  const spec = s.spec;
3999
4004
  /** The step's node-local rules and expressions, as `impl` defines them. */
4000
- const runRules = (impl) => {
4005
+ const runRules = (impl, version = impl.version, carriedDef) => {
4001
4006
  const ctx = {
4002
4007
  step: s.name,
4003
- version: impl.version,
4004
- definition: () => bundledDefinition(impl.typeName, impl.version),
4008
+ // At a carried version, the version and definition serialize emits.
4009
+ version,
4010
+ definition: () => carriedDef ?? bundledDefinition(impl.typeName, impl.version),
4005
4011
  report: (code, message, suggestion) => diags.push(catalogued(entry, s.name, code, message, suggestion)),
4006
4012
  declaredRef: (js) => {
4007
4013
  const name = declaredRefName(js, triggerId);
@@ -4024,8 +4030,14 @@ function checkRegisteredStep(entry, s, exprs, errorSource, opts, diags, typeOf,
4024
4030
  return ctx;
4025
4031
  };
4026
4032
  let impl;
4033
+ let version;
4034
+ let carriedDef;
4027
4035
  try {
4028
- impl = resolveVersion(entry.type, spec, s.options?.version, `step "${s.name}"`);
4036
+ // A pin the registry lacks but the flow carries resolves (#1128), as in serialize.
4037
+ const resolved = resolveVersionCarried(entry.type, spec, s.options?.version, `step "${s.name}"`, carried);
4038
+ impl = resolved.impl;
4039
+ version = resolved.version;
4040
+ carriedDef = resolved.carried;
4029
4041
  }
4030
4042
  catch (e) {
4031
4043
  // A select() that picks an unregistered version is the node type's bug, not the author's pin.
@@ -4043,8 +4055,14 @@ function checkRegisteredStep(entry, s, exprs, errorSource, opts, diags, typeOf,
4043
4055
  checked: { entry, impl: fallback, spec, placement: { step: s.name, kind: fallback.kind, spec, version: fallback.version }, ctx: fallbackCtx },
4044
4056
  };
4045
4057
  }
4046
- const ctx = runRules(impl);
4047
- return { placed: true, checked: { entry, impl, spec, placement: { step: s.name, kind: impl.kind, spec, version: impl.version }, ctx } };
4058
+ const ctx = runRules(impl, version, carriedDef);
4059
+ return {
4060
+ placed: true,
4061
+ checked: {
4062
+ entry, impl, spec, placement: { step: s.name, kind: impl.kind, spec, version }, ctx,
4063
+ ...(carriedDef !== undefined ? { carried: carriedDef } : {}),
4064
+ },
4065
+ };
4048
4066
  }
4049
4067
  /** Every non-literal Expr reachable in `value`, as expressions to check. */
4050
4068
  function pushDeepExprs(value, step, errorSource, out) {
@@ -4171,7 +4189,7 @@ const ERROR_ENVELOPE_FIELDS = ['code', 'message', 'detail', 'category', 'status'
4171
4189
  */
4172
4190
  function checkOnError(_handler, step, diags,
4173
4191
  /** The step's registry record, when its kind is registered and its version resolved. */
4174
- placed) {
4192
+ placed, carried) {
4175
4193
  // The builder refuses a handler with no eligible step before it, so a missing
4176
4194
  // source here means a hand-built `BuiltFlow`; there is nothing to say about it.
4177
4195
  if (!step)
@@ -4243,7 +4261,7 @@ placed) {
4243
4261
  }
4244
4262
  }
4245
4263
  else {
4246
- const def = bundledDefinition(impl.typeName, impl.version);
4264
+ const def = placed.carried ?? bundledDefinition(impl.typeName, impl.version);
4247
4265
  if (def !== undefined && !definitionHasErrorPort(def)) {
4248
4266
  diags.push({ level: 'error', code: 'ONERROR_NO_ERROR_PORT', message: typedNoErrorPortMessage(step.name, impl.kind, def), step: step.name });
4249
4267
  return;
@@ -4262,7 +4280,12 @@ placed) {
4262
4280
  // A version the SDK does not bundle (an inline agent's registry version) has
4263
4281
  // no definition here to ask; version resolution reports that, not this check.
4264
4282
  const bundledType = bundledActionNodeType(spec);
4265
- const bundledDef = bundledType ? bundledDefinition(bundledType, actionVersion(spec, step.options?.version)) : undefined;
4283
+ // A version the flow CARRIES (`.definitions()`, #1128) answers the same way
4284
+ // a bundled one does: it is the definition serialize will emit.
4285
+ const pinned = step.options?.version;
4286
+ const bundledDef = bundledType
4287
+ ? bundledDefinition(bundledType, actionVersion(spec, pinned)) ?? (pinned !== undefined ? carried?.(bundledType, pinned) : undefined)
4288
+ : undefined;
4266
4289
  // A per-tenant family: ask the definition serialize synthesizes for it (#1040).
4267
4290
  let perCallDef;
4268
4291
  if (!bundledType) {
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Node definitions a flow CARRIES — the third source a pinned `{ version }`
3
+ * resolves from, after the SDK's bundle (#1128).
4
+ *
5
+ * Every `.flow` file holds the exact definition of every node it uses, in
6
+ * `definitions[]`. The SDK bundles only the versions it was released with, so
7
+ * a version the registry served later (`node add` writes
8
+ * `uipath.human-in-the-loop.quick-form@1.6`; the SDK ships 1.0 and 1.1) used
9
+ * to be refused, and the source decompile wrote for an untouched product flow
10
+ * did not compile. A carried definition closes that: decompile copies the
11
+ * file's own entry into `.definitions([...])`, and compile resolves the pin
12
+ * against it.
13
+ *
14
+ * A carried definition is an exact copy of a real one, never a way to invent a
15
+ * version. So it is validated the way a `rawNode` snapshot manifest is: it
16
+ * names its own `nodeType` and `version`, and it has the `display.label` every
17
+ * node manifest has.
18
+ */
19
+ /** A carried definition, by its `<nodeType>@<version>` key. */
20
+ export type CarriedDefinitions = ReadonlyMap<string, Record<string, unknown>>;
21
+ /**
22
+ * Why `manifest` cannot be carried, or `undefined` when it can.
23
+ *
24
+ * For instance `{ nodeType: 'x', version: '1.0' }` is refused for lacking
25
+ * `display.label`.
26
+ */
27
+ export declare function carriedDefinitionRefusal(manifest: unknown, where: string): string | undefined;
28
+ /**
29
+ * Index `manifests` by `<nodeType>@<version>`. Throws on an invalid manifest,
30
+ * or on two different manifests for one pair (which one compiles would be a
31
+ * guess).
32
+ */
33
+ export declare function indexCarriedDefinitions(manifests: readonly unknown[], where: string, into?: Map<string, Record<string, unknown>>): Map<string, Record<string, unknown>>;
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Node definitions a flow CARRIES — the third source a pinned `{ version }`
3
+ * resolves from, after the SDK's bundle (#1128).
4
+ *
5
+ * Every `.flow` file holds the exact definition of every node it uses, in
6
+ * `definitions[]`. The SDK bundles only the versions it was released with, so
7
+ * a version the registry served later (`node add` writes
8
+ * `uipath.human-in-the-loop.quick-form@1.6`; the SDK ships 1.0 and 1.1) used
9
+ * to be refused, and the source decompile wrote for an untouched product flow
10
+ * did not compile. A carried definition closes that: decompile copies the
11
+ * file's own entry into `.definitions([...])`, and compile resolves the pin
12
+ * against it.
13
+ *
14
+ * A carried definition is an exact copy of a real one, never a way to invent a
15
+ * version. So it is validated the way a `rawNode` snapshot manifest is: it
16
+ * names its own `nodeType` and `version`, and it has the `display.label` every
17
+ * node manifest has.
18
+ */
19
+ /**
20
+ * Why `manifest` cannot be carried, or `undefined` when it can.
21
+ *
22
+ * For instance `{ nodeType: 'x', version: '1.0' }` is refused for lacking
23
+ * `display.label`.
24
+ */
25
+ export function carriedDefinitionRefusal(manifest, where) {
26
+ if (!manifest || typeof manifest !== 'object' || Array.isArray(manifest)) {
27
+ return `${where}: a carried definition must be a node manifest object.`;
28
+ }
29
+ const m = manifest;
30
+ if (typeof m.nodeType !== 'string' || !m.nodeType || typeof m.version !== 'string' || !m.version) {
31
+ return `${where}: a carried definition must name its exact nodeType and version.`;
32
+ }
33
+ if (typeof m.display?.label !== 'string' || !m.display.label) {
34
+ return `${where}: the carried definition ${m.nodeType}@${m.version} lacks display.label — not a valid node manifest.`;
35
+ }
36
+ return undefined;
37
+ }
38
+ /**
39
+ * Index `manifests` by `<nodeType>@<version>`. Throws on an invalid manifest,
40
+ * or on two different manifests for one pair (which one compiles would be a
41
+ * guess).
42
+ */
43
+ export function indexCarriedDefinitions(manifests, where, into = new Map()) {
44
+ for (const m of manifests) {
45
+ const refusal = carriedDefinitionRefusal(m, where);
46
+ if (refusal)
47
+ throw new Error(refusal);
48
+ const def = m;
49
+ const key = `${def.nodeType}@${def.version}`;
50
+ const prior = into.get(key);
51
+ if (prior !== undefined && stableJson(prior) !== stableJson(def)) {
52
+ throw new Error(`${where}: two different carried definitions for ${key}. Keep the one the file holds.`);
53
+ }
54
+ into.set(key, def);
55
+ }
56
+ return into;
57
+ }
58
+ /** `JSON.stringify` with object keys sorted, so two copies of one manifest compare equal whatever their key order. */
59
+ function stableJson(value) {
60
+ return JSON.stringify(value, (_key, v) => (v && typeof v === 'object' && !Array.isArray(v)
61
+ ? Object.fromEntries(Object.keys(v).sort().map((k) => [k, v[k]]))
62
+ : v));
63
+ }