UNPKG

@sigiljs/sigil

Version:

TypeScript-first Node.js HTTP framework offering schema-driven routing, modifier-based middleware, plugin extensibility, and flexible response templating

75 lines (74 loc) 1.99 kB
import { TLSSocket as d } from "node:tls"; import f from "./containers/incoming-body.mjs"; import u from "./containers/incoming-headers.mjs"; import m from "./containers/incoming-request-processor-response.mjs"; import h from "./containers/incoming-search-params.mjs"; import w from "../utils/safe-url.mjs"; import { deriveHost as y } from "./derive-host.mjs"; import { getClientIpInfo as b } from "./get-client-ip-info.mjs"; import H from "./handlers/binary-handler.mjs"; import p from "./handlers/buffer-handler.mjs"; import P from "./handlers/form-data-handler.mjs"; import T from "./handlers/urlencoded-form-handler.mjs"; const S = /* @__PURE__ */ new Set([ "POST", "PATCH", "PUT", "DELETE", "OPTIONS" ]); async function A(t, k) { if (!t.method || !t.url || !t.headers) return null; const n = y(t); if (!n) return null; const s = S.has(t.method), r = s ? t.headers["content-type"]?.split(";", 1)[0]?.trim() : void 0, i = t.socket instanceof d && t.socket.encrypted ? "https" : "http", a = w(`${i}://${n}${t.url}`); if (!a) return null; const c = { headers: new u(t.rawHeaders), query: new h(a.searchParams), path: a.pathname, protocol: i, method: t.method, remoteAddress: b(t), host: n, files: [] }; if (!s || !r) return new m( Object.assign(c, { body: new f(null) }) ); const o = t; let e; try { if (r.startsWith("text/") || r.endsWith("json")) e = await p(o); else switch (r) { case "application/json": case "application/xml": case "application/javascript": e = await p(o); break; case "multipart/form-data": e = await P(o); break; case "application/x-www-form-urlencoded": e = await T(o); break; default: e = await H(o); break; } } catch (l) { throw l; } return new m({ ...c, ...e }); } export { A as default };