@paroicms/server
Version:
The ParoiCMS server
120 lines • 4.31 kB
JavaScript
import { encodeLNodeId } from "@paroicms/public-anywhere-lib";
import { type } from "arktype";
export const MinimalDocumentInfoRowAT = type({
nodeId: "number",
parentId: "number|null",
relativeId: "string",
typeName: "string",
publishDate: "string|null",
ready: "number",
language: "string",
title: "string|null",
slug: "string|null",
"+": "reject",
}).pipe((r) => {
if (r.parentId === null) {
throw new Error(`Document "${r.nodeId}" has no parent node`);
}
const nodeId = String(r.nodeId);
return {
documentId: encodeLNodeId({ nodeId, language: r.language }),
nodeId,
parentNodeId: String(r.parentId),
relativeId: r.relativeId,
typeName: r.typeName,
publishDate: r.publishDate ?? undefined,
ready: Boolean(r.ready),
language: r.language,
title: r.title ?? undefined,
slug: r.slug ?? undefined,
};
});
export const MinimalPartInfoRowAT = type({
nodeId: "number",
parentId: "number|null",
relativeId: "string",
typeName: "string",
listName: "string",
publishDate: "string|null",
ready: "number",
language: "string",
"+": "reject",
}).pipe((r) => {
if (r.parentId === null) {
throw new Error(`Part "${r.nodeId}" has no parent node`);
}
const nodeId = String(r.nodeId);
return {
partId: encodeLNodeId({ nodeId, language: r.language }),
nodeId,
parentNodeId: String(r.parentId),
relativeId: r.relativeId,
typeName: r.typeName,
listName: r.listName,
publishDate: r.publishDate ?? undefined,
ready: Boolean(r.ready),
language: r.language,
};
});
export async function loadRelatedTerms(siteContext, labelingFields, nodeId, language) {
const { cn } = siteContext;
const relatedTerms = {};
for (const fieldType of labelingFields) {
const termRows = await cn("PaFieldLabeling as fl")
.innerJoin("PaNode as tn", "tn.id", "fl.termId")
.innerJoin("PaLNode as tl", {
"tl.nodeId": "tn.id",
"tl.language": cn.raw("?", [language]),
})
.innerJoin("PaDocument as td", {
"td.nodeId": "tn.id",
"td.language": cn.raw("?", [language]),
})
.select("tn.id as nodeId", "tn.parentId", "tn.relativeId", "tn.typeName", "tn.publishDate", "tl.ready", "tl.language", "td.title", "td.slug")
.where("fl.nodeId", nodeId)
.where("fl.field", fieldType.name)
.orderBy("fl.orderNum", "asc");
if (termRows.length === 0)
continue;
const terms = termRows.map(MinimalDocumentInfoRowAT.assert);
relatedTerms[fieldType.name] = {
taxonomyTypeName: fieldType.taxonomy,
terms,
};
}
return relatedTerms;
}
export async function loadMinimalDocumentInfo(siteContext, documentId) {
const { cn } = siteContext;
const row = await cn("PaNode as n")
.innerJoin("PaLNode as l", {
"l.nodeId": "n.id",
"l.language": cn.raw("?", [documentId.language]),
})
.innerJoin("PaDocument as d", {
"d.nodeId": "n.id",
"d.language": cn.raw("?", [documentId.language]),
})
.select("n.id as nodeId", "n.parentId", "n.relativeId", "n.typeName", "n.publishDate", "l.ready", "l.language", "d.title", "d.slug")
.where("n.id", documentId.nodeId)
.first();
if (!row)
throw new Error(`Document "${documentId.nodeId}" not found`);
return MinimalDocumentInfoRowAT.assert(row);
}
export async function loadMinimalPartInfo(siteContext, partId) {
const { cn } = siteContext;
const row = await cn("PaNode as n")
.innerJoin("PaLNode as l", {
"l.nodeId": "n.id",
"l.language": cn.raw("?", [partId.language]),
})
.innerJoin("PaPartNode as p", "p.nodeId", "n.id")
.select("n.id as nodeId", "n.parentId", "n.relativeId", "n.typeName", "p.listName", "n.publishDate", "l.ready", "l.language")
.where("n.id", partId.nodeId)
.first();
if (!row)
throw new Error(`Part "${partId.nodeId}" not found`);
return MinimalPartInfoRowAT.assert(row);
}
//# sourceMappingURL=document-info.queries.js.map