@theia/core 1.50.1 → 1.52.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 (167) hide show
  1. package/README.md +11 -7
  2. package/i18n/nls.cs.json +4 -7
  3. package/i18n/nls.de.json +4 -7
  4. package/i18n/nls.es.json +4 -7
  5. package/i18n/nls.fr.json +4 -7
  6. package/i18n/nls.hu.json +4 -7
  7. package/i18n/nls.it.json +4 -7
  8. package/i18n/nls.ja.json +4 -7
  9. package/i18n/nls.json +4 -7
  10. package/i18n/nls.pl.json +4 -7
  11. package/i18n/nls.pt-br.json +4 -7
  12. package/i18n/nls.pt-pt.json +4 -7
  13. package/i18n/nls.ru.json +4 -7
  14. package/i18n/nls.zh-cn.json +4 -7
  15. package/lib/browser/authentication-service.d.ts +6 -3
  16. package/lib/browser/authentication-service.d.ts.map +1 -1
  17. package/lib/browser/authentication-service.js +11 -1
  18. package/lib/browser/authentication-service.js.map +1 -1
  19. package/lib/browser/browser.d.ts +6 -1
  20. package/lib/browser/browser.d.ts.map +1 -1
  21. package/lib/browser/browser.js +7 -2
  22. package/lib/browser/browser.js.map +1 -1
  23. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  24. package/lib/browser/common-frontend-contribution.js +6 -5
  25. package/lib/browser/common-frontend-contribution.js.map +1 -1
  26. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  27. package/lib/browser/frontend-application-module.js +3 -3
  28. package/lib/browser/frontend-application-module.js.map +1 -1
  29. package/lib/browser/http-open-handler.d.ts +1 -0
  30. package/lib/browser/http-open-handler.d.ts.map +1 -1
  31. package/lib/browser/http-open-handler.js +5 -3
  32. package/lib/browser/http-open-handler.js.map +1 -1
  33. package/lib/browser/menu/browser-menu-plugin.d.ts +2 -1
  34. package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
  35. package/lib/browser/menu/browser-menu-plugin.js +22 -19
  36. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  37. package/lib/browser/messaging/service-connection-provider.d.ts +15 -1
  38. package/lib/browser/messaging/service-connection-provider.d.ts.map +1 -1
  39. package/lib/browser/messaging/service-connection-provider.js +15 -1
  40. package/lib/browser/messaging/service-connection-provider.js.map +1 -1
  41. package/lib/browser/saveable.d.ts +14 -1
  42. package/lib/browser/saveable.d.ts.map +1 -1
  43. package/lib/browser/saveable.js +10 -1
  44. package/lib/browser/saveable.js.map +1 -1
  45. package/lib/browser/shell/additional-views-menu-widget.d.ts +2 -2
  46. package/lib/browser/shell/additional-views-menu-widget.d.ts.map +1 -1
  47. package/lib/browser/shell/additional-views-menu-widget.js +8 -4
  48. package/lib/browser/shell/additional-views-menu-widget.js.map +1 -1
  49. package/lib/browser/shell/application-shell.d.ts +7 -2
  50. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  51. package/lib/browser/shell/application-shell.js +14 -1
  52. package/lib/browser/shell/application-shell.js.map +1 -1
  53. package/lib/browser/shell/side-panel-handler.d.ts.map +1 -1
  54. package/lib/browser/shell/side-panel-handler.js +2 -1
  55. package/lib/browser/shell/side-panel-handler.js.map +1 -1
  56. package/lib/browser/shell/sidebar-menu-widget.d.ts +14 -1
  57. package/lib/browser/shell/sidebar-menu-widget.d.ts.map +1 -1
  58. package/lib/browser/shell/sidebar-menu-widget.js +51 -13
  59. package/lib/browser/shell/sidebar-menu-widget.js.map +1 -1
  60. package/lib/browser/shell/split-panels.d.ts +1 -1
  61. package/lib/browser/shell/split-panels.d.ts.map +1 -1
  62. package/lib/browser/shell/split-panels.js +4 -3
  63. package/lib/browser/shell/split-panels.js.map +1 -1
  64. package/lib/browser/shell/tab-bars.d.ts +5 -4
  65. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  66. package/lib/browser/shell/tab-bars.js +41 -52
  67. package/lib/browser/shell/tab-bars.js.map +1 -1
  68. package/lib/browser/shell/theia-dock-panel.d.ts +7 -1
  69. package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
  70. package/lib/browser/shell/theia-dock-panel.js +5 -1
  71. package/lib/browser/shell/theia-dock-panel.js.map +1 -1
  72. package/lib/browser/widget-manager.d.ts +2 -1
  73. package/lib/browser/widget-manager.d.ts.map +1 -1
  74. package/lib/browser/widget-manager.js +16 -9
  75. package/lib/browser/widget-manager.js.map +1 -1
  76. package/lib/browser/widget-open-handler.js +1 -1
  77. package/lib/browser/widget-open-handler.js.map +1 -1
  78. package/lib/browser/widgets/react-renderer.d.ts.map +1 -1
  79. package/lib/browser/widgets/react-renderer.js +4 -1
  80. package/lib/browser/widgets/react-renderer.js.map +1 -1
  81. package/lib/browser-only/frontend-only-application-module.d.ts.map +1 -1
  82. package/lib/browser-only/frontend-only-application-module.js +1 -0
  83. package/lib/browser-only/frontend-only-application-module.js.map +1 -1
  84. package/lib/common/application-protocol.d.ts +1 -0
  85. package/lib/common/application-protocol.d.ts.map +1 -1
  86. package/lib/common/menu/menu-model-registry.d.ts +6 -0
  87. package/lib/common/menu/menu-model-registry.d.ts.map +1 -1
  88. package/lib/common/menu/menu-model-registry.js +31 -5
  89. package/lib/common/menu/menu-model-registry.js.map +1 -1
  90. package/lib/common/preferences/preference-schema.d.ts +6 -0
  91. package/lib/common/preferences/preference-schema.d.ts.map +1 -1
  92. package/lib/common/preferences/preference-schema.js.map +1 -1
  93. package/lib/common/quick-pick-service.d.ts +0 -9
  94. package/lib/common/quick-pick-service.d.ts.map +1 -1
  95. package/lib/common/quick-pick-service.js.map +1 -1
  96. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  97. package/lib/electron-browser/menu/electron-main-menu-factory.js +3 -0
  98. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  99. package/lib/electron-browser/preload.js +3 -3
  100. package/lib/electron-browser/preload.js.map +1 -1
  101. package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
  102. package/lib/electron-browser/window/electron-window-module.js +11 -7
  103. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  104. package/lib/electron-browser/window/electron-window-service.js +1 -1
  105. package/lib/electron-browser/window/electron-window-service.js.map +1 -1
  106. package/lib/electron-browser/window/external-app-open-handler.d.ts +12 -0
  107. package/lib/electron-browser/window/external-app-open-handler.d.ts.map +1 -0
  108. package/lib/electron-browser/window/external-app-open-handler.js +42 -0
  109. package/lib/electron-browser/window/external-app-open-handler.js.map +1 -0
  110. package/lib/electron-common/electron-api.d.ts +5 -2
  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-main-application.d.ts +1 -2
  114. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  115. package/lib/electron-main/electron-main-application.js +66 -32
  116. package/lib/electron-main/electron-main-application.js.map +1 -1
  117. package/lib/electron-main/electron-main-constants.d.ts +1 -0
  118. package/lib/electron-main/electron-main-constants.d.ts.map +1 -1
  119. package/lib/electron-main/theia-electron-window.d.ts +1 -1
  120. package/lib/electron-main/theia-electron-window.d.ts.map +1 -1
  121. package/lib/electron-main/theia-electron-window.js +8 -3
  122. package/lib/electron-main/theia-electron-window.js.map +1 -1
  123. package/lib/node/application-server.d.ts +1 -0
  124. package/lib/node/application-server.d.ts.map +1 -1
  125. package/lib/node/application-server.js +3 -0
  126. package/lib/node/application-server.js.map +1 -1
  127. package/lib/node/messaging/websocket-frontend-connection-service.d.ts +1 -0
  128. package/lib/node/messaging/websocket-frontend-connection-service.d.ts.map +1 -1
  129. package/lib/node/messaging/websocket-frontend-connection-service.js +8 -1
  130. package/lib/node/messaging/websocket-frontend-connection-service.js.map +1 -1
  131. package/package.json +7 -7
  132. package/src/browser/authentication-service.ts +16 -4
  133. package/src/browser/browser.ts +6 -1
  134. package/src/browser/common-frontend-contribution.ts +9 -7
  135. package/src/browser/frontend-application-module.ts +6 -5
  136. package/src/browser/http-open-handler.ts +3 -1
  137. package/src/browser/menu/browser-menu-plugin.ts +27 -20
  138. package/src/browser/messaging/service-connection-provider.ts +15 -1
  139. package/src/browser/saveable.ts +17 -1
  140. package/src/browser/shell/additional-views-menu-widget.tsx +5 -5
  141. package/src/browser/shell/application-shell.ts +21 -4
  142. package/src/browser/shell/side-panel-handler.ts +2 -1
  143. package/src/browser/shell/sidebar-menu-widget.tsx +63 -20
  144. package/src/browser/shell/split-panels.ts +4 -3
  145. package/src/browser/shell/tab-bars.ts +40 -57
  146. package/src/browser/shell/theia-dock-panel.ts +13 -3
  147. package/src/browser/style/sidepanel.css +6 -3
  148. package/src/browser/style/tabs.css +12 -1
  149. package/src/browser/widget-manager.ts +19 -11
  150. package/src/browser/widget-open-handler.ts +3 -3
  151. package/src/browser/widgets/react-renderer.tsx +4 -1
  152. package/src/browser-only/frontend-only-application-module.ts +1 -0
  153. package/src/common/application-protocol.ts +1 -0
  154. package/src/common/menu/menu-model-registry.ts +36 -5
  155. package/src/common/preferences/preference-schema.ts +6 -0
  156. package/src/common/quick-pick-service.ts +0 -3
  157. package/src/electron-browser/menu/electron-main-menu-factory.ts +3 -0
  158. package/src/electron-browser/preload.ts +3 -3
  159. package/src/electron-browser/window/electron-window-module.ts +11 -7
  160. package/src/electron-browser/window/electron-window-service.ts +1 -1
  161. package/src/electron-browser/window/external-app-open-handler.ts +42 -0
  162. package/src/electron-common/electron-api.ts +6 -2
  163. package/src/electron-main/electron-main-application.ts +76 -35
  164. package/src/electron-main/electron-main-constants.ts +4 -3
  165. package/src/electron-main/theia-electron-window.ts +7 -3
  166. package/src/node/application-server.ts +4 -0
  167. package/src/node/messaging/websocket-frontend-connection-service.ts +11 -1
