UNPKG

@paroicms/connector

Version:

An API to help build management tools for ParoiCMS instances

71 lines 3.02 kB
import { getRoutingDocumentTypeByName } from "@paroicms/internal-anywhere-lib"; import { createSimpleTranslator, } from "@paroicms/public-server-lib"; import { mainDbSchemaName } from "./db-constants.js"; import { createNode } from "./init-node-queries.js"; export async function populateRoutingDocuments(cn, siteSchema, logger) { logger.info(`Populate '${mainDbSchemaName}' database with initial data…`); const schemaI18n = createSimpleTranslator({ labels: siteSchema.l10n, logger }); await populateInitialData(cn, siteSchema, schemaI18n); } /** * @returns the `homeNodeId`. */ async function populateInitialData(cn, siteSchema, schemaI18n) { const homeNodeId = await cn.transaction(async (tx) => { const siteNode = await createNode(siteSchema, tx, { depth: -1, typeName: "_site", }); const documentType = siteSchema.nodeTypes.home; const homeNode = await createNode(siteSchema, tx, { depth: 0, typeName: documentType.typeName, parentId: siteNode.id, }); const makeTitle = (language) => schemaI18n.translate({ key: `nodeTypes.${documentType.typeName}.label`, language, defaultValue: documentType.typeName, }); await populateRoutingDocumentLNodes(tx, { nodeId: homeNode.id, languages: siteSchema.languages, withDocument: !documentType.redirectTo, makeTitle, }); await populateChildRoutingDocuments(tx, siteSchema, documentType, homeNode.id, 1, schemaI18n); return homeNode.id; }); return homeNodeId; } async function populateChildRoutingDocuments(cn, siteSchema, parentType, parentNodeId, childDepth, schemaI18n) { for (const typeName of parentType.routingChildren ?? []) { const documentType = getRoutingDocumentTypeByName(siteSchema, typeName); const node = await createNode(siteSchema, cn, { parentId: parentNodeId, depth: childDepth, typeName, }); const makeTitle = (language) => schemaI18n.translate({ key: `nodeTypes.${documentType.typeName}.label`, language, defaultValue: documentType.typeName, }); await populateRoutingDocumentLNodes(cn, { nodeId: node.id, languages: siteSchema.languages, withDocument: !documentType.redirectTo, makeTitle, }); await populateChildRoutingDocuments(cn, siteSchema, documentType, node.id, childDepth + 1, schemaI18n); } } async function populateRoutingDocumentLNodes(cn, { nodeId, languages, withDocument, makeTitle, }) { for (const language of languages) { await cn("PaLNode").insert({ language, nodeId, ready: true }); if (withDocument) { await cn("PaDocument").insert({ language, nodeId, title: makeTitle(language) }); } } } //# sourceMappingURL=populate-routing-documents.js.map