UNPKG

@paroicms/server

Version:
120 lines 4.31 kB
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