Skip to content

Commit e3eac17

Browse files
sxzzoumoussa98
authored andcommitted
refactor: javascript engine of shiki
1 parent 6d5032a commit e3eac17

File tree

2 files changed

+20
-15
lines changed

2 files changed

+20
-15
lines changed

src/monaco/Monaco.vue

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import {
44
onBeforeUnmount,
55
ref,
66
shallowRef,
7-
nextTick,
87
inject,
98
watch,
109
computed,
@@ -19,6 +18,7 @@ import parserBabel from 'prettier/parser-babel'
1918
import parserHtml from 'prettier/parser-html'
2019
import parserPostcss from 'prettier/parser-postcss'
2120
import prettier from 'prettier/standalone'
21+
import { registerHighlighter } from './highlight'
2222
2323
const props = withDefaults(
2424
defineProps<{
@@ -37,7 +37,6 @@ const emit = defineEmits<{
3737
}>()
3838
3939
const containerRef = ref<HTMLDivElement>()
40-
const ready = ref(false)
4140
const editor = shallowRef<monaco.editor.IStandaloneCodeEditor>()
4241
const store = inject<Store>('store')!
4342
@@ -47,10 +46,8 @@ const lang = computed(() => (props.mode === 'css' ? 'css' : 'javascript'))
4746
const extension = computed(() => props.filename.split('.').at(-1))
4847
4948
const replTheme = inject<Ref<'dark' | 'light'>>('theme')!
50-
onMounted(async () => {
51-
const theme = await import('./highlight').then(r => r.registerHighlighter())
52-
ready.value = true
53-
await nextTick()
49+
onMounted(() => {
50+
const theme = registerHighlighter()
5451
5552
if (!containerRef.value) {
5653
throw new Error('Cannot find containerRef')

src/monaco/highlight.ts

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,27 @@
11
import * as monaco from 'monaco-editor-core'
2-
import { createHighlighterCore } from 'shiki/core'
2+
import { createHighlighterCoreSync } from 'shiki/core'
3+
import { createJavaScriptRegexEngine } from 'shiki/engine-javascript.mjs'
34
import { shikiToMonaco } from '@shikijs/monaco'
45

56
import langVue from 'shiki/langs/vue.mjs'
7+
import langTsx from 'shiki/langs/tsx.mjs'
8+
import langJsx from 'shiki/langs/jsx.mjs'
69
import themeDark from 'shiki/themes/dark-plus.mjs'
710
import themeLight from 'shiki/themes/light-plus.mjs'
811

9-
export async function registerHighlighter() {
10-
const highlighter = await createHighlighterCore({
11-
themes: [themeDark, themeLight],
12-
langs: [langVue],
13-
loadWasm: import('shiki/wasm'),
14-
})
15-
monaco.languages.register({ id: 'vue' })
16-
shikiToMonaco(highlighter, monaco)
12+
let registered = false
13+
export function registerHighlighter() {
14+
if (!registered) {
15+
const highlighter = createHighlighterCoreSync({
16+
themes: [themeDark, themeLight],
17+
langs: [langVue, langTsx, langJsx],
18+
engine: createJavaScriptRegexEngine(),
19+
})
20+
monaco.languages.register({ id: 'vue' })
21+
shikiToMonaco(highlighter, monaco)
22+
registered = true
23+
}
24+
1725
return {
1826
light: themeLight.name!,
1927
dark: themeDark.name!,

0 commit comments

Comments
 (0)