@theia/core 1.76.0-next.6 → 1.76.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.
- package/README.md +8 -8
- package/i18n/nls.cs.json +187 -49
- package/i18n/nls.de.json +187 -49
- package/i18n/nls.es.json +187 -49
- package/i18n/nls.fr.json +187 -49
- package/i18n/nls.hu.json +187 -49
- package/i18n/nls.it.json +187 -49
- package/i18n/nls.ja.json +187 -49
- package/i18n/nls.json +187 -49
- package/i18n/nls.ko.json +187 -49
- package/i18n/nls.pl.json +187 -49
- package/i18n/nls.pt-br.json +187 -49
- package/i18n/nls.ru.json +187 -49
- package/i18n/nls.tr.json +187 -49
- package/i18n/nls.zh-cn.json +187 -49
- package/i18n/nls.zh-tw.json +187 -49
- package/lib/browser/catalog.json +175 -95
- package/lib/browser/dialogs.d.ts +2 -0
- package/lib/browser/dialogs.d.ts.map +1 -1
- package/lib/browser/dialogs.js +9 -5
- package/lib/browser/dialogs.js.map +1 -1
- package/lib/browser/frontend-application-module.d.ts.map +1 -1
- package/lib/browser/frontend-application-module.js +3 -0
- package/lib/browser/frontend-application-module.js.map +1 -1
- package/lib/browser/index.d.ts +1 -0
- package/lib/browser/index.d.ts.map +1 -1
- package/lib/browser/index.js +1 -0
- package/lib/browser/index.js.map +1 -1
- package/lib/browser/resource-context-key.d.ts +25 -0
- package/lib/browser/resource-context-key.d.ts.map +1 -1
- package/lib/browser/resource-context-key.js +41 -16
- package/lib/browser/resource-context-key.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts +7 -5
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +13 -12
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +11 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +38 -3
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +2 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +4 -2
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.js +123 -2
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts +12 -4
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.d.ts.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.js +2 -2
- package/lib/browser/shell/tab-bar-toolbar/tab-toolbar-item.js.map +1 -1
- package/lib/browser/tree/tree-widget.d.ts +20 -2
- package/lib/browser/tree/tree-widget.d.ts.map +1 -1
- package/lib/browser/tree/tree-widget.js +31 -13
- package/lib/browser/tree/tree-widget.js.map +1 -1
- package/lib/browser/tree/tree-widget.spec.d.ts +2 -0
- package/lib/browser/tree/tree-widget.spec.d.ts.map +1 -0
- package/lib/browser/tree/tree-widget.spec.js +192 -0
- package/lib/browser/tree/tree-widget.spec.js.map +1 -0
- package/lib/browser/view-container.d.ts.map +1 -1
- package/lib/browser/view-container.js +2 -2
- package/lib/browser/view-container.js.map +1 -1
- package/lib/browser/widget-context-key-contribution.d.ts +17 -0
- package/lib/browser/widget-context-key-contribution.d.ts.map +1 -0
- package/lib/browser/widget-context-key-contribution.js +20 -0
- package/lib/browser/widget-context-key-contribution.js.map +1 -0
- package/lib/browser/window/browser-window-module.d.ts.map +1 -1
- package/lib/browser/window/browser-window-module.js +3 -0
- package/lib/browser/window/browser-window-module.js.map +1 -1
- package/lib/browser/window/window-launch-args.d.ts +29 -0
- package/lib/browser/window/window-launch-args.d.ts.map +1 -0
- package/lib/browser/window/window-launch-args.js +39 -0
- package/lib/browser/window/window-launch-args.js.map +1 -0
- package/lib/browser-only/frontend-only-application-module.d.ts.map +1 -1
- package/lib/browser-only/frontend-only-application-module.js +5 -2
- package/lib/browser-only/frontend-only-application-module.js.map +1 -1
- package/lib/browser-only/messaging/frontend-only-service-connection-provider.d.ts +3 -1
- package/lib/browser-only/messaging/frontend-only-service-connection-provider.d.ts.map +1 -1
- package/lib/browser-only/messaging/frontend-only-service-connection-provider.js +8 -7
- package/lib/browser-only/messaging/frontend-only-service-connection-provider.js.map +1 -1
- package/lib/common/index.d.ts +2 -0
- package/lib/common/index.d.ts.map +1 -1
- package/lib/common/index.js +2 -0
- package/lib/common/index.js.map +1 -1
- package/lib/common/launch-arguments.d.ts +32 -0
- package/lib/common/launch-arguments.d.ts.map +1 -0
- package/lib/common/launch-arguments.js +44 -0
- package/lib/common/launch-arguments.js.map +1 -0
- package/lib/common/remote-cli-args-contribution.d.ts +22 -0
- package/lib/common/remote-cli-args-contribution.d.ts.map +1 -0
- package/lib/common/remote-cli-args-contribution.js +20 -0
- package/lib/common/remote-cli-args-contribution.js.map +1 -0
- package/lib/electron-browser/messaging/electron-ipc-connection-source.d.ts +6 -3
- package/lib/electron-browser/messaging/electron-ipc-connection-source.d.ts.map +1 -1
- package/lib/electron-browser/messaging/electron-ipc-connection-source.js +4 -3
- package/lib/electron-browser/messaging/electron-ipc-connection-source.js.map +1 -1
- package/lib/electron-browser/preload.d.ts.map +1 -1
- package/lib/electron-browser/preload.js +3 -1
- package/lib/electron-browser/preload.js.map +1 -1
- package/lib/electron-browser/window/electron-window-launch-args.d.ts +14 -0
- package/lib/electron-browser/window/electron-window-launch-args.d.ts.map +1 -0
- package/lib/electron-browser/window/electron-window-launch-args.js +41 -0
- package/lib/electron-browser/window/electron-window-launch-args.js.map +1 -0
- package/lib/electron-browser/window/electron-window-launch-args.spec.d.ts +2 -0
- package/lib/electron-browser/window/electron-window-launch-args.spec.d.ts.map +1 -0
- package/lib/electron-browser/window/electron-window-launch-args.spec.js +43 -0
- package/lib/electron-browser/window/electron-window-launch-args.spec.js.map +1 -0
- package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
- package/lib/electron-browser/window/electron-window-module.js +7 -0
- package/lib/electron-browser/window/electron-window-module.js.map +1 -1
- package/lib/electron-common/electron-api.d.ts +10 -0
- package/lib/electron-common/electron-api.d.ts.map +1 -1
- package/lib/electron-common/electron-api.js.map +1 -1
- package/lib/electron-main/electron-api-main.d.ts.map +1 -1
- package/lib/electron-main/electron-api-main.js +7 -1
- package/lib/electron-main/electron-api-main.js.map +1 -1
- package/lib/electron-main/electron-main-application-module.d.ts.map +1 -1
- package/lib/electron-main/electron-main-application-module.js +2 -0
- package/lib/electron-main/electron-main-application-module.js.map +1 -1
- package/lib/electron-main/electron-main-application.d.ts +57 -2
- package/lib/electron-main/electron-main-application.d.ts.map +1 -1
- package/lib/electron-main/electron-main-application.js +68 -8
- package/lib/electron-main/electron-main-application.js.map +1 -1
- package/lib/electron-main/launch-args-store.d.ts +45 -0
- package/lib/electron-main/launch-args-store.d.ts.map +1 -0
- package/lib/electron-main/launch-args-store.js +76 -0
- package/lib/electron-main/launch-args-store.js.map +1 -0
- package/lib/electron-main/launch-args-store.spec.d.ts +2 -0
- package/lib/electron-main/launch-args-store.spec.d.ts.map +1 -0
- package/lib/electron-main/launch-args-store.spec.js +53 -0
- package/lib/electron-main/launch-args-store.spec.js.map +1 -0
- package/lib/electron-main/launch-argv-parser.d.ts +19 -0
- package/lib/electron-main/launch-argv-parser.d.ts.map +1 -0
- package/lib/electron-main/launch-argv-parser.js +71 -0
- package/lib/electron-main/launch-argv-parser.js.map +1 -0
- package/lib/electron-main/launch-argv-parser.spec.d.ts +2 -0
- package/lib/electron-main/launch-argv-parser.spec.d.ts.map +1 -0
- package/lib/electron-main/launch-argv-parser.spec.js +62 -0
- package/lib/electron-main/launch-argv-parser.spec.js.map +1 -0
- package/lib/electron-main/theia-electron-window.d.ts +2 -0
- package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
- package/lib/electron-main/theia-electron-window.js +12 -0
- package/lib/electron-main/theia-electron-window.js.map +1 -1
- package/package.json +11 -11
- package/src/browser/dialogs.ts +10 -5
- package/src/browser/frontend-application-module.ts +5 -1
- package/src/browser/index.ts +1 -0
- package/src/browser/resource-context-key.ts +61 -16
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.tsx +13 -12
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +36 -4
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +150 -3
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +6 -3
- package/src/browser/shell/tab-bar-toolbar/tab-toolbar-item.tsx +13 -5
- package/src/browser/style/tree.css +7 -0
- package/src/browser/tree/tree-widget.spec.tsx +245 -0
- package/src/browser/tree/tree-widget.tsx +36 -12
- package/src/browser/view-container.ts +3 -3
- package/src/browser/widget-context-key-contribution.ts +34 -0
- package/src/browser/window/browser-window-module.ts +3 -0
- package/src/browser/window/window-launch-args.ts +53 -0
- package/src/browser-only/frontend-only-application-module.ts +5 -2
- package/src/browser-only/messaging/frontend-only-service-connection-provider.ts +3 -1
- package/src/common/i18n/nls.metadata.json +5246 -1106
- package/src/common/index.ts +2 -0
- package/src/common/launch-arguments.ts +61 -0
- package/src/common/remote-cli-args-contribution.ts +39 -0
- package/src/electron-browser/messaging/electron-ipc-connection-source.ts +6 -3
- package/src/electron-browser/preload.ts +3 -1
- package/src/electron-browser/window/electron-window-launch-args.spec.ts +45 -0
- package/src/electron-browser/window/electron-window-launch-args.ts +38 -0
- package/src/electron-browser/window/electron-window-module.ts +7 -0
- package/src/electron-common/electron-api.ts +10 -0
- package/src/electron-main/electron-api-main.ts +7 -1
- package/src/electron-main/electron-main-application-module.ts +2 -0
- package/src/electron-main/electron-main-application.ts +101 -8
- package/src/electron-main/launch-args-store.spec.ts +59 -0
- package/src/electron-main/launch-args-store.ts +73 -0
- package/src/electron-main/launch-argv-parser.spec.ts +70 -0
- package/src/electron-main/launch-argv-parser.ts +66 -0
- 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();
|