@typefox/monaco-editor-react 7.0.0-next.0 → 7.0.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,10 +2,34 @@
2
2
 
3
3
  All notable changes to npm module [@typefox/monaco-editor-react](https://www.npmjs.com/package/@typefox/monaco-editor-react) are documented in this file.
4
4
 
5
- ## [7.0.0-next.0] - 2025-0z-xy
5
+ ## [7.0.0] - unreleased
6
6
 
7
- - Updated to `monaco-languageclient@10.0.0-next.0` and `monaco-editor-wrapper@7.0.0-next.0`.
8
- - Updated all `@codingame/monaco-vscode` packages to `18.2.0`.
7
+ - Merge `monaco-editor-wrapper` with `monaco-languageclient`:
8
+ - Updated to `monaco-languageclient@10.0.0`.
9
+ - Documentation update [#956](https://github.com/TypeFox/monaco-languageclient/pull/956).
10
+ - Lifecycle adjustments [#939](https://github.com/TypeFox/monaco-languageclient/pull/939).
11
+ - Move MonacoLanguageClientWrapper to monaco-languageclient [#920](https://github.com/TypeFox/monaco-languageclient/pull/920).
12
+ - Please see the [migration guide](https://github.com/TypeFox/monaco-languageclient/blob/main/docs/migration.md).
13
+ - Noteworthy updates and stability improvements:
14
+ - Fix React Stict Mode
15
+ - Only one language client can be used directly with the component
16
+ - Fixed rerendering issue by introducing an internal update queue
17
+ - Updated all `@codingame/monaco-vscode` packages to `^21.0.1`.
18
+
19
+ ## [6.12.0] - 2025-08-21
20
+
21
+ - Updated to `monaco-languageclient@9.11.0` and `monaco-editor-wrapper@6.12.0`.
22
+ - Updated all `@codingame/monaco-vscode` packages to `20.2.1`.
23
+
24
+ ## [6.11.0] - 2025-08-14
25
+
26
+ - Updated to `monaco-languageclient@9.10.0` and `monaco-editor-wrapper@6.11.0`.
27
+ - Updated all `@codingame/monaco-vscode` packages to `20.1.1`.
28
+
29
+ ## [6.10.0] - 2025-08-11
30
+
31
+ - Updated to `monaco-languageclient@9.9.0` and `monaco-editor-wrapper@6.10.0`.
32
+ - Updated all `@codingame/monaco-vscode` packages to `19.1.4`.
9
33
 
10
34
  ## [6.9.0] - 2025-06-24
11
35
 
package/README.md CHANGED
@@ -1,58 +1,110 @@
1
1
  # React component for Monaco-Editor and Monaco Languageclient
2
2
 
3
- This packages provides a React component that it based on the [monaco-editor-wrapper](https://www.npmjs.com/package/monaco-editor-wrapper). It behaves nearly the same way as the monaco editor, with the primary difference being that you interact with it through a React component.
4
-
5
- The [monaco-languageclient](https://github.com/TypeFox/monaco-languageclient) can be activated to connect to a language server either via jsonrpc over a websocket to an exernal server process, or via the Language Server Protocol for the browser where the language server runs in a web worker.
3
+ This packages provides a React component that wraps the functionality of [monaco-languageclient](https://www.npmjs.com/package/monaco-languageclient) and all its tools.
6
4
 
7
5
  ## CHANGELOG
8
6
 
9
7
  All changes are noted in the [CHANGELOG](https://github.com/TypeFox/monaco-languageclient/blob/main/packages/wrapper-react/CHANGELOG.md).
10
8
 
11
- ## Getting Started
9
+ ## Official documentation, quick start and examples
10
+
11
+ This is npm package is part of the [monaco-languageclient mono repo](https://github.com/TypeFox/monaco-languageclient).
12
+
13
+ You find detailed information in the [official documentation](https://github.com/TypeFox/monaco-languageclient/blob/main/docs/index.md).
12
14
 
13
- This is npm package is part of the [monaco-languageclient mono repo](https://github.com/TypeFox/monaco-languageclient). Please follow the main repositories [instructions](https://github.com/TypeFox/monaco-languageclient#getting-started) to get started with local development.
15
+ If interested, check [quick start for local development]](<https://github.com/TypeFox/monaco-languageclient#getting-started>).
16
+
17
+ A detailed list of examples is contained in the GitHub repository, please see [this listing](<https://github.com/TypeFox/monaco-languageclient#examples-overview>).
14
18
 
15
19
  ## Usage
16
20
 
17
- You can import the monaco react component for easy use in an existing React project. Below you can see a quick example of a fully functional implementation in TypeScript. The react component uses the same `UserConfig` approach which is then applied to `monaco-editor-wrapper`.
21
+ You can import the monaco react component for easy use in an existing React project. Below you can see a quick example of a fully functional implementation in TypeScript. The react component uses the same configuration objects you using `monaco-languageclient` directly with TypeScript/JavaScript.
22
+
23
+ The language client on start can connect to a language server either via jsonrpc over a websocket to an exernal server process, or directly in the browser where the language server runs in a web worker. In both cases they use the Language Server Protocol to communicate. The react component is limited to one language client per component.
18
24
 
19
25
  ```tsx
26
+ import * as vscode from 'vscode';
27
+ // Import Monaco Language Client components
28
+ import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
29
+ import type { MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
30
+ import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
31
+ import type { EditorAppConfig } from 'monaco-languageclient/editorApp';
32
+ import { MonacoEditorReactComp } from '@typefox/monaco-editor-react';
20
33
  import React from 'react';
21
34
  import ReactDOM from 'react-dom/client';
22
- import '@codingame/monaco-vscode-python-default-extension';
23
- import { WrapperConfig } from 'monaco-languageclient/editorApp';
24
- import { MonacoEditorReactComp } from '@typefox/monaco-editor-react';
25
- import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
26
-
27
- const wrapperConfig: WrapperConfig = {
28
- $type: 'extended',
29
- htmlContainer: document.getElementById('monaco-editor-root')!,
30
- editorAppConfig: {
31
- codeResources: {
32
- modified: {
33
- uri: '/workspace/hello.py',
34
- text: 'print("Hello, World!")'
35
- }
36
- },
37
- monacoWorkerFactory: configureDefaultWorkerFactory
38
- }
39
- };
40
-
41
- const comp = <MonacoEditorReactComp
42
- wrapperConfig={wrapperConfig}
43
- style={{ 'height': '100%' }}
44
- onLoad={(wrapper: MonacoEditorLanguageClientWrapper) => {
45
- // use the wrapper to get access to monaco-editor or the languageclient
46
- }}
47
- />;
48
- ReactDOM.createRoot(document.getElementById('react-root')!).render(comp);
49
35
 
36
+ export const createEditorAndLanguageClient = async () => {
37
+ const languageId = 'mylang';
38
+ const code = '// initial editor content';
39
+ const codeUri = '/workspace/hello.mylang';
40
+
41
+ // Monaco VSCode API configuration
42
+ const vscodeApiConfig: MonacoVscodeApiConfig = {
43
+ $type: 'extended',
44
+ viewsConfig: {
45
+ $type: 'EditorService',
46
+ // the div to which monaco-editor is added
47
+ htmlContainer: document.getElementById('monaco-editor-root')!
48
+ },
49
+ userConfiguration: {
50
+ json: JSON.stringify({
51
+ 'workbench.colorTheme': 'Default Dark Modern',
52
+ 'editor.wordBasedSuggestions': 'off'
53
+ })
54
+ },
55
+ monacoWorkerFactory: configureDefaultWorkerFactory
56
+ };
57
+
58
+ // Language client configuration
59
+ const languageClientConfig: LanguageClientConfig = {
60
+ languageId,
61
+ connection: {
62
+ options: {
63
+ $type: 'WebSocketUrl',
64
+ // at this url the language server for myLang must be reachable
65
+ url: 'ws://localhost:30000/myLangLS'
66
+ }
67
+ },
68
+ clientOptions: {
69
+ documentSelector: [languageId],
70
+ orkspaceFolder: {
71
+ index: 0,
72
+ name: 'workspace',
73
+ uri: vscode.Uri.file('/workspace')
74
+ }
75
+ }
76
+ };
77
+
78
+ // editor app / monaco-editor configuration
79
+ const editorAppConfig: EditorAppConfig = {
80
+ codeResources: {
81
+ main: {
82
+ text: code,
83
+ uri: codeUri
84
+ }
85
+ }
86
+ };
87
+
88
+ const root = ReactDOM.createRoot(document.getElementById('react-root')!);
89
+ const App = () => {
90
+ return (
91
+ <div style={{ 'backgroundColor': '#1f1f1f' }} >
92
+ <MonacoEditorReactComp
93
+ vscodeApiConfig={vscodeApiConfig}
94
+ editorAppConfig={editorAppConfig}
95
+ languageClientConfig={languageClientConfig}
96
+ style={{ 'height': '100%' }}
97
+ onError={(e) => {
98
+ console.error(e);
99
+ }} />
100
+ </div>
101
+ );
102
+ };
103
+ root.render(<App />);
104
+ };
105
+ createEditorAndLanguageClient();
50
106
  ```
51
107
 
52
- ## Examples
53
-
54
- For a detailed list of examples please look at [this section](<https://github.com/TypeFox/monaco-languageclient#examples-overview>) in the main repository.
55
-
56
108
  ## License
57
109
 
58
110
  [MIT](https://github.com/TypeFox/monaco-languageclient/blob/main/packages/wrapper-react/LICENSE)
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { EditorApp, type EditorAppConfig, type TextContents } from 'monaco-languageclient/editorApp';
2
- import { type LanguageClientConfigs, LanguageClientsManager } from 'monaco-languageclient/lcwrapper';
2
+ import { type LanguageClientConfig, LanguageClientsManager } from 'monaco-languageclient/lcwrapper';
3
3
  import { type MonacoVscodeApiConfig, MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
4
4
  import React, { type CSSProperties } from 'react';
5
5
  export type ResolveFc = (value: void | PromiseLike<void>) => void;
@@ -8,14 +8,14 @@ export type MonacoEditorProps = {
8
8
  className?: string;
9
9
  vscodeApiConfig: MonacoVscodeApiConfig;
10
10
  editorAppConfig?: EditorAppConfig;
11
- languageClientConfigs?: LanguageClientConfigs;
11
+ languageClientConfig?: LanguageClientConfig;
12
12
  onVscodeApiInitDone?: (monacoVscodeApiManager: MonacoVscodeApiWrapper) => void;
13
13
  onEditorStartDone?: (editorApp?: EditorApp) => void;
14
- onLanguagClientsStartDone?: (lcsManager?: LanguageClientsManager) => void;
14
+ onLanguageClientsStartDone?: (lcsManager?: LanguageClientsManager) => void;
15
15
  onTextChanged?: (textChanges: TextContents) => void;
16
16
  onError?: (error: Error) => void;
17
17
  onDisposeEditor?: () => void;
18
- onDisposeLanguagaeClients?: () => void;
18
+ onDisposeLanguageClient?: () => void;
19
19
  modifiedTextValue?: string;
20
20
  originalTextValue?: string;
21
21
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACrG,OAAO,EAAE,KAAK,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACrG,OAAO,EAAgC,KAAK,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAC1I,OAAO,KAAK,EAAE,EAAE,KAAK,aAAa,EAA+B,MAAM,OAAO,CAAC;AAE/E,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAElE,MAAM,MAAM,iBAAiB,GAAG;IAC5B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,qBAAqB,CAAC;IACvC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,qBAAqB,CAAC,EAAE,qBAAqB,CAAC;IAC9C,mBAAmB,CAAC,EAAE,CAAC,sBAAsB,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC/E,iBAAiB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IACpD,yBAAyB,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC1E,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,KAAK,IAAI,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,yBAAyB,CAAC,EAAE,MAAM,IAAI,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAyL7D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACrG,OAAO,EAAE,KAAK,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACpG,OAAO,EAAgC,KAAK,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAC1I,OAAO,KAAK,EAAE,EAAE,KAAK,aAAa,EAA+B,MAAM,OAAO,CAAC;AAE/E,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;AAElE,MAAM,MAAM,iBAAiB,GAAG;IAC5B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,qBAAqB,CAAC;IACvC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,mBAAmB,CAAC,EAAE,CAAC,sBAAsB,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC/E,iBAAiB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IACpD,0BAA0B,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAC3E,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,KAAK,IAAI,CAAC;IACpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,uBAAuB,CAAC,EAAE,MAAM,IAAI,CAAC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA8N7D,CAAC"}
package/lib/index.js CHANGED
@@ -7,7 +7,7 @@ import { LanguageClientsManager } from 'monaco-languageclient/lcwrapper';
7
7
  import { getEnhancedMonacoEnvironment, MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
8
8
  import React, { useEffect, useRef, useState } from 'react';
9
9
  export const MonacoEditorReactComp = (props) => {
10
- const { style, className, vscodeApiConfig, editorAppConfig, languageClientConfigs, onVscodeApiInitDone, onEditorStartDone, onLanguagClientsStartDone, onTextChanged, onError, onDisposeEditor, onDisposeLanguagaeClients, modifiedTextValue, originalTextValue } = props;
10
+ const { style, className, vscodeApiConfig, editorAppConfig, languageClientConfig, onVscodeApiInitDone, onEditorStartDone, onLanguageClientsStartDone, onTextChanged, onError, onDisposeEditor, onDisposeLanguageClient, modifiedTextValue, originalTextValue } = props;
11
11
  const apiWrapperRef = useRef(new MonacoVscodeApiWrapper(vscodeApiConfig));
12
12
  const haveEditorService = useRef(true);
13
13
  const editorAppRef = useRef(null);
@@ -16,6 +16,31 @@ export const MonacoEditorReactComp = (props) => {
16
16
  const onTextChangedRef = useRef(onTextChanged);
17
17
  const [modifiedCode, setModifiedCode] = useState(modifiedTextValue);
18
18
  const [originalCode, setOriginalCode] = useState(originalTextValue);
19
+ const runQueue = useRef([]);
20
+ const executeQueue = (id, newfunc) => {
21
+ debugLogging(`Adding to queue: ${id}`);
22
+ debugLogging(`QUEUE SIZE before: ${runQueue.current.length}`);
23
+ runQueue.current.push(newfunc);
24
+ (async () => {
25
+ // always expect to need to await the global init
26
+ await awaitGlobal();
27
+ while (runQueue.current.length > 0) {
28
+ const func = runQueue.current.shift();
29
+ debugLogging('QUEUE FUNC start', true);
30
+ await func?.();
31
+ debugLogging('QUEUE FUNC end');
32
+ }
33
+ debugLogging(`QUEUE SIZE after: ${runQueue.current.length}`);
34
+ })();
35
+ };
36
+ const debugLogging = (id, useTime) => {
37
+ if (useTime === true) {
38
+ apiWrapperRef.current.getLogger().debug(`${id}: ${Date.now()}`);
39
+ }
40
+ else {
41
+ apiWrapperRef.current.getLogger().debug(id);
42
+ }
43
+ };
19
44
  const performErrorHandling = (error) => {
20
45
  if (onError) {
21
46
  onError(error);
@@ -41,7 +66,7 @@ export const MonacoEditorReactComp = (props) => {
41
66
  const awaitGlobal = async () => {
42
67
  // await global init if not completed before doing anything else
43
68
  const envEnhanced = getEnhancedMonacoEnvironment();
44
- return (envEnhanced.vscodeApiGlobalInitAwait !== undefined) ? envEnhanced.vscodeApiGlobalInitAwait : Promise.resolve();
69
+ return envEnhanced.vscodeApiGlobalInitAwait ?? Promise.resolve();
45
70
  };
46
71
  const performGlobalInit = async () => {
47
72
  if (containerRef.current === null) {
@@ -49,26 +74,28 @@ export const MonacoEditorReactComp = (props) => {
49
74
  }
50
75
  const envEnhanced = getEnhancedMonacoEnvironment();
51
76
  // init will only performed once
52
- if (!(envEnhanced.vscodeApiInitialising === true)) {
53
- (async () => {
54
- apiWrapperRef.current.getLogger().debug('GLOBAL INIT');
55
- await apiWrapperRef.current.init({
56
- caller: className,
77
+ if (envEnhanced.vscodeApiInitialising !== true) {
78
+ const globalInitFunc = async () => {
79
+ debugLogging('GLOBAL INIT', true);
80
+ apiWrapperRef.current.overrideViewsConfig({
81
+ $type: apiWrapperRef.current.getMonacoVscodeApiConfig().viewsConfig.$type,
57
82
  htmlContainer: containerRef.current
58
83
  });
84
+ await apiWrapperRef.current.start();
59
85
  // set if editor mode is available, otherwise text bindings will not work
60
86
  haveEditorService.current = envEnhanced.viewServiceType === 'EditorService';
61
87
  onVscodeApiInitDone?.(apiWrapperRef.current);
62
- })();
88
+ debugLogging('GLOBAL INIT DONE', true);
89
+ };
90
+ globalInitFunc();
63
91
  }
64
92
  };
65
93
  useEffect(() => {
66
- // always try to perform kick global init
94
+ // always try to perform global init. Reason: we cannot ensure order
67
95
  performGlobalInit();
68
- (async () => {
96
+ const editorInitFunc = async () => {
69
97
  try {
70
- apiWrapperRef.current.getLogger().debug('INIT');
71
- await awaitGlobal();
98
+ debugLogging('INIT', true);
72
99
  // it is possible to run without an editorApp, for example when using the ViewsService
73
100
  if (haveEditorService.current) {
74
101
  editorAppRef.current = new EditorApp(editorAppConfig);
@@ -97,55 +124,56 @@ export const MonacoEditorReactComp = (props) => {
97
124
  modified: modifiedCode
98
125
  });
99
126
  }
100
- apiWrapperRef.current.getLogger().debug('INIT DONE');
127
+ debugLogging('INIT DONE', true);
101
128
  }
102
129
  catch (error) {
103
130
  performErrorHandling(error);
104
131
  }
105
- })();
132
+ };
133
+ executeQueue('editorInit', editorInitFunc);
106
134
  }, [editorAppConfig]);
107
135
  useEffect(() => {
108
- // always try to perform kick global init
136
+ // always try to perform global init. Reason: we cannot ensure order
109
137
  performGlobalInit();
110
- if (languageClientConfigs !== undefined) {
111
- (async () => {
138
+ if (languageClientConfig !== undefined) {
139
+ const lcInitFunc = async () => {
112
140
  try {
113
- apiWrapperRef.current.getLogger().debug('INIT LC');
114
- await awaitGlobal();
115
- if (lcsManagerRef.current === null) {
116
- lcsManagerRef.current = new LanguageClientsManager(apiWrapperRef.current.getLogger());
117
- }
118
- await lcsManagerRef.current.setConfigs(languageClientConfigs);
141
+ debugLogging('INIT LC', true);
142
+ lcsManagerRef.current = new LanguageClientsManager(apiWrapperRef.current.getLogger());
143
+ await lcsManagerRef.current.setConfig(languageClientConfig);
119
144
  await lcsManagerRef.current.start();
120
- onLanguagClientsStartDone?.(lcsManagerRef.current);
121
- apiWrapperRef.current.getLogger().debug('INIT LC DONE');
145
+ onLanguageClientsStartDone?.(lcsManagerRef.current);
146
+ debugLogging('INIT LC DONE', true);
122
147
  }
123
148
  catch (error) {
124
149
  performErrorHandling(error);
125
150
  }
126
- })();
151
+ };
152
+ executeQueue('lcInit', lcInitFunc);
127
153
  }
128
- }, [languageClientConfigs]);
154
+ }, [languageClientConfig]);
129
155
  useEffect(() => {
130
- // always try to perform kick global init
156
+ // always try to perform global init. Reason: we cannot ensure order
131
157
  performGlobalInit();
132
158
  return () => {
133
- (async () => {
159
+ const disposeFunc = async () => {
134
160
  // dispose editor id used and languageclient if enforced
135
161
  try {
136
- apiWrapperRef.current.getLogger().debug('DISPOSE');
162
+ debugLogging('DISPOSE', true);
137
163
  await editorAppRef.current?.dispose();
138
164
  onDisposeEditor?.();
139
- if (languageClientConfigs?.enforceDispose === true) {
165
+ if (languageClientConfig?.enforceDispose === true) {
140
166
  lcsManagerRef.current?.dispose();
141
- onDisposeLanguagaeClients?.();
167
+ onDisposeLanguageClient?.();
142
168
  }
169
+ debugLogging('DISPOSE DONE', true);
143
170
  }
144
171
  catch (error) {
145
172
  // The language client may throw an error during disposal, but we want to continue anyway
146
173
  performErrorHandling(new Error(`Unexpected error occurred during disposal of the language client: ${error}`));
147
174
  }
148
- })();
175
+ };
176
+ executeQueue('dispose', disposeFunc);
149
177
  };
150
178
  }, []);
151
179
  return (React.createElement("div", { ref: containerRef, style: style, className: className }));
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,SAAS,EAA2C,MAAM,iCAAiC,CAAC;AACrG,OAAO,EAA6B,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACpG,OAAO,EAAE,4BAA4B,EAA8B,sBAAsB,EAAE,MAAM,wCAAwC,CAAC;AAC1I,OAAO,KAAK,EAAE,EAAsB,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAqB/E,MAAM,CAAC,MAAM,qBAAqB,GAAgC,CAAC,KAAK,EAAE,EAAE;IACxE,MAAM,EACF,KAAK,EACL,SAAS,EACT,eAAe,EACf,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,aAAa,EACb,OAAO,EACP,eAAe,EACf,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACpB,GAAG,KAAK,CAAC;IAEV,MAAM,aAAa,GAAG,MAAM,CAAyB,IAAI,sBAAsB,CAAC,eAAe,CAAC,CAAC,CAAC;IAClG,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,MAAM,CAAY,IAAI,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,MAAM,CAAyB,IAAI,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IAC/C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACpE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAEpE,MAAM,QAAQ,GAAG,MAAM,CAA6B,EAAE,CAAC,CAAC;IAExD,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,OAA4B,EAAE,EAAE;QAC9D,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QACvC,YAAY,CAAC,sBAAsB,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9D,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC,KAAK,IAAI,EAAE;YACR,iDAAiD;YACjD,MAAM,WAAW,EAAE,CAAC;YAEpB,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACtC,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;gBACvC,MAAM,IAAI,EAAE,EAAE,CAAC;gBACf,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACnC,CAAC;YACD,YAAY,CAAC,qBAAqB,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACjE,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,OAAiB,EAAE,EAAE;QACnD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACnB,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACJ,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChD,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,CAAC,KAAY,EAAE,EAAE;QAC1C,IAAI,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;aAAM,CAAC;YACJ,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACX,wDAAwD;QACxD,IAAI,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;YAC/D,eAAe,CAAC,iBAAiB,CAAC,CAAC;YACnC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,EAAC,QAAQ,EAAE,iBAAiB,EAAC,CAAC,CAAC;QACpE,CAAC;IACL,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACX,wDAAwD;QACxD,IAAI,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;YAC/D,eAAe,CAAC,iBAAiB,CAAC,CAAC;YACnC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,EAAC,QAAQ,EAAE,iBAAiB,EAAC,CAAC,CAAC;QACpE,CAAC;IACL,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;QAC3B,gEAAgE;QAChE,MAAM,WAAW,GAAG,4BAA4B,EAAE,CAAC;QACnD,OAAO,WAAW,CAAC,wBAAwB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACrE,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,KAAK,IAAI,EAAE;QACjC,IAAI,YAAY,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YAChC,oBAAoB,CAAC,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,WAAW,GAAG,4BAA4B,EAAE,CAAC;QAEnD,gCAAgC;QAChC,IAAI,WAAW,CAAC,qBAAqB,KAAK,IAAI,EAAE,CAAC;YAE7C,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;gBAC9B,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;gBAElC,aAAa,CAAC,OAAO,CAAC,mBAAmB,CAAC;oBACtC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC,WAAW,CAAC,KAAK;oBACzE,aAAa,EAAE,YAAY,CAAC,OAAQ;iBACvC,CAAC,CAAC;gBACH,MAAM,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAEpC,yEAAyE;gBACzE,iBAAiB,CAAC,OAAO,GAAG,WAAW,CAAC,eAAe,KAAK,eAAe,CAAC;gBAE5E,mBAAmB,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAE7C,YAAY,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAC3C,CAAC,CAAC;YACF,cAAc,EAAE,CAAC;QACrB,CAAC;IACL,CAAC,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACX,oEAAoE;QACpE,iBAAiB,EAAE,CAAC;QAEpB,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;YAC9B,IAAI,CAAC;gBACD,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAE3B,sFAAsF;gBACtF,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;oBAC5B,YAAY,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;oBACtD,IAAI,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,IAAI,IAAI,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;wBAC5F,MAAM,OAAO,CAAC,GAAG,CAAC;4BACd,YAAY,CAAC,OAAO,CAAC,gBAAgB,EAAE;4BACvC,YAAY,CAAC,OAAO,CAAC,iBAAiB,EAAE;yBAC3C,CAAC,CAAC;oBACP,CAAC;oBAED,YAAY,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,WAAW,EAAE,EAAE;wBAC/D,IAAI,WAAW,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;4BACrC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;wBAC1C,CAAC;wBACD,IAAI,WAAW,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;4BACrC,eAAe,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;wBAC1C,CAAC;wBACD,IAAI,gBAAgB,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;4BACzC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;wBAC1C,CAAC;oBACL,CAAC,CAAC,CAAC;oBACH,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,OAAQ,CAAC,CAAC;oBAExD,iBAAiB,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;oBAE1C,uEAAuE;oBACvE,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;wBAC5B,QAAQ,EAAE,YAAY;wBACtB,QAAQ,EAAE,YAAY;qBACzB,CAAC,CAAC;gBACP,CAAC;gBAED,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,oBAAoB,CAAC,KAAc,CAAC,CAAC;YACzC,CAAC;QACL,CAAC,CAAC;QACF,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC/C,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,SAAS,CAAC,GAAG,EAAE;QACX,oEAAoE;QACpE,iBAAiB,EAAE,CAAC;QAEpB,IAAI,oBAAoB,KAAK,SAAS,EAAE,CAAC;YACrC,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;gBAC1B,IAAI,CAAC;oBACD,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBAE9B,aAAa,CAAC,OAAO,GAAG,IAAI,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;oBAEtF,MAAM,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;oBAC5D,MAAM,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBAEpC,0BAA0B,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;oBAEpD,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;gBACvC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,oBAAoB,CAAC,KAAc,CAAC,CAAC;gBACzC,CAAC;YACL,CAAC,CAAC;YACF,YAAY,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACvC,CAAC;IACL,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAE3B,SAAS,CAAC,GAAG,EAAE;QACX,oEAAoE;QACpE,iBAAiB,EAAE,CAAC;QAEpB,OAAO,GAAG,EAAE;YACR,MAAM,WAAW,GAAG,KAAK,IAAI,EAAE;gBAC3B,wDAAwD;gBACxD,IAAI,CAAC;oBACD,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;oBAE9B,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;oBACtC,eAAe,EAAE,EAAE,CAAC;oBAEpB,IAAI,oBAAoB,EAAE,cAAc,KAAK,IAAI,EAAE,CAAC;wBAChD,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;wBACjC,uBAAuB,EAAE,EAAE,CAAC;oBAChC,CAAC;oBAED,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;gBACvC,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,yFAAyF;oBACzF,oBAAoB,CAAC,IAAI,KAAK,CAAC,qEAAqE,KAAK,EAAE,CAAC,CAAC,CAAC;gBAClH,CAAC;YACL,CAAC,CAAC;YACF,YAAY,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACzC,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACH,6BACI,GAAG,EAAE,YAAY,EACjB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,GACtB,CACL,CAAC;AACN,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typefox/monaco-editor-react",
3
- "version": "7.0.0-next.0",
3
+ "version": "7.0.0-next.2",
4
4
  "license": "MIT",
5
5
  "description": "React component for Monaco-Editor and Monaco Languageclient",
6
6
  "keywords": [
@@ -42,11 +42,11 @@
42
42
  "npm": ">=10.2.3"
43
43
  },
44
44
  "volta": {
45
- "node": "22.16.0",
46
- "npm": "10.9.2"
45
+ "node": "22.19.0",
46
+ "npm": "10.9.3"
47
47
  },
48
48
  "dependencies": {
49
- "@codingame/monaco-vscode-editor-api": "~18.2.0",
49
+ "@codingame/monaco-vscode-editor-api": "^21.0.1",
50
50
  "react": ">=18.0.0 || <20.0.0"
51
51
  },
52
52
  "repository": {
package/src/index.tsx CHANGED
@@ -4,7 +4,7 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import { EditorApp, type EditorAppConfig, type TextContents } from 'monaco-languageclient/editorApp';
7
- import { type LanguageClientConfigs, LanguageClientsManager } from 'monaco-languageclient/lcwrapper';
7
+ import { type LanguageClientConfig, LanguageClientsManager } from 'monaco-languageclient/lcwrapper';
8
8
  import { getEnhancedMonacoEnvironment, type MonacoVscodeApiConfig, MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
9
9
  import React, { type CSSProperties, useEffect, useRef, useState } from 'react';
10
10
 
@@ -15,14 +15,14 @@ export type MonacoEditorProps = {
15
15
  className?: string;
16
16
  vscodeApiConfig: MonacoVscodeApiConfig;
17
17
  editorAppConfig?: EditorAppConfig;
18
- languageClientConfigs?: LanguageClientConfigs;
18
+ languageClientConfig?: LanguageClientConfig;
19
19
  onVscodeApiInitDone?: (monacoVscodeApiManager: MonacoVscodeApiWrapper) => void;
20
20
  onEditorStartDone?: (editorApp?: EditorApp) => void;
21
- onLanguagClientsStartDone?: (lcsManager?: LanguageClientsManager) => void;
21
+ onLanguageClientsStartDone?: (lcsManager?: LanguageClientsManager) => void;
22
22
  onTextChanged?: (textChanges: TextContents) => void;
23
23
  onError?: (error: Error) => void;
24
24
  onDisposeEditor?: () => void;
25
- onDisposeLanguagaeClients?: () => void;
25
+ onDisposeLanguageClient?: () => void;
26
26
  modifiedTextValue?: string;
27
27
  originalTextValue?: string;
28
28
  }
@@ -33,14 +33,14 @@ export const MonacoEditorReactComp: React.FC<MonacoEditorProps> = (props) => {
33
33
  className,
34
34
  vscodeApiConfig,
35
35
  editorAppConfig,
36
- languageClientConfigs,
36
+ languageClientConfig,
37
37
  onVscodeApiInitDone,
38
38
  onEditorStartDone,
39
- onLanguagClientsStartDone,
39
+ onLanguageClientsStartDone,
40
40
  onTextChanged,
41
41
  onError,
42
42
  onDisposeEditor,
43
- onDisposeLanguagaeClients,
43
+ onDisposeLanguageClient,
44
44
  modifiedTextValue,
45
45
  originalTextValue
46
46
  } = props;
@@ -54,6 +54,34 @@ export const MonacoEditorReactComp: React.FC<MonacoEditorProps> = (props) => {
54
54
  const [modifiedCode, setModifiedCode] = useState(modifiedTextValue);
55
55
  const [originalCode, setOriginalCode] = useState(originalTextValue);
56
56
 
57
+ const runQueue = useRef<Array<() => Promise<void>>>([]);
58
+
59
+ const executeQueue = (id: string, newfunc: () => Promise<void>) => {
60
+ debugLogging(`Adding to queue: ${id}`);
61
+ debugLogging(`QUEUE SIZE before: ${runQueue.current.length}`);
62
+ runQueue.current.push(newfunc);
63
+ (async () => {
64
+ // always expect to need to await the global init
65
+ await awaitGlobal();
66
+
67
+ while (runQueue.current.length > 0) {
68
+ const func = runQueue.current.shift();
69
+ debugLogging('QUEUE FUNC start', true);
70
+ await func?.();
71
+ debugLogging('QUEUE FUNC end');
72
+ }
73
+ debugLogging(`QUEUE SIZE after: ${runQueue.current.length}`);
74
+ })();
75
+ };
76
+
77
+ const debugLogging = (id: string, useTime?: boolean) => {
78
+ if (useTime === true) {
79
+ apiWrapperRef.current.getLogger().debug(`${id}: ${Date.now()}`);
80
+ } else {
81
+ apiWrapperRef.current.getLogger().debug(id);
82
+ }
83
+ };
84
+
57
85
  const performErrorHandling = (error: Error) => {
58
86
  if (onError) {
59
87
  onError(error);
@@ -81,7 +109,7 @@ export const MonacoEditorReactComp: React.FC<MonacoEditorProps> = (props) => {
81
109
  const awaitGlobal = async () => {
82
110
  // await global init if not completed before doing anything else
83
111
  const envEnhanced = getEnhancedMonacoEnvironment();
84
- return (envEnhanced.vscodeApiGlobalInitAwait !== undefined) ? envEnhanced.vscodeApiGlobalInitAwait : Promise.resolve();
112
+ return envEnhanced.vscodeApiGlobalInitAwait ?? Promise.resolve();
85
113
  };
86
114
 
87
115
  const performGlobalInit = async () => {
@@ -91,31 +119,35 @@ export const MonacoEditorReactComp: React.FC<MonacoEditorProps> = (props) => {
91
119
  const envEnhanced = getEnhancedMonacoEnvironment();
92
120
 
93
121
  // init will only performed once
94
- if (!(envEnhanced.vscodeApiInitialising === true)) {
122
+ if (envEnhanced.vscodeApiInitialising !== true) {
95
123
 
96
- (async () => {
97
- apiWrapperRef.current.getLogger().debug('GLOBAL INIT');
98
- await apiWrapperRef.current.init({
99
- caller: className,
100
- htmlContainer: containerRef.current
124
+ const globalInitFunc = async () => {
125
+ debugLogging('GLOBAL INIT', true);
126
+
127
+ apiWrapperRef.current.overrideViewsConfig({
128
+ $type: apiWrapperRef.current.getMonacoVscodeApiConfig().viewsConfig.$type,
129
+ htmlContainer: containerRef.current!
101
130
  });
131
+ await apiWrapperRef.current.start();
102
132
 
103
133
  // set if editor mode is available, otherwise text bindings will not work
104
134
  haveEditorService.current = envEnhanced.viewServiceType === 'EditorService';
105
135
 
106
136
  onVscodeApiInitDone?.(apiWrapperRef.current);
107
- })();
137
+
138
+ debugLogging('GLOBAL INIT DONE', true);
139
+ };
140
+ globalInitFunc();
108
141
  }
109
142
  };
110
143
 
111
144
  useEffect(() => {
112
- // always try to perform kick global init
145
+ // always try to perform global init. Reason: we cannot ensure order
113
146
  performGlobalInit();
114
147
 
115
- (async () => {
148
+ const editorInitFunc = async () => {
116
149
  try {
117
- apiWrapperRef.current.getLogger().debug('INIT');
118
- await awaitGlobal();
150
+ debugLogging('INIT', true);
119
151
 
120
152
  // it is possible to run without an editorApp, for example when using the ViewsService
121
153
  if (haveEditorService.current) {
@@ -148,60 +180,65 @@ export const MonacoEditorReactComp: React.FC<MonacoEditorProps> = (props) => {
148
180
  modified: modifiedCode
149
181
  });
150
182
  }
151
- apiWrapperRef.current.getLogger().debug('INIT DONE');
183
+
184
+ debugLogging('INIT DONE', true);
152
185
  } catch (error) {
153
186
  performErrorHandling(error as Error);
154
187
  }
155
- })();
188
+ };
189
+ executeQueue('editorInit', editorInitFunc);
156
190
  }, [editorAppConfig]);
157
191
 
158
192
  useEffect(() => {
159
- // always try to perform kick global init
193
+ // always try to perform global init. Reason: we cannot ensure order
160
194
  performGlobalInit();
161
195
 
162
- if (languageClientConfigs !== undefined) {
163
- (async () => {
196
+ if (languageClientConfig !== undefined) {
197
+ const lcInitFunc = async () => {
164
198
  try {
165
- apiWrapperRef.current.getLogger().debug('INIT LC');
166
- await awaitGlobal();
199
+ debugLogging('INIT LC', true);
167
200
 
168
- if (lcsManagerRef.current === null) {
169
- lcsManagerRef.current = new LanguageClientsManager(apiWrapperRef.current.getLogger());
170
- }
201
+ lcsManagerRef.current = new LanguageClientsManager(apiWrapperRef.current.getLogger());
171
202
 
172
- await lcsManagerRef.current.setConfigs(languageClientConfigs);
203
+ await lcsManagerRef.current.setConfig(languageClientConfig);
173
204
  await lcsManagerRef.current.start();
174
205
 
175
- onLanguagClientsStartDone?.(lcsManagerRef.current);
176
- apiWrapperRef.current.getLogger().debug('INIT LC DONE');
206
+ onLanguageClientsStartDone?.(lcsManagerRef.current);
207
+
208
+ debugLogging('INIT LC DONE', true);
177
209
  } catch (error) {
178
210
  performErrorHandling(error as Error);
179
211
  }
180
- })();
212
+ };
213
+ executeQueue('lcInit', lcInitFunc);
181
214
  }
182
- }, [languageClientConfigs]);
215
+ }, [languageClientConfig]);
183
216
 
184
217
  useEffect(() => {
185
- // always try to perform kick global init
218
+ // always try to perform global init. Reason: we cannot ensure order
186
219
  performGlobalInit();
187
220
 
188
221
  return () => {
189
- (async () => {
222
+ const disposeFunc = async () => {
190
223
  // dispose editor id used and languageclient if enforced
191
224
  try {
192
- apiWrapperRef.current.getLogger().debug('DISPOSE');
225
+ debugLogging('DISPOSE', true);
226
+
193
227
  await editorAppRef.current?.dispose();
194
228
  onDisposeEditor?.();
195
229
 
196
- if (languageClientConfigs?.enforceDispose === true) {
230
+ if (languageClientConfig?.enforceDispose === true) {
197
231
  lcsManagerRef.current?.dispose();
198
- onDisposeLanguagaeClients?.();
232
+ onDisposeLanguageClient?.();
199
233
  }
234
+
235
+ debugLogging('DISPOSE DONE', true);
200
236
  } catch (error) {
201
237
  // The language client may throw an error during disposal, but we want to continue anyway
202
238
  performErrorHandling(new Error(`Unexpected error occurred during disposal of the language client: ${error}`));
203
239
  }
204
- })();
240
+ };
241
+ executeQueue('dispose', disposeFunc);
205
242
  };
206
243
  }, []);
207
244