This package provides utilities to work with Markdown
abstract syntax tree (MDAST). It contains:
- functions to create the different node types (also useful in pure Javascript);
- type guard and assertion functions to ensure the node is of expected type (especially useful with Typescript).
This package also re-export all types of @types/mdast
and type of @types/unist
which are useful for Markdown
. It is therefore not necessary to include those packages if you are using this one.
Documents, messages, code (including variable names and comments), are in English.
Anyway, because Slune is French firm, all documents and important messages must also be provided in French. Other translations are welcome.
🇫🇷 Une version française de ce document se trouve ici.
Installation is done using npm install
command:
$ npm install --save ts-mdast
For each NodeType node type, the package contains :
- an
assertNodeType(node: Node)
function raising an exception ifnode
is not of type NodeType ; - an
isNodeType(node: Node)
function returningtrue
ifnode
is of type NodeType ; - a
createNodeType(...)
function creating a node of type NodeType.
The first two functions are understood by Typescript which is after able to control the node type in an appropriate way.
The creation function is used this as following:
createNodeType(mandatory1, mandatory2 [, optional1 [, optional2 [, optional3]] | {optional1, optional2, optional3}] [, children])
where mandatory_
represent the mandatory parameters, optional_
the optional parameters and children
an array with child nodes. Following calls are therefore possible:
createNodeType(mandatory1, mandatory2, optional1, [child1, child2])
createNodeType(mandatory1, mandatory2, optional1, optional2)
createNodeType(mandatory1, mandatory2, { optional1, optional3 })
createNodeType(mandatory1, mandatory2, { optional2, optional3 }, [child1, child2])
createNodeType(mandatory1, mandatory2, [child1, child2])
The array containing children is directly used in the node and can therefore be modified after node creation:
const children: Content[] = []
createNodeType(mandatory1, mandatory2, children)
children.push(createNodeType(mandatory1, mandatory2))
Notes:
- The
createNodeType(...)
function only exists for concrete nodes (not onContent
norBlockContent
for example). - All node types do not have mandatory parameters, optional parameters or child nodes.
Reference: Parent
Type assertion:
function assertParent(node: Node): asserts node is Parent
Type guard:
function isParent(node: Node): node is Parent
Reference: Literal
Type assertion:
function assertLiteral(node: Node): asserts node is Literal
Type guard:
function isLiteral(node: Node): node is Literal
Reference: Content
Type assertion:
function assertContent(node: Node): asserts node is Content
Type guard:
function isContent(node: Node): node is Content
Reference: TopLevelContent
Type assertion:
function assertTopLevelContent(node: Node): asserts node is TopLevelContent
Type guard:
function isTopLevelContent(node: Node): node is TopLevelContent
Reference: BlockContent
Type assertion:
function assertBlockContent(node: Node): asserts node is BlockContent
Type guard:
function isBlockContent(node: Node): node is BlockContent
Reference: FrontmatterContent
Type assertion:
function assertFrontmatterContent(node: Node): asserts node is FrontmatterContent
Type guard:
function isFrontmatterContent(node: Node): node is FrontmatterContent
Reference: DefinitionContent
Type assertion:
function assertDefinitionContent(node: Node): asserts node is DefinitionContent
Type guard:
function isDefinitionContent(node: Node): node is DefinitionContent
Reference: ListContent
Type assertion:
function assertListContent(node: Node): asserts node is ListContent
Type guard:
function isListContent(node: Node): node is ListContent
Reference: TableContent
Type assertion:
function assertTableContent(node: Node): asserts node is TableContent
Type guard:
function isTableContent(node: Node): node is TableContent
Reference: RowContent
Type assertion:
function assertRowContent(node: Node): asserts node is RowContent
Type guard:
function isRowContent(node: Node): node is RowContent
Reference: PhrasingContent
Type assertion:
function assertPhrasingContent(node: Node): asserts node is PhrasingContent
Type guard:
function isPhrasingContent(node: Node): node is PhrasingContent
Reference: StaticPhrasingContent
Type assertion:
function assertStaticPhrasingContent(node: Node): asserts node is StaticPhrasingContent
Type guard:
function isStaticPhrasingContent(node: Node): node is StaticPhrasingContent
Reference: Root
Type assertion:
function assertRoot(node: Node): asserts node is Root
Type guard:
function isRoot(node: Node): node is Root
Creation:
function createRoot(children?: Content[]): Root
Reference: Paragraph
Type assertion:
function assertParagraph(node: Node): asserts node is Paragraph
Type guard:
function isParagraph(node: Node): node is Paragraph
Creation:
function createParagraph(children?: PhrasingContent[]): Paragraph
Reference: Heading
Type assertion:
function assertHeading(node: Node): asserts node is Heading
Type guard:
function isHeading(node: Node): node is Heading
Creation:
function createHeading(depth: 1 | 2 | 3 | 4 | 5 | 6, children?: PhrasingContent[])
Reference: ThematicBreak
Type assertion:
function assertThematicBreak(node: Node): asserts node is ThematicBreak
Type guard:
function isThematicBreak(node: Node): node is ThematicBreak
Creation:
function createThematicBreak(): ThematicBreak
Reference: Blockquote
Type assertion:
function assertBlockquote(node: Node): asserts node is Blockquote
Type guard:
function isBlockquote(node: Node): node is Blockquote
Creation:
function createBlockquote(children?: BlockContent[]): Blockquote
Reference: List
Type assertion:
function assertList(node: Node): asserts node is List
Type guard:
function isList(node: Node): node is List
Creation:
function createList(ordered: boolean, start: number, spread: boolean, children?: ListContent[]): List
function createList(ordered: boolean, start: number, children?: ListContent[]): List
function createList(ordered: boolean, children?: ListContent[]): List
function createList(children?: ListContent[]): List
function createList(
options: { ordered?: boolean; start?: number; spread?: boolean },
children?: ListContent[]
): List
Reference: ListItem
Type assertion:
function assertListItem(node: Node): asserts node is ListItem
Type guard:
function isListItem(node: Node): node is ListItem
Creation:
function createListItem(checked: boolean, spread: boolean, children?: BlockContent[]): ListItem
function createListItem(checked: boolean, children?: BlockContent[]): ListItem
function createListItem(children?: BlockContent[]): ListItem
function createListItem(
options: { checked?: boolean; spread?: boolean },
children?: BlockContent[]
): ListItem
Reference: Table
Type assertion:
function assertTable(node: Node): asserts node is Table
Type guard:
function isTable(node: Node): node is Table
Creation:
function createTable(align: AlignType[], children?: TableContent[]): Table
function createTable(children?: TableContent[]): Table
function createTable(options: { align?: AlignType[] }, children?: TableContent[]): Table
Reference: TableRow
Type assertion:
function assertTableRow(node: Node): asserts node is TableRow
Type guard:
function isTableRow(node: Node): node is TableRow
Creation:
function createTableRow(children?: RowContent[]): TableRow
Reference: TableCell
Type assertion:
function assertTableCell(node: Node): asserts node is TableCell
Type guard:
function isTableCell(node: Node): node is TableCell
Creation:
function createTableCell(children?: PhrasingContent[]): TableCell
Reference: HTML
Type assertion:
function assertHTML(node: Node): asserts node is HTML
Type guard:
function isHTML(node: Node): node is HTML
Creation:
function createHTML(value: string): HTML
Reference: Code
Type assertion:
function assertCode(node: Node): asserts node is Code
Type guard:
function isCode(node: Node): node is Code
Creation:
function createCode(value: string, lang?: string, meta?: string): Code
function createCode(value: string, options: { lang?: string; meta?: string }): Code
Reference: YAML
Type assertion:
function assertYAML(node: Node): asserts node is YAML
Type guard:
function isYAML(node: Node): node is YAML
Creation:
function createYAML(value: string): YAML
Reference: Definition
Type assertion:
function assertDefinition(node: Node): asserts node is Definition
Type guard:
function isDefinition(node: Node): node is Definition
Creation:
function createDefinition(identifier: string, url: string, label?: string, title?: string): Definition
function createDefinition(
identifier: string,
url: string,
options: { label?: string; title?: string }
): Definition
Reference: FootnoteDefinition
Type assertion:
function assertFootnoteDefinition(node: Node): asserts node is FootnoteDefinition
Type guard:
function isFootnoteDefinition(node: Node): node is FootnoteDefinition
Creation:
function createFootnoteDefinition(
identifier: string,
label: string,
children?: BlockContent[]
): FootnoteDefinition
function createFootnoteDefinition(identifier: string, children?: BlockContent[]): FootnoteDefinition
function createFootnoteDefinition(
identifier: string,
options: { label?: string },
children?: BlockContent[]
): FootnoteDefinition
Reference: Text
Type assertion:
function assertText(node: Node): asserts node is Text
Type guard:
function isText(node: Node): node is Text
Creation:
function createText(value: string): Text
Reference: Emphasis
Type assertion:
function assertEmphasis(node: Node): asserts node is Emphasis
Type guard:
function isEmphasis(node: Node): node is Emphasis
Creation:
function createEmphasis(children?: PhrasingContent[]): Emphasis
Reference: Strong
Type assertion:
function assertStrong(node: Node): asserts node is Strong
Type guard:
function isStrong(node: Node): node is Strong
Creation:
function createStrong(children?: PhrasingContent[]): Strong
Reference: Delete
Type assertion:
function assertDelete(node: Node): asserts node is Delete
Type guard:
function isDelete(node: Node): node is Delete
Creation:
function createDelete(children?: PhrasingContent[]): Delete
Reference: InlineCode
Type assertion:
function assertInlineCode(node: Node): asserts node is InlineCode
Type guard:
function isInlineCode(node: Node): node is InlineCode
Creation:
function createInlineCode(value: string): InlineCode
Reference: Break
Type assertion:
function assertBreak(node: Node): asserts node is Break
Type guard:
function isBreak(node: Node): node is Break
Creation:
function createBreak(): Break
Reference: Link
Type assertion:
function assertLink(node: Node): asserts node is Link
Type guard:
function isLink(node: Node): node is Link
Creation:
function createLink(url: string, title: string, children?: StaticPhrasingContent[]): Link
function createLink(url: string, children?: StaticPhrasingContent[]): Link
function createLink(url: string, options: { title?: string }, children?: StaticPhrasingContent[]): Link
Reference: Image
Type assertion:
function assertImage(node: Node): asserts node is Image
Type guard:
function isImage(node: Node): node is Image
Creation:
function createImage(url: string, alt?: string, title?: string): Image
function createImage(url: string, options: { alt?: string; title?: string }): Image
Reference: LinkReference
Type assertion:
function assertLinkReference(node: Node): asserts node is LinkReference
Type guard:
function isLinkReference(node: Node): node is LinkReference
Creation:
function createLinkReference(
identifier: string,
referenceType: ReferenceType,
label: string,
children?: StaticPhrasingContent[]
): LinkReference
function createLinkReference(
identifier: string,
referenceType: ReferenceType,
children?: StaticPhrasingContent[]
): LinkReference
function createLinkReference(
identifier: string,
referenceType: ReferenceType,
options: { label?: string },
children?: StaticPhrasingContent[]
): LinkReference
Reference: ImageReference
Type assertion:
function assertImageReference(node: Node): asserts node is ImageReference
Type guard:
function isImageReference(node: Node): node is ImageReference
Creation:
function createImageReference(
identifier: string,
referenceType: ReferenceType,
alt?: string,
label?: string
): ImageReference
function createImageReference(
identifier: string,
referenceType: ReferenceType,
options: { alt?: string; label?: string }
): ImageReference
Reference: Footnote
Type assertion:
function assertFootnote(node: Node): asserts node is Footnote
Type guard:
function isFootnote(node: Node): node is Footnote
Creation:
function createFootnote(children?: PhrasingContent[]): Footnote
Reference: FootnoteReference
Type assertion:
function assertFootnoteReference(node: Node): asserts node is FootnoteReference
Type guard:
function isFootnoteReference(node: Node): node is FootnoteReference
Creation:
function createFootnoteReference(identifier: string, label?: string): FootnoteReference
function createFootnoteReference(identifier: string, options: { label?: string }): FootnoteReference
Even though we cannot guarantee a response time, please feel free to file an issue if you have any question or problem using the package.
Pull Requests are welcome. You can, of course, submit corrections or improvements for code, but do not hesitate to also improve documentation, even for small spell or grammar errors.