Skip to content

Commit 6cb407c

Browse files
juanjoDiazknownasilya
authored andcommitted
fix: broken stdin input (#241)
1 parent 24a7893 commit 6cb407c

File tree

3 files changed

+53
-44
lines changed

3 files changed

+53
-44
lines changed

bin/json2csv.js

Lines changed: 50 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ const os = require('os');
77
const path = require('path');
88
const Table = require('cli-table');
99
const program = require('commander');
10-
const debug = require('debug')('json2csv:cli');
1110
const json2csv = require('../lib/json2csv');
1211
const parseNdJson = require('../lib/parse-ndjson');
1312
const pkg = require('../package');
@@ -72,36 +71,46 @@ function getFields(fieldList, fields) {
7271
: undefined);
7372
}
7473

75-
function getInput(input, ndjson) {
76-
if (inputPath) {
77-
if (ndjson) {
78-
return new Promise((resolve, reject) => {
79-
fs.readFile(inputPath, 'utf8', (err, data) => {
80-
if (err) {
81-
reject(err);
82-
return;
83-
}
84-
85-
resolve(parseNdJson(data));
86-
});
87-
});
88-
}
74+
function getInput() {
75+
if (!inputPath) {
76+
return getInputFromStdin();
77+
}
8978

90-
return Promise.resolve(require(inputPath));
79+
if (program.ndjson) {
80+
return getInputFromNDJSON();
9181
}
9282

93-
process.stdin.resume();
94-
process.stdin.setEncoding('utf8');
83+
return Promise.resolve(require(inputPath));
84+
}
85+
86+
function getInputFromNDJSON() {
87+
return new Promise((resolve, reject) => {
88+
fs.readFile(inputPath, 'utf8', (err, data) => {
89+
if (err) {
90+
reject(err);
91+
return;
92+
}
9593

96-
let inputData = '';
97-
process.stdin.on('data', chunk => (inputData += chunk));
98-
process.stdin.on('error', err => debug('Could not read from stdin', err));
99-
process.stdin.on('end', () => {
100-
const rows = ndjson
101-
? parseNdJson(inputData)
102-
: JSON.parse(inputData);
94+
resolve(parseNdJson(data));
95+
});
96+
});
97+
}
10398

104-
return Promise.resolve(rows);
99+
function getInputFromStdin() {
100+
return new Promise((resolve, reject) => {
101+
process.stdin.resume();
102+
process.stdin.setEncoding('utf8');
103+
104+
let inputData = '';
105+
process.stdin.on('data', chunk => (inputData += chunk));
106+
process.stdin.on('error', err => reject(new Error('Could not read from stdin', err)));
107+
process.stdin.on('end', () => {
108+
const rows = program.ndjson
109+
? parseNdJson(inputData)
110+
: JSON.parse(inputData);
111+
112+
resolve(rows);
113+
});
105114
});
106115
}
107116

@@ -119,22 +128,21 @@ function logPretty(csv) {
119128
}
120129

121130
function processOutput(csv) {
122-
if (outputPath) {
123-
return new Promise((resolve, reject) => {
124-
fs.writeFile(outputPath, csv, (err) => {
125-
if (err) {
126-
reject(new Error('Cannot save to ' + program.output + ': ' + err));
127-
return;
128-
}
129-
130-
debug(program.input + ' successfully converted to ' + program.output);
131-
resolve();
132-
});
133-
});
131+
if (!outputPath) {
132+
// eslint-disable-next-line no-console
133+
console.log(program.pretty ? logPretty(csv) : csv);
134134
}
135135

136-
// eslint-disable-next-line no-console
137-
console.log(program.pretty ? logPretty(csv) : csv);
136+
return new Promise((resolve, reject) => {
137+
fs.writeFile(outputPath, csv, (err) => {
138+
if (err) {
139+
reject(new Error('Cannot save to ' + program.output + ': ' + err));
140+
return;
141+
}
142+
143+
resolve();
144+
});
145+
});
138146
}
139147

140148
getFields(program.fieldList, program.fields)
@@ -154,8 +162,8 @@ getFields(program.fieldList, program.fields)
154162
withBOM: program.withBom
155163
};
156164

157-
if (program.streamming === false) {
158-
return getInput(program.input, program.ndjson)
165+
if (!inputPath || program.streamming === false) {
166+
return getInput()
159167
.then(input => new JSON2CSVParser(opts).parse(input))
160168
.then(processOutput);
161169
}

package-lock.json

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

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
"dependencies": {
4040
"cli-table": "^0.3.1",
4141
"commander": "^2.8.1",
42-
"debug": "^3.1.0",
4342
"flat": "^4.0.0",
4443
"jsonparse": "^1.3.1",
4544
"lodash.clonedeep": "^4.5.0",

0 commit comments

Comments
 (0)