monaco-languageclient-examples 2025.6.1 → 2025.6.3

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 (155) 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 +7 -5
  7. package/dist/appPlayground/config.d.ts.map +1 -1
  8. package/dist/appPlayground/config.js +91 -78
  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 +6 -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 -4
  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.map +1 -1
  24. package/dist/browser/main.js +28 -27
  25. package/dist/browser/main.js.map +1 -1
  26. package/dist/clangd/client/config.d.ts +10 -3
  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 +14 -11
  32. package/dist/clangd/client/main.js.map +1 -1
  33. package/dist/common/client/extendedClient.d.ts +9 -0
  34. package/dist/common/client/extendedClient.d.ts.map +1 -0
  35. package/dist/common/client/extendedClient.js +97 -0
  36. package/dist/common/client/extendedClient.js.map +1 -0
  37. package/dist/common/client/utils.d.ts +9 -4
  38. package/dist/common/client/utils.d.ts.map +1 -1
  39. package/dist/common/client/utils.js +3 -7
  40. package/dist/common/client/utils.js.map +1 -1
  41. package/dist/debugger/client/debugger.d.ts +1 -1
  42. package/dist/debugger/client/debugger.d.ts.map +1 -1
  43. package/dist/eclipse.jdt.ls/client/main.d.ts +1 -1
  44. package/dist/eclipse.jdt.ls/client/main.d.ts.map +1 -1
  45. package/dist/eclipse.jdt.ls/client/main.js +4 -74
  46. package/dist/eclipse.jdt.ls/client/main.js.map +1 -1
  47. package/dist/eclipse.jdt.ls/config.d.ts +2 -5
  48. package/dist/eclipse.jdt.ls/config.d.ts.map +1 -1
  49. package/dist/eclipse.jdt.ls/config.js +2 -1
  50. package/dist/eclipse.jdt.ls/config.js.map +1 -1
  51. package/dist/groovy/client/main.d.ts +1 -1
  52. package/dist/groovy/client/main.d.ts.map +1 -1
  53. package/dist/groovy/client/main.js +4 -63
  54. package/dist/groovy/client/main.js.map +1 -1
  55. package/dist/groovy/config.d.ts +2 -5
  56. package/dist/groovy/config.d.ts.map +1 -1
  57. package/dist/groovy/config.js +2 -1
  58. package/dist/groovy/config.js.map +1 -1
  59. package/dist/json/client/client.d.ts +3 -0
  60. package/dist/json/client/client.d.ts.map +1 -0
  61. package/dist/json/client/client.js +13 -0
  62. package/dist/json/client/client.js.map +1 -0
  63. package/dist/json/client/config.d.ts +3 -0
  64. package/dist/json/client/config.d.ts.map +1 -0
  65. package/dist/json/client/config.js +11 -0
  66. package/dist/json/client/config.js.map +1 -0
  67. package/dist/json/server/main.js.map +1 -1
  68. package/dist/langium/langium-dsl/config/classicConfig.d.ts +2 -2
  69. package/dist/langium/langium-dsl/config/classicConfig.d.ts.map +1 -1
  70. package/dist/langium/langium-dsl/config/classicConfig.js +53 -45
  71. package/dist/langium/langium-dsl/config/classicConfig.js.map +1 -1
  72. package/dist/langium/langium-dsl/config/extendedConfig.d.ts +2 -2
  73. package/dist/langium/langium-dsl/config/extendedConfig.d.ts.map +1 -1
  74. package/dist/langium/langium-dsl/config/extendedConfig.js +40 -40
  75. package/dist/langium/langium-dsl/config/extendedConfig.js.map +1 -1
  76. package/dist/langium/langium-dsl/wrapperLangium.d.ts.map +1 -1
  77. package/dist/langium/langium-dsl/wrapperLangium.js +23 -16
  78. package/dist/langium/langium-dsl/wrapperLangium.js.map +1 -1
  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.js +2 -3
  86. package/dist/langium/statemachine/main-react.js.map +1 -1
  87. package/dist/langium/statemachine/main.d.ts.map +1 -1
  88. package/dist/langium/statemachine/main.js +38 -27
  89. package/dist/langium/statemachine/main.js.map +1 -1
  90. package/dist/multi/config.d.ts +1 -1
  91. package/dist/multi/config.d.ts.map +1 -1
  92. package/dist/multi/config.js +0 -1
  93. package/dist/multi/config.js.map +1 -1
  94. package/dist/multi/twoLanguageClients.d.ts.map +1 -1
  95. package/dist/multi/twoLanguageClients.js +45 -49
  96. package/dist/multi/twoLanguageClients.js.map +1 -1
  97. package/dist/node.d.ts +0 -3
  98. package/dist/node.d.ts.map +1 -1
  99. package/dist/node.js +3 -3
  100. package/dist/node.js.map +1 -1
  101. package/dist/python/client/config.d.ts +7 -3
  102. package/dist/python/client/config.d.ts.map +1 -1
  103. package/dist/python/client/config.js +108 -112
  104. package/dist/python/client/config.js.map +1 -1
  105. package/dist/python/client/main.d.ts.map +1 -1
  106. package/dist/python/client/main.js +16 -10
  107. package/dist/python/client/main.js.map +1 -1
  108. package/dist/python/client/reactPython.d.ts.map +1 -1
  109. package/dist/python/client/reactPython.js +8 -9
  110. package/dist/python/client/reactPython.js.map +1 -1
  111. package/dist/ts/wrapperTs.d.ts.map +1 -1
  112. package/dist/ts/wrapperTs.js +50 -45
  113. package/dist/ts/wrapperTs.js.map +1 -1
  114. package/json.html +1 -1
  115. package/package.json +41 -41
  116. package/src/appPlayground/common.ts +3 -3
  117. package/src/appPlayground/config.ts +97 -81
  118. package/src/appPlayground/launcher.ts +2 -1
  119. package/src/appPlayground/main.ts +9 -6
  120. package/src/appPlayground/reactLauncher.ts +2 -1
  121. package/src/appPlayground/reactMain.tsx +5 -5
  122. package/src/bare/client.ts +15 -16
  123. package/src/browser/main.ts +29 -27
  124. package/src/clangd/client/config.ts +97 -87
  125. package/src/clangd/client/main.ts +16 -12
  126. package/src/common/client/extendedClient.ts +111 -0
  127. package/src/common/client/utils.ts +18 -18
  128. package/src/debugger/client/debugger.ts +1 -1
  129. package/src/eclipse.jdt.ls/client/main.ts +4 -78
  130. package/src/eclipse.jdt.ls/config.ts +6 -2
  131. package/src/groovy/client/main.ts +4 -65
  132. package/src/groovy/config.ts +6 -2
  133. package/src/json/client/client.ts +14 -0
  134. package/src/json/client/config.ts +13 -0
  135. package/src/json/server/main.ts +1 -1
  136. package/src/langium/langium-dsl/config/classicConfig.ts +64 -48
  137. package/src/langium/langium-dsl/config/extendedConfig.ts +49 -42
  138. package/src/langium/langium-dsl/wrapperLangium.ts +25 -15
  139. package/src/langium/statemachine/config/wrapperStatemachineConfig.ts +48 -45
  140. package/src/langium/statemachine/launcher.ts +1 -1
  141. package/src/langium/statemachine/main-react.tsx +4 -4
  142. package/src/langium/statemachine/main.ts +43 -27
  143. package/src/multi/config.ts +3 -3
  144. package/src/multi/twoLanguageClients.ts +48 -52
  145. package/src/node.ts +3 -3
  146. package/src/python/client/config.ts +116 -114
  147. package/src/python/client/main.ts +20 -11
  148. package/src/python/client/reactPython.tsx +11 -10
  149. package/src/ts/wrapperTs.ts +52 -45
  150. package/two_langauge_clients.html +0 -1
  151. package/dist/json/client/wrapperWs.d.ts +0 -5
  152. package/dist/json/client/wrapperWs.d.ts.map +0 -1
  153. package/dist/json/client/wrapperWs.js +0 -87
  154. package/dist/json/client/wrapperWs.js.map +0 -1
  155. package/src/json/client/wrapperWs.ts +0 -90
