MiniMark is a minimal representation of Abstract Syntax Trees (AST) for Markdown.
Minimark takes advantage of JSON array format to reduce the size of the AST.
The difference between a normal AST and a minimark AST is visible in the example below.
A normal AST is like this:
{
"type": "root",
"children": [
{
"type": "heading",
"depth": 2,
"children": [
{
"type": "text",
"value": "Documentations"
}
]
}
]
}
But with minimark, it’s like this:
{
"type": "minimark",
"value": [
["h2", {}, "Documentations"]
]
}
npm install minimark
# or
pnpm add minimark
# or
yarn add minimark
import { stringify } from 'minimark/stringify';
const ast = [
type: 'minimal',
value: [
['h2', { id: 'documentations' }, '🎨 Documentations'],
['ul', {}, [
['li', {}, ['a', { href: '/nuxt/getting-started' }, 'Nuxt v3']],
['li', {}, ['a', { href: '/content/getting-started' }, 'Nuxt Content v3']],
]],
],
];
console.log(stringify(ast));
// Output:
// # Documentations
//
// - [Nuxt v3](https://nuxt.com/docs/getting-started)
// - [Nuxt Content v3](https://content.nuxtjs.org/getting-started)
visit(tree, predicate, callback)tree: The minimark tree to visit.predicate: A function that returns a boolean indicating whether the node should be visited.callback: A function that will be called with the node and its children.import { visit } from 'minimark';
const ast = [
type: 'minimal',
value: [
['h2', { id: 'documentations' }, '🎨 Documentations'], // ...
],
];
visit(ast, (node) => node[0] === 'h2', (node) => {
console.log(node);
});
textContent(node)node: The AST node to get the text content of.import { textContent } from 'minimark';
const ast = [
type: 'minimal',
value: [
['h2', { id: 'documentations' }, '🎨 Documentations'], // ...
],
];
console.log(textContent(ast.value[0])); // "🎨 Documentations"
toHast(tree)tree: The Minimark tree to convert to hast.import { toHast } from 'minimark/hast';
const ast = [
type: 'minimal',
value: [
['h2', { id: 'documentations' }, '🎨 Documentations'], // ...
],
];
const hast = toHast(ast);
console.log(hast);
fromHast(tree)tree: The hast tree to convert to minimark.
const hast = {
type: 'root',
children: [
{ type: 'element', tag: 'h2', props: { id: 'documentations' }, children: [{ type: 'text', value: '🎨 Documentations' }] },
],
};
const minimark = fromHast(hast);
console.log(minimark);
Contributions are welcome! Please open issues and submit pull requests.
MIT
We use cookies
We use cookies to analyze traffic and improve your experience. You can accept or reject analytics cookies.