@paroicms/server
Version:
The ParoiCMS server
87 lines • 3.35 kB
JavaScript
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