Skip to content

Commit aeb469b

Browse files
authored
Merge pull request #15 from mrodrig/updates-for-5.5.2
Option parity with json2csv, various fixes
2 parents afad070 + a5dd19d commit aeb469b

5 files changed

Lines changed: 60 additions & 44 deletions

File tree

bin/csv2json.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,17 @@ const pkg = require('../package.json'),
99
program
1010
.version(pkg.version)
1111
.usage('<csvFile> [options]')
12+
.argument('<csvFile>', 'CSV file to convert')
1213
.option('-o, --output [output]', 'Path of output file. If not provided, then stdout will be used', utils.convertToAbsolutePath)
13-
.option('-f, --field <delimiter>', 'Optional field delimiter')
14-
.option('-w, --wrap <delimiter>', 'Optional wrap delimiter')
15-
.option('-e, --eol <delimiter>', 'Optional end of line delimiter')
14+
.option('-f, --field <delimiter>', 'Field delimiter')
15+
.option('-w, --wrap <delimiter>', 'Wrap delimiter')
16+
.option('-e, --eol <delimiter>', 'End of Line delimiter')
1617
.option('-b, --excel-bom', 'Excel Byte Order Mark character prepended to CSV')
17-
.option('-H, --trim-header', 'Trim header fields')
18+
.option('-p, --prevent-csv-injection', 'Prevent CSV Injection')
1819
.option('-F, --trim-fields', 'Trim field values')
19-
.option('-k, --keys [keys]', 'Keys of documents to convert to CSV', utils.constructKeysList, undefined)
20+
.option('-H, --trim-header', 'Trim header fields')
21+
.option('-h, --header-fields', 'Specify the fields names in place a header line in the CSV itself', utils.constructKeysList)
22+
.option('-k, --keys [keys]', 'Keys of documents to convert to CSV', utils.constructKeysList)
2023
.parse(process.argv);
2124

2225
const options = program.opts();
@@ -31,6 +34,8 @@ Promise.resolve({
3134
eol: options.eol
3235
},
3336
excelBOM: Boolean(options.excelBom),
37+
headerFields: options.headerFields,
38+
preventCsvInjection: Boolean(options.preventCsvInjection),
3439
trimHeaderFields: Boolean(options.trimHeader),
3540
trimFieldValues: Boolean(options.trimFields),
3641
keys: options.keys

bin/json2csv.js

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,29 @@ const pkg = require('../package.json'),
99
program
1010
.version(pkg.version)
1111
.usage('<jsonFile> [options]')
12+
.argument('<jsonFile>', 'JSON file to convert')
1213
.option('-o, --output [output]', 'Path of output file. If not provided, then stdout will be used', utils.convertToAbsolutePath)
13-
.option('-f, --field <delimiter>', 'Optional field delimiter')
14-
.option('-w, --wrap <delimiter>', 'Optional wrap delimiter')
15-
.option('-e, --eol <delimiter>', 'Optional end of line delimiter')
14+
.option('-a, --array-indexes-as-keys', 'Includes array indexes in the generated keys')
15+
.option('-S, --check-schema', 'Check for schema differences')
16+
.option('-f, --field <delimiter>', 'Field delimiter')
17+
.option('-w, --wrap <delimiter>', 'Wrap delimiter')
18+
.option('-e, --eol <delimiter>', 'End of Line delimiter')
19+
.option('-E, --empty-field-value <value>', 'Empty field value')
20+
.option('-n, --expand-nested-objects', 'Expand nested objects to be deep converted to CSV')
21+
.option('-k, --keys [keys]', 'Keys of documents to convert to CSV', utils.constructKeysList)
22+
.option('-d, --escape-header-nested-dots', 'Escape header nested dots')
1623
.option('-b, --excel-bom', 'Excel Byte Order Mark character prepended to CSV')
24+
.option('-x, --exclude-keys [keys]', 'Comma separated list of keys to exclude', utils.constructKeysList)
25+
.option('-A, --expand-array-objects', 'Expand array objects')
1726
.option('-W, --without-header', 'Withhold the prepended header')
27+
.option('-p, --prevent-csv-injection', 'Prevent CSV Injection')
1828
.option('-s, --sort-header', 'Sort the header fields')
19-
.option('-H, --trim-header', 'Trim header fields')
2029
.option('-F, --trim-fields', 'Trim field values')
21-
.option('-S, --check-schema', 'Check for schema differences')
22-
.option('-E, --empty-field-value <value>', 'Empty field value')
23-
.option('-A, --expand-array-objects', 'Expand array objects')
30+
.option('-H, --trim-header', 'Trim header fields')
2431
.option('-U, --unwind-arrays', 'Unwind array values to their own CSV line')
25-
.option('-k, --keys [keys]', 'Keys of documents to convert to CSV', utils.constructKeysList, undefined)
32+
.option('-I, --iso-date-format', 'Use ISO 8601 date format')
33+
.option('-L, --locale-format', 'Use locale format for values')
34+
.option('-B, --wrap-booleans', 'Wrap booleans')
2635
.parse(process.argv);
2736

2837
const options = program.opts();
@@ -36,15 +45,23 @@ Promise.resolve({
3645
wrap: options.wrap,
3746
eol: options.eol
3847
},
48+
arrayIndexesAsKeys: Boolean(options.arrayIndexesAsKeys),
49+
emptyFieldValue: options.emptyFieldValue,
50+
escapeHeaderNestedDots: Boolean(options.escapeHeaderNestedDots),
3951
excelBOM: Boolean(options.excelBom),
52+
excludeKeys: options.excludeKeys,
53+
expandNestedObjects: Boolean(options.expandNestedObjects),
4054
prependHeader: !options.withoutHeader,
55+
preventCsvInjection: Boolean(options.preventCsvInjection),
4156
sortHeader: Boolean(options.sortHeader),
4257
trimHeaderFields: Boolean(options.trimHeader),
4358
trimFieldValues: Boolean(options.trimFields),
4459
checkSchemaDifferences: Boolean(options.checkSchema),
4560
expandArrayObjects: Boolean(options.expandArrayObjects),
4661
unwindArrays: Boolean(options.unwindArrays),
47-
emptyFieldValue: options.emptyFieldValue,
62+
useDateIso8601Format: Boolean(options.isoDateFormat),
63+
useLocaleFormat: Boolean(options.localeFormat),
64+
wrapBooleans: Boolean(options.wrapBooleans),
4865
keys: options.keys
4966
}
5067
})

bin/utils/utils.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,6 @@ function processOutput(params) {
8484

8585
}
8686

87-
function constructKeysList(key, keys) {
88-
// Initialize as empty array, if undefined at start
89-
if (!keys) {
90-
keys = [];
91-
}
92-
93-
keys.push(key);
94-
return keys;
87+
function constructKeysList(keys) {
88+
return keys.split(',');
9589
}

package-lock.json

Lines changed: 19 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"author": "mrodrig",
33
"name": "@mrodrig/json-2-csv-cli",
44
"description": "CLI for the json-2-csv package",
5-
"version": "5.0.0",
5+
"version": "5.5.4",
66
"repository": {
77
"type": "git",
88
"url": "https://github.com/mrodrig/json-2-csv-cli.git"
@@ -29,8 +29,8 @@
2929
"cli"
3030
],
3131
"dependencies": {
32-
"commander": "11.1.0",
33-
"json-2-csv": "5.0.0"
32+
"commander": "12.1.0",
33+
"json-2-csv": "5.5.4"
3434
},
3535
"engines": {
3636
"node": ">= 18"

0 commit comments

Comments
 (0)