@signalwire/docusaurus-plugin-llms-txt
Version:
Generate Markdown versions of Docusaurus HTML pages and an llms.txt index file
86 lines (85 loc) • 3.86 kB
JavaScript
/**
* Public type definitions for docusaurus-plugin-llms-txt
* Only exports types that plugin users need to configure and use the plugin
*/
import { Joi } from '@docusaurus/utils-validation';
import { DEFAULT_CONTENT_SELECTORS, DEFAULT_DEPTH, PLUGIN_NAME, } from '../constants';
export { isPluginError } from '../errors';
// ============================================================================
// VALIDATION SCHEMA
// ============================================================================
/**
* Joi schema for plugin options validation
* @internal - This is used by Docusaurus framework for options validation
*/
export const pluginOptionsSchema = Joi.object({
// Plugin metadata (injected by Docusaurus)
id: Joi.string().default(PLUGIN_NAME),
// Content processing options
content: Joi.object({
// File generation
enableMarkdownFiles: Joi.boolean().default(true),
enableLlmsFullTxt: Joi.boolean().default(false),
relativePaths: Joi.boolean().default(true),
// Content filtering
includeBlog: Joi.boolean().default(false),
includePages: Joi.boolean().default(false),
includeDocs: Joi.boolean().default(true),
includeVersionedDocs: Joi.boolean().default(true),
includeGeneratedIndex: Joi.boolean().default(true),
excludeRoutes: Joi.array().items(Joi.string()).default([]),
// Content extraction
contentSelectors: Joi.array()
.items(Joi.string())
.min(1)
.default([...DEFAULT_CONTENT_SELECTORS]),
routeRules: Joi.array()
.items(Joi.object({
route: Joi.string().required(),
depth: Joi.number().integer().min(1).max(5),
contentSelectors: Joi.array().items(Joi.string()),
categoryName: Joi.string(),
includeOrder: Joi.array().items(Joi.string()),
}))
.default([]),
// Format options
remarkStringify: Joi.object().unknown(true).default({}),
remarkGfm: Joi.alternatives()
.try(Joi.boolean(), Joi.object().unknown(true))
.default(true),
rehypeProcessTables: Joi.boolean().default(true),
// Unified plugin system (standard unified.js formats)
beforeDefaultRehypePlugins: Joi.array()
.items(Joi.alternatives().try(Joi.function(), Joi.array().items(Joi.function(), Joi.any(), Joi.any()).min(1).max(3)))
.default([]),
rehypePlugins: Joi.array()
.items(Joi.alternatives().try(Joi.function(), Joi.array().items(Joi.function(), Joi.any(), Joi.any()).min(1).max(3)))
.default([]),
beforeDefaultRemarkPlugins: Joi.array()
.items(Joi.alternatives().try(Joi.function(), Joi.array().items(Joi.function(), Joi.any(), Joi.any()).min(1).max(3)))
.default([]),
remarkPlugins: Joi.array()
.items(Joi.alternatives().try(Joi.function(), Joi.array().items(Joi.function(), Joi.any(), Joi.any()).min(1).max(3)))
.default([]),
}).default({}),
// Structure options
depth: Joi.number().integer().min(1).max(5).default(DEFAULT_DEPTH),
enableDescriptions: Joi.boolean().default(true),
siteTitle: Joi.string().allow(''),
siteDescription: Joi.string().allow(''),
optionalLinks: Joi.array()
.items(Joi.object({
title: Joi.string().required(),
url: Joi.string().required(),
description: Joi.string(),
}))
.default([]),
includeOrder: Joi.array().items(Joi.string()).default([]),
// Environment options
runOnPostBuild: Joi.boolean().default(true),
// Logging configuration
onRouteError: Joi.string()
.valid('ignore', 'log', 'warn', 'throw')
.default('warn'),
logLevel: Joi.number().integer().min(0).max(3).default(1),
});