monaco-languageclient-examples 2025.8.3 → 2025.8.5

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 (173) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/appPlayground/common.d.ts +2 -2
  3. package/dist/appPlayground/common.d.ts.map +1 -1
  4. package/dist/appPlayground/common.js +2 -3
  5. package/dist/appPlayground/common.js.map +1 -1
  6. package/dist/appPlayground/config.d.ts +4 -2
  7. package/dist/appPlayground/config.d.ts.map +1 -1
  8. package/dist/appPlayground/config.js +65 -63
  9. package/dist/appPlayground/config.js.map +1 -1
  10. package/dist/appPlayground/launcher.js +1 -1
  11. package/dist/appPlayground/launcher.js.map +1 -1
  12. package/dist/appPlayground/main.d.ts.map +1 -1
  13. package/dist/appPlayground/main.js +5 -4
  14. package/dist/appPlayground/main.js.map +1 -1
  15. package/dist/appPlayground/reactLauncher.js +1 -1
  16. package/dist/appPlayground/reactLauncher.js.map +1 -1
  17. package/dist/appPlayground/reactMain.d.ts.map +1 -1
  18. package/dist/appPlayground/reactMain.js +2 -3
  19. package/dist/appPlayground/reactMain.js.map +1 -1
  20. package/dist/bare/client.d.ts.map +1 -1
  21. package/dist/bare/client.js +12 -15
  22. package/dist/bare/client.js.map +1 -1
  23. package/dist/browser/main.d.ts +1 -0
  24. package/dist/browser/main.d.ts.map +1 -1
  25. package/dist/browser/main.js +29 -27
  26. package/dist/browser/main.js.map +1 -1
  27. package/dist/clangd/client/config.d.ts +10 -3
  28. package/dist/clangd/client/config.d.ts.map +1 -1
  29. package/dist/clangd/client/config.js +85 -85
  30. package/dist/clangd/client/config.js.map +1 -1
  31. package/dist/clangd/client/main.d.ts.map +1 -1
  32. package/dist/clangd/client/main.js +12 -9
  33. package/dist/clangd/client/main.js.map +1 -1
  34. package/dist/common/client/extendedClient.d.ts +9 -0
  35. package/dist/common/client/extendedClient.d.ts.map +1 -0
  36. package/dist/common/client/extendedClient.js +97 -0
  37. package/dist/common/client/extendedClient.js.map +1 -0
  38. package/dist/common/client/utils.d.ts +8 -1
  39. package/dist/common/client/utils.d.ts.map +1 -1
  40. package/dist/common/client/utils.js +0 -3
  41. package/dist/common/client/utils.js.map +1 -1
  42. package/dist/debugger/client/debugger.d.ts +1 -1
  43. package/dist/debugger/client/debugger.d.ts.map +1 -1
  44. package/dist/eclipse.jdt.ls/client/main.d.ts +1 -1
  45. package/dist/eclipse.jdt.ls/client/main.d.ts.map +1 -1
  46. package/dist/eclipse.jdt.ls/client/main.js +4 -74
  47. package/dist/eclipse.jdt.ls/client/main.js.map +1 -1
  48. package/dist/eclipse.jdt.ls/config.d.ts +2 -5
  49. package/dist/eclipse.jdt.ls/config.d.ts.map +1 -1
  50. package/dist/eclipse.jdt.ls/config.js +2 -1
  51. package/dist/eclipse.jdt.ls/config.js.map +1 -1
  52. package/dist/groovy/client/main.d.ts +1 -1
  53. package/dist/groovy/client/main.d.ts.map +1 -1
  54. package/dist/groovy/client/main.js +4 -63
  55. package/dist/groovy/client/main.js.map +1 -1
  56. package/dist/groovy/config.d.ts +2 -5
  57. package/dist/groovy/config.d.ts.map +1 -1
  58. package/dist/groovy/config.js +2 -1
  59. package/dist/groovy/config.js.map +1 -1
  60. package/dist/json/client/client.d.ts +3 -0
  61. package/dist/json/client/client.d.ts.map +1 -0
  62. package/dist/json/client/client.js +13 -0
  63. package/dist/json/client/client.js.map +1 -0
  64. package/dist/json/client/config.d.ts +3 -0
  65. package/dist/json/client/config.d.ts.map +1 -0
  66. package/dist/json/client/config.js +11 -0
  67. package/dist/json/client/config.js.map +1 -0
  68. package/dist/json/server/main.js.map +1 -1
  69. package/dist/langium/langium-dsl/config/extendedConfig.d.ts +2 -7
  70. package/dist/langium/langium-dsl/config/extendedConfig.d.ts.map +1 -1
  71. package/dist/langium/langium-dsl/config/extendedConfig.js +103 -49
  72. package/dist/langium/langium-dsl/config/extendedConfig.js.map +1 -1
  73. package/dist/langium/langium-dsl/config/langium.configuration.json +10 -40
  74. package/dist/langium/langium-dsl/config/langium.tmLanguage.json +1 -1
  75. package/dist/langium/langium-dsl/main.d.ts +2 -0
  76. package/dist/langium/langium-dsl/main.d.ts.map +1 -0
  77. package/dist/langium/langium-dsl/main.js +26 -0
  78. package/dist/langium/langium-dsl/main.js.map +1 -0
  79. package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts +4 -4
  80. package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts.map +1 -1
  81. package/dist/langium/statemachine/config/wrapperStatemachineConfig.js +40 -41
  82. package/dist/langium/statemachine/config/wrapperStatemachineConfig.js.map +1 -1
  83. package/dist/langium/statemachine/launcher.js +1 -1
  84. package/dist/langium/statemachine/launcher.js.map +1 -1
  85. package/dist/langium/statemachine/main-react.d.ts.map +1 -1
  86. package/dist/langium/statemachine/main-react.js +7 -3
  87. package/dist/langium/statemachine/main-react.js.map +1 -1
  88. package/dist/langium/statemachine/main.d.ts.map +1 -1
  89. package/dist/langium/statemachine/main.js +38 -27
  90. package/dist/langium/statemachine/main.js.map +1 -1
  91. package/dist/multi/config.d.ts +1 -1
  92. package/dist/multi/config.d.ts.map +1 -1
  93. package/dist/multi/config.js +0 -1
  94. package/dist/multi/config.js.map +1 -1
  95. package/dist/multi/twoLanguageClients.d.ts.map +1 -1
  96. package/dist/multi/twoLanguageClients.js +45 -49
  97. package/dist/multi/twoLanguageClients.js.map +1 -1
  98. package/dist/node.d.ts +0 -3
  99. package/dist/node.d.ts.map +1 -1
  100. package/dist/node.js +0 -3
  101. package/dist/node.js.map +1 -1
  102. package/dist/python/client/config.d.ts +7 -3
  103. package/dist/python/client/config.d.ts.map +1 -1
  104. package/dist/python/client/config.js +93 -97
  105. package/dist/python/client/config.js.map +1 -1
  106. package/dist/python/client/main.d.ts.map +1 -1
  107. package/dist/python/client/main.js +16 -10
  108. package/dist/python/client/main.js.map +1 -1
  109. package/dist/python/client/reactPython.d.ts.map +1 -1
  110. package/dist/python/client/reactPython.js +13 -9
  111. package/dist/python/client/reactPython.js.map +1 -1
  112. package/dist/ts/wrapperTs.d.ts.map +1 -1
  113. package/dist/ts/wrapperTs.js +50 -45
  114. package/dist/ts/wrapperTs.js.map +1 -1
  115. package/ghp_langium_extended.html +3 -3
  116. package/index.html +1 -1
  117. package/json.html +1 -1
  118. package/langium_extended.html +4 -6
  119. package/package.json +10 -11
  120. package/src/appPlayground/common.ts +3 -3
  121. package/src/appPlayground/config.ts +69 -65
  122. package/src/appPlayground/launcher.ts +2 -1
  123. package/src/appPlayground/main.ts +8 -5
  124. package/src/appPlayground/reactLauncher.ts +2 -1
  125. package/src/appPlayground/reactMain.tsx +4 -4
  126. package/src/bare/client.ts +15 -16
  127. package/src/browser/main.ts +30 -27
  128. package/src/clangd/client/config.ts +97 -87
  129. package/src/clangd/client/main.ts +14 -10
  130. package/src/common/client/extendedClient.ts +111 -0
  131. package/src/common/client/utils.ts +7 -2
  132. package/src/debugger/client/debugger.ts +1 -1
  133. package/src/eclipse.jdt.ls/client/main.ts +4 -78
  134. package/src/eclipse.jdt.ls/config.ts +6 -2
  135. package/src/groovy/client/main.ts +4 -65
  136. package/src/groovy/config.ts +6 -2
  137. package/src/json/client/client.ts +14 -0
  138. package/src/json/client/config.ts +13 -0
  139. package/src/json/server/main.ts +1 -1
  140. package/src/langium/langium-dsl/config/extendedConfig.ts +117 -54
  141. package/src/langium/langium-dsl/config/langium.configuration.json +128 -158
  142. package/src/langium/langium-dsl/config/langium.tmLanguage.json +271 -271
  143. package/src/langium/langium-dsl/main.ts +31 -0
  144. package/src/langium/statemachine/config/wrapperStatemachineConfig.ts +48 -45
  145. package/src/langium/statemachine/launcher.ts +1 -1
  146. package/src/langium/statemachine/main-react.tsx +10 -4
  147. package/src/langium/statemachine/main.ts +43 -27
  148. package/src/multi/config.ts +3 -3
  149. package/src/multi/twoLanguageClients.ts +48 -52
  150. package/src/node.ts +0 -3
  151. package/src/python/client/config.ts +101 -99
  152. package/src/python/client/main.ts +20 -11
  153. package/src/python/client/reactPython.tsx +17 -10
  154. package/src/ts/wrapperTs.ts +52 -45
  155. package/two_langauge_clients.html +0 -1
  156. package/vite.production.base.ts +0 -1
  157. package/dist/json/client/wrapperWs.d.ts +0 -5
  158. package/dist/json/client/wrapperWs.d.ts.map +0 -1
  159. package/dist/json/client/wrapperWs.js +0 -87
  160. package/dist/json/client/wrapperWs.js.map +0 -1
  161. package/dist/langium/langium-dsl/config/classicConfig.d.ts +0 -7
  162. package/dist/langium/langium-dsl/config/classicConfig.d.ts.map +0 -1
  163. package/dist/langium/langium-dsl/config/classicConfig.js +0 -66
  164. package/dist/langium/langium-dsl/config/classicConfig.js.map +0 -1
  165. package/dist/langium/langium-dsl/wrapperLangium.d.ts +0 -2
  166. package/dist/langium/langium-dsl/wrapperLangium.d.ts.map +0 -1
  167. package/dist/langium/langium-dsl/wrapperLangium.js +0 -79
  168. package/dist/langium/langium-dsl/wrapperLangium.js.map +0 -1
  169. package/ghp_langium_classic.html +0 -26
  170. package/langium_classic.html +0 -26
  171. package/src/json/client/wrapperWs.ts +0 -90
  172. package/src/langium/langium-dsl/config/classicConfig.ts +0 -72
  173. package/src/langium/langium-dsl/wrapperLangium.ts +0 -85
