From 294b1d281750b3abc321b05d0fdb88f355d298cf Mon Sep 17 00:00:00 2001 From: Evan You Date: Thu, 6 Jan 2022 14:50:38 +0800 Subject: [PATCH] refactor: make MarkdowRenderer type compatible with MarkdownIt --- src/node/markdown/markdown.ts | 24 ++---------------------- src/node/markdown/plugins/header.ts | 6 +++--- src/node/markdown/plugins/hoist.ts | 4 ++-- src/node/markdown/plugins/link.ts | 4 ++-- src/node/markdownToVue.ts | 11 +++++++++-- 5 files changed, 18 insertions(+), 31 deletions(-) diff --git a/src/node/markdown/markdown.ts b/src/node/markdown/markdown.ts index 1b204b14..934f15e2 100644 --- a/src/node/markdown/markdown.ts +++ b/src/node/markdown/markdown.ts @@ -39,15 +39,10 @@ export interface MarkdownParsedData { headers?: Header[] } -export interface MarkdownRenderer { +export interface MarkdownRenderer extends MarkdownIt { __path: string __relativePath: string __data: MarkdownParsedData - render: ( - src: string, - path: string, - relatiovePath: string - ) => { html: string; data: any } } export type { Header } @@ -100,20 +95,5 @@ export const createMarkdownRenderer = ( md.use(lineNumberPlugin) } - const wrappedMd = md as any as MarkdownRenderer - - // wrap render so that we can return both the html and extracted data. - const render = md.render - wrappedMd.render = (src, path, relativePath) => { - wrappedMd.__data = {} - wrappedMd.__path = path - wrappedMd.__relativePath = relativePath - const html = render.call(md, src) - return { - html, - data: wrappedMd.__data - } - } - - return wrappedMd + return md as MarkdownRenderer } diff --git a/src/node/markdown/plugins/header.ts b/src/node/markdown/plugins/header.ts index df44d2ca..8c6e5923 100644 --- a/src/node/markdown/plugins/header.ts +++ b/src/node/markdown/plugins/header.ts @@ -1,7 +1,7 @@ -import MarkdownIt from 'markdown-it' -import { MarkdownParsedData } from '../markdown' +import { MarkdownRenderer } from '../markdown' import { deeplyParseHeader } from '../../utils/parseHeader' import { slugify } from './slugify' +import MarkdownIt from 'markdown-it' export const extractHeaderPlugin = (md: MarkdownIt, include = ['h2', 'h3']) => { md.renderer.rules.heading_open = (tokens, i, options, env, self) => { @@ -10,7 +10,7 @@ export const extractHeaderPlugin = (md: MarkdownIt, include = ['h2', 'h3']) => { const title = tokens[i + 1].content const idAttr = token.attrs!.find(([name]) => name === 'id') const slug = idAttr && idAttr[1] - const data = (md as any).__data as MarkdownParsedData + const data = (md as MarkdownRenderer).__data const headers = data.headers || (data.headers = []) headers.push({ level: parseInt(token.tag.slice(1), 10), diff --git a/src/node/markdown/plugins/hoist.ts b/src/node/markdown/plugins/hoist.ts index 2a152d0e..ca309d5f 100644 --- a/src/node/markdown/plugins/hoist.ts +++ b/src/node/markdown/plugins/hoist.ts @@ -1,5 +1,5 @@ import MarkdownIt from 'markdown-it' -import { MarkdownParsedData } from '../markdown' +import { MarkdownRenderer } from '../markdown' // hoist