UNPKG

@paroicms/server

Version:
72 lines 3.09 kB
import { encodeLNodeId, parseLNodeId } from "@paroicms/public-anywhere-lib"; import { assignLoadDescriptor } from "@paroicms/public-server-lib"; import { type } from "arktype"; import { makeCacheDependencyKey } from "../common/text-cache.js"; import { mainDbSchemaName } from "../connector/db-init/db-constants.js"; import { createLiquidDrop } from "../liquidjs-tools/liquidjs-drop.js"; import { getHomeUrl, getUrlOfDocument } from "../rendered-site/page-route/make-url.js"; export function makeBasicTranslationsPayload(siteContext) { return siteContext.siteSchema.languages.map((language) => { return assignLoadDescriptor({ language, languageLabel: siteContext.siteSchema.languageLabels[language], active: false, url: getHomeUrl(siteContext, language), }, { load: "one", nodeKind: "document", descriptorName: "id", documentId: parseLNodeId(siteContext.homeRoutingCluster.lNodeIds[language]), }); }); } export async function loadTranslationsAsDrops(renderingContext, documentId) { const { siteContext } = renderingContext; const { nodeId } = documentId; const existingLanguages = await getExistingLanguagesOf(siteContext, renderingContext.tracker, nodeId); const translations = []; for (const language of siteContext.siteSchema.languages) { const exists = existingLanguages.has(language); const itemId = { nodeId, language }; translations.push(createLiquidDrop(renderingContext, { renderingCacheKey: `translation:${encodeLNodeId(itemId)}`, values: { language, languageLabel: siteContext.siteSchema.languageLabels[language], active: language === documentId.language, url: exists ? async () => await getUrlOfDocument(siteContext, renderingContext.tracker, { nodeId, language, }) : getHomeUrl(siteContext, language), }, }, { loadDescriptor: { load: "one", nodeKind: "document", descriptorName: "id", documentId, }, })); if (language !== documentId.language) { renderingContext.addDependencyKey(makeCacheDependencyKey({ documentId: itemId })); } } renderingContext.addDependencyKey(makeCacheDependencyKey({ nodeId })); return translations; } const TranslationLanguageRowAT = type({ language: "string", "+": "reject", }); async function getExistingLanguagesOf(siteContext, tracker, nodeId) { const documents = await siteContext .cn("PaLNode as l") .select("l.language") .where("l.nodeId", nodeId) .where("l.ready", 1); tracker.trackAccess(mainDbSchemaName, "PaLNode", "read"); return new Set(documents.map((item) => TranslationLanguageRowAT.assert(item).language)); } //# sourceMappingURL=translations.queries.js.map