@celigo/api-specs 0.2.214 → 0.2.215

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/ai-agent.yml CHANGED
@@ -5679,12 +5679,16 @@ components:
5679
5679
  - |-
5680
5680
  On a grouped record (the export groups rows, so the record is an
5681
5681
  array) only `create` can author output — build it from the rows with
5682
- `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`.
5682
+ `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`
5683
+ (`$.rows[0].field` and `$.rows[*]` with `inputContext: envelope`).
5683
5684
  `modify` has no object to overlay onto an array: the record passes
5684
- through untouched and the processor reports success. Either mode
5685
- reshapes the inside of one record; neither changes how many records
5686
- the page carries (that is the export's `preSavePage` hook) or whether
5687
- the export groups at all (that is its grouping setting).
5685
+ through untouched and the processor reports success. Paths written
5686
+ for one object record (`$.field`, an entry `$.lines[*]`) resolve
5687
+ nothing there, so `create` returns `{}` for each record, also with
5688
+ no error (live, 2026-10-30). Either mode reshapes the inside of one
5689
+ record; neither changes how many records the page carries (that is
5690
+ the export's `preSavePage` hook) or whether the export groups at all
5691
+ (that is its grouping setting).
5688
5692
  examples:
5689
5693
  - create
5690
5694
  - modify
@@ -5749,8 +5753,8 @@ components:
5749
5753
  - record
5750
5754
  - envelope
5751
5755
  x-enumDescriptions:
5752
- record: The transform processor evaluates `mappings[].extract` JSONPath against the flat record itself (`$.field`, no `record.` segment) — the default when absent.
5753
- envelope: The transform processor evaluates JSONPath against the wrapped runtime envelope `{record, job, testMode, settings, headers, queryParams}` (file-provider steps also carry `fileMeta`) — record fields need the `record.` segment (`$.record.field`), while `headers` and `queryParams` sit beside `record` (`$.headers['X-Id']`, `$.queryParams.src`).
5756
+ record: The transform processor evaluates `mappings[].extract` JSONPath against the flat record itself (`$.field`, no `record.` segment; a grouped record is the array of rows, `$[0].field`) — the default when absent.
5757
+ envelope: The transform processor evaluates JSONPath against the wrapped runtime envelope `{record, job, testMode, settings, headers, queryParams}` (file-provider steps also carry `fileMeta`) — record fields need the `record.` segment (`$.record.field`), and a grouped record sits under `rows` instead (`$.rows[0].field`), while `headers` and `queryParams` sit beside `record` (`$.headers['X-Id']`, `$.queryParams.src`).
5754
5758
  description: |
5755
5759
  Controls the JSON shape the transformTwoDotZero processor
5756
5760
  evaluates `mappings[].extract` JSONPath values against at
@@ -5766,24 +5770,38 @@ components:
5766
5770
  processor sees the FLAT record as its evaluation root.
5767
5771
  `mappings[].extract` JSONPath MUST anchor directly at
5768
5772
  `$` with NO `record.` segment — e.g. `"$.orderId"`,
5769
- `"$.customer.email"`; PLACEHOLDER extracts use
5773
+ `"$.customer.email"` on an object record, `"$[0].orderId"`
5774
+ on a grouped one; PLACEHOLDER extracts use
5770
5775
  `"$.PLACEHOLDER_<field>"`.
5771
5776
  This is the dominant Celigo idiom and the right choice for new transforms.
5772
5777
  - `envelope`: the processor sees a wrapped object
5773
5778
  `{record: {...}, job, testMode, settings, headers,
5774
5779
  queryParams}` (plus `fileMeta` on file-provider steps).
5775
5780
  `mappings[].extract` JSONPath MUST include the
5776
- `record.` segment for record fields — e.g.
5777
- `"$.record.orderId"` — and reads `headers` and
5781
+ `record.` segment for an object record's fields — e.g.
5782
+ `"$.record.orderId"`; a grouped record sits under `rows`
5783
+ instead (`"$.rows[0].orderId"`) — and reads `headers` and
5778
5784
  `queryParams` beside it (`$.headers['X-Id']`);
5779
5785
  PLACEHOLDER extracts use `"$.record.PLACEHOLDER_<field>"`.
5780
5786
  Pick this only when the transform was authored against
5781
5787
  the envelope shape on purpose.
5782
5788
  - |-
5783
- Handlebars expressions inside `extract`
5784
- (`{{record.field}}`, `{{dateFormat ... record.field}}`)
5785
- ALWAYS reference the `record` root regardless of
5789
+ Handlebars expressions inside `extract` reference the
5790
+ `record` root on an object record (`{{record.field}}`,
5791
+ `{{dateFormat ... record.field}}`) and `rows` on a
5792
+ grouped one (`{{rows.0.field}}`), regardless of
5786
5793
  `inputContext` — only JSONPath anchoring flips.
5794
+ - |-
5795
+ ## Grouped records
5796
+
5797
+ When the export groups rows, each record is an array of
5798
+ rows. In `record` mode JSONPath roots at that array
5799
+ (`$[0].field`, `$[*]`); `envelope` binds it as `rows`,
5800
+ not `record` — `$.rows[0].field`, and an entry
5801
+ `$.rows[*]` whose children read `$.rows.field` — while
5802
+ `$.record[0].field` and `$.record[*]` resolve nothing,
5803
+ with no error (live, 2026-10-30). Handlebars extracts
5804
+ read it as `rows` in both modes (`{{rows.0.field}}`).
5787
5805
  - |-
5788
5806
  In `envelope` mode the output is still a bare record: a
5789
5807
  `modify` transform returns the record with its mapped
@@ -5804,7 +5822,8 @@ components:
5804
5822
  ``mappings[].extract`` JSONPath values MUST anchor
5805
5823
  directly at ``$`` with NO ``record.`` segment — for
5806
5824
  example ``"$.orderId"`` or
5807
- ``"$.customer.email"``. PLACEHOLDER extracts use
5825
+ ``"$.customer.email"`` on an object record, and
5826
+ ``"$[0].orderId"`` on a grouped one. PLACEHOLDER extracts use
5808
5827
  ``"$.PLACEHOLDER_<field>"``. This is the dominant
5809
5828
  Celigo idiom and the right choice for new transforms.
5810
5829
 
@@ -5816,9 +5835,10 @@ components:
5816
5835
  ``record``) — the
5817
5836
  same runtime-context envelope Handlebars / SQL /
5818
5837
  GraphQL templates render against. ``mappings[].extract``
5819
- JSONPath values for record fields MUST include the
5838
+ JSONPath values for an object record's fields MUST include the
5820
5839
  ``record.`` segment — for example ``"$.record.orderId"``
5821
- or ``"$.record.customer.email"`` — while ``headers`` and
5840
+ or ``"$.record.customer.email"``; a grouped record's rows
5841
+ sit under ``rows`` instead (``"$.rows[0].orderId"``) — while ``headers`` and
5822
5842
  ``queryParams`` are read beside it
5823
5843
  (``"$.headers['X-Id']"``). PLACEHOLDER extracts
5824
5844
  use ``"$.record.PLACEHOLDER_<field>"``. Pick this
@@ -5831,8 +5851,9 @@ components:
5831
5851
 
5832
5852
  Handlebars expressions inside ``extract``
5833
5853
  (``{{record.field}}``,
5834
- ``{{dateFormat ... record.field}}``, etc.) ALWAYS
5835
- reference the runtime context's ``record`` root
5854
+ ``{{dateFormat ... record.field}}``, etc.) reference the
5855
+ runtime context's ``record`` root on an object record,
5856
+ and ``rows`` (``{{rows.0.field}}``) on a grouped one,
5836
5857
  regardless of ``inputContext`` — the Handlebars runtime
