@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
JavaScript
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
};