@@ -63,6 +63,67 @@ export function loadWasm() {
63
63
return onigasm . loadWASM ( onigasmWasm )
64
64
}
65
65
66
+ let disposeVue : undefined | ( ( ) => void )
67
+ export async function reloadVue ( store : Store ) {
68
+ disposeVue ?.( )
69
+
70
+ const worker = editor . createWebWorker < any > ( {
71
+ moduleId : 'vs/language/vue/vueWorker' ,
72
+ label : 'vue' ,
73
+ host : createJsDelivrDtsHost (
74
+ ! store . vueVersion
75
+ ? { }
76
+ : {
77
+ vue : store . vueVersion ,
78
+ '@vue/compiler-core' : store . vueVersion ,
79
+ '@vue/compiler-dom' : store . vueVersion ,
80
+ '@vue/compiler-sfc' : store . vueVersion ,
81
+ '@vue/compiler-ssr' : store . vueVersion ,
82
+ '@vue/reactivity' : store . vueVersion ,
83
+ '@vue/runtime-core' : store . vueVersion ,
84
+ '@vue/runtime-dom' : store . vueVersion ,
85
+ '@vue/shared' : store . vueVersion ,
86
+ } ,
87
+ ( filename , text ) => {
88
+ getOrCreateModel ( Uri . file ( filename ) , undefined , text )
89
+ }
90
+ ) ,
91
+ createData : {
92
+ tsconfig : store . getTsConfig ?.( ) || { } ,
93
+ } ,
94
+ } )
95
+ const languageId = [ 'vue' , 'javascript' , 'typescript' ]
96
+ const getSyncUris = ( ) =>
97
+ Object . keys ( store . state . files ) . map ( ( filename ) =>
98
+ Uri . parse ( `file:///${ filename } ` )
99
+ )
100
+ const { dispose : disposeMarkers } = volar . editor . activateMarkers (
101
+ worker ,
102
+ languageId ,
103
+ 'vue' ,
104
+ getSyncUris ,
105
+ editor
106
+ )
107
+ const { dispose : disposeAutoInsertion } = volar . editor . activateAutoInsertion (
108
+ worker ,
109
+ languageId ,
110
+ getSyncUris ,
111
+ editor
112
+ )
113
+ const { dispose : disposeProvides } = await volar . languages . registerProvides (
114
+ worker ,
115
+ languageId ,
116
+ getSyncUris ,
117
+ languages
118
+ )
119
+
120
+ disposeVue = ( ) => {
121
+ disposeMarkers ( )
122
+ disposeAutoInsertion ( )
123
+ disposeProvides ( )
124
+ }
125
+ }
126
+
66
127
export function loadMonacoEnv ( store : Store ) {
67
128
; ( self as any ) . MonacoEnvironment = {
68
129
async getWorker ( _ : any , label : string ) {
@@ -75,36 +136,5 @@ export function loadMonacoEnv(store: Store) {
75
136
languages . register ( { id : 'vue' , extensions : [ '.vue' ] } )
76
137
languages . register ( { id : 'javascript' , extensions : [ '.js' ] } )
77
138
languages . register ( { id : 'typescript' , extensions : [ '.ts' ] } )
78
- languages . onLanguage ( 'vue' , async ( ) => {
79
- const worker = editor . createWebWorker < any > ( {
80
- moduleId : 'vs/language/vue/vueWorker' ,
81
- label : 'vue' ,
82
- host : createJsDelivrDtsHost (
83
- ! store . vueVersion
84
- ? { }
85
- : {
86
- vue : store . vueVersion ,
87
- '@vue/compiler-core' : store . vueVersion ,
88
- '@vue/compiler-dom' : store . vueVersion ,
89
- '@vue/compiler-sfc' : store . vueVersion ,
90
- '@vue/compiler-ssr' : store . vueVersion ,
91
- '@vue/reactivity' : store . vueVersion ,
92
- '@vue/runtime-core' : store . vueVersion ,
93
- '@vue/runtime-dom' : store . vueVersion ,
94
- '@vue/shared' : store . vueVersion ,
95
- } ,
96
- ( filename , text ) => {
97
- getOrCreateModel ( Uri . file ( filename ) , undefined , text )
98
- }
99
- ) ,
100
- } )
101
- const languageId = [ 'vue' , 'javascript' , 'typescript' ]
102
- const getSyncUris = ( ) =>
103
- Object . keys ( store . state . files ) . map ( ( filename ) =>
104
- Uri . parse ( `file:///${ filename } ` )
105
- )
106
- volar . editor . activateMarkers ( worker , languageId , 'vue' , getSyncUris , editor )
107
- volar . editor . activateAutoInsertion ( worker , languageId , getSyncUris , editor )
108
- volar . languages . registerProvides ( worker , languageId , getSyncUris , languages )
109
- } )
139
+ languages . onLanguage ( 'vue' , ( ) => reloadVue ( store ) )
110
140
}
0 commit comments