@celigo/api-specs 0.2.196 → 0.2.198

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.
@@ -875,7 +875,9 @@ components:
875
875
  - statusMapping
876
876
  - departmentCodes
877
877
  hardCodedValue:
878
- type: string
878
+ type:
879
+ - string
880
+ - 'null'
879
881
  description: |
880
882
  Constant written to the destination instead of an extracted value. On a primitive
881
883
  array (`stringarray`, `numberarray`, `booleanarray`) the string is split on commas,
@@ -883,6 +885,8 @@ components:
883
885
  On an `object` it must be a JSON object string and on an `objectarray` a JSON array
884
886
  string (an object string becomes one element); the save parses it and refuses non-JSON
885
887
  or the wrong shape with 422, and an array row with a constant needs no `buildArrayHelper`.
888
+ JSON `null` writes the destination field as null; it is what the mapper saves for its
889
+ hard-coded "Use null as default value" choice.
886
890
  examples:
887
891
  - USD
888
892
  - A,B
@@ -1969,7 +1973,9 @@ components:
1969
1973
  - statusMapping
1970
1974
  - departmentCodes
1971
1975
  hardCodedValue:
1972
- type: string
1976
+ type:
1977
+ - string
1978
+ - 'null'
1973
1979
  description: |
1974
1980
  Constant written to the destination instead of an extracted value. On a primitive
1975
1981
  array (`stringarray`, `numberarray`, `booleanarray`) the string is split on commas,
@@ -1977,6 +1983,8 @@ components:
1977
1983
  On an `object` it must be a JSON object string and on an `objectarray` a JSON array
1978
1984
  string (an object string becomes one element); the save parses it and refuses non-JSON
1979
1985
  or the wrong shape with 422, and an array row with a constant needs no `buildArrayHelper`.
1986
+ JSON `null` writes the destination field as null; it is what the mapper saves for its
1987
+ hard-coded "Use null as default value" choice.
1980
1988
  examples:
1981
1989
  - USD
1982
1990
  - A,B
package/dist/export.yml CHANGED
@@ -5926,12 +5926,22 @@ components:
5926
5926
  description: |-
5927
5927
  Change-data-capture configuration for real-time listener exports (the "Listen for real-time
5928
5928
  data" source step). Present only when `type` is `stream`. Set on `MongodbExport` (MongoDB change
5929
- streams) and `RDBMSExport` (SQL Server CDC and PostgreSQL logical replication); the listener
5930
- streams change events continuously instead of fetching records on a schedule.
5929
+ streams) and `RDBMSExport` (SQL Server CDC, PostgreSQL logical replication, and MySQL binary-log
5930
+ CDC); the listener streams change events continuously instead of fetching records on a schedule.
5931
5931
 
5932
5932
  On save the API normalizes the `properties` grid into the typed fields: a `snapshot.mode`
5933
5933
  entry populates `snapshotMode` and a `capture.mode` entry populates `captureMode`. Every
5934
5934
  stream export must resolve a snapshot mode from one of those two places.
5935
+
5936
+ The prerequisites live on the database, not on the export: a listener saves (201) on a
5937
+ connection whose database host is unreachable, so a successful save does not confirm them.
5938
+ The platform's listener documentation requires: for PostgreSQL, logical replication
5939
+ (`wal_level=logical`) and a replication-capable user; for SQL Server, CDC enabled on the
5940
+ database and tables; for MongoDB change streams, a replica set; for MySQL, binary logging in
5941
+ row format (`log_bin=ON`, `binlog_format=ROW`, `binlog_row_image=FULL`) and a connection user
5942
+ holding `REPLICATION SLAVE`, `REPLICATION CLIENT` and `SELECT` on the captured tables
5943
+ (`RELOAD` is not needed on Amazon RDS or Aurora, where the listener takes no global read
5944
+ lock).
5935
5945
  x-celigo-ai-guidance:
5936
5946
  - |-
5937
5947
  A stream export that resolves no snapshot mode — neither `snapshotMode` nor a
@@ -5950,7 +5960,13 @@ components:
5950
5960
  description: |-
5951
5961
  How MongoDB change-stream events are materialized into records. Use
5952
5962
  `change_streams_update_full_with_pre_image` when downstream steps need the document's prior
