1
1
import editorWorker from 'monaco-editor-core/esm/vs/editor/editor.worker?worker' ;
2
- import vueWorker from 'monaco-volar /vue.worker?worker' ;
2
+ import vueWorker from '. /vue.worker?worker' ;
3
3
import * as onigasm from "onigasm" ;
4
4
import onigasmWasm from "onigasm/lib/onigasm.wasm?url" ;
5
- import { editor , languages } from 'monaco-editor-core' ;
5
+ import { editor , languages , Uri } from 'monaco-editor-core' ;
6
6
import * as volar from '@volar/monaco' ;
7
+ import { Store } from '../store' ;
8
+ import * as VolarWorker from '@volar/monaco/worker' ;
9
+ import { getOrCreateModel } from './utils' ;
7
10
8
11
export function loadWasm ( ) {
9
12
return onigasm . loadWASM ( onigasmWasm ) ;
10
13
}
11
14
12
- export function loadMonacoEnv ( ) {
15
+ export function loadMonacoEnv ( store : Store ) {
13
16
( self as any ) . MonacoEnvironment = {
14
17
async getWorker ( _ : any , label : string ) {
15
18
if ( label === 'vue' ) {
@@ -23,12 +26,24 @@ export function loadMonacoEnv() {
23
26
const worker = editor . createWebWorker < any > ( {
24
27
moduleId : 'vs/language/vue/vueWorker' ,
25
28
label : 'vue' ,
26
- createData : { } ,
27
- } )
28
- const languageId = [ 'vue' ]
29
- const getSyncUris = ( ) => editor . getModels ( ) . map ( m => m . uri ) ;
30
- volar . editor . activateMarkers ( worker , languageId , 'vue' , getSyncUris , editor )
31
- volar . editor . activateAutoInsertion ( worker , languageId , getSyncUris , editor )
32
- volar . languages . registerProvides ( worker , languageId , getSyncUris , languages )
29
+ host : VolarWorker . createDtsHost ( 'https://unpkg.com/' , ! store . vueVersion ? { } : {
30
+ 'vue' : store . vueVersion ,
31
+ '@vue/compiler-core' : store . vueVersion ,
32
+ '@vue/compiler-dom' : store . vueVersion ,
33
+ '@vue/compiler-sfc' : store . vueVersion ,
34
+ '@vue/compiler-ssr' : store . vueVersion ,
35
+ '@vue/reactivity' : store . vueVersion ,
36
+ '@vue/runtime-core' : store . vueVersion ,
37
+ '@vue/runtime-dom' : store . vueVersion ,
38
+ '@vue/shared' : store . vueVersion ,
39
+ } , ( filename , text ) => {
40
+ getOrCreateModel ( Uri . file ( filename ) , undefined , text ) ;
41
+ } ) ,
42
+ } ) ;
43
+ const languageId = [ 'vue' ] ;
44
+ const getSyncUris = ( ) => Object . keys ( store . state . files ) . map ( filename => Uri . parse ( `file:///${ filename } ` ) ) ;
45
+ volar . editor . activateMarkers ( worker , languageId , 'vue' , getSyncUris , editor ) ;
46
+ volar . editor . activateAutoInsertion ( worker , languageId , getSyncUris , editor ) ;
47
+ volar . languages . registerProvides ( worker , languageId , getSyncUris , languages ) ;
33
48
} )
34
- }
49
+ }
0 commit comments