import { gfmFromMarkdown } from 'mdast-util-gfm' import { visit } from 'unist-util-visit' import { gfm } from 'micromark-extension-gfm' import { fromMarkdown } from 'mdast-util-from-markdown' export function mdHas (md, test) { if (!md) return [] const tree = fromMarkdown(md, { extensions: [gfm()], mdastExtensions: [gfmFromMarkdown()] }) let found = false visit(tree, test, () => { found = true return false }) return found } export function rehypeInlineCodeProperty () { return function (tree) { visit(tree, { tagName: 'code' }, function (node, index, parent) { if (parent && parent.tagName === 'pre') { node.properties.inline = false } else { node.properties.inline = true } }) } } export function extractUrls (md) { if (!md) return [] const tree = fromMarkdown(md, { extensions: [gfm()], mdastExtensions: [gfmFromMarkdown()] }) const urls = new Set() visit(tree, ({ type }) => { return type === 'link' || type === 'image' }, ({ url }) => { urls.add(url) }) return Array.from(urls) } export const quote = (orig) => orig.split('\n') .map(line => `> ${line}`) .join('\n') + '\n'