monaco-languageclient-examples 2025.6.3 → 2025.8.1

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 (176) hide show
  1. package/CHANGELOG.md +3 -2
  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 +3 -2
  5. package/dist/appPlayground/common.js.map +1 -1
  6. package/dist/appPlayground/config.d.ts +2 -4
  7. package/dist/appPlayground/config.d.ts.map +1 -1
  8. package/dist/appPlayground/config.js +63 -65
  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 +4 -5
  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 +3 -2
  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 +15 -12
  22. package/dist/bare/client.js.map +1 -1
  23. package/dist/browser/main.d.ts.map +1 -1
  24. package/dist/browser/main.js +27 -28
  25. package/dist/browser/main.js.map +1 -1
  26. package/dist/clangd/client/config.d.ts +3 -10
  27. package/dist/clangd/client/config.d.ts.map +1 -1
  28. package/dist/clangd/client/config.js +85 -85
  29. package/dist/clangd/client/config.js.map +1 -1
  30. package/dist/clangd/client/main.d.ts.map +1 -1
  31. package/dist/clangd/client/main.js +9 -12
  32. package/dist/clangd/client/main.js.map +1 -1
  33. package/dist/clangd/worker/clangd-server.js.map +1 -1
  34. package/dist/common/client/utils.d.ts +1 -8
  35. package/dist/common/client/utils.d.ts.map +1 -1
  36. package/dist/common/client/utils.js +3 -0
  37. package/dist/common/client/utils.js.map +1 -1
  38. package/dist/debugger/client/debugger.d.ts +1 -1
  39. package/dist/debugger/client/debugger.d.ts.map +1 -1
  40. package/dist/eclipse.jdt.ls/client/main.d.ts +1 -1
  41. package/dist/eclipse.jdt.ls/client/main.d.ts.map +1 -1
  42. package/dist/eclipse.jdt.ls/client/main.js +74 -4
  43. package/dist/eclipse.jdt.ls/client/main.js.map +1 -1
  44. package/dist/eclipse.jdt.ls/config.d.ts +5 -2
  45. package/dist/eclipse.jdt.ls/config.d.ts.map +1 -1
  46. package/dist/eclipse.jdt.ls/config.js +1 -2
  47. package/dist/eclipse.jdt.ls/config.js.map +1 -1
  48. package/dist/groovy/client/main.d.ts +1 -1
  49. package/dist/groovy/client/main.d.ts.map +1 -1
  50. package/dist/groovy/client/main.js +63 -4
  51. package/dist/groovy/client/main.js.map +1 -1
  52. package/dist/groovy/config.d.ts +5 -2
  53. package/dist/groovy/config.d.ts.map +1 -1
  54. package/dist/groovy/config.js +1 -2
  55. package/dist/groovy/config.js.map +1 -1
  56. package/dist/json/client/wrapperWs.d.ts +5 -0
  57. package/dist/json/client/wrapperWs.d.ts.map +1 -0
  58. package/dist/json/client/wrapperWs.js +87 -0
  59. package/dist/json/client/wrapperWs.js.map +1 -0
  60. package/dist/json/server/main.js.map +1 -1
  61. package/dist/langium/langium-dsl/config/classicConfig.d.ts +2 -2
  62. package/dist/langium/langium-dsl/config/classicConfig.d.ts.map +1 -1
  63. package/dist/langium/langium-dsl/config/classicConfig.js +45 -53
  64. package/dist/langium/langium-dsl/config/classicConfig.js.map +1 -1
  65. package/dist/langium/langium-dsl/config/extendedConfig.d.ts +2 -2
  66. package/dist/langium/langium-dsl/config/extendedConfig.d.ts.map +1 -1
  67. package/dist/langium/langium-dsl/config/extendedConfig.js +40 -40
  68. package/dist/langium/langium-dsl/config/extendedConfig.js.map +1 -1
  69. package/dist/langium/langium-dsl/wrapperLangium.d.ts.map +1 -1
  70. package/dist/langium/langium-dsl/wrapperLangium.js +16 -23
  71. package/dist/langium/langium-dsl/wrapperLangium.js.map +1 -1
  72. package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts +4 -4
  73. package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts.map +1 -1
  74. package/dist/langium/statemachine/config/wrapperStatemachineConfig.js +41 -40
  75. package/dist/langium/statemachine/config/wrapperStatemachineConfig.js.map +1 -1
  76. package/dist/langium/statemachine/launcher.js +1 -1
  77. package/dist/langium/statemachine/launcher.js.map +1 -1
  78. package/dist/langium/statemachine/ls/generated/ast.d.ts +127 -22
  79. package/dist/langium/statemachine/ls/generated/ast.d.ts.map +1 -1
  80. package/dist/langium/statemachine/ls/generated/ast.js +112 -97
  81. package/dist/langium/statemachine/ls/generated/ast.js.map +1 -1
  82. package/dist/langium/statemachine/ls/generated/grammar.d.ts +2 -2
  83. package/dist/langium/statemachine/ls/generated/grammar.d.ts.map +1 -1
  84. package/dist/langium/statemachine/ls/generated/grammar.js +43 -41
  85. package/dist/langium/statemachine/ls/generated/grammar.js.map +1 -1
  86. package/dist/langium/statemachine/ls/generated/module.d.ts +3 -3
  87. package/dist/langium/statemachine/ls/generated/module.d.ts.map +1 -1
  88. package/dist/langium/statemachine/ls/generated/module.js +6 -6
  89. package/dist/langium/statemachine/ls/generated/module.js.map +1 -1
  90. package/dist/langium/statemachine/ls/statemachine-module.js +2 -2
  91. package/dist/langium/statemachine/ls/statemachine-module.js.map +1 -1
  92. package/dist/langium/statemachine/main-react.js +3 -2
  93. package/dist/langium/statemachine/main-react.js.map +1 -1
  94. package/dist/langium/statemachine/main.d.ts.map +1 -1
  95. package/dist/langium/statemachine/main.js +27 -38
  96. package/dist/langium/statemachine/main.js.map +1 -1
  97. package/dist/multi/config.d.ts +1 -1
  98. package/dist/multi/config.d.ts.map +1 -1
  99. package/dist/multi/config.js +1 -0
  100. package/dist/multi/config.js.map +1 -1
  101. package/dist/multi/twoLanguageClients.d.ts.map +1 -1
  102. package/dist/multi/twoLanguageClients.js +49 -45
  103. package/dist/multi/twoLanguageClients.js.map +1 -1
  104. package/dist/node.d.ts +3 -0
  105. package/dist/node.d.ts.map +1 -1
  106. package/dist/node.js +3 -3
  107. package/dist/node.js.map +1 -1
  108. package/dist/python/client/config.d.ts +3 -7
  109. package/dist/python/client/config.d.ts.map +1 -1
  110. package/dist/python/client/config.js +97 -93
  111. package/dist/python/client/config.js.map +1 -1
  112. package/dist/python/client/main.d.ts.map +1 -1
  113. package/dist/python/client/main.js +10 -16
  114. package/dist/python/client/main.js.map +1 -1
  115. package/dist/python/client/reactPython.d.ts.map +1 -1
  116. package/dist/python/client/reactPython.js +9 -8
  117. package/dist/python/client/reactPython.js.map +1 -1
  118. package/dist/ts/wrapperTs.d.ts.map +1 -1
  119. package/dist/ts/wrapperTs.js +45 -50
  120. package/dist/ts/wrapperTs.js.map +1 -1
  121. package/json.html +1 -1
  122. package/package.json +45 -44
  123. package/src/appPlayground/common.ts +3 -3
  124. package/src/appPlayground/config.ts +65 -69
  125. package/src/appPlayground/launcher.ts +1 -2
  126. package/src/appPlayground/main.ts +5 -8
  127. package/src/appPlayground/reactLauncher.ts +1 -2
  128. package/src/appPlayground/reactMain.tsx +4 -4
  129. package/src/bare/client.ts +16 -15
  130. package/src/browser/main.ts +27 -29
  131. package/src/clangd/client/config.ts +87 -97
  132. package/src/clangd/client/main.ts +10 -14
  133. package/src/clangd/worker/clangd-server.ts +2 -2
  134. package/src/common/client/utils.ts +2 -7
  135. package/src/debugger/client/debugger.ts +1 -1
  136. package/src/eclipse.jdt.ls/client/main.ts +78 -4
  137. package/src/eclipse.jdt.ls/config.ts +2 -6
  138. package/src/groovy/client/main.ts +65 -4
  139. package/src/groovy/config.ts +2 -6
  140. package/src/json/client/wrapperWs.ts +90 -0
  141. package/src/json/server/main.ts +1 -1
  142. package/src/langium/langium-dsl/config/classicConfig.ts +48 -64
  143. package/src/langium/langium-dsl/config/extendedConfig.ts +42 -49
  144. package/src/langium/langium-dsl/wrapperLangium.ts +15 -25
  145. package/src/langium/statemachine/config/wrapperStatemachineConfig.ts +45 -48
  146. package/src/langium/statemachine/launcher.ts +1 -1
  147. package/src/langium/statemachine/ls/generated/ast.ts +131 -111
  148. package/src/langium/statemachine/ls/generated/grammar.ts +43 -41
  149. package/src/langium/statemachine/ls/generated/module.ts +6 -6
  150. package/src/langium/statemachine/ls/statemachine-module.ts +2 -2
  151. package/src/langium/statemachine/ls/statemachine.langium +20 -5
  152. package/src/langium/statemachine/main-react.tsx +4 -4
  153. package/src/langium/statemachine/main.ts +27 -43
  154. package/src/multi/config.ts +3 -3
  155. package/src/multi/twoLanguageClients.ts +52 -48
  156. package/src/node.ts +3 -3
  157. package/src/python/client/config.ts +99 -101
  158. package/src/python/client/main.ts +11 -20
  159. package/src/python/client/reactPython.tsx +10 -11
  160. package/src/ts/wrapperTs.ts +45 -52
  161. package/two_langauge_clients.html +1 -0
  162. package/dist/common/client/extendedClient.d.ts +0 -9
  163. package/dist/common/client/extendedClient.d.ts.map +0 -1
  164. package/dist/common/client/extendedClient.js +0 -97
  165. package/dist/common/client/extendedClient.js.map +0 -1
  166. package/dist/json/client/client.d.ts +0 -3
  167. package/dist/json/client/client.d.ts.map +0 -1
  168. package/dist/json/client/client.js +0 -13
  169. package/dist/json/client/client.js.map +0 -1
  170. package/dist/json/client/config.d.ts +0 -3
  171. package/dist/json/client/config.d.ts.map +0 -1
  172. package/dist/json/client/config.js +0 -11
  173. package/dist/json/client/config.js.map +0 -1
  174. package/src/common/client/extendedClient.ts +0 -111
  175. package/src/json/client/client.ts +0 -14
  176. package/src/json/client/config.ts +0 -13
