@@ -17,23 +17,59 @@ async function setupMonaco() {
17
17
}
18
18
}
19
19
20
- function appendMonacoEditorScript ( ) {
21
- return new Promise ( ( resolve ) => {
22
- const script = document . createElement ( 'script' ) ;
23
- script . src = 'https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/0.26.1/min/vs/loader.min.js' ;
20
+ async function appendMonacoEditorScript ( ) {
21
+ let error = new Error ( ) ;
22
+ const urlList = [
23
+ 'https://cdn.jsdelivr.net/npm/monaco-editor/dev/vs/loader.min.js' ,
24
+ 'https://unpkg.com/monaco-editor@latest/min/vs/loader.js'
25
+ ] ;
26
+
27
+ /* global MONACO_EDITOR_VERSION -- Define monaco-editor version */
28
+ if ( typeof MONACO_EDITOR_VERSION !== 'undefined' ) {
29
+ urlList . unshift (
30
+ `https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/${ MONACO_EDITOR_VERSION } /min/vs/loader.min.js` ,
31
+ `https://cdn.jsdelivr.net/npm/monaco-editor@${ MONACO_EDITOR_VERSION } /dev/vs/loader.min.js` ,
32
+ `https://unpkg.com/monaco-editor/${ MONACO_EDITOR_VERSION } /min/vs/loader.min.js`
33
+ ) ;
34
+ }
35
+ for ( const url of urlList ) {
36
+ try {
37
+ return await appendScript ( url ) ;
38
+ } catch ( e ) {
39
+ // eslint-disable-next-line no-console -- OK
40
+ console . warn ( `Failed to retrieve resource from ${ url } ` ) ;
41
+ error = e ;
42
+ }
43
+ }
44
+ throw error ;
45
+ }
46
+
47
+ /** Appends a script tag. */
48
+ function appendScript ( src ) {
49
+ const script = document . createElement ( 'script' ) ;
50
+
51
+ return new Promise ( ( resolve , reject ) => {
52
+ script . src = src ;
24
53
script . onload = ( ) => {
25
54
script . onload = null ;
26
55
27
56
watch ( ) ;
28
57
29
58
function watch ( ) {
59
+ // @ts -expect-error -- global Monaco's require
30
60
if ( window . require ) {
31
61
resolve ( script ) ;
62
+
32
63
return ;
33
64
}
65
+
34
66
setTimeout ( watch , 200 ) ;
35
67
}
36
68
} ;
69
+ script . onerror = ( e ) => {
70
+ reject ( e ) ;
71
+ document . head . removeChild ( script ) ;
72
+ } ;
37
73
document . head . append ( script ) ;
38
74
} ) ;
39
75
}
0 commit comments