Détail du package

minimark

farnabaz0MIT0.2.0

MiniMark is a minimal representation of Abstract Syntax Trees (AST)

readme

minimark

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"]
  ]
}

Installation

npm install minimark
# or
pnpm add minimark
# or
yarn add minimark

Usage

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)

API

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);

Contributing

Contributions are welcome! Please open issues and submit pull requests.

License

MIT

changelog

Changelog

0.1.1 (2025-06-02)

Bug Fixes

  • block elements inside li (b52567a)

0.1.0 (2025-05-28)

Features

  • hast utils & tree visit utility (2d9222f)

Bug Fixes

  • heading: support non-text children (cef6c6d)
  • html allow markdown inside html (be8c444)