UNPKG

rjweb-server

Version:

Easy and Robust Way to create a Web Server with Many Easy-to-use Features in NodeJS

109 lines (108 loc) 3.75 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var parseContent_exports = {}; __export(parseContent_exports, { ParseStream: () => ParseStream, default: () => parseContent }); module.exports = __toCommonJS(parseContent_exports); var import_stream = require("stream"); var import_types = require("util/types"); class ParseStream extends import_stream.Duplex { /** * Create a new Stream for Parsing Content on the fly * @since 7.9.0 */ constructor(options = {}, logger) { const prettify = options?.prettify ?? false; super({ writableObjectMode: true, async write(chunk) { const parsed = await parseContent(chunk, prettify, logger); this.push(parsed.content, "binary"); }, read() { } }); } } async function parseContent(content, prettify = false, logger) { const returnObject = { headers: {}, content: Buffer.allocUnsafe(0) }; if ((0, import_types.isPromise)(content)) { try { await new Promise((resolve, reject) => { content.then(async (r) => { content = (await parseContent(r, prettify, logger)).content; resolve(); }).catch((e) => { reject(e); }); }); } catch (err) { logger?.error("Failed to resolve promisified content:", err); } } if (Buffer.isBuffer(content)) return { headers: {}, content }; if ((0, import_types.isMap)(content)) content = Object.fromEntries(content.entries()); if ((0, import_types.isSet)(content)) content = Object.fromEntries(content.entries()); switch (typeof content) { case "object": try { if (prettify) returnObject.content = Buffer.from(JSON.stringify(content, null, 2)); else returnObject.content = Buffer.from(JSON.stringify(content)); returnObject.headers["content-type"] = Buffer.from("application/json"); } catch (err) { logger?.error("Failed to parse Object content:", err); returnObject.content = Buffer.from("Failed to parse provided Object"); } break; case "string": returnObject.content = Buffer.from(content, "utf8"); break; case "symbol": returnObject.content = Buffer.from(content.toString(), "utf8"); break; case "bigint": case "number": case "boolean": returnObject.content = Buffer.from(String(content), "utf8"); break; case "function": const result = await Promise.resolve(content()); returnObject.content = (await parseContent(result, prettify, logger)).content; break; case "undefined": returnObject.content = Buffer.allocUnsafe(0); break; } if (!Buffer.isBuffer(returnObject.content)) { logger?.error("Unknown Content Parsing Error occured (nB):", returnObject.content); returnObject.content = Buffer.from("Unknown Parsing Error", "utf8"); } return returnObject; } // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { ParseStream });