UNPKG

@paroicms/server

Version:
66 lines 3 kB
import { getDocumentTypeByName, } from "@paroicms/internal-anywhere-lib"; import { createSimpleTranslator } from "@paroicms/public-server-lib"; import { manageClusterRoutingDocuments } from "../../admin-backend/routing-cluster/cluster-management.js"; import { mainDbSchemaName } from "./db-constants.js"; import { createNode } from "./init-node-queries.js"; export async function initializeSiteStructure(cn, siteSchema, logger, fqdn) { logger.info(`Initialize '${mainDbSchemaName}' database with minimal structure…`); const schemaI18n = createSimpleTranslator({ labels: siteSchema.l10n, logger }); const homeNodeId = await createInitialSiteStructure(cn, siteSchema, schemaI18n); await autoCreateCluster({ cn, siteSchema, logger, fqdn }, { nodeId: homeNodeId, documentType: siteSchema.nodeTypes.home, }); } async function createInitialSiteStructure(cn, siteSchema, schemaI18n) { const documentType = siteSchema.nodeTypes.home; const makeTitle = (language) => schemaI18n.translate({ key: `nodeTypes.${documentType.typeName}.label`, language, defaultValue: documentType.typeName, }); const homeNodeId = await cn.transaction(async (tx) => { const siteNode = await createNode(siteSchema, tx, { typeName: "_site", }); const homeNode = await createNode(siteSchema, tx, { typeName: documentType.typeName, parentId: siteNode.id, }); for (const language of siteSchema.languages) { await tx("PaLNode").insert({ language, nodeId: homeNode.id, ready: true }); await tx("PaDocument").insert({ language, nodeId: homeNode.id, title: makeTitle(language) }); } return homeNode.id; }); return homeNodeId; } export async function autoCreateCluster(siteContext, rootNode) { if (rootNode.documentType.cluster?.autoCreate && rootNode.documentType.routingChildren && rootNode.documentType.routingChildren.length > 0) { const request = buildClusterManagementRequest(siteContext.siteSchema, rootNode); await manageClusterRoutingDocuments(siteContext, request); } } function buildClusterManagementRequest(siteSchema, rootNode) { const { nodeId, documentType } = rootNode; const children = documentType.routingChildren?.map((typeName) => buildClusterManagementNode(siteSchema, typeName)); return { rootTypeName: documentType.typeName, rootNodeId: nodeId, children, }; } function buildClusterManagementNode(siteSchema, typeName) { const nodeType = getDocumentTypeByName(siteSchema, typeName); const node = { typeName, action: "insert", }; if (nodeType.routingChildren && nodeType.routingChildren.length > 0) { node.children = nodeType.routingChildren.map((childTypeName) => buildClusterManagementNode(siteSchema, childTypeName)); } return node; } //# sourceMappingURL=populate-routing-documents.js.map