Introduction to mdast
mdast stands for Markdown Abstract Syntax Tree, a powerful tool for parsing markdown content into a structured tree format. This enables advanced manipulation and analysis of markdown documents. Below, we will cover some key APIs provided by the mdast library with practical code examples.
API Overview and Code Snippets
1. parse
Method
The parse
method converts markdown text into an abstract syntax tree.
const unified = require('unified');
const parse = require('remark-parse');
const file = '## Sample Markdown\nThis is a paragraph.';
const tree = unified().use(parse).parse(file);
console.log(tree);
2. stringify
Method
The stringify
method converts an abstract syntax tree back into markdown text.
const unified = require('unified');
const stringify = require('remark-stringify');
const tree = {
type: 'root',
children: [
{type: 'heading', depth: 2, children: [{type: 'text', value: 'Sample Markdown'}]},
{type: 'paragraph', children: [{type: 'text', value: 'This is a paragraph.'}]}
]
};
const file = unified().use(stringify).stringify(tree);
console.log(file);
3. visit
Method
The visit
method allows traversing nodes in the abstract syntax tree.
const unified = require('unified');
const parse = require('remark-parse');
const visit = require('unist-util-visit');
const file = '## Sample Markdown\nThis is a paragraph.';
const tree = unified().use(parse).parse(file);
visit(tree, 'text', (node) => {
console.log(node.value);
});
4. transform
Method
The transform
method for modifying the syntax tree.
const unified = require('unified');
const parse = require('remark-parse');
const transform = require('remark-rehype');
const file = '## Sample Markdown\nThis is a paragraph.';
const processor = unified()
.use(parse)
.use(transform);
const tree = processor.parse(file);
const newTree = processor.runSync(tree);
console.log(newTree);
Application Example
Here is an example application showcasing the use of mdast APIs to parse, transform, and stringify markdown content.
const unified = require('unified');
const parse = require('remark-parse');
const stringify = require('remark-stringify');
const visit = require('unist-util-visit');
const transform = require('remark-rehype');
const file = '# Title\n\nSome **bold** text and a [link](#).';
const processor = unified()
.use(parse)
.use(transform)
.use(() => (tree) => {
visit(tree, 'link', (node) => {
node.url = 'https://example.com';
});
return tree;
})
.use(stringify);
const result = processor.processSync(file);
console.log(String(result));
Hash: 03932320138c64594a230fcd7f2dd05d39d0fbfa24cc95a89c21babf571be02f