@theia/core 1.73.0-next.9 → 1.73.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 +26 -16
- package/i18n/nls.cs.json +268 -36
- package/i18n/nls.de.json +268 -36
- package/i18n/nls.es.json +268 -36
- package/i18n/nls.fr.json +268 -36
- package/i18n/nls.hu.json +268 -36
- package/i18n/nls.it.json +268 -36
- package/i18n/nls.ja.json +268 -36
- package/i18n/nls.json +268 -36
- package/i18n/nls.ko.json +268 -36
- package/i18n/nls.pl.json +268 -36
- package/i18n/nls.pt-br.json +268 -36
- package/i18n/nls.ru.json +268 -36
- package/i18n/nls.tr.json +268 -36
- package/i18n/nls.zh-cn.json +268 -36
- package/i18n/nls.zh-tw.json +268 -36
- package/lib/browser/authentication-service.d.ts +2 -0
- package/lib/browser/authentication-service.d.ts.map +1 -1
- package/lib/browser/authentication-service.js +8 -2
- package/lib/browser/authentication-service.js.map +1 -1
- package/lib/browser/catalog.json +251 -72
- package/lib/browser/frontend-application.d.ts +2 -0
- package/lib/browser/frontend-application.d.ts.map +1 -1
- package/lib/browser/frontend-application.js +15 -9
- package/lib/browser/frontend-application.js.map +1 -1
- package/lib/browser/json-schema-store.d.ts +2 -0
- package/lib/browser/json-schema-store.d.ts.map +1 -1
- package/lib/browser/json-schema-store.js +8 -2
- package/lib/browser/json-schema-store.js.map +1 -1
- package/lib/browser/keybinding.js +2 -1
- package/lib/browser/keybinding.js.map +1 -1
- package/lib/browser/markdown-rendering/markdown.d.ts +1 -1
- package/lib/browser/markdown-rendering/markdown.d.ts.map +1 -1
- package/lib/browser/markdown-rendering/markdown.js +1 -1
- package/lib/browser/markdown-rendering/markdown.js.map +1 -1
- package/lib/browser/menu/composite-menu-node.js +4 -4
- package/lib/browser/menu/composite-menu-node.js.map +1 -1
- package/lib/browser/messaging/ws-connection-source.d.ts.map +1 -1
- package/lib/browser/messaging/ws-connection-source.js +1 -6
- package/lib/browser/messaging/ws-connection-source.js.map +1 -1
- package/lib/browser/preferences/frontend-config-preference-contributions.d.ts +2 -0
- package/lib/browser/preferences/frontend-config-preference-contributions.d.ts.map +1 -1
- package/lib/browser/preferences/frontend-config-preference-contributions.js +7 -1
- package/lib/browser/preferences/frontend-config-preference-contributions.js.map +1 -1
- package/lib/browser/preferences/preference-proxy.spec.js +7 -0
- package/lib/browser/preferences/preference-proxy.spec.js.map +1 -1
- package/lib/browser/preferences/preference-schema-provider.spec.js +3 -0
- package/lib/browser/preferences/preference-schema-provider.spec.js.map +1 -1
- package/lib/browser/preferences/preference-validation-service.d.ts +2 -0
- package/lib/browser/preferences/preference-validation-service.d.ts.map +1 -1
- package/lib/browser/preferences/preference-validation-service.js +11 -5
- package/lib/browser/preferences/preference-validation-service.js.map +1 -1
- package/lib/browser/preferences/preference-validation-service.spec.js +2 -0
- package/lib/browser/preferences/preference-validation-service.spec.js.map +1 -1
- package/lib/browser/secondary-window-handler.d.ts +2 -0
- package/lib/browser/secondary-window-handler.d.ts.map +1 -1
- package/lib/browser/secondary-window-handler.js +12 -6
- package/lib/browser/secondary-window-handler.js.map +1 -1
- package/lib/browser/shell/application-shell.d.ts +2 -0
- package/lib/browser/shell/application-shell.d.ts.map +1 -1
- package/lib/browser/shell/application-shell.js +9 -3
- package/lib/browser/shell/application-shell.js.map +1 -1
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.js +6 -6
- 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.js +2 -2
- 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.spec.js +131 -0
- package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.js.map +1 -1
- package/lib/browser/status-bar/status-bar.d.ts +2 -2
- package/lib/browser/status-bar/status-bar.d.ts.map +1 -1
- package/lib/browser/status-bar/status-bar.js.map +1 -1
- package/lib/browser/test/jsdom.d.ts +4 -0
- package/lib/browser/test/jsdom.d.ts.map +1 -1
- package/lib/browser/test/jsdom.js +18 -0
- package/lib/browser/test/jsdom.js.map +1 -1
- package/lib/browser/tree/tree-container.spec.js +4 -0
- package/lib/browser/tree/tree-container.spec.js.map +1 -1
- package/lib/browser/tree/tree-model.d.ts +1 -0
- package/lib/browser/tree/tree-model.d.ts.map +1 -1
- package/lib/browser/tree/tree-model.js +3 -0
- package/lib/browser/tree/tree-model.js.map +1 -1
- package/lib/browser/tree/tree-view-welcome-widget.d.ts +1 -0
- package/lib/browser/tree/tree-view-welcome-widget.d.ts.map +1 -1
- package/lib/browser/tree/tree-view-welcome-widget.js +8 -6
- package/lib/browser/tree/tree-view-welcome-widget.js.map +1 -1
- package/lib/browser/tree/tree-view-welcome-widget.spec.d.ts +2 -0
- package/lib/browser/tree/tree-view-welcome-widget.spec.d.ts.map +1 -0
- package/lib/browser/tree/tree-view-welcome-widget.spec.js +68 -0
- package/lib/browser/tree/tree-view-welcome-widget.spec.js.map +1 -0
- package/lib/browser/tree/tree-widget.js +2 -2
- package/lib/browser/tree/tree-widget.js.map +1 -1
- package/lib/browser/tree/tree.d.ts +24 -2
- package/lib/browser/tree/tree.d.ts.map +1 -1
- package/lib/browser/tree/tree.js +20 -2
- package/lib/browser/tree/tree.js.map +1 -1
- package/lib/browser/tree/tree.spec.js +27 -0
- package/lib/browser/tree/tree.spec.js.map +1 -1
- package/lib/browser/window/default-window-service.d.ts +2 -1
- package/lib/browser/window/default-window-service.d.ts.map +1 -1
- package/lib/browser/window/default-window-service.js +10 -5
- package/lib/browser/window/default-window-service.js.map +1 -1
- package/lib/browser/window/default-window-service.spec.js +2 -0
- package/lib/browser/window/default-window-service.spec.js.map +1 -1
- package/lib/browser-only/messaging/frontend-only-service-connection-provider.d.ts +2 -0
- 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 -2
- package/lib/browser-only/messaging/frontend-only-service-connection-provider.js.map +1 -1
- package/lib/common/command.d.ts +2 -0
- package/lib/common/command.d.ts.map +1 -1
- package/lib/common/command.js +10 -4
- package/lib/common/command.js.map +1 -1
- package/lib/common/preferences/injectable-preference-proxy.d.ts +3 -3
- package/lib/common/preferences/injectable-preference-proxy.d.ts.map +1 -1
- package/lib/common/preferences/injectable-preference-proxy.js +6 -1
- package/lib/common/preferences/injectable-preference-proxy.js.map +1 -1
- package/lib/common/preferences/preference-proxy.d.ts.map +1 -1
- package/lib/common/preferences/preference-proxy.js +6 -1
- package/lib/common/preferences/preference-proxy.js.map +1 -1
- package/lib/electron-main/electron-main-application.d.ts.map +1 -1
- package/lib/electron-main/electron-main-application.js +4 -2
- package/lib/electron-main/electron-main-application.js.map +1 -1
- package/lib/electron-node/hosting/electron-ws-origin-validator.d.ts.map +1 -1
- package/lib/electron-node/hosting/electron-ws-origin-validator.js +5 -2
- package/lib/electron-node/hosting/electron-ws-origin-validator.js.map +1 -1
- package/lib/electron-node/hosting/electron-ws-origin-validator.spec.d.ts +2 -0
- package/lib/electron-node/hosting/electron-ws-origin-validator.spec.d.ts.map +1 -0
- package/lib/electron-node/hosting/electron-ws-origin-validator.spec.js +59 -0
- package/lib/electron-node/hosting/electron-ws-origin-validator.spec.js.map +1 -0
- package/lib/electron-node/request/electron-backend-request-service.d.ts +2 -0
- package/lib/electron-node/request/electron-backend-request-service.d.ts.map +1 -1
- package/lib/electron-node/request/electron-backend-request-service.js +7 -1
- package/lib/electron-node/request/electron-backend-request-service.js.map +1 -1
- package/lib/electron-node/token/electron-token-backend-contribution.d.ts +2 -0
- package/lib/electron-node/token/electron-token-backend-contribution.d.ts.map +1 -1
- package/lib/electron-node/token/electron-token-backend-contribution.js +7 -1
- package/lib/electron-node/token/electron-token-backend-contribution.js.map +1 -1
- package/lib/electron-node/token/electron-token-validator.d.ts +2 -0
- package/lib/electron-node/token/electron-token-validator.d.ts.map +1 -1
- package/lib/electron-node/token/electron-token-validator.js +7 -1
- package/lib/electron-node/token/electron-token-validator.js.map +1 -1
- package/lib/node/backend-application-module.d.ts.map +1 -1
- package/lib/node/backend-application-module.js +2 -0
- package/lib/node/backend-application-module.js.map +1 -1
- package/lib/node/backend-application.d.ts +11 -0
- package/lib/node/backend-application.d.ts.map +1 -1
- package/lib/node/backend-application.js +40 -12
- package/lib/node/backend-application.js.map +1 -1
- package/lib/node/backend-application.spec.js +4 -2
- package/lib/node/backend-application.spec.js.map +1 -1
- package/lib/node/hosting/backend-hosting-module.d.ts.map +1 -1
- package/lib/node/hosting/backend-hosting-module.js +7 -0
- package/lib/node/hosting/backend-hosting-module.js.map +1 -1
- package/lib/node/hosting/browser-connection-token.d.ts +46 -0
- package/lib/node/hosting/browser-connection-token.d.ts.map +1 -0
- package/lib/node/hosting/browser-connection-token.js +120 -0
- package/lib/node/hosting/browser-connection-token.js.map +1 -0
- package/lib/node/hosting/browser-connection-token.spec.d.ts +2 -0
- package/lib/node/hosting/browser-connection-token.spec.d.ts.map +1 -0
- package/lib/node/hosting/browser-connection-token.spec.js +128 -0
- package/lib/node/hosting/browser-connection-token.spec.js.map +1 -0
- package/lib/node/hosting/ws-origin-validator.d.ts.map +1 -1
- package/lib/node/hosting/ws-origin-validator.js +21 -4
- package/lib/node/hosting/ws-origin-validator.js.map +1 -1
- package/lib/node/hosting/ws-origin-validator.spec.d.ts +2 -0
- package/lib/node/hosting/ws-origin-validator.spec.d.ts.map +1 -0
- package/lib/node/hosting/ws-origin-validator.spec.js +131 -0
- package/lib/node/hosting/ws-origin-validator.spec.js.map +1 -0
- package/lib/node/index.d.ts +1 -0
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +3 -1
- package/lib/node/index.js.map +1 -1
- package/lib/node/logger-cli-contribution.d.ts +6 -0
- package/lib/node/logger-cli-contribution.d.ts.map +1 -1
- package/lib/node/logger-cli-contribution.js +28 -5
- package/lib/node/logger-cli-contribution.js.map +1 -1
- package/lib/node/logger-cli-contribution.spec.js +54 -0
- package/lib/node/logger-cli-contribution.spec.js.map +1 -1
- package/lib/node/messaging/default-messaging-service.d.ts +2 -0
- package/lib/node/messaging/default-messaging-service.d.ts.map +1 -1
- package/lib/node/messaging/default-messaging-service.js +8 -2
- package/lib/node/messaging/default-messaging-service.js.map +1 -1
- package/lib/node/messaging/test/default-messaging-service.spec.js +2 -0
- package/lib/node/messaging/test/default-messaging-service.spec.js.map +1 -1
- package/lib/node/messaging/websocket-endpoint.d.ts +7 -0
- package/lib/node/messaging/websocket-endpoint.d.ts.map +1 -1
- package/lib/node/messaging/websocket-endpoint.js +21 -6
- package/lib/node/messaging/websocket-endpoint.js.map +1 -1
- package/lib/node/process-utils.d.ts +2 -0
- package/lib/node/process-utils.d.ts.map +1 -1
- package/lib/node/process-utils.js +8 -2
- package/lib/node/process-utils.js.map +1 -1
- package/lib/node/process-utils.spec.js +11 -9
- package/lib/node/process-utils.spec.js.map +1 -1
- package/lib/node/request/backend-request-facade.d.ts +19 -0
- package/lib/node/request/backend-request-facade.d.ts.map +1 -1
- package/lib/node/request/backend-request-facade.js +93 -3
- package/lib/node/request/backend-request-facade.js.map +1 -1
- package/lib/node/request/backend-request-facade.spec.d.ts +2 -0
- package/lib/node/request/backend-request-facade.spec.d.ts.map +1 -0
- package/lib/node/request/backend-request-facade.spec.js +171 -0
- package/lib/node/request/backend-request-facade.spec.js.map +1 -0
- package/package.json +29 -20
- package/src/browser/authentication-service.ts +6 -3
- package/src/browser/frontend-application.ts +13 -9
- package/src/browser/json-schema-store.ts +6 -2
- package/src/browser/keybinding.ts +2 -2
- package/src/browser/markdown-rendering/markdown.tsx +2 -2
- package/src/browser/menu/composite-menu-node.ts +4 -4
- package/src/browser/messaging/ws-connection-source.ts +1 -6
- package/src/browser/preferences/frontend-config-preference-contributions.ts +7 -2
- package/src/browser/preferences/preference-proxy.spec.ts +8 -0
- package/src/browser/preferences/preference-schema-provider.spec.ts +5 -0
- package/src/browser/preferences/preference-validation-service.spec.ts +3 -1
- package/src/browser/preferences/preference-validation-service.ts +9 -6
- package/src/browser/secondary-window-handler.ts +11 -7
- package/src/browser/shell/application-shell.ts +8 -4
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-menu-adapters.tsx +6 -6
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +2 -2
- package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.spec.ts +159 -1
- package/src/browser/status-bar/status-bar.tsx +3 -3
- package/src/browser/test/jsdom.ts +18 -0
- package/src/browser/tree/tree-container.spec.ts +6 -0
- package/src/browser/tree/tree-model.ts +4 -0
- package/src/browser/tree/tree-view-welcome-widget.spec.ts +82 -0
- package/src/browser/tree/tree-view-welcome-widget.tsx +10 -11
- package/src/browser/tree/tree-widget.tsx +2 -2
- package/src/browser/tree/tree.spec.ts +30 -0
- package/src/browser/tree/tree.ts +31 -4
- package/src/browser/window/default-window-service.spec.ts +3 -1
- package/src/browser/window/default-window-service.ts +9 -6
- package/src/browser-only/messaging/frontend-only-service-connection-provider.ts +8 -3
- package/src/common/command.ts +8 -4
- package/src/common/i18n/nls.metadata.json +2659 -374
- package/src/common/preferences/injectable-preference-proxy.ts +10 -4
- package/src/common/preferences/preference-proxy.ts +10 -4
- package/src/electron-main/electron-main-application.ts +4 -2
- package/src/electron-node/hosting/electron-ws-origin-validator.spec.ts +69 -0
- package/src/electron-node/hosting/electron-ws-origin-validator.ts +5 -2
- package/src/electron-node/request/electron-backend-request-service.ts +6 -2
- package/src/electron-node/token/electron-token-backend-contribution.ts +6 -2
- package/src/electron-node/token/electron-token-validator.ts +6 -2
- package/src/node/backend-application-module.ts +4 -2
- package/src/node/backend-application.spec.ts +5 -3
- package/src/node/backend-application.ts +33 -11
- package/src/node/hosting/backend-hosting-module.ts +10 -0
- package/src/node/hosting/browser-connection-token.spec.ts +167 -0
- package/src/node/hosting/browser-connection-token.ts +126 -0
- package/src/node/hosting/ws-origin-validator.spec.ts +193 -0
- package/src/node/hosting/ws-origin-validator.ts +23 -4
- package/src/node/index.ts +1 -0
- package/src/node/logger-cli-contribution.spec.ts +65 -0
- package/src/node/logger-cli-contribution.ts +32 -5
- package/src/node/messaging/default-messaging-service.ts +6 -2
- package/src/node/messaging/test/default-messaging-service.spec.ts +3 -1
- package/src/node/messaging/websocket-endpoint.ts +23 -7
- package/src/node/process-utils.spec.ts +12 -9
- package/src/node/process-utils.ts +7 -3
- package/src/node/request/backend-request-facade.spec.ts +203 -0
- package/src/node/request/backend-request-facade.ts +108 -3
|
@@ -120,6 +120,36 @@ describe('Tree', () => {
|
|
|
120
120
|
}`, node);
|
|
121
121
|
});
|
|
122
122
|
|
|
123
|
+
it('removeChild - clears parent and sibling pointers on the removed node', () => {
|
|
124
|
+
const node = getNode();
|
|
125
|
+
const middle = node.children[1];
|
|
126
|
+
CompositeTreeNode.removeChild(node, middle);
|
|
127
|
+
expect(middle.parent).to.be.undefined;
|
|
128
|
+
expect(middle.previousSibling).to.be.undefined;
|
|
129
|
+
expect(middle.nextSibling).to.be.undefined;
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
it('removeChild - purges the detached subtree from the tree index when a tree is provided', () => {
|
|
133
|
+
const target = model.getNode('1.2');
|
|
134
|
+
expect(target).to.not.be.undefined;
|
|
135
|
+
const parent = target!.parent!;
|
|
136
|
+
expect(model.getNode('1.2.1')).to.not.be.undefined;
|
|
137
|
+
CompositeTreeNode.removeChild(parent, target!, model);
|
|
138
|
+
expect(model.getNode('1.2')).to.be.undefined;
|
|
139
|
+
expect(model.getNode('1.2.1')).to.be.undefined;
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('removeChild - leaves the index untouched when no tree is provided', () => {
|
|
143
|
+
const target = model.getNode('1.2')!;
|
|
144
|
+
const parent = target.parent!;
|
|
145
|
+
CompositeTreeNode.removeChild(parent, target);
|
|
146
|
+
// Until the caller explicitly purges, the orphan is still in the index.
|
|
147
|
+
expect(model.getNode('1.2')).to.equal(target);
|
|
148
|
+
// Explicit purge cleans it up.
|
|
149
|
+
model.removeNode(target);
|
|
150
|
+
expect(model.getNode('1.2')).to.be.undefined;
|
|
151
|
+
});
|
|
152
|
+
|
|
123
153
|
let model: TreeModel;
|
|
124
154
|
beforeEach(() => {
|
|
125
155
|
model = createTreeModel();
|
package/src/browser/tree/tree.ts
CHANGED
|
@@ -14,13 +14,14 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
|
-
import { injectable } from 'inversify';
|
|
17
|
+
import { injectable, inject, named } from 'inversify';
|
|
18
18
|
import { Event, Emitter, WaitUntilEvent } from '../../common/event';
|
|
19
19
|
import { Disposable, DisposableCollection } from '../../common/disposable';
|
|
20
20
|
import { CancellationToken, CancellationTokenSource } from '../../common/cancellation';
|
|
21
21
|
import { timeout } from '../../common/promise-util';
|
|
22
22
|
import { isObject, Mutable } from '../../common';
|
|
23
23
|
import { AccessibilityInformation } from '../../common/accessibility';
|
|
24
|
+
import { ILogger } from '../../common/logger';
|
|
24
25
|
|
|
25
26
|
export const Tree = Symbol('Tree');
|
|
26
27
|
|
|
@@ -78,6 +79,17 @@ export interface Tree extends Disposable {
|
|
|
78
79
|
readonly onDidUpdate: Event<TreeNode[]>;
|
|
79
80
|
|
|
80
81
|
markAsChecked(node: TreeNode, checked: boolean): void;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Remove the given node and all of its descendants from the tree's internal
|
|
85
|
+
* id-to-node index. Safe to call on already-detached subtrees.
|
|
86
|
+
*
|
|
87
|
+
* Callers that mutate the tree structure directly via
|
|
88
|
+
* {@link CompositeTreeNode.removeChild} should invoke this (or pass the tree
|
|
89
|
+
* to `removeChild`) to keep {@link getNode} and {@link validateNode} from
|
|
90
|
+
* returning orphaned nodes.
|
|
91
|
+
*/
|
|
92
|
+
removeNode(node: TreeNode | undefined): void;
|
|
81
93
|
}
|
|
82
94
|
|
|
83
95
|
export interface TreeViewItemCheckboxInfo {
|
|
@@ -215,7 +227,17 @@ export namespace CompositeTreeNode {
|
|
|
215
227
|
return parent;
|
|
216
228
|
}
|
|
217
229
|
|
|
218
|
-
|
|
230
|
+
/**
|
|
231
|
+
* Detach the given `child` from the `parent`.
|
|
232
|
+
*
|
|
233
|
+
* After this call, the child's `parent`, `previousSibling`, and
|
|
234
|
+
* `nextSibling` references are cleared, symmetric with `setParent`. If a
|
|
235
|
+
* `tree` is provided, the child and its descendants are also purged from
|
|
236
|
+
* the tree's id-to-node index so that {@link Tree.getNode} no longer
|
|
237
|
+
* returns the detached subtree. Otherwise the index entries persist and
|
|
238
|
+
* the caller is responsible for cleanup (e.g., via `tree.removeNode`).
|
|
239
|
+
*/
|
|
240
|
+
export function removeChild(parent: CompositeTreeNode, child: TreeNode, tree?: Tree): void {
|
|
219
241
|
const children = parent.children as TreeNode[];
|
|
220
242
|
const index = children.findIndex(value => value.id === child.id);
|
|
221
243
|
if (index === -1) {
|
|
@@ -229,6 +251,8 @@ export namespace CompositeTreeNode {
|
|
|
229
251
|
if (nextSibling) {
|
|
230
252
|
Object.assign(nextSibling, { previousSibling });
|
|
231
253
|
}
|
|
254
|
+
Object.assign(child, { parent: undefined, previousSibling: undefined, nextSibling: undefined });
|
|
255
|
+
tree?.removeNode(child);
|
|
232
256
|
}
|
|
233
257
|
|
|
234
258
|
export function setParent(child: TreeNode, index: number, parent: CompositeTreeNode): void {
|
|
@@ -250,6 +274,9 @@ export namespace CompositeTreeNode {
|
|
|
250
274
|
@injectable()
|
|
251
275
|
export class TreeImpl implements Tree {
|
|
252
276
|
|
|
277
|
+
@inject(ILogger) @named('core:TreeImpl')
|
|
278
|
+
protected readonly logger: ILogger;
|
|
279
|
+
|
|
253
280
|
protected _root: TreeNode | undefined;
|
|
254
281
|
protected readonly onChangedEmitter = new Emitter<void>();
|
|
255
282
|
protected readonly onNodeRefreshedEmitter = new Emitter<CompositeTreeNode & WaitUntilEvent>();
|
|
@@ -344,7 +371,7 @@ export class TreeImpl implements Tree {
|
|
|
344
371
|
protected async setChildren(parent: CompositeTreeNode, children: TreeNode[]): Promise<CompositeTreeNode | undefined> {
|
|
345
372
|
const root = this.getRootNode(parent);
|
|
346
373
|
if (this.nodes[root.id] && this.nodes[root.id] !== root) {
|
|
347
|
-
|
|
374
|
+
this.logger.error(`Child node '${parent.id}' does not belong to this '${root.id}' tree.`);
|
|
348
375
|
return undefined;
|
|
349
376
|
}
|
|
350
377
|
this.removeNode(parent);
|
|
@@ -354,7 +381,7 @@ export class TreeImpl implements Tree {
|
|
|
354
381
|
return parent;
|
|
355
382
|
}
|
|
356
383
|
|
|
357
|
-
|
|
384
|
+
removeNode(node: TreeNode | undefined): void {
|
|
358
385
|
if (CompositeTreeNode.is(node)) {
|
|
359
386
|
node.children.forEach(child => this.removeNode(child));
|
|
360
387
|
}
|
|
@@ -15,11 +15,12 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
17
|
import { Container } from 'inversify';
|
|
18
|
-
import { ContributionProvider } from '../../common';
|
|
18
|
+
import { ContributionProvider, ILogger } from '../../common';
|
|
19
19
|
import { CorePreferences } from '../../common/core-preferences';
|
|
20
20
|
import { FrontendApplicationContribution } from '../frontend-application-contribution';
|
|
21
21
|
import { DefaultWindowService } from './default-window-service';
|
|
22
22
|
import assert = require('assert');
|
|
23
|
+
import { MockLogger } from '../../common/test/mock-logger';
|
|
23
24
|
|
|
24
25
|
describe('DefaultWindowService', () => {
|
|
25
26
|
class TestFrontendApplicationContribution implements FrontendApplicationContribution {
|
|
@@ -42,6 +43,7 @@ describe('DefaultWindowService', () => {
|
|
|
42
43
|
.toConstantValue({
|
|
43
44
|
'application.confirmExit': confirmExit,
|
|
44
45
|
});
|
|
46
|
+
container.bind(ILogger).to(MockLogger).inSingletonScope();
|
|
45
47
|
return container.get(DefaultWindowService);
|
|
46
48
|
}
|
|
47
49
|
it('onWillStop should be called on every contribution (never)', () => {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
|
|
17
17
|
import { inject, injectable, named } from 'inversify';
|
|
18
|
-
import { Event, Emitter } from '../../common';
|
|
18
|
+
import { Event, Emitter, ILogger } from '../../common';
|
|
19
19
|
import { CorePreferences } from '../../common/core-preferences';
|
|
20
20
|
import { ContributionProvider } from '../../common/contribution-provider';
|
|
21
21
|
import { FrontendApplicationContribution, OnWillStopAction } from '../frontend-application-contribution';
|
|
@@ -43,6 +43,9 @@ export class DefaultWindowService implements WindowService, FrontendApplicationC
|
|
|
43
43
|
@named(FrontendApplicationContribution)
|
|
44
44
|
protected readonly contributions: ContributionProvider<FrontendApplicationContribution>;
|
|
45
45
|
|
|
46
|
+
@inject(ILogger) @named('core:DefaultWindowService')
|
|
47
|
+
protected readonly logger: ILogger;
|
|
48
|
+
|
|
46
49
|
onStart(app: FrontendApplication): void {
|
|
47
50
|
this.frontendApplication = app;
|
|
48
51
|
this.registerUnloadListeners();
|
|
@@ -114,7 +117,7 @@ export class DefaultWindowService implements WindowService, FrontendApplicationC
|
|
|
114
117
|
return true;
|
|
115
118
|
}
|
|
116
119
|
const preparedValues = await Promise.all(vetoes.map(e => e.prepare?.(stopReason)));
|
|
117
|
-
|
|
120
|
+
this.logger.debug('Shutdown prevented by', vetoes.map(({ reason }) => reason).join(', '));
|
|
118
121
|
for (let i = 0; i < vetoes.length; i++) {
|
|
119
122
|
try {
|
|
120
123
|
const result = await vetoes[i].action(preparedValues[i], stopReason);
|
|
@@ -122,10 +125,10 @@ export class DefaultWindowService implements WindowService, FrontendApplicationC
|
|
|
122
125
|
return false;
|
|
123
126
|
}
|
|
124
127
|
} catch (e) {
|
|
125
|
-
|
|
128
|
+
this.logger.error(e);
|
|
126
129
|
}
|
|
127
130
|
}
|
|
128
|
-
|
|
131
|
+
this.logger.debug('OnWillStop actions resolved; allowing shutdown');
|
|
129
132
|
this.allowVetoes = false;
|
|
130
133
|
return true;
|
|
131
134
|
}
|
|
@@ -145,10 +148,10 @@ export class DefaultWindowService implements WindowService, FrontendApplicationC
|
|
|
145
148
|
const vetoes = this.collectContributionUnloadVetoes();
|
|
146
149
|
if (vetoes.length) {
|
|
147
150
|
// In the browser, we don't call the functions because this has to finish in a single tick, so we treat any desired action as a veto.
|
|
148
|
-
|
|
151
|
+
this.logger.debug('Shutdown prevented by', vetoes.map(({ reason }) => reason).join(', '));
|
|
149
152
|
return this.preventUnload(event);
|
|
150
153
|
}
|
|
151
|
-
|
|
154
|
+
this.logger.debug('Shutdown will proceed.');
|
|
152
155
|
}
|
|
153
156
|
|
|
154
157
|
/**
|
|
@@ -14,8 +14,9 @@
|
|
|
14
14
|
// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
|
|
15
15
|
// *****************************************************************************
|
|
16
16
|
import { Event, RpcProxy, Channel, RpcProxyFactory, Emitter } from '../../common';
|
|
17
|
-
import { injectable } from 'inversify';
|
|
17
|
+
import { injectable, inject, named } from 'inversify';
|
|
18
18
|
import { ServiceConnectionProvider } from '../../browser/messaging/service-connection-provider';
|
|
19
|
+
import { ILogger } from '../../common/logger';
|
|
19
20
|
import { ConnectionSource } from '../../browser/messaging/connection-source';
|
|
20
21
|
|
|
21
22
|
@injectable()
|
|
@@ -25,15 +26,19 @@ export class FrontendOnlyConnectionSource implements ConnectionSource {
|
|
|
25
26
|
|
|
26
27
|
@injectable()
|
|
27
28
|
export class FrontendOnlyServiceConnectionProvider extends ServiceConnectionProvider {
|
|
29
|
+
|
|
30
|
+
@inject(ILogger) @named('core:FrontendOnlyServiceConnectionProvider')
|
|
31
|
+
protected readonly logger: ILogger;
|
|
32
|
+
|
|
28
33
|
onSocketDidOpen = Event.None;
|
|
29
34
|
onSocketDidClose = Event.None;
|
|
30
35
|
onIncomingMessageActivity = Event.None;
|
|
31
36
|
override createProxy<T extends object>(path: unknown, target?: unknown): RpcProxy<T> {
|
|
32
|
-
|
|
37
|
+
this.logger.debug(`[Frontend-Only Fallback] Created proxy connection for ${path}`);
|
|
33
38
|
const factory = target instanceof RpcProxyFactory ? target : new RpcProxyFactory<T>(target);
|
|
34
39
|
return factory.createProxy();
|
|
35
40
|
}
|
|
36
41
|
override listen(path: string, handler: ServiceConnectionProvider.ConnectionHandler, reconnect: boolean): void {
|
|
37
|
-
|
|
42
|
+
this.logger.debug('[Frontend-Only Fallback] Listen to websocket connection requested');
|
|
38
43
|
}
|
|
39
44
|
}
|
package/src/common/command.ts
CHANGED
|
@@ -21,6 +21,7 @@ import { ContributionProvider } from './contribution-provider';
|
|
|
21
21
|
import { nls } from './nls';
|
|
22
22
|
import debounce = require('p-debounce');
|
|
23
23
|
import { isObject } from './types';
|
|
24
|
+
import { ILogger } from './logger';
|
|
24
25
|
|
|
25
26
|
/**
|
|
26
27
|
* A command is a unique identifier of a function
|
|
@@ -190,6 +191,9 @@ export interface CommandService {
|
|
|
190
191
|
@injectable()
|
|
191
192
|
export class CommandRegistry implements CommandService {
|
|
192
193
|
|
|
194
|
+
@inject(ILogger) @named('core:CommandRegistry')
|
|
195
|
+
protected readonly logger: ILogger;
|
|
196
|
+
|
|
193
197
|
protected readonly _commands: { [id: string]: Command } = {};
|
|
194
198
|
protected readonly _handlers: { [id: string]: CommandHandler[] } = {};
|
|
195
199
|
|
|
@@ -232,7 +236,7 @@ export class CommandRegistry implements CommandService {
|
|
|
232
236
|
*/
|
|
233
237
|
registerCommand(command: Command, handler?: CommandHandler): Disposable {
|
|
234
238
|
if (this._commands[command.id]) {
|
|
235
|
-
|
|
239
|
+
this.logger.warn(`A command ${command.id} is already registered.`);
|
|
236
240
|
return Disposable.NULL;
|
|
237
241
|
}
|
|
238
242
|
const toDispose = new DisposableCollection(this.doRegisterCommand(command));
|
|
@@ -363,7 +367,7 @@ export class CommandRegistry implements CommandService {
|
|
|
363
367
|
return handler;
|
|
364
368
|
}
|
|
365
369
|
} catch (error) {
|
|
366
|
-
|
|
370
|
+
this.logger.error(error);
|
|
367
371
|
}
|
|
368
372
|
}
|
|
369
373
|
}
|
|
@@ -383,7 +387,7 @@ export class CommandRegistry implements CommandService {
|
|
|
383
387
|
return handler;
|
|
384
388
|
}
|
|
385
389
|
} catch (error) {
|
|
386
|
-
|
|
390
|
+
this.logger.error(error);
|
|
387
391
|
}
|
|
388
392
|
}
|
|
389
393
|
}
|
|
@@ -403,7 +407,7 @@ export class CommandRegistry implements CommandService {
|
|
|
403
407
|
return handler;
|
|
404
408
|
}
|
|
405
409
|
} catch (error) {
|
|
406
|
-
|
|
410
|
+
this.logger.error(error);
|
|
407
411
|
}
|
|
408
412
|
}
|
|
409
413
|
}
|