5837
5858
  always sees the wrapped envelope. Only JSONPath
5838
5859
  behavior flips with this field.
package/dist/api.yml CHANGED
@@ -5263,12 +5263,16 @@ components:
5263
5263
  - |-
5264
5264
  On a grouped record (the export groups rows, so the record is an
5265
5265
  array) only `create` can author output — build it from the rows with
5266
- `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`.
5266
+ `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`
5267
+ (`$.rows[0].field` and `$.rows[*]` with `inputContext: envelope`).
5267
5268
  `modify` has no object to overlay onto an array: the record passes
5268
- through untouched and the processor reports success. Either mode
5269
- reshapes the inside of one record; neither changes how many records
5270
- the page carries (that is the export's `preSavePage` hook) or whether
5271
- the export groups at all (that is its grouping setting).
5269
+ through untouched and the processor reports success. Paths written
5270
+ for one object record (`$.field`, an entry `$.lines[*]`) resolve
5271
+ nothing there, so `create` returns `{}` for each record, also with
5272
+ no error (live, 2026-10-30). Either mode reshapes the inside of one
5273
+ record; neither changes how many records the page carries (that is
5274
+ the export's `preSavePage` hook) or whether the export groups at all
5275
+ (that is its grouping setting).
5272
5276
  examples:
5273
5277
  - create
5274
5278
  - modify
@@ -5333,8 +5337,8 @@ components:
5333
5337
  - record
5334
5338
  - envelope
5335
5339
  x-enumDescriptions:
5336
- record: The transform processor evaluates `mappings[].extract` JSONPath against the flat record itself (`$.field`, no `record.` segment) — the default when absent.
5337
- envelope: The transform processor evaluates JSONPath against the wrapped runtime envelope `{record, job, testMode, settings, headers, queryParams}` (file-provider steps also carry `fileMeta`) — record fields need the `record.` segment (`$.record.field`), while `headers` and `queryParams` sit beside `record` (`$.headers['X-Id']`, `$.queryParams.src`).
5340
+ record: The transform processor evaluates `mappings[].extract` JSONPath against the flat record itself (`$.field`, no `record.` segment; a grouped record is the array of rows, `$[0].field`) — the default when absent.
5341
+ envelope: The transform processor evaluates JSONPath against the wrapped runtime envelope `{record, job, testMode, settings, headers, queryParams}` (file-provider steps also carry `fileMeta`) — record fields need the `record.` segment (`$.record.field`), and a grouped record sits under `rows` instead (`$.rows[0].field`), while `headers` and `queryParams` sit beside `record` (`$.headers['X-Id']`, `$.queryParams.src`).
5338
5342
  description: |
5339
5343
  Controls the JSON shape the transformTwoDotZero processor
5340
5344
  evaluates `mappings[].extract` JSONPath values against at
@@ -5350,24 +5354,38 @@ components:
5350
5354
  processor sees the FLAT record as its evaluation root.
5351
5355
  `mappings[].extract` JSONPath MUST anchor directly at
5352
5356
  `$` with NO `record.` segment — e.g. `"$.orderId"`,
5353
- `"$.customer.email"`; PLACEHOLDER extracts use
5357
+ `"$.customer.email"` on an object record, `"$[0].orderId"`
5358
+ on a grouped one; PLACEHOLDER extracts use
5354
5359
  `"$.PLACEHOLDER_<field>"`.
5355
5360
  This is the dominant Celigo idiom and the right choice for new transforms.
5356
5361
  - `envelope`: the processor sees a wrapped object
5357
5362
  `{record: {...}, job, testMode, settings, headers,
5358
5363
  queryParams}` (plus `fileMeta` on file-provider steps).
5359
5364
  `mappings[].extract` JSONPath MUST include the
5360
- `record.` segment for record fields — e.g.
5361
- `"$.record.orderId"` — and reads `headers` and
5365
+ `record.` segment for an object record's fields — e.g.
5366
+ `"$.record.orderId"`; a grouped record sits under `rows`
5367
+ instead (`"$.rows[0].orderId"`) — and reads `headers` and
5362
5368
  `queryParams` beside it (`$.headers['X-Id']`);
5363
5369
  PLACEHOLDER extracts use `"$.record.PLACEHOLDER_<field>"`.
5364
5370
  Pick this only when the transform was authored against
5365
5371
  the envelope shape on purpose.
5366
5372
  - |-
5367
- Handlebars expressions inside `extract`
5368
- (`{{record.field}}`, `{{dateFormat ... record.field}}`)
5369
- ALWAYS reference the `record` root regardless of
5373
+ Handlebars expressions inside `extract` reference the
5374
+ `record` root on an object record (`{{record.field}}`,
5375
+ `{{dateFormat ... record.field}}`) and `rows` on a
5376
+ grouped one (`{{rows.0.field}}`), regardless of
5370
5377
  `inputContext` — only JSONPath anchoring flips.
5378
+ - |-
5379
+ ## Grouped records
5380
+
5381
+ When the export groups rows, each record is an array of
5382
+ rows. In `record` mode JSONPath roots at that array
5383
+ (`$[0].field`, `$[*]`); `envelope` binds it as `rows`,
5384
+ not `record` — `$.rows[0].field`, and an entry
5385
+ `$.rows[*]` whose children read `$.rows.field` — while
5386
+ `$.record[0].field` and `$.record[*]` resolve nothing,
5387
+ with no error (live, 2026-10-30). Handlebars extracts
5388
+ read it as `rows` in both modes (`{{rows.0.field}}`).
5371
5389
  - |-
5372
5390
  In `envelope` mode the output is still a bare record: a
5373
5391
  `modify` transform returns the record with its mapped
@@ -5388,7 +5406,8 @@ components:
5388
5406
  ``mappings[].extract`` JSONPath values MUST anchor
5389
5407
  directly at ``$`` with NO ``record.`` segment — for
5390
5408
  example ``"$.orderId"`` or
5391
- ``"$.customer.email"``. PLACEHOLDER extracts use
5409
+ ``"$.customer.email"`` on an object record, and
5410
+ ``"$[0].orderId"`` on a grouped one. PLACEHOLDER extracts use
5392
5411
  ``"$.PLACEHOLDER_<field>"``. This is the dominant
5393
5412
  Celigo idiom and the right choice for new transforms.
5394
5413
 
@@ -5400,9 +5419,10 @@ components:
5400
5419
  ``record``) — the
5401
5420
  same runtime-context envelope Handlebars / SQL /
5402
5421
  GraphQL templates render against. ``mappings[].extract``
5403
- JSONPath values for record fields MUST include the
5422
+ JSONPath values for an object record's fields MUST include the
5404
5423
  ``record.`` segment — for example ``"$.record.orderId"``
5405
- or ``"$.record.customer.email"`` — while ``headers`` and
5424
+ or ``"$.record.customer.email"``; a grouped record's rows
5425
+ sit under ``rows`` instead (``"$.rows[0].orderId"``) — while ``headers`` and
5406
5426
  ``queryParams`` are read beside it
5407
5427
  (``"$.headers['X-Id']"``). PLACEHOLDER extracts
5408
5428
  use ``"$.record.PLACEHOLDER_<field>"``. Pick this
@@ -5415,8 +5435,9 @@ components:
5415
5435
 
5416
5436
  Handlebars expressions inside ``extract``
5417
5437
  (``{{record.field}}``,
5418
- ``{{dateFormat ... record.field}}``, etc.) ALWAYS
5419
- reference the runtime context's ``record`` root
5438
+ ``{{dateFormat ... record.field}}``, etc.) reference the
5439
+ runtime context's ``record`` root on an object record,
5440
+ and ``rows`` (``{{rows.0.field}}``) on a grouped one,
5420
5441
  regardless of ``inputContext`` — the Handlebars runtime
