diff --git a/package.json b/package.json index 66fcb0f..5cca77d 100644 --- a/package.json +++ b/package.json @@ -83,7 +83,7 @@ "@mdit-vue/types": "^2.1.0", "@types/markdown-it": "^14.1.2", "markdown-it": "^14.1.0", - "markdown-it-async": "^2.0.0", + "markdown-it-async": "^2.1.0", "unplugin": "^2.2.0", "unplugin-utils": "^0.2.4" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e3b2035..b4c15f1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^14.1.0 version: 14.1.0 markdown-it-async: - specifier: ^2.0.0 - version: 2.0.0 + specifier: ^2.1.0 + version: 2.1.0 unplugin: specifier: ^2.2.0 version: 2.2.0 @@ -3736,8 +3736,8 @@ packages: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} - markdown-it-async@2.0.0: - resolution: {integrity: sha512-jBthmQR5MwXR9Y8Y0teRoZAenaKQMdjuTfpbNARqMBSRPvyzyXCVduHZHakyyhL3ugIacCobXJrO07t277sIjw==} + markdown-it-async@2.1.0: + resolution: {integrity: sha512-sEC6QMni6J7DSSErSRbhCfK6RA7hGfhZa+AXfVrBB7KaNWra7kIrBkualz+g5nPk4NeSRYe2vN2vHH4LJ4lFXg==} markdown-it-prism@2.3.0: resolution: {integrity: sha512-ePtHY80gZyeje4bn3R3SL0jpd1C9HFaYffJW2Ma0YD+tspqa2v9TuVwUyFwboFu4jnFNcO8oPQROgbcYJbmBvw==} @@ -9527,7 +9527,7 @@ snapshots: dependencies: semver: 6.3.1 - markdown-it-async@2.0.0: + markdown-it-async@2.1.0: dependencies: '@types/markdown-it': 14.1.2 markdown-it: 14.1.0 diff --git a/src/core/markdown.ts b/src/core/markdown.ts index 95b0837..219e5ce 100644 --- a/src/core/markdown.ts +++ b/src/core/markdown.ts @@ -114,7 +114,13 @@ export function createMarkdown(options: ResolvedOptions) { raw = await transforms.before?.(raw, id) ?? raw const env: MarkdownEnv = { id } - let html = await md.renderAsync(raw, env) + + let tokens = md.parse(raw, env) + + tokens = await transforms.tokens?.(tokens, options.markdownItOptions, env, md) ?? tokens + + let html = await md.rendererRenderAsync(tokens, md.options as any, env) + const { excerpt = '', frontmatter: data = null } = env if (wrapperDiv) { diff --git a/src/index.ts b/src/index.ts index 82f68f0..70e66d4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,7 @@ import type { UnpluginFactory } from 'unplugin' import type { Options } from './types' -import { createFilter } from 'unplugin-utils' import { createUnplugin } from 'unplugin' +import { createFilter } from 'unplugin-utils' import { createMarkdown } from './core/markdown' import { resolveOptions } from './core/options' diff --git a/src/types.ts b/src/types.ts index 664e75a..f451211 100644 --- a/src/types.ts +++ b/src/types.ts @@ -6,6 +6,7 @@ import type { MarkdownItAsyncOptions, PluginSimple as MarkdownItPluginSimple, PluginWithOptions as MarkdownItPluginWithOptions, + Token, } from 'markdown-it-async' import type { FilterPattern } from 'unplugin-utils' import type { preprocessHead } from './core/head' @@ -196,12 +197,22 @@ export interface Options { * Custom tranformations apply before and after the markdown transformation */ transforms?: { - before?: (code: string, id: string) => string | Promise - after?: (code: string, id: string) => string | Promise + /** + * Pre-transformations + */ + before?: (code: string, id: string) => Awaitable + /** + * Transform internal MarkdownIt tokens + */ + tokens?: (tokens: Token[], options: MarkdownItAsyncOptions, env: any, self: MarkdownItAsync) => Awaitable + /** + * Post-transformations + */ + after?: (code: string, id: string) => Awaitable /** * Return extra code to be injected into the `