File tree Expand file tree Collapse file tree 4 files changed +70
-31
lines changed Expand file tree Collapse file tree 4 files changed +70
-31
lines changed Original file line number Diff line number Diff line change 7
7
"forceConsistentCasingInFileNames" : true ,
8
8
"lib" : [" es2020" , " DOM" ],
9
9
"moduleResolution" : " node" ,
10
- "module" : " es2020 " ,
10
+ "module" : " es2022 " ,
11
11
"resolveJsonModule" : true ,
12
12
"skipLibCheck" : true ,
13
13
"sourceMap" : true ,
14
14
"strict" : true ,
15
- "target" : " es2020 "
15
+ "target" : " es2022 "
16
16
}
17
17
}
Original file line number Diff line number Diff line change
1
+ import { browser } from '$app/env' ;
2
+ import editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker' ;
3
+ import jsonWorker from 'monaco-editor/esm/vs/language/json/json.worker?worker' ;
4
+ import cssWorker from 'monaco-editor/esm/vs/language/css/css.worker?worker' ;
5
+ import htmlWorker from 'monaco-editor/esm/vs/language/html/html.worker?worker' ;
6
+ import tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker' ;
7
+
8
+ /** @type {import('monaco-editor') } */
9
+ let monaco ;
10
+
11
+ if ( browser ) {
12
+ monaco = await import ( 'monaco-editor' ) ;
13
+
14
+ // @ts -expect-error
15
+ window . monacoEnvironment = {
16
+ /**
17
+ * @param {string } _moduleId
18
+ * @param {string } label
19
+ */
20
+ getWorker : function ( _moduleId , label ) {
21
+ switch ( label ) {
22
+ case 'json' :
23
+ return new jsonWorker ( ) ;
24
+ case 'css' :
25
+ case 'scss' :
26
+ case 'less' :
27
+ return new cssWorker ( ) ;
28
+ case 'html' :
29
+ return new htmlWorker ( ) ;
30
+ case 'javascript' :
31
+ case 'typescript' :
32
+ return new tsWorker ( ) ;
33
+ default :
34
+ return new editorWorker ( ) ;
35
+ }
36
+ }
37
+ } ;
38
+ }
39
+
40
+ export { monaco } ;
Original file line number Diff line number Diff line change 20
20
/** @type {import('monaco-editor').editor.IStandaloneCodeEditor} */
21
21
let editor;
22
22
23
- /** @type {import('monaco-editor').editor.ITextModel} */
24
- let model;
25
-
26
- /** @type {import('$lib/types').File | null} */
27
- let active;
28
-
29
23
onMount (() => {
30
24
let destroyed = false ;
31
25
67
61
destroyed = true ;
68
62
};
69
63
});
70
-
71
- $: if (editor && file) {
72
- if (file === active) {
73
- // model.setValue(file.contents);
74
- } else {
75
- const type = file .basename .split (' .' ).pop ();
76
-
77
- model = monaco .editor .createModel (
78
- file .contents ,
79
- type === ' svelte' ? ' html' : type, // TODO figure out how to do Svelte files with monaco.languages.register
80
- new monaco.Uri ().with ({ path: file .name })
81
- );
82
-
83
- model .onDidChangeContent (() => {
84
- dispatch (' change' , {
85
- value: model .getValue ()
86
- });
87
- });
88
-
89
- editor .setModel (model);
90
- active = file;
91
- }
92
- }
93
64
</script >
94
65
95
66
<div bind:this ={container } />
Original file line number Diff line number Diff line change 16
16
import { writable } from ' svelte/store' ;
17
17
import Viewer from ' $lib/client/viewer/Viewer.svelte' ;
18
18
import TableOfContents from ' ./_/TableOfContents.svelte' ;
19
+ import { monaco } from ' $lib/client/monaco/monaco.js' ;
19
20
20
21
/** @type {import('$lib/types').SectionIndex} */
21
22
export let index;
33
34
/** @type {import('svelte/store').Writable<Array<import('$lib/types').File | import('$lib/types').Directory>>} */
34
35
const files = writable ([]);
35
36
37
+ /** @type {import('svelte/store').Writable<import('monaco-editor').editor.ITextModel[]>} */
38
+ const models = writable ([]);
39
+
36
40
/** @type {import('svelte/store').Writable<import('$lib/types').File | null>} */
37
41
const selected = writable (null );
38
42
50
54
51
55
files,
52
56
57
+ models,
58
+
53
59
selected,
54
60
55
61
started,
112
118
113
119
files .set (data);
114
120
121
+ for (const model of $models) model .dispose ();
122
+ $models = [];
123
+
124
+ data .forEach ((file ) => {
125
+ if (file .type === ' file' ) {
126
+ const type = file .basename .split (' .' ).pop ();
127
+ const model = monaco .editor .createModel (
128
+ file .contents ,
129
+ type,
130
+ new monaco.Uri ().with ({ path: file .name })
131
+ );
132
+
133
+ model .onDidChangeContent (() => {
134
+ const value = model .getValue ();
135
+ file .contents = value;
136
+ adapter .update ([file]);
137
+ });
138
+
139
+ $models .push (model);
140
+ }
141
+ });
142
+
115
143
selected .set (
116
144
/** @type {import('$lib/types').File} */ (
117
145
data .find ((file ) => file .name === section .chapter .focus )
You can’t perform that action at this time.
0 commit comments