monaco-languageclient-examples 2025.9.1-next.0 → 2025.9.2

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 (179) hide show
  1. package/CHANGELOG.md +10 -2
  2. package/README.md +1 -1
  3. package/dist/appPlayground/common.d.ts.map +1 -1
  4. package/dist/appPlayground/common.js +0 -2
  5. package/dist/appPlayground/common.js.map +1 -1
  6. package/dist/appPlayground/config.d.ts +2 -4
  7. package/dist/appPlayground/config.d.ts.map +1 -1
  8. package/dist/appPlayground/config.js +1 -5
  9. package/dist/appPlayground/config.js.map +1 -1
  10. package/dist/appPlayground/main.js.map +1 -1
  11. package/dist/appPlayground/reactMain.d.ts.map +1 -1
  12. package/dist/appPlayground/reactMain.js +6 -7
  13. package/dist/appPlayground/reactMain.js.map +1 -1
  14. package/dist/browser/main.d.ts.map +1 -1
  15. package/dist/browser/main.js +3 -2
  16. package/dist/browser/main.js.map +1 -1
  17. package/dist/clangd/client/config.d.ts.map +1 -1
  18. package/dist/clangd/client/config.js.map +1 -1
  19. package/dist/clangd/client/main.js.map +1 -1
  20. package/dist/clangd/client/mainRemoteMessageChannelFs.d.ts.map +1 -1
  21. package/dist/clangd/client/mainRemoteMessageChannelFs.js.map +1 -1
  22. package/dist/clangd/client/workerHandler.d.ts.map +1 -1
  23. package/dist/clangd/client/workerHandler.js.map +1 -1
  24. package/dist/clangd/worker/clangd-server.d.ts +0 -18
  25. package/dist/clangd/worker/clangd-server.d.ts.map +1 -1
  26. package/dist/clangd/worker/clangd-server.js +1 -1
  27. package/dist/clangd/worker/clangd-server.js.map +1 -1
  28. package/dist/clangd/worker/json_stream.d.ts.map +1 -1
  29. package/dist/clangd/worker/json_stream.js.map +1 -1
  30. package/dist/clangd/worker/memfs-tools.d.ts.map +1 -1
  31. package/dist/clangd/worker/memfs-tools.js.map +1 -1
  32. package/dist/clangd/worker/workerRemoteMessageChannelFs.d.ts +1 -2
  33. package/dist/clangd/worker/workerRemoteMessageChannelFs.d.ts.map +1 -1
  34. package/dist/clangd/worker/workerRemoteMessageChannelFs.js +1 -6
  35. package/dist/clangd/worker/workerRemoteMessageChannelFs.js.map +1 -1
  36. package/dist/common/client/extendedClient.d.ts.map +1 -1
  37. package/dist/common/client/extendedClient.js +1 -1
  38. package/dist/common/client/extendedClient.js.map +1 -1
  39. package/dist/common/client/utils.d.ts.map +1 -1
  40. package/dist/common/client/utils.js +0 -4
  41. package/dist/common/client/utils.js.map +1 -1
  42. package/dist/common/node/language-server-runner.d.ts.map +1 -1
  43. package/dist/common/node/language-server-runner.js.map +1 -1
  44. package/dist/common/node/server-commons.d.ts +3 -9
  45. package/dist/common/node/server-commons.d.ts.map +1 -1
  46. package/dist/common/node/server-commons.js +0 -7
  47. package/dist/common/node/server-commons.js.map +1 -1
  48. package/dist/debugger/client/debugger.d.ts.map +1 -1
  49. package/dist/debugger/client/debugger.js.map +1 -1
  50. package/dist/debugger/common/definitions.d.ts +1 -2
  51. package/dist/debugger/common/definitions.d.ts.map +1 -1
  52. package/dist/debugger/common/definitions.js.map +1 -1
  53. package/dist/debugger/server/DAPSocket.d.ts.map +1 -1
  54. package/dist/debugger/server/DAPSocket.js.map +1 -1
  55. package/dist/debugger/server/debugServer.js.map +1 -1
  56. package/dist/eclipse.jdt.ls/client/main.js.map +1 -1
  57. package/dist/eclipse.jdt.ls/config.js +0 -4
  58. package/dist/eclipse.jdt.ls/config.js.map +1 -1
  59. package/dist/eclipse.jdt.ls/server/main.d.ts.map +1 -1
  60. package/dist/eclipse.jdt.ls/server/main.js +1 -2
  61. package/dist/eclipse.jdt.ls/server/main.js.map +1 -1
  62. package/dist/groovy/client/main.js.map +1 -1
  63. package/dist/groovy/config.js +0 -4
  64. package/dist/groovy/config.js.map +1 -1
  65. package/dist/groovy/server/main.d.ts.map +1 -1
  66. package/dist/groovy/server/main.js +1 -2
  67. package/dist/groovy/server/main.js.map +1 -1
  68. package/dist/json/client/classic.d.ts +1 -1
  69. package/dist/json/client/classic.d.ts.map +1 -1
  70. package/dist/json/client/classic.js +1 -1
  71. package/dist/json/client/classic.js.map +1 -1
  72. package/dist/json/client/config.js +0 -4
  73. package/dist/json/client/config.js.map +1 -1
  74. package/dist/json/client/extended.js.map +1 -1
  75. package/dist/json/server/direct.js.map +1 -1
  76. package/dist/json/server/json-server.d.ts.map +1 -1
  77. package/dist/json/server/json-server.js.map +1 -1
  78. package/dist/json/server/main.d.ts.map +1 -1
  79. package/dist/json/server/main.js +3 -4
  80. package/dist/json/server/main.js.map +1 -1
  81. package/dist/langium/langium-dsl/config/langium.monarch.d.ts +10 -10
  82. package/dist/langium/langium-dsl/config/{extendedConfig.d.ts → langiumDslConfig.d.ts} +1 -1
  83. package/dist/langium/langium-dsl/config/langiumDslConfig.d.ts.map +1 -0
  84. package/dist/langium/langium-dsl/config/{extendedConfig.js → langiumDslConfig.js} +1 -1
  85. package/dist/langium/langium-dsl/config/langiumDslConfig.js.map +1 -0
  86. package/dist/langium/langium-dsl/main.js +1 -1
  87. package/dist/langium/langium-dsl/main.js.map +1 -1
  88. package/dist/langium/langium-dsl/worker/langium-server.js.map +1 -1
  89. package/dist/langium/statemachine/config/{wrapperStatemachineConfig.d.ts → statemachineConfig.d.ts} +4 -5
  90. package/dist/langium/statemachine/config/statemachineConfig.d.ts.map +1 -0
  91. package/dist/langium/statemachine/config/{wrapperStatemachineConfig.js → statemachineConfig.js} +1 -1
  92. package/dist/langium/statemachine/config/statemachineConfig.js.map +1 -0
  93. package/dist/langium/statemachine/launcher.js +2 -2
  94. package/dist/langium/statemachine/launcher.js.map +1 -1
  95. package/dist/langium/statemachine/ls/generated/ast.d.ts +6 -6
  96. package/dist/langium/statemachine/ls/generated/ast.js +1 -1
  97. package/dist/langium/statemachine/ls/generated/ast.js.map +1 -1
  98. package/dist/langium/statemachine/ls/generated/grammar.d.ts +1 -1
  99. package/dist/langium/statemachine/ls/generated/grammar.d.ts.map +1 -1
  100. package/dist/langium/statemachine/ls/generated/grammar.js +0 -4
  101. package/dist/langium/statemachine/ls/generated/grammar.js.map +1 -1
  102. package/dist/langium/statemachine/ls/generated/module.d.ts +1 -1
  103. package/dist/langium/statemachine/ls/generated/module.js +0 -4
  104. package/dist/langium/statemachine/ls/generated/module.js.map +1 -1
  105. package/dist/langium/statemachine/ls/statemachine-module.js.map +1 -1
  106. package/dist/langium/statemachine/ls/statemachine-validator.d.ts.map +1 -1
  107. package/dist/langium/statemachine/ls/statemachine-validator.js +0 -4
  108. package/dist/langium/statemachine/ls/statemachine-validator.js.map +1 -1
  109. package/dist/langium/statemachine/main-react.d.ts +1 -1
  110. package/dist/langium/statemachine/main-react.d.ts.map +1 -1
  111. package/dist/langium/statemachine/main-react.js +37 -44
  112. package/dist/langium/statemachine/main-react.js.map +1 -1
  113. package/dist/langium/statemachine/main.d.ts +1 -1
  114. package/dist/langium/statemachine/main.d.ts.map +1 -1
  115. package/dist/langium/statemachine/main.js +5 -4
  116. package/dist/langium/statemachine/main.js.map +1 -1
  117. package/dist/langium/statemachine/worker/statemachine-server-port.js.map +1 -1
  118. package/dist/langium/statemachine/worker/statemachine-server-start.d.ts +1 -1
  119. package/dist/langium/statemachine/worker/statemachine-server-start.d.ts.map +1 -1
  120. package/dist/langium/statemachine/worker/statemachine-server-start.js.map +1 -1
  121. package/dist/multi/config.js.map +1 -1
  122. package/dist/multi/twoLanguageClients.d.ts.map +1 -1
  123. package/dist/multi/twoLanguageClients.js +3 -2
  124. package/dist/multi/twoLanguageClients.js.map +1 -1
  125. package/dist/python/client/config.d.ts +2 -2
  126. package/dist/python/client/config.d.ts.map +1 -1
  127. package/dist/python/client/config.js.map +1 -1
  128. package/dist/python/client/main.js.map +1 -1
  129. package/dist/python/client/reactPython.js +3 -4
  130. package/dist/python/client/reactPython.js.map +1 -1
  131. package/dist/python/server/direct.js.map +1 -1
  132. package/dist/python/server/main.d.ts.map +1 -1
  133. package/dist/python/server/main.js +2 -3
  134. package/dist/python/server/main.js.map +1 -1
  135. package/dist/ts/{wrapperTs.d.ts → clientTs.d.ts} +1 -1
  136. package/dist/ts/clientTs.d.ts.map +1 -0
  137. package/dist/ts/clientTs.js +178 -0
  138. package/dist/ts/clientTs.js.map +1 -0
  139. package/ghp_langium_extended.html +1 -3
  140. package/ghp_react_statemachine.html +1 -4
  141. package/ghp_tsExtHost.html +1 -1
  142. package/index.html +10 -22
  143. package/package.json +41 -41
  144. package/src/appPlayground/common.ts +0 -3
  145. package/src/appPlayground/config.ts +3 -10
  146. package/src/appPlayground/reactMain.tsx +1 -2
  147. package/src/browser/main.ts +3 -2
  148. package/src/clangd/worker/workerRemoteMessageChannelFs.ts +2 -3
  149. package/src/common/client/extendedClient.ts +1 -1
  150. package/src/common/client/utils.ts +1 -2
  151. package/src/common/node/server-commons.ts +1 -8
  152. package/src/debugger/common/definitions.ts +1 -2
  153. package/src/eclipse.jdt.ls/server/main.ts +1 -2
  154. package/src/groovy/server/main.ts +1 -2
  155. package/src/json/client/classic.ts +1 -1
  156. package/src/json/server/main.ts +4 -5
  157. package/src/langium/langium-dsl/main.ts +1 -1
  158. package/src/langium/statemachine/config/langium-config.json +1 -1
  159. package/src/langium/statemachine/config/{wrapperStatemachineConfig.ts → statemachineConfig.ts} +2 -2
  160. package/src/langium/statemachine/launcher.ts +2 -2
  161. package/src/langium/statemachine/ls/generated/ast.ts +1 -1
  162. package/src/langium/statemachine/ls/generated/grammar.ts +1 -1
  163. package/src/langium/statemachine/ls/generated/module.ts +1 -1
  164. package/src/langium/statemachine/main-react.tsx +49 -53
  165. package/src/langium/statemachine/main.ts +5 -4
  166. package/src/multi/twoLanguageClients.ts +3 -2
  167. package/src/python/client/config.ts +2 -2
  168. package/src/python/server/main.ts +2 -3
  169. package/src/ts/clientTs.ts +196 -0
  170. package/tsExtHost.html +1 -1
  171. package/dist/langium/langium-dsl/config/extendedConfig.d.ts.map +0 -1
  172. package/dist/langium/langium-dsl/config/extendedConfig.js.map +0 -1
  173. package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts.map +0 -1
  174. package/dist/langium/statemachine/config/wrapperStatemachineConfig.js.map +0 -1
  175. package/dist/ts/wrapperTs.d.ts.map +0 -1
  176. package/dist/ts/wrapperTs.js +0 -122
  177. package/dist/ts/wrapperTs.js.map +0 -1
  178. package/src/ts/wrapperTs.ts +0 -131
  179. /package/src/langium/langium-dsl/config/{extendedConfig.ts → langiumDslConfig.ts} +0 -0
