@paroicms/server
Version:
The ParoiCMS server
73 lines • 3.07 kB
JavaScript
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 { makeDetachedPublicPayload } 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: makeDetachedPublicPayload(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