| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /**
- * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext
- * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension
- * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle
- *
- * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle
- * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension
- *
- * @typedef {import('../index.js').MdxjsEsm} MdxjsEsm
- */
- // To do: next major: expose functions.
- import {ok as assert} from 'devlop'
- /**
- * Create an extension for `mdast-util-from-markdown` to enable MDX.js ESM in
- * markdown.
- *
- * When using the micromark syntax extension with `addResult`, nodes will have
- * a `data.estree` field set to an ESTree [`Program`][program] node.
- *
- * @returns {FromMarkdownExtension}
- * Extension for `mdast-util-from-markdown` to enable MDX.js ESM.
- */
- export function mdxjsEsmFromMarkdown() {
- return {
- enter: {mdxjsEsm: enterMdxjsEsm},
- exit: {mdxjsEsm: exitMdxjsEsm, mdxjsEsmData: exitMdxjsEsmData}
- }
- }
- /**
- * Create an extension for `mdast-util-to-markdown` to enable MDX.js ESM in
- * markdown.
- *
- * @returns {ToMarkdownExtension}
- * Extension for `mdast-util-to-markdown` to enable MDX.js ESM.
- */
- export function mdxjsEsmToMarkdown() {
- return {handlers: {mdxjsEsm: handleMdxjsEsm}}
- }
- /**
- * @this {CompileContext}
- * @type {FromMarkdownHandle}
- */
- function enterMdxjsEsm(token) {
- this.enter({type: 'mdxjsEsm', value: ''}, token)
- this.buffer() // Capture EOLs
- }
- /**
- * @this {CompileContext}
- * @type {FromMarkdownHandle}
- */
- function exitMdxjsEsm(token) {
- const value = this.resume()
- const node = this.stack[this.stack.length - 1]
- assert(node.type === 'mdxjsEsm')
- this.exit(token)
- const estree = token.estree
- node.value = value
- if (estree) {
- node.data = {estree}
- }
- }
- /**
- * @this {CompileContext}
- * @type {FromMarkdownHandle}
- */
- function exitMdxjsEsmData(token) {
- this.config.enter.data.call(this, token)
- this.config.exit.data.call(this, token)
- }
- /**
- * @type {ToMarkdownHandle}
- * @param {MdxjsEsm} node
- */
- function handleMdxjsEsm(node) {
- return node.value || ''
- }
|