Source API
Turn a content source into an unified interface
Usage
Source API is a helper to load file-system based content sources, it offers an unified interface to integrate different content sources with Fumadocs.
It handles some important jobs:
- Build page trees from file-system information
- Generate Urls and slugs based on file path
- Output useful utilities to search or walk over files
It doesn't rely on the real file system (zero node:fs
usage), a virtual storage is also allowed.
You can use it with built-in content sources like Fumadocs MDX.
The output page tree strictly follows Page Conventions.
Root Directory
All files outside of the root directory will be ignored.
Relative paths, like ./
and ../
are not supported.
Base URL
As the loader
function also generate an URL for each page, you can override the default base URL.
Icons
Load the icon property specified by pages and meta files.
Deep Dive
As mentioned, Source API doesn't rely on real file systems. During the process, your input source files will be parsed and form a virtual storage to avoid inconsistent behaviour between different OS.
Transformer
To perform virtual file-system operations before processing, you can add a transformer.
Page Tree
The page tree is generated from your file system, using the Page Tree Builder. It also filters out some unnecessary information (e.g. file path), which means after the generation process, you cannot access the file path of a page node.
To customise the process, use the pageTree
option.
You can attach custom properties to page tree nodes, like customising the display name of pages and folders.
JSX nodes are also allowed.
Custom Source
To plug your own content source, create a Source
object.
It includes a files
property which is an array of virtual files.
Each virtual file must contain its file path and corresponding data.
Yo can check type definitions for more info.
Since Source API doesn't rely on file system, file paths cannot be absolute or relative (for example, ./file.mdx
and D://content/file.mdx
are not allowed).
Instead, pass the file paths like file.mdx
andcontent/file.mdx
.
Last updated on