monaco-languageclient-examples 8.3.1 → 8.4.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 (142) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/bare.html +2 -2
  3. package/browser.html +2 -2
  4. package/dist/browser/main.d.ts.map +1 -1
  5. package/dist/browser/main.js +7 -4
  6. package/dist/browser/main.js.map +1 -1
  7. package/dist/common/client/app-utils.d.ts +3 -0
  8. package/dist/common/client/app-utils.d.ts.map +1 -0
  9. package/dist/common/client/app-utils.js +15 -0
  10. package/dist/common/client/app-utils.js.map +1 -0
  11. package/dist/common/client/localeLoader.d.ts +2 -0
  12. package/dist/common/client/localeLoader.d.ts.map +1 -0
  13. package/dist/common/client/localeLoader.js +61 -0
  14. package/dist/common/client/localeLoader.js.map +1 -0
  15. package/dist/common/node/language-server-runner.d.ts.map +1 -0
  16. package/dist/common/{language-server-runner.js → node/language-server-runner.js} +2 -3
  17. package/dist/common/node/language-server-runner.js.map +1 -0
  18. package/dist/common/{server-commons.d.ts → node/server-commons.d.ts} +7 -1
  19. package/dist/common/node/server-commons.d.ts.map +1 -0
  20. package/dist/common/{server-commons.js → node/server-commons.js} +10 -1
  21. package/dist/common/node/server-commons.js.map +1 -0
  22. package/dist/groovy/client/main.d.ts.map +1 -1
  23. package/dist/groovy/client/main.js +14 -7
  24. package/dist/groovy/client/main.js.map +1 -1
  25. package/dist/groovy/server/direct.js +2 -2
  26. package/dist/groovy/server/direct.js.map +1 -1
  27. package/dist/groovy/server/main.js +3 -3
  28. package/dist/groovy/server/main.js.map +1 -1
  29. package/dist/index.d.ts +2 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +2 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/json/client/wrapperWs.d.ts.map +1 -1
  34. package/dist/json/client/wrapperWs.js +15 -16
  35. package/dist/json/client/wrapperWs.js.map +1 -1
  36. package/dist/json/server/direct.js +2 -2
  37. package/dist/json/server/direct.js.map +1 -1
  38. package/dist/json/server/main.d.ts.map +1 -1
  39. package/dist/json/server/main.js +3 -3
  40. package/dist/json/server/main.js.map +1 -1
  41. package/dist/langium/langium-dsl/config/classicConfig.d.ts.map +1 -1
  42. package/dist/langium/langium-dsl/config/classicConfig.js +15 -7
  43. package/dist/langium/langium-dsl/config/classicConfig.js.map +1 -1
  44. package/dist/langium/langium-dsl/config/extendedConfig.d.ts.map +1 -1
  45. package/dist/langium/langium-dsl/config/extendedConfig.js +14 -3
  46. package/dist/langium/langium-dsl/config/extendedConfig.js.map +1 -1
  47. package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts +5 -1
  48. package/dist/langium/statemachine/config/wrapperStatemachineConfig.d.ts.map +1 -1
  49. package/dist/langium/statemachine/config/wrapperStatemachineConfig.js +14 -7
  50. package/dist/langium/statemachine/config/wrapperStatemachineConfig.js.map +1 -1
  51. package/dist/langium/statemachine/main-react.d.ts.map +1 -1
  52. package/dist/langium/statemachine/main-react.js +8 -3
  53. package/dist/langium/statemachine/main-react.js.map +1 -1
  54. package/dist/langium/statemachine/main.d.ts.map +1 -1
  55. package/dist/langium/statemachine/main.js +19 -3
  56. package/dist/langium/statemachine/main.js.map +1 -1
  57. package/dist/node.d.ts +2 -3
  58. package/dist/node.d.ts.map +1 -1
  59. package/dist/node.js +2 -3
  60. package/dist/node.js.map +1 -1
  61. package/dist/python/client/config.d.ts +1 -1
  62. package/dist/python/client/config.d.ts.map +1 -1
  63. package/dist/python/client/config.js +14 -25
  64. package/dist/python/client/config.js.map +1 -1
  65. package/dist/python/client/main.d.ts +1 -1
  66. package/dist/python/client/main.d.ts.map +1 -1
  67. package/dist/python/client/main.js +24 -9
  68. package/dist/python/client/main.js.map +1 -1
  69. package/dist/python/client/reactPython.d.ts +1 -1
  70. package/dist/python/client/reactPython.d.ts.map +1 -1
  71. package/dist/python/client/reactPython.js +14 -11
  72. package/dist/python/client/reactPython.js.map +1 -1
  73. package/dist/python/server/direct.js +2 -2
  74. package/dist/python/server/direct.js.map +1 -1
  75. package/dist/python/server/main.js +3 -3
  76. package/dist/python/server/main.js.map +1 -1
  77. package/dist/ts/wrapperAdvanced.d.ts.map +1 -1
  78. package/dist/ts/wrapperAdvanced.js +64 -25
  79. package/dist/ts/wrapperAdvanced.js.map +1 -1
  80. package/dist/ts/wrapperTs.d.ts.map +1 -1
  81. package/dist/ts/wrapperTs.js +43 -28
  82. package/dist/ts/wrapperTs.js.map +1 -1
  83. package/groovy.html +2 -2
  84. package/package.json +46 -45
  85. package/python.html +2 -2
  86. package/react_python.html +3 -3
  87. package/react_statemachine.html +3 -3
  88. package/src/browser/main.ts +7 -4
  89. package/src/common/client/app-utils.ts +16 -0
  90. package/src/common/client/localeLoader.ts +61 -0
  91. package/src/common/{language-server-runner.ts → node/language-server-runner.ts} +3 -4
  92. package/src/common/{server-commons.ts → node/server-commons.ts} +13 -3
  93. package/src/groovy/client/main.ts +15 -8
  94. package/src/groovy/server/direct.ts +3 -3
  95. package/src/groovy/server/main.ts +3 -3
  96. package/src/index.ts +2 -2
  97. package/src/json/client/wrapperWs.ts +17 -18
  98. package/src/json/server/direct.ts +2 -2
  99. package/src/json/server/main.ts +4 -3
  100. package/src/langium/langium-dsl/config/classicConfig.ts +15 -7
  101. package/src/langium/langium-dsl/config/extendedConfig.ts +15 -3
  102. package/src/langium/statemachine/config/wrapperStatemachineConfig.ts +19 -8
  103. package/src/langium/statemachine/main-react.tsx +8 -3
  104. package/src/langium/statemachine/main.ts +22 -3
  105. package/src/node.ts +2 -3
  106. package/src/python/client/bad.py +3 -0
  107. package/src/python/client/config.ts +13 -24
  108. package/src/python/client/hello.py +4 -0
  109. package/src/python/client/hello2.py +2 -0
  110. package/src/python/client/main.ts +29 -9
  111. package/src/python/client/reactPython.tsx +15 -11
  112. package/src/python/client/tester.py +5 -0
  113. package/src/python/server/direct.ts +2 -2
  114. package/src/python/server/main.ts +4 -4
  115. package/src/ts/wrapperAdvanced.ts +64 -25
  116. package/src/ts/wrapperTs.ts +44 -28
  117. package/vite.bundle.config.ts +32 -0
  118. package/wrapper_adv.html +2 -2
  119. package/wrapper_langium.html +2 -2
  120. package/wrapper_statemachine.html +6 -3
  121. package/wrapper_ts.html +1 -1
  122. package/wrapper_ws.html +2 -3
  123. package/dist/common/example-apps-common.d.ts +0 -8
  124. package/dist/common/example-apps-common.d.ts.map +0 -1
  125. package/dist/common/example-apps-common.js +0 -81
  126. package/dist/common/example-apps-common.js.map +0 -1
  127. package/dist/common/language-server-runner.d.ts.map +0 -1
  128. package/dist/common/language-server-runner.js.map +0 -1
  129. package/dist/common/server-commons.d.ts.map +0 -1
  130. package/dist/common/server-commons.js.map +0 -1
  131. package/dist/utils/fs-utils.d.ts +0 -5
  132. package/dist/utils/fs-utils.d.ts.map +0 -1
  133. package/dist/utils/fs-utils.js +0 -14
  134. package/dist/utils/fs-utils.js.map +0 -1
  135. package/dist/utils/localeLoader.d.ts +0 -2
  136. package/dist/utils/localeLoader.d.ts.map +0 -1
  137. package/dist/utils/localeLoader.js +0 -60
  138. package/dist/utils/localeLoader.js.map +0 -1
  139. package/src/common/example-apps-common.ts +0 -90
  140. package/src/utils/fs-utils.ts +0 -14
  141. package/src/utils/localeLoader.ts +0 -59
  142. /package/dist/common/{language-server-runner.d.ts → node/language-server-runner.d.ts} +0 -0
