monaco-languageclient-examples 2025.8.3 → 2025.8.4

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 +4 -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.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 +12 -9
  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 +8 -1
  38. package/dist/common/client/utils.d.ts.map +1 -1
  39. package/dist/common/client/utils.js +0 -3
  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 +0 -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 +93 -97
  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 +5 -6
  116. package/src/appPlayground/common.ts +3 -3
  117. package/src/appPlayground/config.ts +69 -65
  118. package/src/appPlayground/launcher.ts +2 -1
  119. package/src/appPlayground/main.ts +8 -5
  120. package/src/appPlayground/reactLauncher.ts +2 -1
  121. package/src/appPlayground/reactMain.tsx +4 -4
  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 +14 -10
  126. package/src/common/client/extendedClient.ts +111 -0
  127. package/src/common/client/utils.ts +7 -2
  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 +0 -3
  146. package/src/python/client/config.ts +101 -99
  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
@@ -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
 
@@ -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'
@@ -62,7 +61,8 @@ export const runStatemachineReact = async () => {
62
61
  <div style={{ 'height': height }} >
63
62
  <MonacoEditorReactComp
64
63
  style={{ 'height': '100%' }}
65
- wrapperConfig={wrapperConfig}
64
+ vscodeApiConfig={appConfig.vscodeApiConfig}
65
+ editorAppConfig={appConfig.editorAppConfig}
66
66
  onTextChanged={onTextChanged}
67
67
  />
68
68
  <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[]) => {