5953
- state. MongoDB listeners only — `RDBMSExport` (SQL Server CDC, PostgreSQL) does not set this.
5963
+ state. MongoDB listeners only — `RDBMSExport` (SQL Server CDC, PostgreSQL, MySQL) does not
5964
+ set this.
5965
+ x-celigo-ai-guidance:
5966
+ - |-
5967
+ Never author this on an `RDBMSExport`: the API stores it on a MySQL stream export without
5968
+ rejecting it (unlike `slotName`, it is not gated per adaptor), so nothing at save time
5969
+ catches the mistake and the dead setting rides on the document.
5954
5970
  examples:
5955
5971
  - change_streams_update_full
5956
5972
  - change_streams_update_full_with_pre_image
@@ -5968,13 +5984,17 @@ components:
5968
5984
  initial_only: Takes the initial snapshot and then stops, without streaming ongoing changes.
5969
5985
  default: no_data
5970
5986
  description: |-
5971
- Whether the listener seeds existing rows before streaming changes. Use `initial` to backfill
5972
- existing data on the first run; `no_data` to stream only new changes.
5987
+ Whether the listener seeds existing rows before streaming changes. `no_data` streams only
5988
+ new changes; `initial` backfills existing data on the first run where the listener form
5989
+ offers it (MongoDB, SQL Server). The PostgreSQL and MySQL forms offer `no_data` and
5990
+ `when_needed` only; the MySQL listener documentation describes `when_needed` as a one-time
5991
+ read of the captured tables when no stream position is stored or the stored position is no
5992
+ longer on the server.
5973
5993
  x-celigo-ai-guidance:
5974
5994
  - |-
5975
- The PostgreSQL listener form offers only `no_data` and `when_needed`. The API stores other
5976
- values on a PostgreSQL export without rejecting them, but they are outside the supported
5977
- PostgreSQL matrix — stay within the form's subset.
5995
+ The PostgreSQL and MySQL listener forms offer only `no_data` and `when_needed`. The API
5996
+ stores other values on those exports without rejecting them, but they are outside the
5997
+ supported matrix — stay within the form's subset.
5978
5998
  examples:
5979
5999
  - initial
5980
6000
  - no_data
@@ -5989,8 +6009,9 @@ components:
5989
6009
  underscore).
5990
6010
  x-celigo-ai-guidance:
5991
6011
  - |-
5992
- PostgreSQL connections only: on any other connection the save is rejected 422
5993
- `not_allowed` ("CDC slotName can only be used with postgresql adaptor type").
6012
+ PostgreSQL connections only: on any other connection — SQL Server, MySQL — the save is
6013
+ rejected 422 `not_allowed` ("CDC slotName can only be used with postgresql adaptor type").
6014
+ MySQL CDC reads the binary log directly; it has no replication slot.
5994
6015
  - |-
5995
6016
  The identifier pattern is enforced server-side — an invalid name (uppercase, dashes) is
5996
6017
  rejected 422 `invalid_field_value` at save time.
@@ -6010,17 +6031,27 @@ components:
6010
6031
  sent, so nothing catches the ambiguity at save time — the exclusivity is the listener
6011
6032
  form's rule (publication wins as the sole table filter).
6012
6033
  - |-
