Remark Structure
ドキュメントから検索用のレコードを抽出します。
remarkStructure プラグインは、ドキュメントの見出しと本文を検索用のレコードとして抽出します。レコードには、記述した Markdown がそのまま保持されます。生成の仕組みについては、文字列化を参照してください。
## Installation
Run the [command](/docs/cli) below.
<Callout>Restart the **server** after it.</Callout>
| Option | Default |
| ------ | ------- |
| `dir` | `docs` |使い方
Remark Structure は remark プラグインです。Fumadocs MDX ではデフォルトで有効になっており、レコードは structuredData としてエクスポートされます。オプションは remarkStructureOptions で指定します。
Fumadocs MDX では、レコードはページの props を使って生成されます。<show> 内のコンテンツのうちレンダリングされない部分は除外され、式はその評価値に置き換えられます。Fumadocs MDX 以外の環境では、式はソースコードのテキストのまま残ります。
レコード
見出し、段落、引用ブロック、テーブル、JSX 要素がレコードとして記録されます (types を参照) 。
- リンクはテキストに置き換えられ、画像は削除されます。
- テーブルは行ごとに1つのレコードになり、各レコードはヘッダー行とその行からなるテーブルとして記録されます。各行は
tableフィールドを共有します。 - JSX 要素はその内容に置き換えられます。ただし、
filterElementで保持される要素は除きます (コンポーネントを参照) 。 - JSX 要素は、子を持たない場合 (
mdxTypesを参照) 、または1行に収まる場合にレコードになります。 - レコード内のコンテンツが重複して記録されることはありません。
Fumadocs MDX では、プラグインはデフォルトでコンポーネントの要素を保持します。たとえば <Callout> は保持されますが、<div> は保持されません。Fumadocs MDX 以外では、File、TypeTable、Callout、Card が保持されます。この動作は filterElement で変更できます。
import { defineConfig } from 'fumadocs-mdx/config';
export default defineConfig({
mdxOptions: {
remarkStructureOptions: {
filterElement: (node) => node.name === 'Callout' || node.name === 'Banner',
},
},
});コンポーネント
Fumadocs MDX では、保持された JSX 要素は、レコードの読み取り方法に応じて次の 2 つの形式のいずれかで記録されます。
page.data.structuredData: コンポーネントはレンダリングされません。要素は HTML タグとして保持され、検索ダイアログがそれをコンポーネントとしてレンダリングします。asyncまたはdynamicコレクションでは、読み込んだページから読み取ってください。await page.data.structuredData(): コンポーネントはsearchターゲット向けにレンダリングされ、要素はその Markdown 形式に置き換えられます。この関数を持つのはasyncおよびdynamicコレクションのみです。
レンダリング時、コンポーネントは MDX と同じ方法で解決されます。まずファイル内のインポートと宣言が参照され、次にページの props の MDX コンポーネントが参照されます。
検索は getPages() からページを読み取りますが、これらのページにはカスタム props がありません。検索時にコンポーネントをレンダリングさせたい場合は、ファイル内でそのコンポーネントをインポートまたは宣言してください。
コンポーネントの検索用テキストは、asMarkdown() で定義します。
import { asMarkdown } from 'fumadocs-core/server';
export function ProductName() {
if (asMarkdown()) return 'Fumadocs';
return <span className="font-semibold">Fumadocs</span>;
}Markdown 形式を持たないコンポーネントは、ページの props に含まれていない MDX コンポーネントと同様に、JSX 構文のまま残ります。
プラグイン
プラグインが挿入したノードは、レコードとして記録されません。プラグイン側で data.structuredData を使い、自身のノードのレコードを追加します。
node.data = {
...node.data,
structuredData: {
// `heading` のデフォルトは現在の見出しです
contents: [{ heading: undefined, content: 'Generated **content**' }],
},
};執筆したコンテンツの Markdown をレコード内でのみ変更するには、replaceSource() で search 名前空間を編集してください。
関数として使用する
unified では、structure() を使って文字列からレコードを抽出できます。
import { structure } from 'fumadocs-core/mdx-plugins';
import remarkMath from 'remark-math';
// コンテンツに必要な remark プラグインを指定します
const data = structure(content, [remarkMath], options);オプション
プロパティ
型
How is this guide?
最終更新日
