34 lines
929 B
JavaScript
34 lines
929 B
JavaScript
/**
|
|
* @typedef {import('mdast').Root} Root
|
|
* @typedef {import('micromark-extension-gfm').Options & import('mdast-util-gfm').Options} Options
|
|
*/
|
|
|
|
import {gfm} from 'micromark-extension-gfm'
|
|
import {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'
|
|
|
|
/**
|
|
* Plugin to support GFM (autolink literals, footnotes, strikethrough, tables, tasklists).
|
|
*
|
|
* @type {import('unified').Plugin<[Options?]|void[], Root>}
|
|
*/
|
|
export default function remarkGfm(options = {}) {
|
|
const data = this.data()
|
|
|
|
add('micromarkExtensions', gfm(options))
|
|
add('fromMarkdownExtensions', gfmFromMarkdown())
|
|
add('toMarkdownExtensions', gfmToMarkdown(options))
|
|
|
|
/**
|
|
* @param {string} field
|
|
* @param {unknown} value
|
|
*/
|
|
function add(field, value) {
|
|
const list = /** @type {unknown[]} */ (
|
|
// Other extensions
|
|
/* c8 ignore next 2 */
|
|
data[field] ? data[field] : (data[field] = [])
|
|
)
|
|
|
|
list.push(value)
|
|
}
|
|
}
|