@@ -3,86 +3,12 @@
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';
9
6
  // this is required syntax highlighting
10
7
  import '@codingame/monaco-vscode-java-default-extension';
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';
14
- import { eclipseJdtLsConfig } from '../config.js';
15
8
  import helloJavaCode from '../../../resources/eclipse.jdt.ls/workspace/hello.java?raw';
9
+ import { runExtendedClient } from '../../common/client/extendedClient.js';
10
+ import { eclipseJdtLsConfig } from '../config.js';
16
11
 
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);
79
-
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
- }
12
+ export const runEclipseJdtLsClient = async () => {
13
+ await runExtendedClient(eclipseJdtLsConfig, helloJavaCode);
88
14
  };
@@ -2,8 +2,12 @@
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
- export const eclipseJdtLsConfig = {
5
+
6
+ import type { ExampleLsConfig } from '../common/client/extendedClient.js';
7
+
8
+ export const eclipseJdtLsConfig: ExampleLsConfig = {
6
9
  port: 30003,
7
10
  path: '/jdtls',
8
- basePath: '/home/mlc/packages/examples/resources/eclipse.jdt.ls'
11
+ basePath: '/home/mlc/packages/examples/resources/eclipse.jdt.ls',
12
+ documentSelector: 'java'
9
13
  };
@@ -3,73 +3,12 @@
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';
7
6
  // this is required syntax highlighting
8
7
  import '@codingame/monaco-vscode-groovy-default-extension';
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';
8
+ import helloGroovyCode from '../../../resources/groovy/workspace/hello.groovy?raw';
9
+ import { runExtendedClient } from '../../common/client/extendedClient.js';
12
10
  import { groovyConfig } from '../config.js';
13
11
 
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
- }
12
+ export const runGroovyClient = async () => {
13
+ await runExtendedClient(groovyConfig, helloGroovyCode);
75
14
  };
