@@ -8,6 +8,23 @@ import "@fortawesome/fontawesome-free/css/all.min.css";
88import React from "react" ;
99import { render } from "react-dom" ;
1010import { 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+
1128import {
1229 Chart as ChartJS ,
1330 CategoryScale ,
@@ -62,4 +79,41 @@ ChartJS.register(
6279// and AnalyticsSignupMethodsWidget
6380ChartJS . 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