@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
JavaScript
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