| 1 | import matter from 'gray-matter' |
| 2 | import { parse as mdParse } from './parse' |
| 3 | import { renderer } from './renderer' |
| 4 | import { AnchorLinkProvider } from 'components/markdown/Heading' |
| 5 | |
| 6 | const toJSON = (value: any) => JSON.parse(JSON.stringify(value)) |
| 7 | |
| 8 | export const parseMatter = (md: string) => |
| 9 | matter(md, { excerpt_separator: '<!-- more -->' }) |
| 10 | |
| 11 | export const parse = async (markdown: string) => { |
| 12 | const md = parseMatter(markdown) |
| 13 | const mdast = toJSON(await mdParse(md.content)) |
| 14 | |
| 15 | return { markdown, mdast, data: toJSON(md.data) } |
| 16 | } |
| 17 | |
| 18 | export const renderToReact = ( |
| 19 | mdast: any, |
| 20 | { anchorLink = true }: { anchorLink?: boolean } = {} |
| 21 | ) => ( |
| 22 | <AnchorLinkProvider value={anchorLink}>{renderer(mdast)}</AnchorLinkProvider> |
| 23 | ) |
| 24 |