@@ -56,7 +56,11 @@ export interface TheiaCoreAPI {
56
56
  focusWindow(name?: string): void;
57
57
 
58
58
  showItemInFolder(fsPath: string): void;
59
- openWithSystemApp(fsPath: string): void;
59
+
60
+ /**
61
+ * @param location The location to open with the system app. This can be a file path or a URL.
62
+ */
63
+ openWithSystemApp(location: string): void;
60
64
 
61
65
  getTitleBarStyleAtStartup(): Promise<string>;
62
66
  setTitleBarStyle(style: string): void;
@@ -80,7 +84,7 @@ export interface TheiaCoreAPI {
80
84
  isFullScreen(): boolean; // TODO: this should really be async, since it blocks the renderer process
81
85
  toggleFullScreen(): void;
82
86
 
83
- requestReload(): void;
87
+ requestReload(newUrl?: string): void;
84
88
  restart(): void;
85
89
 
86
90
  applicationStateChanged(state: FrontendApplicationState): void;
@@ -15,7 +15,10 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { inject, injectable, named } from 'inversify';
18
- import { screen, app, BrowserWindow, WebContents, Event as ElectronEvent, BrowserWindowConstructorOptions, nativeImage, nativeTheme } from '../../electron-shared/electron';
18
+ import {
19
+ screen, app, BrowserWindow, WebContents, Event as ElectronEvent, BrowserWindowConstructorOptions, nativeImage,
20
+ nativeTheme, shell, dialog
21
+ } from '../../electron-shared/electron';
19
22
  import * as path from 'path';
20
23
  import { Argv } from 'yargs';
21
24
  import { AddressInfo } from 'net';
@@ -31,7 +34,7 @@ import { ContributionProvider } from '../common/contribution-provider';
31
34
  import { ElectronSecurityTokenService } from './electron-security-token-service';
32
35
  import { ElectronSecurityToken } from '../electron-common/electron-token';
33
36
  import Storage = require('electron-store');
34
- import { CancellationTokenSource, Disposable, DisposableCollection, isOSX, isWindows } from '../common';
37
+ import { CancellationTokenSource, Disposable, DisposableCollection, Path, isOSX, isWindows } from '../common';
35
38
  import { DEFAULT_WINDOW_HASH, WindowSearchParams } from '../common/window';
36
39
  import { TheiaBrowserWindowOptions, TheiaElectronWindow, TheiaElectronWindowFactory } from './theia-electron-window';
37
40
  import { ElectronMainApplicationGlobals } from './electron-main-constants';
@@ -349,6 +352,9 @@ export class ElectronMainApplication {
349
352
  alwaysOnTop: true,
350
353
  show: false,
351
354
  transparent: true,
355
+ webPreferences: {
356
+ backgroundThrottling: false
357
+ }
352
358
  });
353
359
 
354
360
  if (this.isShowWindowEarly()) {
@@ -410,7 +416,6 @@ export class ElectronMainApplication {
410
416
  electronWindow.window.on('unmaximize', () => TheiaRendererAPI.sendWindowEvent(electronWindow.window.webContents, 'unmaximize'));
411
417
  electronWindow.window.on('focus', () => TheiaRendererAPI.sendWindowEvent(electronWindow.window.webContents, 'focus'));
412
418
  this.attachSaveWindowState(electronWindow.window);
413
- this.configureNativeSecondaryWindowCreation(electronWindow.window);
414
419
 
415
420
  return electronWindow.window;
416
421
  }
@@ -458,6 +463,7 @@ export class ElectronMainApplication {
458
463
  // Setting the following option to `true` causes some features to break, somehow.
459
464
  // Issue: https://github.com/eclipse-theia/theia/issues/8577
460
465
  nodeIntegrationInWorker: false,
466
+ backgroundThrottling: false,
461
467
  preload: path.resolve(this.globals.THEIA_APP_PROJECT_PATH, 'lib', 'frontend', 'preload.js').toString()
462
468
  },
463
469
  ...this.config.electron?.windowOptions || {},
@@ -488,31 +494,6 @@ export class ElectronMainApplication {
488
494
  return window;
489
495
  }
490
496
 
491
- /** Configures native window creation, i.e. using window.open or links with target "_blank" in the frontend. */
492
- protected configureNativeSecondaryWindowCreation(electronWindow: BrowserWindow): void {
493
- electronWindow.webContents.setWindowOpenHandler(() => {
494
- const { minWidth, minHeight } = this.getDefaultOptions();
495
- const options: BrowserWindowConstructorOptions = {
496
- ...this.getDefaultTheiaSecondaryWindowBounds(),
497
- // We always need the native window frame for now because the secondary window does not have Theia's title bar by default.
498
- // In 'custom' title bar mode this would leave the window without any window controls (close, min, max)
499
- // TODO set to this.useNativeWindowFrame when secondary windows support a custom title bar.
500
- frame: true,
501
- minWidth,
502
- minHeight
503
- };
504
- if (!this.useNativeWindowFrame) {
505
- // If the main window does not have a native window frame, do not show an icon in the secondary window's native title bar.
506
- // The data url is a 1x1 transparent png
507
- options.icon = nativeImage.createFromDataURL('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQI12P4DwQACfsD/WMmxY8AAAAASUVORK5CYII=');
508
- }
509
- return {
510
- action: 'allow',
511
- overrideBrowserWindowOptions: options,
512
- };
513
- });
514
- }
515
-
516
497
  /**
517
498
  * "Gently" close all windows, application will not stop if a `beforeunload` handler returns `false`.
518
499
  */
@@ -714,6 +695,7 @@ export class ElectronMainApplication {
714
695
  app.on('will-quit', this.onWillQuit.bind(this));
715
696
  app.on('second-instance', this.onSecondInstance.bind(this));
716
697
  app.on('window-all-closed', this.onWindowAllClosed.bind(this));
698
+ app.on('web-contents-created', this.onWebContentsCreated.bind(this));
717
699
  }
718
700
 
719
701
  protected onWillQuit(event: ElectronEvent): void {
@@ -721,14 +703,73 @@ export class ElectronMainApplication {
721
703
  }
722
704
 
723
705
  protected async onSecondInstance(event: ElectronEvent, argv: string[], cwd: string): Promise<void> {
724
- const electronWindows = BrowserWindow.getAllWindows();
725
- if (electronWindows.length > 0) {
726
- const electronWindow = electronWindows[0];
727
- if (electronWindow.isMinimized()) {
728
- electronWindow.restore();
706
+ createYargs(this.processArgv.getProcessArgvWithoutBin(argv), process.cwd())
707
+ .help(false)
708
+ .command('$0 [file]', false,
709
+ cmd => cmd
710
+ .positional('file', { type: 'string' }),
711
+ async args => {
712
+ this.handleMainCommand({
713
+ file: args.file,
714
+ cwd: process.cwd(),
715
+ secondInstance: true
716
+ });
717
+ },
718
+ ).parse();
719
+ }
720
+
721
+ protected onWebContentsCreated(event: ElectronEvent, webContents: WebContents): void {
722
+ // Block any in-page navigation except loading the secondary window contents
723
+ webContents.on('will-navigate', evt => {
724
+ if (new URI(evt.url).path.fsPath() !== new Path(this.globals.THEIA_SECONDARY_WINDOW_HTML_PATH).fsPath()) {
725
+ evt.preventDefault();
729
726
  }
730
- electronWindow.focus();
731
- }
727
+ });
728
+
729
+ webContents.setWindowOpenHandler(details => {
730
+ // if it's a secondary window, allow it to open
731
+ if (new URI(details.url).path.fsPath() === new Path(this.globals.THEIA_SECONDARY_WINDOW_HTML_PATH).fsPath()) {
732
+ const { minWidth, minHeight } = this.getDefaultOptions();
733
+ const options: BrowserWindowConstructorOptions = {
734
+ ...this.getDefaultTheiaSecondaryWindowBounds(),
735
+ // We always need the native window frame for now because the secondary window does not have Theia's title bar by default.
736
+ // In 'custom' title bar mode this would leave the window without any window controls (close, min, max)
737
+ // TODO set to this.useNativeWindowFrame when secondary windows support a custom title bar.
738
+ frame: true,
739
+ minWidth,
740
+ minHeight
741
+ };
742
+ if (!this.useNativeWindowFrame) {
743
+ // If the main window does not have a native window frame, do not show an icon in the secondary window's native title bar.
744
+ // The data url is a 1x1 transparent png
745
+ options.icon = nativeImage.createFromDataURL(
746
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQI12P4DwQACfsD/WMmxY8AAAAASUVORK5CYII=');
747
+ }
748
+ return {
749
+ action: 'allow',
750
+ overrideBrowserWindowOptions: options,
751
+ };
752
+ } else {
753
+ const uri: URI = new URI(details.url);
754
+ let okToOpen = uri.scheme === 'https' || uri.scheme === 'http';
755
+ if (!okToOpen) {
756
+ const button = dialog.showMessageBoxSync(BrowserWindow.fromWebContents(webContents)!, {
757
+ message: `Open link\n\n${details.url}\n\nin the system handler?`,
758
+ type: 'question',
759
+ title: 'Open Link',
760
+ buttons: ['OK', 'Cancel'],
761
+ defaultId: 1,
762
+ cancelId: 1
763
+ });
764
+ okToOpen = button === 0;
765
+ }
766
+ if (okToOpen) {
767
+ shell.openExternal(details.url, {});
768
+ }
769
+
770
+ return { action: 'deny' };
771
+ }
772
+ });
732
773
  }
733
774
 
734
775
  protected onWindowAllClosed(event: ElectronEvent): void {
@@ -16,7 +16,8 @@
16
16
 
17
17
  export const ElectronMainApplicationGlobals = Symbol('ElectronMainApplicationGlobals');
18
18
  export interface ElectronMainApplicationGlobals {
19
- readonly THEIA_APP_PROJECT_PATH: string
20
- readonly THEIA_BACKEND_MAIN_PATH: string
21
- readonly THEIA_FRONTEND_HTML_PATH: string
19
+ readonly THEIA_APP_PROJECT_PATH: string;
20
+ readonly THEIA_BACKEND_MAIN_PATH: string;
21
+ readonly THEIA_FRONTEND_HTML_PATH: string;
22
+ readonly THEIA_SECONDARY_WINDOW_HTML_PATH: string
22
23
  }
@@ -147,10 +147,14 @@ export class TheiaElectronWindow {
147
147
  return this.handleStopRequest(() => this.doCloseWindow(), reason);
148
148
  }
149
149
 
150
- protected reload(): void {
150
+ protected reload(newUrl?: string): void {
151
151
  this.handleStopRequest(async () => {
152
152
  this.applicationState = 'init';
153
- this._window.reload();
153
+ if (newUrl) {
154
+ this._window.loadURL(newUrl);
155
+ } else {
156
+ this._window.reload();
157
+ }
154
158
  }, StopReason.Reload);
155
159
  }
156
160
 
@@ -195,7 +199,7 @@ export class TheiaElectronWindow {
195
199
  }
196
200
 
197
201
  protected attachReloadListener(): void {
198
- this.toDispose.push(TheiaRendererAPI.onRequestReload(this.window.webContents, () => this.reload()));
202
+ this.toDispose.push(TheiaRendererAPI.onRequestReload(this.window.webContents, (newUrl?: string) => this.reload(newUrl)));
199
203
  }
200
204
 
201
205
  dispose(): void {
@@ -49,6 +49,10 @@ export class ApplicationServerImpl implements ApplicationServer {
49
49
  return Promise.resolve(this.applicationPackage.projectPath);
50
50
  }
51
51
 
52
+ getApplicationPlatform(): Promise<string> {
53
+ return Promise.resolve(`${process.platform}-${process.arch}`);
54
+ }
55
+
52
56
  async getBackendOS(): Promise<OS.Type> {
53
57
  return OS.type();
54
58
  }
@@ -105,7 +105,8 @@ export class WebsocketFrontendConnectionService implements FrontendConnectionSer
105
105
  socket.on('disconnect', evt => {
106
106
  console.info('socked closed');
107
107
  channel.disconnect();
108
- const timeout = BackendApplicationConfigProvider.get().frontendConnectionTimeout;
108
+
109
+ const timeout = this.frontendConnectionTimeout();
109
110
  const isMarkedForClose = this.channelsMarkedForClose.delete(frontEndId);
110
111
  if (timeout === 0 || isMarkedForClose) {
111
112
  this.closeConnection(frontEndId, evt);
@@ -124,6 +125,15 @@ export class WebsocketFrontendConnectionService implements FrontendConnectionSer
124
125
  markForClose(channelId: string): void {
125
126
  this.channelsMarkedForClose.add(channelId);
126
127
  }
128
+
129
+ private frontendConnectionTimeout(): number {
130
+ const envValue = Number(process.env['FRONTEND_CONNECTION_TIMEOUT']);
131
+ if (!isNaN(envValue)) {
132
+ return envValue;
133
+ }
134
+
135
+ return BackendApplicationConfigProvider.get().frontendConnectionTimeout;
136
+ }
127
137
  }
128
138
 
129
139
  class ReconnectableSocketChannel extends AbstractChannel {