UNPKG

@paroicms/server

Version:
48 lines 1.71 kB
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