monaco-languageclient-examples 2025.9.1-next.0 → 2025.9.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 (59) hide show
  1. package/CHANGELOG.md +2 -2
  2. package/dist/appPlayground/common.d.ts.map +1 -1
  3. package/dist/appPlayground/common.js +0 -2
  4. package/dist/appPlayground/common.js.map +1 -1
  5. package/dist/appPlayground/config.d.ts +0 -2
  6. package/dist/appPlayground/config.d.ts.map +1 -1
  7. package/dist/appPlayground/config.js +1 -5
  8. package/dist/appPlayground/config.js.map +1 -1
  9. package/dist/appPlayground/reactMain.d.ts.map +1 -1
  10. package/dist/appPlayground/reactMain.js +1 -1
  11. package/dist/appPlayground/reactMain.js.map +1 -1
  12. package/dist/langium/langium-dsl/config/{extendedConfig.d.ts → langiumDslConfig.d.ts} +1 -1
  13. package/dist/langium/langium-dsl/config/langiumDslConfig.d.ts.map +1 -0
  14. package/dist/langium/langium-dsl/config/{extendedConfig.js → langiumDslConfig.js} +1 -1
  15. package/dist/langium/langium-dsl/config/langiumDslConfig.js.map +1 -0
  16. package/dist/langium/langium-dsl/main.js +1 -1
  17. package/dist/langium/langium-dsl/main.js.map +1 -1
  18. package/dist/langium/statemachine/config/{wrapperStatemachineConfig.d.ts → statemachineConfig.d.ts} +1 -1
  19. package/dist/langium/statemachine/config/statemachineConfig.d.ts.map +1 -0
  20. package/dist/langium/statemachine/config/{wrapperStatemachineConfig.js → statemachineConfig.js} +1 -1
  21. package/dist/langium/statemachine/config/statemachineConfig.js.map +1 -0
  22. package/dist/langium/statemachine/launcher.js +2 -2
  23. package/dist/langium/statemachine/launcher.js.map +1 -1
  24. package/dist/langium/statemachine/main-react.d.ts +1 -1
  25. package/dist/langium/statemachine/main-react.d.ts.map +1 -1
  26. package/dist/langium/statemachine/main-react.js +42 -42
  27. package/dist/langium/statemachine/main-react.js.map +1 -1
  28. package/dist/langium/statemachine/main.d.ts +1 -1
  29. package/dist/langium/statemachine/main.d.ts.map +1 -1
  30. package/dist/langium/statemachine/main.js +2 -2
  31. package/dist/langium/statemachine/main.js.map +1 -1
  32. package/dist/ts/{wrapperTs.d.ts → clientTs.d.ts} +1 -1
  33. package/dist/ts/clientTs.d.ts.map +1 -0
  34. package/dist/ts/clientTs.js +178 -0
  35. package/dist/ts/clientTs.js.map +1 -0
  36. package/ghp_langium_extended.html +1 -3
  37. package/ghp_react_statemachine.html +1 -4
  38. package/ghp_tsExtHost.html +1 -1
  39. package/index.html +10 -22
  40. package/package.json +35 -35
  41. package/src/appPlayground/common.ts +0 -3
  42. package/src/appPlayground/config.ts +1 -8
  43. package/src/appPlayground/reactMain.tsx +0 -1
  44. package/src/langium/langium-dsl/main.ts +1 -1
  45. package/src/langium/statemachine/launcher.ts +2 -2
  46. package/src/langium/statemachine/main-react.tsx +48 -51
  47. package/src/langium/statemachine/main.ts +2 -2
  48. package/src/ts/clientTs.ts +196 -0
  49. package/tsExtHost.html +1 -1
  50. package/dist/langium/langium-dsl/config/extendedConfig.d.ts.map +0 -1
  51. package/dist/langium/langium-dsl/config/extendedConfig.js.map +0 -1
  52. package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts.map +0 -1
  53. package/dist/langium/statemachine/config/wrapperStatemachineConfig.js.map +0 -1
  54. package/dist/ts/wrapperTs.d.ts.map +0 -1
  55. package/dist/ts/wrapperTs.js +0 -122
  56. package/dist/ts/wrapperTs.js.map +0 -1
  57. package/src/ts/wrapperTs.ts +0 -131
  58. /package/src/langium/langium-dsl/config/{extendedConfig.ts → langiumDslConfig.ts} +0 -0
  59. /package/src/langium/statemachine/config/{wrapperStatemachineConfig.ts → statemachineConfig.ts} +0 -0
