UNPKG

@paroicms/server

Version:
87 lines 3.35 kB
import { formatDocValues } from "../../rendering-payload/doc-values.queries.js"; export async function fetchRawDocPayload(siteContext, parsedRoute) { const query = buildRawDocPayloadQuery(siteContext, parsedRoute); const rows = await query; if (!rows || rows.length === 0) return; return formatDocValues(rows[0], { language: parsedRoute.language, }); } function buildRawDocPayloadQuery(siteContext, parsedRoute) { const { cn } = siteContext; let query = cn("PaNode as n0") .innerJoin("PaLNode as l0", { "n0.id": "l0.nodeId", "l0.language": cn.raw("?", [parsedRoute.language]), }) .where("n0.id", siteContext.homeRoutingCluster.nodeId) .whereRaw("n0.publishDate <= current_timestamp") .where("l0.ready", 1); let prev = 0; let hasSlugLookup = false; for (const document of parsedRoute.documentHierarchy.slice(1)) { const cur = prev + 1; if (document.entryKind === "routing") { query = query.innerJoin(`PaNode as n${cur}`, { [`n${prev}.id`]: `n${cur}.parentId`, [`n${cur}.typeName`]: cn.raw("?", [document.documentType.typeName]), }); } else if (document.lookupKind === "relativeId") { query = query .innerJoin(`PaNode as n${cur}`, { [`n${prev}.id`]: `n${cur}.parentId`, [`n${cur}.relativeId`]: cn.raw("?", [document.relativeId]), }) .whereIn(`n${cur}.typeName`, document.candidateTypes.map((t) => t.typeName)); } else { hasSlugLookup = true; query = query .innerJoin(`PaNode as n${cur}`, { [`n${prev}.id`]: `n${cur}.parentId`, }) .innerJoin(`PaDocument as sd${cur}`, { [`n${cur}.id`]: `sd${cur}.nodeId`, [`sd${cur}.language`]: cn.raw("?", [parsedRoute.language]), [`sd${cur}.slug`]: cn.raw("?", [document.slug]), }) .whereIn(`n${cur}.typeName`, document.candidateTypes.map((t) => t.typeName)); } query = query .innerJoin(`PaLNode as l${cur}`, { [`n${cur}.id`]: `l${cur}.nodeId`, [`l${cur}.language`]: cn.raw("?", [parsedRoute.language]), }) .whereRaw(`n${cur}.publishDate <= current_timestamp`) .where(`l${cur}.ready`, 1); prev = cur; } query = query.select([ `n${prev}.typeName as typeName`, `n${prev}.id as nodeId`, `n${prev}.relativeId as relativeId`, `n${prev}.publishDate as publishDate`, `l${prev}.updatedAt as updatedAt`, ]); if (!parsedRoute.redirectTo) { query = query .select([ "d.title as title", "d.slug as slug", "d.metaDescription as metaDescription", "d.metaKeywords as metaKeywords", "d.overrideLanguage as overrideLanguage", ]) .innerJoin("PaDocument as d", { [`n${prev}.id`]: "d.nodeId", [`l${prev}.language`]: "d.language", }); } if (hasSlugLookup) { query = query.orderBy(`n${prev}.id`, "asc").limit(1); } return query; } //# sourceMappingURL=raw-document-payload.js.map