Skip to content

Commit 67427ff

Browse files
authored
perf(devtools): optimize shiki bundle size (#321)
* perf: only bundle needed shiki langs and themes Signed-off-by: ZTL-UwU <[email protected]> * perf: use xml for svg highlighting Signed-off-by: ZTL-UwU <[email protected]> --------- Signed-off-by: ZTL-UwU <[email protected]>
1 parent 880167f commit 67427ff

File tree

5 files changed

+26
-16
lines changed

5 files changed

+26
-16
lines changed

client/app.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -734,7 +734,7 @@ const currentPageFile = computed(() => {
734734
SVG
735735
</h3>
736736
</template>
737-
<OCodeBlock :code="debug?.svg.replaceAll('>', '>\n')" lang="html" />
737+
<OCodeBlock :code="debug?.svg.replaceAll('>', '>\n')" lang="xml" />
738738
</OSectionBlock>
739739
<OSectionBlock>
740740
<template #text>

client/components/OCodeBlock.vue

+1-2
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: 'json' | 'xml'
109
lines?: boolean
1110
transformRendered?: (code: string) => string
1211
}>(),

client/composables/shiki.ts

+12-10
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
11
import type { MaybeRef } from '@vueuse/core'
2-
import type { BundledLanguage, Highlighter } from 'shiki'
3-
import { createHighlighter } from 'shiki'
2+
import type { HighlighterCore } from 'shiki'
3+
import { createHighlighterCore } from 'shiki/core'
4+
import { createJavaScriptRegexEngine } from 'shiki/engine/javascript'
45
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

910
export async function loadShiki() {
10-
// Only loading when needed
11-
shiki.value = await createHighlighter({
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-
'html',
18-
'json',
17+
import('@shikijs/langs/xml'),
18+
import('@shikijs/langs/json'),
1919
],
20+
engine: createJavaScriptRegexEngine(),
2021
})
22+
2123
return shiki.value
2224
}
2325

24-
export function renderCodeHighlight(code: MaybeRef<string>, lang: BundledLanguage) {
26+
export function renderCodeHighlight(code: MaybeRef<string>, lang: 'json' | 'xml') {
2527
return computed(() => {
2628
const colorMode = devtools.value?.colorMode || 'light'
2729
return shiki.value!.codeToHtml(toValue(code) || '', {

pnpm-lock.yaml

+11-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pnpm-workspace.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
packages:
2-
- .playground
2+
- playground
33
- client

0 commit comments

Comments
 (0)