@@ -6,16 +6,14 @@
6
6
  <meta charset="UTF-8" />
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
8
  <link rel="stylesheet" href="style.css">
9
+ <link rel="stylesheet" href="./resources/styles/views.editorOnly.css">
9
10
  </head>
10
11
 
11
12
  <body>
12
13
  <div class="exampleHeadelineDiv">
13
14
  <b class="exampleHeadeline">Langium Grammar DSL (Extended Mode)</b> - [<a href="./index.html">Back to Index</a>]
14
15
  <br>
15
- <button type="button" id="button-start">Start</button>
16
- <button type="button" id="button-dispose">Dispose</button>
17
16
  </div>
18
- <div id="monaco-editor-root" style="height: 80vh; border: 1px solid grey"></div>
19
17
  <script type="module">
20
18
  import { runLangiumGrammarDsl } from './src/langium/langium-dsl/main.ts';
21
19
 
@@ -12,15 +12,12 @@
12
12
  <div class="exampleHeadelineDiv">
13
13
  <b class="exampleHeadeline">React: Langium Statemachine Language Client & Language Server (Worker)</b> - [<a href="./index.html">Back to Index</a>]
14
14
  <br>
15
- <button type="button" id="button-start">Start</button>
16
- <label>Enable Strict mode:</label><input type="checkbox" id="checkbox-strictmode" />
17
- <button type="button" id="button-dispose">Dispose</button>
18
15
  </div>
19
16
  <div id="react-root"></div>
20
17
  <script type="module">
21
18
  import { runStatemachineReact } from './src/langium/statemachine/main-react.tsx';
22
19
 
23
- runStatemachineReact();
20
+ runStatemachineReact(true);
24
21
  </script>
25
22
  </body>
26
23
 
@@ -20,7 +20,7 @@
20
20
 
21
21
  <div id="monaco-editor-root" style="height: 80vh;"></div>
22
22
  <script type="module">
23
- import { runTsWrapper } from './src/ts/wrapperTs.ts';
23
+ import { runTsWrapper } from './src/ts/clientTs.ts';
24
24
 
25
25
  runTsWrapper();
26
26
  </script>
package/index.html CHANGED
@@ -14,15 +14,13 @@
14
14
 
15
15
  This page contains all examples not requiring a backend.
16
16
 
17
- <h2>Monaco Editor Wrapper</h2>
18
-
19
17
  <h3>Langium</h3>
20
18
 
21
- <a href="./ghp_langium_extended.html">Langium Grammar DSL</a>
19
+ Langium Grammar DSL (Language Server in Worker): [ <a href="./ghp_langium_extended.html">Example Page</a> ]
22
20
  <br>
23
- <a href="./ghp_statemachine.html">Langium Statemachine Client & Language Server (Worker)</a>
21
+ Langium Statemachine (Language Server in Worker): [ <a href="./ghp_statemachine.html">Example Page | <a href="./ghp_react_statemachine.html">React Example Page</a> ]
24
22
  <br>
25
- Localizations:
23
+ &nbsp;&nbsp;->&nbsp;&nbsp;Localized Versions: [
26
24
  <a href="./ghp_statemachine.html?locale=cs">cs</a> -
27
25
  <a href="./ghp_statemachine.html?locale=de">de</a> -
28
26
  <a href="./ghp_statemachine.html?locale=es">es</a> -
@@ -36,30 +34,20 @@
36
34
  <a href="./ghp_statemachine.html?locale=ru">ru</a> -
37
35
  <a href="./ghp_statemachine.html?locale=tr">tr</a> -
38
36
  <a href="./ghp_statemachine.html?locale=zh-hans">zh-hans</a> -
39
- <a href="./ghp_statemachine.html?locale=zh-hant">zh-hant</a>
37
+ <a href="./ghp_statemachine.html?locale=zh-hant">zh-hant</a> ]
40
38
  <br>
41
39
 
40
+ <h3>JSON</h3>
41
+ Pure Browser Implementation: [ <a href="./ghp_browser.html">Example Page</a> ]
42
+
42
43
  <h3>Cpp / Clangd</h3>
43
- <a href="./ghp_clangd.html">Cpp Language Client & Clangd Language Server (Worker/Wasm)</a>
44
- <br>
44
+ Cpp (Language Server in Worker/Wasm): [ <a href="./ghp_clangd.html">Example Page</a> ]
45
45
 
46
46
  <h3>Application Playground</h3>
