index.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. /**
  2. * @typedef {import('mdast').Root} Root
  3. * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions
  4. * @typedef {import('unified').Parser<Root>} Parser
  5. * @typedef {import('unified').Processor<Root>} Processor
  6. */
  7. /**
  8. * @typedef {Omit<FromMarkdownOptions, 'extensions' | 'mdastExtensions'>} Options
  9. */
  10. import {fromMarkdown} from 'mdast-util-from-markdown'
  11. /**
  12. * Aadd support for parsing from markdown.
  13. *
  14. * @param {Readonly<Options> | null | undefined} [options]
  15. * Configuration (optional).
  16. * @returns {undefined}
  17. * Nothing.
  18. */
  19. export default function remarkParse(options) {
  20. /** @type {Processor} */
  21. // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.
  22. const self = this
  23. self.parser = parser
  24. /**
  25. * @type {Parser}
  26. */
  27. function parser(doc) {
  28. return fromMarkdown(doc, {
  29. ...self.data('settings'),
  30. ...options,
  31. // Note: these options are not in the readme.
  32. // The goal is for them to be set by plugins on `data` instead of being
  33. // passed by users.
  34. extensions: self.data('micromarkExtensions') || [],
  35. mdastExtensions: self.data('fromMarkdownExtensions') || []
  36. })
  37. }
  38. }