@theia/core 1.76.0-next.7 → 1.77.0-next.0

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/README.md +8 -8
  2. package/i18n/nls.cs.json +187 -49
  3. package/i18n/nls.de.json +187 -49
  4. package/i18n/nls.es.json +187 -49
  5. package/i18n/nls.fr.json +187 -49
  6. package/i18n/nls.hu.json +187 -49
  7. package/i18n/nls.it.json +187 -49
  8. package/i18n/nls.ja.json +187 -49
  9. package/i18n/nls.json +187 -49
  10. package/i18n/nls.ko.json +187 -49
  11. package/i18n/nls.pl.json +187 -49
  12. package/i18n/nls.pt-br.json +187 -49
  13. package/i18n/nls.ru.json +187 -49
  14. package/i18n/nls.tr.json +187 -49
  15. package/i18n/nls.zh-cn.json +187 -49
  16. package/i18n/nls.zh-tw.json +187 -49
  17. package/lib/browser/catalog.json +178 -97
  18. package/lib/browser/dialogs.d.ts +2 -0
  19. package/lib/browser/dialogs.d.ts.map +1 -1
  20. package/lib/browser/dialogs.js +9 -5
  21. package/lib/browser/dialogs.js.map +1 -1
  22. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  23. package/lib/browser/frontend-application-module.js +3 -0
  24. package/lib/browser/frontend-application-module.js.map +1 -1
  25. package/lib/browser/index.d.ts +1 -0
  26. package/lib/browser/index.d.ts.map +1 -1
  27. package/lib/browser/index.js +1 -0
  28. package/lib/browser/index.js.map +1 -1
  29. package/lib/browser/resource-context-key.d.ts +25 -0
  30. package/lib/browser/resource-context-key.d.ts.map +1 -1
  31. package/lib/browser/resource-context-key.js +41 -16
  32. package/lib/browser/resource-context-key.js.map +1 -1
  33. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +7 -5
  34. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
  35. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +13 -12
  36. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
  37. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +11 -1
  38. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
  39. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +38 -3
  40. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
  41. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +2 -1
  42. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
  43. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +4 -2
  44. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
  45. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.js +123 -2
  46. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.js.map +1 -1
  47. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts +12 -4
  48. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts.map +1 -1
  49. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.js +2 -2
  50. package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.js.map +1 -1
  51. package/lib/browser/tree/tree-widget.d.ts +20 -2
  52. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  53. package/lib/browser/tree/tree-widget.js +31 -13
  54. package/lib/browser/tree/tree-widget.js.map +1 -1
  55. package/lib/browser/tree/tree-widget.spec.d.ts +2 -0
  56. package/lib/browser/tree/tree-widget.spec.d.ts.map +1 -0
  57. package/lib/browser/tree/tree-widget.spec.js +192 -0
  58. package/lib/browser/tree/tree-widget.spec.js.map +1 -0
  59. package/lib/browser/view-container.d.ts.map +1 -1
  60. package/lib/browser/view-container.js +2 -2
  61. package/lib/browser/view-container.js.map +1 -1
  62. package/lib/browser/widget-context-key-contribution.d.ts +17 -0
  63. package/lib/browser/widget-context-key-contribution.d.ts.map +1 -0
  64. package/lib/browser/widget-context-key-contribution.js +20 -0
  65. package/lib/browser/widget-context-key-contribution.js.map +1 -0
  66. package/lib/browser/window/browser-window-module.d.ts.map +1 -1
  67. package/lib/browser/window/browser-window-module.js +3 -0
  68. package/lib/browser/window/browser-window-module.js.map +1 -1
  69. package/lib/browser/window/window-launch-args.d.ts +29 -0
  70. package/lib/browser/window/window-launch-args.d.ts.map +1 -0
  71. package/lib/browser/window/window-launch-args.js +39 -0
  72. package/lib/browser/window/window-launch-args.js.map +1 -0
  73. package/lib/browser-only/frontend-only-application-module.d.ts.map +1 -1
  74. package/lib/browser-only/frontend-only-application-module.js +5 -2
  75. package/lib/browser-only/frontend-only-application-module.js.map +1 -1
  76. package/lib/browser-only/messaging/frontend-only-service-connection-provider.d.ts +3 -1
  77. package/lib/browser-only/messaging/frontend-only-service-connection-provider.d.ts.map +1 -1
  78. package/lib/browser-only/messaging/frontend-only-service-connection-provider.js +8 -7
  79. package/lib/browser-only/messaging/frontend-only-service-connection-provider.js.map +1 -1
  80. package/lib/common/index.d.ts +2 -0
  81. package/lib/common/index.d.ts.map +1 -1
  82. package/lib/common/index.js +2 -0
  83. package/lib/common/index.js.map +1 -1
  84. package/lib/common/launch-arguments.d.ts +32 -0
  85. package/lib/common/launch-arguments.d.ts.map +1 -0
  86. package/lib/common/launch-arguments.js +44 -0
  87. package/lib/common/launch-arguments.js.map +1 -0
  88. package/lib/common/remote-cli-args-contribution.d.ts +22 -0
  89. package/lib/common/remote-cli-args-contribution.d.ts.map +1 -0
  90. package/lib/common/remote-cli-args-contribution.js +20 -0
  91. package/lib/common/remote-cli-args-contribution.js.map +1 -0
  92. package/lib/electron-browser/messaging/electron-ipc-connection-source.d.ts +6 -3
  93. package/lib/electron-browser/messaging/electron-ipc-connection-source.d.ts.map +1 -1
  94. package/lib/electron-browser/messaging/electron-ipc-connection-source.js +4 -3
  95. package/lib/electron-browser/messaging/electron-ipc-connection-source.js.map +1 -1
  96. package/lib/electron-browser/preload.d.ts.map +1 -1
  97. package/lib/electron-browser/preload.js +3 -1
  98. package/lib/electron-browser/preload.js.map +1 -1
  99. package/lib/electron-browser/window/electron-window-launch-args.d.ts +14 -0
  100. package/lib/electron-browser/window/electron-window-launch-args.d.ts.map +1 -0
  101. package/lib/electron-browser/window/electron-window-launch-args.js +41 -0
  102. package/lib/electron-browser/window/electron-window-launch-args.js.map +1 -0
  103. package/lib/electron-browser/window/electron-window-launch-args.spec.d.ts +2 -0
  104. package/lib/electron-browser/window/electron-window-launch-args.spec.d.ts.map +1 -0
  105. package/lib/electron-browser/window/electron-window-launch-args.spec.js +43 -0
  106. package/lib/electron-browser/window/electron-window-launch-args.spec.js.map +1 -0
  107. package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
  108. package/lib/electron-browser/window/electron-window-module.js +7 -0
  109. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  110. package/lib/electron-common/electron-api.d.ts +10 -0
  111. package/lib/electron-common/electron-api.d.ts.map +1 -1
  112. package/lib/electron-common/electron-api.js.map +1 -1
  113. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  114. package/lib/electron-main/electron-api-main.js +7 -1
  115. package/lib/electron-main/electron-api-main.js.map +1 -1
  116. package/lib/electron-main/electron-main-application-module.d.ts.map +1 -1
  117. package/lib/electron-main/electron-main-application-module.js +2 -0
  118. package/lib/electron-main/electron-main-application-module.js.map +1 -1
  119. package/lib/electron-main/electron-main-application.d.ts +57 -2
  120. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  121. package/lib/electron-main/electron-main-application.js +68 -8
  122. package/lib/electron-main/electron-main-application.js.map +1 -1
  123. package/lib/electron-main/launch-args-store.d.ts +45 -0
  124. package/lib/electron-main/launch-args-store.d.ts.map +1 -0
  125. package/lib/electron-main/launch-args-store.js +76 -0
  126. package/lib/electron-main/launch-args-store.js.map +1 -0
  127. package/lib/electron-main/launch-args-store.spec.d.ts +2 -0
  128. package/lib/electron-main/launch-args-store.spec.d.ts.map +1 -0
  129. package/lib/electron-main/launch-args-store.spec.js +53 -0
  130. package/lib/electron-main/launch-args-store.spec.js.map +1 -0
  131. package/lib/electron-main/launch-argv-parser.d.ts +19 -0
  132. package/lib/electron-main/launch-argv-parser.d.ts.map +1 -0
  133. package/lib/electron-main/launch-argv-parser.js +71 -0
  134. package/lib/electron-main/launch-argv-parser.js.map +1 -0
  135. package/lib/electron-main/launch-argv-parser.spec.d.ts +2 -0
  136. package/lib/electron-main/launch-argv-parser.spec.d.ts.map +1 -0
  137. package/lib/electron-main/launch-argv-parser.spec.js +62 -0
  138. package/lib/electron-main/launch-argv-parser.spec.js.map +1 -0
  139. package/lib/electron-main/theia-electron-window.d.ts +2 -0
  140. package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
  141. package/lib/electron-main/theia-electron-window.js +12 -0
  142. package/lib/electron-main/theia-electron-window.js.map +1 -1
  143. package/package.json +11 -11
  144. package/src/browser/dialogs.ts +10 -5
  145. package/src/browser/frontend-application-module.ts +5 -1
  146. package/src/browser/index.ts +1 -0
  147. package/src/browser/resource-context-key.ts +61 -16
  148. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.tsx +13 -12
  149. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +36 -4
  150. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +150 -3
  151. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +6 -3
  152. package/src/browser/shell/tab-bar-toolbar/tab-toolbar-item.tsx +13 -5
  153. package/src/browser/style/tree.css +7 -0
  154. package/src/browser/tree/tree-widget.spec.tsx +245 -0
  155. package/src/browser/tree/tree-widget.tsx +36 -12
  156. package/src/browser/view-container.ts +3 -3
  157. package/src/browser/widget-context-key-contribution.ts +34 -0
  158. package/src/browser/window/browser-window-module.ts +3 -0
  159. package/src/browser/window/window-launch-args.ts +53 -0
  160. package/src/browser-only/frontend-only-application-module.ts +5 -2
  161. package/src/browser-only/messaging/frontend-only-service-connection-provider.ts +3 -1
  162. package/src/common/i18n/nls.metadata.json +5246 -1106
  163. package/src/common/index.ts +2 -0
  164. package/src/common/launch-arguments.ts +61 -0
  165. package/src/common/remote-cli-args-contribution.ts +39 -0
  166. package/src/electron-browser/messaging/electron-ipc-connection-source.ts +6 -3
  167. package/src/electron-browser/preload.ts +3 -1
  168. package/src/electron-browser/window/electron-window-launch-args.spec.ts +45 -0
  169. package/src/electron-browser/window/electron-window-launch-args.ts +38 -0
  170. package/src/electron-browser/window/electron-window-module.ts +7 -0
  171. package/src/electron-common/electron-api.ts +10 -0
  172. package/src/electron-main/electron-api-main.ts +7 -1
  173. package/src/electron-main/electron-main-application-module.ts +2 -0
  174. package/src/electron-main/electron-main-application.ts +101 -8
  175. package/src/electron-main/launch-args-store.spec.ts +59 -0
  176. package/src/electron-main/launch-args-store.ts +73 -0
  177. package/src/electron-main/launch-argv-parser.spec.ts +70 -0
  178. package/src/electron-main/launch-argv-parser.ts +66 -0
  179. package/src/electron-main/theia-electron-window.ts +9 -0
