/** * @import {Root} from 'mdast' * @import {Options} from 'remark-gfm' * @import {} from 'remark-parse' * @import {} from 'remark-stringify' * @import {Processor} from 'unified' */ import {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm' import {gfm} from 'micromark-extension-gfm' /** @type {Options} */ const emptyOptions = {} /** * Add support GFM (autolink literals, footnotes, strikethrough, tables, * tasklists). * * @param {Options | null | undefined} [options] * Configuration (optional). * @returns {undefined} * Nothing. */ export default function remarkGfm(options) { // @ts-expect-error: TS is wrong about `this`. // eslint-disable-next-line unicorn/no-this-assignment const self = /** @type {Processor} */ (this) const settings = options || emptyOptions const data = self.data() const micromarkExtensions = data.micromarkExtensions || (data.micromarkExtensions = []) const fromMarkdownExtensions = data.fromMarkdownExtensions || (data.fromMarkdownExtensions = []) const toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []) micromarkExtensions.push(gfm(settings)) fromMarkdownExtensions.push(gfmFromMarkdown()) toMarkdownExtensions.push(gfmToMarkdown(settings)) }