43 lines
No EOL
1.4 KiB
JavaScript
43 lines
No EOL
1.4 KiB
JavaScript
import { NodeResponse, NodeResponseHeaders } from "./response-6LJL3Qlz.mjs";
|
|
|
|
//#region src/adapters/_node/call.ts
|
|
function callNodeHandler(handler, req) {
|
|
const isMiddleware = handler.length > 2;
|
|
const nodeCtx = req.runtime?.node;
|
|
if (!nodeCtx || !nodeCtx.req || !nodeCtx.res) throw new Error("Node.js runtime context is not available.");
|
|
const { req: nodeReq, res: nodeRes } = nodeCtx;
|
|
let _headers;
|
|
const webRes = new NodeResponse(void 0, {
|
|
get status() {
|
|
return nodeRes.statusCode;
|
|
},
|
|
get statusText() {
|
|
return nodeRes.statusMessage;
|
|
},
|
|
get headers() {
|
|
if (!_headers) _headers = new NodeResponseHeaders(nodeCtx);
|
|
return _headers;
|
|
}
|
|
});
|
|
return new Promise((resolve, reject) => {
|
|
nodeRes.once("close", () => resolve(webRes));
|
|
nodeRes.once("finish", () => resolve(webRes));
|
|
nodeRes.once("error", (error) => reject(error));
|
|
let streamPromise;
|
|
nodeRes.once("pipe", (stream) => {
|
|
streamPromise = new Promise((resolve$1) => {
|
|
stream.once("end", () => resolve$1(webRes));
|
|
stream.once("error", (error) => reject(error));
|
|
});
|
|
});
|
|
try {
|
|
if (isMiddleware) Promise.resolve(handler(nodeReq, nodeRes, (error) => error ? reject(error) : streamPromise || resolve(webRes))).catch((error) => reject(error));
|
|
else Promise.resolve(handler(nodeReq, nodeRes)).then(() => streamPromise || webRes);
|
|
} catch (error) {
|
|
reject(error);
|
|
}
|
|
});
|
|
}
|
|
|
|
//#endregion
|
|
export { callNodeHandler }; |