@theia/core 1.38.0 → 1.39.0-next.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 (71) hide show
  1. package/README.md +7 -7
  2. package/lib/browser/about-dialog.d.ts +2 -1
  3. package/lib/browser/about-dialog.d.ts.map +1 -1
  4. package/lib/browser/about-dialog.js +5 -2
  5. package/lib/browser/about-dialog.js.map +1 -1
  6. package/lib/browser/frontend-application-bindings.js +1 -1
  7. package/lib/browser/frontend-application-bindings.js.map +1 -1
  8. package/lib/browser/frontend-application-module.js +1 -1
  9. package/lib/browser/frontend-application-module.js.map +1 -1
  10. package/lib/browser/keyboard/browser-keyboard-layout-provider.d.ts +2 -1
  11. package/lib/browser/keyboard/browser-keyboard-layout-provider.d.ts.map +1 -1
  12. package/lib/browser/keyboard/browser-keyboard-layout-provider.js +6 -3
  13. package/lib/browser/keyboard/browser-keyboard-layout-provider.js.map +1 -1
  14. package/lib/browser/preferences/injectable-preference-proxy.d.ts +1 -1
  15. package/lib/browser/preferences/injectable-preference-proxy.d.ts.map +1 -1
  16. package/lib/browser/preferences/injectable-preference-proxy.js +5 -4
  17. package/lib/browser/preferences/injectable-preference-proxy.js.map +1 -1
  18. package/lib/common/logger.d.ts +3 -6
  19. package/lib/common/logger.d.ts.map +1 -1
  20. package/lib/common/logger.js +29 -22
  21. package/lib/common/logger.js.map +1 -1
  22. package/lib/common/messaging/proxy-factory.d.ts.map +1 -1
  23. package/lib/common/messaging/proxy-factory.js +4 -0
  24. package/lib/common/messaging/proxy-factory.js.map +1 -1
  25. package/lib/common/performance/stopwatch.d.ts +1 -1
  26. package/lib/common/performance/stopwatch.d.ts.map +1 -1
  27. package/lib/common/performance/stopwatch.js.map +1 -1
  28. package/lib/electron-browser/keyboard/electron-keyboard-layout-change-notifier.d.ts +1 -1
  29. package/lib/electron-browser/keyboard/electron-keyboard-layout-change-notifier.d.ts.map +1 -1
  30. package/lib/electron-browser/keyboard/electron-keyboard-layout-change-notifier.js +2 -2
  31. package/lib/electron-browser/keyboard/electron-keyboard-layout-change-notifier.js.map +1 -1
  32. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts +2 -1
  33. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts.map +1 -1
  34. package/lib/electron-browser/menu/electron-context-menu-renderer.js +5 -2
  35. package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
  36. package/lib/electron-browser/preload.js +1 -1
  37. package/lib/electron-browser/preload.js.map +1 -1
  38. package/lib/electron-common/electron-api.d.ts +1 -1
  39. package/lib/electron-common/electron-api.d.ts.map +1 -1
  40. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  41. package/lib/electron-main/electron-api-main.js +3 -1
  42. package/lib/electron-main/electron-api-main.js.map +1 -1
  43. package/lib/electron-node/token/electron-token-validator.d.ts +1 -1
  44. package/lib/electron-node/token/electron-token-validator.d.ts.map +1 -1
  45. package/lib/electron-node/token/electron-token-validator.js +2 -2
  46. package/lib/electron-node/token/electron-token-validator.js.map +1 -1
  47. package/lib/node/backend-application.d.ts +1 -0
  48. package/lib/node/backend-application.d.ts.map +1 -1
  49. package/lib/node/backend-application.js +5 -2
  50. package/lib/node/backend-application.js.map +1 -1
  51. package/lib/node/hosting/backend-application-hosts.d.ts +1 -1
  52. package/lib/node/hosting/backend-application-hosts.d.ts.map +1 -1
  53. package/lib/node/hosting/backend-application-hosts.js +2 -2
  54. package/lib/node/hosting/backend-application-hosts.js.map +1 -1
  55. package/package.json +5 -5
  56. package/src/browser/about-dialog.tsx +5 -1
  57. package/src/browser/frontend-application-bindings.ts +1 -1
  58. package/src/browser/frontend-application-module.ts +2 -2
  59. package/src/browser/keyboard/browser-keyboard-layout-provider.ts +5 -1
  60. package/src/browser/preferences/injectable-preference-proxy.ts +5 -4
  61. package/src/common/logger.ts +12 -14
  62. package/src/common/messaging/proxy-factory.ts +4 -0
  63. package/src/common/performance/stopwatch.ts +1 -1
  64. package/src/electron-browser/keyboard/electron-keyboard-layout-change-notifier.ts +1 -1
  65. package/src/electron-browser/menu/electron-context-menu-renderer.ts +5 -1
  66. package/src/electron-browser/preload.ts +1 -1
  67. package/src/electron-common/electron-api.ts +1 -1
  68. package/src/electron-main/electron-api-main.ts +3 -1
  69. package/src/electron-node/token/electron-token-validator.ts +1 -1
  70. package/src/node/backend-application.ts +4 -0
  71. package/src/node/hosting/backend-application-hosts.ts +1 -1