5421
5442
  always sees the wrapped envelope. Only JSONPath
5422
5443
  behavior flips with this field.
@@ -3158,12 +3158,16 @@ components:
3158
3158
  - |-
3159
3159
  On a grouped record (the export groups rows, so the record is an
3160
3160
  array) only `create` can author output — build it from the rows with
3161
- `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`.
3161
+ `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`
3162
+ (`$.rows[0].field` and `$.rows[*]` with `inputContext: envelope`).
3162
3163
  `modify` has no object to overlay onto an array: the record passes
3163
- through untouched and the processor reports success. Either mode
3164
- reshapes the inside of one record; neither changes how many records
3165
- the page carries (that is the export's `preSavePage` hook) or whether
3166
- the export groups at all (that is its grouping setting).
3164
+ through untouched and the processor reports success. Paths written
3165
+ for one object record (`$.field`, an entry `$.lines[*]`) resolve
3166
+ nothing there, so `create` returns `{}` for each record, also with
3167
+ no error (live, 2026-10-30). Either mode reshapes the inside of one
3168
+ record; neither changes how many records the page carries (that is
3169
+ the export's `preSavePage` hook) or whether the export groups at all
3170
+ (that is its grouping setting).
3167
3171
  examples:
3168
3172
  - create
3169
3173
  - modify
@@ -3228,8 +3232,8 @@ components:
3228
3232
  - record
3229
3233
  - envelope
3230
3234
  x-enumDescriptions:
3231
- record: The transform processor evaluates `mappings[].extract` JSONPath against the flat record itself (`$.field`, no `record.` segment) — the default when absent.
3232
- envelope: The transform processor evaluates JSONPath against the wrapped runtime envelope `{record, job, testMode, settings, headers, queryParams}` (file-provider steps also carry `fileMeta`) — record fields need the `record.` segment (`$.record.field`), while `headers` and `queryParams` sit beside `record` (`$.headers['X-Id']`, `$.queryParams.src`).
3235
+ record: The transform processor evaluates `mappings[].extract` JSONPath against the flat record itself (`$.field`, no `record.` segment; a grouped record is the array of rows, `$[0].field`) — the default when absent.
3236
+ envelope: The transform processor evaluates JSONPath against the wrapped runtime envelope `{record, job, testMode, settings, headers, queryParams}` (file-provider steps also carry `fileMeta`) — record fields need the `record.` segment (`$.record.field`), and a grouped record sits under `rows` instead (`$.rows[0].field`), while `headers` and `queryParams` sit beside `record` (`$.headers['X-Id']`, `$.queryParams.src`).
3233
3237
  description: |
3234
3238
  Controls the JSON shape the transformTwoDotZero processor
3235
3239
  evaluates `mappings[].extract` JSONPath values against at
@@ -3245,24 +3249,38 @@ components:
3245
3249
  processor sees the FLAT record as its evaluation root.
3246
3250
  `mappings[].extract` JSONPath MUST anchor directly at
3247
3251
  `$` with NO `record.` segment — e.g. `"$.orderId"`,
3248
- `"$.customer.email"`; PLACEHOLDER extracts use
3252
+ `"$.customer.email"` on an object record, `"$[0].orderId"`
3253
+ on a grouped one; PLACEHOLDER extracts use
3249
3254
  `"$.PLACEHOLDER_<field>"`.
3250
3255
  This is the dominant Celigo idiom and the right choice for new transforms.
3251
3256
  - `envelope`: the processor sees a wrapped object
3252
3257
  `{record: {...}, job, testMode, settings, headers,
3253
3258
  queryParams}` (plus `fileMeta` on file-provider steps).
3254
3259
  `mappings[].extract` JSONPath MUST include the
3255
- `record.` segment for record fields — e.g.
3256
- `"$.record.orderId"` — and reads `headers` and
3260
+ `record.` segment for an object record's fields — e.g.
3261
+ `"$.record.orderId"`; a grouped record sits under `rows`
3262
+ instead (`"$.rows[0].orderId"`) — and reads `headers` and
3257
3263
  `queryParams` beside it (`$.headers['X-Id']`);
3258
3264
  PLACEHOLDER extracts use `"$.record.PLACEHOLDER_<field>"`.
3259
3265
  Pick this only when the transform was authored against
3260
3266
  the envelope shape on purpose.
3261
3267
  - |-
3262
- Handlebars expressions inside `extract`
3263
- (`{{record.field}}`, `{{dateFormat ... record.field}}`)
3264
- ALWAYS reference the `record` root regardless of
3268
+ Handlebars expressions inside `extract` reference the
3269
+ `record` root on an object record (`{{record.field}}`,
3270
+ `{{dateFormat ... record.field}}`) and `rows` on a
3271
+ grouped one (`{{rows.0.field}}`), regardless of
3265
3272
  `inputContext` — only JSONPath anchoring flips.
3273
+ - |-
3274
+ ## Grouped records
3275
+
3276
+ When the export groups rows, each record is an array of
3277
+ rows. In `record` mode JSONPath roots at that array
3278
+ (`$[0].field`, `$[*]`); `envelope` binds it as `rows`,
3279
+ not `record` — `$.rows[0].field`, and an entry
3280
+ `$.rows[*]` whose children read `$.rows.field` — while
3281
+ `$.record[0].field` and `$.record[*]` resolve nothing,
3282
+ with no error (live, 2026-10-30). Handlebars extracts
3283
+ read it as `rows` in both modes (`{{rows.0.field}}`).
3266
3284
  - |-
3267
3285
  In `envelope` mode the output is still a bare record: a
3268
3286
  `modify` transform returns the record with its mapped
@@ -3283,7 +3301,8 @@ components:
3283
3301
  ``mappings[].extract`` JSONPath values MUST anchor
3284
3302
  directly at ``$`` with NO ``record.`` segment — for
3285
3303
  example ``"$.orderId"`` or
3286
- ``"$.customer.email"``. PLACEHOLDER extracts use
3304
+ ``"$.customer.email"`` on an object record, and
3305
+ ``"$[0].orderId"`` on a grouped one. PLACEHOLDER extracts use
3287
3306
  ``"$.PLACEHOLDER_<field>"``. This is the dominant
3288
3307
  Celigo idiom and the right choice for new transforms.
3289
3308
 
@@ -3295,9 +3314,10 @@ components:
3295
3314
  ``record``) — the
3296
3315
  same runtime-context envelope Handlebars / SQL /
3297
3316
  GraphQL templates render against. ``mappings[].extract``
3298
- JSONPath values for record fields MUST include the
3317
+ JSONPath values for an object record's fields MUST include the
3299
3318
  ``record.`` segment — for example ``"$.record.orderId"``
3300
- or ``"$.record.customer.email"`` — while ``headers`` and
3319
+ or ``"$.record.customer.email"``; a grouped record's rows
3320
+ sit under ``rows`` instead (``"$.rows[0].orderId"``) — while ``headers`` and
3301
3321
  ``queryParams`` are read beside it
3302
3322
  (``"$.headers['X-Id']"``). PLACEHOLDER extracts
3303
3323
  use ``"$.record.PLACEHOLDER_<field>"``. Pick this
@@ -3310,8 +3330,9 @@ components:
3310
3330
 
3311
3331
  Handlebars expressions inside ``extract``
3312
3332
  (``{{record.field}}``,
3313
- ``{{dateFormat ... record.field}}``, etc.) ALWAYS
3314
- reference the runtime context's ``record`` root
3333
+ ``{{dateFormat ... record.field}}``, etc.) reference the
3334
+ runtime context's ``record`` root on an object record,
3335
+ and ``rows`` (``{{rows.0.field}}``) on a grouped one,
3315
3336
  regardless of ``inputContext`` — the Handlebars runtime