@@ -3,7 +3,6 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
- import type { IStoredWorkspace } from '@codingame/monaco-vscode-configuration-service-override';
7
6
  import type { EditorAppConfig } from 'monaco-languageclient/editorApp';
8
7
  import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
9
8
  import type { MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
@@ -17,7 +16,7 @@ export const disableElement = (id: string, disabled: boolean) => {
17
16
 
18
17
  export const createDefaultWorkspaceContent = (workspacePath: string) => {
19
18
  return JSON.stringify(
20
- <IStoredWorkspace>{
19
+ {
21
20
  folders: [
22
21
  {
23
22
  path: workspacePath
@@ -13,18 +13,11 @@ import { type IWebSocket, WebSocketMessageReader, WebSocketMessageWriter } from
13
13
  import { createConnection, createServerProcess, forward } from 'vscode-ws-jsonrpc/server';
14
14
  import { Message, InitializeRequest, type InitializeParams, type RequestMessage, type ResponseMessage } from 'vscode-languageserver-protocol';
15
15
 
16
- export enum LanguageName {
17
- /** https://nodejs.org/api/cli.html */
18
- node = 'node',
19
- /** https://docs.oracle.com/en/java/javase/21/docs/specs/man/java.html */
20
- java = 'java'
21
- }
22
-
23
16
  export interface LanguageServerRunConfig {
24
17
  serverName: string;
25
18
  pathName: string;
26
19
  serverPort: number;
27
- runCommand: LanguageName | string;
20
+ runCommand: string;
28
21
  runCommandArgs: string[];
29
22
  wsServerOptions: ServerOptions,
30
23
  spawnOptions?: cp.SpawnOptions;
@@ -4,7 +4,6 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import { RegisteredMemoryFile } from '@codingame/monaco-vscode-files-service-override';
7
- import type { HtmlContainerConfig } from 'monaco-languageclient/vscodeApiWrapper';
8
7
  import { Uri } from 'vscode';
9
8
 
10
9
  export type FileDefinition = {
@@ -27,7 +26,7 @@ export type ConfigParams = {
27
26
  homeDir: string;
28
27
  workspaceRoot: string;
29
28
  workspaceFile: Uri;
30
- htmlContainer: HtmlContainerConfig;
29
+ htmlContainer: HTMLElement;
31
30
  protocol: 'ws' | 'wss';
32
31
  hostname: string;
33
32
  port: number;
@@ -4,7 +4,6 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import { runLanguageServer } from '../../common/node/language-server-runner.js';
7
- import { LanguageName } from '../../common/node/server-commons.js';
8
7
  import { eclipseJdtLsConfig } from '../config.js';
9
8
 
10
9
  export const runEclipseJdtLs = () => {
@@ -12,7 +11,7 @@ export const runEclipseJdtLs = () => {
12
11
  serverName: 'Eclipse JDT LS',
13
12
  pathName: eclipseJdtLsConfig.path,
14
13
  serverPort: eclipseJdtLsConfig.port,
15
- runCommand: LanguageName.java,
14
+ runCommand: 'java',
16
15
  runCommandArgs: [
17
16
  '-Declipse.application=org.eclipse.jdt.ls.core.id1',
18
17
  '-Dosgi.bundles.defaultStartLevel=4',
@@ -4,7 +4,6 @@
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
6
  import { runLanguageServer } from '../../common/node/language-server-runner.js';
7
- import { LanguageName } from '../../common/node/server-commons.js';
8
7
  import { groovyConfig } from '../config.js';
9
8
 
10
9
  export const runGroovyLanguageServer = () => {
@@ -12,7 +11,7 @@ export const runGroovyLanguageServer = () => {
12
11
  serverName: 'GROOVY',
13
12
  pathName: groovyConfig.path,
14
13
  serverPort: groovyConfig.port,
15
- runCommand: LanguageName.java,
14
+ runCommand: 'java',
16
15
  runCommandArgs: [
17
16
  '-jar',
18
17
  `${groovyConfig.basePath}/lib/groovy-language-server-all.jar`
@@ -53,7 +53,7 @@ export const runClient = async () => {
53
53
  }
54
54
  };
55
55
  const editorApp = new EditorApp(editorAppConfig);
56
- await editorApp.start(apiWrapper.getHtmlContainer());
56
+ await editorApp.start(htmlContainer);
57
57
 
58
58
  const languageClientConfig: LanguageClientConfig = {
59
59
  languageId,
@@ -3,19 +3,18 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
- import { resolve } from 'node:path';
7
6
  import cors from 'cors';
8
-
9
- import { runLanguageServer } from '../../common/node/language-server-runner.js';
10
- import { LanguageName } from '../../common/node/server-commons.js';
11
7
  import express from 'express';
8
+ import { resolve } from 'node:path';
9
+ import { runLanguageServer } from '../../common/node/language-server-runner.js';
10
+
12
11
  export const runJsonServer = (baseDir: string, relativeDir: string) => {
13
12
  const processRunPath = resolve(baseDir, relativeDir);
14
13
  runLanguageServer({
15
14
  serverName: 'JSON',
16
15
  pathName: '/sampleServer',
17
16
  serverPort: 30000,
18
- runCommand: LanguageName.node,
17
+ runCommand: 'node',
19
18
  runCommandArgs: [
20
19
  processRunPath,
21
20
  '--stdio'
@@ -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 {
@@ -13,4 +13,4 @@
13
13
  }
14
14
  }
15
15
  ]
16
- }
16
+ }
@@ -9,7 +9,7 @@ import getLocalizationServiceOverride from '@codingame/monaco-vscode-localizatio
9
9
  import { LogLevel } from '@codingame/monaco-vscode-api';
10
10
  import { MessageTransports } from 'vscode-languageclient';
11
11
  import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscodeApiLocales';
12
- import type { HtmlContainerConfig, MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
12
+ import type { MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
13
13
  import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
14
14
  import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
15
15
  import type { CodeContent, EditorAppConfig } from 'monaco-languageclient/editorApp';
@@ -25,7 +25,7 @@ export const createLangiumGlobalConfig = (params: {
25
25
  worker: Worker,
26
26
  messagePort?: MessagePort,
27
27
  messageTransports?: MessageTransports,
28
- htmlContainer: HtmlContainerConfig
28
+ htmlContainer?: HTMLElement
29
29
  }): ExampleAppConfig => {
30
30
  const extensionFilesOrContents = new Map<string, string | URL>();
31
31
  extensionFilesOrContents.set(`/${params.languageServerId}-statemachine-configuration.json`, statemachineLanguageConfig);
@@ -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();
@@ -1,5 +1,5 @@
1
1
  /******************************************************************************
2
- * This file was generated by langium-cli 4.0.0.
2
+ * This file was generated by langium-cli 4.1.0.
3
3
  * DO NOT EDIT MANUALLY!
4
4
  ******************************************************************************/
5
5
 
@@ -1,5 +1,5 @@
1
1
  /******************************************************************************
2
- * This file was generated by langium-cli 4.0.0.
2
+ * This file was generated by langium-cli 4.1.0.
3
3
  * DO NOT EDIT MANUALLY!
4
4
  ******************************************************************************/
5
5
 
@@ -1,5 +1,5 @@
1
1
  /******************************************************************************
2
- * This file was generated by langium-cli 4.0.0.
2
+ * This file was generated by langium-cli 4.1.0.
3
3
  * DO NOT EDIT MANUALLY!
4
4
  ******************************************************************************/
5
5
 
@@ -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);
@@ -27,64 +27,60 @@ export const runStatemachineReact = async () => {
27
27
  uri: '/workspace/example.statemachine'
28
28
  },
29
29
  worker,
30
- messageTransports: { reader, writer },
31
- htmlContainer: 'ReactPlaceholder'
30
+ messageTransports: { reader, writer }
32
31
  });
33
32
  const root = ReactDOM.createRoot(document.getElementById('react-root')!);
33
+ const App = () => {
34
34
 
35
- try {
36
- document.querySelector('#button-start')?.addEventListener('click', async () => {
37
- disableElement('button-start', true);
38
- disableElement('button-dispose', false);
39
-
40
- const App = () => {
35
+ const [testState, setTestState] = useState<string>('');
41
36
 
42
- const [ height, setHeight ] = useState('80vh');
43
- const [testState, setTestState] = useState<string>('');
37
+ const onTextChanged = (textChanges: TextContents) => {
38
+ console.log(`text: ${textChanges.modified}\ntextOriginal: ${textChanges.original}`);
39
+ setTestState(textChanges.modified as string);
40
+ };
44
41
 
45
- const onTextChanged = (textChanges: TextContents) => {
46
- console.log(`text: ${textChanges.modified}\ntextOriginal: ${textChanges.original}`);
47
- setTestState(textChanges.modified as string);
48
- };
42
+ return (
43
+ <>
44
+ <div>
45
+ <MonacoEditorReactComp
46
+ style={{ 'height': '50vh' }}
47
+ vscodeApiConfig={appConfig.vscodeApiConfig}
48
+ editorAppConfig={appConfig.editorAppConfig}
49
+ languageClientConfig={appConfig.languageClientConfig}
50
+ onTextChanged={onTextChanged}
51
+ />
52
+ <b>Debug:</b><br />{testState}
53
+ </div>
54
+ </>
55
+ );
56
+ };
49
57
 
50
- useEffect(() => {
51
- const timer = setTimeout(() => {
52
- console.log('Updating styles');
53
- setHeight('50vh');
54
- }, 1000);
58
+ const renderApp = () => {
59
+ const strictMode = (document.getElementById('checkbox-strictmode')! as HTMLInputElement).checked;
60
+ if (strictMode) {
61
+ root.render(<StrictMode><App /></StrictMode>);
62
+ } else {
63
+ root.render(<App />);
64
+ }
65
+ };
55
66
 
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);
67
+ try {
68
+ if (noControls) {
69
+ renderApp();
70
+ } else {
71
+ document.querySelector('#button-start')?.addEventListener('click', async () => {
72
+ disableElement('button-start', true);
73
+ disableElement('button-dispose', false);
74
+ renderApp();
75
+ disableElement('checkbox-strictmode', true);
76
+ });
77
+ document.querySelector('#button-dispose')?.addEventListener('click', () => {
78
+ disableElement('button-start', false);
79
+ disableElement('button-dispose', true);
85
80
 
86
- root.render([]);
87
- });
81
+ root.render([]);
82
+ });
83
+ }
88
84
  } catch (e) {
89
85
  console.error(e);
90
86
  }
@@ -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';
@@ -46,6 +46,7 @@ const startEditor = async () => {
46
46
  console.log('Received message from worker:', message);
47
47
  });
48
48
 
49
+ const htmlContainer = document.getElementById('monaco-editor-root')!;
49
50
  // the configuration does not contain any text content
50
51
  const appConfig = createLangiumGlobalConfig({
51
52
  languageServerId: 'first',
@@ -56,7 +57,7 @@ const startEditor = async () => {
56
57
  worker: stateMachineWorkerPort,
57
58
  messagePort: channel.port1,
58
59
  messageTransports: { reader, writer },
59
- htmlContainer: document.getElementById('monaco-editor-root')!
60
+ htmlContainer
60
61
  });
61
62
  editorApp = new EditorApp(appConfig.editorAppConfig);
62
63
 
@@ -69,7 +70,7 @@ const startEditor = async () => {
69
70
  await lcWrapper.start();
70
71
 
71
72
  // run editorApp
72
- await editorApp.start(apiWrapper.getHtmlContainer());
73
+ await editorApp.start(htmlContainer);
73
74
 
74
75
  editorApp.updateCodeResources({
75
76
  modified: {
@@ -119,7 +120,7 @@ const disposeEditor = async () => {
119
120
  console.log(editorApp2?.reportStatus().join('\n'));
120
121
  };
121
122
 
122
- export const runStatemachineWrapper = async () => {
123
+ export const runStatemachine = async () => {
123
124
  try {
124
125
  document.querySelector('#button-start')?.addEventListener('click', startEditor);
125
126
  document.querySelector('#button-dispose')?.addEventListener('click', disposeEditor);
@@ -33,11 +33,12 @@ print("Hello Moon!")
33
33
  let currentText = textJson;
34
34
  let currenFileExt = 'json';
35
35
 
36
+ const htmlContainer = document.getElementById('monaco-editor-root')!;
36
37
  const vscodeApiConfig: MonacoVscodeApiConfig = {
37
38
  $type: 'extended',
38
39
  viewsConfig: {
39
40
  $type: 'EditorService',
40
- htmlContainer: document.getElementById('monaco-editor-root')!
41
+ htmlContainer
41
42
  },
42
43
  logLevel: LogLevel.Debug,
43
44
  serviceOverrides: {
@@ -82,7 +83,7 @@ print("Hello Moon!")
82
83
  disableElement('button-start', true);
83
84
  disableElement('button-flip', false);
84
85
 
85
- await editorApp.start(apiWrapper.getHtmlContainer());
86
+ await editorApp.start(htmlContainer);
86
87
  if (editorAppConfig.codeResources?.modified !== undefined) {
87
88
  editorAppConfig.codeResources.modified.text = currentText;
88
89
  editorAppConfig.codeResources.modified.uri = `/workspace/example.${currenFileExt}`;
@@ -25,7 +25,7 @@ import { createUrl } from 'monaco-languageclient/common';
25
25
  import type { EditorAppConfig } from 'monaco-languageclient/editorApp';
26
26
  import type { LanguageClientConfig } from 'monaco-languageclient/lcwrapper';
27
27
  import { createDefaultLocaleConfiguration } from 'monaco-languageclient/vscodeApiLocales';
28
- import { defaultHtmlAugmentationInstructions, defaultViewsInit, type HtmlContainerConfig, type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
28
+ import { defaultHtmlAugmentationInstructions, defaultViewsInit, type MonacoVscodeApiConfig } from 'monaco-languageclient/vscodeApiWrapper';
29
29
  import { configureDefaultWorkerFactory } from 'monaco-languageclient/workerFactory';
30
30
  import * as vscode from 'vscode';
31
31
  import type { BaseLanguageClient } from 'vscode-languageclient/browser.js';
@@ -37,7 +37,7 @@ import { createDefaultWorkspaceContent } from '../../common/client/utils.js';
37
37
  import { provideDebuggerExtensionConfig } from '../../debugger/client/debugger.js';
38
38
  import { createDebugLaunchConfigFile, type ConfigParams, type FileDefinition } from '../../debugger/common/definitions.js';
39
39
 
40
- export const createDefaultConfigParams = (homeDir: string, htmlContainer: HtmlContainerConfig): ConfigParams => {
40
+ export const createDefaultConfigParams = (homeDir: string, htmlContainer: HTMLElement): ConfigParams => {
41
41
  const files = new Map<string, FileDefinition>();
42
42
  const workspaceRoot = `${homeDir}/workspace`;
43
43
  const configParams: ConfigParams = {
@@ -3,10 +3,9 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
- import { resolve } from 'node:path';
7
6
  import { IncomingMessage } from 'node:http';
7
+ import { resolve } from 'node:path';
8
8
  import { runLanguageServer } from '../../common/node/language-server-runner.js';
9
- import { LanguageName } from '../../common/node/server-commons.js';
10
9
 
11
10
  export const runPythonServer = (baseDir: string, relativeDir: string) => {
12
11
  const processRunPath = resolve(baseDir, relativeDir);
@@ -14,7 +13,7 @@ export const runPythonServer = (baseDir: string, relativeDir: string) => {
14
13
  serverName: 'PYRIGHT',
15
14
  pathName: '/pyright',
16
15
  serverPort: 30001,
17
- runCommand: LanguageName.node,
16
+ runCommand: 'node',
18
17
  runCommandArgs: [
19
18
  processRunPath,
20
19
  '--stdio'
@@ -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"}