@@ -48,7 +48,7 @@ export class InjectablePreferenceProxy<T extends Record<string, JSONValue>> impl
48
48
 
49
49
  @inject(PreferenceProxyOptions) protected readonly options: PreferenceProxyOptions;
50
50
  @inject(PreferenceService) protected readonly preferences: PreferenceService;
51
- @inject(PreferenceProxySchema) protected readonly promisedSchema: PreferenceSchema | Promise<PreferenceSchema>;
51
+ @inject(PreferenceProxySchema) protected readonly promisedSchema: () => PreferenceSchema | Promise<PreferenceSchema>;
52
52
  @inject(PreferenceProxyFactory) protected readonly factory: PreferenceProxyFactory;
53
53
  protected toDispose = new DisposableCollection();
54
54
  protected _onPreferenceChangedEmitter: Emitter<PreferenceChangeEvent<T>> | undefined;
@@ -95,10 +95,11 @@ export class InjectablePreferenceProxy<T extends Record<string, JSONValue>> impl
95
95
 
96
96
  @postConstruct()
97
97
  protected init(): void {
98
- if (this.promisedSchema instanceof Promise) {
99
- this.promisedSchema.then(schema => this.schema = schema);
98
+ const schema = this.promisedSchema();
99
+ if (schema instanceof Promise) {
100
+ schema.then(resolvedSchema => this.schema = resolvedSchema);
100
101
  } else {
101
- this.schema = this.promisedSchema;
102
+ this.schema = schema;
102
103
  }
103
104
  }
104
105
 
@@ -14,7 +14,7 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { inject, injectable } from 'inversify';
17
+ import { inject, injectable, postConstruct } from 'inversify';
18
18
  import { LoggerWatcher } from './logger-watcher';
19
19
  import { ILoggerServer, LogLevel, ConsoleLogger, rootLoggerName } from './logger-protocol';
20
20
 
@@ -235,30 +235,28 @@ export class Logger implements ILogger {
235
235
  /* A promise resolved when the logger has been created by the backend. */
236
236
  protected created: Promise<void>;
237
237
 
238
- /**
239
- * Build a new Logger.
240
- */
241
- constructor(
242
- @inject(ILoggerServer) protected readonly server: ILoggerServer,
243
- @inject(LoggerWatcher) protected readonly loggerWatcher: LoggerWatcher,
244
- @inject(LoggerFactory) protected readonly factory: LoggerFactory,
245
- @inject(LoggerName) protected name: string) {
238
+ @inject(ILoggerServer) protected readonly server: ILoggerServer;
239
+ @inject(LoggerWatcher) protected readonly loggerWatcher: LoggerWatcher;
240
+ @inject(LoggerFactory) protected readonly factory: LoggerFactory;
241
+ @inject(LoggerName) protected name: string;
246
242
 
247
- if (name !== rootLoggerName) {
243
+ @postConstruct()
244
+ protected init(): void {
245
+ if (this.name !== rootLoggerName) {
248
246
  /* Creating a child logger. */
249
- this.created = server.child(name);
247
+ this.created = this.server.child(this.name);
250
248
  } else {
251
249
  /* Creating the root logger (it already exists at startup). */
252
250
  this.created = Promise.resolve();
253
251
  }
254
252
 
255
253
  /* Fetch the log level so it's cached in the frontend. */
256
- this._logLevel = this.created.then(_ => this.server.getLogLevel(name));
254
+ this._logLevel = this.created.then(_ => this.server.getLogLevel(this.name));
257
255
 
258
256
  /* Update the log level if it changes in the backend. */
259
- loggerWatcher.onLogLevelChanged(event => {
257
+ this.loggerWatcher.onLogLevelChanged(event => {
260
258
  this.created.then(() => {
261
- if (event.loggerName === name) {
259
+ if (event.loggerName === this.name) {
262
260
  this._logLevel = Promise.resolve(event.newLogLevel);
263
261
  }
264
262
  });
@@ -241,6 +241,10 @@ export class JsonRpcProxyFactory<T extends object> implements ProxyHandler<T> {
241
241
  if (p === 'onDidCloseConnection') {
242
242
  return this.onDidCloseConnectionEmitter.event;
243
243
  }
244
+ if (p === 'then') {
245
+ // Prevent inversify from identifying this proxy as a promise object.
246
+ return undefined;
247
+ }
244
248
  const isNotify = this.isNotification(p);
245
249
  return (...args: any[]) => {
246
250
  const method = p.toString();
@@ -50,7 +50,7 @@ export abstract class Stopwatch {
50
50
  @inject(ILogger)
51
51
  protected readonly logger: ILogger;
52
52
 
53
- protected constructor(protected readonly defaultLogOptions: LogOptions) {
53
+ constructor(protected readonly defaultLogOptions: LogOptions) {
54
54
  if (!defaultLogOptions.defaultLogLevel) {
55
55
  defaultLogOptions.defaultLogLevel = DEFAULT_LOG_LEVEL;
56
56
  }
@@ -32,7 +32,7 @@ export class ElectronKeyboardLayoutChangeNotifier implements KeyboardLayoutChang
32
32
  }
33
33
 
34
34
  @postConstruct()
35
- protected initialize(): void {
35
+ protected init(): void {
36
36
  window.electronTheiaCore.onKeyboardLayoutChanged((newLayout: NativeKeyboardLayout) => this.nativeLayoutChanged.fire(newLayout));
37
37
  }
38
38
 
@@ -90,7 +90,11 @@ export class ElectronContextMenuRenderer extends BrowserContextMenuRenderer {
90
90
  }
91
91
 
92
92
  @postConstruct()
93
- protected async init(): Promise<void> {
93
+ protected init(): void {
94
+ this.doInit();
95
+ }
96
+
97
+ protected async doInit(): Promise<void> {
94
98
  this.useNativeStyle = await window.electronTheiaCore.getTitleBarStyleAtStartup() === 'native';
95
99
  }
96
100
 
@@ -71,7 +71,7 @@ const api: TheiaCoreAPI = {
71
71
  commandHandlers.set(mainMenuId, handlers);
72
72
  ipcRenderer.send(CHANNEL_SET_MENU, mainMenuId, convertMenu(menu, handlers));
73
73
  },
74
- getSecurityToken: () => ipcRenderer.invoke(CHANNEL_GET_SECURITY_TOKEN),
74
+ getSecurityToken: () => ipcRenderer.sendSync(CHANNEL_GET_SECURITY_TOKEN),
75
75
  focusWindow: (name: string) => ipcRenderer.send(CHANNEL_FOCUS_WINDOW, name),
76
76
  showItemInFolder: fsPath => {
77
77
  ipcRenderer.send(CHANNEL_SHOW_ITEM_IN_FOLDER, fsPath);
@@ -41,7 +41,7 @@ export type InternalMenuDto = Omit<MenuDto, 'execute' | 'submenu'> & {
41
41
  export type WindowEvent = 'maximize' | 'unmaximize' | 'focus';
42
42
 
43
43
  export interface TheiaCoreAPI {
44
- getSecurityToken: () => Promise<string>;
44
+ getSecurityToken: () => string;
45
45
  attachSecurityToken: (endpoint: string) => Promise<void>;
46
46
 
47
47
  setMenuBarVisible(visible: boolean, windowName?: string): void;
@@ -64,7 +64,9 @@ export class TheiaMainApi implements ElectronMainApplicationContribution {
64
64
 
65
65
  onStart(application: ElectronMainApplication): MaybePromise<void> {
66
66
  // electron security token
67
- ipcMain.handle(CHANNEL_GET_SECURITY_TOKEN, () => this.electronSecurityToken.value);
67
+ ipcMain.on(CHANNEL_GET_SECURITY_TOKEN, event => {
68
+ event.returnValue = this.electronSecurityToken.value;
69
+ });
68
70
 
69
71
  ipcMain.handle(CHANNEL_ATTACH_SECURITY_TOKEN, (event, endpoint) => session.defaultSession.cookies.set({
70
72
  url: endpoint,
@@ -31,7 +31,7 @@ export class ElectronTokenValidator implements WsRequestValidatorContribution {
31
31
  protected electronSecurityToken: ElectronSecurityToken;
32
32
 
33
33
  @postConstruct()
34
- protected postConstruct(): void {
34
+ protected init(): void {
35
35
  this.electronSecurityToken = this.getToken();
36
36
  }
37
37
 
@@ -196,6 +196,10 @@ export class BackendApplication {
196
196
  }
197
197
 
198
198
  @postConstruct()
199
+ protected init(): void {
200
+ this.configure();
201
+ }
202
+
199
203
  protected async configure(): Promise<void> {
200
204
  // Do not await the initialization because contributions are expected to handle
201
205
  // concurrent initialize/configure in undefined order if they provide both
@@ -39,7 +39,7 @@ export class BackendApplicationHosts {
39
39
  }
40
40
 
41
41
  @postConstruct()
42
- protected postConstruct(): void {
42
+ protected init(): void {
43
43
  const theiaHostsEnv = process.env['THEIA_HOSTS'];
44
44
  if (theiaHostsEnv) {
45
45
  theiaHostsEnv.split(',').forEach(host => {