@hokuto/jam-node
Version:
JAM Node TS, guardians and utils
83 lines (82 loc) • 2.94 kB
JavaScript
;
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;