UNPKG

@paroicms/server

Version:
84 lines 3.15 kB
import { parseSqliteDateTime } from "@paroicms/internal-server-lib"; import { type } from "arktype"; import { mainDbSchemaName } from "../connector/db-init/db-constants.js"; export async function getDocItem(siteContext, tracker, documentId, options = {}) { const query = siteContext.cn("PaDocument as d"); querySelectDocValues(query, { omitId: true }); query .innerJoin("PaLNode as l", { "l.nodeId": "d.nodeId", "l.language": "d.language", }) .innerJoin("PaNode as n", "n.id", "d.nodeId") .where({ "d.nodeId": documentId.nodeId, "d.language": documentId.language, }); if (!options.forPreview) { query.where("l.ready", 1).whereRaw("n.publishDate <= current_timestamp"); } const row = await query.first(); tracker.trackAccess(mainDbSchemaName, "PaDocument", "read"); if (!row) { if (options.allowUndef) return; throw new Error(`unknown document '${documentId.language}:${documentId.nodeId}'`); } return formatDocValues(row, { ...documentId, forPreview: options.forPreview }); } export function querySelectDocValues(query, { omitId } = {}) { if (!omitId) { query.select("n.id as nodeId"); } query.select("n.typeName", "n.relativeId", "n.publishDate", "l.updatedAt", "d.title", "d.slug", "d.metaDescription", "d.metaKeywords", "d.overrideLanguage"); } const DocValuesRowAT = type({ typeName: "string", nodeId: "number|string", language: "string", relativeId: "string", publishDate: "Date|string|number|null", updatedAt: "Date|string|number|null", title: "string|null", slug: "string|null", metaDescription: "string|null", metaKeywords: "string|null", overrideLanguage: "string|null", "+": "reject", }); export function formatDocValues(row, { language, nodeId, typeName, forPreview, } = {}) { const completed = { ...row }; if (language) completed.language = language; if (nodeId) completed.nodeId = nodeId; if (typeName) completed.typeName = typeName; const validated = DocValuesRowAT.assert(completed); let publishDate; if (validated.publishDate) { publishDate = parseSqliteDateTime(validated.publishDate).toISOString(); } else if (forPreview) { publishDate = new Date().toISOString(); } else { throw new Error(`missing publishDate in document ${validated.nodeId}:${validated.language}`); } return { type: validated.typeName, nodeId: String(validated.nodeId), language: validated.language, relativeId: validated.relativeId, publishDate, updatedAt: validated.updatedAt ? parseSqliteDateTime(validated.updatedAt).toISOString() : publishDate, title: validated.title ?? undefined, slug: validated.slug ?? undefined, metaDescription: validated.metaDescription ?? undefined, metaKeywords: validated.metaKeywords ?? undefined, overrideLanguage: validated.overrideLanguage ?? undefined, }; } //# sourceMappingURL=doc-values.queries.js.map