UNPKG

@hokuto/jam-node

Version:

JAM Node TS, guardians and utils

72 lines (71 loc) 2.32 kB
import { createReadStream } from "fs"; import { Duplex } from "stream"; import StreamJson from "stream-json"; import { Blob as NodeFetchBlob } from "node-fetch"; import Asm from "stream-json/Assembler.js"; import { JsonStreamStringify } from "json-stream-stringify"; function bufferToStream(myBuffer) { const tmp = new Duplex(); tmp.push(myBuffer); tmp.push(null); return tmp; } export function buildJson(readable) { return new Promise((resolve, reject) => { try { const pipeline = readable().pipe(StreamJson.parser()); pipeline.on("error", (err) => { reject(err); }); const asm = Asm.connectTo(pipeline); asm.on("done", (asm) => { pipeline.end(); resolve(asm.current); }); } catch (e) { reject(e); } }); } export 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 NodeFetchBlob(chunks, { type: mimeType }) : new NodeFetchBlob(chunks); resolve(blob); }) .once("error", reject); }); } export 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 JsonStreamStringify(obj); const chunks = []; jsonStream .on("data", (chunk) => chunks.push(chunk)) .once("end", () => { const blob = mimeType ? new NodeFetchBlob(chunks, { type: mimeType }) : new NodeFetchBlob(chunks); resolve(blob); }) .once("error", reject); }); } export function readJsonFile(filePath) { return buildJson(() => createReadStream(filePath)); } export function readJsonBuffer(buffer) { return buildJson(() => bufferToStream(buffer)); }