toc()
Membuat plugin TOC yang mengekstrak heading dari Markdown/MDX dan mengisi CompileResult.toc.
import { toc } from "@unifast/node";Signature
function toc(options?: TocPluginOptions): UnifastPluginParameter
options?
Konfigurasi ekstraksi TOC
| Properti | Tipe | Default | Deskripsi |
|---|---|---|---|
maxDepth | number | 3 | Kedalaman heading maksimum yang disertakan (1-6). Nilai 3 mencakup h1, h2, dan h3. |
Penggunaan
import { compile, toc } from "@unifast/node";
const result = compile(md, {
plugins: [
toc({
maxDepth: 3,
}),
],
});
console.log(result.toc);
// [
// { depth: 1, text: "Introduction", slug: "introduction" },
// { depth: 2, text: "Getting Started", slug: "getting-started" },
// { depth: 3, text: "Installation", slug: "installation" },
// ]Contoh
Ekstraksi heading dasar
import { compile, toc } from "@unifast/node";
const md = `# Introduction
## Getting Started
### Installation
## API Reference
### compile()
### hastToHtml()`;
const result = compile(md, { plugins: [toc()] });
console.log(result.toc);
// [
// { depth: 1, text: "Introduction", slug: "introduction" },
// { depth: 2, text: "Getting Started", slug: "getting-started" },
// { depth: 3, text: "Installation", slug: "installation" },
// { depth: 2, text: "API Reference", slug: "api-reference" },
// { depth: 3, text: "compile()", slug: "compile" },
// { depth: 3, text: "hastToHtml()", slug: "hasttohtml" },
// ]Membatasi kedalaman
import { compile, toc } from "@unifast/node";
const result = compile(md, {
plugins: [toc({ maxDepth: 2 })],
});
console.log(result.toc);
// Only h1 and h2 headings are included
// [
// { depth: 1, text: "Introduction", slug: "introduction" },
// { depth: 2, text: "Getting Started", slug: "getting-started" },
// { depth: 2, text: "API Reference", slug: "api-reference" },
// ]Merender navigasi TOC
import { compile, toc } from "@unifast/node";
const result = compile(md, { plugins: [toc()] });
function TableOfContents() {
return (
<nav>
<ul>
{result.toc.map((entry) => (
<li key={entry.slug} style={{ marginLeft: (entry.depth - 1) * 16 }}>
<a href={`#`}>{entry.text}</a>
</li>
))}
</ul>
</nav>
);
}