UNPKG

@paroicms/server

Version:
73 lines 3.07 kB
import { createTracker } from "@paroicms/internal-server-lib"; import { serveTextContent } from "../express/http-helpers.js"; import { renderLiquidTemplate } from "../liquidjs-tools/liquidjs-rendering/render-liquidjs.js"; import { createRenderingContext } from "../liquidjs-tools/liquidjs-rendering/rendering-context.js"; import { makeDetachedTemplatePayload } from "../rendering-payload/make-public-payload.js"; import { makeCacheKey } from "./text-cache.js"; import { trackerReportToMessage } from "./tracker-report.js"; export function serveTextFromCacheOr(siteContext, httpContext, tracker, options) { const { cacheKey, contentType } = options; return { async serveFromCache() { const cacheVal = await siteContext.textCache.getCacheValue(cacheKey, tracker); if (!cacheVal) return false; serveTextContent(httpContext, { contentType, text: cacheVal.value, or304: cacheVal.resourceVersion ? { etag: cacheVal.resourceVersion, } : undefined, }); return true; }, async putInCacheAndServe(html, dependencyKeys, k) { const writeK = k ?? cacheKey; if (Array.isArray(writeK)) throw new Error("Missing 'cacheKey' parameter"); const cacheVal = await siteContext.textCache.setCacheValue({ cacheKey: writeK, dependencyKeys, value: html, }, tracker); serveTextContent(httpContext, { contentType, text: cacheVal.value, or304: cacheVal.resourceVersion ? { etag: cacheVal.resourceVersion } : undefined, }); }, }; } export async function render404Html(siteContext, httpContext, options) { const tracker = createTracker(); const cacheKey = makeCacheKey(siteContext.logger, { kind: "html", url: "404" }); let cacheVal = await siteContext.textCache.getCacheValue(cacheKey, tracker); if (!cacheVal) { const renderingContext = await createRenderingContext(siteContext, { cacheKey, language: options?.language, tracker, }); const html = await renderLiquidTemplate(renderingContext, { templateNames: ["404"], payload: makeDetachedTemplatePayload(renderingContext, { language: options?.language, urlQuery: httpContext.req.query, }), }); cacheVal = await siteContext.textCache.setCacheValue({ cacheKey, dependencyKeys: renderingContext.getDependencyKeys(), value: html, }, tracker); await renderingContext.close(); } serveTextContent(httpContext, { status: 404, text: cacheVal.value, }); siteContext.logger.stats(trackerReportToMessage(tracker.toReport(), `serve ${404}`)); } //# sourceMappingURL=serve-text-or.js.map