mdast extension to parse and serialize GFM strikethrough

Downloads in past


401.0.32 months ago3 years agoMinified + gzip package size for mdast-util-gfm-strikethrough in KB


!Buildbuild-badgebuild !Coveragecoverage-badgecoverage !Downloadsdownloads-badgedownloads !Sizesize-badgesize !Sponsorssponsors-badgecollective !Backersbackers-badgecollective !Chatchat-badgechat
mdast extensions to parse and serialize GFM strikethrough.


*   [`gfmStrikethroughFromMarkdown`](#gfmstrikethroughfrommarkdown)
*   [`gfmStrikethroughToMarkdown`](#gfmstrikethroughtomarkdown)
*   [Nodes](#nodes)
*   [Content model](#content-model)

What is this?

This package contains two extensions that add support for GFM strikethrough syntax in markdown to mdast. These extensions plug into mdast-util-from-markdownmdast-util-from-markdown (to support parsing strikethrough in markdown into a syntax tree) and mdast-util-to-markdownmdast-util-to-markdown (to support serializing strikethrough in syntax trees to markdown).

When to use this

You can use these extensions when you are working with mdast-util-from-markdown and mdast-util-to-markdown already.
When working with mdast-util-from-markdown, you must combine this package with micromark-extension-gfm-strikethroughextension.
When you don’t need a syntax tree, you can use micromarkmicromark directly with micromark-extension-gfm-strikethrough.
When you are working with syntax trees and want all of GFM, use mdast-util-gfmmdast-util-gfm instead.
All these packages are used remark-gfmremark-gfm, which focusses on making it easier to transform content by abstracting these internals away.
This utility does not handle how markdown is turned to HTML. That’s done by mdast-util-to-hastmdast-util-to-hast. If you want a different element, you should configure that utility.


This package is ESM onlyesm. In Node.js (version 14.14+ and 16.0+), install with npm:
npm install mdast-util-gfm-strikethrough

In Deno with esm.shesmsh:
import {gfmStrikethroughFromMarkdown, gfmStrikethroughToMarkdown} from ''

In browsers with esm.shesmsh:
<script type="module">
  import {gfmStrikethroughFromMarkdown, gfmStrikethroughToMarkdown} from ''


Say our document contains:
*Emphasis*, **importance**, and ~~strikethrough~~.

…and our module example.js looks as follows:
import fs from 'node:fs/promises'
import {fromMarkdown} from 'mdast-util-from-markdown'
import {toMarkdown} from 'mdast-util-to-markdown'
import {gfmStrikethrough} from 'micromark-extension-gfm-strikethrough'
import {gfmStrikethroughFromMarkdown, gfmStrikethroughToMarkdown} from 'mdast-util-gfm-strikethrough'

const doc = await fs.readFile('')

const tree = fromMarkdown(doc, {
  extensions: [gfmStrikethrough()],
  mdastExtensions: [gfmStrikethroughFromMarkdown]


const out = toMarkdown(tree, {extensions: [gfmStrikethroughToMarkdown]})


Now, running node example yields:
  type: 'root',
  children: [
      type: 'paragraph',
      children: [
        {type: 'emphasis', children: [{type: 'text', value: 'Emphasis'}]},
        {type: 'text', value: ', '},
        {type: 'strong', children: [{type: 'text', value: 'importance'}]},
        {type: 'text', value: ', and '},
        {type: 'delete', children: [{type: 'text', value: 'strikethrough'}]},
        {type: 'text', value: '.'}

*Emphasis*, **importance**, and ~~strikethrough~~.


This package exports the identifiers gfmStrikethroughFromMarkdownapi-gfm-strikethrough-from-markdown and gfmStrikethroughToMarkdownapi-gfm-strikethrough-to-markdown. There is no default export.


Extension for mdast-util-from-markdownmdast-util-from-markdown to enable GFM strikethrough (FromMarkdownExtensionfrom-markdown-extension).


Extension for mdast-util-to-markdownmdast-util-to-markdown to enable GFM strikethrough (ToMarkdownExtensionto-markdown-extension).


This utility does not handle how markdown is turned to HTML. That’s done by mdast-util-to-hastmdast-util-to-hast. If you want a different element, you should configure that utility.


See Syntax in micromark-extension-gfm-strikethroughsyntax.

Syntax tree

The following interfaces are added to mdast by this utility.



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

Delete (Parentdfn-parent) represents contents that are no longer accurate or no longer relevant.
Delete can be used where static phrasingdfn-static-phrasing-content content is expected. Its content model is transparentdfn-transparent-content content.
For example, the following markdown:

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

Content model

StaticPhrasingContent (GFM strikethrough)

type StaticPhrasingContentGfm = Delete | StaticPhrasingContent


This package is fully typed with TypeScript
. It does not export additional types.
The Delete type of the mdast node is exposed from @types/mdast.


Projects maintained by the unified collective are compatible with all maintained versions of Node.js. As of now, that is Node.js 14.14+ and 16.0+. Our projects sometimes work with older versions, but this is not guaranteed.
This plugin works with mdast-util-from-markdown version 1+ and mdast-util-to-markdown version 1+.


— remark plugin to support GFM
— same but all of GFM (autolink literals, footnotes, strikethrough, tables,
— micromark extension to parse GFM strikethrough


See contributing.mdcontributing in syntax-tree/.githubhealth for ways to get started. See support.mdsupport for ways to get help.
This project has a code of conductcoc. By interacting with this repository, organization, or community you agree to abide by its terms.


MITlicense © Titus Wormerauthor