UNPKG

@paroicms/server

Version:
62 lines 2.87 kB
import { encodeLNodeId } from "@paroicms/public-anywhere-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"; import { createDocPayloadDrop } from "./create-doc-drop.js"; import { getDocItem } from "./doc-values.queries.js"; export function makeBasicTranslationsPayload(siteContext) { return siteContext.siteSchema.languages.map((language) => ({ language, languageLabel: siteContext.siteSchema.languageLabels[language], active: false, url: getHomeUrl(siteContext, 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), doc: exists ? async () => createDocPayloadDrop(renderingContext, await getDocItem(siteContext, renderingContext.tracker, itemId)) : undefined, }, })); 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 s") .select("s.language") .where("s.nodeId", nodeId) .where("s.ready", 1); tracker.trackAccess(mainDbSchemaName, "PaLNode", "read"); return new Set(documents.map((item) => TranslationLanguageRowAT.assert(item).language)); } //# sourceMappingURL=translations.queries.js.map