@@ -0,0 +1,70 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 EclipseSource GmbH and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { expect } from 'chai';
18
+ import { LaunchArguments } from '../common/launch-arguments';
19
+ import { LaunchArgvParser } from './launch-argv-parser';
20
+
21
+ describe('LaunchArgvParser', () => {
22
+
23
+ it('parses a "--name value" option', () => {
24
+ const args = LaunchArgvParser.parse(['--attach-container', 'B']);
25
+ expect(LaunchArguments.lastValue(args, 'attach-container')).to.equal('B');
26
+ });
27
+
28
+ it('parses a "--name=value" option', () => {
29
+ const args = LaunchArgvParser.parse(['--attach-container=B']);
30
+ expect(LaunchArguments.lastValue(args, 'attach-container')).to.equal('B');
31
+ });
32
+
33
+ it('keeps a value that itself contains "="', () => {
34
+ const args = LaunchArgvParser.parse(['--session-preference=a=1']);
35
+ expect(LaunchArguments.values(args, 'session-preference')).to.deep.equal(['a=1']);
36
+ });
37
+
38
+ it('collects repeated options in order, last winning for a single value', () => {
39
+ const args = LaunchArgvParser.parse(['--session-preference', 'a=1', '--session-preference=b=2', '--other', 'x']);
40
+ expect(LaunchArguments.values(args, 'session-preference')).to.deep.equal(['a=1', 'b=2']);
41
+ expect(LaunchArguments.lastValue(args, 'session-preference')).to.equal('b=2');
42
+ });
43
+
44
+ it('does not consume a following option as a value', () => {
45
+ const args = LaunchArgvParser.parse(['--attach-container', '--session-preference', 'a=1']);
46
+ expect(LaunchArguments.lastValue(args, 'attach-container')).to.equal(undefined);
47
+ expect(LaunchArguments.values(args, 'session-preference')).to.deep.equal(['a=1']);
48
+ });
49
+
50
+ it('reports an absent option as empty', () => {
51
+ const args = LaunchArgvParser.parse(['--other']);
52
+ expect(LaunchArguments.values(args, 'session-preference')).to.deep.equal([]);
53
+ expect(LaunchArguments.lastValue(args, 'session-preference')).to.equal(undefined);
54
+ });
55
+
56
+ it('detects "--no-name" and "--name=false" negations', () => {
57
+ expect(LaunchArguments.isNegated(LaunchArgvParser.parse(['--no-dev-json']), 'dev-json')).to.be.true;
58
+ expect(LaunchArguments.isNegated(LaunchArgvParser.parse(['--dev-json=false']), 'dev-json')).to.be.true;
59
+ });
60
+
61
+ it('does not report a positive or absent flag as negated', () => {
62
+ expect(LaunchArguments.isNegated(LaunchArgvParser.parse(['--dev-json']), 'dev-json')).to.be.false;
63
+ expect(LaunchArguments.isNegated(LaunchArgvParser.parse([]), 'dev-json')).to.be.false;
64
+ });
65
+
66
+ it('ignores tokens that are not options', () => {
67
+ const args = LaunchArgvParser.parse(['/path/to/app', 'positional', '--attach-container', 'B']);
68
+ expect(LaunchArguments.lastValue(args, 'attach-container')).to.equal('B');
69
+ });
70
+ });
@@ -0,0 +1,66 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 EclipseSource GmbH and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { LaunchArguments } from '../common/launch-arguments';
18
+
19
+ /**
20
+ * Parses the `argv` of a forwarded launch into {@link LaunchArguments}.
21
+ *
22
+ * This lives in the Electron main process on purpose: the command line is parsed once, here, and
23
+ * every consumer (main-process contributions and the window the launch opened) works with the
24
+ * parsed result. No argument grammar is shipped to the renderer.
25
+ *
26
+ * The grammar mirrors what yargs accepts on cold start for the same flags: a value given as either
27
+ * `--name value` or `--name=value`, options repeatable to yield multiple values, a token that
28
+ * itself looks like an option (starts with `-`) never consumed as a value, and `--no-name` /
29
+ * `--name=false` recognised as an explicit negation.
30
+ *
31
+ * @experimental
32
+ */
33
+ export namespace LaunchArgvParser {
34
+
35
+ export function parse(argv: readonly string[]): LaunchArguments {
36
+ const values: Record<string, string[]> = {};
37
+ const negated: string[] = [];
38
+ for (let i = 0; i < argv.length; i++) {
39
+ const token = argv[i];
40
+ if (!token.startsWith('--')) {
41
+ continue;
42
+ }
43
+ const name = token.substring(2);
44
+ const equalsIndex = name.indexOf('=');
45
+ if (equalsIndex >= 0) {
46
+ const key = name.substring(0, equalsIndex);
47
+ const value = name.substring(equalsIndex + 1);
48
+ if (value === 'false') {
49
+ negated.push(key);
50
+ } else {
51
+ (values[key] ??= []).push(value);
52
+ }
53
+ } else if (name.startsWith('no-')) {
54
+ negated.push(name.substring('no-'.length));
55
+ } else {
56
+ const next = argv[i + 1];
57
+ // Like yargs, do not consume a following option-looking token (`-x`/`--x`) as the value.
58
+ if (next !== undefined && !next.startsWith('-')) {
59
+ (values[name] ??= []).push(next);
60
+ i++;
61
+ }
62
+ }
63
+ }
64
+ return { values, negated };
65
+ }
66
+ }
@@ -24,6 +24,7 @@ import { createDisposableListener } from './event-utils';
24
24
  import { URI } from '../common/uri';