@@ -6,10 +6,11 @@
6
6
  import * as vscode from 'vscode';
7
7
  // this is required syntax highlighting
8
8
  import '@codingame/monaco-vscode-python-default-extension';
9
- import { disposeEditor, startEditor } from '../../common/example-apps-common.js';
10
9
  import { RegisteredFileSystemProvider, registerFileSystemOverlay, RegisteredMemoryFile } from '@codingame/monaco-vscode-files-service-override';
11
- import { createUserConfig } from './config.js';
10
+ import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
12
11
  import { useWorkerFactory } from 'monaco-editor-wrapper/workerFactory';
12
+ import { createUserConfig } from './config.js';
13
+ import { getTextContent } from '../../common/client/app-utils.js';
13
14
 
14
15
  export const configureMonacoWorkers = () => {
15
16
  useWorkerFactory({
@@ -17,20 +18,39 @@ export const configureMonacoWorkers = () => {
17
18
  });
18
19
  };
19
20
 
20
- export const runPythonWrapper = () => {
21
- const code = 'print("Hello, World!")';
21
+ export const runPythonWrapper = async () => {
22
+ const helloPyCode = await getTextContent(new URL('./src/python/client/hello.py', window.location.href));
23
+ const hello2PyCode = await getTextContent(new URL('./src/python/client/hello2.py', window.location.href));
24
+
25
+ const helloPyUri = vscode.Uri.file('/workspace/hello.py');
26
+ const hello2PyUri = vscode.Uri.file('/workspace/hello2.py');
27
+
22
28
  const fileSystemProvider = new RegisteredFileSystemProvider(false);
23
- fileSystemProvider.registerFile(new RegisteredMemoryFile(vscode.Uri.file('/workspace/hello.py'), code));
29
+ fileSystemProvider.registerFile(new RegisteredMemoryFile(helloPyUri, helloPyCode));
30
+ fileSystemProvider.registerFile(new RegisteredMemoryFile(hello2PyUri, hello2PyCode));
31
+
24
32
  registerFileSystemOverlay(1, fileSystemProvider);
33
+ const userConfig = createUserConfig('/workspace', helloPyCode, '/workspace/hello.py');
34
+ const htmlElement = document.getElementById('monaco-editor-root');
35
+ const wrapper = new MonacoEditorLanguageClientWrapper();
25
36
 
26
37
  try {
27
- const userConfig = createUserConfig(code);
28
- const htmlElement = document.getElementById('monaco-editor-root');
38
+
29
39
  document.querySelector('#button-start')?.addEventListener('click', async () => {
30
- await startEditor(userConfig, htmlElement, code);
40
+ if (wrapper.isStarted()) {
41
+ console.warn('Editor was already started!');
42
+ } else {
43
+ await wrapper.init(userConfig);
44
+
45
+ // open files, so the LS can pick it up
46
+ await vscode.workspace.openTextDocument(hello2PyUri);
47
+ await vscode.workspace.openTextDocument(helloPyUri);
48
+
49
+ await wrapper.start(htmlElement);
50
+ }
31
51
  });
32
52
  document.querySelector('#button-dispose')?.addEventListener('click', async () => {
33
- await disposeEditor(userConfig.wrapperConfig.editorAppConfig.useDiffEditor);
53
+ await wrapper.dispose();
34
54
  });
35
55
  } catch (e) {
36
56
  console.error(e);
@@ -3,12 +3,16 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
+ import * as vscode from 'vscode';
7
+ import { RegisteredFileSystemProvider, registerFileSystemOverlay, RegisteredMemoryFile } from '@codingame/monaco-vscode-files-service-override';
6
8
  import React, { StrictMode } from 'react';
7
9
  import ReactDOM from 'react-dom/client';
10
+ import type { TextChanges } from '@typefox/monaco-editor-react';
8
11
  import { MonacoEditorReactComp } from '@typefox/monaco-editor-react';
9
- import { createUserConfig } from './config.js';
10
12
  import { useWorkerFactory } from 'monaco-editor-wrapper/workerFactory';
11
13
  import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
14
+ import { createUserConfig } from './config.js';
15
+ import { getTextContent } from '../../common/client/app-utils.js';
12
16
 
13
17
  export const configureMonacoWorkers = () => {
14
18
  useWorkerFactory({
@@ -16,20 +20,20 @@ export const configureMonacoWorkers = () => {
16
20
  });
17
21
  };
18
22
 
19
- export const runPythonReact = () => {
20
- /**
21
- * Code is intentionally incorrect - language server will pick this up on connection and highlight the error
22
- */
23
- const code = `def main():
24
- return pass`;
23
+ export const runPythonReact = async () => {
24
+ const badPyCode = await getTextContent(new URL('./src/python/client/bad.py', window.location.href));
25
+ const badPyUri = vscode.Uri.file('/workspace/bad.py');
26
+ const fileSystemProvider = new RegisteredFileSystemProvider(false);
27
+ fileSystemProvider.registerFile(new RegisteredMemoryFile(badPyUri, badPyCode));
28
+ registerFileSystemOverlay(1, fileSystemProvider);
25
29
 
26
- const onTextChanged = (text: string, isDirty: boolean) => {
27
- console.log(`Dirty? ${isDirty} Content: ${text}`);
30
+ const onTextChanged = (textChanges: TextChanges) => {
31
+ console.log(`Dirty? ${textChanges.isDirty}\ntext: ${textChanges.main}\ntextOriginal: ${textChanges.original}`);
28
32
  };
29
33
 
30
- const htmlElement = document.getElementById('root');
34
+ const htmlElement = document.getElementById('monaco-editor-root');
31
35
  const comp = <MonacoEditorReactComp
32
- userConfig={createUserConfig(code)}
36
+ userConfig={createUserConfig('/workspace', badPyCode, '/workspace/bad.py')}
33
37
  style={{
34
38
  'paddingTop': '5px',
35
39
  'height': '80vh'
@@ -0,0 +1,5 @@
1
+ import time
2
+
3
+ hello = "Hello, World!"
4
+
5
+ time.sleep(1000)
@@ -3,9 +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 'path';
6
+ import { resolve } from 'node:path';
7
7
  import { runPythonServer } from './main.js';
8
- import { getLocalDirectory } from '../../utils/fs-utils.js';
8
+ import { getLocalDirectory } from '../../common/node/server-commons.js';
9
9
 
10
10
  const baseDir = resolve(getLocalDirectory(import.meta.url));
11
11
  const relativeDir = '../../../../../node_modules/pyright/dist/pyright-langserver.js';
@@ -3,10 +3,10 @@
3
3
  * Licensed under the MIT License. See LICENSE in the package root for license information.
4
4
  * ------------------------------------------------------------------------------------------ */
5
5
 
6
- import { resolve } from 'path';
7
- import { runLanguageServer } from '../../common/language-server-runner.js';
8
- import { IncomingMessage } from 'http';
9
- import { LanguageName } from '../../common/server-commons.js';
6
+ import { resolve } from 'node:path';
7
+ import { IncomingMessage } from 'node:http';
8
+ import { runLanguageServer } from '../../common/node/language-server-runner.js';
9
+ import { LanguageName } from '../../common/node/server-commons.js';
10
10
 
11
11
  export const runPythonServer = (baseDir: string, relativeDir: string) => {
12
12
  const processRunPath = resolve(baseDir, relativeDir);
@@ -30,22 +30,30 @@ const wrapper42Config: UserConfig = {
30
30
  },
31
31
  editorAppConfig: {
32
32
  $type: 'classic',
33
- languageId: 'text/plain',
34
- useDiffEditor: true,
35
- codeOriginal: `This line is equal.
33
+ codeResources: {
34
+ original: {
35
+ text: `This line is equal.
36
36
  This number is different 2002
37
37
  Misspeelled!
38
38
  Same again.`,
39
- code: `This line is equal.
39
+ fileExt: 'txt'
40
+ },
41
+ main: {
42
+ text: `This line is equal.
40
43
  This number is different 2022
41
44
  Misspelled!
42
- Same again.`
45
+ Same again.`,
46
+ fileExt: 'txt'
47
+ }
48
+ },
49
+ useDiffEditor: true,
43
50
  }
44
51
  },
45
52
  languageClientConfig: {
53
+ languageId: 'json',
54
+ name: 'wrapper42 language client',
46
55
  options: {
47
56
  $type: 'WebSocket',
48
- name: 'wrapper42 language client',
49
57
  host: 'localhost',
50
58
  port: 30000,
51
59
  path: 'sampleServer',
@@ -65,10 +73,17 @@ const wrapper43Config: UserConfig = {
65
73
  },
66
74
  editorAppConfig: {
67
75
  $type: 'classic',
68
- languageId: 'text/plain',
76
+ codeResources: {
77
+ original: {
78
+ text: 'This line is equal.\nThis number is different 3022.\nMisspelled!Same again.',
79
+ fileExt: 'txt'
80
+ },
81
+ main: {
82
+ text: 'This line is equal.\nThis number is different 3002.\nMisspelled!Same again.',
83
+ fileExt: 'txt'
84
+ }
85
+ },
69
86
  useDiffEditor: true,
70
- codeOriginal: 'This line is equal.\nThis number is different 3022.\nMisspelled!Same again.',
71
- code: 'This line is equal.\nThis number is different 3002.\nMisspelled!Same again.',
72
87
  editorOptions: {
73
88
  lineNumbers: 'off'
74
89
  },
@@ -90,11 +105,15 @@ const wrapper44Config: UserConfig = {
90
105
  },
91
106
  editorAppConfig: {
92
107
  $type: 'classic',
93
- languageId: 'javascript',
94
- useDiffEditor: false,
95
- code: `function logMe() {
108
+ codeResources: {
109
+ main: {
110
+ text: `function logMe() {
96
111
  console.log('Hello monaco-editor-wrapper!');
97
112
  };`,
113
+ fileExt: 'js'
114
+ }
115
+ },
116
+ useDiffEditor: false,
98
117
  editorOptions: {
99
118
  minimap: {
100
119
  enabled: true
@@ -127,28 +146,46 @@ const sleepOne = (milliseconds: number) => {
127
146
  await wrapper42.dispose();
128
147
  wrapper42Config.languageClientConfig = undefined;
129
148
  const appConfig42 = wrapper42Config.wrapperConfig.editorAppConfig as EditorAppConfigClassic;
130
- appConfig42.languageId = 'javascript';
131
- appConfig42.useDiffEditor = false;
132
- appConfig42.code = `function logMe() {
149
+ appConfig42.codeResources = {
150
+ main: {
151
+ text: `function logMe() {
133
152
  console.log('Hello swap editors!');
134
- };`;
153
+ };`,
154
+ fileExt: 'js'
155
+ }
156
+ };
157
+ appConfig42.useDiffEditor = false;
135
158
  const w42Start = wrapper42.initAndStart(wrapper42Config, document.getElementById('monaco-editor-root-42'));
136
159
 
137
- const w43Start = wrapper43.updateDiffModel({
138
- languageId: 'javascript',
139
- code: 'text 5678',
140
- codeOriginal: 'text 1234'
160
+ const w43Start = await wrapper43.updateCodeResources({
161
+ main: {
162
+ text: 'text 5678',
163
+ fileExt: 'txt'
164
+ },
165
+ original: {
166
+ text: 'text 1234',
167
+ fileExt: 'txt'
168
+ }
141
169
  });
142
170
 
143
171
  await wrapper44.dispose();
144
172
  const appConfig44 = wrapper44Config.wrapperConfig.editorAppConfig as EditorAppConfigClassic;
145
- appConfig44.languageId = 'text/plain';
146
173
  appConfig44.useDiffEditor = true;
147
- appConfig44.codeOriginal = 'oh la la la!';
148
- appConfig44.code = 'oh lo lo lo!';
174
+ appConfig44.codeResources = {
175
+ original: {
176
+ text: 'oh la la la!',
177
+ fileExt: 'txt'
178
+ },
179
+ main: {
180
+ text: 'oh lo lo lo!',
181
+ fileExt: 'txt'
182
+ }
183
+ };
149
184
  // This affects all editors globally and is only effective
150
185
  // if it is not in contrast to one configured later
151
- appConfig44.theme = 'vs-light';
186
+ appConfig44.editorOptions = {
187
+ theme: 'vs-light'
188
+ };
152
189
  const w44Start = wrapper44.initAndStart(wrapper44Config, document.getElementById('monaco-editor-root-44'));
153
190
 
154
191
  await w42Start;
@@ -167,7 +204,9 @@ const sleepTwo = (milliseconds: number) => {
167
204
  await wrapper44.dispose();
168
205
  const appConfig44 = wrapper44Config.wrapperConfig.editorAppConfig as EditorAppConfigClassic;
169
206
  appConfig44.useDiffEditor = false;
170
- appConfig44.theme = 'vs-dark';
207
+ appConfig44.editorOptions = {
208
+ theme: 'vs-dark'
209
+ };
171
210
  await wrapper44.initAndStart(wrapper44Config, document.getElementById('monaco-editor-root-44'));
172
211
  console.log('Restarted wrapper44.');
173
212
  }, milliseconds);
@@ -9,8 +9,7 @@ import getKeybindingsServiceOverride from '@codingame/monaco-vscode-keybindings-
9
9
  import '@codingame/monaco-vscode-theme-defaults-default-extension';
10
10
  import '@codingame/monaco-vscode-typescript-basics-default-extension';
11
11
  import '@codingame/monaco-vscode-typescript-language-features-default-extension';
12
- import { disposeEditor, getWrapper, startEditor, swapEditors, updateModel } from '../common/example-apps-common.js';
13
- import { UserConfig } from 'monaco-editor-wrapper';
12
+ import { CodePlusUri, MonacoEditorLanguageClientWrapper, UserConfig } from 'monaco-editor-wrapper';
14
13
  import { useWorkerFactory } from 'monaco-editor-wrapper/workerFactory';
15
14
 
16
15
  export const configureMonacoWorkers = () => {
@@ -24,12 +23,12 @@ export const configureMonacoWorkers = () => {
24
23
 
25
24
  export const runTsWrapper = async () => {
26
25
  const codeUri = '/workspace/hello.ts';
27
- let code = `function sayHello(): string {
26
+ const code = `function sayHello(): string {
28
27
  return "Hello";
29
28
  };`;
30
29
 
31
30
  const codeOriginalUri = '/workspace/goodbye.ts';
32
- let codeOriginal = `function sayGoodbye(): string {
31
+ const codeOriginal = `function sayGoodbye(): string {
33
32
  return "Goodbye";
34
33
  };`;
35
34
 
@@ -60,10 +59,16 @@ export const runTsWrapper = async () => {
60
59
  },
61
60
  editorAppConfig: {
62
61
  $type: 'extended',
63
- languageId: 'typescript',
64
- code,
65
- codeUri: codeUri,
66
- codeOriginal: codeOriginal,
62
+ codeResources: {
63
+ main: {
64
+ text: code,
65
+ uri: codeUri
66
+ },
67
+ original: {
68
+ text: codeOriginal,
69
+ uri: codeOriginalUri,
70
+ }
71
+ },
67
72
  useDiffEditor: false,
68
73
  editorOptions: monacoEditorConfig,
69
74
  diffEditorOptions: monacoDiffEditorConfig
@@ -71,11 +76,13 @@ export const runTsWrapper = async () => {
71
76
  }
72
77
  };
73
78
 
79
+ const wrapper = new MonacoEditorLanguageClientWrapper();
80
+ const htmlElement = document.getElementById('monaco-editor-root');
81
+
74
82
  try {
75
- const wrapper = getWrapper();
76
- const htmlElement = document.getElementById('monaco-editor-root');
77
83
  document.querySelector('#button-start')?.addEventListener('click', async () => {
78
- await startEditor(userConfig, htmlElement, code, codeOriginal);
84
+ await wrapper.dispose();
85
+ await wrapper.initAndStart(userConfig, htmlElement);
79
86
 
80
87
  vscode.commands.getCommands().then((x) => {
81
88
  console.log(`Found ${x.length} commands`);
@@ -86,30 +93,39 @@ export const runTsWrapper = async () => {
86
93
  wrapper.getEditor()?.focus();
87
94
  await vscode.commands.executeCommand('actions.find');
88
95
  });
89
- document.querySelector('#button-swap')?.addEventListener('click', () => {
90
- swapEditors(userConfig, htmlElement, code, codeOriginal);
91
- });
92
96
  document.querySelector('#button-swap-code')?.addEventListener('click', () => {
93
- if (wrapper.getMonacoEditorApp()?.getConfig().codeUri === codeUri) {
94
- updateModel({
95
- code: codeOriginal,
96
- codeUri: codeOriginalUri,
97
- languageId: 'typescript',
97
+ const codeResources = wrapper.getMonacoEditorApp()?.getConfig().codeResources;
98
+ if ((codeResources?.main as CodePlusUri).uri === codeUri) {
99
+ wrapper.updateCodeResources({
100
+ main: {
101
+ text: codeOriginal,
102
+ uri: codeOriginalUri
103
+ },
104
+ original: {
105
+ text: code,
106
+ uri: codeUri
107
+ }
98
108
  });
99
109
  } else {
100
- updateModel({
101
- code: code,
102
- codeUri: codeUri,
103
- languageId: 'typescript',
110
+ wrapper.updateCodeResources({
111
+ main: {
112
+ text: code,
113
+ uri: codeUri
114
+ },
115
+ original: {
116
+ text: codeOriginal,
117
+ uri: codeOriginalUri
118
+ }
104
119
  });
105
120
  }
106
121
  });
122
+ document.querySelector('#button-diff')?.addEventListener('click', async () => {
123
+ userConfig.wrapperConfig.editorAppConfig.useDiffEditor = !userConfig.wrapperConfig.editorAppConfig.useDiffEditor;
124
+ await wrapper.dispose();
125
+ await wrapper.initAndStart(userConfig, htmlElement);
126
+ });
107
127
  document.querySelector('#button-dispose')?.addEventListener('click', async () => {
108
- if (wrapper.getMonacoEditorApp()?.getConfig().codeUri === codeUri) {
109
- code = await disposeEditor(userConfig.wrapperConfig.editorAppConfig.useDiffEditor);
110
- } else {
111
- codeOriginal = await disposeEditor(userConfig.wrapperConfig.editorAppConfig.useDiffEditor);
112
- }
128
+ await wrapper.dispose();
113
129
  });
114
130
  } catch (e) {
115
131
  console.error(e);
@@ -0,0 +1,32 @@
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 { defineConfig } from 'vite';
7
+ import path from 'path';
8
+
9
+ export default defineConfig({
10
+ build: {
11
+ lib: {
12
+ entry: path.resolve(__dirname, 'src/index.ts'),
13
+ name: 'examples-bundle-test',
14
+ fileName: () => 'index.js',
15
+ formats: ['es']
16
+ },
17
+ outDir: 'bundle',
18
+ assetsDir: 'bundle/assets',
19
+ emptyOutDir: true,
20
+ cssCodeSplit: false,
21
+ sourcemap: true,
22
+ rollupOptions: {
23
+ output: {
24
+ name: 'examples-bundle-test',
25
+ exports: 'named',
26
+ assetFileNames: (assetInfo) => {
27
+ return `assets/${assetInfo.name}`;
28
+ }
29
+ }
30
+ }
31
+ }
32
+ });
package/wrapper_adv.html CHANGED
@@ -4,12 +4,12 @@
4
4
  <head>
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Multiple Editors Example</title>
7
+ <title>Multiple Editors</title>
8
8
  <link rel="stylesheet" href="style.css">
9
9
  </head>
10
10
 
11
11
  <body>
12
- <h2>Multiple Editors Example</title>
12
+ <h2>Multiple Editors</title>
13
13
  <div style="height: 33vh;" id="monaco-editor-root-42">
14
14
  </div>
15
15
  <div style="height: 33vh;" id="monaco-editor-root-43">
@@ -2,14 +2,14 @@
2
2
  <html lang="en">
3
3
 
4
4
  <head>
5
- <title>Langium Grammar DSL Web Worker Language Server Example</title>
5
+ <title>Langium Grammar DSL Language Client & Language Server (Worker)</title>
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
9
  </head>
10
10
 
11
11
  <body>
12
- <h2>Langium Grammar DSL Web Worker Language Server Example</h2>
12
+ <h2>Langium Grammar DSL Language Client & Language Server (Worker)</h2>
13
13
  <div style="padding: 0px 5px 5px 0px">
14
14
  <button type="button" id="button-start-classic">Start Classic</button>
15
15
  <button type="button" id="button-start-extended">Start Extended</button>
@@ -4,17 +4,20 @@
4
4
  <head>
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Langium Statemachine Web Worker Language Server Example</title>
7
+ <title>Langium Statemachine Client & Language Server (Worker)</title>
8
8
  <link rel="stylesheet" href="style.css">
9
9
  </head>
10
10
 
11
11
  <body>
12
- <h2>Langium Statemachine Web Worker Language Server Example</h2>
12
+ <h2>Langium Statemachine Client & Language Server (Worker)</h2>
13
13
  <button type="button" id="button-start">Start</button>
14
14
  <button type="button" id="button-dispose">Dispose</button>
15
15
  <div id="monaco-editor-root" style="height: 40vh;"></div>
16
16
  <div id="monaco-editor-root2" style="height: 40vh;"></div>
17
- <script type="module" src="./src/utils/localeLoader.ts"></script>
17
+ <script type="module">
18
+ import { initLocalLoader } from './src/common/client/localeLoader.ts';
19
+ initLocalLoader();
20
+ </script>
18
21
  <script type="module">
19
22
  import { configureMonacoWorkers, runStatemachineWrapper } from './src/langium/statemachine/main.ts';
20
23
 
package/wrapper_ts.html CHANGED
@@ -12,7 +12,7 @@
12
12
  <h2>Monaco Editor Wrapper TypeScript Example</h2>
13
13
  <button type="button" id="button-start">Start</button>
14
14
  <button type="button" id="button-swap-code">Swap Code</button>
15
- <button type="button" id="button-swap">Swap Diff</button>
15
+ <button type="button" id="button-diff">Show Diff</button>
16
16
  <button type="button" id="button-dispose">Dispose</button>
17
17
  <div id="monaco-editor-root" style="height: 80vh;"></div>
18
18
  <script type="module">
package/wrapper_ws.html CHANGED
@@ -4,14 +4,13 @@
4
4
  <head>
5
5
  <meta charset="UTF-8" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Monaco Editor Wrapper Web Socket LSP Example</title>
7
+ <title>JSON Language Client & Language Server (Web Socket)</title>
8
8
  <link rel="stylesheet" href="style.css">
9
9
  </head>
10
10
 
11
11
  <body>
12
- <h2>Monaco Editor Wrapper Web Socket LSP Example</h2>
12
+ <h2>JSON Language Client & Language Server (Web Socket)</h2>
13
13
  <button type="button" id="button-start">Start</button>
14
- <button type="button" id="button-swap">Swap Diff</button>
15
14
  <button type="button" id="button-dispose">Dispose</button>
16
15
  <div id="monaco-editor-root" style="height: 80vh;"></div>
17
16
  <script type="module">
@@ -1,8 +0,0 @@
1
- import { ModelUpdate, MonacoEditorLanguageClientWrapper, UserConfig } from 'monaco-editor-wrapper';
2
- export declare const startEditor: (userConfig: UserConfig, htmlElement: HTMLElement | null, code: string, codeOriginal?: string) => Promise<void>;
3
- export declare const getWrapper: () => MonacoEditorLanguageClientWrapper;
4
- export declare const updateModel: (modelUpdate: ModelUpdate) => Promise<void>;
5
- export declare const swapEditors: (userConfig: UserConfig, htmlElement: HTMLElement | null, code: string, codeOriginal?: string) => Promise<void>;
6
- export declare const disposeEditor: (useDiffEditor: boolean) => Promise<string>;
7
- export declare const getTextContent: (url: URL) => Promise<string>;
8
- //# sourceMappingURL=example-apps-common.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"example-apps-common.d.ts","sourceRoot":"","sources":["../../src/common/example-apps-common.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,iCAAiC,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKnG,eAAO,MAAM,WAAW,eAAsB,UAAU,eAAe,WAAW,GAAG,IAAI,QAAQ,MAAM,iBAAiB,MAAM,kBAQ7H,CAAC;AAEF,eAAO,MAAM,UAAU,yCAEtB,CAAC;AAEF,eAAO,MAAM,WAAW,gBAAuB,WAAW,kBAMzD,CAAC;AAEF,eAAO,MAAM,WAAW,eAAsB,UAAU,eAAe,WAAW,GAAG,IAAI,QAAQ,MAAM,iBAAiB,MAAM,kBAK7H,CAAC;AAEF,eAAO,MAAM,aAAa,kBAAyB,OAAO,oBAOzD,CAAC;AAwCF,eAAO,MAAM,cAAc,QAAe,GAAG,oBAG5C,CAAC"}
@@ -1,81 +0,0 @@
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
- import { MonacoEditorLanguageClientWrapper } from 'monaco-editor-wrapper';
6
- import * as monaco from 'monaco-editor';
7
- const wrapper = new MonacoEditorLanguageClientWrapper();
8
- export const startEditor = async (userConfig, htmlElement, code, codeOriginal) => {
9
- if (wrapper.isStarted()) {
10
- console.warn('Editor was already started!');
11
- }
12
- else {
13
- configureCodeEditors(userConfig, code, codeOriginal);
14
- toggleSwapDiffButton(true);
15
- await restartEditor(userConfig, htmlElement);
16
- }
17
- };
18
- export const getWrapper = () => {
19
- return wrapper;
20
- };
21
- export const updateModel = async (modelUpdate) => {
22
- if (wrapper.getMonacoEditorApp()?.getConfig().useDiffEditor) {
23
- await wrapper.updateDiffModel(modelUpdate);
24
- }
25
- else {
26
- await wrapper.updateModel(modelUpdate);
27
- }
28
- };
29
- export const swapEditors = async (userConfig, htmlElement, code, codeOriginal) => {
30
- userConfig.wrapperConfig.editorAppConfig.useDiffEditor = !userConfig.wrapperConfig.editorAppConfig.useDiffEditor;
31
- saveMainCode(!userConfig.wrapperConfig.editorAppConfig.useDiffEditor);
32
- configureCodeEditors(userConfig, code, codeOriginal);
33
- await restartEditor(userConfig, htmlElement);
34
- };
35
- export const disposeEditor = async (useDiffEditor) => {
36
- wrapper.reportStatus();
37
- toggleSwapDiffButton(false);
38
- const codeMain = saveMainCode(useDiffEditor);
39
- await wrapper.dispose();
40
- return codeMain;
41
- };
42
- const restartEditor = async (userConfig, htmlElement) => {
43
- await wrapper.dispose();
44
- await wrapper.initAndStart(userConfig, htmlElement);
45
- logEditorInfo(userConfig);
46
- };
47
- const configureCodeEditors = (userConfig, code, codeOriginal) => {
48
- if (userConfig.wrapperConfig.editorAppConfig.useDiffEditor) {
49
- userConfig.wrapperConfig.editorAppConfig.code = code;
50
- userConfig.wrapperConfig.editorAppConfig.codeOriginal = codeOriginal;
51
- }
52
- else {
53
- userConfig.wrapperConfig.editorAppConfig.code = code;
54
- }
55
- };
56
- const saveMainCode = (saveFromDiff) => {
57
- if (saveFromDiff) {
58
- return wrapper.getModel(true).getValue();
59
- }
60
- else {
61
- return wrapper.getModel().getValue();
62
- }
63
- };
64
- const toggleSwapDiffButton = (enabled) => {
65
- const button = document.getElementById('button-swap');
66
- if (button !== null) {
67
- button.disabled = !enabled;
68
- }
69
- };
70
- const logEditorInfo = (userConfig) => {
71
- console.log(`# of configured languages: ${monaco.languages.getLanguages().length}`);
72
- console.log(`Main code: ${wrapper.getModel(true)?.getValue() ?? ''}`);
73
- if (userConfig.wrapperConfig.editorAppConfig.useDiffEditor) {
74
- console.log(`Modified code: ${wrapper.getModel().getValue()}`);
75
- }
76
- };
77
- export const getTextContent = async (url) => {
78
- const response = await fetch(url.href);
79
- return response.text();
80
- };
81
- //# sourceMappingURL=example-apps-common.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"example-apps-common.js","sourceRoot":"","sources":["../../src/common/example-apps-common.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"language-server-runner.d.ts","sourceRoot":"","sources":["../../src/common/language-server-runner.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,uBAAuB,EAAmB,MAAM,qBAAqB,CAAC;AAE/E,wBAAwB;AACxB,eAAO,MAAM,iBAAiB,4BACD,uBAAuB,SAsBnD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"language-server-runner.js","sourceRoot":"","sources":["../../src/common/language-server-runner.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAErC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAA2B,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE/E,wBAAwB;AACxB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC7B,uBAAgD,EAClD,EAAE;IACA,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,UAAS,GAAG;QACxC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,iCAAiC;IACjC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,6CAA6C;IAC7C,MAAM,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,wBAAwB;IACxB,MAAM,UAAU,GAAW,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,IAAI,eAAe,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC;IACzE,wBAAwB;IACxB,eAAe,CAAC,uBAAuB,EAAE;QACrC,MAAM,EAAE,UAAU;QAClB,GAAG;KACN,CAAC,CAAC;AACP,CAAC,CAAC"}