UNPKG

conflutora

Version:

Provider to convert and publish Antora documentation on Confluence

69 lines 3.74 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProviderService = void 0; const vinyl_1 = __importDefault(require("vinyl")); const node_path_1 = __importDefault(require("node:path")); const promises_1 = __importDefault(require("node:fs/promises")); const enum_js_1 = require("../common/enum.js"); const confluence_client_js_1 = require("../clients/confluence.client.js"); const html_parser_service_js_1 = require("./html-parser.service.js"); const Logger_js_1 = require("../utils/Logger.js"); const Page_js_1 = require("../entities/Page.js"); const page_service_js_1 = require("./page.service.js"); const SiteStructure_js_1 = require("../entities/SiteStructure.js"); const hash_util_js_1 = require("../utils/hash.util.js"); const config_service_js_1 = require("../config/config.service.js"); class ProviderService { logger = new Logger_js_1.Logger(this.constructor.name); siteStructure = new SiteStructure_js_1.SiteStructure(); htmlParserService = new html_parser_service_js_1.HtmlParserService(); handle = async (files) => { for (const file of files) { const filePath = node_path_1.default.resolve(file.base, file.path); const fileContent = await promises_1.default.readFile(filePath, 'utf-8'); const bufferFile = new vinyl_1.default({ path: file.path, contents: Buffer.from(fileContent) }); this.buildSiteStructure(bufferFile); } const rootPage = this.siteStructure.getRootPage(); const uniqueProjectId = this.generateUniqueProjectId(rootPage?.parent ?? 'unknown'); const confluenceClient = new confluence_client_js_1.ConfluenceClient(this.htmlParserService, uniqueProjectId); const pageService = new page_service_js_1.PageService(confluenceClient, this.siteStructure); this.logger.info(`[${uniqueProjectId}] Processing ${this.siteStructure.getAllPages().length} pages`); await pageService.publishPages(); this.logger.info(`[${uniqueProjectId}] All pages processed`); }; generateUniqueProjectId = (projectName) => { const spaceKey = config_service_js_1.configService.get('confluence.spaceKey'); const ancestorId = config_service_js_1.configService.get('confluence.ancestorId') ?? '42'; const uniqueId = `${spaceKey}-${ancestorId}-${projectName}`; return (0, hash_util_js_1.calculateHash)(uniqueId).slice(1, 5); }; buildSiteStructure = (file) => { const filePath = file.path; if (!filePath.endsWith('.html') || filePath.includes(enum_js_1.ANTORA_DEFAULTS.NOT_FOUND_PAGE)) { this.logger.debug(`Skipping ${filePath}`); return; } const parts = filePath.split('/'); const fileName = parts.pop(); const parentDir = parts.join('/'); if (!fileName) { this.logger.error(`Error extracting file name from ${filePath}`); return; } const fileContents = this.htmlParserService.extractBodyContent(file.contents.toString()); const pageTitle = this.htmlParserService.getPageTitle(fileContents); if (!pageTitle) { this.logger.debug(`No title found for ${fileName}`); return; } const page = new Page_js_1.Page(fileName, pageTitle, parentDir, fileContents); this.siteStructure.addPage(page, parentDir); // Use directory path as parent identifier this.logger.debug(`Page added: ${pageTitle} with ID ${page.id}`); }; } exports.ProviderService = ProviderService; //# sourceMappingURL=provider.service.js.map