@theia/core 1.50.0 → 1.51.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 (137) hide show
  1. package/README.md +6 -6
  2. package/i18n/nls.cs.json +0 -7
  3. package/i18n/nls.de.json +0 -7
  4. package/i18n/nls.es.json +0 -7
  5. package/i18n/nls.fr.json +0 -7
  6. package/i18n/nls.hu.json +0 -7
  7. package/i18n/nls.it.json +0 -7
  8. package/i18n/nls.ja.json +0 -7
  9. package/i18n/nls.json +0 -7
  10. package/i18n/nls.pl.json +0 -7
  11. package/i18n/nls.pt-br.json +0 -7
  12. package/i18n/nls.pt-pt.json +0 -7
  13. package/i18n/nls.ru.json +0 -7
  14. package/i18n/nls.zh-cn.json +0 -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 +9 -0
  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/tab-bars.d.ts +5 -4
  61. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  62. package/lib/browser/shell/tab-bars.js +40 -51
  63. package/lib/browser/shell/tab-bars.js.map +1 -1
  64. package/lib/browser/shell/theia-dock-panel.d.ts +7 -1
  65. package/lib/browser/shell/theia-dock-panel.d.ts.map +1 -1
  66. package/lib/browser/shell/theia-dock-panel.js +5 -1
  67. package/lib/browser/shell/theia-dock-panel.js.map +1 -1
  68. package/lib/browser/widgets/react-renderer.d.ts.map +1 -1
  69. package/lib/browser/widgets/react-renderer.js +4 -1
  70. package/lib/browser/widgets/react-renderer.js.map +1 -1
  71. package/lib/browser-only/frontend-only-application-module.d.ts.map +1 -1
  72. package/lib/browser-only/frontend-only-application-module.js +1 -0
  73. package/lib/browser-only/frontend-only-application-module.js.map +1 -1
  74. package/lib/common/application-protocol.d.ts +1 -0
  75. package/lib/common/application-protocol.d.ts.map +1 -1
  76. package/lib/common/menu/menu-model-registry.d.ts +6 -0
  77. package/lib/common/menu/menu-model-registry.d.ts.map +1 -1
  78. package/lib/common/menu/menu-model-registry.js +31 -5
  79. package/lib/common/menu/menu-model-registry.js.map +1 -1
  80. package/lib/common/preferences/preference-schema.d.ts +1 -0
  81. package/lib/common/preferences/preference-schema.d.ts.map +1 -1
  82. package/lib/common/preferences/preference-schema.js.map +1 -1
  83. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  84. package/lib/electron-browser/menu/electron-main-menu-factory.js +3 -0
  85. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  86. package/lib/electron-browser/preload.js +2 -2
  87. package/lib/electron-browser/preload.js.map +1 -1
  88. package/lib/electron-browser/window/electron-window-module.d.ts.map +1 -1
  89. package/lib/electron-browser/window/electron-window-module.js +11 -7
  90. package/lib/electron-browser/window/electron-window-module.js.map +1 -1
  91. package/lib/electron-browser/window/external-app-open-handler.d.ts +12 -0
  92. package/lib/electron-browser/window/external-app-open-handler.d.ts.map +1 -0
  93. package/lib/electron-browser/window/external-app-open-handler.js +42 -0
  94. package/lib/electron-browser/window/external-app-open-handler.js.map +1 -0
  95. package/lib/electron-common/electron-api.d.ts +4 -1
  96. package/lib/electron-common/electron-api.d.ts.map +1 -1
  97. package/lib/electron-common/electron-api.js.map +1 -1
  98. package/lib/electron-main/electron-main-application.d.ts +1 -2
  99. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  100. package/lib/electron-main/electron-main-application.js +62 -32
  101. package/lib/electron-main/electron-main-application.js.map +1 -1
  102. package/lib/electron-main/electron-main-constants.d.ts +1 -0
  103. package/lib/electron-main/electron-main-constants.d.ts.map +1 -1
  104. package/lib/node/application-server.d.ts +1 -0
  105. package/lib/node/application-server.d.ts.map +1 -1
  106. package/lib/node/application-server.js +3 -0
  107. package/lib/node/application-server.js.map +1 -1
  108. package/package.json +6 -6
  109. package/src/browser/authentication-service.ts +16 -4
  110. package/src/browser/browser.ts +6 -1
  111. package/src/browser/common-frontend-contribution.ts +9 -7
  112. package/src/browser/frontend-application-module.ts +6 -5
  113. package/src/browser/http-open-handler.ts +3 -1
  114. package/src/browser/menu/browser-menu-plugin.ts +27 -20
  115. package/src/browser/messaging/service-connection-provider.ts +15 -1
  116. package/src/browser/saveable.ts +17 -1
  117. package/src/browser/shell/additional-views-menu-widget.tsx +5 -5
  118. package/src/browser/shell/application-shell.ts +16 -3
  119. package/src/browser/shell/side-panel-handler.ts +2 -1
  120. package/src/browser/shell/sidebar-menu-widget.tsx +63 -20
  121. package/src/browser/shell/tab-bars.ts +39 -56
  122. package/src/browser/shell/theia-dock-panel.ts +13 -3
  123. package/src/browser/style/sidepanel.css +6 -3
  124. package/src/browser/style/tabs.css +1 -1
  125. package/src/browser/widgets/react-renderer.tsx +4 -1
  126. package/src/browser-only/frontend-only-application-module.ts +1 -0
  127. package/src/common/application-protocol.ts +1 -0
  128. package/src/common/menu/menu-model-registry.ts +36 -5
  129. package/src/common/preferences/preference-schema.ts +1 -0
  130. package/src/electron-browser/menu/electron-main-menu-factory.ts +3 -0
  131. package/src/electron-browser/preload.ts +2 -2
  132. package/src/electron-browser/window/electron-window-module.ts +11 -7
  133. package/src/electron-browser/window/external-app-open-handler.ts +42 -0
  134. package/src/electron-common/electron-api.ts +5 -1
  135. package/src/electron-main/electron-main-application.ts +70 -35
  136. package/src/electron-main/electron-main-constants.ts +4 -3
  137. package/src/node/application-server.ts +4 -0
