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.
- package/CHANGELOG.md +2 -2
- package/dist/appPlayground/common.d.ts.map +1 -1
- package/dist/appPlayground/common.js +0 -2
- package/dist/appPlayground/common.js.map +1 -1
- package/dist/appPlayground/config.d.ts +0 -2
- package/dist/appPlayground/config.d.ts.map +1 -1
- package/dist/appPlayground/config.js +1 -5
- package/dist/appPlayground/config.js.map +1 -1
- package/dist/appPlayground/reactMain.d.ts.map +1 -1
- package/dist/appPlayground/reactMain.js +1 -1
- package/dist/appPlayground/reactMain.js.map +1 -1
- package/dist/langium/langium-dsl/config/{extendedConfig.d.ts → langiumDslConfig.d.ts} +1 -1
- package/dist/langium/langium-dsl/config/langiumDslConfig.d.ts.map +1 -0
- package/dist/langium/langium-dsl/config/{extendedConfig.js → langiumDslConfig.js} +1 -1
- package/dist/langium/langium-dsl/config/langiumDslConfig.js.map +1 -0
- package/dist/langium/langium-dsl/main.js +1 -1
- package/dist/langium/langium-dsl/main.js.map +1 -1
- package/dist/langium/statemachine/config/{wrapperStatemachineConfig.d.ts → statemachineConfig.d.ts} +1 -1
- package/dist/langium/statemachine/config/statemachineConfig.d.ts.map +1 -0
- package/dist/langium/statemachine/config/{wrapperStatemachineConfig.js → statemachineConfig.js} +1 -1
- package/dist/langium/statemachine/config/statemachineConfig.js.map +1 -0
- package/dist/langium/statemachine/launcher.js +2 -2
- package/dist/langium/statemachine/launcher.js.map +1 -1
- package/dist/langium/statemachine/main-react.d.ts +1 -1
- package/dist/langium/statemachine/main-react.d.ts.map +1 -1
- package/dist/langium/statemachine/main-react.js +42 -42
- package/dist/langium/statemachine/main-react.js.map +1 -1
- package/dist/langium/statemachine/main.d.ts +1 -1
- package/dist/langium/statemachine/main.d.ts.map +1 -1
- package/dist/langium/statemachine/main.js +2 -2
- package/dist/langium/statemachine/main.js.map +1 -1
- package/dist/ts/{wrapperTs.d.ts → clientTs.d.ts} +1 -1
- package/dist/ts/clientTs.d.ts.map +1 -0
- package/dist/ts/clientTs.js +178 -0
- package/dist/ts/clientTs.js.map +1 -0
- package/ghp_langium_extended.html +1 -3
- package/ghp_react_statemachine.html +1 -4
- package/ghp_tsExtHost.html +1 -1
- package/index.html +10 -22
- package/package.json +35 -35
- package/src/appPlayground/common.ts +0 -3
- package/src/appPlayground/config.ts +1 -8
- package/src/appPlayground/reactMain.tsx +0 -1
- package/src/langium/langium-dsl/main.ts +1 -1
- package/src/langium/statemachine/launcher.ts +2 -2
- package/src/langium/statemachine/main-react.tsx +48 -51
- package/src/langium/statemachine/main.ts +2 -2
- package/src/ts/clientTs.ts +196 -0
- package/tsExtHost.html +1 -1
- package/dist/langium/langium-dsl/config/extendedConfig.d.ts.map +0 -1
- package/dist/langium/langium-dsl/config/extendedConfig.js.map +0 -1
- package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts.map +0 -1
- package/dist/langium/statemachine/config/wrapperStatemachineConfig.js.map +0 -1
- package/dist/ts/wrapperTs.d.ts.map +0 -1
- package/dist/ts/wrapperTs.js +0 -122
- package/dist/ts/wrapperTs.js.map +0 -1
- package/src/ts/wrapperTs.ts +0 -131
- /package/src/langium/langium-dsl/config/{extendedConfig.ts → langiumDslConfig.ts} +0 -0
- /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
|
|
package/ghp_tsExtHost.html
CHANGED
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">
|
|
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">
|
|
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
|
-
|
|
23
|
+
-> 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">
|
|
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">
|
|
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">
|
|
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
|
|
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
|
|
86
|
-
"@codingame/monaco-vscode-cpp-default-extension": "^21.0
|
|
87
|
-
"@codingame/monaco-vscode-debug-service-override": "^21.0
|
|
88
|
-
"@codingame/monaco-vscode-editor-api": "^21.0
|
|
89
|
-
"@codingame/monaco-vscode-environment-service-override": "^21.0
|
|
90
|
-
"@codingame/monaco-vscode-explorer-service-override": "^21.0
|
|
91
|
-
"@codingame/monaco-vscode-files-service-override": "^21.0
|
|
92
|
-
"@codingame/monaco-vscode-groovy-default-extension": "^21.0
|
|
93
|
-
"@codingame/monaco-vscode-java-default-extension": "^21.0
|
|
94
|
-
"@codingame/monaco-vscode-javascript-default-extension": "^21.0
|
|
95
|
-
"@codingame/monaco-vscode-json-default-extension": "^21.0
|
|
96
|
-
"@codingame/monaco-vscode-keybindings-service-override": "^21.0
|
|
97
|
-
"@codingame/monaco-vscode-lifecycle-service-override": "^21.0
|
|
98
|
-
"@codingame/monaco-vscode-localization-service-override": "^21.0
|
|
99
|
-
"@codingame/monaco-vscode-preferences-service-override": "^21.0
|
|
100
|
-
"@codingame/monaco-vscode-python-default-extension": "^21.0
|
|
101
|
-
"@codingame/monaco-vscode-remote-agent-service-override": "^21.0
|
|
102
|
-
"@codingame/monaco-vscode-search-result-default-extension": "^21.0
|
|
103
|
-
"@codingame/monaco-vscode-search-service-override": "^21.0
|
|
104
|
-
"@codingame/monaco-vscode-secret-storage-service-override": "^21.0
|
|
105
|
-
"@codingame/monaco-vscode-standalone-json-language-features": "^21.0
|
|
106
|
-
"@codingame/monaco-vscode-standalone-typescript-language-features": "^21.0
|
|
107
|
-
"@codingame/monaco-vscode-testing-service-override": "^21.0
|
|
108
|
-
"@codingame/monaco-vscode-storage-service-override": "^21.0
|
|
109
|
-
"@codingame/monaco-vscode-textmate-service-override": "^21.0
|
|
110
|
-
"@codingame/monaco-vscode-theme-defaults-default-extension": "^21.0
|
|
111
|
-
"@codingame/monaco-vscode-theme-service-override": "^21.0
|
|
112
|
-
"@codingame/monaco-vscode-typescript-basics-default-extension": "^21.0
|
|
113
|
-
"@codingame/monaco-vscode-typescript-language-features-default-extension": "^21.0
|
|
114
|
-
"@codingame/monaco-vscode-views-service-override": "^21.0
|
|
115
|
-
"@codingame/monaco-vscode-outline-service-override": "^21.0
|
|
116
|
-
"@typefox/monaco-editor-react": "~7.0.0
|
|
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
|
|
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
|
|
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':
|
|
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/
|
|
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 {
|
|
10
|
-
|
|
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,
|
|
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/
|
|
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
|
-
|
|
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
|
-
|
|
43
|
-
|
|
38
|
+
const onTextChanged = (textChanges: TextContents) => {
|
|
39
|
+
console.log(`text: ${textChanges.modified}\ntextOriginal: ${textChanges.original}`);
|
|
40
|
+
setTestState(textChanges.modified as string);
|
|
41
|
+
};
|
|
44
42
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
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/
|
|
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
|
|
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
|
@@ -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"}
|