UNPKG

@entro314labs/starlight-document-converter

Version:

A comprehensive document converter for Astro Starlight that transforms various document formats into Starlight-compatible Markdown with proper frontmatter

173 lines (171 loc) 5.48 kB
import { PluginIntegrationHelper, registerBuiltInPlugins } from "./chunk-C7LTCQM5.js"; import { markdownProcessor } from "./chunk-KMYKM5T4.js"; import { contentQualityValidator } from "./chunk-X2OVO7PR.js"; import { DefaultPluginRegistry, pluginRegistry } from "./chunk-MMSVNVDP.js"; import { DocumentConverter, detectStarlightConfig, getRecommendedInputDirs, isStarlightProject } from "./chunk-HMTAMXXQ.js"; import { ContentAnalyzer } from "./chunk-3YZ5TT75.js"; import { FrontmatterRepair } from "./chunk-QAOV4ICX.js"; import { jsonProcessor } from "./chunk-HRDYKXAM.js"; import { LinkImageProcessor } from "./chunk-HLRP77HC.js"; import { markdownEnhancer } from "./chunk-7A3BG2QE.js"; import { TocGenerator } from "./chunk-IDQGXGRI.js"; // src/index.ts import { default as default2 } from "mammoth"; import { default as default3 } from "turndown"; // src/integration.ts import { watch } from "fs"; import { resolve } from "path"; function starlightDocumentConverter(userConfig = {}) { let config; return { name: "starlight-document-converter", hooks: { "astro:config:setup": ({ config: astroConfig, logger }) => { const projectRoot = astroConfig.root.pathname; const starlightConfig = detectStarlightConfig(projectRoot); const isStarlight = isStarlightProject(projectRoot); if (!isStarlight) { logger.warn( "Starlight not detected in this project. Document converter may not work as expected." ); } config = { enabled: userConfig.enabled ?? true, watch: userConfig.watch ?? false, inputDirs: userConfig.inputDirs || getRecommendedInputDirs(projectRoot, starlightConfig), converter: { outputDir: userConfig.converter?.outputDir || starlightConfig.docsDir, preserveStructure: true, generateTitles: true, generateDescriptions: true, addTimestamps: false, defaultCategory: "documentation", verbose: false, dryRun: false, categoryPatterns: {}, tagPatterns: {}, ignorePatterns: [], ...userConfig.converter } }; if (!config.enabled) { logger.info("Document converter disabled"); return; } logger.info("Setting up Starlight Document Converter"); logger.info(`Detected content directory: ${starlightConfig.docsDir}`); const converter = new DocumentConverter(config.converter); Promise.all( config.inputDirs.map(async (dir) => { const fullPath = resolve(astroConfig.root.pathname, dir); try { const results = await converter.convertDirectory(fullPath); const successful = results.filter((r) => r.success).length; const failed = results.filter((r) => !r.success).length; if (successful > 0 || failed > 0) { logger.info( `Converted ${successful} documents from ${dir}${failed > 0 ? ` (${failed} failed)` : ""}` ); } } catch (error) { logger.warn(`Could not process directory ${dir}: ${error}`); } }) ).catch((error) => { logger.error(`Document conversion error: ${error}`); }); if (config.watch) { config.inputDirs.forEach((dir) => { const fullPath = resolve(astroConfig.root.pathname, dir); try { const watcher = watch( fullPath, { recursive: true }, (eventType, filename) => handleFileChange(eventType, filename, fullPath, converter, logger) ); logger.info(`Watching ${dir} for document changes`); process.on("SIGINT", () => watcher.close()); process.on("SIGTERM", () => watcher.close()); } catch (error) { logger.warn(`Could not watch directory ${dir}: ${error}`); } }); } }, "astro:config:done": ({ logger }) => { if (config?.enabled) { logger.info("Starlight Document Converter ready"); if (config.watch) { logger.info(`Watching directories: ${config.inputDirs.join(", ")}`); } } } } }; } async function handleFileChange(eventType, filename, fullPath, converter, logger) { if (!filename || eventType !== "change") { return; } const filePath = resolve(fullPath, filename); const ext = filename.split(".").pop()?.toLowerCase(); if (["docx", "doc", "txt", "html", "htm", "md", "rtf"].includes(ext || "")) { logger.info(`Converting changed file: ${filename}`); try { await converter.convertFile(filePath); logger.info(`\u2705 Converted: ${filename}`); } catch (error) { logger.error(`\u274C Failed to convert ${filename}: ${error}`); } } } export { ContentAnalyzer, DefaultPluginRegistry, DocumentConverter, FrontmatterRepair, LinkImageProcessor, PluginIntegrationHelper, TocGenerator, default3 as TurndownService, contentQualityValidator, starlightDocumentConverter as default, jsonProcessor, default2 as mammoth, markdownEnhancer, markdownProcessor, pluginRegistry, registerBuiltInPlugins, starlightDocumentConverter }; //# sourceMappingURL=index.js.map