• Stars
    star
    1,058
  • Rank 43,617 (Top 0.9 %)
  • Language
  • Created almost 9 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Markdown Abstract Syntax Tree format

mdast

Markdown Abstract Syntax Tree.


mdast is a specification for representing markdown in a syntax tree. It implements unist. It can represent several flavours of markdown, such as CommonMark and GitHub Flavored Markdown.

This document may not be released. See releases for released documents. The latest released version is 5.0.0.

Contents

Introduction

This document defines a format for representing markdown as an abstract syntax tree. Development of mdast started in July 2014, in remark, before unist existed. This specification is written in a Web IDL-like grammar.

Where this specification fits

mdast extends unist, a format for syntax trees, to benefit from its ecosystem of utilities.

mdast relates to JavaScript in that it has a rich ecosystem of utilities for working with compliant syntax trees in JavaScript. However, mdast is not limited to JavaScript and can be used in other programming languages.

mdast relates to the unified and remark projects in that mdast syntax trees are used throughout their ecosystems.

Types

If you are using TypeScript, you can use the unist types by installing them with npm:

npm install @types/mdast

Nodes (abstract)

Literal

interface Literal <: UnistLiteral {
  value: string
}

Literal (UnistLiteral) represents an abstract interface in mdast containing a value.

Its value field is a string.

Parent

interface Parent <: UnistParent {
  children: [MdastContent]
}

Parent (UnistParent) represents an abstract interface in mdast containing other nodes (said to be children).

Its content is limited to only other mdast content.

Nodes

Blockquote

interface Blockquote <: Parent {
  type: 'blockquote'
  children: [FlowContent]
}

Blockquote (Parent) represents a section quoted from somewhere else.

Blockquote can be used where flow content is expected. Its content model is also flow content.

For example, the following markdown:

> Alpha bravo charlie.

Yields:

{
  type: 'blockquote',
  children: [{
    type: 'paragraph',
    children: [{type: 'text', value: 'Alpha bravo charlie.'}]
  }]
}

Break

interface Break <: Node {
  type: 'break'
}

Break (Node) represents a line break, such as in poems or addresses.

Break can be used where phrasing content is expected. It has no content model.

For example, the following markdown:

fooΒ·Β·
bar

Yields:

{
  type: 'paragraph',
  children: [
    {type: 'text', value: 'foo'},
    {type: 'break'},
    {type: 'text', value: 'bar'}
  ]
}

Code

interface Code <: Literal {
  type: 'code'
  lang: string?
  meta: string?
}

Code (Literal) represents a block of preformatted text, such as ASCII art or computer code.

Code can be used where flow content is expected. Its content is represented by its value field.

This node relates to the phrasing content concept InlineCode.

A lang field can be present. It represents the language of computer code being marked up.

If the lang field is present, a meta field can be present. It represents custom information relating to the node.

For example, the following markdown:

    foo()

Yields:

{
  type: 'code',
  lang: null,
  meta: null,
  value: 'foo()'
}

And the following markdown:

```js highlight-line="2"
foo()
bar()
baz()
```

Yields:

{
  type: 'code',
  lang: 'javascript',
  meta: 'highlight-line="2"',
  value: 'foo()\nbar()\nbaz()'
}

Definition

interface Definition <: Node {
  type: 'definition'
}

Definition includes Association
Definition includes Resource

Definition (Node) represents a resource.

Definition can be used where content is expected. It has no content model.

Definition includes the mixins Association and Resource.

Definition should be associated with LinkReferences and ImageReferences.

For example, the following markdown:

[Alpha]: https://example.com

Yields:

{
  type: 'definition',
  identifier: 'alpha',
  label: 'Alpha',
  url: 'https://example.com',
  title: null
}

Emphasis

interface Emphasis <: Parent {
  type: 'emphasis'
  children: [PhrasingContent]
}

Emphasis (Parent) represents stress emphasis of its contents.

Emphasis can be used where phrasing content is expected. Its content model is phrasing content.

For example, the following markdown:

*alpha* _bravo_

Yields:

{
  type: 'paragraph',
  children: [
    {
      type: 'emphasis',
      children: [{type: 'text', value: 'alpha'}]
    },
    {type: 'text', value: ' '},
    {
      type: 'emphasis',
      children: [{type: 'text', value: 'bravo'}]
    }
  ]
}