3316
3337
  always sees the wrapped envelope. Only JSONPath
3317
3338
  behavior flips with this field.
package/dist/export.yml CHANGED
@@ -15412,12 +15412,16 @@ components:
15412
15412
  - |-
15413
15413
  On a grouped record (the export groups rows, so the record is an
15414
15414
  array) only `create` can author output — build it from the rows with
15415
- `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`.
15415
+ `$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`
15416
+ (`$.rows[0].field` and `$.rows[*]` with `inputContext: envelope`).
15416
15417
  `modify` has no object to overlay onto an array: the record passes
15417
- through untouched and the processor reports success. Either mode
15418
- reshapes the inside of one record; neither changes how many records
15419
- the page carries (that is the export's `preSavePage` hook) or whether
15420
- the export groups at all (that is its grouping setting).
15418
+ through untouched and the processor reports success. Paths written
15419
+ for one object record (`$.field`, an entry `$.lines[*]`) resolve
15420
+ nothing there, so `create` returns `{}` for each record, also with
15421
+ no error (live, 2026-10-30). Either mode reshapes the inside of one
15422
+ record; neither changes how many records the page carries (that is
15423
+ the export's `preSavePage` hook) or whether the export groups at all
15424
+ (that is its grouping setting).
15421
15425
  examples:
15422
15426
  - create
15423
15427
  - modify
@@ -15482,8 +15486,8 @@ components:
15482
15486
  - record
15483
15487
  - envelope
15484
15488
  x-enumDescriptions:
15485
- record: The transform processor evaluates `mappings[].extract` JSONPath against the flat record itself (`$.field`, no `record.` segment) — the default when absent.
15486
- envelope: The transform processor evaluates JSONPath against the wrapped runtime envelope `{record, job, testMode, settings, headers, queryParams}` (file-provider steps also carry `fileMeta`) — record fields need the `record.` segment (`$.record.field`), while `headers` and `queryParams` sit beside `record` (`$.headers['X-Id']`, `$.queryParams.src`).
15489
+ record: The transform processor evaluates `mappings[].extract` JSONPath against the flat record itself (`$.field`, no `record.` segment; a grouped record is the array of rows, `$[0].field`) — the default when absent.
15490
+ envelope: The transform processor evaluates JSONPath against the wrapped runtime envelope `{record, job, testMode, settings, headers, queryParams}` (file-provider steps also carry `fileMeta`) — record fields need the `record.` segment (`$.record.field`), and a grouped record sits under `rows` instead (`$.rows[0].field`), while `headers` and `queryParams` sit beside `record` (`$.headers['X-Id']`, `$.queryParams.src`).
15487
15491
  description: |
15488
15492
  Controls the JSON shape the transformTwoDotZero processor
15489
15493
  evaluates `mappings[].extract` JSONPath values against at
@@ -15499,24 +15503,38 @@ components:
15499
15503
  processor sees the FLAT record as its evaluation root.
15500
15504
  `mappings[].extract` JSONPath MUST anchor directly at
15501
15505
  `$` with NO `record.` segment — e.g. `"$.orderId"`,
15502
- `"$.customer.email"`; PLACEHOLDER extracts use
15506
+ `"$.customer.email"` on an object record, `"$[0].orderId"`
15507
+ on a grouped one; PLACEHOLDER extracts use
15503
15508
  `"$.PLACEHOLDER_<field>"`.
15504
15509
  This is the dominant Celigo idiom and the right choice for new transforms.
15505
15510
  - `envelope`: the processor sees a wrapped object
15506
15511
  `{record: {...}, job, testMode, settings, headers,
15507
15512
  queryParams}` (plus `fileMeta` on file-provider steps).
15508
15513
  `mappings[].extract` JSONPath MUST include the
15509
- `record.` segment for record fields — e.g.
15510
- `"$.record.orderId"` — and reads `headers` and
15514
+ `record.` segment for an object record's fields — e.g.
15515
+ `"$.record.orderId"`; a grouped record sits under `rows`
15516
+ instead (`"$.rows[0].orderId"`) — and reads `headers` and
15511
15517
  `queryParams` beside it (`$.headers['X-Id']`);
15512
15518
  PLACEHOLDER extracts use `"$.record.PLACEHOLDER_<field>"`.
15513
15519
  Pick this only when the transform was authored against
15514
15520
  the envelope shape on purpose.
15515
15521
  - |-
15516
- Handlebars expressions inside `extract`
15517
- (`{{record.field}}`, `{{dateFormat ... record.field}}`)
15518
- ALWAYS reference the `record` root regardless of
15522
+ Handlebars expressions inside `extract` reference the
15523
+ `record` root on an object record (`{{record.field}}`,
15524
+ `{{dateFormat ... record.field}}`) and `rows` on a
15525
+ grouped one (`{{rows.0.field}}`), regardless of
15519
15526
  `inputContext` — only JSONPath anchoring flips.
15527
+ - |-
15528
+ ## Grouped records
15529
+
15530
+ When the export groups rows, each record is an array of
15531
+ rows. In `record` mode JSONPath roots at that array
15532
+ (`$[0].field`, `$[*]`); `envelope` binds it as `rows`,
15533
+ not `record` — `$.rows[0].field`, and an entry
15534
+ `$.rows[*]` whose children read `$.rows.field` — while
15535
+ `$.record[0].field` and `$.record[*]` resolve nothing,
15536
+ with no error (live, 2026-10-30). Handlebars extracts
15537
+ read it as `rows` in both modes (`{{rows.0.field}}`).
15520
15538
  - |-
15521
15539
  In `envelope` mode the output is still a bare record: a
15522
15540
  `modify` transform returns the record with its mapped
@@ -15537,7 +15555,8 @@ components:
15537
15555
  ``mappings[].extract`` JSONPath values MUST anchor
15538
15556
  directly at ``$`` with NO ``record.`` segment — for
15539
15557
  example ``"$.orderId"`` or
15540
- ``"$.customer.email"``. PLACEHOLDER extracts use
15558
+ ``"$.customer.email"`` on an object record, and
15559
+ ``"$[0].orderId"`` on a grouped one. PLACEHOLDER extracts use
15541
15560
  ``"$.PLACEHOLDER_<field>"``. This is the dominant
15542
15561
  Celigo idiom and the right choice for new transforms.
15543
15562
 
@@ -15549,9 +15568,10 @@ components:
15549
15568
  ``record``) — the
15550
15569
  same runtime-context envelope Handlebars / SQL /
15551
15570
  GraphQL templates render against. ``mappings[].extract``
15552
- JSONPath values for record fields MUST include the
15571
+ JSONPath values for an object record's fields MUST include the
15553
15572
  ``record.`` segment — for example ``"$.record.orderId"``
15554
- or ``"$.record.customer.email"`` — while ``headers`` and
15573
+ or ``"$.record.customer.email"``; a grouped record's rows
15574
+ sit under ``rows`` instead (``"$.rows[0].orderId"``) — while ``headers`` and
15555
15575
  ``queryParams`` are read beside it
15556
15576
  (``"$.headers['X-Id']"``). PLACEHOLDER extracts
15557
15577
  use ``"$.record.PLACEHOLDER_<field>"``. Pick this
@@ -15564,8 +15584,9 @@ components:
15564
15584
 
15565
15585
  Handlebars expressions inside ``extract``
15566
15586
  (``{{record.field}}``,
15567
- ``{{dateFormat ... record.field}}``, etc.) ALWAYS
15568
- reference the runtime context's ``record`` root
15587
+ ``{{dateFormat ... record.field}}``, etc.) reference the
15588
+ runtime context's ``record`` root on an object record,
15589
+ and ``rows`` (``{{rows.0.field}}``) on a grouped one,
15569
15590
  regardless of ``inputContext`` — the Handlebars runtime
