@@ -63,6 +63,67 @@ export function loadWasm() {
6363 return onigasm . loadWASM ( onigasmWasm )
6464}
6565
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+
66127export function loadMonacoEnv ( store : Store ) {
67128 ; ( self as any ) . MonacoEnvironment = {
68129 async getWorker ( _ : any , label : string ) {
@@ -75,36 +136,5 @@ export function loadMonacoEnv(store: Store) {
75136 languages . register ( { id : 'vue' , extensions : [ '.vue' ] } )
76137 languages . register ( { id : 'javascript' , extensions : [ '.js' ] } )
77138 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 ) )
110140}
0 commit comments