@paroicms/connector
Version:
An API to help build management tools for ParoiCMS instances
71 lines • 3.02 kB
JavaScript
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