@paroicms/server
Version:
The ParoiCMS server
43 lines • 1.62 kB
JavaScript
import { assignLoadDescriptor } from "@paroicms/public-server-lib";
import { type } from "arktype";
import { makeCacheDependencyKey } from "../common/text-cache.js";
import { mainDbSchemaName } from "../connector/db-init/db-constants.js";
export async function getParentDocument(renderingContext, documentId) {
const { siteContext } = renderingContext;
const parentNode = await getParentNode(siteContext, renderingContext.tracker, documentId.nodeId);
if (!parentNode || parentNode.parentTypeName === "_site") {
return undefined;
}
const parentDocumentId = {
nodeId: parentNode.parentNodeId,
language: documentId.language,
};
renderingContext.addDependencyKey(makeCacheDependencyKey({ documentId: parentDocumentId }));
return assignLoadDescriptor({}, {
load: "one",
nodeKind: "document",
descriptorName: "id",
documentId: parentDocumentId,
});
}
const ParentNodeRowAT = type({
parentTypeName: "string",
parentId: "number",
"+": "reject",
}).pipe((r) => ({
parentTypeName: r.parentTypeName,
parentNodeId: String(r.parentId),
}));
async function getParentNode(siteContext, tracker, nodeId) {
const row = await siteContext
.cn("PaNode as n")
.select(["n2.typeName as parentTypeName", "n2.id as parentId"])
.where("n.id", nodeId)
.innerJoin("PaNode as n2", "n2.id", "n.parentId")
.first();
tracker.trackAccess(mainDbSchemaName, "PaNode", "read");
if (!row)
return;
return ParentNodeRowAT.assert(row);
}
//# sourceMappingURL=get-parent.queries.js.map