Configuration
Changing and extending the configuration.
Configuration can be done through options or by adding or customizing styles, components or other existing implementations.
Options
Configure the cwd
, pattern
and other options like rehype
/remark
plugins.
export type MDXBundlerServiceBaseOptions<T extends UnknownFrontMatter> = {
/**
* The working directory used as the base for resolving file paths and imports.
*/
cwd?: string;
/**
* An optional glob pattern to filter MDX files for processing.
*/
pattern?: string;
/**
* Options to customize the underlying MDX-bundler.
* See MDXBundlerOptions for supported configurations.
*/
mdxBundlerOptions?: MDXBundlerOptions;
/**
* An optional sorting function for organizing the returned MDX documents.
*/
sortProvider?: SortProvider<MDXBundlerServiceReturnType<T>>;
/**
* A function to generate a table of contents plugin.
* The plugin should fill the array with the headings of the document.
* @param headings An array of heading objects
* @returns A plugin object compatible with MDX bundler.
*/
tocPlugin?: (headings: DocHeading[]) => Plugin;
};
export type MDXBundlerServiceOptions<
TFrontmatter extends Record<keyof TFields, string>,
TOptions extends
MDXBundlerServiceBaseOptions<TFrontmatter> = MDXBundlerServiceBaseOptions<TFrontmatter>,
TFields extends FieldDefinitions<TFrontmatter, TOptions> = FieldDefinitions<
TFrontmatter,
TOptions
>,
> = TOptions & {
/**
* Defines custom fields in the MDX frontmatter to extract and make available during processing.
*/
fields?: TFields;
/**
* A function to modify or transform frontmatter data before the documents are bundled.
* @param options Underlying configuration options for the MDX service.
* @returns Transformed or processed frontmatter.
*/
frontmatterProcessor?: FrontmatterProcessor<TFrontmatter, TOptions, TFields>;
/**
* An optional asynchronous function to provide MDX source files.
* @returns A Promise resolving to an array of {@link SourceFileType} objects.
*/
fileProvider?: FileProvider<TFrontmatter, TOptions, TFields>;
};
Types
Types can be defined or inferred.
Define
type Frontmatter = {
title: string;
};
// ...
return docs<Frontmatter>({
fields: {
title: {
required: true,
},
},
});
Infer
// or infer
return docs({
fields: {
title: {
required: true,
},
},
});
If a required field is undefined
, an Error
will be thrown.
Dynamic fields
Fields can be resolved dynamically in the order they were defined in.
return docs({
cwd: '/docs',
fields: {
title: {
required: true,
resolve: (x) => x.frontmatter.title.toUpperCase(),
},
},
});
MDXBundlerService
import { MDXBundlerService } from 'mdx-butler';
// ...
const docService = MDXBundlerService.create({
fields: {
title: {
required: true,
},
},
});
return docService.docs();
Examples
Bring your own!
Use-case specific configurations and implementations are kept to a minimum.
Adding additional solutions or extending the existing ones is recommended.