|
1 | 1 | import type { Root } from 'hast'
|
2 |
| -import type { BundledHighlighterOptions, CodeToHastOptions, CodeToTokensBaseOptions, CodeToTokensOptions, CodeToTokensWithThemesOptions, GrammarState, HighlighterCoreOptions, HighlighterGeneric, LanguageInput, RequireKeys, SpecialLanguage, SpecialTheme, ThemeInput, ThemedToken, ThemedTokenWithVariants, TokensResult } from '../types' |
| 2 | +import type { Awaitable, BundledHighlighterOptions, CodeToHastOptions, CodeToTokensBaseOptions, CodeToTokensOptions, CodeToTokensWithThemesOptions, CreatedBundledHighlighterOptions, GrammarState, HighlighterCoreOptions, HighlighterGeneric, LanguageInput, RegexEngine, RequireKeys, SpecialLanguage, SpecialTheme, ThemeInput, ThemedToken, ThemedTokenWithVariants, TokensResult } from '../types' |
3 | 3 | import { isSpecialLang, isSpecialTheme } from '../utils'
|
4 | 4 | import { ShikiError } from '../error'
|
| 5 | +import { createWasmOnigEngine } from '../engines/wasm' |
5 | 6 | import { createHighlighterCore } from './highlighter'
|
6 | 7 |
|
7 | 8 | export type CreateHighlighterFactory<L extends string, T extends string> = (
|
8 | 9 | options: BundledHighlighterOptions<L, T>
|
9 | 10 | ) => Promise<HighlighterGeneric<L, T>>
|
10 | 11 |
|
| 12 | +/** |
| 13 | + * Create a `createHighlighter` function with bundled themes, languages, and engine. |
| 14 | + * |
| 15 | + * @example |
| 16 | + * ```ts |
| 17 | + * const createHighlighter = createdBundledHighlighter({ |
| 18 | + * langs: { |
| 19 | + * typescript: () => import('shiki/langs/typescript.mjs'), |
| 20 | + * // ... |
| 21 | + * }, |
| 22 | + * themes: { |
| 23 | + * nord: () => import('shiki/themes/nord.mjs'), |
| 24 | + * // ... |
| 25 | + * }, |
| 26 | + * engine: () => createWasmOnigEngine(), // or createJavaScriptRegexEngine() |
| 27 | + * }) |
| 28 | + * ``` |
| 29 | + * |
| 30 | + * @param options |
| 31 | + */ |
| 32 | +export function createdBundledHighlighter<BundledLangs extends string, BundledThemes extends string>( |
| 33 | + options: CreatedBundledHighlighterOptions<BundledLangs, BundledThemes> |
| 34 | +): CreateHighlighterFactory<BundledLangs, BundledThemes> |
| 35 | + |
11 | 36 | /**
|
12 | 37 | * Create a `createHighlighter` function with bundled themes and languages.
|
13 | 38 | *
|
14 |
| - * @param bundledLanguages |
15 |
| - * @param bundledThemes |
16 |
| - * @param loadWasm |
| 39 | + * @deprecated Use `createdBundledHighlighter({ langs, themes, engine })` signature instead. |
17 | 40 | */
|
18 | 41 | export function createdBundledHighlighter<BundledLangs extends string, BundledThemes extends string>(
|
19 | 42 | bundledLanguages: Record<BundledLangs, LanguageInput>,
|
20 | 43 | bundledThemes: Record<BundledThemes, ThemeInput>,
|
21 | 44 | loadWasm: HighlighterCoreOptions['loadWasm'],
|
| 45 | +): CreateHighlighterFactory<BundledLangs, BundledThemes> |
| 46 | + |
| 47 | +// Implementation |
| 48 | +export function createdBundledHighlighter<BundledLangs extends string, BundledThemes extends string>( |
| 49 | + arg1: Record<BundledLangs, LanguageInput> | CreatedBundledHighlighterOptions<BundledLangs, BundledThemes>, |
| 50 | + arg2?: Record<BundledThemes, ThemeInput>, |
| 51 | + arg3?: HighlighterCoreOptions['loadWasm'], |
22 | 52 | ): CreateHighlighterFactory<BundledLangs, BundledThemes> {
|
| 53 | + let bundledLanguages: Record<BundledLangs, LanguageInput> |
| 54 | + let bundledThemes: Record<BundledThemes, ThemeInput> |
| 55 | + let engine: () => Awaitable<RegexEngine> |
| 56 | + |
| 57 | + if (arg2) { |
| 58 | + // TODO: next: console.warn('`createdBundledHighlighter` signature with `bundledLanguages` and `bundledThemes` is deprecated. Use the options object signature instead.') |
| 59 | + bundledLanguages = arg1 as Record<BundledLangs, LanguageInput> |
| 60 | + bundledThemes = arg2 |
| 61 | + engine = () => createWasmOnigEngine(arg3) |
| 62 | + } |
| 63 | + else { |
| 64 | + const options = arg1 as CreatedBundledHighlighterOptions<BundledLangs, BundledThemes> |
| 65 | + bundledLanguages = options.langs |
| 66 | + bundledThemes = options.themes |
| 67 | + engine = options.engine |
| 68 | + } |
| 69 | + |
23 | 70 | async function createHighlighter(
|
24 | 71 | options: BundledHighlighterOptions<BundledLangs, BundledThemes>,
|
25 | 72 | ): Promise<HighlighterGeneric<BundledLangs, BundledThemes>> {
|
@@ -56,7 +103,7 @@ export function createdBundledHighlighter<BundledLangs extends string, BundledTh
|
56 | 103 | ...options,
|
57 | 104 | themes: _themes,
|
58 | 105 | langs,
|
59 |
| - loadWasm, |
| 106 | + engine: engine(), |
60 | 107 | })
|
61 | 108 |
|
62 | 109 | return {
|
|
0 commit comments