From 7253caa4071071835c1ebf49abf94a6beac85008 Mon Sep 17 00:00:00 2001 From: YunYouJun Date: Sat, 25 Jan 2025 02:25:52 +0800 Subject: [PATCH] fix: MarkdownItAsync typecheck for markdown-it --- packages/valaxy/node/plugins/markdown/index.ts | 10 ++++++---- packages/valaxy/node/plugins/markdown/setup.ts | 14 ++++++++------ packages/valaxy/node/plugins/markdown/types.ts | 9 +++++---- packages/valaxy/node/plugins/vueRouter.ts | 6 +++--- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/packages/valaxy/node/plugins/markdown/index.ts b/packages/valaxy/node/plugins/markdown/index.ts index 2482db625..216b24e3c 100644 --- a/packages/valaxy/node/plugins/markdown/index.ts +++ b/packages/valaxy/node/plugins/markdown/index.ts @@ -1,7 +1,9 @@ import type { Header } from '@valaxyjs/utils' + +import type { MarkdownItAsync } from 'markdown-it-async' import type { ResolvedValaxyOptions } from '../../options' +import { createMarkdownItAsync } from 'markdown-it-async' -import MarkdownIt from 'markdown-it' import { highlight } from './plugins/highlight' import { defaultCodeTheme, setupMarkdownPlugins } from './setup' @@ -15,16 +17,16 @@ export interface MarkdownParsedData { headers?: Header[] } -export async function createMarkdownRenderer(options?: ResolvedValaxyOptions): Promise { +export async function createMarkdownRenderer(options?: ResolvedValaxyOptions): Promise { const mdOptions = options?.config.markdown || {} const theme = mdOptions.theme ?? defaultCodeTheme - const md = MarkdownIt({ + const md = createMarkdownItAsync({ html: true, linkify: true, highlight: await highlight(theme, mdOptions), ...mdOptions.options, - }) as MarkdownIt + }) md.linkify.set({ fuzzyLink: false }) diff --git a/packages/valaxy/node/plugins/markdown/setup.ts b/packages/valaxy/node/plugins/markdown/setup.ts index 1cc18ce37..47c608e09 100644 --- a/packages/valaxy/node/plugins/markdown/setup.ts +++ b/packages/valaxy/node/plugins/markdown/setup.ts @@ -1,43 +1,45 @@ import type MarkdownIt from 'markdown-it' +import type { MarkdownItAsync } from 'markdown-it-async' import type Token from 'markdown-it/lib/token.mjs' -import type { ResolvedValaxyOptions } from '../../options' +import type { ResolvedValaxyOptions } from '../../options' import type { ThemeOptions } from './types' import { headersPlugin, type HeadersPluginOptions, } from '@mdit-vue/plugin-headers' + import { sfcPlugin, type SfcPluginOptions } from '@mdit-vue/plugin-sfc' import { titlePlugin } from '@mdit-vue/plugin-title' - import { tocPlugin, type TocPluginOptions } from '@mdit-vue/plugin-toc' import { slugify } from '@mdit-vue/shared' import { cssI18nContainer } from 'css-i18n' -import anchorPlugin from 'markdown-it-anchor' +import anchorPlugin from 'markdown-it-anchor' import attrsPlugin from 'markdown-it-attrs' -import { full as emojiPlugin } from 'markdown-it-emoji' +import { full as emojiPlugin } from 'markdown-it-emoji' import footnotePlugin from 'markdown-it-footnote' // https://www.npmjs.com/package/markdown-it-image-figures import imageFigures from 'markdown-it-image-figures' import TaskLists from 'markdown-it-task-lists' import { linkPlugin } from './plugins/link' -import { containerPlugin } from './plugins/markdown-it/container' +import { containerPlugin } from './plugins/markdown-it/container' import { footnoteTooltipPlugin } from './plugins/markdown-it/footnoteTooltip' import { highlightLinePlugin } from './plugins/markdown-it/highlightLines' import Katex from './plugins/markdown-it/katex' import { lineNumberPlugin } from './plugins/markdown-it/lineNumbers' import { preWrapperPlugin } from './plugins/markdown-it/preWrapper' + import { snippetPlugin } from './plugins/markdown-it/snippet' export const defaultCodeTheme = { light: 'github-light', dark: 'github-dark' } as const as ThemeOptions export async function setupMarkdownPlugins( - md: MarkdownIt, + md: MarkdownItAsync, options?: ResolvedValaxyOptions, // isExcerpt = false, base = '/', diff --git a/packages/valaxy/node/plugins/markdown/types.ts b/packages/valaxy/node/plugins/markdown/types.ts index 96aeaca58..2a1e37118 100644 --- a/packages/valaxy/node/plugins/markdown/types.ts +++ b/packages/valaxy/node/plugins/markdown/types.ts @@ -4,11 +4,12 @@ import type { import type { SfcPluginOptions } from '@mdit-vue/plugin-sfc' import type { TocPluginOptions } from '@mdit-vue/plugin-toc' - import type { KatexOptions } from 'katex' -import type MarkdownIt from 'markdown-it' +import type MarkdownIt from 'markdown-it' import type anchorPlugin from 'markdown-it-anchor' + +import type { MarkdownItAsync } from 'markdown-it-async' import type { BuiltinTheme, Highlighter, @@ -39,7 +40,7 @@ export interface MarkdownOptions { /** * Setup markdown-it instance before applying plugins */ - preConfig?: (md: MarkdownIt) => void + preConfig?: (md: MarkdownItAsync) => void /** * markdown-it options */ @@ -47,7 +48,7 @@ export interface MarkdownOptions { /** * config markdown-it */ - config?: (md: MarkdownIt) => void + config?: (md: MarkdownItAsync) => void anchor?: anchorPlugin.AnchorOptions attrs?: { leftDelimiter?: string diff --git a/packages/valaxy/node/plugins/vueRouter.ts b/packages/valaxy/node/plugins/vueRouter.ts index 1f5e5cbba..74af931bd 100644 --- a/packages/valaxy/node/plugins/vueRouter.ts +++ b/packages/valaxy/node/plugins/vueRouter.ts @@ -4,7 +4,7 @@ import type { ValaxyNode } from '../types' import fs from 'fs-extra' import matter from 'gray-matter' import { convert } from 'html-to-text' -import MarkdownIt from 'markdown-it' +import { MarkdownItAsync } from 'markdown-it-async' import { resolve } from 'pathe' import VueRouter from 'unplugin-vue-router/vite' @@ -17,7 +17,7 @@ import { presetStatistics } from './presets/statistics' * @param excerpt * @param type */ -function getExcerptByType(excerpt = '', type: ExcerptType = 'html', mdIt: MarkdownIt) { +function getExcerptByType(excerpt = '', type: ExcerptType = 'html', mdIt: MarkdownItAsync) { switch (type) { case 'ai': case 'md': @@ -39,7 +39,7 @@ export async function createRouterPlugin(valaxyApp: ValaxyNode) { const { options } = valaxyApp const { roots, config: valaxyConfig } = options - const mdIt = new MarkdownIt({ html: true }) + const mdIt = new MarkdownItAsync({ html: true }) await setupMarkdownPlugins(mdIt, options) return VueRouter({