Skip to content

Commit 46bad8b

Browse files
Bundle monaco-editor source code
1 parent b3c5bb6 commit 46bad8b

File tree

1 file changed

+55
-1
lines changed

1 file changed

+55
-1
lines changed

portal/src/index.tsx

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,23 @@ import "@fortawesome/fontawesome-free/css/all.min.css";
88
import React from "react";
99
import { render } from "react-dom";
1010
import { initializeIcons, registerIcons } from "@fluentui/react";
11+
12+
// See below for details.
13+
// Monaco editor initialization imports - Start
14+
import { loader } from "@monaco-editor/react";
15+
import * as monaco from "monaco-editor";
16+
// @ts-expect-error
17+
import editorWorker from "monaco-editor/esm/vs/editor/editor.worker?worker";
18+
// @ts-expect-error
19+
import jsonWorker from "monaco-editor/esm/vs/language/json/json.worker?worker";
20+
// @ts-expect-error
21+
import cssWorker from "monaco-editor/esm/vs/language/css/css.worker?worker";
22+
// @ts-expect-error
23+
import htmlWorker from "monaco-editor/esm/vs/language/html/html.worker?worker";
24+
// @ts-expect-error
25+
import tsWorker from "monaco-editor/esm/vs/language/typescript/ts.worker?worker";
26+
// Monaco editor initialization imports - End
27+
1128
import {
1229
Chart as ChartJS,
1330
CategoryScale,
@@ -62,4 +79,41 @@ ChartJS.register(
6279
// and AnalyticsSignupMethodsWidget
6380
ChartJS.register(ArcElement, Tooltip);
6481

65-
render(<ReactApp />, document.getElementById("react-app-root"));
82+
// See https://github.com/microsoft/monaco-editor/blob/main/docs/integrate-esm.md#using-vite
83+
// See https://github.com/suren-atoyan/monaco-react?tab=readme-ov-file#use-monaco-editor-as-an-npm-package
84+
//
85+
// By using this approach, it is now our own responsibility to keep monaco-editor and @monaco-editor/react compatible.
86+
// @monaco-editor/react uses @monaco-editor/loader, and @monaco-editor/loader uses a specific version of monaco-editor.
87+
// So when you need to update them, you do
88+
// 1. Pick a version of @monaco-editor/react.
89+
// 2. Inspect @monaco-editor/loader in package-lock.json to see the actual version of @monaco-editor/loader
90+
// 3. Inspect https://github.com/suren-atoyan/monaco-loader/blob/master/src/config/index.js to see what version of monaco-editor it is using.
91+
// 4. Install the same version of monaco-editor.
92+
//
93+
// Note that monaco-editor has some breaking changes in 0.45.0
94+
// See https://github.com/microsoft/monaco-editor/blob/main/CHANGELOG.md#0450
95+
// So the highest version we can use is 0.44.0, until @monaco-editor/react supports >= 0.45.0
96+
window.MonacoEnvironment = {
97+
getWorker(_, label) {
98+
switch (label) {
99+
case "json":
100+
return new jsonWorker();
101+
case "css":
102+
case "scss":
103+
case "less":
104+
return new cssWorker();
105+
case "html":
106+
case "handlebars":
107+
case "razor":
108+
return new htmlWorker();
109+
case "javascript":
110+
case "typescript":
111+
return new tsWorker();
112+
}
113+
return new editorWorker();
114+
},
115+
};
116+
loader.config({ monaco });
117+
loader.init().then(() => {
118+
render(<ReactApp />, document.getElementById("react-app-root"));
119+
});

0 commit comments

Comments
 (0)