monaco-languageclient 10.0.0-next.0 → 10.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.
Files changed (50) hide show
  1. package/CHANGELOG.md +20 -3
  2. package/README.md +98 -34
  3. package/lib/common/utils.d.ts +1 -1
  4. package/lib/common/utils.d.ts.map +1 -1
  5. package/lib/common/utils.js +1 -1
  6. package/lib/common/utils.js.map +1 -1
  7. package/lib/editorApp/config.d.ts +0 -2
  8. package/lib/editorApp/config.d.ts.map +1 -1
  9. package/lib/editorApp/config.js +1 -2
  10. package/lib/editorApp/config.js.map +1 -1
  11. package/lib/editorApp/editorApp.d.ts +4 -11
  12. package/lib/editorApp/editorApp.d.ts.map +1 -1
  13. package/lib/editorApp/editorApp.js +73 -88
  14. package/lib/editorApp/editorApp.js.map +1 -1
  15. package/lib/fs/definitions.d.ts +2 -2
  16. package/lib/fs/definitions.d.ts.map +1 -1
  17. package/lib/vscode/apiWrapper.d.ts +21 -6
  18. package/lib/vscode/apiWrapper.d.ts.map +1 -1
  19. package/lib/vscode/apiWrapper.js +67 -39
  20. package/lib/vscode/apiWrapper.js.map +1 -1
  21. package/lib/vscode/config.d.ts +8 -6
  22. package/lib/vscode/config.d.ts.map +1 -1
  23. package/lib/vscode/config.js +1 -1
  24. package/lib/vscode/utils.d.ts.map +1 -1
  25. package/lib/vscode/utils.js +4 -5
  26. package/lib/vscode/utils.js.map +1 -1
  27. package/lib/worker/index.js +1 -1
  28. package/lib/wrapper/lcconfig.d.ts +3 -3
  29. package/lib/wrapper/lcconfig.d.ts.map +1 -1
  30. package/lib/wrapper/lcconfig.js +1 -1
  31. package/lib/wrapper/lcmanager.d.ts +2 -1
  32. package/lib/wrapper/lcmanager.d.ts.map +1 -1
  33. package/lib/wrapper/lcmanager.js +21 -17
  34. package/lib/wrapper/lcmanager.js.map +1 -1
  35. package/lib/wrapper/lcwrapper.d.ts +1 -1
  36. package/lib/wrapper/lcwrapper.d.ts.map +1 -1
  37. package/lib/wrapper/lcwrapper.js +10 -9
  38. package/lib/wrapper/lcwrapper.js.map +1 -1
  39. package/package.json +41 -40
  40. package/src/common/utils.ts +1 -1
  41. package/src/editorApp/config.ts +1 -3
  42. package/src/editorApp/editorApp.ts +81 -96
  43. package/src/fs/definitions.ts +2 -2
  44. package/src/vscode/apiWrapper.ts +84 -44
  45. package/src/vscode/config.ts +13 -8
  46. package/src/vscode/utils.ts +4 -5
  47. package/src/worker/index.ts +1 -1
  48. package/src/wrapper/lcconfig.ts +5 -5
  49. package/src/wrapper/lcmanager.ts +23 -18
  50. package/src/wrapper/lcwrapper.ts +10 -9
