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