Heading

interface Heading <: Parent {
  type: 'heading'
  depth: 1 <= number <= 6
  children: [PhrasingContent]
}

Heading (Parent) represents a heading of a section.

Heading can be used where flow content is expected. Its content model is phrasing content.

A depth field must be present. A value of 1 is said to be the highest rank and 6 the lowest.

For example, the following markdown:

# Alpha

Yields:

{
  type: 'heading',
  depth: 1,
  children: [{type: 'text', value: 'Alpha'}]
}

Html

interface Html <: Literal {
  type: 'html'
}

Html (Literal) represents a fragment of raw HTML.

Html can be used where flow or phrasing content is expected. Its content is represented by its value field.

Html nodes do not have the restriction of being valid or complete HTML ([HTML]) constructs.

For example, the following markdown:

<div>

Yields:

{type: 'html', value: '<div>'}

Image

interface Image <: Node {
  type: 'image'
}

Image includes Resource
Image includes Alternative

Image (Node) represents an image.

Image can be used where phrasing content is expected. It has no content model, but is described by its alt field.

Image includes the mixins Resource and Alternative.

For example, the following markdown:

![alpha](https://example.com/favicon.ico "bravo")

Yields:

{
  type: 'image',
  url: 'https://example.com/favicon.ico',
  title: 'bravo',
  alt: 'alpha'
}

ImageReference

interface ImageReference <: Node {
  type: 'imageReference'
}

ImageReference includes Reference
ImageReference includes Alternative

ImageReference (Node) represents an image through association, or its original source if there is no association.

ImageReference can be used where phrasing content is expected. It has no content model, but is described by its alt field.

ImageReference includes the mixins Reference and Alternative.

ImageReference should be associated with a Definition.

For example, the following markdown:

![alpha][bravo]

Yields:

{
  type: 'imageReference',
  identifier: 'bravo',
  label: 'bravo',
  referenceType: 'full',
  alt: 'alpha'
}

InlineCode

interface InlineCode <: Literal {
  type: 'inlineCode'
}

InlineCode (Literal) represents a fragment of computer code, such as a file name, computer program, or anything a computer could parse.

InlineCode can be used where phrasing content is expected. Its content is represented by its value field.

This node relates to the flow content concept Code.

For example, the following markdown:

`foo()`

Yields:

{type: 'inlineCode', value: 'foo()'}

Link

interface Link <: Parent {
  type: 'link'
  children: [PhrasingContent]
}

Link includes Resource

Link (Parent) represents a hyperlink.

Link can be used where phrasing content is expected. Its content model is also phrasing content.

Link includes the mixin Resource.

For example, the following markdown:

[alpha](https://example.com "bravo")

Yields:

{
  type: 'link',
  url: 'https://example.com',
  title: 'bravo',
  children: [{type: 'text', value: 'alpha'}]
}

LinkReference

interface LinkReference <: Parent {
  type: 'linkReference'
  children: [PhrasingContent]
}

LinkReference includes Reference

LinkReference (Parent) represents a hyperlink through association, or its original source if there is no association.

LinkReference can be used where phrasing content is expected. Its content model is also phrasing content.

LinkReference includes the mixin Reference.

LinkReferences should be associated with a Definition.

For example, the following markdown:

[alpha][Bravo]

Yields:

{
  type: 'linkReference',
  identifier: 'bravo',
  label: 'Bravo',
  referenceType: 'full',
  children: [{type: 'text', value: 'alpha'}]
}

List

interface List <: Parent {
  type: 'list'
  ordered: boolean?
  start: number?
  spread: boolean?
  children: [ListContent]
}

List (Parent) represents a list of items.

List can be used where flow content is expected. Its content model is list content.

An ordered field can be present. It represents that the items have been intentionally ordered (when true), or that the order of items is not important (when false or not present).

A start field can be present. It represents, when the ordered field is true, the starting number of the list.

A spread field can be present. It represents that one or more of its children are separated with a blank line from its siblings (when true), or not (when false or not present).

For example, the following markdown:

1. foo

Yields:

{
  type: 'list',
  ordered: true,
  start: 1,
  spread: false,
  children: [{
    type: 'listItem',
    spread: false,
    children: [{
      type: 'paragraph',
      children: [{type: 'text', value: 'foo'}]
    }]
  }]
}

ListItem

interface ListItem <: Parent {
  type: 'listItem'
  spread: boolean?
  children: [FlowContent]
}

ListItem (Parent) represents an item in a List.

ListItem can be used where list content is expected. Its content model is flow content.

A spread field can be present. It represents that the item contains two or more children separated by a blank line (when true), or not (when false or not present).

For example, the following markdown:

* bar

Yields:

{
  type: 'listItem',
  spread: false,
  children: [{
    type: 'paragraph',
    children: [{type: 'text', value: 'bar'}]
  }]
}

Paragraph

interface Paragraph <: Parent {
  type: 'paragraph'
  children: [PhrasingContent]
}

Paragraph (Parent) represents a unit of discourse dealing with a particular point or idea.

Paragraph can be used where content is expected. Its content model is phrasing content.

For example, the following markdown:

Alpha bravo charlie.

Yields:

{
  type: 'paragraph',
  children: [{type: 'text', value: 'Alpha bravo charlie.'}]
}

Root

interface Root <: Parent {
  type: 'root'
}

Root (Parent) represents a document.

Root can be used as the root of a tree, never as a child. Its content model is not limited to flow content, but instead can contain any mdast content with the restriction that all content must be of the same category.

Strong

interface Strong <: Parent {
  type: 'strong'
  children: [PhrasingContent]
}

Strong (Parent) represents strong importance, seriousness, or urgency for its contents.

Strong can be used where phrasing content is expected. Its content model is phrasing content.

For example, the following markdown:

**alpha** __bravo__

Yields:

{
  type: 'paragraph',
  children: [
    {
      type: 'strong',
      children: [{type: 'text', value: 'alpha'}]
    },
    {type: 'text', value: ' '},
    {
      type: 'strong',
      children: [{type: 'text', value: 'bravo'}]
    }
  ]
}

Text

interface Text <: Literal {
  type: 'text'
}

Text (Literal) represents everything that is just text.

Text can be used where phrasing content is expected. Its content is represented by its value field.

For example, the following markdown:

Alpha bravo charlie.

Yields:

{type: 'text', value: 'Alpha bravo charlie.'}

ThematicBreak

interface ThematicBreak <: Node {
  type: 'thematicBreak'
}

ThematicBreak (Node) represents a thematic break, such as a scene change in a story, a transition to another topic, or a new document.

ThematicBreak can be used where flow content is expected. It has no content model.

For example, the following markdown:

***

Yields:

{type: 'thematicBreak'}

Mixin

Alternative

interface mixin Alternative {
  alt: string?
}

Alternative represents a node with a fallback

An alt field should be present. It represents equivalent content for environments that cannot represent the node as intended.

Association

interface mixin Association {
  identifier: string
  label: string?
}

Association represents an internal relation from one node to another.

An identifier field must be present. It can match another node. identifier is a source value: character escapes and character references are not parsed. Its value must be normalized.

A label field can be present. label is a string value: it works just like title on a link or a lang on code: character escapes and character references are parsed.

To normalize a value, collapse markdown whitespace ([\t\n\r ]+) to a space, trim the optional initial and/or final space, and perform case-folding.

Whether the value of identifier (or normalized label if there is no identifier) is expected to be a unique identifier or not depends on the type of node including the Association. An example of this is that they should be unique on Definition, whereas multiple LinkReferences can be non-unique to be associated with one definition.

Reference

interface mixin Reference {
  referenceType: string
}

Reference includes Association

Reference represents a marker that is associated to another node.

A referenceType field must be present. Its value must be a referenceType. It represents the explicitness of the reference.

Resource

interface mixin Resource {
  url: string
  title: string?
}

Resource represents a reference to resource.

A url field must be present. It represents a URL to the referenced resource.

A title field can be present. It represents advisory information for the resource, such as would be appropriate for a tooltip.

Enumeration

referenceType

enum referenceType {
  'shortcut' | 'collapsed' | 'full'
}

referenceType represents the explicitness of a reference.

  • shortcut: the reference is implicit, its identifier inferred from its content
  • collapsed: the reference is explicit, its identifier inferred from its content
  • full: the reference is explicit, its identifier explicitly set

Content model

type MdastContent = FlowContent | ListContent | PhrasingContent

Each node in mdast falls into one or more categories of Content that group nodes with similar characteristics together.

Content

type Content = Definition | Paragraph

Content represents runs of text that form definitions and paragraphs.

FlowContent

type FlowContent =
  Blockquote | Code | Heading | Html | List | ThematicBreak | Content

Flow content represent the sections of document.

ListContent

type ListContent = ListItem

List content represent the items in a list.

PhrasingContent

type PhrasingContent = Break | Emphasis | Html | Image | ImageReference
  | InlineCode | Link | LinkReference | Strong | Text

Phrasing content represent the text in a document, and its markup.

Extensions

Markdown syntax is often extended. It is not a goal of this specification to list all possible extensions. However, a short list of frequently used extensions are shown below.

GFM

The following interfaces are found in GitHub Flavored Markdown.

Delete

interface Delete <: Parent {
  type: 'delete'
  children: [PhrasingContent]
}

Delete (Parent) represents contents that are no longer accurate or no longer relevant.

Delete can be used where phrasing content is expected. Its content model is phrasing content.

For example, the following markdown:

~~alpha~~

Yields:

{
  type: 'delete',
  children: [{type: 'text', value: 'alpha'}]
}

ListItem (GFM)

interface ListItemGfm <: ListItem {
  checked: boolean?
}

In GFM, a checked field can be present. It represents whether the item is done (when true), not done (when false), or indeterminate or not applicable (when null or not present).

FootnoteDefinition

interface FootnoteDefinition <: Parent {
  type: 'footnoteDefinition'
  children: [FlowContent]
}

FootnoteDefinition includes Association

FootnoteDefinition (Parent) represents content relating to the document that is outside its flow.

FootnoteDefinition can be used where flow content is expected. Its content model is also flow content.

FootnoteDefinition includes the mixin Association.

FootnoteDefinition should be associated with FootnoteReferences.

For example, the following markdown:

[^alpha]: bravo and charlie.

Yields:

{
  type: 'footnoteDefinition',
  identifier: 'alpha',
  label: 'alpha',
  children: [{
    type: 'paragraph',
    children: [{type: 'text', value: 'bravo and charlie.'}]
  }]
}

FootnoteReference

interface FootnoteReference <: Node {
  type: 'footnoteReference'
}

FootnoteReference includes Association

FootnoteReference (Node) represents a marker through association.

FootnoteReference can be used where phrasing content is expected. It has no content model.

FootnoteReference includes the mixin Association.

FootnoteReference should be associated with a FootnoteDefinition.

For example, the following markdown:

[^alpha]

Yields:

{
  type: 'footnoteReference',
  identifier: 'alpha',
  label: 'alpha'
}

Table

interface Table <: Parent {
  type: 'table'
  align: [alignType]?
  children: [TableContent]
}

Table (Parent) represents two-dimensional data.

Table can be used where flow content is expected. Its content model is table content.

The head of the node represents the labels of the columns.

An align field can be present. If present, it must be a list of alignTypes. It represents how cells in columns are aligned.

For example, the following markdown:

| foo | bar |
| :-- | :-: |
| baz | qux |

Yields:

{
  type: 'table',
  align: ['left', 'center'],
  children: [
    {
      type: 'tableRow',
      children: [
        {
          type: 'tableCell',
          children: [{type: 'text', value: 'foo'}]
        },
        {
          type: 'tableCell',
          children: [{type: 'text', value: 'bar'}]
        }
      ]
    },
    {
      type: 'tableRow',
      children: [
        {
          type: 'tableCell',
          children: [{type: 'text', value: 'baz'}]
        },
        {
          type: 'tableCell',
          children: [{type: 'text', value: 'qux'}]
        }
      ]
    }
  ]
}

TableCell

interface TableCell <: Parent {
  type: 'tableCell'
  children: [PhrasingContent]
}

TableCell (Parent) represents a header cell in a Table, if its parent is a head, or a data cell otherwise.

TableCell can be used where row content is expected. Its content model is phrasing content excluding Break nodes.

For an example, see Table.

TableRow

interface TableRow <: Parent {
  type: 'tableRow'
  children: [RowContent]
}

TableRow (Parent) represents a row of cells in a table.

TableRow can be used where table content is expected. Its content model is row content.

If the node is a head, it represents the labels of the columns for its parent Table.

For an example, see Table.

alignType

enum alignType {
  'left' | 'right' | 'center' | null
}

alignType represents how phrasing content is aligned ([CSSTEXT]).

  • 'left': See the left value of the text-align CSS property
  • 'right': See the right value of the text-align CSS property
  • 'center': See the center value of the text-align CSS property
  • null: phrasing content is aligned as defined by the host environment

FlowContent (GFM)

type FlowContentGfm = FootnoteDefinition | Table | FlowContent

ListContent (GFM)

type ListContentGfm = ListItemGfm

PhrasingContent (GFM)

type PhrasingContentGfm = FootnoteReference | Delete | PhrasingContent

RowContent

type RowContent = TableCell

Row content represent the cells in a row.

TableContent

type TableContent = TableRow

Table content represent the rows in a table.

Frontmatter

The following interfaces are found with YAML.

Yaml

interface Yaml <: Literal {
  type: 'yaml'
}

Yaml (Literal) represents a collection of metadata for the document in the YAML ([YAML]) data serialisation language.

Yaml can be used where frontmatter content is expected. Its content is represented by its value field.

For example, the following markdown:

---
foo: bar
---

Yields:

{type: 'yaml', value: 'foo: bar'}

FrontmatterContent

type FrontmatterContent = Yaml

Frontmatter content represent out-of-band information about the document.

If frontmatter is present, it must be limited to one node in the tree, and can only exist as a head.

FlowContent (frontmatter)

type FlowContentFrontmatter = FrontmatterContent | FlowContent

MDX

See remark-mdx.

Glossary

See the unist glossary.

List of utilities

See the unist list of utilities for more utilities.

References

Security

As mdast can contain HTML and be used to represent HTML, and improper use of HTML can open you up to a cross-site scripting (XSS) attack, improper use of mdast is also unsafe. When transforming to HTML (typically through hast), always be careful with user input and use hast-util-santize to make the hast tree safe.

Related

  • hast β€” Hypertext Abstract Syntax Tree format
  • nlcst β€” Natural Language Concrete Syntax Tree format
  • xast β€” Extensible Abstract Syntax Tree

Contribute

See contributing.md in syntax-tree/.github for ways to get started. See support.md for ways to get help. Ideas for new utilities and tools can be posted in syntax-tree/ideas.

A curated list of awesome syntax-tree, unist, mdast, hast, xast, and nlcst resources can be found in awesome syntax-tree.

This project has a code of conduct. By interacting with this repository, organization, or community you agree to abide by its terms.

Acknowledgments

The initial release of this project was authored by @wooorm.

Special thanks to @eush77 for their work, ideas, and incredibly valuable feedback!

Thanks to @anandthakker, @arobase-che, @BarryThePenguin, @chinesedfan, @ChristianMurphy, @craftzdog, @d4rekanguok, @detj, @dominictarr, @gkatsev, @Hamms, @Hypercubed, @ikatyang, @izumin5210, @jasonLaster, @Justineo, @justjake, @KyleAMathews, @laysent, @macklinu, @mike-north, @Murderlon, @nevik, @Rokt33r, @rhysd, @rubys, @Sarah-Seo, @sethvincent, @silvenon, @simov, @staltz, @stefanprobst, @tmcw, and @vhf for contributing to mdast and related projects!

License

CC-BY-4.0 Β© Titus Wormer

More Repositories

1

unist

Universal Syntax Tree used by @unifiedjs
862
star
2

hast

Hypertext Abstract Syntax Tree format
735
star
3

unist-util-visit

utility to visit nodes
JavaScript
269
star
4

mdast-util-from-markdown

mdast utility to parse markdown
JavaScript
202
star
5

nlcst

Natural Language Concrete Syntax Tree format
200
star
6

hastscript

utility to create hast trees
JavaScript
160
star
7

awesome-syntax-tree

Curated list of awesome syntax-tree, unist, hast, xast, mdast, esast, nlcst resources
105
star
8

mdast-util-to-hast

utility to transform mdast to hast
JavaScript
100
star
9

mdast-util-to-markdown

mdast utility to serialize markdown
JavaScript
92
star
10

hast-util-to-html

utility to serialize hast to HTML
JavaScript
81
star
11

mdast-util-toc

utility to generate a table of contents from an mdast tree
JavaScript
80
star
12

unist-builder

utility to create a new trees with a nice syntax
JavaScript
73
star
13

unist-util-visit-parents

utility to recursively walk over unist nodes, with ancestral information
JavaScript
65
star
14

xast

Extensible Abstract Syntax Tree
63
star
15

unist-util-select

utility to select unist nodes with CSS-like selectors
JavaScript
59
star
16

hast-util-reading-time

utility to estimate the reading time
JavaScript
56
star
17

hast-util-to-jsx-runtime

hast utility to transform to preact, react, solid, svelte, vue, etc
JavaScript
51
star
18

hast-util-sanitize

utility to sanitize hast nodes
HTML
49
star
19

esast

ECMAScript Abstract Syntax Tree format
47
star
20

hast-to-hyperscript

Legacy utility to transform hast to something else
46
star
21

mdast-util-to-string

utility to get the plain text content of an mdast node
JavaScript
37
star
22

hast-util-select

utility to add `querySelector`, `querySelectorAll`, and `matches` support for hast
JavaScript
37
star
23

hast-util-to-mdast

utility to transform hast (HTML) to mdast (markdown)
JavaScript
37
star
24

unist-util-is

utility to check if a node passes a test
JavaScript
36
star
25

unist-util-map

utility to create a new tree by mapping all nodes
JavaScript
35
star
26

hast-util-from-html

hast utility to parse from HTML
JavaScript
28
star
27

unist-util-inspect

utility to inspect nodes
JavaScript
25
star
28

mdast-util-mdx-jsx

mdast extension to parse and serialize MDX JSX
JavaScript
23
star
29

estree-util-build-jsx

Transform JSX in estrees to function calls (for react, preact, and most hyperscript interfaces)
JavaScript
22
star
30

hast-util-from-dom

utility to transform a DOM tree to hast
JavaScript
22
star
31

unist-util-find

utility to find a node
JavaScript
21
star
32

unist-util-remove

utility to remove nodes from a tree
JavaScript
21
star
33

hast-util-to-text

utility to get the plain-text value of a node according to the `innerText` algorithm
JavaScript
19
star
34

hast-util-to-estree

hast utility to transform to estree (JavaScript AST) JSX
JavaScript
19
star
35

hast-util-to-dom

utility to transform hast to a DOM tree
JavaScript
19
star
36

nlcst-to-string

utility to transform an nlcst tree to a string
JavaScript
18
star
37

mdast-util-gfm

mdast extension to parse and serialize GFM (GitHub Flavored Markdown)
JavaScript
18
star
38

mdast-util-mdx

mdast extension to parse and serialize MDX (or MDX.js)
JavaScript
18
star
39

nlcst-search

utility to search for patterns in an nlcst tree
JavaScript
16
star
40

unist-util-filter

utility to create a new tree with nodes that pass a filter
JavaScript
16
star
41

hast-util-from-parse5

utility to transform Parse5’s AST to hast
JavaScript
16
star
42

mdast-util-math

mdast extension to parse and serialize math
JavaScript
15
star
43

mdast-zone

utility to treat HTML comments as ranges or markers in mdast
JavaScript
15
star
44

mdast-util-frontmatter

mdast extensions to parse and serialize frontmatter (YAML, TOML, etc)
JavaScript
15
star
45

unist-diff

Diff two unist trees
JavaScript
13
star
46

xast-util-from-xml

utility to parse from XML
JavaScript
13
star
47

hast-util-parse-selector

utility to create an element from a simple CSS selector
JavaScript
13
star
48

mdast-util-directive

mdast extension to parse and serialize generic directives (`:cite[smith04]`)
JavaScript
12
star
49

estree-util-to-js

estree (and esast) utility to serialize as JavaScript
JavaScript
12
star
50

hast-util-is-element

utility to check if a node is a (certain) element
JavaScript
12
star
51

unist-util-remove-position

utility to remove positions from a tree
JavaScript
12
star
52

mdast-util-gfm-table

mdast extension to parse and serialize GFM tables
JavaScript
12
star
53

xastscript

utility to create xast trees
JavaScript
11
star
54

unist-util-modify-children

utility to modify direct children of a parent
JavaScript
11
star
55

mdast-util-find-and-replace

mdast utility to find and replace text in a tree
JavaScript
11
star
56

esast-util-from-js

estree (and esast) utility to parse from JavaScript
JavaScript
11
star
57

mdast-util-heading-range

utility to use headings as ranges in mdast
JavaScript
10
star
58

hast-util-raw

utility to reparse a hast tree
JavaScript
10
star
59

mdast-util-definitions

utility to find definition nodes in an mdast tree
JavaScript
10
star
60

xast-util-feed

xast utility to build feeds (rss, atom)
JavaScript
9
star
61

mdast-util-to-nlcst

utility to transform mdast to nlcst
JavaScript
9
star
62

mdast-comment-marker

utility to parse a comment marker in mdast
JavaScript
9
star
63

ideas

Share ideas for new utilities and tools built with @syntax-tree
9
star
64

nlcst-is-literal

utility to check whether an nlcst node is meant literally
JavaScript
9
star
65

unist-util-index

utility to index property values or computed keys to nodes
JavaScript
8
star
66

unist-util-visit-children

unist utility to visit direct children of a parent
JavaScript
8
star
67

unist-util-position

utility to get the position of a node
JavaScript
8
star
68

mdast-util-mdxjs-esm

mdast extension to parse and serialize MDX.js ESM (import/exports)
JavaScript
8
star
69

mdast-util-gfm-autolink-literal

mdast extension to parse and serialize GFM autolink literals
JavaScript
8
star
70

hast-util-from-html-isomorphic

hast utility that turns HTML into a syntax tree (while being small in browsers)
JavaScript
8
star
71

unist-builder-blueprint

utility to transform trees to unist-builder notation
7
star
72

estree-util-attach-comments

utility to attach comments to estree nodes
JavaScript
7
star
73

hast-util-heading-rank

utility to get the rank (or depth, level) of headings
JavaScript
7
star
74

nlcst-normalize

utility to normalize an nlcst word for easier comparison
JavaScript
7
star
75

mdast-util-compact

utility to make an mdast tree compact
JavaScript
7
star
76

.github

Community health files for syntax-tree, unist, hast, xast, mdast, and nlcst
6
star
77

unist-util-source

utility to get the source of a node or position
JavaScript
6
star
78

hast-util-find-and-replace

utility to find and replace text in a hast tree
JavaScript
6
star
79

mdast-squeeze-paragraphs

utility to remove empty paragraphs from an mdast tree
JavaScript
6
star
80

unist-util-stringify-position

utility to serialize a node, position, or point as a human readable location
JavaScript
6
star
81

unist-util-find-all-after

utility to find nodes after another node
JavaScript
6
star
82

mdast-normalize-headings

utility to make sure there is no more than a single top-level heading in the document
JavaScript
6
star
83

unist-util-find-after

unist utility to find a node after another node
JavaScript
6
star
84

hast-util-heading

utility to check if a node is heading content
JavaScript
6
star
85

unist-util-find-all-before

utility to find nodes before another node
JavaScript
5
star
86

mdast-util-gfm-footnote

mdast extension to parse and serialize GFM footnotes
JavaScript
5
star
87

mdast-util-gfm-strikethrough

mdast extension to parse and serialize GFM strikethrough
JavaScript
5
star
88

unist-util-parents

unist utility to add references to parents on nodes in a tree
JavaScript
5
star
89

mdast-util-heading-style

utility to get the style of an mdast heading
JavaScript
5
star
90

mdast-util-gfm-task-list-item

mdast extension to parse and serialize GFM task list items
JavaScript
5
star
91

unist-util-find-before

utility to find a node before another node
JavaScript
4
star
92

hast-util-to-nlcst

utility to transform hast to nlcst
JavaScript
4
star
93

mdast-util-from-quill-delta

utility to transform Quill delta to mdast
4
star
94

xast-util-to-string

xast utility to get the text value of a node
JavaScript
4
star
95

estree-util-visit

esast (and estree) utility to visit nodes
JavaScript
4
star
96

xast-util-sitemap

xast utility to build a sitemap
JavaScript
4
star
97

hast-util-to-xast

utility to transform to xast (xml)
JavaScript
4
star
98

hast-util-to-snabbdom

utility to transform to a Snabbdom tree
4
star
99

unist-util-generated

utility to check if a node is generated
JavaScript
4
star
100

hast-util-whitespace

utility to check if a node is inter-element whitespace
JavaScript
4
star