1
1
/// <reference types="vite/client" />
2
2
3
- import type { BundledLanguageInfo , BundledThemeInfo } from '@shikijs/types'
3
+ import type { BundledLanguage , BundledTheme } from 'shiki'
4
+ import type { GrammarInfo } from 'tm-grammars'
5
+ import type { ThemeInfo } from 'tm-themes'
4
6
import { useLocalStorage } from '@vueuse/core'
5
7
import { acceptHMRUpdate , defineStore } from 'pinia'
6
8
import { ref , shallowRef , watch } from 'vue'
7
9
8
10
export const usePlayground = defineStore ( 'playground' , ( ) => {
9
- const lang = useLocalStorage ( 'shiki-playground-lang' , 'typescript' )
10
- const theme = useLocalStorage ( 'shiki-playground-theme' , 'vitesse-dark' )
11
- const allThemes = shallowRef < BundledThemeInfo [ ] > ( [
12
- {
13
- id : 'vitesse-dark' ,
14
- displayName : 'Vitesse Dark' ,
15
- type : 'dark' ,
16
- import : undefined ! ,
17
- } ,
18
- ] )
19
- const allLanguages = shallowRef < BundledLanguageInfo [ ] > ( [
20
- {
21
- id : 'typescript' ,
22
- name : 'TypeScript' ,
23
- import : undefined ! ,
24
- } ,
25
- ] )
26
- const bundledLangsFull = shallowRef < BundledLanguageInfo [ ] > ( [ ] )
27
- const bundledLangsWeb = shallowRef < BundledLanguageInfo [ ] > ( [ ] )
11
+ const lang = useLocalStorage < BundledLanguage > ( 'shiki-playground-lang' , 'typescript' )
12
+ const theme = useLocalStorage < BundledTheme > ( 'shiki-playground-theme' , 'vitesse-dark' )
13
+ const allThemes = shallowRef < ThemeInfo [ ] > ( [ ] )
14
+ const allLanguages = shallowRef < GrammarInfo [ ] > ( [ ] )
15
+ const bundledLangsFull = shallowRef < GrammarInfo [ ] > ( [ ] )
16
+ const bundledLangsWeb = shallowRef < GrammarInfo [ ] > ( [ ] )
28
17
29
18
const input = useLocalStorage ( 'shiki-playground-input' , '' )
30
19
const output = ref ( '<pre></pre>' )
@@ -33,16 +22,16 @@ export const usePlayground = defineStore('playground', () => {
33
22
34
23
function randomize ( ) : void {
35
24
if ( allLanguages . value . length && allThemes . value . length ) {
36
- lang . value = allLanguages . value [ Math . floor ( Math . random ( ) * allLanguages . value . length ) ] . id as any
37
- theme . value = allThemes . value [ Math . floor ( Math . random ( ) * allThemes . value . length ) ] . id as any
25
+ lang . value = allLanguages . value [ Math . floor ( Math . random ( ) * allLanguages . value . length ) ] . name as BundledLanguage
26
+ theme . value = allThemes . value [ Math . floor ( Math . random ( ) * allThemes . value . length ) ] . name as BundledTheme
38
27
}
39
28
}
40
29
41
30
; ( async ( ) => {
42
31
const { createHighlighter } = await import ( 'shiki' )
43
- const { bundledLanguagesInfo : bundleFull } = await import ( 'shiki/bundle/full ' )
44
- const { bundledLanguagesInfo : bundleWeb } = await import ( 'shiki/bundle/ web')
45
- const { bundledThemesInfo } = await import ( 'shiki/ themes' )
32
+ const allGrammars = await import ( 'tm-grammars ' )
33
+ const webGrammars = allGrammars . grammars . filter ( grammar => grammar . categories ?. includes ( ' web') )
34
+ const { themes : bundledThemesInfo } = await import ( 'tm- themes' )
46
35
47
36
const samplesCache = new Map < string , Promise < string | undefined > > ( )
48
37
@@ -59,9 +48,9 @@ export const usePlayground = defineStore('playground', () => {
59
48
}
60
49
61
50
allThemes . value = bundledThemesInfo
62
- allLanguages . value = bundleFull
63
- bundledLangsFull . value = bundleFull
64
- bundledLangsWeb . value = bundleWeb
51
+ allLanguages . value = allGrammars . grammars
52
+ bundledLangsFull . value = allGrammars . grammars
53
+ bundledLangsWeb . value = webGrammars
65
54
66
55
if ( typeof window !== 'undefined' ) {
67
56
const highlighter = await createHighlighter ( {
@@ -74,8 +63,8 @@ export const usePlayground = defineStore('playground', () => {
74
63
watch ( [ lang , theme ] , async ( n , o ) => {
75
64
isLoading . value = true
76
65
await Promise . all ( [
77
- highlighter . loadTheme ( theme . value as any ) ,
78
- highlighter . loadLanguage ( lang . value as any ) ,
66
+ highlighter . loadTheme ( theme . value ) ,
67
+ highlighter . loadLanguage ( lang . value ) ,
79
68
] )
80
69
// Fetch sample if language changed
81
70
if ( ( o [ 0 ] || ! input . value ) && n [ 0 ] !== o [ 0 ] ) {
0 commit comments