Security News
GitHub Removes Malicious Pull Requests Targeting Open Source Repositories
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
mdast-util-toc
Advanced tools
The `mdast-util-toc` package is a utility for generating a Table of Contents (TOC) from Markdown Abstract Syntax Trees (MDAST). It is particularly useful for processing Markdown documents and extracting a structured TOC based on headings.
Generate TOC from MDAST
This feature allows you to generate a Table of Contents from a Markdown Abstract Syntax Tree. The code sample demonstrates how to convert a Markdown string into an MDAST, generate a TOC from it, and then convert the TOC back into a Markdown string.
const { toMarkdown } = require('mdast-util-to-markdown');
const { fromMarkdown } = require('mdast-util-from-markdown');
const { toc } = require('mdast-util-toc');
const markdown = '# Title\n## Subtitle\n### Sub-subtitle';
const tree = fromMarkdown(markdown);
const tocNode = toc(tree);
console.log(toMarkdown(tocNode.map));
Custom Heading Levels
This feature allows you to customize the depth of headings included in the TOC. The code sample demonstrates generating a TOC that includes only headings up to level 2.
const { fromMarkdown } = require('mdast-util-from-markdown');
const { toc } = require('mdast-util-toc');
const markdown = '# Title\n## Subtitle\n### Sub-subtitle';
const tree = fromMarkdown(markdown);
const tocNode = toc(tree, { maxDepth: 2 });
console.log(tocNode.map);
Custom TOC Heading
This feature allows you to specify a custom heading for the TOC. The code sample demonstrates generating a TOC with a custom heading 'Table of Contents'.
const { fromMarkdown } = require('mdast-util-from-markdown');
const { toc } = require('mdast-util-toc');
const markdown = '# Title\n## Subtitle\n### Sub-subtitle';
const tree = fromMarkdown(markdown);
const tocNode = toc(tree, { heading: 'Table of Contents' });
console.log(tocNode.map);
The `remark-toc` package is a plugin for the `remark` Markdown processor that generates a Table of Contents. It is similar to `mdast-util-toc` but is designed to be used directly within the `remark` ecosystem, making it easier to integrate if you are already using `remark`.
The `markdown-toc` package generates a Table of Contents for Markdown files. Unlike `mdast-util-toc`, which works with MDAST, `markdown-toc` operates directly on Markdown strings, making it simpler to use for straightforward TOC generation without needing to parse the Markdown into an abstract syntax tree.
The `markdown-it-toc-done-right` package is a plugin for the `markdown-it` Markdown parser that generates a Table of Contents. It is similar to `mdast-util-toc` in functionality but is designed to work within the `markdown-it` ecosystem, providing seamless integration if you are using `markdown-it` for Markdown processing.
mdast utility to generate table of contents.
npm:
npm install mdast-util-toc
Dependencies:
var u = require('unist-builder')
var toc = require('mdast-util-toc')
Given a mdast tree:
var tree = u('root', [
u('heading', {depth: 1}, [u('text', 'Alpha')]),
u('heading', {depth: 2}, [u('text', 'Bravo')]),
u('heading', {depth: 3}, [u('text', 'Charlie')]),
u('heading', {depth: 2}, [u('text', 'Delta')])
])
var table = toc(tree)
Yields:
{
index: null,
endIndex: null,
map: {
type: 'list',
ordered: false,
spread: true,
children: [
{
type: 'listItem',
loose: true,
spread: true,
children: [Array]
}
]
}
}
toc(tree[, options])
Generate a Table of Contents from a tree.
Looks for the first heading matching options.heading
(case insensitive,
supports alt/title attributes for links and images too), and returns a table
of contents (list) for all following headings.
If no heading
is specified, creates a table of contents for all headings in
tree
.
tree
is not changed.
Links to headings are based on GitHub’s style.
Only top-level headings (those not in blockquotes or lists), are used.
This default behavior can be changed by passing parents
.
options
options.heading
Heading to look for (string
), wrapped in new RegExp('^(' + value + ')$', 'i')
.
options.maxDepth
Maximum heading depth to include in the table of contents (number
, default:
6
),
This is inclusive: when set to 3
, level three headings are included (those
with three hashes, ###
).
options.tight
Whether to compile list-items tightly (boolean?
, default: false
).
options.prefix
Add a prefix to links to headings in the table of contents (string?
,
default: null
).
Useful for example when later going from mdast to hast and sanitizing
with hast-util-sanitize
.
options.parents
Allows headings to be children of certain node types (default: the to toc
given tree
, to only allow top-level headings).
Internally, uses unist-util-is to check, so parents
can be any
is
-compatible test.
For example, this would allow headings under either root
or blockquote
to be
used:
toc(tree, {parents: ['root', 'blockquote']})
An object representing the table of contents.
index
(number?
)
— Index of the found table of contents heading in tree
.
-1
if no heading was found, null
if no heading
was givenendIndex
(number?
)
— Index of the last node after heading
before the TOC starts.
-1
if no heading was found, null
if no heading
was given,
same as index
if there are no nodes between heading
and the
first heading in the TOCmap
(Node?
)
— List representing the generated table of contents.
null
if no table of contents could be created, either because
no heading was found or because no following headings were foundSee contributing.md
in syntax-tree/.github
for ways to get
started.
See support.md
for ways to get help.
This project has a Code of Conduct. By interacting with this repository, organisation, or community you agree to abide by its terms.
FAQs
mdast utility to generate a table of contents from a tree
We found that mdast-util-toc demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.