UNPKG

@paroicms/site-generator-plugin

Version:

ParoiCMS Site Generator Plugin

116 lines (115 loc) 4.37 kB
import { dedupMessages } from "./content-helpers.js"; import { generateFieldSetContent, generateMultipleFieldSetContents, } from "./generate-fake-content.js"; export async function updateRoutingDocument(ctx, report, siteOptions, nodeOptions) { ctx.logger.debug(`[TASK] Updating routing document "${nodeOptions.nodeType.typeName}"…`); const { clusterNode, nodeType } = nodeOptions; const { fqdn, siteSchema, schemaI18n } = siteOptions; const content = await generateFieldSetContent(ctx, { nodeType, documentType: nodeType, siteSchema, schemaI18n, withTitle: false, llmTaskName: nodeType.kebabName, }, report); await ctx.service.connector.updateNodeContent(fqdn, { nodeId: clusterNode.nodeId, content: toRiDocumentContent(content, nodeType), }); for (const language of siteSchema.languages) { report.addId({ typeName: nodeType.typeName, id: { nodeId: clusterNode.nodeId, language, }, parentNodeId: undefined, }); } } export async function addRegularDocuments(ctx, report, siteOptions, nodeOptions) { ctx.logger.debug(`[TASK] Adding regular documents "${nodeOptions.nodeType.typeName}"…`); const { parentNodeId, nodeType, documentType } = nodeOptions; const { fqdn, siteSchema, schemaI18n } = siteOptions; const tolerateErrors = { errorMessages: [], }; const list = await generateMultipleFieldSetContents(ctx, { siteSchema, nodeType, documentType, schemaI18n, count: getDefaultNodeContentCount(nodeType), withTitle: true, tolerateErrors, llmTaskName: nodeType.kebabName, }, report); const errorMessages = dedupMessages(tolerateErrors.errorMessages); if (errorMessages.length > 0) { ctx.logger.warn(`Error generating content for ${nodeType.typeName}:\n - ${errorMessages.join("\n - ")}`); } const insertedIds = await ctx.service.connector.addMultipleDocumentContents(fqdn, { parentNodeId, contents: list.map((content) => toRiDocumentContent(content, nodeType)), }); report.addId({ typeName: nodeType.typeName, id: insertedIds, parentNodeId }); } export async function addParts(ctx, report, siteOptions, nodeOptions) { ctx.logger.debug(`[TASK] Adding parts "${nodeOptions.nodeType.typeName}"…`); const { parentNodeId, nodeType, documentType } = nodeOptions; const { fqdn, siteSchema, schemaI18n } = siteOptions; const tolerateErrors = { errorMessages: [], }; const list = await generateMultipleFieldSetContents(ctx, { siteSchema, nodeType, documentType, schemaI18n, count: getDefaultNodeContentCount(nodeType), withTitle: true, tolerateErrors, llmTaskName: nodeType.kebabName, }, report); const errorMessages = dedupMessages(tolerateErrors.errorMessages); if (errorMessages.length > 0) { ctx.logger.warn(`Error generating content for ${nodeType.typeName}:\n - ${errorMessages.join("\n - ")}`); } const insertedIds = await ctx.service.connector.addMultiplePartContents(fqdn, { parentNodeId, contents: list.map((content) => toRiPartContent(content, nodeType)), }); report.addId({ typeName: nodeType.typeName, id: insertedIds, parentNodeId }); } function toRiDocumentContent(content, nodeType) { const { title, fields, featuredImage } = content; return { kind: "document", typeName: nodeType.typeName, title, featuredImage, fields, }; } function toRiPartContent(content, nodeType) { const { fields } = content; return { kind: "part", typeName: nodeType.typeName, fields, }; } function getDefaultNodeContentCount(nodeType) { if (nodeType.kind === "site") throw new Error("Cannot generate content for site node type"); if (nodeType.kind === "document") { if (nodeType.documentKind === "routing") return 1; if (nodeType.route === ":yyyy/:mm/:dd/:relativeId-:slug") return 14; // 4 return 8; // 2 } if (nodeType.kind === "part") return 8; // 2 throw new Error(`Unknown node type kind: ${nodeType.kind}`); }