@forzalabs/remora 2.6.0 → 2.7.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/LICENCE.md +52 -17
- package/README.md +11 -1
- package/RELEASE_NOTES.md +192 -0
- package/docs/Remora - Code Sets.md +22 -1
- package/docs/Remora - Consumers.md +27 -2
- package/docs/Remora - Producers.md +160 -5
- package/documentation/README.md +2 -1
- package/index.js +1491 -411
- package/json_schemas/consumer-schema.json +12 -1
- package/json_schemas/producer-schema.json +22 -3
- package/package.json +2 -2
- package/workers/ExecutorWorker.js +1121 -138
- package/CHANGELOG.md +0 -557
|
@@ -328,6 +328,17 @@
|
|
|
328
328
|
"type": "integer",
|
|
329
329
|
"minimum": 1,
|
|
330
330
|
"description": "Optional 1-based column the field is expected to start at. Not a second source of truth — the offsets always come from the widths — but an assertion that compile recomputes and fails on, so a forgotten filler is caught where it is written."
|
|
331
|
+
},
|
|
332
|
+
"scale": {
|
|
333
|
+
"type": "integer",
|
|
334
|
+
"minimum": 1,
|
|
335
|
+
"maximum": 15,
|
|
336
|
+
"description": "'number' fields only. Implied decimal places this field is WRITTEN with, the way a COBOL 'PIC S9(7)V99' is: the point is dropped and the last 'scale' digits are the fraction, so 123.45 at scale 2 is written '0012345'. The write-side counterpart of the producer dimension's 'scale'; where both say the same thing, a read and write back is byte-identical."
|
|
337
|
+
},
|
|
338
|
+
"sign": {
|
|
339
|
+
"type": "string",
|
|
340
|
+
"enum": ["overpunch", "leading", "trailing"],
|
|
341
|
+
"description": "'number' fields only. How this field carries its sign, for the layouts that do not simply write a leading '-'. 'overpunch' puts it in the last byte (-1231 is written '123J', +1231 as '123A'); 'leading'/'trailing' write a real '+' or '-' in the first or last column of the field. A positive value is written in the form the mode declares, never as bare digits."
|
|
331
342
|
}
|
|
332
343
|
}
|
|
333
344
|
}
|
|
@@ -396,7 +407,7 @@
|
|
|
396
407
|
"lineEnding": {
|
|
397
408
|
"type": "string",
|
|
398
409
|
"enum": ["lf", "crlf"],
|
|
399
|
-
"description": "'FIXED' only. What ends every record, the last one included. Defaults to 'lf'. A real positional feed picks one and holds it —
|
|
410
|
+
"description": "'FIXED' only. What ends every record, the last one included. Defaults to 'lf'. A real positional feed picks one and holds it — some are CRLF on every line. A file with no terminator at all is fixed record framing (RECFM=FB) and is not expressible here."
|
|
400
411
|
},
|
|
401
412
|
"layouts": {
|
|
402
413
|
"type": "object",
|
|
@@ -214,6 +214,19 @@
|
|
|
214
214
|
"type": "string",
|
|
215
215
|
"description": "Optional source format used when parsing/casting the value, e.g. a date format like 'YYYYMMDD' or 'DD-MM-YYYY'."
|
|
216
216
|
},
|
|
217
|
+
"scale": {
|
|
218
|
+
"type": "integer",
|
|
219
|
+
"minimum": 1,
|
|
220
|
+
"maximum": 15,
|
|
221
|
+
"description": "Implied decimal places of a 'number' field written WITHOUT a decimal point, the way a COBOL PIC S9(7)V99 is: the last 'scale' digits are the fraction, so '0012345' at scale 2 reads as 123.45. A field written with its decimal point, or with no fraction at all, omits this. 'number' dimensions only.",
|
|
222
|
+
"examples": [2]
|
|
223
|
+
},
|
|
224
|
+
"sign": {
|
|
225
|
+
"type": "string",
|
|
226
|
+
"enum": ["overpunch", "leading", "trailing"],
|
|
227
|
+
"description": "How a 'number' field written as text carries its sign, for layouts that don't simply write a leading '-'. 'overpunch': the last byte carries the sign as well as its digit, the way a signed COBOL DISPLAY field does, so -1231 is written '123J' ('{' and 'A'-'I' positive, '}' and 'J'-'R' negative, a plain digit positive). 'leading'/'trailing': a real '+' or '-' in the first or last position. 'number' dimensions only.",
|
|
228
|
+
"examples": ["overpunch"]
|
|
229
|
+
},
|
|
217
230
|
"alias": {
|
|
218
231
|
"type": "string",
|
|
219
232
|
"description": "The SQL column or field key that corresponds to this dimension. If left empty, the column name is assumed to be the same as the dimension name."
|
|
@@ -263,10 +276,10 @@
|
|
|
263
276
|
"type": "array",
|
|
264
277
|
"minItems": 1,
|
|
265
278
|
"items": { "$ref": "#/definitions/dimension" },
|
|
266
|
-
"description": "Makes this a repeating GROUP of fields (a COBOL OCCURS segment): the fields that repeat, each 'position' RELATIVE to one occurrence. The group's own 'position' is the extent of ONE occurrence, so its 'length' is the bytes per occurrence, not the whole group's span. Expanded into one dimension per (occurrence x child) when the config loads, so nothing downstream sees a group. A group declares no 'type' and produces no column of its own.
|
|
279
|
+
"description": "Makes this a repeating GROUP of fields (a COBOL OCCURS segment): the fields that repeat, each 'position' RELATIVE to one occurrence. The group's own 'position' is the extent of ONE occurrence, so its 'length' is the bytes per occurrence, not the whole group's span. Expanded into one dimension per (occurrence x child) when the config loads, so nothing downstream sees a group. A group declares no 'type' and produces no column of its own. Groups nest, the way a copybook's OCCURS clauses do: a child may be a group in turn, positioned RELATIVE to one occurrence of the group it sits in and with all of its own occurrences inside that one. A nested group repeats a fixed number of times and cannot declare 'emit'. FIXED producers only."
|
|
267
280
|
},
|
|
268
281
|
"occurs": {
|
|
269
|
-
"description": "How many times a group's fields repeat. An integer when every line has the same count — default 1, so a group is also usable purely to structure a non-repeating segment. An object when the count VARIES line by line: the group still generates 'max' columns (a line with fewer reads them as null), and everything after it must be anchored with 'position.after' because the group's span differs per line.",
|
|
282
|
+
"description": "How many times a group's fields repeat. An integer when every line has the same count — default 1, so a group is also usable purely to structure a non-repeating segment. An object when the count VARIES line by line: the group still generates 'max' columns (a line with fewer reads them as null), and everything after it must be anchored with 'position.after' because the group's span differs per line. The limit of 1000 applies per level, so a nested group is bounded at the product. A nested group takes the integer form only.",
|
|
270
283
|
"oneOf": [
|
|
271
284
|
{
|
|
272
285
|
"type": "integer",
|
|
@@ -324,10 +337,16 @@
|
|
|
324
337
|
"description": "On an 'emit': 'rows' group: the name of the generated field holding the occurrence index. Default '{group}Occurrence'.",
|
|
325
338
|
"examples": ["addr_occurrence"]
|
|
326
339
|
},
|
|
340
|
+
"usage": {
|
|
341
|
+
"type": "string",
|
|
342
|
+
"enum": ["display", "comp", "comp-3"],
|
|
343
|
+
"description": "How the source system STORES this field, as a COBOL copybook's USAGE clause declares it. Written by 'remora import-copybook'. 'display' is characters and is the only one a positional read can address; 'comp' (binary) and 'comp-3' (packed decimal) hold their digits as bytes and are rejected at compile, naming the field, so the feed is converted to display before it is sent rather than read as NaN.",
|
|
344
|
+
"examples": ["comp-3"]
|
|
345
|
+
},
|
|
327
346
|
"naming": {
|
|
328
347
|
"type": "string",
|
|
329
348
|
"minLength": 1,
|
|
330
|
-
"description": "Template for the dimension names generated by a group or by 'flags'. On a group the tokens are {group}, {index}, {field} and {Field} (capitalized), and {index} is required unless 'occurs' is 1; default '{group}{index}{Field}'. On a 'flags' dimension
|
|
349
|
+
"description": "Template for the dimension names generated by a group or by 'flags'. On a group the tokens are {group}, {index}, {field} and {Field} (capitalized), and {index} is required unless 'occurs' is 1; default '{group}{index}{Field}'. Each level of a nested group names what the level below it generated, so the default gives 'addr0Phone1Area'; {index1}...{indexN} reach N levels outward from the group's own {index}. On a 'flags' dimension the tokens are {field}, {Field}, {flag} and {Flag}, one flag token required; default '{field}{Flag}'.",
|
|
331
350
|
"examples": ["{group}{index}{Field}", "{group}_{index}_{field}", "{field}_{flag}"]
|
|
332
351
|
},
|
|
333
352
|
"flags": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forzalabs/remora",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"description": "A powerful CLI tool for seamless data translation.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"private": false,
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"typescript"
|
|
45
45
|
],
|
|
46
46
|
"author": "",
|
|
47
|
-
"license": "
|
|
47
|
+
"license": "SEE LICENSE IN LICENCE.md",
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@aws-sdk/client-redshift-data": "^3.699.0",
|
|
50
50
|
"@aws-sdk/rds-signer": "^3.1136.0",
|