47
- <a href="./ghp_appPlayground.html">Application Playground</a>
48
- <br>
49
-
50
- <h3>JSON</h3>
51
- <a href="./ghp_browser.html">Language Client Pure Browser Example</a>
52
- <br>
47
+ Application Playground (incl. Open Collaboration Tools): [ <a href="./ghp_appPlayground.html">Example Page</a> | <a href="./ghp_react_appPlayground.html">React Example Page</a> ]
53
48
 
54
49
  <h3>TypeScript</h3>
55
- <a href="./ghp_tsExtHost.html">TypeScript Extension Host Worker</a>
56
- <br>
57
-
58
- <h2>Monaco Editor React</h2>
59
- <a href="./ghp_react_appPlayground.html">React: Application Playground</a>
60
- <br>
61
- <a href="./ghp_react_statemachine.html">React: Langium Statemachine Language Client & Language Server (Worker)</a>
62
- <br>
50
+ TypeScript Extension Host Worker: [ <a href="./ghp_tsExtHost.html">Example Page</a> ]
63
51
  </div>
64
52
  </body>
65
53
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monaco-languageclient-examples",
3
- "version": "2025.9.1-next.0",
3
+ "version": "2025.9.1",
4
4
  "description": "Monaco Language client examples",
5
5
  "author": {
6
6
  "name": "TypeFox GmbH",
@@ -82,48 +82,48 @@
82
82
  "LICENSE"
83
83
  ],
