Skip to content

Commit 1212f47

Browse files
committedJan 20, 2025··
fix: mark engine required in createHighlighterCore
1 parent 0c571d3 commit 1212f47

File tree

8 files changed

+41
-24
lines changed

8 files changed

+41
-24
lines changed
 

‎bench/bundle-test/index-wasm.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { codeToHtml, createShikiInternal } from '@shikijs/core'
2-
import { createWasmOnigEngine } from '@shikijs/engine-oniguruma'
2+
import { createOnigurumaEngine } from '@shikijs/engine-oniguruma'
33

44
const shiki = createShikiInternal(
55
{
@@ -9,7 +9,7 @@ const shiki = createShikiInternal(
99
themes: [
1010
import('@shikijs/themes/vitesse-dark'),
1111
],
12-
engine: createWasmOnigEngine(import('@shikijs/engine-oniguruma/wasm-inlined')),
12+
engine: createOnigurumaEngine(import('@shikijs/engine-oniguruma/wasm-inlined')),
1313
},
1414
)
1515

‎packages/core/src/constructors/highlighter.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { createShikiInternalSync } from './internal-sync'
1616
*
1717
* @see http://shiki.style/guide/bundles#fine-grained-bundle
1818
*/
19-
export async function createHighlighterCore(options: HighlighterCoreOptions = {}): Promise<HighlighterCore> {
19+
export async function createHighlighterCore(options: HighlighterCoreOptions<false>): Promise<HighlighterCore> {
2020
const internal = await createShikiInternal(options)
2121

2222
return {
@@ -39,7 +39,7 @@ export async function createHighlighterCore(options: HighlighterCoreOptions = {}
3939
*
4040
* @see http://shiki.style/guide/bundles#fine-grained-bundle
4141
*/
42-
export function createHighlighterCoreSync(options: HighlighterCoreOptions<true> = {}): HighlighterCore {
42+
export function createHighlighterCoreSync(options: HighlighterCoreOptions<true>): HighlighterCore {
4343
const internal = createShikiInternalSync(options)
4444

4545
return {
@@ -56,11 +56,11 @@ export function createHighlighterCoreSync(options: HighlighterCoreOptions<true>
5656

5757
export function makeSingletonHighlighterCore(
5858
createHighlighter: typeof createHighlighterCore,
59-
): (options?: Partial<HighlighterCoreOptions>) => Promise<HighlighterCore> {
59+
): (options: HighlighterCoreOptions) => Promise<HighlighterCore> {
6060
let _shiki: ReturnType<typeof createHighlighterCore>
6161

6262
async function getSingletonHighlighterCore(
63-
options: Partial<HighlighterCoreOptions> = {},
63+
options: HighlighterCoreOptions,
6464
): Promise<HighlighterCore> {
6565
if (!_shiki) {
6666
_shiki = createHighlighter({
@@ -89,7 +89,7 @@ export const getSingletonHighlighterCore = /* @__PURE__ */ makeSingletonHighligh
8989
* @deprecated Use `createHighlighterCore` or `getSingletonHighlighterCore` instead.
9090
*/
9191
/* v8 ignore next 5 */
92-
export function getHighlighterCore(options: HighlighterCoreOptions = {}): Promise<HighlighterCore> {
92+
export function getHighlighterCore(options: HighlighterCoreOptions): Promise<HighlighterCore> {
9393
warnDeprecated('`getHighlighterCore` is deprecated. Use `createHighlighterCore` or `getSingletonHighlighterCore` instead.')
9494
return createHighlighterCore(options)
9595
}

‎packages/core/src/constructors/internal.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@ import { createShikiInternalSync } from './internal-sync'
1111
/**
1212
* Get the minimal shiki context for rendering.
1313
*/
14-
export async function createShikiInternal(options: HighlighterCoreOptions = {}): Promise<ShikiInternal> {
14+
export async function createShikiInternal(options: HighlighterCoreOptions): Promise<ShikiInternal> {
1515
if (options.loadWasm) {
1616
warnDeprecated('`loadWasm` option is deprecated. Use `engine: createOnigurumaEngine(loadWasm)` instead.')
1717
}
18+
if (!options.engine) {
19+
throw new Error('`engine` option is required.')
20+
}
1821

1922
const [
2023
themes,
@@ -38,7 +41,7 @@ export async function createShikiInternal(options: HighlighterCoreOptions = {}):
3841
/**
3942
* @deprecated Use `createShikiInternal` instead.
4043
*/
41-
export function getShikiInternal(options: HighlighterCoreOptions = {}): Promise<ShikiInternal> {
44+
export function getShikiInternal(options: HighlighterCoreOptions): Promise<ShikiInternal> {
4245
warnDeprecated('`getShikiInternal` is deprecated. Use `createShikiInternal` instead.')
4346
return createShikiInternal(options)
4447
}

‎packages/core/test/core.test.ts

+12-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
import { createJavaScriptRegexEngine } from '@shikijs/engine-javascript'
12
import { createOnigurumaEngine } from '@shikijs/engine-oniguruma'
23

34
import { wasmBinary } from '@shikijs/engine-oniguruma/wasm-inlined'
4-
55
import js from '@shikijs/langs/javascript'
66
import ts from '@shikijs/langs/typescript'
77
import mtp from '@shikijs/themes/material-theme-palenight'
@@ -67,6 +67,7 @@ describe('should', () => {
6767
langs: [
6868
import('@shikijs/langs/cpp'),
6969
],
70+
engine: createJavaScriptRegexEngine(),
7071
})
7172

7273
expect(shiki.getLoadedLanguages().sort())
@@ -85,7 +86,9 @@ describe('should', () => {
8586
})
8687

8788
it('works without no initial langs and themes', async () => {
88-
using shiki = await createHighlighterCore()
89+
using shiki = await createHighlighterCore({
90+
engine: createJavaScriptRegexEngine(),
91+
})
8992

9093
await shiki.loadLanguage(js)
9194
await shiki.loadTheme(nord)
@@ -101,6 +104,7 @@ describe('should', () => {
101104
mylang: 'javascript',
102105
mylang2: 'js', // nested alias
103106
},
107+
engine: createJavaScriptRegexEngine(),
104108
})
105109

106110
await shiki.loadLanguage(js)
@@ -117,6 +121,7 @@ describe('should', () => {
117121
langAlias: {
118122
js: 'typescript',
119123
},
124+
engine: createJavaScriptRegexEngine(),
120125
})
121126

122127
await shiki.loadLanguage(ts)
@@ -132,6 +137,7 @@ describe('errors', () => {
132137
using shiki = await createHighlighterCore({
133138
themes: [nord],
134139
langs: [js as any],
140+
engine: createJavaScriptRegexEngine(),
135141
})
136142

137143
await expect(() => shiki.codeToHtml('console.log("Hi")', { lang: 'javascript', theme: 'invalid' }))
@@ -142,6 +148,7 @@ describe('errors', () => {
142148
using shiki = await createHighlighterCore({
143149
themes: [nord],
144150
langs: [js as any],
151+
engine: createJavaScriptRegexEngine(),
145152
})
146153

147154
await expect(() => shiki.codeToHtml('console.log("Hi")', { lang: 'abc', theme: 'nord' }))
@@ -175,6 +182,7 @@ describe('errors', () => {
175182
mylang: 'mylang2',
176183
mylang2: 'mylang',
177184
},
185+
engine: createJavaScriptRegexEngine(),
178186
})
179187

180188
await shiki.loadLanguage(js)
@@ -187,7 +195,8 @@ describe('errors', () => {
187195
it('throw on using disposed instance', async () => {
188196
using shiki = await createHighlighterCore({
189197
themes: [nord],
190-
langs: [js as any],
198+
langs: [js],
199+
engine: createJavaScriptRegexEngine(),
191200
})
192201

193202
expect(shiki.codeToHtml('console.log("Hi")', { lang: 'javascript', theme: 'nord' }))

‎packages/core/test/injections.test.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import html from '@shikijs/langs/html'
44
import ts from '@shikijs/langs/typescript'
55
import vue from '@shikijs/langs/vue'
66
import vl from '@shikijs/themes/vitesse-light'
7-
import { codeToHtml, createHighlighterCore } from 'shiki'
7+
import { codeToHtml, createHighlighterCore, createJavaScriptRegexEngine } from 'shiki'
88
import { expect, it } from 'vitest'
99

1010
// Basically we need to make sure that the syntax inside `v-if` and `{{}}` is highlighted correctly.
@@ -35,6 +35,7 @@ it('injections-side-effects vue', async () => {
3535
langs: [
3636
html,
3737
],
38+
engine: createJavaScriptRegexEngine(),
3839
})
3940

4041
const code = `<h1 v-if="count == 1 ? true : 'str'.toUpperCase()">{{ count * 2 }}</h1>`
@@ -60,6 +61,7 @@ it('injections-side-effects angular-html', async () => {
6061
langs: [
6162
html,
6263
],
64+
engine: createJavaScriptRegexEngine(),
6365
})
6466

6567
const code = `<h2>Hero List</h2>
@@ -126,6 +128,7 @@ it('injections-side-effects angular-ts', async () => {
126128
langs: [
127129
ts,
128130
],
131+
engine: createJavaScriptRegexEngine(),
129132
})
130133

131134
const code = `

‎packages/shiki/test/cf.ts

+5-8
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
11
import type { LanguageRegistration } from '@shikijs/types'
2-
import { loadWasm } from '@shikijs/engine-oniguruma'
2+
import { createOnigurumaEngine } from '@shikijs/engine-oniguruma'
33
import js from '@shikijs/langs/javascript'
44
import nord from '@shikijs/themes/nord'
5-
import { createHighlighterCore } from 'shiki/core'
65

6+
import { createHighlighterCore } from 'shiki/core'
77
// @ts-expect-error no types
88
// eslint-disable-next-line antfu/no-import-dist
99
import wasm from '../dist/onig.wasm'
1010

11-
// eslint-disable-next-line antfu/no-top-level-await
12-
await loadWasm(wasm)
13-
14-
// cloudflare also supports dynamic import
15-
// await loadWasm(import('../dist/onig.wasm'))
16-
1711
export default {
1812
async fetch() {
1913
const highlighter = await createHighlighterCore({
2014
themes: [nord],
2115
langs: [js as LanguageRegistration[]],
16+
// cloudflare also supports dynamic import
17+
// engine: createOnigurumaEngine(import('shiki/onig.wasm')),
18+
engine: createOnigurumaEngine(wasm),
2219
})
2320

2421
return new Response(

‎packages/shiki/test/get-highlighter.test.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createOnigurumaEngine, getSingletonHighlighter } from 'shiki'
1+
import { createJavaScriptRegexEngine, createOnigurumaEngine, getSingletonHighlighter } from 'shiki'
22
import { expect, it } from 'vitest'
33
import { getSingletonHighlighterCore } from '../src/core'
44
import js from '../src/langs/javascript.mjs'
@@ -17,6 +17,7 @@ it('getSingletonHighlighterCore', async () => {
1717

1818
const shiki2 = await getSingletonHighlighterCore({
1919
themes: [mtp],
20+
engine: createJavaScriptRegexEngine(),
2021
})
2122

2223
expect(shiki1).toBe(shiki2)

‎packages/types/src/options.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export interface HighlighterCoreOptions<Sync extends boolean = false> {
1010
/**
1111
* Custom RegExp engine.
1212
*/
13-
engine?: Sync extends true ? RegexEngine : Awaitable<RegexEngine>
13+
engine: Sync extends true ? RegexEngine : Awaitable<RegexEngine>
1414
/**
1515
* Theme names, or theme registration objects to be loaded upfront.
1616
*/
@@ -38,7 +38,11 @@ export interface HighlighterCoreOptions<Sync extends boolean = false> {
3838
loadWasm?: Sync extends true ? never : LoadWasmOptions
3939
}
4040

41-
export interface BundledHighlighterOptions<L extends string, T extends string> extends Pick<HighlighterCoreOptions, 'warnings' | 'engine'> {
41+
export interface BundledHighlighterOptions<L extends string, T extends string> extends Pick<HighlighterCoreOptions, 'warnings'> {
42+
/**
43+
* Custom RegExp engine.
44+
*/
45+
engine?: Awaitable<RegexEngine>
4246
/**
4347
* Theme registation
4448
*

0 commit comments

Comments
 (0)
Please sign in to comment.