Skip to content

Commit ed8ff1a

Browse files
authored
perf: only bundle needed shiki langs and themes (#396)
Signed-off-by: ZTL-UwU <[email protected]>
1 parent 5e7d9b4 commit ed8ff1a

File tree

3 files changed

+17
-24
lines changed

3 files changed

+17
-24
lines changed

client/components/OCodeBlock.vue

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
<script setup lang="ts">
2-
import type { BundledLanguage } from 'shiki'
32
import { computed } from 'vue'
43
import { renderCodeHighlight } from '../composables/shiki'
54
65
const props = withDefaults(
76
defineProps<{
87
code: string
9-
lang?: BundledLanguage
8+
lang: 'javascript'
109
lines?: boolean
1110
transformRendered?: (code: string) => string
1211
}>(),

client/composables/shiki.ts

Lines changed: 15 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,31 @@
1-
import type { Highlighter, BundledLanguage } from 'shiki'
2-
import { createHighlighter } from 'shiki'
3-
import { computed, ref, toValue } from 'vue'
41
import type { MaybeRef } from '@vueuse/core'
2+
import type { HighlighterCore } from 'shiki'
3+
import { createHighlighterCore } from 'shiki/core'
4+
import { createJavaScriptRegexEngine } from 'shiki/engine/javascript'
5+
import { computed, ref, toValue } from 'vue'
56
import { devtools } from './rpc'
67

7-
export const shiki = ref<Highlighter>()
8+
export const shiki = ref<HighlighterCore>()
89

9-
export function loadShiki() {
10-
// Only loading when needed
11-
return createHighlighter({
10+
export async function loadShiki() {
11+
shiki.value = await createHighlighterCore({
1212
themes: [
13-
'vitesse-dark',
14-
'vitesse-light',
13+
import('@shikijs/themes/vitesse-light'),
14+
import('@shikijs/themes/vitesse-dark'),
1515
],
1616
langs: [
17-
'css',
18-
'javascript',
19-
'typescript',
20-
'html',
21-
'vue',
22-
'vue-html',
23-
'bash',
24-
'diff',
17+
import('@shikijs/langs/javascript'),
2518
],
26-
}).then((i) => {
27-
shiki.value = i
19+
engine: createJavaScriptRegexEngine(),
2820
})
21+
22+
return shiki.value
2923
}
3024

31-
export function renderCodeHighlight(code: MaybeRef<string>, lang: BundledLanguage) {
25+
export function renderCodeHighlight(code: MaybeRef<string>, lang: 'javascript') {
3226
return computed(() => {
3327
const colorMode = devtools.value?.colorMode || 'light'
34-
return shiki.value!.codeToHtml(toValue(code), {
28+
return shiki.value!.codeToHtml(toValue(code) || '', {
3529
lang,
3630
theme: colorMode === 'dark' ? 'vitesse-dark' : 'vitesse-light',
3731
}) || ''

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "@nuxt/scripts",
33
"type": "module",
44
"version": "0.10.3",
5-
"packageManager": "[email protected].0",
5+
"packageManager": "[email protected].1",
66
"description": "Load third-party scripts with better performance, privacy and DX in Nuxt Apps.",
77
"author": {
88
"website": "https://harlanzw.com",

0 commit comments

Comments
 (0)