@@ -3,22 +3,22 @@
3
3
  * Licensed under the MIT License. See License.txt in the project root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
- import { LogLevel } from '@codingame/monaco-vscode-api';
7
6
  import * as monaco from '@codingame/monaco-vscode-editor-api';
7
+ import { initServices } from 'monaco-languageclient/vscode/services';
8
8
  import getTextmateServiceOverride from '@codingame/monaco-vscode-textmate-service-override';
9
9
  import getThemeServiceOverride from '@codingame/monaco-vscode-theme-service-override';
10
- import { MonacoVscodeApiWrapper, type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
10
+ import { LogLevel } from '@codingame/monaco-vscode-api';
11
11
  // monaco-editor does not supply json highlighting with the json worker,
12
12
  // that's why we use the textmate extension from VSCode
13
13
  import '@codingame/monaco-vscode-json-default-extension';
14
- import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
15
- import { LanguageClientWrapper, type LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
14
+ import { ConsoleLogger } from 'monaco-languageclient/tools';
15
+ import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
16
+ import { LanguageClientWrapper, type LanguageClientConfig } from 'monaco-editor-wrapper';
16
17
 
17
18
  export const runClient = async () => {
19
+ const logger = new ConsoleLogger(LogLevel.Debug);
18
20
  const htmlContainer = document.getElementById('monaco-editor-root')!;
19
- const vscodeApiConfig: MonacoVscodeApiConfig = {
20
- $type: 'classic',
21
- logLevel: LogLevel.Debug,
21
+ await initServices({
22
22
  serviceOverrides: {
23
23
  ...getTextmateServiceOverride(),
24
24
  ...getThemeServiceOverride()
@@ -28,11 +28,9 @@ export const runClient = async () => {
28
28
  'editor.experimental.asyncTokenization': true
29
29
  })
30
30
  },
31
- monacoWorkerFactory: configureDefaultWorkerFactory
32
- };
33
-
34
- const apiWrapper = new MonacoVscodeApiWrapper(vscodeApiConfig);
35
- await apiWrapper.init();
31
+ }, {
32
+ logger
33
+ });
36
34
 
37
35
  // register the JSON language with Monaco
38
36
  monaco.languages.register({
@@ -42,6 +40,8 @@ export const runClient = async () => {
42
40
  mimetypes: ['application/json']
43
41
  });
44
42
 
43
+ configureDefaultWorkerFactory(logger);
44
+
45
45
  // create monaco editor
46
46
  monaco.editor.create(htmlContainer, {
47
47
  value: `{
@@ -64,9 +64,10 @@ export const runClient = async () => {
64
64
  }
65
65
  }
66
66
  };
67
- const languageClientWrapper = new LanguageClientWrapper(
67
+ const languageClientWrapper = new LanguageClientWrapper({
68
68
  languageClientConfig,
69
- apiWrapper.getLogger()
70
- );
69
+ logger
70
+ });
71
+
71
72
  await languageClientWrapper.start();
72
73
  };
@@ -11,9 +11,8 @@ import { getLanguageService, TextDocument } from 'vscode-json-languageservice';
11
11
  import { createConverter as createCodeConverter } from 'vscode-languageclient/lib/common/codeConverter.js';
12
12
  import { createConverter as createProtocolConverter } from 'vscode-languageclient/lib/common/protocolConverter.js';
13
13
  import { LogLevel } from '@codingame/monaco-vscode-api';
14
- import { EditorApp, type EditorAppConfig } from 'monaco-languageclient/editorApp';
15
- import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
16
- import { MonacoVscodeApiWrapper, type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
14
+ import { MonacoEditorLanguageClientWrapper, type WrapperConfig } from 'monaco-editor-wrapper';
15
+ import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
17
16
 
18
17
  export const runBrowserEditor = async () => {
19
18
  const codeConverter = createCodeConverter();
@@ -28,36 +27,35 @@ export const runBrowserEditor = async () => {
28
27
  }`;
29
28
  const codeUri = '/workspace/model.json';
30
29
 
31
- const vscodeApiConfig: MonacoVscodeApiConfig = {
30
+ const wrapper = new MonacoEditorLanguageClientWrapper();
31
+ const jsonClientUserConfig: WrapperConfig = {
32
32
  $type: 'extended',
33
33
  htmlContainer,
34
34
  logLevel: LogLevel.Debug,
35
- serviceOverrides: {
36
- ...getKeybindingsServiceOverride(),
37
- },
38
- userConfiguration: {
39
- json: JSON.stringify({
40
- 'workbench.colorTheme': 'Default Dark Modern',
41
- 'editor.guides.bracketPairsHorizontal': 'active',
42
- 'editor.lightbulb.enabled': 'On',
43
- 'editor.experimental.asyncTokenization': true
44
- })
45
- },
46
- monacoWorkerFactory: configureDefaultWorkerFactory
47
- };
48
- const editorAppConfig: EditorAppConfig = {
49
- $type: vscodeApiConfig.$type,
50
- codeResources: {
51
- modified: {
52
- text: code,
53
- uri: codeUri
35
+ vscodeApiConfig: {
36
+ serviceOverrides: {
37
+ ...getKeybindingsServiceOverride(),
38
+ },
39
+ userConfiguration: {
40
+ json: JSON.stringify({
41
+ 'workbench.colorTheme': 'Default Dark Modern',
42
+ 'editor.guides.bracketPairsHorizontal': 'active',
43
+ 'editor.lightbulb.enabled': 'On',
44
+ 'editor.experimental.asyncTokenization': true
45
+ })
54
46
  }
47
+ },
48
+ editorAppConfig: {
49
+ codeResources: {
50
+ modified: {
51
+ text: code,
52
+ uri: codeUri
53
+ }
54
+ },
55
+ monacoWorkerFactory: configureDefaultWorkerFactory
55
56
  }
56
57
  };
57
- const apiWrapper = new MonacoVscodeApiWrapper(vscodeApiConfig);
58
- await apiWrapper.init();
59
-
60
- const editorApp = new EditorApp(editorAppConfig);
58
+ await wrapper.init(jsonClientUserConfig);
61
59
 
62
60
  vscode.workspace.onDidOpenTextDocument((_event) => {
63
61
  mainVscodeDocument = _event;
@@ -157,9 +155,9 @@ export const runBrowserEditor = async () => {
157
155
  diagnosticCollection.clear();
158
156
  };
159
157
 
160
- await editorApp.start(htmlContainer);
158
+ await wrapper.start();
161
159
 
162
- editorApp.getTextModels().modified?.onDidChangeContent(() => {
160
+ wrapper.getTextModels()?.modified?.onDidChangeContent(() => {
163
161
  validate();
164
162
  });
165
163
  };
@@ -3,91 +3,113 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
- import { LogLevel } from '@codingame/monaco-vscode-api';
7
- import getEnvironmentServiceOverride from '@codingame/monaco-vscode-environment-service-override';
8
- import getExplorerServiceOverride from '@codingame/monaco-vscode-explorer-service-override';
6
+ import { Uri } from 'vscode';
9
7
  import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
10
8
  import getLifecycleServiceOverride from '@codingame/monaco-vscode-lifecycle-service-override';
11
- import getRemoteAgentServiceOverride from '@codingame/monaco-vscode-remote-agent-service-override';
12
- import getSecretStorageServiceOverride from '@codingame/monaco-vscode-secret-storage-service-override';
13
9
  import getBannerServiceOverride from '@codingame/monaco-vscode-view-banner-service-override';
14
10
  import getStatusBarServiceOverride from '@codingame/monaco-vscode-view-status-bar-service-override';
15
11
  import getTitleBarServiceOverride from '@codingame/monaco-vscode-view-title-bar-service-override';
16
- import type { EditorAppConfig } from 'monaco-languageclient/editorApp';
17
- import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
18
- import { defaultHtmlAugmentationInstructions, defaultViewsInit, type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
19
- import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
20
- import { Uri } from 'vscode';
12
+ import getExplorerServiceOverride from '@codingame/monaco-vscode-explorer-service-override';
13
+ import getRemoteAgentServiceOverride from '@codingame/monaco-vscode-remote-agent-service-override';
14
+ import getEnvironmentServiceOverride from '@codingame/monaco-vscode-environment-service-override';
15
+ import getSecretStorageServiceOverride from '@codingame/monaco-vscode-secret-storage-service-override';
16
+ import { LogLevel } from '@codingame/monaco-vscode-api';
17
+ import type { WrapperConfig } from 'monaco-editor-wrapper';
18
+ import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
19
+ import { defaultHtmlAugmentationInstructions, defaultViewsInit } from 'monaco-editor-wrapper/vscode/services';
21
20
  import { ClangdWorkerHandler } from './workerHandler.js';
22
21
 
23
- export type ClangdAppConfig = {
24
- languageClientConfig: LanguageClientConfig;
25
- vscodeApiConfig: MonacoVscodeApiConfig;
26
- editorAppConfig: EditorAppConfig;
27
- }
28
-
29
- export const createClangdAppConfig = async (config: {
22
+ export const createWrapperConfig = async (config: {
30
23
  htmlContainer: HTMLElement,
31
24
  workspaceUri: Uri,
32
25
  workspaceFileUri: Uri,
33
26
  clangdWorkerHandler: ClangdWorkerHandler,
34
27
  lsMessageLocalPort: MessagePort
35
- }): Promise<ClangdAppConfig> => {
36
- const vscodeApiConfig: MonacoVscodeApiConfig = {
28
+ }): Promise<WrapperConfig> => {
29
+ return {
37
30
  $type: 'extended',
38
31
  htmlContainer: config.htmlContainer,
39
32
  logLevel: LogLevel.Debug,
40
- serviceOverrides: {
41
- ...getKeybindingsServiceOverride(),
42
- ...getLifecycleServiceOverride(),
43
- ...getBannerServiceOverride(),
44
- ...getStatusBarServiceOverride(),
45
- ...getTitleBarServiceOverride(),
46
- ...getExplorerServiceOverride(),
47
- ...getRemoteAgentServiceOverride(),
48
- ...getEnvironmentServiceOverride(),
49
- ...getSecretStorageServiceOverride()
50
- },
51
- viewsConfig: {
52
- viewServiceType: 'ViewsService',
53
- htmlAugmentationInstructions: defaultHtmlAugmentationInstructions,
54
- viewsInitFunc: defaultViewsInit
33
+ languageClientConfigs: {
34
+ configs: {
35
+ LANGUAGE_ID: {
36
+ name: 'Clangd WASM Language Server',
37
+ connection: {
38
+ options: {
39
+ $type: 'WorkerDirect',
40
+ worker: await config.clangdWorkerHandler.createWorker(),
41
+ messagePort: config.lsMessageLocalPort
42
+ }
43
+ },
44
+ restartOptions: {
45
+ retries: 5,
46
+ timeout: 1000,
47
+ keepWorker: true
48
+ },
49
+ clientOptions: {
50
+ documentSelector: ['cpp'],
51
+ workspaceFolder: {
52
+ index: 0,
53
+ name: 'workspace',
54
+ uri: config.workspaceUri
55
+ }
56
+ }
57
+ }
58
+ }
55
59
  },
56
- workspaceConfig: {
57
- enableWorkspaceTrust: true,
58
- windowIndicator: {
59
- label: 'mlc-clangd-example',
60
- tooltip: '',
61
- command: ''
60
+ vscodeApiConfig: {
61
+ serviceOverrides: {
62
+ ...getKeybindingsServiceOverride(),
63
+ ...getLifecycleServiceOverride(),
64
+ ...getBannerServiceOverride(),
65
+ ...getStatusBarServiceOverride(),
66
+ ...getTitleBarServiceOverride(),
67
+ ...getExplorerServiceOverride(),
68
+ ...getRemoteAgentServiceOverride(),
69
+ ...getEnvironmentServiceOverride(),
70
+ ...getSecretStorageServiceOverride()
62
71
  },
63
- workspaceProvider: {
64
- trusted: true,
65
- async open() {
66
- window.open(window.location.href);
67
- return true;
72
+ viewsConfig: {
73
+ viewServiceType: 'ViewsService',
74
+ htmlAugmentationInstructions: defaultHtmlAugmentationInstructions,
75
+ viewsInitFunc: defaultViewsInit
76
+ },
77
+ workspaceConfig: {
78
+ enableWorkspaceTrust: true,
79
+ windowIndicator: {
80
+ label: 'mlc-clangd-example',
81
+ tooltip: '',
82
+ command: ''
68
83
  },
69
- workspace: {
70
- workspaceUri: config.workspaceFileUri
84
+ workspaceProvider: {
85
+ trusted: true,
86
+ async open() {
87
+ window.open(window.location.href);
88
+ return true;
89
+ },
90
+ workspace: {
91
+ workspaceUri: config.workspaceFileUri
92
+ },
71
93
  },
94
+ configurationDefaults: {
95
+ 'window.title': 'mlc-clangd-exampled${separator}${dirty}${activeEditorShort}'
96
+ },
97
+ productConfiguration: {
98
+ nameShort: 'mlc-clangd-example',
99
+ nameLong: 'mlc-clangd-example'
100
+ }
72
101
  },
73
- configurationDefaults: {
74
- 'window.title': 'mlc-clangd-exampled${separator}${dirty}${activeEditorShort}'
75
- },
76
- productConfiguration: {
77
- nameShort: 'mlc-clangd-example',
78
- nameLong: 'mlc-clangd-example'
102
+ userConfiguration: {
103
+ json: JSON.stringify({
104
+ 'workbench.colorTheme': 'Default Dark Modern',
105
+ 'editor.wordBasedSuggestions': 'off',
106
+ 'editor.guides.bracketPairsHorizontal': true,
107
+ 'editor.inlayHints.enabled': 'offUnlessPressed',
108
+ 'editor.quickSuggestionsDelay': 200,
109
+ 'editor.experimental.asyncTokenization': false
110
+ })
79
111
  }
80
112
  },
81
- userConfiguration: {
82
- json: JSON.stringify({
83
- 'workbench.colorTheme': 'Default Dark Modern',
84
- 'editor.wordBasedSuggestions': 'off',
85
- 'editor.guides.bracketPairsHorizontal': true,
86
- 'editor.inlayHints.enabled': 'offUnlessPressed',
87
- 'editor.quickSuggestionsDelay': 200,
88
- 'editor.experimental.asyncTokenization': false
89
- })
90
- },
91
113
  extensions: [{
92
114
  config: {
93
115
  name: 'mlc-clangd-example',
@@ -98,40 +120,8 @@ export const createClangdAppConfig = async (config: {
98
120
  }
99
121
  }
100
122
  }],
101
- monacoWorkerFactory: configureDefaultWorkerFactory
102
- };
103
-
104
- const languageClientConfig: LanguageClientConfig = {
105
- name: 'Clangd WASM Language Server',
106
- connection: {
107
- options: {
108
- $type: 'WorkerDirect',
109
- worker: await config.clangdWorkerHandler.createWorker(),
110
- messagePort: config.lsMessageLocalPort
111
- }
112
- },
113
- restartOptions: {
114
- retries: 5,
115
- timeout: 1000,
116
- keepWorker: true
117
- },
118
- clientOptions: {
119
- documentSelector: ['cpp'],
120
- workspaceFolder: {
121
- index: 0,
122
- name: 'workspace',
123
- uri: config.workspaceUri
124
- }
123
+ editorAppConfig: {
124
+ monacoWorkerFactory: configureDefaultWorkerFactory
125
125
  }
126
126
  };
127
-
128
- const editorAppConfig: EditorAppConfig = {
129
- $type: vscodeApiConfig.$type
130
- };
131
-
132
- return {
133
- vscodeApiConfig,
134
- languageClientConfig,
135
- editorAppConfig
136
- };
137
127
  };
@@ -3,17 +3,18 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
- import { RegisteredFileSystemProvider, RegisteredMemoryFile, registerFileSystemOverlay } from '@codingame/monaco-vscode-files-service-override';
7
6
  import * as vscode from 'vscode';
7
+ import { RegisteredFileSystemProvider, RegisteredMemoryFile, registerFileSystemOverlay } from '@codingame/monaco-vscode-files-service-override';
8
8
  // this is required syntax highlighting
9
9
  import '@codingame/monaco-vscode-cpp-default-extension';
10
- import { LanguageClientWrapper } from 'monaco-languageclient/lcwrapper';
11
- import { MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
10
+ import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
11
+ import { createWrapperConfig } from './config.js';
12
+ import { ClangdWorkerHandler } from './workerHandler.js';
13
+ import { MainRemoteMessageChannelFs } from './mainRemoteMessageChannelFs.js';
12
14
  import { createDefaultWorkspaceContent, disableElement } from '../../common/client/utils.js';
13
15
  import { HOME_DIR, WORKSPACE_PATH } from '../definitions.js';
14
- import { createClangdAppConfig } from './config.js';
15
- import { MainRemoteMessageChannelFs } from './mainRemoteMessageChannelFs.js';
16
- import { ClangdWorkerHandler } from './workerHandler.js';
16
+
17
+ const wrapper = new MonacoEditorLanguageClientWrapper();
17
18
 
18
19
  export const runClangdWrapper = async () => {
19
20
  const channelLs = new MessageChannel();
@@ -31,7 +32,7 @@ export const runClangdWrapper = async () => {
31
32
  new MainRemoteMessageChannelFs(fileSystemProvider, channelFs.port1, readiness);
32
33
 
33
34
  const clangdWorkerHandler = new ClangdWorkerHandler();
34
- const appConfig = await createClangdAppConfig({
35
+ const wrapperConfig = await createWrapperConfig({
35
36
  htmlContainer: document.body,
36
37
  workspaceUri: vscode.Uri.file(WORKSPACE_PATH),
37
38
  workspaceFileUri,
@@ -39,12 +40,7 @@ export const runClangdWrapper = async () => {
39
40
  lsMessageLocalPort: channelLs.port1
40
41
  });
41
42
 
42
- // perform global init
43
- const apiWrapper = new MonacoVscodeApiWrapper(appConfig.vscodeApiConfig);
44
- await apiWrapper.init();
45
-
46
- const lcWrapper = new LanguageClientWrapper(appConfig.languageClientConfig);
47
-
43
+ await wrapper.init(wrapperConfig);
48
44
  const initConfig = {
49
45
  lsMessagePort: channelLs.port2,
50
46
  fsMessagePort: channelFs.port2,
@@ -57,7 +53,7 @@ export const runClangdWrapper = async () => {
57
53
  const startWrapper = async () => {
58
54
  await clangdWorkerHandler.init(initConfig);
59
55
  await clangdWorkerHandler.launch();
60
- await lcWrapper.start();
56
+ await wrapper.startLanguageClients();
61
57
  };
62
58
 
63
59
  try {
@@ -104,7 +104,7 @@ export class ClangdInteractionWorker implements ComRouter {
104
104
  // Pre-fetch wasm file
105
105
  const wasmReader = (await fetch(clangdWasmUrl)).body!.getReader();
106
106
 
107
- const chunks: Uint8Array[] = [];
107
+ const chunks: BlobPart[] = [];
108
108
  let loadingComplete = false;
109
109
  while (!loadingComplete) {
110
110
  const { done, value } = await wasmReader.read();
@@ -446,7 +446,7 @@ export class ClangdInteractionWorker implements ComRouter {
446
446
  const content = this.emscriptenFS.readFile(filename, { encoding: 'binary' });
447
447
  allPromises.push(this.remoteFs.syncFile({
448
448
  resourceUri: filename,
449
- content: content
449
+ content: content as unknown as ArrayBufferLike
450
450
  }));
451
451
 
452
452
  } catch (e) {
@@ -4,9 +4,6 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import type { IStoredWorkspace } from '@codingame/monaco-vscode-configuration-service-override';
7
- import type { EditorAppConfig } from 'monaco-languageclient/editorApp';
8
- import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
9
- import type { MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
10
7
 
11
8
  export const disableElement = (id: string, disabled: boolean) => {
12
9
  const button = document.getElementById(id) as HTMLButtonElement | HTMLInputElement | null;
@@ -29,8 +26,6 @@ export const createDefaultWorkspaceContent = (workspacePath: string) => {
29
26
  );
30
27
  };
31
28
 
32
- export type ExampleAppConfig = {
33
- vscodeApiConfig: MonacoVscodeApiConfig;
34
- languageClientConfig: LanguageClientConfig;
35
- editorAppConfig: EditorAppConfig;
29
+ export const delayExecution = (ms: number) => {
30
+ return new Promise((resolve) => setTimeout(resolve, ms));
36
31
  };
@@ -4,7 +4,7 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import * as vscode from 'vscode';
7
- import type { ExtensionConfig } from 'monaco-languageclient/vscodeApiWrapper';
7
+ import type { ExtensionConfig } from 'monaco-editor-wrapper';
8
8
  import type { ConfigParams, InitMessage } from '../common/definitions.js';
9
9
 
10
10
  // This is derived from:
@@ -3,12 +3,86 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
+ import * as vscode from 'vscode';
7
+ import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
8
+ import { RegisteredFileSystemProvider, RegisteredMemoryFile, registerFileSystemOverlay } from '@codingame/monaco-vscode-files-service-override';
6
9
  // this is required syntax highlighting
7
10
  import '@codingame/monaco-vscode-java-default-extension';
8
- import helloJavaCode from '../../../resources/eclipse.jdt.ls/workspace/hello.java?raw';
9
- import { runExtendedClient } from '../../common/client/extendedClient.js';
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';
10
14
  import { eclipseJdtLsConfig } from '../config.js';
15
+ import helloJavaCode from '../../../resources/eclipse.jdt.ls/workspace/hello.java?raw';
16
+
17
+ export const runEclipseJdtLsClient = () => {
18
+ const helloJavaUri = vscode.Uri.file(`${eclipseJdtLsConfig.basePath}/workspace/hello.java`);
19
+ const fileSystemProvider = new RegisteredFileSystemProvider(false);
20
+ fileSystemProvider.registerFile(new RegisteredMemoryFile(helloJavaUri, helloJavaCode));
21
+ registerFileSystemOverlay(1, fileSystemProvider);
22
+
23
+ const wrapperConfig: WrapperConfig = {
24
+ $type: 'extended',
25
+ htmlContainer: document.getElementById('monaco-editor-root')!,
26
+ logLevel: LogLevel.Debug,
27
+ vscodeApiConfig: {
28
+ serviceOverrides: {
29
+ ...getKeybindingsServiceOverride(),
30
+ },
31
+ userConfiguration: {
32
+ json: JSON.stringify({
33
+ 'workbench.colorTheme': 'Default Dark Modern',
34
+ 'editor.guides.bracketPairsHorizontal': 'active',
35
+ 'editor.wordBasedSuggestions': 'off',
36
+ 'editor.experimental.asyncTokenization': true
37
+ })
38
+ }
39
+ },
40
+ editorAppConfig: {
41
+ codeResources: {
42
+ modified: {
43
+ text: helloJavaCode,
44
+ uri: `${eclipseJdtLsConfig.basePath}/workspace/hello.java`
45
+ }
46
+ },
47
+ monacoWorkerFactory: configureDefaultWorkerFactory
48
+ },
49
+ languageClientConfigs: {
50
+ configs: {
51
+ java: {
52
+ connection: {
53
+ options: {
54
+ $type: 'WebSocketUrl',
55
+ url: 'ws://localhost:30003/jdtls'
56
+ }
57
+ },
58
+ clientOptions: {
59
+ documentSelector: ['java'],
60
+ workspaceFolder: {
61
+ index: 0,
62
+ name: 'workspace',
63
+ uri: vscode.Uri.parse(`${eclipseJdtLsConfig.basePath}/workspace`)
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ };
70
+
71
+ const wrapper = new MonacoEditorLanguageClientWrapper();
72
+
73
+ try {
74
+ document.querySelector('#button-start')?.addEventListener('click', async () => {
75
+ await wrapper.init(wrapperConfig);
76
+
77
+ // open files, so the LS can pick it up
78
+ await vscode.workspace.openTextDocument(helloJavaUri);
11
79
 
12
- export const runEclipseJdtLsClient = async () => {
13
- await runExtendedClient(eclipseJdtLsConfig, helloJavaCode);
80
+ await wrapper.start();
81
+ });
82
+ document.querySelector('#button-dispose')?.addEventListener('click', async () => {
83
+ await wrapper.dispose();
84
+ });
85
+ } catch (e) {
86
+ console.error(e);
87
+ }
14
88
  };
@@ -2,12 +2,8 @@
2
2
  * Copyright (c) 2024 TypeFox and others.
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
-
6
- import type { ExampleLsConfig } from '../common/client/extendedClient.js';
7
-
8
- export const eclipseJdtLsConfig: ExampleLsConfig = {
5
+ export const eclipseJdtLsConfig = {
9
6
  port: 30003,
10
7
  path: '/jdtls',
11
- basePath: '/home/mlc/packages/examples/resources/eclipse.jdt.ls',
12
- documentSelector: 'java'
8
+ basePath: '/home/mlc/packages/examples/resources/eclipse.jdt.ls'
13
9
  };
@@ -3,12 +3,73 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
+ import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
6
7
  // this is required syntax highlighting
7
8
  import '@codingame/monaco-vscode-groovy-default-extension';
8
- import helloGroovyCode from '../../../resources/groovy/workspace/hello.groovy?raw';
9
- import { runExtendedClient } from '../../common/client/extendedClient.js';
9
+ import { LogLevel } from '@codingame/monaco-vscode-api';
10
+ import { MonacoEditorLanguageClientWrapper, type WrapperConfig } from 'monaco-editor-wrapper';
11
+ import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
10
12
  import { groovyConfig } from '../config.js';
11
13
 
12
- export const runGroovyClient = async () => {
13
- await runExtendedClient(groovyConfig, helloGroovyCode);
14
+ const code = `package test.org;
15
+ import java.io.File;
16
+ File file = new File("E:/Example.txt");
17
+ `;
18
+
19
+ const wrapperConfig: WrapperConfig = {
20
+ $type: 'extended',
21
+ htmlContainer: document.getElementById('monaco-editor-root')!,
22
+ logLevel: LogLevel.Debug,
23
+ vscodeApiConfig: {
24
+ serviceOverrides: {
25
+ ...getKeybindingsServiceOverride(),
26
+ },
27
+ userConfiguration: {
28
+ json: JSON.stringify({
29
+ 'workbench.colorTheme': 'Default Dark Modern',
30
+ 'editor.guides.bracketPairsHorizontal': 'active',
31
+ 'editor.wordBasedSuggestions': 'off',
32
+ 'editor.experimental.asyncTokenization': true
33
+ })
34
+ }
35
+ },
36
+ editorAppConfig: {
37
+ codeResources: {
38
+ modified: {
39
+ text: code,
40
+ uri: '/workspace/test.groovy'
41
+ }
42
+ },
43
+ monacoWorkerFactory: configureDefaultWorkerFactory
44
+ },
45
+ languageClientConfigs: {
46
+ configs: {
47
+ groovy: {
48
+ clientOptions: {
49
+ documentSelector: ['groovy']
50
+ },
51
+ connection: {
52
+ options: {
53
+ $type: 'WebSocketUrl',
54
+ url: `ws://localhost:${groovyConfig.port}${groovyConfig.path}`
55
+ }
56
+ }
57
+ }
58
+ }
59
+ }
60
+ };
61
+
62
+ export const runGroovyClient = () => {
63
+ const wrapper = new MonacoEditorLanguageClientWrapper();
64
+
65
+ try {
66
+ document.querySelector('#button-start')?.addEventListener('click', async () => {
67
+ await wrapper.initAndStart(wrapperConfig);
68
+ });
69
+ document.querySelector('#button-dispose')?.addEventListener('click', async () => {
70
+ await wrapper.dispose();
71
+ });
72
+ } catch (e) {
73
+ console.error(e);
74
+ }
14
75
  };