UNPKG

@hokuto/jam-node

Version:

JAM Node TS, guardians and utils

83 lines (82 loc) 2.94 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.readJsonBuffer = exports.readJsonFile = exports.objectToBlob = exports.streamToBlob = exports.buildJson = void 0; const fs_1 = require("fs"); const stream_1 = require("stream"); const stream_json_1 = __importDefault(require("stream-json")); const node_fetch_1 = require("node-fetch"); const Assembler_js_1 = __importDefault(require("stream-json/Assembler.js")); const json_stream_stringify_1 = require("json-stream-stringify"); function bufferToStream(myBuffer) { const tmp = new stream_1.Duplex(); tmp.push(myBuffer); tmp.push(null); return tmp; } function buildJson(readable) { return new Promise((resolve, reject) => { try { const pipeline = readable().pipe(stream_json_1.default.parser()); pipeline.on("error", (err) => { reject(err); }); const asm = Assembler_js_1.default.connectTo(pipeline); asm.on("done", (asm) => { pipeline.end(); resolve(asm.current); }); } catch (e) { reject(e); } }); } exports.buildJson = buildJson; function streamToBlob(stream, mimeType) { if (mimeType != null && typeof mimeType !== "string") { throw new Error("Invalid mimetype, expected string."); } return new Promise((resolve, reject) => { const chunks = []; stream .on("data", (chunk) => chunks.push(chunk)) .once("end", () => { const blob = mimeType != null ? new node_fetch_1.Blob(chunks, { type: mimeType }) : new node_fetch_1.Blob(chunks); resolve(blob); }) .once("error", reject); }); } exports.streamToBlob = streamToBlob; function objectToBlob(obj, mimeType) { if (mimeType != null && typeof mimeType !== "string") { throw new Error("Invalid mimetype, expected string."); } return new Promise((resolve, reject) => { const jsonStream = new json_stream_stringify_1.JsonStreamStringify(obj); const chunks = []; jsonStream .on("data", (chunk) => chunks.push(chunk)) .once("end", () => { const blob = mimeType ? new node_fetch_1.Blob(chunks, { type: mimeType }) : new node_fetch_1.Blob(chunks); resolve(blob); }) .once("error", reject); }); } exports.objectToBlob = objectToBlob; function readJsonFile(filePath) { return buildJson(() => (0, fs_1.createReadStream)(filePath)); } exports.readJsonFile = readJsonFile; function readJsonBuffer(buffer) { return buildJson(() => bufferToStream(buffer)); } exports.readJsonBuffer = readJsonBuffer;