25
25
  import { FileUri } from '../common/file-uri';
26
26
  import { TheiaRendererAPI } from './electron-api-main';
27
+ import { LaunchArgsStore } from './launch-args-store';
27
28
 
28
29
  /**
29
30
  * Theia tracks the maximized state of Electron Browser Windows.
@@ -62,6 +63,7 @@ export class TheiaElectronWindow {
62
63
  @inject(TheiaBrowserWindowOptions) protected readonly options: TheiaBrowserWindowOptions;
63
64
  @inject(WindowApplicationConfig) protected readonly config: WindowApplicationConfig;
64
65
  @inject(ElectronMainApplicationGlobals) protected readonly globals: ElectronMainApplicationGlobals;
66
+ @inject(LaunchArgsStore) protected readonly launchArgsStore: LaunchArgsStore;
65
67
 
66
68
  protected onDidCloseEmitter = new Emitter<void>();
67
69
 
@@ -155,6 +157,13 @@ export class TheiaElectronWindow {
155
157
  this.handleStopRequest(async () => {
156
158
  this.applicationState = 'init';
157
159
  if (newUrl) {
160
+ // The window is being redirected to a *different* frontend, e.g. into a dev container
161
+ // after a CLI attach. The forwarded launch arguments belong to the launch that created
162
+ // this window and have been acted upon by now, so they must not be redeemed again by
163
+ // the frontend loaded from `newUrl`: that would re-run the attach inside the container
164
+ // and re-apply the launch's preferences to the remote backend. A plain reload (no
165
+ // `newUrl`) keeps them, so `Reload Window` still observes the arguments.
166
+ this.launchArgsStore.delete(this._window.webContents.id);
158
167
  this._window.loadURL(newUrl);
159
168
  } else {
160
169
  this._window.reload();