Transforms JSON stream to JS Objects
$ npm install '@oresoftware/json-stream-parser'
import {JSONParser} from '@oresoftware/json-stream-parser';Right now, the library assumes each separate chunk of json is separated by newline characters. 
In the future, we could attempt to use a different delimiting character, as a user-provided input variable. 
Recommendations welcome.
process.stdin.resume().pipe(new JSONParser()).on('data', d => {
  // now we got some POJSOs!
});import * as net from 'net';
const [port,host] = [6970,'localhost'];
const ws = net.createConnection(port, host);
ws.setEncoding('utf8')
  .pipe(new JSONParser())   // tcp connection is bidirection/full-duplex .. we send JSON strings each way
  .on('data', onData);    // we receive data coming from the tcp server here
// and we send data like this:
ws.write(JSON.stringify({'some':'data'}) + '\n', 'utf8', cb); // make sure to include the newline char when you writeconst k = cp.spawn('bash');
k.stdin.end(`echo '{"foo":"bar"}\n'`);  // make sure to include the newline char when you write
k.stdout.pipe(new JSONParser()).on('data', d => {
  // => {foo: 'bar'}
});const k = cp.spawn('bash');
k.stdin.end(`
  foo="medicine"
  cat <<EOF\n{"foo":"$foo"}\nEOF  # make sure to include the newline char when you write
`);
k.stdout.pipe(new JSONParser()).on('data', d => {
    assert.deepStrictEqual(d, {foo: 'medicine'});  // should pass
});
If you JSON has unescaped newlines, or the JSON is separated by some other character, then use the delimiter option.
new JSONParser({delimiter: '∆∆∆'});  // use 3 alt-j's to separate json chunks, since newlines won't workFor other solutions to parsing JSON from CLIs, see: https://stackoverflow.com/questions/56014438/get-single-line-json-from-aws-cli
- delayEvery: integer
every x chunks, will use setImmediate to delay processing, good for not blocking the event loop too much.
- emitNonJSON: boolean
if there is a line of input that cannot be JSON parsed, it will be emitted as "string", but it will not pushed to output
- there are some secret options in the code, have a look in lib/main.ts