UNPKG

1.47 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.bufferReviver = exports.transformJsonParse = void 0;
4const stream_1 = require("stream");
5/**
6 * Transforms chunks of JSON strings/Buffers (objectMode=false) into parsed objects (readableObjectMode=true).
7 *
8 * if strict - will throw an error on JSON.parse / stringify error
9 *
10 * Usage:
11 *
12 * await _pipeline([
13 * readable,
14 * binarySplit(),
15 * transformJsonParse(),
16 * consumeYourStream...
17 * [)
18 */
19function transformJsonParse(opt = {}) {
20 const { strict = true, reviver } = opt;
21 return new stream_1.Transform({
22 objectMode: false,
23 readableObjectMode: true,
24 transform(chunk, _encoding, cb) {
25 try {
26 const data = JSON.parse(chunk, reviver);
27 cb(null, data);
28 }
29 catch (err) {
30 // console.error(err)
31 if (strict) {
32 cb(err); // emit error
33 }
34 else {
35 cb(); // emit no error, but no result neither
36 }
37 }
38 },
39 });
40}
41exports.transformJsonParse = transformJsonParse;
42// Based on: https://stackoverflow.com/a/34557997/4919972
43const bufferReviver = (k, v) => {
44 if (v !== null && typeof v === 'object' && v.type === 'Buffer' && Array.isArray(v.data)) {
45 return Buffer.from(v.data);
46 }
47 return v;
48};
49exports.bufferReviver = bufferReviver;