@@ -2,8 +2,12 @@
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
- export const groovyConfig = {
5
+
6
+ import type { ExampleLsConfig } from '../common/client/extendedClient.js';
7
+
8
+ export const groovyConfig: ExampleLsConfig = {
6
9
  port: 30002,
7
10
  path: '/groovy',
8
- basePath: '/home/gradle/mlc/packages/examples/resources/groovy'
11
+ basePath: '/home/gradle/mlc/packages/examples/resources/groovy',
12
+ documentSelector: 'groovy'
9
13
  };
@@ -0,0 +1,14 @@
1
+ /* --------------------------------------------------------------------------------------------
2
+ * Copyright (c) 2024 TypeFox and others.
3
+ * Licensed under the MIT License. See LICENSE in the package root for license information.
4
+ * ------------------------------------------------------------------------------------------ */
5
+
6
+ // this is required syntax highlighting
7
+ import '@codingame/monaco-vscode-json-default-extension';
8
+ import helloJsonCode from '../../../resources/json/workspace/hello.json?raw';
9
+ import { runExtendedClient } from '../../common/client/extendedClient.js';
10
+ import { jsontLsConfig } from './config.js';
11
+
12
+ export const runJsonWrapper = async () => {
13
+ await runExtendedClient(jsontLsConfig, helloJsonCode);
14
+ };
@@ -0,0 +1,13 @@
1
+ /* --------------------------------------------------------------------------------------------
2
+ * Copyright (c) 2024 TypeFox and others.
3
+ * Licensed under the MIT License. See LICENSE in the package root for license information.
4
+ * ------------------------------------------------------------------------------------------ */
5
+
6
+ import type { ExampleLsConfig } from '../../common/client/extendedClient.js';
7
+
8
+ export const jsontLsConfig: ExampleLsConfig = {
9
+ port: 30000,
10
+ path: '/sampleServer',
11
+ basePath: '/home/mlc/packages/examples/resources/json',
12
+ documentSelector: 'json'
13
+ };
@@ -36,7 +36,7 @@ export const startMockHttpServerForSavingCodeFromEditor = () => {
36
36
  app.post('/save-code', (req, res) => {
37
37
  const { code } = req.body;
38
38
  console.log('Received code:', code);
39
- res.json({ success: true, message: code});
39
+ res.json({ success: true, message: code });
40
40
  });
41
41
 
42
42
  const PORT = 3003;
@@ -6,67 +6,83 @@
6
6
  import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
7
7
  import { LogLevel } from '@codingame/monaco-vscode-api';
8
8
  import { MessageTransports } from 'vscode-languageclient';
9
- import type { Logger } from 'monaco-languageclient/tools';
10
- import { useWorkerFactory } from 'monaco-languageclient/workerFactory';
11
- import type { WrapperConfig } from 'monaco-editor-wrapper';
12
- import { defineDefaultWorkerLoaders } from 'monaco-editor-wrapper/workers/workerLoaders';
9
+ import type { Logger } from 'monaco-languageclient/common';
10
+ import type { MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
11
+ import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
12
+ import { defineDefaultWorkerLoaders, useWorkerFactory } from 'monaco-languageclient/workerFactory';
13
13
  import { LangiumMonarchContent } from './langium.monarch.js';
14
14
  import code from '../../../../resources/langium/langium-dsl/example.langium?raw';
15
+ import type { ExampleAppConfig } from '../../../common/client/utils.js';
16
+ import type { EditorAppConfig } from 'monaco-languageclient/editorApp';
15
17
 
16
- export const setupLangiumClientClassic = async (params: {
18
+ export const setupLangiumClientClassic = (params: {
17
19
  worker: Worker
18
20
  messageTransports?: MessageTransports,
19
- }): Promise<WrapperConfig> => {
21
+ }): ExampleAppConfig => {
22
+
20
23
  const workerLoaders = defineDefaultWorkerLoaders();
21
24
  workerLoaders.TextMateWorker = undefined;
22
- return {
25
+
26
+ const vscodeApiConfig: MonacoVscodeApiConfig = {
23
27
  $type: 'classic',
24
- htmlContainer: document.getElementById('monaco-editor-root')!,
25
28
  logLevel: LogLevel.Debug,
26
- vscodeApiConfig: {
27
- serviceOverrides: {
28
- ...getKeybindingsServiceOverride()
29
- }
29
+ htmlContainer: document.getElementById('monaco-editor-root')!,
30
+ serviceOverrides: {
31
+ ...getKeybindingsServiceOverride()
30
32
  },
31
- editorAppConfig: {
32
- codeResources: {
33
- modified: {
34
- text: code,
35
- uri: '/workspace/grammar.langium',
36
- enforceLanguageId: 'langium'
37
- }
38
- },
39
- editorOptions: {
40
- 'semanticHighlighting.enabled': true,
41
- wordBasedSuggestions: 'off',
42
- theme: 'vs-dark'
43
- },
44
- languageDef: {
45
- monarchLanguage: LangiumMonarchContent,
46
- languageExtensionConfig: { id: 'langium' }
33
+ userConfiguration: {
34
+ json: JSON.stringify({
35
+ 'workbench.colorTheme': 'GitHub Dark High Contrast',
36
+ 'editor.guides.bracketPairsHorizontal': 'active',
37
+ 'editor.wordBasedSuggestions': 'off',
38
+ 'editor.experimental.asyncTokenization': true,
39
+ 'vitest.disableWorkspaceWarning': true
40
+ })
41
+ },
42
+ monacoWorkerFactory: (logger?: Logger) => {
43
+ useWorkerFactory({
44
+ workerLoaders,
45
+ logger
46
+ });
47
+ }
48
+ };
49
+
50
+ const languageClientConfig: LanguageClientConfig = {
51
+ clientOptions: {
52
+ documentSelector: ['langium']
53
+ },
54
+ connection: {
55
+ options: {
56
+ $type: 'WorkerDirect',
57
+ worker: params.worker
47
58
  },
48
- monacoWorkerFactory: (logger?: Logger) => {
49
- useWorkerFactory({
50
- workerLoaders,
51
- logger
52
- });
59
+ messageTransports: params.messageTransports
60
+ }
61
+ };
62
+
63
+ const editorAppConfig: EditorAppConfig = {
64
+ $type: vscodeApiConfig.$type,
65
+ codeResources: {
66
+ modified: {
67
+ text: code,
68
+ uri: '/workspace/grammar.langium',
69
+ enforceLanguageId: 'langium'
53
70
  }
54
71
  },
55
- languageClientConfigs: {
56
- configs: {
57
- langium: {
58
- clientOptions: {
59
- documentSelector: ['langium']
60
- },
61
- connection: {
62
- options: {
63
- $type: 'WorkerDirect',
64
- worker: params.worker
65
- },
66
- messageTransports: params.messageTransports
67
- }
68
- }
69
- }
72
+ editorOptions: {
73
+ 'semanticHighlighting.enabled': true,
74
+ wordBasedSuggestions: 'off',
75
+ theme: 'vs-dark'
76
+ },
77
+ languageDef: {
78
+ monarchLanguage: LangiumMonarchContent,
79
+ languageExtensionConfig: { id: 'langium' }
70
80
  }
71
81
  };
82
+
83
+ return {
84
+ editorAppConfig,
85
+ vscodeApiConfig,
86
+ languageClientConfig
87
+ };
72
88
  };
@@ -7,39 +7,42 @@ import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-
7
7
  import { LogLevel } from '@codingame/monaco-vscode-api';
8
8
  import '../../../../resources/vsix/github-vscode-theme.vsix';
9
9
  import { MessageTransports } from 'vscode-languageclient';
10
- import type { WrapperConfig } from 'monaco-editor-wrapper';
11
- import { configureDefaultWorkerFactory } from 'monaco-editor-wrapper/workers/workerLoaders';
10
+ import type { MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
11
+ import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
12
+ import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
12
13
  import langiumLanguageConfig from './langium.configuration.json?raw';
13
14
  import langiumTextmateGrammar from './langium.tmLanguage.json?raw';
14
15
  import text from '../../../../resources/langium/langium-dsl//example.langium?raw';
16
+ import type { ExampleAppConfig } from '../../../common/client/utils.js';
17
+ import type { EditorAppConfig } from 'monaco-languageclient/editorApp';
15
18
 
16
- export const setupLangiumClientExtended = async (params: {
19
+ export const setupLangiumClientExtended = (params: {
17
20
  worker: Worker
18
21
  messageTransports?: MessageTransports,
19
- }): Promise<WrapperConfig> => {
22
+ }): ExampleAppConfig => {
20
23
 
21
24
  const extensionFilesOrContents = new Map<string, string | URL>();
22
25
  // vite build is easier with string content
23
26
  extensionFilesOrContents.set('/langium-configuration.json', langiumLanguageConfig);
24
27
  extensionFilesOrContents.set('/langium-grammar.json', langiumTextmateGrammar);
25
- return {
28
+
29
+ const vscodeApiConfig: MonacoVscodeApiConfig = {
26
30
  $type: 'extended',
27
- htmlContainer: document.getElementById('monaco-editor-root')!,
28
31
  logLevel: LogLevel.Debug,
29
- vscodeApiConfig: {
30
- serviceOverrides: {
31
- ...getKeybindingsServiceOverride()
32
- },
33
- userConfiguration: {
34
- json: JSON.stringify({
35
- 'workbench.colorTheme': 'GitHub Dark High Contrast',
36
- 'editor.guides.bracketPairsHorizontal': 'active',
37
- 'editor.wordBasedSuggestions': 'off',
38
- 'editor.experimental.asyncTokenization': true,
39
- 'vitest.disableWorkspaceWarning': true
40
- })
41
- }
32
+ htmlContainer: document.getElementById('monaco-editor-root')!,
33
+ serviceOverrides: {
34
+ ...getKeybindingsServiceOverride()
35
+ },
36
+ userConfiguration: {
37
+ json: JSON.stringify({
38
+ 'workbench.colorTheme': 'GitHub Dark High Contrast',
39
+ 'editor.guides.bracketPairsHorizontal': 'active',
40
+ 'editor.wordBasedSuggestions': 'off',
41
+ 'editor.experimental.asyncTokenization': true,
42
+ 'vitest.disableWorkspaceWarning': true
43
+ })
42
44
  },
45
+ monacoWorkerFactory: configureDefaultWorkerFactory,
43
46
  extensions: [{
44
47
  config: {
45
48
  name: 'langium-example',
@@ -63,31 +66,35 @@ export const setupLangiumClientExtended = async (params: {
63
66
  }
64
67
  },
65
68
  filesOrContents: extensionFilesOrContents
66
- }],
67
- editorAppConfig: {
68
- codeResources: {
69
- modified: {
70
- text,
71
- uri: '/workspace/grammar.langium'
72
- }
73
- },
74
- monacoWorkerFactory: configureDefaultWorkerFactory
69
+ }]
70
+ };
71
+
72
+ const languageClientConfig: LanguageClientConfig = {
73
+ clientOptions: {
74
+ documentSelector: ['langium']
75
75
  },
76
- languageClientConfigs: {
77
- configs: {
78
- langium: {
79
- clientOptions: {
80
- documentSelector: ['langium']
81
- },
82
- connection: {
83
- options: {
84
- $type: 'WorkerDirect',
85
- worker: params.worker
86
- },
87
- messageTransports: params.messageTransports
88
- }
89
- }
76
+ connection: {
77
+ options: {
78
+ $type: 'WorkerDirect',
79
+ worker: params.worker
80
+ },
81
+ messageTransports: params.messageTransports
82
+ }
83
+ };
84
+
85
+ const editorAppConfig: EditorAppConfig = {
86
+ $type: vscodeApiConfig.$type,
87
+ codeResources: {
88
+ modified: {
89
+ text,
90
+ uri: '/workspace/grammar.langium'
90
91
  }
91
92
  }
92
93
  };
94
+
95
+ return {
96
+ editorAppConfig,
97
+ vscodeApiConfig,
98
+ languageClientConfig
99
+ };
93
100
  };
@@ -4,16 +4,19 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageclient/browser.js';
7
- import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
7
+ import { delayExecution } from 'monaco-languageclient/common';
8
+ import { EditorApp } from 'monaco-languageclient/editorApp';
8
9
  import { setupLangiumClientExtended } from './config/extendedConfig.js';
9
10
  import { setupLangiumClientClassic } from './config/classicConfig.js';
10
- import { delayExecution, disableElement } from '../../common/client/utils.js';
11
+ import { disableElement, type ExampleAppConfig } from '../../common/client/utils.js';
11
12
  import text from '../../../resources/langium/langium-dsl/example.langium?raw';
12
13
  import workerUrl from './worker/langium-server?worker&url';
14
+ import { MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
15
+ import { LanguageClientWrapper } from 'monaco-languageclient/lcwrapper';
13
16
 
14
17
  export const runLangiumDslWrapper = async (extendedMode: boolean) => {
15
18
  try {
16
- let wrapper: MonacoEditorLanguageClientWrapper | undefined;
19
+ let editorApp: EditorApp | undefined;
17
20
 
18
21
  const loadLangiumWorker = () => {
19
22
  console.log(`Langium worker URL: ${workerUrl}`);
@@ -24,7 +27,7 @@ export const runLangiumDslWrapper = async (extendedMode: boolean) => {
24
27
  };
25
28
 
26
29
  const checkStarted = () => {
27
- if (wrapper?.isStarted() ?? false) {
30
+ if (editorApp?.isStarted() ?? false) {
28
31
  alert('Editor was already started!\nPlease reload the page to test the alternative editor.');
29
32
  return true;
30
33
  }
@@ -42,24 +45,32 @@ export const runLangiumDslWrapper = async (extendedMode: boolean) => {
42
45
  console.log('Received message from worker:', message);
43
46
  });
44
47
 
48
+ let appConfig: ExampleAppConfig;
45
49
  if (extendedMode) {
46
- const config = await setupLangiumClientExtended({
50
+ appConfig = setupLangiumClientExtended({
47
51
  worker,
48
52
  messageTransports: { reader, writer }
49
53
  });
50
- wrapper = new MonacoEditorLanguageClientWrapper();
51
- await wrapper.initAndStart(config);
52
54
  } else {
53
- const config = await setupLangiumClientClassic({
55
+ appConfig = setupLangiumClientClassic({
54
56
  worker,
55
57
  messageTransports: { reader, writer }
56
58
  });
57
- wrapper = new MonacoEditorLanguageClientWrapper();
58
- await wrapper.initAndStart(config);
59
59
  }
60
+ // perform global init
61
+ const apiWrapper = new MonacoVscodeApiWrapper(appConfig.vscodeApiConfig);
62
+ await apiWrapper.init();
63
+
64
+ // init language client
65
+ const lcWrapper = new LanguageClientWrapper(appConfig.languageClientConfig);
66
+ await lcWrapper.start();
67
+
68
+ // run editorApp
69
+ editorApp = new EditorApp(appConfig.editorAppConfig);
70
+ await editorApp.start(appConfig.vscodeApiConfig.htmlContainer!);
60
71
 
61
72
  await delayExecution(1000);
62
- await wrapper.updateCodeResources({
73
+ await editorApp.updateCodeResources({
63
74
  modified: {
64
75
  text: `// modified file\n\n${text}`,
65
76
  uri: '/workspace/mod.langium',
@@ -69,10 +80,9 @@ export const runLangiumDslWrapper = async (extendedMode: boolean) => {
69
80
  };
70
81
 
71
82
  const disposeEditor = async () => {
72
- if (!wrapper) return;
73
- wrapper.reportStatus();
74
- await wrapper.dispose();
75
- wrapper = undefined;
83
+ editorApp?.reportStatus();
84
+ await editorApp?.dispose();
85
+ editorApp = undefined;
76
86
  disableElement('button-start', false);
77
87
  };
78
88