ソース
ローダー API で使用するソースを設定します
概要
コンテンツローダーは、source インターフェースを介してさまざまなコンテンツソースを受け付けます。
複数のソース
単一のソースではなく、ソースオブジェクトを Record 形式でまとめて渡してください。
import { loader } from 'fumadocs-core/source';
import { blog, docs } from 'collections/server';
import { lucideIconsPlugin } from 'fumadocs-core/source/lucide-icons';
export const source = loader(
{
docs: docs.toFumadocsSource(),
openapi: blog.toFumadocsSource(),
},
{
baseUrl: '/docs',
},
);各ソースに固有のプロパティにアクセスするには、次のようにします。
const page = source.getPage(['...']);
if (page.type === 'docs') {
console.log(page.data);
} else {
console.log(page.data);
}静的ソース
独自のコンテンツソースを組み込むには、StaticSource オブジェクトを作成します。
ローダー API はファイルシステムに依存しないため、ファイルパスには file.mdx や content/file.mdx のような仮想パスしか使用できません。./file.mdx や D://content/file.mdx は使用できません。
import type { } from 'fumadocs-core/source';
export function (): <{
: { : string; : string[] }; // カスタム型
: { : string; ?: string }; // カスタム型
}> {
return {
: [
{
: 'page',
: 'folder/index.mdx',
: {
: 'Hello World',
// ...
},
},
{
: 'meta',
: 'meta.json',
: {
: 'Docs',
: ['folder'],
// ...
},
},
],
};
}i18n を使用する場合、ファイル側で locale を指定しない限り、ファイルの言語はパスから判別されます。
動的ソース
再検証に対応したコンテンツソースの場合は、代わりに DynamicSource を返してください。
import type { DynamicSource } from 'fumadocs-core/source';
export function createMySource(): DynamicSource<{
metaData: { title: string; pages: string[] };
pageData: { title: string; description?: string };
}> {
return {
async files() {
return [
{
type: 'page',
path: 'folder/index.mdx',
data: {
title: 'Hello World',
},
},
{
type: 'meta',
path: 'meta.json',
data: {
title: 'Docs',
pages: ['folder'],
},
},
];
},
configure(loader) {
// ソース側からローダーを再検証できます。例:
onMyEvent(() => {
void loader.revalidate();
});
},
};
}動的ソースは dynamicLoader() でしか利用できません。
パスパラメーター
ソースでパスパラメーターをサポートするには、[framework]/deploy.mdx のようなファイルを1つの仮想ファイルとして渡します。ローダーは値ごとにページを生成し、各ページのデータには dataAt() の戻り値を使用します。dataAt() がない場合は data を使用します。メタファイルも同様に扱われます。
import type { } from 'fumadocs-core/source';
const : ['files'] = [
{
: 'page',
: '[framework]/deploy.mdx',
: { : 'Deploy' },
: () => ({ : `Deploy on ${.framework}` }),
},
{
: 'meta',
: '[framework]/meta.json',
: { : [{ : 'waku' }, { : 'astro' }] },
: () => ({ : .framework }),
},
];params の一覧取得
コード内のフロントマターのように、各値のデータをローダーより先に解決できるよう、getStaticParams() は同じルールに従って params を一覧取得します。ストレージ内にあるメタファイルの staticParams を、拡張子を除いたパスをもとに読み込みます。
const = ('[framework]/deploy.mdx', {
: .,
: () => .()?.,
});値を列挙するものがない場合は undefined を返します。その場合、ファイルはリテラルなパスに対応する1つのページになります。
カスタム props
カスタム props をサポートするため、dataAt() は第2引数でカスタム props を受け取ります。このとき渡されるページデータは、ローダープラグイン適用後のものです。params とカスタム props に応じてレンダリングしたデータを返してください。
const : ['files'] = [
{
: 'page',
: '[framework]/deploy.mdx',
: ({}),
: (, ) =>
? { ...., ...({ ..., .... }) } : (),
},
];dataAt() を持たないページでは、カスタム props は無視されます。
ランタイム出力
ソースが MDX をコンパイルする場合は、各ファイルのコンパイルを一度だけにし、ページの props をそのコンテンツに渡してください。同じ props で目次、検索レコード、Markdown を生成するには、次の設定を行います。
- コンパイルするファイルの data に
unstable_runtimeOutputs: trueを設定します。Sätteri の場合は、コンパイルオプションのdataに設定します。 - 最後の rehype プラグインとして
rehypeHeadingを追加し、レンダリングされたテキストから見出し ID を生成します。
import { VFile } from 'vfile';
const file = new VFile({
path: '[framework]/deploy.mdx',
value: source,
data: { unstable_runtimeOutputs: true },
});この場合、プラグインは値ではなく関数をエクスポートします。たとえば、Rehype TOC の toc や Remark LLMs の _markdown コンポーネントがこれに該当します。これらは各ページの props を渡して呼び出します。
const { : , , : } = ;
function (: object) {
return {
: 'Deploy',
: (: MDXProps) => < {...} {...} />,
: (),
: () => (< {...} />),
: ..,
};
}
const : ['files'] = [
{
: 'page',
: '[framework]/deploy.mdx',
: ({}),
: () => (),
},
];検索に使う場合は、Remark Structure のレコードをエクスポートからではなく file.data.structuredData から読み取ってください。これらのレコードにはすべての <show> 分岐が含まれ、式も元のソーステキストのまま保持されます。
unstable_ プレフィックスは、その API が今後変更される可能性があることを示しています。このフラグを指定しない場合、Rehype TOC、Remark Structure、Remark LLMs のいずれかが実行されると、<show> を含むドキュメントはコンパイルに失敗します。
How is this guide?
最終更新日