84
84
  "dependencies": {
85
- "@codingame/monaco-vscode-configuration-service-override": "^21.0.1",
86
- "@codingame/monaco-vscode-cpp-default-extension": "^21.0.1",
87
- "@codingame/monaco-vscode-debug-service-override": "^21.0.1",
88
- "@codingame/monaco-vscode-editor-api": "^21.0.1",
89
- "@codingame/monaco-vscode-environment-service-override": "^21.0.1",
90
- "@codingame/monaco-vscode-explorer-service-override": "^21.0.1",
91
- "@codingame/monaco-vscode-files-service-override": "^21.0.1",
92
- "@codingame/monaco-vscode-groovy-default-extension": "^21.0.1",
93
- "@codingame/monaco-vscode-java-default-extension": "^21.0.1",
94
- "@codingame/monaco-vscode-javascript-default-extension": "^21.0.1",
95
- "@codingame/monaco-vscode-json-default-extension": "^21.0.1",
96
- "@codingame/monaco-vscode-keybindings-service-override": "^21.0.1",
97
- "@codingame/monaco-vscode-lifecycle-service-override": "^21.0.1",
98
- "@codingame/monaco-vscode-localization-service-override": "^21.0.1",
99
- "@codingame/monaco-vscode-preferences-service-override": "^21.0.1",
100
- "@codingame/monaco-vscode-python-default-extension": "^21.0.1",
101
- "@codingame/monaco-vscode-remote-agent-service-override": "^21.0.1",
102
- "@codingame/monaco-vscode-search-result-default-extension": "^21.0.1",
103
- "@codingame/monaco-vscode-search-service-override": "^21.0.1",
104
- "@codingame/monaco-vscode-secret-storage-service-override": "^21.0.1",
105
- "@codingame/monaco-vscode-standalone-json-language-features": "^21.0.1",
106
- "@codingame/monaco-vscode-standalone-typescript-language-features": "^21.0.1",
107
- "@codingame/monaco-vscode-testing-service-override": "^21.0.1",
108
- "@codingame/monaco-vscode-storage-service-override": "^21.0.1",
109
- "@codingame/monaco-vscode-textmate-service-override": "^21.0.1",
110
- "@codingame/monaco-vscode-theme-defaults-default-extension": "^21.0.1",
111
- "@codingame/monaco-vscode-theme-service-override": "^21.0.1",
112
- "@codingame/monaco-vscode-typescript-basics-default-extension": "^21.0.1",
113
- "@codingame/monaco-vscode-typescript-language-features-default-extension": "^21.0.1",
114
- "@codingame/monaco-vscode-views-service-override": "^21.0.1",
115
- "@codingame/monaco-vscode-outline-service-override": "^21.0.1",
116
- "@typefox/monaco-editor-react": "~7.0.0-next.2",
85
+ "@codingame/monaco-vscode-configuration-service-override": "^21.1.0",
86
+ "@codingame/monaco-vscode-cpp-default-extension": "^21.1.0",
87
+ "@codingame/monaco-vscode-debug-service-override": "^21.1.0",
88
+ "@codingame/monaco-vscode-editor-api": "^21.1.0",
89
+ "@codingame/monaco-vscode-environment-service-override": "^21.1.0",
90
+ "@codingame/monaco-vscode-explorer-service-override": "^21.1.0",
91
+ "@codingame/monaco-vscode-files-service-override": "^21.1.0",
92
+ "@codingame/monaco-vscode-groovy-default-extension": "^21.1.0",
93
+ "@codingame/monaco-vscode-java-default-extension": "^21.1.0",
94
+ "@codingame/monaco-vscode-javascript-default-extension": "^21.1.0",
95
+ "@codingame/monaco-vscode-json-default-extension": "^21.1.0",
96
+ "@codingame/monaco-vscode-keybindings-service-override": "^21.1.0",
97
+ "@codingame/monaco-vscode-lifecycle-service-override": "^21.1.0",
98
+ "@codingame/monaco-vscode-localization-service-override": "^21.1.0",
99
+ "@codingame/monaco-vscode-preferences-service-override": "^21.1.0",
100
+ "@codingame/monaco-vscode-python-default-extension": "^21.1.0",
101
+ "@codingame/monaco-vscode-remote-agent-service-override": "^21.1.0",
102
+ "@codingame/monaco-vscode-search-result-default-extension": "^21.1.0",
103
+ "@codingame/monaco-vscode-search-service-override": "^21.1.0",
104
+ "@codingame/monaco-vscode-secret-storage-service-override": "^21.1.0",
105
+ "@codingame/monaco-vscode-standalone-json-language-features": "^21.1.0",
106
+ "@codingame/monaco-vscode-standalone-typescript-language-features": "^21.1.0",
107
+ "@codingame/monaco-vscode-testing-service-override": "^21.1.0",
108
+ "@codingame/monaco-vscode-storage-service-override": "^21.1.0",
109
+ "@codingame/monaco-vscode-textmate-service-override": "^21.1.0",
110
+ "@codingame/monaco-vscode-theme-defaults-default-extension": "^21.1.0",
111
+ "@codingame/monaco-vscode-theme-service-override": "^21.1.0",
112
+ "@codingame/monaco-vscode-typescript-basics-default-extension": "^21.1.0",
113
+ "@codingame/monaco-vscode-typescript-language-features-default-extension": "^21.1.0",
114
+ "@codingame/monaco-vscode-views-service-override": "^21.1.0",
115
+ "@codingame/monaco-vscode-outline-service-override": "^21.1.0",
116
+ "@typefox/monaco-editor-react": "~7.0.0",
117
117
  "cors": "~2.8.5",
118
118
  "express": "~5.1.0",
119
119
  "jszip": "~3.10.1",
120
120
  "langium": "~4.0.3",
121
- "monaco-languageclient": "~10.0.0-next.2",
121
+ "monaco-languageclient": "~10.0.0",
122
122
  "pyright": "~1.1.404",
123
123
  "react": "~19.1.1",
124
124
  "react-dom": "~19.1.1",
125
125
  "request-light": "~0.8.0",
126
- "vscode": "npm:@codingame/monaco-vscode-extension-api@^21.0.1",
126
+ "vscode": "npm:@codingame/monaco-vscode-extension-api@^21.1.0",
127
127
  "vscode-json-languageservice": "~5.6.1",
128
128
  "vscode-languageclient": "~9.0.1",
129
129
  "vscode-languageserver": "~9.0.1",
@@ -12,9 +12,6 @@ export const configurePostStart = async (apiWrapper: MonacoVscodeApiWrapper, con
12
12
  const result = apiWrapper.getExtensionRegisterResult('mlc-app-playground') as RegisterLocalProcessExtensionResult;
13
13
  result.setAsDefaultApi();
14
14
 
15
- // WA: Force show explorer and not search
16
- await vscode.commands.executeCommand('workbench.view.explorer');
17
-
18
15
  await Promise.all([
19
16
  await vscode.workspace.openTextDocument(configResult.helloTsUri),
20
17
  await vscode.workspace.openTextDocument(configResult.testerTsUri)
@@ -27,7 +27,6 @@ import '@codingame/monaco-vscode-typescript-language-features-default-extension'
27
27
 
28
28
  import '../../resources/vsix/open-collaboration-tools.vsix';
29
29
 
30
- import type { EditorAppConfig } from 'monaco-languageclient/editorApp';
31
30
  import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscodeApiLocales';
32
31
  import { defaultHtmlAugmentationInstructions, defaultViewsInit, type HtmlContainerConfig, type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
33
32
  import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
@@ -37,7 +36,6 @@ import { createDefaultWorkspaceContent } from '../common/client/utils.js';
37
36
 
38
37
  export type ConfigResult = {
39
38
  vscodeApiConfig: MonacoVscodeApiConfig;
40
- editorAppConfig: EditorAppConfig
41
39
  workspaceFileUri: vscode.Uri;
42
40
  helloTsUri: vscode.Uri;
43
41
  testerTsUri: vscode.Uri;
@@ -103,7 +101,7 @@ export const configure = async (htmlContainer: HtmlContainerConfig): Promise<Con
103
101
  'typescript.tsserver.web.projectWideIntellisense.suppressSemanticErrors': false,
104
102
  'editor.guides.bracketPairsHorizontal': true,
105
103
  'oct.serverUrl': 'https://api.open-collab.tools/',
106
- 'editor.experimental.asyncTokenization': false
104
+ 'editor.experimental.asyncTokenization': true
107
105
  })
108
106
  },
109
107
  extensions: [{
@@ -122,10 +120,6 @@ export const configure = async (htmlContainer: HtmlContainerConfig): Promise<Con
122
120
  monacoWorkerFactory: configureDefaultWorkerFactory
123
121
  };
124
122
 
125
- const editorAppConfig: EditorAppConfig = {
126
- id: 'AAP'
127
- };
128
-
129
123
  const workspaceUri = vscode.Uri.file('/workspace');
130
124
  const helloTsUri = vscode.Uri.file('/workspace/hello.ts');
131
125
  const testerTsUri = vscode.Uri.file('/workspace/tester.ts');
@@ -146,7 +140,6 @@ export const configure = async (htmlContainer: HtmlContainerConfig): Promise<Con
146
140
 
147
141
  return {
148
142
  vscodeApiConfig,
149
- editorAppConfig,
150
143
  workspaceFileUri,
151
144
  helloTsUri,
152
145
  testerTsUri
@@ -18,7 +18,6 @@ export const runApplicationPlaygroundReact = async () => {
18
18
  <div style={{ 'backgroundColor': '#1f1f1f' }}>
19
19
  <MonacoEditorReactComp
20
20
  vscodeApiConfig={configResult.vscodeApiConfig}
21
- editorAppConfig={configResult.editorAppConfig}
22
21
  onVscodeApiInitDone={async (apiWrapper) => {
23
22
  await configurePostStart(apiWrapper, configResult);
24
23
  }}
@@ -7,7 +7,7 @@ import { LanguageClientWrapper } from 'monaco-languageclient/lcwrapper';
7
7
  import { MonacoVscodeApiWrapper } from 'monaco-languageclient/vscodeApiWrapper';
8
8
  import * as vscode from 'vscode';
9
9
  import type { ExampleAppConfig } from '../../common/client/utils.js';
10
- import { setupLangiumClientExtended } from './config/extendedConfig.js';
10
+ import { setupLangiumClientExtended } from './config/langiumDslConfig.js';
11
11
 
12
12
  export const runLangiumGrammarDsl = async () => {
13
13
  try {
@@ -6,5 +6,5 @@
6
6
  import { initLocaleLoader } from 'monaco-languageclient/vscodeApiLocales';
7
7
  await initLocaleLoader();
8
8
 
9
- const { runStatemachineWrapper } = await import('./main.js');
10
- runStatemachineWrapper();
9
+ const { runStatemachine } = await import('./main.js');
10
+ runStatemachine();
@@ -3,17 +3,17 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
- import React, { StrictMode, useEffect, useState } from 'react';
6
+ import React, { StrictMode, useState } from 'react';
7
7
  import ReactDOM from 'react-dom/client';
8
8
  import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageclient/browser.js';
9
9
  import type { TextContents } from 'monaco-languageclient/editorApp';
10
10
  import { MonacoEditorReactComp } from '@typefox/monaco-editor-react';
11
- import { createLangiumGlobalConfig } from './config/wrapperStatemachineConfig.js';
11
+ import { createLangiumGlobalConfig } from './config/statemachineConfig.js';
12
12
  import { loadStatemachineWorkerRegular } from './main.js';
13
13
  import text from '../../../resources/langium/statemachine/example.statemachine?raw';
14
14
  import { disableElement } from '../../common/client/utils.js';
15
15
 
16
- export const runStatemachineReact = async () => {
16
+ export const runStatemachineReact = async (noControls: boolean) => {
17
17
  const worker = loadStatemachineWorkerRegular();
18
18
  const reader = new BrowserMessageReader(worker);
19
19
  const writer = new BrowserMessageWriter(worker);
@@ -31,60 +31,57 @@ export const runStatemachineReact = async () => {
31
31
  htmlContainer: 'ReactPlaceholder'
32
32
  });
33
33
  const root = ReactDOM.createRoot(document.getElementById('react-root')!);
34
+ const App = () => {
34
35
 
35
- try {
36
- document.querySelector('#button-start')?.addEventListener('click', async () => {
37
- disableElement('button-start', true);
38
- disableElement('button-dispose', false);
39
-
40
- const App = () => {
36
+ const [testState, setTestState] = useState<string>('');
41
37
 
42
- const [ height, setHeight ] = useState('80vh');
43
- const [testState, setTestState] = useState<string>('');
38
+ const onTextChanged = (textChanges: TextContents) => {
39
+ console.log(`text: ${textChanges.modified}\ntextOriginal: ${textChanges.original}`);
40
+ setTestState(textChanges.modified as string);
41
+ };
44
42
 
45
- const onTextChanged = (textChanges: TextContents) => {
46
- console.log(`text: ${textChanges.modified}\ntextOriginal: ${textChanges.original}`);
47
- setTestState(textChanges.modified as string);
48
- };
43
+ return (
44
+ <>
45
+ <div>
46
+ <MonacoEditorReactComp
47
+ style={{ 'height': '50vh' }}
48
+ vscodeApiConfig={appConfig.vscodeApiConfig}
49
+ editorAppConfig={appConfig.editorAppConfig}
50
+ languageClientConfig={appConfig.languageClientConfig}
51
+ onTextChanged={onTextChanged}
52
+ />
53
+ <b>Debug:</b><br />{testState}
54
+ </div>
55
+ </>
56
+ );
57
+ };
49
58
 
50
- useEffect(() => {
51
- const timer = setTimeout(() => {
52
- console.log('Updating styles');
53
- setHeight('50vh');
54
- }, 1000);
59
+ const renderApp = () => {
60
+ const strictMode = (document.getElementById('checkbox-strictmode')! as HTMLInputElement).checked;
61
+ if (strictMode) {
62
+ root.render(<StrictMode><App /></StrictMode>);
63
+ } else {
64
+ root.render(<App />);
65
+ }
66
+ };
55
67
 
56
- return () => clearTimeout(timer);
57
- }, []);
58
-
59
- return (
60
- <>
61
- <div style={{ 'height': height }} >
62
- <MonacoEditorReactComp
63
- style={{ 'height': '100%' }}
64
- vscodeApiConfig={appConfig.vscodeApiConfig}
65
- editorAppConfig={appConfig.editorAppConfig}
66
- languageClientConfig={appConfig.languageClientConfig}
67
- onTextChanged={onTextChanged}
68
- />
69
- <b>Debug:</b><br />{testState}
70
- </div>
71
- </>
72
- );
73
- };
74
- const strictMode = (document.getElementById('checkbox-strictmode')! as HTMLInputElement).checked;
75
- if (strictMode) {
76
- root.render(<StrictMode><App /></StrictMode>);
77
- } else {
78
- root.render(<App />);
79
- }
80
- disableElement('checkbox-strictmode', true);
81
- });
82
- document.querySelector('#button-dispose')?.addEventListener('click', () => {
83
- disableElement('button-start', false);
84
- disableElement('button-dispose', true);
68
+ try {
69
+ if (noControls) {
70
+ renderApp();
71
+ } else {
72
+ document.querySelector('#button-start')?.addEventListener('click', async () => {
73
+ disableElement('button-start', true);
74
+ disableElement('button-dispose', false);
75
+ renderApp();
76
+ disableElement('checkbox-strictmode', true);
77
+ });
78
+ document.querySelector('#button-dispose')?.addEventListener('click', () => {
79
+ disableElement('button-start', false);
80
+ disableElement('button-dispose', true);
85
81
 
86
- root.render([]);
87
- });
82
+ root.render([]);
83
+ });
84
+ }
88
85
  } catch (e) {
89
86
  console.error(e);
90
87
  }
@@ -6,7 +6,7 @@
6
6
  import * as vscode from 'vscode';
7
7
  import { BrowserMessageReader, BrowserMessageWriter } from 'vscode-languageclient/browser.js';
8
8
  import { EditorApp } from 'monaco-languageclient/editorApp';
9
- import { createLangiumGlobalConfig } from './config/wrapperStatemachineConfig.js';
9
+ import { createLangiumGlobalConfig } from './config/statemachineConfig.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';
@@ -119,7 +119,7 @@ const disposeEditor = async () => {
119
119
  console.log(editorApp2?.reportStatus().join('\n'));
120
120
  };
121
121
 
122
- export const runStatemachineWrapper = async () => {
122
+ export const runStatemachine = async () => {
123
123
  try {
124
124
  document.querySelector('#button-start')?.addEventListener('click', startEditor);
125
125
  document.querySelector('#button-dispose')?.addEventListener('click', disposeEditor);
@@ -0,0 +1,196 @@
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 { LogLevel } from '@codingame/monaco-vscode-api';
7
+ import { InMemoryFileSystemProvider, registerFileSystemOverlay, type IFileWriteOptions } from '@codingame/monaco-vscode-files-service-override';
8
+ import '@codingame/monaco-vscode-javascript-default-extension';
9
+ import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-service-override';
10
+ import '@codingame/monaco-vscode-typescript-basics-default-extension';
11
+ import '@codingame/monaco-vscode-typescript-language-features-default-extension';
12
+ import { EditorApp, type EditorAppConfig } from 'monaco-languageclient/editorApp';
13
+ import { MonacoVscodeApiWrapper, type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
14
+ import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
15
+ import * as vscode from 'vscode';
16
+ import { createDefaultWorkspaceContent, disableElement } from '../common/client/utils.js';
17
+
18
+ export const runTsWrapper = async () => {
19
+ disableElement('button-diff', true);
20
+
21
+ const code = `const takesString = (x: string) => {};
22
+
23
+ // you should see an error marker in the next line
24
+ takesString(0);`;
25
+
26
+ const codeOriginal = `const takesNumber = (x: number) => {};
27
+
28
+ // you should see an error marker in the next line
29
+ takesNumber(0);`;
30
+
31
+ const textEncoder = new TextEncoder();
32
+ const options: IFileWriteOptions = {
33
+ atomic: false,
34
+ unlock: false,
35
+ create: true,
36
+ overwrite: true
37
+ };
38
+ const workspaceUri = vscode.Uri.file('/workspace');
39
+ const workspaceFileUri = vscode.Uri.file('/workspace.code-workspace');
40
+ const codeUri = vscode.Uri.file('/workspace/hello.ts');
41
+ const codeOriginalUri = vscode.Uri.file('/workspace/goodbye.ts');
42
+ const fileSystemProvider = new InMemoryFileSystemProvider();
43
+ await fileSystemProvider.mkdir(workspaceUri);
44
+ await fileSystemProvider.writeFile(codeUri, textEncoder.encode(code), options);
45
+ await fileSystemProvider.writeFile(codeOriginalUri, textEncoder.encode(codeOriginal), options);
46
+ await fileSystemProvider.writeFile(workspaceFileUri, textEncoder.encode(createDefaultWorkspaceContent('/workspace')), options);
47
+ registerFileSystemOverlay(1, fileSystemProvider);
48
+
49
+ let currentOriginalCode = codeOriginal;
50
+ let currentOriginalCodeUri = codeOriginalUri;
51
+ let currentCode = code;
52
+ let currentCodeUri = codeUri;
53
+ let swapCode = false;
54
+ let diffEditor = false;
55
+
56
+ const htmlContainer = document.getElementById('monaco-editor-root')!;
57
+ const vscodeApiConfig: MonacoVscodeApiConfig = {
58
+ $type: 'extended',
59
+ viewsConfig: {
60
+ $type: 'EditorService',
61
+ htmlContainer
62
+ },
63
+ logLevel: LogLevel.Debug,
64
+ serviceOverrides: {
65
+ ...getKeybindingsServiceOverride()
66
+ },
67
+ advanced: {
68
+ enableExtHostWorker: true,
69
+ },
70
+ userConfiguration: {
71
+ json: JSON.stringify({
72
+ 'workbench.colorTheme': 'Default Dark Modern',
73
+ 'editor.wordBasedSuggestions': 'off',
74
+ 'typescript.tsserver.web.projectWideIntellisense.enabled': true,
75
+ 'typescript.tsserver.web.projectWideIntellisense.suppressSemanticErrors': false,
76
+ 'diffEditor.renderSideBySide': false,
77
+ 'editor.guides.bracketPairsHorizontal': true,
78
+ 'editor.experimental.asyncTokenization': true
79
+ })
80
+ },
81
+ workspaceConfig: {
82
+ enableWorkspaceTrust: true,
83
+ workspaceProvider: {
84
+ trusted: true,
85
+ async open() {
86
+ window.open(window.location.href);
87
+ return true;
88
+ },
89
+ workspace: {
90
+ workspaceUri: workspaceFileUri
91
+ }
92
+ }
93
+ },
94
+ monacoWorkerFactory: configureDefaultWorkerFactory
95
+ };
96
+
97
+ // perform global monaco-vscode-api init
98
+ const apiWrapper = new MonacoVscodeApiWrapper(vscodeApiConfig);
99
+ await apiWrapper.start();
100
+
101
+ let editorApp: EditorApp | undefined = undefined;
102
+
103
+ const createEditorAppConfig = (useDiffEditor: boolean): EditorAppConfig => {
104
+ return {
105
+ codeResources: {
106
+ modified: {
107
+ text: currentCode,
108
+ uri: currentCodeUri.path
109
+ },
110
+ original: {
111
+ text: currentOriginalCode,
112
+ uri: currentOriginalCodeUri.path,
113
+ }
114
+ },
115
+ useDiffEditor: useDiffEditor
116
+ };
117
+ };
118
+
119
+ const swapCurrentCode = () => {
120
+ swapCode = !swapCode;
121
+ if (swapCode) {
122
+ currentCode = codeOriginal;
123
+ currentCodeUri = codeOriginalUri;
124
+ currentOriginalCode = code;
125
+ currentOriginalCodeUri = codeUri;
126
+ } else {
127
+ currentCode = code;
128
+ currentCodeUri = codeUri;
129
+ currentOriginalCode = codeOriginal;
130
+ currentOriginalCodeUri = codeOriginalUri;
131
+ }
132
+ };
133
+
134
+ const updateEditorCodeResources = async (editorApp: EditorApp) => {
135
+ await editorApp.updateCodeResources({
136
+ modified: {
137
+ text: currentCode,
138
+ uri: currentCodeUri.path
139
+ },
140
+ original: {
141
+ text: currentOriginalCode,
142
+ uri: currentOriginalCodeUri.path
143
+ }
144
+ });
145
+ };
146
+
147
+ try {
148
+ document.querySelector('#button-start')?.addEventListener('click', async () => {
149
+ disableElement('button-start', true);
150
+ disableElement('button-diff', false);
151
+ editorApp = new EditorApp(createEditorAppConfig(diffEditor));
152
+ await editorApp.start(htmlContainer);
153
+
154
+ await vscode.workspace.openTextDocument(codeUri);
155
+ await vscode.workspace.openTextDocument(codeOriginalUri);
156
+
157
+ vscode.commands.getCommands().then((x) => {
158
+ console.log(`Found ${x.length} commands`);
159
+ const finding = x.find((elem) => elem === 'actions.find');
160
+ console.log(`Found command: ${finding}`);
161
+ });
162
+
163
+ editorApp.getEditor()?.focus();
164
+ await vscode.commands.executeCommand('actions.find');
165
+
166
+ await updateEditorCodeResources(editorApp);
167
+ });
168
+ document.querySelector('#button-swap-code')?.addEventListener('click', async () => {
169
+ swapCurrentCode();
170
+
171
+ if (editorApp !== undefined) {
172
+ await updateEditorCodeResources(editorApp);
173
+ }
174
+ });
175
+ document.querySelector('#button-diff')?.addEventListener('click', async () => {
176
+ diffEditor = !diffEditor;
177
+ const editorAppConfig = createEditorAppConfig(diffEditor);
178
+
179
+ if (editorApp !== undefined) {
180
+ await editorApp.dispose();
181
+ }
182
+ editorApp = new EditorApp(editorAppConfig);
183
+ await editorApp.start(htmlContainer);
184
+ await updateEditorCodeResources(editorApp);
185
+ });
186
+ document.querySelector('#button-dispose')?.addEventListener('click', async () => {
187
+ disableElement('button-start', false);
188
+ disableElement('button-diff', true);
189
+
190
+ await editorApp?.dispose();
191
+ });
192
+ } catch (e) {
193
+ console.error(e);
194
+ }
195
+ };
196
+
package/tsExtHost.html CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  <div id="monaco-editor-root" style="height: 80vh;"></div>
22
22
  <script type="module">
23
- import { runTsWrapper } from './src/ts/wrapperTs.ts';
23
+ import { runTsWrapper } from './src/ts/clientTs.ts';
24
24
 
25
25
  runTsWrapper();
26
26
  </script>
@@ -1 +0,0 @@
1
- {"version":3,"file":"extendedConfig.d.ts","sourceRoot":"","sources":["../../../../src/langium/langium-dsl/config/extendedConfig.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAKxE,eAAO,MAAM,0BAA0B,QAAa,OAAO,CAAC,gBAAgB,CAqI3E,CAAC"}