markdown.ts 926 B

1234567891011121314151617181920212223
  1. /** Shared Markdown parsing and depth-first traversal for documentation gates. */
  2. import { fromMarkdown } from 'mdast-util-from-markdown'
  3. import { gfmFromMarkdown } from 'mdast-util-gfm'
  4. import { gfm } from 'micromark-extension-gfm'
  5. import type { Nodes } from 'mdast'
  6. /** Parse GitHub-flavored Markdown with the repository's standard extensions. */
  7. export function parseMarkdown(source: string): Nodes {
  8. return fromMarkdown(source, { extensions: [gfm()], mdastExtensions: [gfmFromMarkdown()] })
  9. }
  10. /**
  11. * Visit a Markdown tree depth-first; returning false prunes a node's children.
  12. * @param node - current tree node.
  13. * @param visitor - callback invoked before each node's children.
  14. */
  15. export function visitMarkdown(node: Nodes, visitor: (node: Nodes) => boolean | void): void {
  16. if (visitor(node) === false) return
  17. if ('children' in node) {
  18. for (const child of node.children) visitMarkdown(child, visitor)
  19. }
  20. }