@@ -6,65 +6,62 @@
6
6
  import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
7
7
  import getLifecycleServiceOverride from '@codingame/monaco-vscode-lifecycle-service-override';
8
8
  import getLocalizationServiceOverride from '@codingame/monaco-vscode-localization-service-override';
9
- import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscode/services';
10
9
  import { LogLevel } from '@codingame/monaco-vscode-api';
11
10
  import { MessageTransports } from 'vscode-languageclient';
12
- import type { CodeContent, LanguageClientConfigs, WrapperConfig } from 'monaco-editor-wrapper';
13
- import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
11
+ import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscodeApiLocales';
12
+ import type { MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
13
+ import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
14
+ import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
15
+ import type { CodeContent, EditorAppConfig } from 'monaco-languageclient/editorApp';
14
16
 
15
17
  // cannot be imported with assert as json contains comments
16
18
  import statemachineLanguageConfig from './language-configuration.json?raw';
17
19
  import responseStatemachineTm from '../syntaxes/statemachine.tmLanguage.json?raw';
20
+ import type { ExampleAppConfig } from '../../../common/client/utils.js';
18
21
 
19
22
  export const createLangiumGlobalConfig = (params: {
20
23
  languageServerId: string,
21
- useLanguageClient: boolean,
22
24
  codeContent: CodeContent,
23
- worker?: Worker,
25
+ worker: Worker,
24
26
  messagePort?: MessagePort,
25
27
  messageTransports?: MessageTransports,
26
28
  htmlContainer: HTMLElement
27
- }): WrapperConfig => {
29
+ }): ExampleAppConfig => {
28
30
  const extensionFilesOrContents = new Map<string, string | URL>();
29
31
  extensionFilesOrContents.set(`/${params.languageServerId}-statemachine-configuration.json`, statemachineLanguageConfig);
30
32
  extensionFilesOrContents.set(`/${params.languageServerId}-statemachine-grammar.json`, responseStatemachineTm);
31
33
 
32
- const languageClientConfigs: LanguageClientConfigs | undefined = params.useLanguageClient && params.worker ? {
33
- configs: {
34
- statemachine: {
35
- clientOptions: {
36
- documentSelector: ['statemachine']
37
- },
38
- connection: {
39
- options: {
40
- $type: 'WorkerDirect',
41
- worker: params.worker,
42
- messagePort: params.messagePort,
43
- },
44
- messageTransports: params.messageTransports
45
- }
46
- }
34
+ const languageClientConfig: LanguageClientConfig = {
35
+ clientOptions: {
36
+ documentSelector: ['statemachine']
37
+ },
38
+ connection: {
39
+ options: {
40
+ $type: 'WorkerDirect',
41
+ worker: params.worker,
42
+ messagePort: params.messagePort,
43
+ },
44
+ messageTransports: params.messageTransports
47
45
  }
48
- } : undefined;
46
+ };
49
47
 
50
- return {
48
+ const vscodeApiConfig: MonacoVscodeApiConfig = {
51
49
  $type: 'extended',
52
50
  htmlContainer: params.htmlContainer,
53
51
  logLevel: LogLevel.Debug,
54
- vscodeApiConfig: {
55
- serviceOverrides: {
56
- ...getKeybindingsServiceOverride(),
57
- ...getLifecycleServiceOverride(),
58
- ...getLocalizationServiceOverride(createDefaultLocaleConfiguration()),
59
- },
60
- userConfiguration: {
61
- json: JSON.stringify({
62
- 'workbench.colorTheme': 'Default Dark Modern',
63
- 'editor.guides.bracketPairsHorizontal': 'active',
64
- 'editor.wordBasedSuggestions': 'off',
65
- 'editor.experimental.asyncTokenization': true
66
- })
67
- },
52
+ serviceOverrides: {
53
+ ...getKeybindingsServiceOverride(),
54
+ ...getLifecycleServiceOverride(),
55
+ ...getLocalizationServiceOverride(createDefaultLocaleConfiguration()),
56
+ },
57
+ monacoWorkerFactory: configureDefaultWorkerFactory,
58
+ userConfiguration: {
59
+ json: JSON.stringify({
60
+ 'workbench.colorTheme': 'Default Dark Modern',
61
+ 'editor.guides.bracketPairsHorizontal': 'active',
62
+ 'editor.wordBasedSuggestions': 'off',
63
+ 'editor.experimental.asyncTokenization': true
64
+ })
68
65
  },
69
66
  extensions: [{
70
67
  config: {
@@ -89,13 +86,19 @@ export const createLangiumGlobalConfig = (params: {
89
86
  }
90
87
  },
91
88
  filesOrContents: extensionFilesOrContents
92
- }],
93
- editorAppConfig: {
94
- codeResources: {
95
- modified: params.codeContent
96
- },
97
- monacoWorkerFactory: configureDefaultWorkerFactory
98
- },
99
- languageClientConfigs
89
+ }]
90
+ };
91
+
92
+ const editorAppConfig: EditorAppConfig = {
93
+ $type: vscodeApiConfig.$type,
94
+ codeResources: {
95
+ modified: params.codeContent
96
+ }
97
+ };
98
+
99
+ return {
100
+ editorAppConfig,
101
+ vscodeApiConfig,
102
+ languageClientConfig
100
103
  };
101
104
  };
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
- import { initLocaleLoader } from 'monaco-editor-wrapper/vscode/locale';
6
+ import { initLocaleLoader } from 'monaco-languageclient/vscodeApiLocales';
7
7
  await initLocaleLoader();
8
8
 
9
9
  const { runStatemachineWrapper } = await import('./main.js');
@@ -6,7 +6,7 @@
6
6
  import React, { StrictMode, useEffect, useState } from 'react';
7
7
  import ReactDOM from 'react-dom/client';
8
8
  import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageclient/browser.js';
9
- import type { TextContents } from 'monaco-editor-wrapper';
9
+ import type { TextContents } from 'monaco-languageclient/editorApp';
10
10
  import { MonacoEditorReactComp } from '@typefox/monaco-editor-react';
11
11
  import { createLangiumGlobalConfig } from './config/wrapperStatemachineConfig.js';
12
12
  import { loadStatemachineWorkerRegular } from './main.js';
@@ -20,9 +20,8 @@ export const runStatemachineReact = async () => {
20
20
  reader.listen((message) => {
21
21
  console.log('Received message from worker:', message);
22
22
  });
23
- const wrapperConfig = createLangiumGlobalConfig({
23
+ const appConfig = createLangiumGlobalConfig({
24
24
  languageServerId: 'react',
25
- useLanguageClient: true,
26
25
  codeContent: {
27
26
  text,
28
27
  uri: '/workspace/example.statemachine'
@@ -57,12 +56,19 @@ export const runStatemachineReact = async () => {
57
56
  return () => clearTimeout(timer);
58
57
  }, []);
59
58
 
59
+ const languageClientConfigs = {
60
+ configs: {
61
+ langium: appConfig.languageClientConfig
62
+ }
63
+ };
60
64
  return (
61
65
  <>
62
66
  <div style={{ 'height': height }} >
63
67
  <MonacoEditorReactComp
64
68
  style={{ 'height': '100%' }}
65
- wrapperConfig={wrapperConfig}
69
+ vscodeApiConfig={appConfig.vscodeApiConfig}
70
+ editorAppConfig={appConfig.editorAppConfig}
71
+ languageClientConfigs={languageClientConfigs}
66
72
  onTextChanged={onTextChanged}
67
73
  />
68
74
  <b>Debug:</b><br />{testState}
@@ -5,22 +5,26 @@
5
5
 
6
6
  import * as vscode from 'vscode';
7
7
  import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageclient/browser.js';
8
- import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
8
+ import { EditorApp } from 'monaco-languageclient/editorApp';
9
9
  import { createLangiumGlobalConfig } from './config/wrapperStatemachineConfig.js';
10
10
  import workerUrl from './worker/statemachine-server?worker&url';
11
11
  import workerPortUrl from './worker/statemachine-server-port?worker&url';
12
12
  import text from '../../../resources/langium/statemachine/example.statemachine?raw';
13
13
  import textMod from '../../../resources/langium/statemachine/example-mod.statemachine?raw';
14
- import { delayExecution, disableElement } from '../../common/client/utils.js';
14
+ import { disableElement } from '../../common/client/utils.js';
15
+ import { delayExecution } from 'monaco-languageclient/common';
16
+ import { MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
17
+ import { LanguageClientWrapper } from 'monaco-languageclient/lcwrapper';
15
18
 
16
- const wrapper = new MonacoEditorLanguageClientWrapper();
17
- const wrapper2 = new MonacoEditorLanguageClientWrapper();
19
+ let editorApp: EditorApp | undefined;
20
+ let editorApp2: EditorApp | undefined;
21
+ let lcWrapper: LanguageClientWrapper;
18
22
 
19
23
  const startEditor = async () => {
20
24
  disableElement('button-start', true);
21
25
  disableElement('button-dispose', false);
22
26
 
23
- if (wrapper.isStarted() && wrapper2.isStarted()) {
27
+ if (editorApp?.isStarted() === true || editorApp2?.isStarted() === true) {
24
28
  alert('Editor was already started!');
25
29
  return;
26
30
  }
@@ -43,39 +47,49 @@ const startEditor = async () => {
43
47
  });
44
48
 
45
49
  // the configuration does not contain any text content
46
- const langiumGlobalConfig = createLangiumGlobalConfig({
50
+ const appConfig = createLangiumGlobalConfig({
47
51
  languageServerId: 'first',
48
52
  codeContent: {
49
53
  text,
50
54
  uri: '/workspace/example.statemachine'
51
55
  },
52
- useLanguageClient: true,
53
56
  worker: stateMachineWorkerPort,
54
57
  messagePort: channel.port1,
55
58
  messageTransports: { reader, writer },
56
59
  htmlContainer: document.getElementById('monaco-editor-root')!
57
60
  });
58
- await wrapper.initAndStart(langiumGlobalConfig);
61
+ editorApp = new EditorApp(appConfig.editorAppConfig);
59
62
 
60
- wrapper.updateCodeResources({
63
+ // perform global init
64
+ const apiWrapper = new MonacoVscodeApiWrapper(appConfig.vscodeApiConfig);
65
+ await apiWrapper.init();
66
+
67
+ // init language client
68
+ lcWrapper = new LanguageClientWrapper(appConfig.languageClientConfig);
69
+ await lcWrapper.start();
70
+
71
+ // run editorApp
72
+ await editorApp.start(appConfig.vscodeApiConfig.htmlContainer!);
73
+
74
+ editorApp.updateCodeResources({
61
75
  modified: {
62
76
  text,
63
77
  uri: '/workspace/statemachine-mod.statemachine'
64
78
  }
65
79
  });
66
80
 
67
- // start the second wrapper without any languageclient config
81
+ // start the second editorApp without any languageclient config
68
82
  // => they share the language server and both text contents have different uris
69
- const langiumGlobalConfig2 = createLangiumGlobalConfig({
70
- languageServerId: 'second',
71
- useLanguageClient: false,
72
- codeContent: {
73
- text: textMod,
74
- uri: '/workspace/example-mod.statemachine'
75
- },
76
- htmlContainer: document.getElementById('monaco-editor-root2')!
77
- });
78
- await wrapper2.initAndStart(langiumGlobalConfig2);
83
+ const appConfig2 = appConfig;
84
+ appConfig2.editorAppConfig.codeResources!.modified = {
85
+ text: textMod,
86
+ uri: '/workspace/example-mod.statemachine'
87
+ };
88
+ appConfig2.vscodeApiConfig.htmlContainer = document.getElementById('monaco-editor-root2')!;
89
+ editorApp2 = new EditorApp(appConfig2.editorAppConfig);
90
+
91
+ // run editorApp
92
+ await editorApp2.start(appConfig2.vscodeApiConfig.htmlContainer);
79
93
 
80
94
  vscode.commands.getCommands().then((x) => {
81
95
  console.log('Currently registered # of vscode commands: ' + x.length);
@@ -83,7 +97,7 @@ const startEditor = async () => {
83
97
 
84
98
  await delayExecution(1000);
85
99
 
86
- wrapper.updateCodeResources({
100
+ editorApp.updateCodeResources({
87
101
  modified: {
88
102
  text: `// modified file\n\n${text}`,
89
103
  uri: '/workspace/statemachine-mod2.statemachine'
@@ -95,13 +109,15 @@ const disposeEditor = async () => {
95
109
  disableElement('button-start', false);
96
110
  disableElement('button-dispose', true);
97
111
 
98
- wrapper.reportStatus();
99
- await wrapper.dispose();
100
- console.log(wrapper.reportStatus().join('\n'));
112
+ lcWrapper.dispose();
113
+
114
+ editorApp?.reportStatus();
115
+ await editorApp?.dispose();
116
+ console.log(editorApp?.reportStatus().join('\n'));
101
117
 
102
- wrapper2.reportStatus();
103
- await wrapper2.dispose();
104
- console.log(wrapper2.reportStatus().join('\n'));
118
+ editorApp2?.reportStatus();
119
+ await editorApp2?.dispose();
120
+ console.log(editorApp2?.reportStatus().join('\n'));
105
121
  };
106
122
 
107
123
  export const runStatemachineWrapper = async () => {
@@ -4,8 +4,8 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import * as vscode from 'vscode';
7
- import { MonacoLanguageClient } from 'monaco-languageclient';
8
- import type { LanguageClientConfig } from 'monaco-editor-wrapper';
7
+ import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
8
+ import type { BaseLanguageClient } from 'vscode-languageclient/browser.js';
9
9
 
10
10
  export const createJsonLanguageClientConfig: () => LanguageClientConfig = () => {
11
11
  return {
@@ -38,7 +38,7 @@ export const createPythonLanguageClientConfig: () => LanguageClientConfig = () =
38
38
  authorization: 'UserAuth'
39
39
  },
40
40
  startOptions: {
41
- onCall: (languageClient?: MonacoLanguageClient) => {
41
+ onCall: (languageClient?: BaseLanguageClient) => {
42
42
  setTimeout(() => {
43
43
  ['pyright.restartserver', 'pyright.organizeimports'].forEach((cmdName) => {
44
44
  vscode.commands.registerCommand(cmdName, (...args: unknown[]) => {
@@ -9,10 +9,12 @@ import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-
9
9
  import '@codingame/monaco-vscode-json-default-extension';
10
10
  import '@codingame/monaco-vscode-python-default-extension';
11
11
  import { LogLevel } from '@codingame/monaco-vscode-api';
12
- import { MonacoEditorLanguageClientWrapper, type WrapperConfig } from 'monaco-editor-wrapper';
13
- import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
12
+ import { EditorApp, type EditorAppConfig } from 'monaco-languageclient/editorApp';
13
+ import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
14
14
  import { disableElement } from '../common/client/utils.js';
15
15
  import { createJsonLanguageClientConfig, createPythonLanguageClientConfig } from './config.js';
16
+ import { MonacoVscodeApiWrapper, type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
17
+ import { LanguageClientsManager } from 'monaco-languageclient/lcwrapper';
16
18
 
17
19
  export const runMultipleLanguageClientsExample = async () => {
18
20
  disableElement('button-flip', true);
@@ -31,64 +33,63 @@ print("Hello Moon!")
31
33
  let currentText = textJson;
32
34
  let currenFileExt = 'json';
33
35
 
34
- const wrapperConfig: WrapperConfig = {
35
- id: '42',
36
+ const htmlContainer = document.getElementById('monaco-editor-root')!;
37
+ const vscodeApiConfig: MonacoVscodeApiConfig = {
36
38
  $type: 'extended',
37
- htmlContainer: document.getElementById('monaco-editor-root')!,
39
+ htmlContainer,
38
40
  logLevel: LogLevel.Debug,
39
- vscodeApiConfig: {
40
- serviceOverrides: {
41
- ...getKeybindingsServiceOverride()
42
- },
43
- userConfiguration: {
44
- json: JSON.stringify({
45
- 'workbench.colorTheme': 'Default Dark Modern',
46
- 'editor.wordBasedSuggestions': 'off',
47
- 'editor.experimental.asyncTokenization': true
48
- })
49
- }
41
+ serviceOverrides: {
42
+ ...getKeybindingsServiceOverride()
50
43
  },
51
- editorAppConfig: {
52
- codeResources: {
53
- modified: {
54
- text: currentText,
55
- uri: `/workspace/example.${currenFileExt}`
56
- }
57
- },
58
- monacoWorkerFactory: configureDefaultWorkerFactory
44
+ userConfiguration: {
45
+ json: JSON.stringify({
46
+ 'workbench.colorTheme': 'Default Dark Modern',
47
+ 'editor.wordBasedSuggestions': 'off',
48
+ 'editor.experimental.asyncTokenization': true
49
+ })
59
50
  },
60
- languageClientConfigs: {
61
- configs: {
62
- json: createJsonLanguageClientConfig(),
63
- python: createPythonLanguageClientConfig()
51
+ monacoWorkerFactory: configureDefaultWorkerFactory
52
+ };
53
+
54
+ const editorAppConfig: EditorAppConfig = {
55
+ $type: vscodeApiConfig.$type,
56
+ id: '42',
57
+ codeResources: {
58
+ modified: {
59
+ text: currentText,
60
+ uri: `/workspace/example.${currenFileExt}`
64
61
  }
65
62
  }
66
63
  };
67
64
 
68
- const wrapper = new MonacoEditorLanguageClientWrapper();
65
+ // perform global init
66
+ const apiWrapper = new MonacoVscodeApiWrapper(vscodeApiConfig);
67
+ await apiWrapper.init();
68
+
69
+ const lcManager = new LanguageClientsManager();
70
+ const languageClientConfigs = {
71
+ configs: {
72
+ json: createJsonLanguageClientConfig(),
73
+ python: createPythonLanguageClientConfig()
74
+ }
75
+ };
76
+
77
+ const editorApp = new EditorApp(editorAppConfig);
69
78
 
70
79
  document.querySelector('#button-start')?.addEventListener('click', async () => {
71
80
  try {
72
81
  disableElement('button-start', true);
73
82
  disableElement('button-flip', false);
74
- disableElement('checkbox-extlc', true);
75
-
76
- const externalLc = (document.getElementById('checkbox-extlc') as HTMLInputElement).checked;
77
- wrapperConfig.languageClientConfigs!.automaticallyInit = !externalLc;
78
- wrapperConfig.languageClientConfigs!.automaticallyStart = !externalLc;
79
- wrapperConfig.languageClientConfigs!.automaticallyDispose = !externalLc;
80
83
 
81
- await wrapper.initAndStart(wrapperConfig);
82
- if (wrapperConfig.editorAppConfig?.codeResources?.modified !== undefined) {
83
- wrapperConfig.editorAppConfig.codeResources.modified.text = currentText;
84
- wrapperConfig.editorAppConfig.codeResources.modified.uri = `/workspace/example.${currenFileExt}`;
84
+ await editorApp.start(htmlContainer);
85
+ if (editorAppConfig.codeResources?.modified !== undefined) {
86
+ editorAppConfig.codeResources.modified.text = currentText;
87
+ editorAppConfig.codeResources.modified.uri = `/workspace/example.${currenFileExt}`;
85
88
  }
86
89
 
87
- // init language clients after start
88
- if (externalLc) {
89
- wrapper.initLanguageClients();
90
- await wrapper.startLanguageClients();
91
- }
90
+ // init and start language clients after start
91
+ await lcManager.setConfigs(languageClientConfigs);
92
+ await lcManager.start();
92
93
  } catch (e) {
93
94
  console.error(e);
94
95
  }
@@ -98,18 +99,13 @@ print("Hello Moon!")
98
99
  disableElement('button-dispose', true);
99
100
  disableElement('button-start', false);
100
101
 
101
- const externalLc = (document.getElementById('checkbox-extlc')! as HTMLInputElement).checked;
102
-
103
- await wrapper.dispose();
104
-
105
- if (externalLc) {
106
- wrapper.disposeLanguageClients();
107
- }
102
+ await editorApp.dispose();
103
+ await lcManager.dispose();
108
104
  });
109
105
  document.querySelector('#button-flip')?.addEventListener('click', async () => {
110
106
  currentText = currentText === textJson ? textPython : textJson;
111
107
  currenFileExt = currenFileExt === 'json' ? 'py' : 'json';
112
- wrapper.updateCodeResources({
108
+ editorApp.updateCodeResources({
113
109
  modified: {
114
110
  text: currentText,
115
111
  uri: `/workspace/example.${currenFileExt}`
package/src/node.ts CHANGED
@@ -6,6 +6,3 @@
6
6
  /* server side export only */
7
7
  export * from './common/node/server-commons.js';
8
8
  export * from './common/node/language-server-runner.js';
9
- export * from './json/server/json-server.js';
10
- export * from './json/server/main.js';
11
- export * from './python/server/main.js';