@@ -1,5 +1,5 @@
1
1
  /* --------------------------------------------------------------------------------------------
2
- * Copyright (c) 2024 TypeFox and others.
2
+ * Copyright (c) 2025 TypeFox and others.
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
@@ -12,11 +12,10 @@ import { FakeWorker as Worker } from 'monaco-languageclient/workerFactory';
12
12
  import type { MonacoEnvironmentEnhanced } from './config.js';
13
13
 
14
14
  export const getEnhancedMonacoEnvironment = (): MonacoEnvironmentEnhanced => {
15
- const monWin = (self as Window);
16
- if (monWin.MonacoEnvironment === undefined) {
17
- monWin.MonacoEnvironment = {};
15
+ if (typeof MonacoEnvironment === 'undefined') {
16
+ globalThis.MonacoEnvironment = {};
18
17
  }
19
- const envEnhanced = monWin.MonacoEnvironment as MonacoEnvironmentEnhanced;
18
+ const envEnhanced = MonacoEnvironment as MonacoEnvironmentEnhanced;
20
19
  if (envEnhanced.vscodeApiInitialising === undefined) {
21
20
  envEnhanced.vscodeApiInitialising = false;
22
21
  }
@@ -1,5 +1,5 @@
1
1
  /* --------------------------------------------------------------------------------------------
2
- * Copyright (c) 2024 TypeFox and others.
2
+ * Copyright (c) 2025 TypeFox and others.
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
@@ -1,5 +1,5 @@
1
1
  /* --------------------------------------------------------------------------------------------
2
- * Copyright (c) 2024 TypeFox and others.
2
+ * Copyright (c) 2025 TypeFox and others.
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
@@ -12,11 +12,13 @@ export interface ConnectionConfig {
12
12
  }
13
13
 
14
14
  export interface LanguageClientConfig {
15
- name?: string;
15
+ languageId: string;
16
16
  connection: ConnectionConfig;
17
17
  clientOptions: LanguageClientOptions;
18
18
  restartOptions?: LanguageClientRestartOptions;
19
19
  disposeWorker?: boolean;
20
+ overwriteExisting?: boolean;
21
+ enforceDispose?: boolean;
20
22
  }
21
23
 
22
24
  export interface LanguageClientRestartOptions {
@@ -26,7 +28,5 @@ export interface LanguageClientRestartOptions {
26
28
  }
27
29
 
28
30
  export interface LanguageClientConfigs {
29
- configs: Record<string, LanguageClientConfig>
30
- overwriteExisting?: boolean;
31
- enforceDispose?: boolean;
31
+ configs: Record<string, LanguageClientConfig>;
32
32
  }
@@ -1,10 +1,10 @@
1
1
  /* --------------------------------------------------------------------------------------------
2
- * Copyright (c) 2024 TypeFox and others.
2
+ * Copyright (c) 2025 TypeFox and others.
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import type { Logger } from 'monaco-languageclient/common';
7
- import type { LanguageClientConfigs } from './lcconfig.js';
7
+ import type { LanguageClientConfig, LanguageClientConfigs } from './lcconfig.js';
8
8
  import { LanguageClientWrapper } from './lcwrapper.js';
9
9
 
10
10
  export class LanguageClientsManager {
@@ -33,25 +33,30 @@ export class LanguageClientsManager {
33
33
  return this.languageClientWrappers.get(languageId)?.getWorker();
34
34
  }
35
35
 
36
+ async setConfig(languageClientConfig: LanguageClientConfig): Promise<void> {
37
+ const languageId = languageClientConfig.languageId;
38
+ const current = this.languageClientWrappers.get(languageId);
39
+ const lcw = new LanguageClientWrapper(languageClientConfig, this.logger);
40
+
41
+ if (current !== undefined) {
42
+ if (languageClientConfig.overwriteExisting === true) {
43
+ if (languageClientConfig.enforceDispose === true) {
44
+ await current.dispose();
45
+ }
46
+ } else {
47
+ throw new Error(`A languageclient config with id "${languageId}" already exists and you confiured to not override.`);
48
+ }
49
+ }
50
+ this.languageClientWrappers.set(languageId, lcw);
51
+ }
52
+
36
53
  async setConfigs(languageClientConfigs: LanguageClientConfigs): Promise<void> {
37
54
  this.languageClientConfigs = languageClientConfigs;
38
55
 
39
- const lccEntries = Object.entries(this.languageClientConfigs.configs);
40
- if (lccEntries.length > 0) {
41
- for (const [languageId, lcc] of lccEntries) {
42
- const current = this.languageClientWrappers.get(languageId);
43
- const lcw = new LanguageClientWrapper(lcc, this.logger);
44
-
45
- if (current !== undefined) {
46
- if (languageClientConfigs.overwriteExisting === true) {
47
- if (languageClientConfigs.enforceDispose === true) {
48
- await current.dispose();
49
- }
50
- } else {
51
- throw new Error(`A languageclient config with id "${languageId}" already exists and you confiured to not override.`);
52
- }
53
- }
54
- this.languageClientWrappers.set(languageId, lcw);
56
+ const lccs = Object.values(this.languageClientConfigs.configs);
57
+ if (lccs.length > 0) {
58
+ for (const lcc of lccs) {
59
+ await this.setConfig(lcc);
55
60
  }
56
61
  }
57
62
  }
@@ -21,12 +21,12 @@ export class LanguageClientWrapper {
21
21
  private languageClientConfig: LanguageClientConfig;
22
22
  private worker?: Worker;
23
23
  private port?: MessagePort;
24
- private name?: string;
24
+ private languageId: string;
25
25
  private logger: Logger | undefined;
26
26
 
27
27
  constructor(config: LanguageClientConfig, logger?: Logger) {
28
28
  this.languageClientConfig = config;
29
- this.name = this.languageClientConfig.name ?? 'unnamed';
29
+ this.languageId = this.languageClientConfig.languageId;
30
30
  this.logger = logger;
31
31
  }
32
32
 
@@ -102,7 +102,7 @@ export class LanguageClientWrapper {
102
102
  };
103
103
  webSocket.onerror = (ev: Event) => {
104
104
  const languageClientError: LanguageClientError = {
105
- message: `languageClientWrapper (${this.name}): Websocket connection failed.`,
105
+ message: `languageClientWrapper (${this.languageId}): Websocket connection failed.`,
106
106
  error: (ev as ErrorEvent).error ?? 'No error was provided.'
107
107
  };
108
108
  reject(languageClientError);
@@ -120,7 +120,7 @@ export class LanguageClientWrapper {
120
120
 
121
121
  this.worker.onerror = (ev) => {
122
122
  const languageClientError: LanguageClientError = {
123
- message: `languageClientWrapper (${this.name}): Illegal worker configuration detected.`,
123
+ message: `languageClientWrapper (${this.languageId}): Illegal worker configuration detected.`,
124
124
  error: ev.error ?? 'No error was provided.'
125
125
  };
126
126
  reject(languageClientError);
@@ -155,7 +155,8 @@ export class LanguageClientWrapper {
155
155
  }
156
156
 
157
157
  const mlcConfig = {
158
- name: this.languageClientConfig.name ?? 'Monaco Wrapper Language Client',
158
+ id: this.languageClientConfig.languageId,
159
+ name: 'Monaco Wrapper Language Client',
159
160
  clientOptions: {
160
161
  // disable the default error handler...
161
162
  errorHandler: {
@@ -205,12 +206,12 @@ export class LanguageClientWrapper {
205
206
  }
206
207
  } catch (e: unknown) {
207
208
  const languageClientError: LanguageClientError = {
208
- message: `languageClientWrapper (${this.name}): Start was unsuccessful.`,
209
+ message: `languageClientWrapper (${this.languageId}): Start was unsuccessful.`,
209
210
  error: Object.hasOwn(e ?? {}, 'cause') ? (e as Error) : 'No error was provided.'
210
211
  };
211
212
  reject(languageClientError);
212
213
  }
213
- this.logger?.info(`languageClientWrapper (${this.name}): Started successfully.`);
214
+ this.logger?.info(`languageClientWrapper (${this.languageId}): Started successfully.`);
214
215
  resolve();
215
216
  starting = false;
216
217
  }
@@ -232,7 +233,7 @@ export class LanguageClientWrapper {
232
233
  } finally {
233
234
  retry++;
234
235
  if (retry > (restartOptions.retries) && !this.isStarted()) {
235
- this.logger?.info('Disabling Language Client. Failed to start clangd after 5 retries');
236
+ this.logger?.info(`Disabling Language Client. Failed to start clangd after ${restartOptions.retries} retries`);
236
237
  } else {
237
238
  setTimeout(async () => {
238
239
  await this.restart(this.worker, restartOptions.keepWorker);
@@ -258,7 +259,7 @@ export class LanguageClientWrapper {
258
259
  }
259
260
  } catch (e) {
260
261
  const languageClientError: LanguageClientError = {
261
- message: `languageClientWrapper (${this.name}): Disposing the monaco-languageclient resulted in error.`,
262
+ message: `languageClientWrapper (${this.languageId}): Disposing the monaco-languageclient resulted in error.`,
262
263
  error: Object.hasOwn(e ?? {}, 'cause') ? (e as Error) : 'No error was provided.'
263
264
  };
264
265
  return Promise.reject(languageClientError);