15570
15591
  always sees the wrapped envelope. Only JSONPath
15571
15592
  behavior flips with this field.
@@ -16426,8 +16447,8 @@ components:
16426
16447
  **Structure**
16427
16448
 
16428
16449
  The mock output must follow the integrator.io canonical format, which consists of a
16429
- `page_of_records` array containing record objects. Each record object has a `record`
16430
- property that contains the actual data fields.
16450
+ `page_of_records` array of items. On an export that does not group rows, each item has a
16451
+ `record` property that contains the actual data fields:
16431
16452
 
16432
16453
  ```json
16433
16454
  {
@@ -16444,6 +16465,19 @@ components:
16444
16465
  }
16445
16466
  ```
16446
16467
 
16468
+ An export that groups rows (`groupByFields`) produces records that are arrays of rows, and
16469
+ each item then carries `rows` instead of `record`, holding the rows of one grouped record. A
16470
+ flow test run saves a grouped export's records in this form:
16471
+
16472
+ ```json
16473
+ {
16474
+ "page_of_records": [
16475
+ { "rows": [ { "field1": "value1" }, { "field1": "value2" } ] },
16476
+ ...
16477
+ ]
16478
+ }
16479
+ ```
16480
+
16447
16481
  **Usage**
16448
16482
 
16449
16483
  In a flow test run, and for an upstream lookup during a page-processor preview