6013
- PostgreSQL connections only: rejected 422 `not_allowed` on other connections, and the
6014
- identifier pattern is enforced server-side like `slotName`.
6034
+ PostgreSQL connections only: rejected 422 `not_allowed` on other connections (SQL Server,
6035
+ MySQL — "CDC publicationName can only be used with postgresql adaptor type"), and the
6036
+ identifier pattern is enforced server-side like `slotName`. A MySQL listener scopes
6037
+ tables only through `rdbms.tables` and the include / exclude `properties`.
6038
+ - |-
6039
+ On a PostgreSQL connection one of this field or `rdbms.tables` must be present: a stream
6040
+ export carrying neither is rejected 422 `missing_required_field` on both paths
6041
+ ("publicationName is required when tables is not provided." / "tables is required when
6042
+ publicationName is not provided."). SQL Server and MySQL listeners save without either.
6015
6043
  examples:
6016
6044
  - celigo_pub
6017
6045
  - orders_publication
6018
6046
  cursor:
6019
6047
  type: string
6020
6048
  description: |-
6021
- Server-managed stream position marker (where the listener resumes reading change events).
6049
+ Server-managed stream position marker (where the listener resumes reading change events;
6050
+ the MySQL listener documentation describes it as the binlog file and position last saved).
6022
6051
  Maintained by the platform as events are consumed; the UI exposes a reset workflow for it
6023
- under Cursor Management.
6052
+ under Cursor Management, which appears once a cursor exists. The form's reset is a full save that omits `cursor` and carries the
6053
+ top-level request flag `pendingCursorReset: true`; the API accepts the flag and does not
6054
+ store it on the document.
6024
6055
  x-celigo-ai-guidance:
6025
6056
  - Never author or modify this field — the platform owns the stream position.
6026
6057
  paths:
@@ -6029,17 +6060,33 @@ components:
6029
6060
  type: string
6030
6061
  description: |-
6031
6062
  Dot-notation paths within each raw change event to retain in the emitted record. MongoDB
6032
- listeners default to `["payload"]` (the whole change document); SQL Server and PostgreSQL
6033
- listeners commonly select `payload.after`, `payload.op`, and related fields to expose the
6034
- changed row and operation type.
6063
+ listeners default to `["payload"]` (the whole change document); SQL Server, PostgreSQL and
6064
+ MySQL listeners commonly select `payload.after`, `payload.op`, and related fields to expose
6065
+ the changed row and operation type. The MySQL listener form offers `payload.after`,
6066
+ `payload.before`, `schema`, `payload.source`, `payload.op`, `payload.transaction`,
6067
+ `payload.ts_ms`, `payload.ts_us` and `payload.ts_ns`, preselecting `payload.after`; it has
6068
+ no `updateDescription`-derived options and no `payload.id`. The MySQL listener
6069
+ documentation describes `after` as the row after the change (empty on a delete), `before`
6070
+ as the row before an update or delete (needs `binlog_row_image=FULL`), `op` as `c` / `u` /
6071
+ `d` / `r` (insert / update / delete / snapshot read) and `source` as the database, table,
6072
+ binlog file and position.
6035
6073
  examples:
6036
6074
  - - payload
6037
6075
  - - payload.after
6038
6076
  - payload.op
6077
+ - - payload.after
6078
+ - payload.before
6079
+ - payload.op
6039
6080
  intervalTime:
6040
6081
  type: integer
6041
6082
  default: 300
6042
- description: Polling interval, in seconds, at which the listener checks the source for new change events.
6083
+ minimum: 30
6084
+ x-celigo-ui-override: The minimum mirrors the listener forms, which label this field Max wait time and reject a value under 30 ("Max wait time must be at least 30 seconds."); the API itself stores a lower value.
6085
+ description: |-
6086
+ Interval, in seconds, that bounds how long the listener holds change events before sending
6087
+ a page downstream. The listener forms label it Max wait time, and the platform's listener
6088
+ documentation describes it as the longest a page waits when fewer than `pageSize` events
6089
+ have arrived — a full page is sent as soon as it fills.
6043
6090
  examples:
6044
6091
  - 300
6045
6092
  - 30
@@ -6048,11 +6095,25 @@ components:
6048
6095
  description: |-
6049
6096
  Connector-engine settings passed through to the underlying CDC connector as name/value
6050
6097
  pairs. Mirrors the form's additional-properties grid: the required keys (`capture.mode`
6051
- and `snapshot.mode` for MongoDB, `snapshot.mode` for SQL Server and PostgreSQL) are
6098
+ and `snapshot.mode` for MongoDB, `snapshot.mode` for SQL Server, PostgreSQL and MySQL) are
6052
6099
  serialized first, followed by optional keys such as `field.exclude.list`,
6053
6100
  `column.include.list`, or `snapshot.collection.filter.overrides.<db>.<collection>`.
6054
6101
  On save the API also lifts `snapshot.mode` / `capture.mode` entries into the typed
6055
6102
  `snapshotMode` / `captureMode` fields.
6103
+
6104
+ The MySQL listener form offers six keys: `snapshot.mode` (preselected `no_data`) and five
6105
+ optional comma-separated regular-expression lists — `table.exclude.list` (matched on
6106
+ `database.table`), `database.include.list`, `database.exclude.list`,
6107
+ `column.include.list` and `column.exclude.list` (matched on `database.table.column`).
6108
+ MySQL has no schema layer, so there are no `schema.include.list` / `schema.exclude.list`
6109
+ keys, and the MongoDB keys (`capture.mode`, `collection.exclude.list`,
6110
+ `field.exclude.list`) do not apply. The MySQL listener documentation describes a blank
6111
+ watch list as every table the connection's user can read, trimmed by `table.exclude.list`.
6112
+ x-celigo-ai-guidance:
6113
+ - |-
6114
+ The API persists any key sent here without validating it against the connector, so a
6115
+ MongoDB or PostgreSQL key on a MySQL listener saves cleanly and does nothing — author only
6116
+ the keys the listener's form offers.
6056
6117
  items:
6057
6118
  type: object
6058
6119
  required:
@@ -11977,8 +12038,8 @@ components:
11977
12038
  for other connection types. For query-type exports (standard, delta, once) it is REQUIRED
11978
12039
  when the _connectionId field references an RDBMS database connection and holds the SQL
11979
12040
  query. For real-time stream listeners (`type: "stream"`) it holds the CDC watch list
11980
- (`tables`) instead — and a PostgreSQL listener scoped by a publication
11981
- (`cdc.publicationName`) may omit this object entirely.
12041
+ (`tables`) instead — and a SQL Server or MySQL listener with no watch list, or a PostgreSQL
12042
+ listener scoped by a publication (`cdc.publicationName`), may omit this object entirely.
11982
12043
 
11983
12044
  **Rdbms export capabilities**
11984
12045
  - Execute custom SQL SELECT statements
@@ -12032,8 +12093,8 @@ components:
12032
12093
  ```
12033
12094
 
12034
12095
  **Real-time CDC listener exports (type: "stream")**
12035
- SQL Server and PostgreSQL connections support change-data-capture listeners that stream row
12036
- changes continuously (the `cdc` object holds the listener settings). A stream export has NO
12096
+ SQL Server, PostgreSQL and MySQL connections support change-data-capture listeners that stream
12097
+ row changes continuously (the `cdc` object holds the listener settings). A stream export has NO
12037
12098
  `query` — it watches `tables`:
12038
12099
  ```json
12039
12100
  {
@@ -12042,9 +12103,26 @@ components:
12042
12103
  "cdc": { "properties": [{ "name": "snapshot.mode", "value": "no_data" }] }
12043
12104
  }
