@celigo/api-specs 0.2.29 → 0.2.31
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 +110 -22
- package/dist/asynchelper.yml +110 -22
- package/dist/export.yml +119 -26
- package/dist/import.yml +110 -22
- package/dist/sync.yml +60 -16
- package/dist/tool.yml +119 -26
- package/package.json +1 -1
- package/schemas.json +2 -2
package/dist/sync.yml
CHANGED
|
@@ -2602,9 +2602,10 @@ paths:
|
|
|
2602
2602
|
summary: List supported sync destination applications
|
|
2603
2603
|
description: |-
|
|
2604
2604
|
Returns the catalog of applications that can be used as the **destination** of a sync — the
|
|
2605
|
-
data warehouse a sync loads records into.
|
|
2606
|
-
|
|
2607
|
-
|
|
2605
|
+
data warehouse a sync loads records into. A sync's destination application is the type of
|
|
2606
|
+
its destination connection (`rdbms.type` for warehouse connections), which must match one
|
|
2607
|
+
of the returned ids. Identifiers include `snowflake` (Snowflake), `nsaw` (NetSuite
|
|
2608
|
+
Analytics Warehouse), `bigquery` (Google BigQuery), and `mssql` (Microsoft SQL Server).
|
|
2608
2609
|
tags:
|
|
2609
2610
|
- Syncs
|
|
2610
2611
|
operationId: listSyncDestinations
|
|
@@ -2629,8 +2630,10 @@ paths:
|
|
|
2629
2630
|
examples:
|
|
2630
2631
|
default:
|
|
2631
2632
|
value:
|
|
2632
|
-
- id:
|
|
2633
|
+
- id: bigquery
|
|
2634
|
+
- id: mssql
|
|
2633
2635
|
- id: nsaw
|
|
2636
|
+
- id: snowflake
|
|
2634
2637
|
'401':
|
|
2635
2638
|
$ref: '#/components/responses/401-unauthorized'
|
|
2636
2639
|
/v1/di/metadata/connections/{_connectionId}/datasets:
|
|
@@ -3848,27 +3851,35 @@ components:
|
|
|
3848
3851
|
type: object
|
|
3849
3852
|
description: |-
|
|
3850
3853
|
Data warehouse the sync loads records into. Empty (`{}`) on a draft that has no
|
|
3851
|
-
destination yet.
|
|
3852
|
-
|
|
3853
|
-
|
|
3854
|
+
destination yet. The destination application is the connection's own type
|
|
3855
|
+
(`rdbms.type` for warehouse connections), so `database` and `schema` are read in that
|
|
3856
|
+
application's terms — Google BigQuery treats them as the GCP project and the dataset.
|
|
3857
|
+
Each source + destination host/database/schema combination must be unique across
|
|
3858
|
+
syncs — reusing one fails with `422 duplicate_destination_host` — and all syncs in an
|
|
3859
|
+
integration must target the same destination application type.
|
|
3854
3860
|
properties:
|
|
3855
3861
|
_connectionId:
|
|
3856
3862
|
type: string
|
|
3857
3863
|
format: objectId
|
|
3858
3864
|
x-celigo-refModel: connections
|
|
3859
3865
|
description: |-
|
|
3860
|
-
Connection to the destination warehouse.
|
|
3861
|
-
|
|
3866
|
+
Connection to the destination warehouse. Its application (`rdbms.type` such as
|
|
3867
|
+
`snowflake`, `bigquery` or `mssql`, or a NetSuite Analytics Warehouse JDBC
|
|
3868
|
+
connection) is one of the ids returned by `GET /v1/di/metadata/destinations`.
|
|
3862
3869
|
examples:
|
|
3863
3870
|
- 68d02dbe0839a514623c1d6d
|
|
3864
3871
|
database:
|
|
3865
3872
|
type: string
|
|
3866
|
-
description:
|
|
3873
|
+
description: |-
|
|
3874
|
+
Database in the destination warehouse the sync loads into. For Google BigQuery this
|
|
3875
|
+
is the GCP project id the tables are created in (`project.dataset.table`).
|
|
3867
3876
|
examples:
|
|
3868
3877
|
- ANALYTICS_DB
|
|
3869
3878
|
schema:
|
|
3870
3879
|
type: string
|
|
3871
|
-
description:
|
|
3880
|
+
description: |-
|
|
3881
|
+
Schema within `database` where the sync creates and loads tables. For Google
|
|
3882
|
+
BigQuery this is the dataset name, with case preserved.
|
|
3872
3883
|
examples:
|
|
3873
3884
|
- salesforce_raw
|
|
3874
3885
|
tablePrefix:
|
|
@@ -4017,27 +4028,60 @@ components:
|
|
|
4017
4028
|
description: |-
|
|
4018
4029
|
Data warehouse the sync loads records into. Omit while drafting; a complete
|
|
4019
4030
|
destination (connection, database, schema) is required before the sync can be
|
|
4020
|
-
enabled. The
|
|
4031
|
+
enabled. The destination application is the connection's own type (`rdbms.type`
|
|
4032
|
+
for warehouse connections), so `database` and `schema` are read in that
|
|
4033
|
+
application's terms — Google BigQuery treats them as the GCP project and the
|
|
4034
|
+
dataset. The source + destination host/database/schema combination must be unique
|
|
4021
4035
|
across syncs (`422 duplicate_destination_host`), and all syncs in an integration
|
|
4022
4036
|
must target the same destination application type.
|
|
4037
|
+
x-celigo-ai-guidance:
|
|
4038
|
+
- |-
|
|
4039
|
+
Send the block complete or not at all. A partial block is rejected in the destination's
|
|
4040
|
+
own vocabulary with 422 `invalid_destination_sync_config`: `GCP project is required on
|
|
4041
|
+
sync destination` / `BigQuery dataset is required on sync destination` (BigQuery),
|
|
4042
|
+
`SQL Server database is required on sync destination` / `SQL Server schema is required
|
|
4043
|
+
on sync destination` (Microsoft SQL Server). A partial Snowflake block is not caught
|
|
4044
|
+
by validation — the save reaches the warehouse and fails with Snowflake's own
|
|
4045
|
+
`002003` "Database 'UNDEFINED' does not exist" error.
|
|
4046
|
+
- |-
|
|
4047
|
+
Saving a complete destination connects to the warehouse to create the schema
|
|
4048
|
+
(dataset) when it is missing. An unreachable host or unusable credentials fail the
|
|
4049
|
+
save with the connection's error — 422 `invalid_host` for SQL Server,
|
|
4050
|
+
`big_query_unexpected_error` for BigQuery — and no sync document is created or
|
|
4051
|
+
updated; fix the connection rather than changing database or schema names.
|
|
4052
|
+
- |-
|
|
4053
|
+
Microsoft SQL Server validates `database` and `schema` as identifiers (start with a
|
|
4054
|
+
letter or underscore; letters, digits, underscore or `$`; at most 128 characters) and
|
|
4055
|
+
rejects others with 422 `invalid_destination_sync_config`
|
|
4056
|
+
(`SQL Server schema name is invalid: ...`).
|
|
4023
4057
|
properties:
|
|
4024
4058
|
_connectionId:
|
|
4025
4059
|
type: string
|
|
4026
4060
|
format: objectId
|
|
4027
4061
|
x-celigo-refModel: connections
|
|
4028
4062
|
description: |-
|
|
4029
|
-
Connection to the destination warehouse.
|
|
4030
|
-
|
|
4063
|
+
Connection to the destination warehouse. Its application (`rdbms.type` such as
|
|
4064
|
+
`snowflake`, `bigquery` or `mssql`, or a NetSuite Analytics Warehouse JDBC
|
|
4065
|
+
connection) must be one of the ids returned by `GET /v1/di/metadata/destinations`;
|
|
4066
|
+
any other connection fails with `422 invalid_destination_type`.
|
|
4031
4067
|
examples:
|
|
4032
4068
|
- 68d02dbe0839a514623c1d6d
|
|
4033
4069
|
database:
|
|
4034
4070
|
type: string
|
|
4035
|
-
description:
|
|
4071
|
+
description: |-
|
|
4072
|
+
Database in the destination warehouse the sync loads into; it must already exist.
|
|
4073
|
+
For Google BigQuery this is the GCP project id the tables are created in
|
|
4074
|
+
(`project.dataset.table`).
|
|
4075
|
+
x-celigo-ui-override: For a BigQuery destination the Create Sync wizard shows no database picker and fills this field with the selected connection's rdbms.bigquery.projectId (IO-195900).
|
|
4036
4076
|
examples:
|
|
4037
4077
|
- ANALYTICS_DB
|
|
4038
4078
|
schema:
|
|
4039
4079
|
type: string
|
|
4040
|
-
description:
|
|
4080
|
+
description: |-
|
|
4081
|
+
Schema within `database` where the sync creates and loads tables; created on save
|
|
4082
|
+
when it does not exist. For Google BigQuery this is the dataset name, with case
|
|
4083
|
+
preserved.
|
|
4084
|
+
x-celigo-ui-override: For a BigQuery destination the Create Sync wizard labels this field "dataset" and accepts only letters, digits and underscore (no $), starting with a letter or underscore, at most 1024 characters (IO-195900); Snowflake and NSAW validation is unchanged.
|
|
4041
4085
|
examples:
|
|
4042
4086
|
- salesforce_raw
|
|
4043
4087
|
tablePrefix:
|
package/dist/tool.yml
CHANGED
|
@@ -2075,9 +2075,11 @@ components:
|
|
|
2075
2075
|
This field supports THREE DISTINCT PATTERNS that are easily distinguished:
|
|
2076
2076
|
|
|
2077
2077
|
**1. json Path Syntax**
|
|
2078
|
-
- MUST start with '
|
|
2078
|
+
- MUST start with '$' — the record root. An object record is addressed as
|
|
2079
|
+
'$.field'; a grouped (array) record as '$[0].field' / '$[*].field'
|
|
2079
2080
|
- Used for precisely targeting data in structured JSON objects
|
|
2080
|
-
- Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street'
|
|
2081
|
+
- Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
|
|
2082
|
+
'$[*].Tax' (every row of a grouped record)
|
|
2081
2083
|
- Wildcards like [*] extract multiple values/objects
|
|
2082
2084
|
|
|
2083
2085
|
```json
|
|
@@ -2088,7 +2090,8 @@ components:
|
|
|
2088
2090
|
- Contains '{{' and '}}' pattern
|
|
2089
2091
|
- Evaluated by the AFE 2.0 handlebars template engine
|
|
2090
2092
|
- Can include logic, formatting, and computation
|
|
2091
|
-
- Access input record fields with {{record.fieldName}} notation
|
|
2093
|
+
- Access input record fields with {{record.fieldName}} notation; a grouped
|
|
2094
|
+
(array) record binds as `rows` instead — {{rows.0.fieldName}} / {{#each rows}}
|
|
2092
2095
|
- Examples: "{{record.firstName}} {{record.lastName}}", "{{#if record.isActive}}Active{{else}}Inactive{{/if}}"
|
|
2093
2096
|
- Valid on `object`, `objectarray`, and primitive-array dataTypes as
|
|
2094
2097
|
well as scalars — the rendered template output must parse into the
|
|
@@ -2099,7 +2102,7 @@ components:
|
|
|
2099
2102
|
```
|
|
2100
2103
|
|
|
2101
2104
|
**3. Hard-Coded Value (literal string)**
|
|
2102
|
-
- Does NOT start with '
|
|
2105
|
+
- Does NOT start with '$'
|
|
2103
2106
|
- Does NOT contain handlebars '{{' syntax
|
|
2104
2107
|
- System treats it as a literal string value
|
|
2105
2108
|
- VERY COMMON for setting static/constant values
|
|
@@ -2121,10 +2124,38 @@ components:
|
|
|
2121
2124
|
- The system maintains this context even in deeply nested mappings
|
|
2122
2125
|
- For object mappings without child mappings, extract should return a complete object
|
|
2123
2126
|
- When both extract and mappings are defined for objects, extract is applied first
|
|
2127
|
+
- The root is the record as it arrives: an object record roots at `$.field`; a
|
|
2128
|
+
grouped record (an array of rows — grouped exports, file key columns, NetSuite
|
|
2129
|
+
grouped saved searches) roots at the array, so its rows are addressed as
|
|
2130
|
+
`$[0].field` (one row) or `$[*].field` (every row). A root that contradicts the
|
|
2131
|
+
record's shape resolves to nothing without an error.
|
|
2124
2132
|
|
|
2125
2133
|
For most simple field-to-field mappings, prefer JSON path syntax for its clarity and performance.
|
|
2126
2134
|
For hard-coded values, simply use the literal string as the extract value.
|
|
2127
2135
|
x-celigo-ai-guidance:
|
|
2136
|
+
- |-
|
|
2137
|
+
## GROUPED (ARRAY) RECORDS
|
|
2138
|
+
Decide the JSONPath root from the record's shape before writing
|
|
2139
|
+
any extract. When the record is an array of rows, `$.field`,
|
|
2140
|
+
`$.properties.field` and `$.rows[*].field` all resolve to
|
|
2141
|
+
nothing — the processor still reports success and the request
|
|
2142
|
+
body ships as `{}`. Address rows as `$[0].field` (that row's
|
|
2143
|
+
value, typed) or `$[*].field` (every row: joined with commas
|
|
2144
|
+
into a `string` destination; rejected with
|
|
2145
|
+
`incompatible_destination_conversion` into a `number`
|
|
2146
|
+
destination). Column labels with spaces work as
|
|
2147
|
+
`$[*][Order Number]`, `$[*].[Order Number]`, or
|
|
2148
|
+
`$[*]['Order Number']`. For one destination element per row
|
|
2149
|
+
the two array kinds take different helper forms: a primitive
|
|
2150
|
+
array (`stringarray` / `numberarray`) uses `buildArrayHelper:
|
|
2151
|
+
[{"extract": "$[*].field"}]`; an `objectarray` uses
|
|
2152
|
+
`buildArrayHelper: [{"extract": "$[*]", "mappings": [...]}]`
|
|
2153
|
+
with the children addressing the row relatively (`$.field`,
|
|
2154
|
+
`{{rows.field}}`). An `extract` placed directly on the
|
|
2155
|
+
array-typed field yields nothing. Handlebars
|
|
2156
|
+
extracts bind the array record as `rows` (`{{rows.0.field}}`),
|
|
2157
|
+
an object record as `record`. The reverse holds too: `$[*]` on
|
|
2158
|
+
an object record iterates the object's values, not rows.
|
|
2128
2159
|
- |-
|
|
2129
2160
|
## SIZE LIMIT
|
|
2130
2161
|
The platform's import save validator caps this field at **1024
|
|
@@ -2382,7 +2413,11 @@ components:
|
|
|
2382
2413
|
(`$.items[*]`), `"$"` (the record root), or omission — a
|
|
2383
2414
|
constructed entry (child `mappings` with the extract omitted or
|
|
2384
2415
|
`"$"`; the two spellings are equivalent) contributes exactly one
|
|
2385
|
-
element, and entries append in order.
|
|
2416
|
+
element, and entries append in order. On a grouped (array)
|
|
2417
|
+
record the record itself is the array to iterate: `"$[*]"`
|
|
2418
|
+
yields one `objectarray` element per row (children address the
|
|
2419
|
+
row as `$.field`), and `"$[*].field"` yields one primitive-array
|
|
2420
|
+
value per row. Indexed or comma-joined
|
|
2386
2421
|
entry extracts (`"$[0]"`, `"$[0],$[0]"`) are not valid: the
|
|
2387
2422
|
processor renders the entire destination array as null with no
|
|
2388
2423
|
validation error. To emit a fixed number of static elements, add
|
|
@@ -2403,7 +2438,9 @@ components:
|
|
|
2403
2438
|
|
|
2404
2439
|
**For Simple Arrays (stringarray, numberarray, booleanarray)**
|
|
2405
2440
|
- Only the 'extract' field is used to pull values
|
|
2406
|
-
- JSON path with wildcards (e.g., $.items[*].name) returns multiple values
|
|
2441
|
+
- JSON path with wildcards (e.g., $.items[*].name) returns multiple values;
|
|
2442
|
+
on a grouped (array) record the record itself is the array, so the
|
|
2443
|
+
path roots at it ($[*].name — one value per row)
|
|
2407
2444
|
- Each result is converted to the appropriate primitive type
|
|
2408
2445
|
```json
|
|
2409
2446
|
{
|
|
@@ -2505,11 +2542,13 @@ components:
|
|
|
2505
2542
|
- When both extract and mappings are provided, the system creates special composite objects
|
|
2506
2543
|
that maintain hierarchical context during processing
|
|
2507
2544
|
- This enables accessing both the current array element AND its parent context
|
|
2508
|
-
- An ITERATING entry's extract MUST
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2512
|
-
|
|
2545
|
+
- An ITERATING entry's extract MUST be a JSON path that iterates an array:
|
|
2546
|
+
'$.items[*]' when the array is a field of an object record, or '$[*]'
|
|
2547
|
+
(objectarray) / '$[*].field' (primitive arrays) when the record itself is a
|
|
2548
|
+
grouped array of rows. A CONSTRUCTED entry (child mappings building one
|
|
2549
|
+
element) instead omits extract or sets it to exactly "$" — never rewrite "$"
|
|
2550
|
+
into an indexed or comma-joined form ('$[0]', '$[0],$[0]'): those render the
|
|
2551
|
+
entire destination array as null without raising a validation error
|
|
2513
2552
|
- Each array helper entry acts independently, potentially adding multiple elements
|
|
2514
2553
|
|
|
2515
2554
|
The buildArrayHelper is the most complex part of the mappings system - always analyze the
|
|
@@ -2923,9 +2962,11 @@ components:
|
|
|
2923
2962
|
This field supports THREE DISTINCT PATTERNS that are easily distinguished:
|
|
2924
2963
|
|
|
2925
2964
|
**1. json Path Syntax**
|
|
2926
|
-
- MUST start with '
|
|
2965
|
+
- MUST start with '$' — the record root. An object record is addressed as
|
|
2966
|
+
'$.field'; a grouped (array) record as '$[0].field' / '$[*].field'
|
|
2927
2967
|
- Used for precisely targeting data in structured JSON objects
|
|
2928
|
-
- Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street'
|
|
2968
|
+
- Examples: '$.customer.firstName', '$.items[0].price', '$.addresses[*].street',
|
|
2969
|
+
'$[*].Tax' (every row of a grouped record)
|
|
2929
2970
|
- Wildcards like [*] extract multiple values/objects
|
|
2930
2971
|
|
|
2931
2972
|
```json
|
|
@@ -2936,7 +2977,8 @@ components:
|
|
|
2936
2977
|
- Contains '{{' and '}}' pattern
|
|
2937
2978
|
- Evaluated by the AFE 2.0 handlebars template engine
|
|
2938
2979
|
- Can include logic, formatting, and computation
|
|
2939
|
-
- Access input record fields with {{record.fieldName}} notation
|
|
2980
|
+
- Access input record fields with {{record.fieldName}} notation; a grouped
|
|
2981
|
+
(array) record binds as `rows` instead — {{rows.0.fieldName}} / {{#each rows}}
|
|
2940
2982
|
- Examples: "{{record.firstName}} {{record.lastName}}", "{{#if record.isActive}}Active{{else}}Inactive{{/if}}"
|
|
2941
2983
|
- Valid on `object`, `objectarray`, and primitive-array dataTypes as
|
|
2942
2984
|
well as scalars — the rendered template output must parse into the
|
|
@@ -2947,7 +2989,7 @@ components:
|
|
|
2947
2989
|
```
|
|
2948
2990
|
|
|
2949
2991
|
**3. Hard-Coded Value (literal string)**
|
|
2950
|
-
- Does NOT start with '
|
|
2992
|
+
- Does NOT start with '$'
|
|
2951
2993
|
- Does NOT contain handlebars '{{' syntax
|
|
2952
2994
|
- System treats it as a literal string value
|
|
2953
2995
|
- VERY COMMON for setting static/constant values
|
|
@@ -2969,10 +3011,38 @@ components:
|
|
|
2969
3011
|
- The system maintains this context even in deeply nested mappings
|
|
2970
3012
|
- For object mappings without child mappings, extract should return a complete object
|
|
2971
3013
|
- When both extract and mappings are defined for objects, extract is applied first
|
|
3014
|
+
- The root is the record as it arrives: an object record roots at `$.field`; a
|
|
3015
|
+
grouped record (an array of rows — grouped exports, file key columns, NetSuite
|
|
3016
|
+
grouped saved searches) roots at the array, so its rows are addressed as
|
|
3017
|
+
`$[0].field` (one row) or `$[*].field` (every row). A root that contradicts the
|
|
3018
|
+
record's shape resolves to nothing without an error.
|
|
2972
3019
|
|
|
2973
3020
|
For most simple field-to-field mappings, prefer JSON path syntax for its clarity and performance.
|
|
2974
3021
|
For hard-coded values, simply use the literal string as the extract value.
|
|
2975
3022
|
x-celigo-ai-guidance:
|
|
3023
|
+
- |-
|
|
3024
|
+
## GROUPED (ARRAY) RECORDS
|
|
3025
|
+
Decide the JSONPath root from the record's shape before writing
|
|
3026
|
+
any extract. When the record is an array of rows, `$.field`,
|
|
3027
|
+
`$.properties.field` and `$.rows[*].field` all resolve to
|
|
3028
|
+
nothing — the processor still reports success and the request
|
|
3029
|
+
body ships as `{}`. Address rows as `$[0].field` (that row's
|
|
3030
|
+
value, typed) or `$[*].field` (every row: joined with commas
|
|
3031
|
+
into a `string` destination; rejected with
|
|
3032
|
+
`incompatible_destination_conversion` into a `number`
|
|
3033
|
+
destination). Column labels with spaces work as
|
|
3034
|
+
`$[*][Order Number]`, `$[*].[Order Number]`, or
|
|
3035
|
+
`$[*]['Order Number']`. For one destination element per row
|
|
3036
|
+
the two array kinds take different helper forms: a primitive
|
|
3037
|
+
array (`stringarray` / `numberarray`) uses `buildArrayHelper:
|
|
3038
|
+
[{"extract": "$[*].field"}]`; an `objectarray` uses
|
|
3039
|
+
`buildArrayHelper: [{"extract": "$[*]", "mappings": [...]}]`
|
|
3040
|
+
with the children addressing the row relatively (`$.field`,
|
|
3041
|
+
`{{rows.field}}`). An `extract` placed directly on the
|
|
3042
|
+
array-typed field yields nothing. Handlebars
|
|
3043
|
+
extracts bind the array record as `rows` (`{{rows.0.field}}`),
|
|
3044
|
+
an object record as `record`. The reverse holds too: `$[*]` on
|
|
3045
|
+
an object record iterates the object's values, not rows.
|
|
2976
3046
|
- |-
|
|
2977
3047
|
## SIZE LIMIT
|
|
2978
3048
|
The platform's import save validator caps this field at **1024
|
|
@@ -3230,7 +3300,11 @@ components:
|
|
|
3230
3300
|
(`$.items[*]`), `"$"` (the record root), or omission — a
|
|
3231
3301
|
constructed entry (child `mappings` with the extract omitted or
|
|
3232
3302
|
`"$"`; the two spellings are equivalent) contributes exactly one
|
|
3233
|
-
element, and entries append in order.
|
|
3303
|
+
element, and entries append in order. On a grouped (array)
|
|
3304
|
+
record the record itself is the array to iterate: `"$[*]"`
|
|
3305
|
+
yields one `objectarray` element per row (children address the
|
|
3306
|
+
row as `$.field`), and `"$[*].field"` yields one primitive-array
|
|
3307
|
+
value per row. Indexed or comma-joined
|
|
3234
3308
|
entry extracts (`"$[0]"`, `"$[0],$[0]"`) are not valid: the
|
|
3235
3309
|
processor renders the entire destination array as null with no
|
|
3236
3310
|
validation error. To emit a fixed number of static elements, add
|
|
@@ -3251,7 +3325,9 @@ components:
|
|
|
3251
3325
|
|
|
3252
3326
|
**For Simple Arrays (stringarray, numberarray, booleanarray)**
|
|
3253
3327
|
- Only the 'extract' field is used to pull values
|
|
3254
|
-
- JSON path with wildcards (e.g., $.items[*].name) returns multiple values
|
|
3328
|
+
- JSON path with wildcards (e.g., $.items[*].name) returns multiple values;
|
|
3329
|
+
on a grouped (array) record the record itself is the array, so the
|
|
3330
|
+
path roots at it ($[*].name — one value per row)
|
|
3255
3331
|
- Each result is converted to the appropriate primitive type
|
|
3256
3332
|
```json
|
|
3257
3333
|
{
|
|
@@ -3353,11 +3429,13 @@ components:
|
|
|
3353
3429
|
- When both extract and mappings are provided, the system creates special composite objects
|
|
3354
3430
|
that maintain hierarchical context during processing
|
|
3355
3431
|
- This enables accessing both the current array element AND its parent context
|
|
3356
|
-
- An ITERATING entry's extract MUST
|
|
3357
|
-
|
|
3358
|
-
|
|
3359
|
-
|
|
3360
|
-
|
|
3432
|
+
- An ITERATING entry's extract MUST be a JSON path that iterates an array:
|
|
3433
|
+
'$.items[*]' when the array is a field of an object record, or '$[*]'
|
|
3434
|
+
(objectarray) / '$[*].field' (primitive arrays) when the record itself is a
|
|
3435
|
+
grouped array of rows. A CONSTRUCTED entry (child mappings building one
|
|
3436
|
+
element) instead omits extract or sets it to exactly "$" — never rewrite "$"
|
|
3437
|
+
into an indexed or comma-joined form ('$[0]', '$[0],$[0]'): those render the
|
|
3438
|
+
entire destination array as null without raising a validation error
|
|
3361
3439
|
- Each array helper entry acts independently, potentially adding multiple elements
|
|
3362
3440
|
|
|
3363
3441
|
The buildArrayHelper is the most complex part of the mappings system - always analyze the
|
|
@@ -4083,6 +4161,16 @@ components:
|
|
|
4083
4161
|
x-enumDescriptions:
|
|
4084
4162
|
create: Builds entirely new output records from inputs, ignoring unmapped fields.
|
|
4085
4163
|
modify: Makes targeted edits to existing records, preserving unmapped fields.
|
|
4164
|
+
x-celigo-ai-guidance:
|
|
4165
|
+
- |-
|
|
4166
|
+
On a grouped record (the export groups rows, so the record is an
|
|
4167
|
+
array) only `create` can author output — build it from the rows with
|
|
4168
|
+
`$[0].field`, `$[*].field`, or a `buildArrayHelper` over `$[*]`.
|
|
4169
|
+
`modify` has no object to overlay onto an array: the record passes
|
|
4170
|
+
through untouched and the processor reports success. Either mode
|
|
4171
|
+
reshapes the inside of one record; neither changes how many records
|
|
4172
|
+
the page carries (that is the export's `preSavePage` hook) or whether
|
|
4173
|
+
the export groups at all (that is its grouping setting).
|
|
4086
4174
|
examples:
|
|
4087
4175
|
- create
|
|
4088
4176
|
- modify
|
|
@@ -21772,10 +21860,15 @@ components:
|
|
|
21772
21860
|
iterate ``{{#each rows}}``); hook code sees the array as the
|
|
21773
21861
|
record element and must not assume object shape.
|
|
21774
21862
|
- |-
|
|
21775
|
-
|
|
21776
|
-
|
|
21777
|
-
|
|
21778
|
-
|
|
21863
|
+
A grouped record is ONE record: Mapper 2.0 and Transform 2.0 root
|
|
21864
|
+
JSONPath at the array (``$[0].<field>`` / ``$[*].<field>``;
|
|
21865
|
+
``$.<field>`` resolves nothing), and a Transform 2.0 in ``mode:
|
|
21866
|
+
"create"`` reshapes it in place — header fields from ``$[0]``, a
|
|
21867
|
+
lines array from a ``buildArrayHelper`` over ``$[*]`` (``mode:
|
|
21868
|
+
"modify"`` has no object to overlay and passes the array through
|
|
21869
|
+
untouched). Changing how many records the page carries — each
|
|
21870
|
+
row becoming its own record for every downstream step — is the
|
|
21871
|
+
``preSavePage`` hook's job alone.
|
|
21779
21872
|
items:
|
|
21780
21873
|
type: string
|
|
21781
21874
|
examples:
|
package/package.json
CHANGED