Skip to content

Commit b4c4201

Browse files
committed
fix: use esm cdn monaco
1 parent 7f28ce3 commit b4c4201

File tree

1 file changed

+31
-4
lines changed

1 file changed

+31
-4
lines changed

src/monaco-editor/monaco-loader.ts

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,14 @@ export function loadMonaco(): Promise<Monaco> {
2525
return (
2626
monacoPromise ||
2727
(monacoPromise = (async () => {
28-
const rawMonaco: Monaco | { m: Monaco } = await loadModuleFromMonaco(
29-
"vs/editor/editor.main",
30-
);
31-
let monaco: Monaco;
28+
let rawMonaco: Monaco | { m: Monaco }, monaco: Monaco;
29+
try {
30+
rawMonaco = await loadMonacoFromEsmCdn();
31+
} catch {
32+
rawMonaco = await loadModuleFromMonaco<Monaco | { m: Monaco }>(
33+
"vs/editor/editor.main",
34+
);
35+
}
3236
if ("m" in rawMonaco) {
3337
monaco = rawMonaco.m || rawMonaco;
3438
} else {
@@ -102,6 +106,29 @@ function setAllValidations(
102106
});
103107
}
104108

109+
/** Load the Monaco editor. */
110+
async function loadMonacoFromEsmCdn(): Promise<Monaco> {
111+
let error = new Error();
112+
const urlList = ["https://cdn.jsdelivr.net/npm/monaco-editor/+esm"];
113+
114+
if (typeof monacoVersion !== "undefined") {
115+
urlList.unshift(
116+
`https://cdn.jsdelivr.net/npm/monaco-editor@${monacoVersion}/+esm`,
117+
);
118+
}
119+
for (const url of urlList) {
120+
try {
121+
const result = await importFromCDN(url);
122+
return result as Monaco;
123+
} catch (e: unknown) {
124+
// eslint-disable-next-line no-console -- OK
125+
console.warn(`Failed to retrieve resource from ${url}`);
126+
error = e as Error;
127+
}
128+
}
129+
throw error;
130+
}
131+
105132
async function loadModuleFromMonaco<T>(moduleName: string): Promise<T> {
106133
await setupMonaco();
107134

0 commit comments

Comments
 (0)