@@ -3,6 +3,7 @@ import { createHighlighterCore, type HighlighterCore } from 'shiki/core'
33import { createJavaScriptRegexEngine } from 'shiki/engine/javascript'
44
55let highlighter : HighlighterCore | null = null
6+ let highlighterPromise : Promise < HighlighterCore > | null = null
67
78function replaceThemeColors (
89 theme : ThemeRegistration ,
@@ -18,65 +19,76 @@ function replaceThemeColors(
1819}
1920
2021export async function getShikiHighlighter ( ) : Promise < HighlighterCore > {
21- if ( ! highlighter ) {
22- highlighter = await createHighlighterCore ( {
23- themes : [
24- import ( '@shikijs/themes/github-dark' ) ,
25- import ( '@shikijs/themes/github-light' ) . then ( t =>
26- replaceThemeColors ( t . default ?? t , {
27- '#22863A' : '#227436' , // green
28- '#E36209' : '#BA4D02' , // orange
29- '#D73A49' : '#CD3443' , // red
30- '#B31D28' : '#AC222F' , // red
31- } ) ,
32- ) ,
33- ] ,
34- langs : [
35- // Core web languages
36- import ( '@shikijs/langs/javascript' ) ,
37- import ( '@shikijs/langs/typescript' ) ,
38- import ( '@shikijs/langs/json' ) ,
39- import ( '@shikijs/langs/jsonc' ) ,
40- import ( '@shikijs/langs/html' ) ,
41- import ( '@shikijs/langs/css' ) ,
42- import ( '@shikijs/langs/scss' ) ,
43- import ( '@shikijs/langs/less' ) ,
22+ if ( highlighter ) {
23+ return highlighter
24+ }
25+
26+ highlighterPromise ??= createHighlighterCore ( {
27+ themes : [
28+ import ( '@shikijs/themes/github-dark' ) ,
29+ import ( '@shikijs/themes/github-light' ) . then ( t =>
30+ replaceThemeColors ( t . default ?? t , {
31+ '#22863A' : '#227436' , // green
32+ '#E36209' : '#BA4D02' , // orange
33+ '#D73A49' : '#CD3443' , // red
34+ '#B31D28' : '#AC222F' , // red
35+ } ) ,
36+ ) ,
37+ ] ,
38+ langs : [
39+ // Core web languages
40+ import ( '@shikijs/langs/javascript' ) ,
41+ import ( '@shikijs/langs/typescript' ) ,
42+ import ( '@shikijs/langs/json' ) ,
43+ import ( '@shikijs/langs/jsonc' ) ,
44+ import ( '@shikijs/langs/html' ) ,
45+ import ( '@shikijs/langs/css' ) ,
46+ import ( '@shikijs/langs/scss' ) ,
47+ import ( '@shikijs/langs/less' ) ,
4448
45- // Frameworks
46- import ( '@shikijs/langs/vue' ) ,
47- import ( '@shikijs/langs/jsx' ) ,
48- import ( '@shikijs/langs/tsx' ) ,
49- import ( '@shikijs/langs/svelte' ) ,
50- import ( '@shikijs/langs/astro' ) ,
51- import ( '@shikijs/langs/glimmer-js' ) ,
52- import ( '@shikijs/langs/glimmer-ts' ) ,
49+ // Frameworks
50+ import ( '@shikijs/langs/vue' ) ,
51+ import ( '@shikijs/langs/jsx' ) ,
52+ import ( '@shikijs/langs/tsx' ) ,
53+ import ( '@shikijs/langs/svelte' ) ,
54+ import ( '@shikijs/langs/astro' ) ,
55+ import ( '@shikijs/langs/glimmer-js' ) ,
56+ import ( '@shikijs/langs/glimmer-ts' ) ,
5357
54- // Shell/CLI
55- import ( '@shikijs/langs/bash' ) ,
56- import ( '@shikijs/langs/shell' ) ,
58+ // Shell/CLI
59+ import ( '@shikijs/langs/bash' ) ,
60+ import ( '@shikijs/langs/shell' ) ,
5761
58- // Config/Data formats
59- import ( '@shikijs/langs/yaml' ) ,
60- import ( '@shikijs/langs/toml' ) ,
61- import ( '@shikijs/langs/xml' ) ,
62- import ( '@shikijs/langs/markdown' ) ,
62+ // Config/Data formats
63+ import ( '@shikijs/langs/yaml' ) ,
64+ import ( '@shikijs/langs/toml' ) ,
65+ import ( '@shikijs/langs/xml' ) ,
66+ import ( '@shikijs/langs/markdown' ) ,
6367
64- // Other languages
65- import ( '@shikijs/langs/diff' ) ,
66- import ( '@shikijs/langs/sql' ) ,
67- import ( '@shikijs/langs/graphql' ) ,
68- import ( '@shikijs/langs/python' ) ,
69- import ( '@shikijs/langs/rust' ) ,
70- import ( '@shikijs/langs/go' ) ,
71- ] ,
72- langAlias : {
73- gjs : 'glimmer-js' ,
74- gts : 'glimmer-ts' ,
75- } ,
76- engine : createJavaScriptRegexEngine ( ) ,
68+ // Other languages
69+ import ( '@shikijs/langs/diff' ) ,
70+ import ( '@shikijs/langs/sql' ) ,
71+ import ( '@shikijs/langs/graphql' ) ,
72+ import ( '@shikijs/langs/python' ) ,
73+ import ( '@shikijs/langs/rust' ) ,
74+ import ( '@shikijs/langs/go' ) ,
75+ ] ,
76+ langAlias : {
77+ gjs : 'glimmer-js' ,
78+ gts : 'glimmer-ts' ,
79+ } ,
80+ engine : createJavaScriptRegexEngine ( ) ,
81+ } )
82+ . then ( createdHighlighter => {
83+ highlighter = createdHighlighter
84+ return createdHighlighter
7785 } )
78- }
79- return highlighter
86+ . catch ( error => {
87+ highlighterPromise = null
88+ throw error
89+ } )
90+
91+ return highlighterPromise
8092}
8193
8294/**
0 commit comments