@@ -16476,7 +16510,8 @@ components:
16476
16510
 
16477
16511
  - Maximum of 10 records
16478
16512
  - Maximum size of 1 MB
16479
- - Must follow the canonical format shown above
16513
+ - Must follow one of the canonical formats shown above: every item `{"record": {...}}`, or
16514
+ on a grouped export every item `{"rows": [...]}`
16480
16515
 
16481
16516
  Mock output can be populated automatically from preview data (which is the parsed response,
16482
16517
  before `transform` / `filter`) or entered manually.
@@ -16518,6 +16553,22 @@ components:
16518
16553
  categories:
16519
16554
  - Electronics
16520
16555
  - Accessories
16556
+ rows:
16557
+ type: array
16558
+ description: |
16559
+ The rows of one grouped record, present instead of `record` when the export
16560
+ groups rows (`groupByFields`). Every item of a grouped export's mock carries
16561
+ `rows`.
16562
+ items:
16563
+ type: object
16564
+ additionalProperties: true
16565
+ example:
16566
+ - orderId: SO-1001
16567
+ sku: SKU-100
16568
+ quantity: 2
16569
+ - orderId: SO-1001
16570
+ sku: SKU-200
16571
+ quantity: 1
16521
16572
  example:
16522
16573
  page_of_records:
16523
16574
  - record: