UNPKG

json-processing

Version:

JSON Processing Tool

138 lines (137 loc) 4.57 kB
'use strict'; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.tableAscii = exports.json = exports.raw = void 0; // @ts-ignore const ascii_table_1 = __importDefault(require("ascii-table")); const lodash_1 = __importDefault(require("lodash")); const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); function raw(observable, stream) { observable.subscribe({ next: value => { try { if (value instanceof rxjs_1.GroupedObservable) { const key = value.key; value = value.pipe(operators_1.toArray(), operators_1.map(array => ({ key: key, values: array }))); } if (value instanceof rxjs_1.Observable) value. subscribe({ next: o => stream.write(o), error: err => stream.emit('error', err) }); else { stream.write(value); } } catch (e) { stream.emit('error', e); } }, error: err => stream.emit('error', err), complete: () => stream !== process.stdout && stream.end() }); return stream; } exports.raw = raw; function json(observable, stream) { observable.subscribe({ next: value => { try { if (value instanceof rxjs_1.GroupedObservable) { const key = value.key; value = value.pipe(operators_1.toArray(), operators_1.map(array => ({ key: key, values: array }))); } if (value instanceof rxjs_1.Observable) value.pipe(operators_1.map(o => `${JSON.stringify(o)}\n`)) .subscribe({ next: o => stream.write(o), error: err => stream.emit('error', err) }); else stream.write(`${JSON.stringify(value)}\n`); } catch (e) { stream.emit('error', e); } }, error: (err) => stream.emit('error', err), complete: () => stream !== process.stdout && stream.end() }); return stream; } exports.json = json; function tableAscii(observable, stream) { let builder; observable.subscribe({ next: value => { try { if (value instanceof rxjs_1.Observable) { const builder = new TableBuilder(value.key); value = value.subscribe({ next: value => builder.addRow(value), error: err => stream.emit('error', err), complete: () => builder.render(stream) }); } else { builder = builder || new TableBuilder(''); builder.addRow(value); } } catch (e) { stream.emit('error', e); } }, error: err => stream.emit('error', err), complete: () => { if (builder) builder.render(stream); if (process.stdout !== stream) stream.end(); } }); return stream; } exports.tableAscii = tableAscii; class TableBuilder { constructor(title) { this._table = new ascii_table_1.default(title); this._heading = []; } addRow(value) { this._setHeading(value); this._table.addRowMatrix([ this._toRow(value) ]); } render(stream) { stream.write(this._table.render()); stream.write('\n'); } _setHeading(value) { if (!lodash_1.default.isObject(value)) return; return this._table. setHeading((this._heading = lodash_1.default(this._heading). concat(Object.keys(value)). uniq().value())); } _toRow(value) { if (lodash_1.default.isEmpty(this._heading)) return value; return this._heading.map(h => { const val = value[h]; if (lodash_1.default.isArray(val)) return '[array]'; if (lodash_1.default.isObject(val)) return '[object]'; return val; }); } }