Core plugin factory function and comprehensive option validation system for configuring the Docusaurus pages plugin with customizable behavior and validation.
Creates a Docusaurus plugin instance for handling standalone pages with full configuration support.
/**
* Main plugin factory function that creates the content pages plugin instance
* @param context - Docusaurus load context with site configuration
* @param options - Plugin configuration options
* @returns Promise resolving to configured plugin instance
*/
export default function pluginContentPages(
context: LoadContext,
options: PluginOptions,
): Promise<Plugin<LoadedContent | null>>;Usage Example:
import type { LoadContext } from "@docusaurus/types";
import pluginContentPages from "@docusaurus/plugin-content-pages";
const context: LoadContext = {
siteDir: '/path/to/site',
siteConfig: { /* site config */ },
// ... other context properties
};
const plugin = await pluginContentPages(context, {
path: 'src/pages',
routeBasePath: '/',
include: ['**/*.{js,jsx,ts,tsx,md,mdx}'],
exclude: ['**/_*.{js,jsx,ts,tsx,md,mdx}'],
mdxPageComponent: '@theme/MDXPage',
showLastUpdateTime: true,
editUrl: 'https://github.com/user/repo/edit/main/',
});Validates and normalizes plugin options using comprehensive Joi schema validation.
/**
* Validates and normalizes plugin options
* @param args - Validation context with options to validate
* @returns Validated and normalized plugin options
*/
export function validateOptions(
args: OptionValidationContext<Options | undefined, PluginOptions>
): PluginOptions;Usage Example:
import { validateOptions } from "@docusaurus/plugin-content-pages";
import { normalizePluginOptions } from "@docusaurus/utils-validation";
const validatedOptions = validateOptions({
validate: normalizePluginOptions,
options: {
path: 'custom/pages',
routeBasePath: '/pages/',
showLastUpdateTime: true,
},
});Comprehensive default configuration that can be used as a reference or starting point.
const DEFAULT_OPTIONS: PluginOptions = {
path: 'src/pages',
routeBasePath: '/',
include: ['**/*.{js,jsx,ts,tsx,md,mdx}'],
exclude: [
'**/_*.{js,jsx,ts,tsx,md,mdx}',
'**/_*/**',
'**/*.test.{js,jsx,ts,tsx}',
'**/__tests__/**',
],
mdxPageComponent: '@theme/MDXPage',
remarkPlugins: [],
rehypePlugins: [],
recmaPlugins: [],
beforeDefaultRehypePlugins: [],
beforeDefaultRemarkPlugins: [],
admonitions: true,
showLastUpdateTime: false,
showLastUpdateAuthor: false,
editLocalizedFiles: false,
};interface PathRouteOptions {
/** Filesystem path to pages content, relative to site directory */
path: string;
/** URL route base path for generated pages */
routeBasePath: string;
/** File patterns to include when scanning for pages */
include: string[];
/** File patterns to exclude when scanning for pages */
exclude: string[];
}interface ComponentDisplayOptions {
/** React component used to render MDX pages */
mdxPageComponent: string;
/** Show last update timestamp on pages */
showLastUpdateTime: boolean;
/** Show last update author on pages */
showLastUpdateAuthor: boolean;
}interface EditUrlOptions {
/** Edit URL string template or function for generating edit links */
editUrl?: string | EditUrlFunction;
/** Enable editing of localized files */
editLocalizedFiles?: boolean;
}
type EditUrlFunction = (editUrlParams: {
/** Pages directory path relative to site directory */
pagesDirPath: string;
/** Individual page path relative to pages directory */
pagesPath: string;
/** Generated permalink for the page */
permalink: string;
/** Current locale identifier */
locale: string;
}) => string | undefined;interface MDXProcessingOptions {
/** Remark plugins for Markdown processing */
remarkPlugins: any[];
/** Rehype plugins for HTML processing */
rehypePlugins: any[];
/** Recma plugins for MDX component processing */
recmaPlugins: any[];
/** Rehype plugins to run before default plugins */
beforeDefaultRehypePlugins: any[];
/** Remark plugins to run before default plugins */
beforeDefaultRemarkPlugins: any[];
/** Admonition support configuration */
admonitions: boolean | object;
}MDX Options Usage Example:
const options = {
path: 'src/pages',
remarkPlugins: [
require('remark-math'),
[require('remark-footnotes'), { inlineNotes: true }],
],
rehypePlugins: [
require('rehype-katex'),
],
admonitions: {
keywords: ['note', 'tip', 'info', 'caution', 'danger'],
},
};