@paroicms/server
Version:
The ParoiCMS server
48 lines • 1.71 kB
JavaScript
import { type } from "arktype";
const ChildRowAT = type({
parentId: "number",
language: "string",
"+": "reject",
}).pipe((r) => ({
parentId: String(r.parentId),
language: r.language,
}));
export async function loadRegularChildrenLanguagesOfNodeIds(cn, siteSchema, nodeIds) {
const documentTypeNames = Object.values(siteSchema.nodeTypes)
.filter((nodeType) => nodeType.kind === "document" && nodeType.documentKind === "regular")
.map((nodeType) => nodeType.typeName);
if (nodeIds.length === 0 || documentTypeNames.length === 0)
return new Map();
const query = cn("PaNode as n")
.join("PaLNode as l", "l.nodeId", "n.id")
.select("n.parentId")
.select("l.language")
.whereIn("n.parentId", nodeIds)
.whereIn("n.typeName", documentTypeNames)
.distinct();
const rows = await query;
const result = new Map();
for (const row of rows) {
const child = ChildRowAT.assert(row);
const existing = result.get(child.parentId);
if (existing) {
existing.push(child.language);
}
else {
result.set(child.parentId, [child.language]);
}
}
return result;
}
export async function haveRegularChildren(cn, siteSchema, { nodeIds, languages }) {
const children = await loadRegularChildrenLanguagesOfNodeIds(cn, siteSchema, nodeIds);
if (!languages)
return children.size > 0;
for (const [_nodeId, childrenInLanguages] of children.entries()) {
if (languages.some((lang) => childrenInLanguages.includes(lang))) {
return true;
}
}
return false;
}
//# sourceMappingURL=cluster-validation.js.map