UNPKG

@paroicms/server

Version:
60 lines 2.98 kB
import { createTracker } from "@paroicms/internal-server-lib"; import { render404Html, serveTextFromCacheOr } from "../common/serve-text-or.js"; import { makeCacheKey } from "../common/text-cache.js"; import { trackerReportToMessage } from "../common/tracker-report.js"; import { serve301Redirect } from "../express/http-helpers.js"; import { parsePageRoute } from "./page-route/page-route-parser.js"; import { generateDocumentHtml } from "./serve-document/serve-document.js"; import { serveMultilingualIndexPage } from "./serve-index-page.js"; export async function siteRouterReqHandler(siteContext, httpContext) { const { req } = httpContext; if (req.path === "/" && siteContext.siteSchema.languageRoutingMode === "prefixAll") { const tracker = createTracker(); await serveMultilingualIndexPage(siteContext, httpContext, tracker); siteContext.logger.stats(trackerReportToMessage(tracker.toReport(), `serve ${req.relativeUrl}`)); return true; } const parsedRoute = parsePageRoute(siteContext, req.path); if (!parsedRoute) return false; const tracker = createTracker(); await serveDocument(siteContext, httpContext, parsedRoute, tracker); siteContext.logger.stats(trackerReportToMessage(tracker.toReport(), `serve ${req.relativeUrl}`)); return true; } async function serveDocument(siteContext, httpContext, parsedRoute, tracker) { const { req } = httpContext; const cacheKeyWithQuery = makeCacheKey(siteContext.logger, { kind: "html", url: req.relativeUrl, }); const cacheKeyWithPath = makeCacheKey(siteContext.logger, { kind: "html", url: req.path }); const serveOr = serveTextFromCacheOr(siteContext, httpContext, tracker, { cacheKey: [cacheKeyWithQuery, cacheKeyWithPath], }); if (await serveOr.serveFromCache()) return; const redirectCacheKey = makeCacheKey(siteContext.logger, { kind: "redirect", urlKey: parsedRoute.urlCacheKey, }); const cacheRedirect = await siteContext.textCache.getCacheValue(redirectCacheKey, tracker); if (cacheRedirect && cacheRedirect.value !== req.relativeUrl) { return serve301Redirect(httpContext, cacheRedirect.value); } const generated = await generateDocumentHtml(siteContext, httpContext, { parsedRoute, cacheKeyWithQuery, cacheKeyWithPath }, tracker); if (generated.status === 301) { await siteContext.textCache.setCacheValue({ cacheKey: redirectCacheKey, dependencyKeys: generated.dependencyKeys, value: generated.url, }, tracker); return serve301Redirect(httpContext, generated.url); } if (generated.status === 404) { await render404Html(siteContext, httpContext, { language: parsedRoute.language }); return; } await serveOr.putInCacheAndServe(generated.html, generated.dependencyKeys, generated.cacheKey); } //# sourceMappingURL=site-router.req-handler.js.map