Files
bunext/dist/functions/server/web-pages/handle-web-pages.js
T
2026-10-02 07:04:22 +01:00

50 lines
1.8 KiB
JavaScript

import isDevelopment from "../../../utils/is-development";
import { log } from "../../../utils/log";
import { logBuildErrorsOnce } from "../../../utils/build-error-log";
import getCache from "../../cache/get-cache";
import generateWebPageResponseFromComponentReturn from "./generate-web-page-response-from-component-return";
import grabPageComponent from "./grab-page-component";
import grabPageErrorComponent from "./grab-page-error-component";
export default async function handleWebPages({ req, }) {
try {
const is_dev = isDevelopment();
if (!is_dev) {
const url = new URL(req.url);
const key = url.pathname + (url.search || "");
const existing_cache = getCache({ key, paradigm: "html" });
if (existing_cache) {
const res_opts = {
headers: {
"Content-Type": "text/html",
"X-Bunext-Cache": "HIT",
},
};
return new Response(existing_cache, res_opts);
}
}
const componentRes = await grabPageComponent({
req,
});
if (componentRes instanceof Response) {
return componentRes;
}
return await generateWebPageResponseFromComponentReturn({
...componentRes,
});
}
catch (error) {
logBuildErrorsOnce([
{
text: `Error Handling Web Page: ${error?.message || String(error)}`,
},
], (line) => log.error(line));
const componentRes = await grabPageErrorComponent({
error,
});
if (componentRes instanceof Response) {
return componentRes;
}
return await generateWebPageResponseFromComponentReturn(componentRes);
}
}