diff --git a/lib/core/stream.js b/lib/core/stream.js index f3eeef6..353d445 100644 --- a/lib/core/stream.js +++ b/lib/core/stream.js @@ -6,7 +6,7 @@ const Transform = require('stream').Transform; class Stream extends Transform { constructor(parser) { - super(); + super({ objectMode: parser._options.objectMode }); this._parser = parser; this._options = parser._options; this._headers = this._options.headers || []; @@ -25,7 +25,7 @@ class Stream extends Transform { if (self._extra.length > 0) self._extra = ""; return chunk; } - + _wrapArray(data) { if (data.charAt(0) != '[') data = '[' + data; if (data.charAt(data.length - 1) != ']') data += ']'; @@ -35,22 +35,27 @@ class Stream extends Transform { _transform(chunk, encoding, done) { let self = this; let json = null; - // Append extra data to chunk data - chunk = this._mergeChunk(chunk); - if (!chunk) return done(this._lastError); - // Split chunk in objects - let parts = chunk.split('}'); - while (json === null && parts.length > 0) { - try { - let data = self._wrapArray(parts.join('}')); - json = JSON.parse(data); - } catch (ex) { - this._lastError = ex; - let extraChunk = parts.pop(); - self._extra = extraChunk + (self._extra || ""); - if (parts.length > 0) parts[parts.length - 1] += "}"; + if (this._options.objectMode) { + json = Array.isArray(chunk) ? chunk : [chunk]; + } + else { + // Append extra data to chunk data + chunk = this._mergeChunk(chunk); + if (!chunk) return done(this._lastError); + // Split chunk in objects + let parts = chunk.split('}'); + while (json === null && parts.length > 0) { + try { + let data = self._wrapArray(parts.join('}')); + json = JSON.parse(data); + } catch (ex) { + this._lastError = ex; + let extraChunk = parts.pop(); + self._extra = extraChunk + (self._extra || ""); + if (parts.length > 0) parts[parts.length - 1] += "}"; + } } - } + } if (!json) return done(); this._parser.parse(json, (err, csvChunk) => { if (err) return done(err); diff --git a/lib/index.js b/lib/index.js index d93a556..1e4ad64 100644 --- a/lib/index.js +++ b/lib/index.js @@ -35,6 +35,7 @@ module.exports = function() { fillGaps: false, // Boolean verticalOutput: true, // Boolean forceTextDelimiter: false, //Boolean + objectMode: false, // Boolean }; // argument parsing let json, userOptions, callback;