12044
12105
  ```
12106
+ A MySQL listener names its tables as `database.table` (MySQL has no schema layer):
12107
+ ```json
12108
+ {
12109
+ "type": "stream",
12110
+ "rdbms": { "tables": "sales.orders,sales.order_lines" },
12111
+ "cdc": {
12112
+ "properties": [{ "name": "snapshot.mode", "value": "no_data" }],
12113
+ "paths": ["payload.after", "payload.op"]
12114
+ }
12115
+ }
12116
+ ```
12045
12117
  A PostgreSQL listener can instead scope tables through a publication
12046
12118
  (`cdc.publicationName`), in which case `tables` stays unset and the `rdbms` object may be
12047
- omitted entirely.
12119
+ omitted entirely; on PostgreSQL one of the two must be present. SQL Server and MySQL
12120
+ listeners save with no `tables` and no `rdbms` object at all (a blank `tables` string is
12121
+ dropped on save); the MySQL listener documentation describes that as every table the
12122
+ connection's user can read, trimmed by the `table.exclude.list` property.
12123
+ `POST /v1/exports/preview` rejects a stream export both with `rdbms.tables` sent and with
12124
+ no `rdbms` object at all, with the same 422 `missing_required_field` ("rdbms subschema not
12125
+ defined") — listeners have no preview.
12048
12126
  properties:
12049
12127
  tables:
12050
12128
  type: string
@@ -12052,16 +12130,26 @@ components:
12052
12130
  Comma-separated list of tables the CDC listener watches for changes. Used only by real-time
12053
12131
  listener exports (`type` is `stream`); standard SQL exports use `query` instead. SQL Server
12054
12132
  listeners use fully-qualified three-part names (`database.schema.table`); PostgreSQL
12055
- listeners use two-part names (`schema.table`).
12133
+ listeners use two-part names (`schema.table`); MySQL listeners use two-part
12134
+ `database.table` names, since MySQL has no schema layer between the database and the
12135
+ table. A PostgreSQL listener must carry this field or `cdc.publicationName`; SQL Server
12136
+ and MySQL listeners may leave it out (for MySQL the listener documentation describes that
12137
+ as every table the connection's user can read, trimmed by `table.exclude.list`).
12056
12138
  x-celigo-ai-guidance:
12057
12139
  - |-
12058
12140
  For a PostgreSQL listener, author EITHER this field OR `cdc.publicationName`, never both —
12059
12141
  when a publication is set it is the sole table filter and the listener form clears this
12060
12142
  field (the API stores both if sent, so nothing catches the conflict at save time).
12143
+ - |-
12144
+ The API does not validate the names against the engine — a three-part name on a MySQL
12145
+ listener saves cleanly — so nothing at save time catches the wrong form. Use the engine's
12146
+ own: `database.table` on MySQL, `schema.table` on PostgreSQL, `database.schema.table` on
12147
+ SQL Server.
12061
12148
  examples:
12062
12149
  - UKGODS.dbo.UKG_MetadataStaging
12063
12150
  - dbo.WorkOrderT,dbo.OrderLineT
12064
12151
  - public.orders,public.customers
12152
+ - sales.orders,sales.order_lines
12065
12153
  query:
12066
12154
  type: string
12067
12155
  x-celigo-agent:
@@ -12961,7 +13049,9 @@ components:
12961
13049
  - statusMapping
12962
13050
  - departmentCodes
12963
13051
  hardCodedValue:
12964
- type: string
13052
+ type:
13053
+ - string
13054
+ - 'null'
12965
13055
  description: |
12966
13056
  Constant written to the destination instead of an extracted value. On a primitive
12967
13057
  array (`stringarray`, `numberarray`, `booleanarray`) the string is split on commas,
@@ -12969,6 +13059,8 @@ components:
12969
13059
  On an `object` it must be a JSON object string and on an `objectarray` a JSON array
12970
13060
  string (an object string becomes one element); the save parses it and refuses non-JSON
12971
13061
  or the wrong shape with 422, and an array row with a constant needs no `buildArrayHelper`.
13062
+ JSON `null` writes the destination field as null; it is what the mapper saves for its
13063
+ hard-coded "Use null as default value" choice.
12972
13064
  examples:
12973
13065
  - USD
12974
13066
  - A,B
@@ -14055,7 +14147,9 @@ components:
14055
14147
  - statusMapping
14056
14148
  - departmentCodes
14057
14149
  hardCodedValue:
14058
- type: string
14150
+ type:
14151
+ - string
14152
+ - 'null'
14059
14153
  description: |
14060
14154
  Constant written to the destination instead of an extracted value. On a primitive
14061
14155
  array (`stringarray`, `numberarray`, `booleanarray`) the string is split on commas,
@@ -14063,6 +14157,8 @@ components:
14063
14157
  On an `object` it must be a JSON object string and on an `objectarray` a JSON array
14064
14158
  string (an object string becomes one element); the save parses it and refuses non-JSON
14065
14159
  or the wrong shape with 422, and an array row with a constant needs no `buildArrayHelper`.
14160
+ JSON `null` writes the destination field as null; it is what the mapper saves for its
14161
+ hard-coded "Use null as default value" choice.
14066
14162
  examples:
14067
14163
  - USD
14068
14164
  - A,B
@@ -16567,8 +16663,8 @@ components:
16567
16663
  - **Listen for inbound events from NetSuite or Salesforce**
16568
16664
  -> `distributed`
16569
16665
  - **Stream database changes in real time as they happen**
16570
- (change data capture from MongoDB, SQL Server, or
16571
- PostgreSQL — "when a row changes", "listen to my table")
16666
+ (change data capture from MongoDB, SQL Server, PostgreSQL
16667
+ or MySQL — "when a row changes", "listen to my table")
16572
16668
  -> `stream`, configured via the `cdc` object
16573
16669
  - **Subscribe to an Event Streams topic** ("listen to topic X",
16574
16670
  "consume messages published to …") -> `stream` with
@@ -16592,8 +16688,8 @@ components:
16592
16688
  delta config is a separate concern that scopes how you fill in
16593
16689
  the chosen config, not whether to use it.
16594
16690
  - |-
16595
- `stream` is accepted only on MongoDB and RDBMS exports (SQL Server
16596
- or PostgreSQL connections) and on Event Streams listeners
16691
+ `stream` is accepted only on MongoDB and RDBMS exports (SQL Server,
16692
+ PostgreSQL or MySQL connections) and on Event Streams listeners
16597
16693
  (`adaptorType: TopicExport`); every other adaptor rejects the save
16598
16694
  with `unsupported_export_type`. A MongoDB or RDBMS stream export
16599
16695
  must carry `cdc.snapshotMode` (and `cdc.captureMode` on MongoDB) —
@@ -16618,7 +16714,7 @@ components:
16618
16714
  simple: Allows manual file uploads through the data loader UI.
16619
16715
  blob: Retrieves raw files without parsing them into structured data records.
16620
16716
  distributed: Listens for real-time events from NetSuite or Salesforce.
16621
- stream: Streams events in real time — database change data capture (MongoDB change streams, SQL Server CDC, PostgreSQL logical replication) configured through the `cdc` object, or an Event Streams topic subscription (`TopicExport`) configured through `topic`.
16717
+ stream: Streams events in real time — database change data capture (MongoDB change streams, SQL Server CDC, PostgreSQL logical replication, MySQL binary log) configured through the `cdc` object, or an Event Streams topic subscription (`TopicExport`) configured through `topic`.
16622
16718
  all: Explicitly retrieves all available records — equivalent to omitting `type`.
16623
16719
  examples:
16624
16720
  - webhook
@@ -16745,6 +16841,21 @@ components:
16745
16841
  $ref: '#/components/schemas/Distributed'
16746
16842
  cdc:
16747
16843
  $ref: '#/components/schemas/Cdc'
16844
+ pendingCursorReset:
16845
+ type: boolean
16846
+ writeOnly: true
16847
+ description: |-
16848
+ When true on a save of a stream listener, requests a reset of the listener's stored stream
16849
+ position — the Cursor Management reset the listener form sends, with `cdc.cursor` omitted
16850
+ from the same document; the listener documentation describes the save as clearing the
16851
+ stored cursor and restarting the listener. Accepted on the request and not stored on the
16852
+ export.
16853
+ x-celigo-ai-guidance:
16854
+ - |-
16855
+ Never author this flag — like `cdc.cursor`, the stream position is the platform's, and
16856
+ the reset is the listener form's Cursor Management action. The API accepts it silently
16857
+ (200) and the readback carries no trace that it was sent, so a save that carried it by
16858
+ mistake cannot be seen afterwards on the export.
16748
16859
  topic:
16749
16860
  $ref: '#/components/schemas/Topic'
16750
16861
  filesystem:
@@ -17539,8 +17650,18 @@ components:
17539
17650
  required:
17540
17651
  - adaptorType
17541
17652
  then:
17542
- required:
17543
- - rdbms
17653
+ if:
17654
+ properties:
17655
+ type:
17656
+ const: stream
17657
+ required:
17658
+ - type
17659
+ then:
17660
+ required:
17661
+ - cdc
17662
+ else:
17663
+ required:
17664
+ - rdbms
17544
17665
  else:
17545
17666
  if:
17546
17667
  properties:
package/dist/import.yml CHANGED
@@ -13247,7 +13247,9 @@ components:
13247
13247
  - statusMapping
13248
13248
  - departmentCodes
13249
13249
  hardCodedValue:
13250
- type: string
13250
+ type:
13251
+ - string
13252
+ - 'null'
13251
13253
  description: |
13252
13254
  Constant written to the destination instead of an extracted value. On a primitive
13253
13255
  array (`stringarray`, `numberarray`, `booleanarray`) the string is split on commas,
@@ -13255,6 +13257,8 @@ components:
13255
13257
  On an `object` it must be a JSON object string and on an `objectarray` a JSON array
13256
13258
  string (an object string becomes one element); the save parses it and refuses non-JSON
13257
13259
  or the wrong shape with 422, and an array row with a constant needs no `buildArrayHelper`.
13260
+ JSON `null` writes the destination field as null; it is what the mapper saves for its
13261
+ hard-coded "Use null as default value" choice.
13258
13262
  examples:
13259
13263
  - USD
13260
13264
  - A,B
@@ -14341,7 +14345,9 @@ components:
14341
14345
  - statusMapping
14342
14346
  - departmentCodes
14343
14347
  hardCodedValue:
14344
- type: string
14348
+ type:
14349
+ - string
14350
+ - 'null'
14345
14351
  description: |
14346
14352
  Constant written to the destination instead of an extracted value. On a primitive
14347
14353
  array (`stringarray`, `numberarray`, `booleanarray`) the string is split on commas,
@@ -14349,6 +14355,8 @@ components:
14349
14355
  On an `object` it must be a JSON object string and on an `objectarray` a JSON array
14350
14356
  string (an object string becomes one element); the save parses it and refuses non-JSON
14351
14357
  or the wrong shape with 422, and an array row with a constant needs no `buildArrayHelper`.
14358
+ JSON `null` writes the destination field as null; it is what the mapper saves for its
14359
+ hard-coded "Use null as default value" choice.
14352
14360
  examples:
14353
14361
  - USD
14354
14362
  - A,B