44 lines
1.5 KiB
Plaintext
44 lines
1.5 KiB
Plaintext
const require_headers = require("./headers.cjs");
|
|
const require_ssr_server = require("./ssr-server.cjs");
|
|
let _tanstack_history = require("@tanstack/history");
|
|
//#region src/ssr/createRequestHandler.ts
|
|
function createRequestHandler({ createRouter, request, getRouterManifest }) {
|
|
return async (cb) => {
|
|
const router = createRouter();
|
|
let cbWillCleanup = false;
|
|
try {
|
|
require_ssr_server.attachRouterServerSsrUtils({
|
|
router,
|
|
manifest: await getRouterManifest?.()
|
|
});
|
|
const { url } = require_ssr_server.getNormalizedURL(request.url, "http://localhost");
|
|
const origin = require_ssr_server.getOrigin(request);
|
|
const history = (0, _tanstack_history.createMemoryHistory)({ initialEntries: [url.href.replace(url.origin, "")] });
|
|
router.update({
|
|
history,
|
|
origin: router.options.origin ?? origin
|
|
});
|
|
await router.load();
|
|
await router.serverSsr?.dehydrate();
|
|
const responseHeaders = getRequestHeaders({ router });
|
|
cbWillCleanup = true;
|
|
return cb({
|
|
request,
|
|
router,
|
|
responseHeaders
|
|
});
|
|
} finally {
|
|
if (!cbWillCleanup) router.serverSsr?.cleanup();
|
|
}
|
|
};
|
|
}
|
|
function getRequestHeaders(opts) {
|
|
const matchHeaders = opts.router.stores.matches.get().map((match) => match.headers);
|
|
const redirect = opts.router.stores.redirect.get();
|
|
if (redirect) matchHeaders.push(redirect.headers);
|
|
return require_headers.mergeHeaders({ "Content-Type": "text/html; charset=UTF-8" }, ...matchHeaders);
|
|
}
|
|
//#endregion
|
|
exports.createRequestHandler = createRequestHandler;
|
|
|
|
//# sourceMappingURL=createRequestHandler.cjs.map |