Skip to content

Commit d12e23d

Browse files
authored
feat: expose shikijiSetup hook (#3344)
1 parent 00eec7a commit d12e23d

File tree

2 files changed

+20
-20
lines changed

2 files changed

+20
-20
lines changed

Diff for: src/node/markdown/markdown.ts

+7-11
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ import type {
3131
ThemeRegistration,
3232
BuiltinTheme,
3333
LanguageInput,
34-
ShikijiTransformer
34+
ShikijiTransformer,
35+
Highlighter
3536
} from 'shikiji'
3637

3738
export type { Header } from '../shared'
@@ -103,6 +104,10 @@ export interface MarkdownOptions extends MarkdownIt.Options {
103104
* @see https://github.com/antfu/shikiji#hast-transformers
104105
*/
105106
codeTransformers?: ShikijiTransformer[]
107+
/**
108+
* Setup Shikiji instance
109+
*/
110+
shikijiSetup?: (shikiji: Highlighter) => void | Promise<void>
106111

107112
/* ==================== Markdown It Plugins ==================== */
108113

@@ -176,16 +181,7 @@ export const createMarkdownRenderer = async (
176181
const md = MarkdownIt({
177182
html: true,
178183
linkify: true,
179-
highlight:
180-
options.highlight ||
181-
(await highlight(
182-
theme,
183-
options.languages,
184-
options.defaultHighlightLang,
185-
logger,
186-
options.codeTransformers,
187-
options.languageAlias
188-
)),
184+
highlight: options.highlight || (await highlight(theme, options, logger)),
189185
...options
190186
})
191187

Diff for: src/node/markdown/plugins/highlight.ts

+13-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { customAlphabet } from 'nanoid'
22
import c from 'picocolors'
3-
import type { LanguageInput, ShikijiTransformer } from 'shikiji'
3+
import type { ShikijiTransformer } from 'shikiji'
44
import {
55
bundledLanguages,
66
getHighlighter,
@@ -9,7 +9,7 @@ import {
99
isSpecialLang
1010
} from 'shikiji'
1111
import type { Logger } from 'vite'
12-
import type { ThemeOptions } from '../markdown'
12+
import type { MarkdownOptions, ThemeOptions } from '../markdown'
1313
import {
1414
transformerCompactLineOptions,
1515
transformerNotationDiff,
@@ -55,21 +55,25 @@ const attrsToLines = (attrs: string): TransformerCompactLineOption[] => {
5555

5656
export async function highlight(
5757
theme: ThemeOptions,
58-
languages: LanguageInput[] = [],
59-
defaultLang: string = '',
60-
logger: Pick<Logger, 'warn'> = console,
61-
userTransformers: ShikijiTransformer[] = [],
62-
languageAlias: Record<string, string> = {}
58+
options: MarkdownOptions,
59+
logger: Pick<Logger, 'warn'> = console
6360
): Promise<(str: string, lang: string, attrs: string) => string> {
61+
const {
62+
defaultHighlightLang: defaultLang = '',
63+
codeTransformers: userTransformers = []
64+
} = options
65+
6466
const highlighter = await getHighlighter({
6567
themes:
6668
typeof theme === 'string' || 'name' in theme
6769
? [theme]
6870
: [theme.light, theme.dark],
69-
langs: [...Object.keys(bundledLanguages), ...languages],
70-
langAlias: languageAlias
71+
langs: [...Object.keys(bundledLanguages), ...(options.languages || [])],
72+
langAlias: options.languageAlias
7173
})
7274

75+
await options?.shikijiSetup?.(highlighter)
76+
7377
const transformers: ShikijiTransformer[] = [
7478
transformerNotationDiff(),
7579
transformerNotationFocus({

0 commit comments

Comments
 (0)