json-processing
Version:
JSON Processing Tool
31 lines (30 loc) • 1.1 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const yajson_stream_1 = __importDefault(require("yajson-stream"));
const bluebird_1 = require("bluebird");
const lodash_1 = require("lodash");
exports.default = (stream, path, onNode) => new bluebird_1.Promise((resolve, reject) => {
const s = stream.pipe(yajson_stream_1.default(path)).
on('data', (data) => {
try {
populatePathMetadata(data.value, data.path);
onNode(data.value);
}
catch (e) {
s.destroy();
reject(e);
}
}).
on('error', (err) => reject(err)).
on('end', () => resolve());
});
function populatePathMetadata(node, path) {
if (lodash_1.isObject(node) || lodash_1.isArray(node))
Object.defineProperties(node, {
__path: { value: path, writable: true },
__key: { value: path[path.length - 1], writable: true }
});
}