@@ -75,6 +75,7 @@ export interface PreferenceSchemaProperty extends PreferenceItem {
75
75
  description?: string;
76
76
  markdownDescription?: string;
77
77
  scope?: 'application' | 'machine' | 'window' | 'resource' | 'language-overridable' | 'machine-overridable' | PreferenceScope;
78
+ tags?: string[];
78
79
  }
79
80
 
80
81
  export interface PreferenceDataProperty extends PreferenceItem {
@@ -101,6 +101,9 @@ export class ElectronMainMenuFactory extends BrowserMainMenuFactory {
101
101
  this.keybindingRegistry.onKeybindingsChanged(() => {
102
102
  this.setMenuBar();
103
103
  });
104
+ this.menuProvider.onDidChange(() => {
105
+ this.setMenuBar();
106
+ });
104
107
  }
105
108
 
106
109
  async setMenuBar(): Promise<void> {
@@ -79,8 +79,8 @@ const api: TheiaCoreAPI = {
79
79
  showItemInFolder: fsPath => {
80
80
  ipcRenderer.send(CHANNEL_SHOW_ITEM_IN_FOLDER, fsPath);
81
81
  },
82
- openWithSystemApp: fsPath => {
83
- ipcRenderer.send(CHANNEL_OPEN_WITH_SYSTEM_APP, fsPath);
82
+ openWithSystemApp: location => {
83
+ ipcRenderer.send(CHANNEL_OPEN_WITH_SYSTEM_APP, location);
84
84
  },
85
85
  attachSecurityToken: (endpoint: string) => ipcRenderer.invoke(CHANNEL_ATTACH_SECURITY_TOKEN, endpoint),
86
86
 
@@ -15,18 +15,20 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { ContainerModule } from 'inversify';
18
- import { WindowService } from '../../browser/window/window-service';
19
- import { ElectronWindowService } from './electron-window-service';
20
- import { FrontendApplicationContribution } from '../../browser/frontend-application-contribution';
21
- import { ElectronClipboardService } from '../electron-clipboard-service';
18
+ import { OpenHandler } from '../../browser';
22
19
  import { ClipboardService } from '../../browser/clipboard-service';
20
+ import { FrontendApplicationContribution } from '../../browser/frontend-application-contribution';
21
+ import { FrontendApplicationStateService } from '../../browser/frontend-application-state';
22
+ import { SecondaryWindowService } from '../../browser/window/secondary-window-service';
23
+ import { WindowService } from '../../browser/window/window-service';
23
24
  import { ElectronMainWindowService, electronMainWindowServicePath } from '../../electron-common/electron-main-window-service';
25
+ import { ElectronClipboardService } from '../electron-clipboard-service';
24
26
  import { ElectronIpcConnectionProvider } from '../messaging/electron-ipc-connection-source';
25
- import { bindWindowPreferences } from './electron-window-preferences';
26
- import { FrontendApplicationStateService } from '../../browser/frontend-application-state';
27
27
  import { ElectronFrontendApplicationStateService } from './electron-frontend-application-state';
28
28
  import { ElectronSecondaryWindowService } from './electron-secondary-window-service';
29
- import { SecondaryWindowService } from '../../browser/window/secondary-window-service';
29
+ import { bindWindowPreferences } from './electron-window-preferences';
30
+ import { ElectronWindowService } from './electron-window-service';
31
+ import { ExternalAppOpenHandler } from './external-app-open-handler';
30
32
 
31
33
  export default new ContainerModule((bind, unbind, isBound, rebind) => {
32
34
  bind(ElectronMainWindowService).toDynamicValue(context =>
@@ -38,4 +40,6 @@ export default new ContainerModule((bind, unbind, isBound, rebind) => {
38
40
  bind(ClipboardService).to(ElectronClipboardService).inSingletonScope();
39
41
  rebind(FrontendApplicationStateService).to(ElectronFrontendApplicationStateService).inSingletonScope();
40
42
  bind(SecondaryWindowService).to(ElectronSecondaryWindowService).inSingletonScope();
43
+ bind(ExternalAppOpenHandler).toSelf().inSingletonScope();
44
+ bind(OpenHandler).toService(ExternalAppOpenHandler);
41
45
  });
@@ -0,0 +1,42 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2024 TypeFox 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 { injectable } from 'inversify';
18
+ import { OpenHandler } from '../../browser/opener-service';
19
+ import URI from '../../common/uri';
20
+ import { HttpOpenHandler } from '../../browser/http-open-handler';
21
+
22
+ export interface ExternalAppOpenHandlerOptions {
23
+ openExternalApp?: boolean
24
+ }
25
+
26
+ @injectable()
27
+ export class ExternalAppOpenHandler implements OpenHandler {
28
+
29
+ static readonly PRIORITY: number = HttpOpenHandler.PRIORITY + 100;
30
+ readonly id = 'external-app';
31
+
32
+ canHandle(uri: URI, options?: ExternalAppOpenHandlerOptions): number {
33
+ return (options && options.openExternalApp) ? ExternalAppOpenHandler.PRIORITY : -1;
34
+ }
35
+
36
+ async open(uri: URI): Promise<undefined> {
37
+ // For files 'file:' scheme, system accepts only the path.
38
+ // For other protocols e.g. 'vscode:' we use the full URI to propagate target app information.
39
+ window.electronTheiaCore.openWithSystemApp(uri.scheme === 'file' ? uri.path.fsPath() : uri.toString(true));
40
+ return undefined;
41
+ }
42
+ }
@@ -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;
@@ -15,7 +15,8 @@
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 { screen, app, BrowserWindow, WebContents, Event as ElectronEvent, BrowserWindowConstructorOptions, nativeImage,
19
+ nativeTheme, shell, dialog } from '../../electron-shared/electron';
19
20
  import * as path from 'path';
20
21
  import { Argv } from 'yargs';
21
22
  import { AddressInfo } from 'net';
@@ -31,7 +32,7 @@ import { ContributionProvider } from '../common/contribution-provider';
31
32
  import { ElectronSecurityTokenService } from './electron-security-token-service';
32
33
  import { ElectronSecurityToken } from '../electron-common/electron-token';
33
34
  import Storage = require('electron-store');
34
- import { CancellationTokenSource, Disposable, DisposableCollection, isOSX, isWindows } from '../common';
35
+ import { CancellationTokenSource, Disposable, DisposableCollection, Path, isOSX, isWindows } from '../common';
35
36
  import { DEFAULT_WINDOW_HASH, WindowSearchParams } from '../common/window';
36
37
  import { TheiaBrowserWindowOptions, TheiaElectronWindow, TheiaElectronWindowFactory } from './theia-electron-window';
37
38
  import { ElectronMainApplicationGlobals } from './electron-main-constants';
@@ -410,7 +411,6 @@ export class ElectronMainApplication {
410
411
  electronWindow.window.on('unmaximize', () => TheiaRendererAPI.sendWindowEvent(electronWindow.window.webContents, 'unmaximize'));
411
412
  electronWindow.window.on('focus', () => TheiaRendererAPI.sendWindowEvent(electronWindow.window.webContents, 'focus'));
412
413
  this.attachSaveWindowState(electronWindow.window);
413
- this.configureNativeSecondaryWindowCreation(electronWindow.window);
414
414
 
415
415
  return electronWindow.window;
416
416
  }
@@ -488,31 +488,6 @@ export class ElectronMainApplication {
488
488
  return window;
489
489
  }
490
490
 
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
491
  /**
517
492
  * "Gently" close all windows, application will not stop if a `beforeunload` handler returns `false`.
518
493
  */
@@ -714,6 +689,7 @@ export class ElectronMainApplication {
714
689
  app.on('will-quit', this.onWillQuit.bind(this));
715
690
  app.on('second-instance', this.onSecondInstance.bind(this));
716
691
  app.on('window-all-closed', this.onWindowAllClosed.bind(this));
692
+ app.on('web-contents-created', this.onWebContentsCreated.bind(this));
717
693
  }
718
694
 
719
695
  protected onWillQuit(event: ElectronEvent): void {
@@ -721,14 +697,73 @@ export class ElectronMainApplication {
721
697
  }
722
698
 
723
699
  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();
700
+ createYargs(this.processArgv.getProcessArgvWithoutBin(argv), process.cwd())
701
+ .help(false)
702
+ .command('$0 [file]', false,
703
+ cmd => cmd
704
+ .positional('file', { type: 'string' }),
705
+ async args => {
706
+ this.handleMainCommand({
707
+ file: args.file,
708
+ cwd: process.cwd(),
709
+ secondInstance: true
710
+ });
711
+ },
712
+ ).parse();
713
+ }
714
+
715
+ protected onWebContentsCreated(event: ElectronEvent, webContents: WebContents): void {
716
+ // Block any in-page navigation except loading the secondary window contents
717
+ webContents.on('will-navigate', evt => {
718
+ if (new URI(evt.url).path.fsPath() !== new Path(this.globals.THEIA_SECONDARY_WINDOW_HTML_PATH).fsPath()) {
719
+ evt.preventDefault();
729
720
  }
730
- electronWindow.focus();
731
- }
721
+ });
722
+
723
+ webContents.setWindowOpenHandler(details => {
724
+ // if it's a secondary window, allow it to open
725
+ if (new URI(details.url).path.fsPath() === new Path(this.globals.THEIA_SECONDARY_WINDOW_HTML_PATH).fsPath()) {
726
+ const { minWidth, minHeight } = this.getDefaultOptions();
727
+ const options: BrowserWindowConstructorOptions = {
728
+ ...this.getDefaultTheiaSecondaryWindowBounds(),
729
+ // We always need the native window frame for now because the secondary window does not have Theia's title bar by default.
730
+ // In 'custom' title bar mode this would leave the window without any window controls (close, min, max)
731
+ // TODO set to this.useNativeWindowFrame when secondary windows support a custom title bar.
732
+ frame: true,
733
+ minWidth,
734
+ minHeight
735
+ };
736
+ if (!this.useNativeWindowFrame) {
737
+ // If the main window does not have a native window frame, do not show an icon in the secondary window's native title bar.
738
+ // The data url is a 1x1 transparent png
739
+ options.icon = nativeImage.createFromDataURL(
740
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQI12P4DwQACfsD/WMmxY8AAAAASUVORK5CYII=');
741
+ }
742
+ return {
743
+ action: 'allow',
744
+ overrideBrowserWindowOptions: options,
745
+ };
746
+ } else {
747
+ const uri: URI = new URI(details.url);
748
+ let okToOpen = uri.scheme === 'https' || uri.scheme === 'http';
749
+ if (!okToOpen) {
750
+ const button = dialog.showMessageBoxSync(BrowserWindow.fromWebContents(webContents)!, {
751
+ message: `Open link\n\n${details.url}\n\nin the system handler?`,
752
+ type: 'question',
753
+ title: 'Open Link',
754
+ buttons: ['OK', 'Cancel'],
755
+ defaultId: 1,
756
+ cancelId: 1
757
+ });
758
+ okToOpen = button === 0;
759
+ }
760
+ if (okToOpen) {
761
+ shell.openExternal(details.url, {});
762
+ }
763
+
764
+ return { action: 'deny' };
765
+ }
766
+ });
732
767
  }
733
768
 
734
769
  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
  }
@@ -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
  }