@theia/core 1.41.0 → 1.42.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 (141) hide show
  1. package/README.md +7 -7
  2. package/i18n/nls.cs.json +1 -0
  3. package/i18n/nls.de.json +1 -0
  4. package/i18n/nls.es.json +1 -0
  5. package/i18n/nls.fr.json +1 -0
  6. package/i18n/nls.hu.json +1 -0
  7. package/i18n/nls.it.json +1 -0
  8. package/i18n/nls.ja.json +1 -0
  9. package/i18n/nls.json +1 -0
  10. package/i18n/nls.pl.json +1 -0
  11. package/i18n/nls.pt-br.json +1 -0
  12. package/i18n/nls.pt-pt.json +1 -0
  13. package/i18n/nls.ru.json +1 -0
  14. package/i18n/nls.zh-cn.json +1 -0
  15. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  16. package/lib/browser/common-frontend-contribution.js +1 -0
  17. package/lib/browser/common-frontend-contribution.js.map +1 -1
  18. package/lib/browser/preload/i18n-preload-contribution.d.ts +7 -0
  19. package/lib/browser/preload/i18n-preload-contribution.d.ts.map +1 -0
  20. package/lib/browser/preload/i18n-preload-contribution.js +63 -0
  21. package/lib/browser/preload/i18n-preload-contribution.js.map +1 -0
  22. package/lib/browser/preload/os-preload-contribution.d.ts +7 -0
  23. package/lib/browser/preload/os-preload-contribution.d.ts.map +1 -0
  24. package/lib/browser/preload/os-preload-contribution.js +49 -0
  25. package/lib/browser/preload/os-preload-contribution.js.map +1 -0
  26. package/lib/browser/preload/preload-module.d.ts +4 -0
  27. package/lib/browser/preload/preload-module.d.ts.map +1 -0
  28. package/lib/browser/preload/preload-module.js +39 -0
  29. package/lib/browser/preload/preload-module.js.map +1 -0
  30. package/lib/browser/preload/preloader.d.ts +12 -0
  31. package/lib/browser/preload/preloader.d.ts.map +1 -0
  32. package/lib/browser/preload/preloader.js +45 -0
  33. package/lib/browser/preload/preloader.js.map +1 -0
  34. package/lib/browser/preload/theme-preload-contribution.d.ts +5 -0
  35. package/lib/browser/preload/theme-preload-contribution.d.ts.map +1 -0
  36. package/lib/browser/preload/theme-preload-contribution.js +40 -0
  37. package/lib/browser/preload/theme-preload-contribution.js.map +1 -0
  38. package/lib/browser/shell/application-shell.d.ts +2 -0
  39. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  40. package/lib/browser/shell/application-shell.js +8 -0
  41. package/lib/browser/shell/application-shell.js.map +1 -1
  42. package/lib/common/i18n/localization-server.d.ts +7 -0
  43. package/lib/common/i18n/localization-server.d.ts.map +1 -0
  44. package/lib/common/i18n/localization-server.js +21 -0
  45. package/lib/common/i18n/localization-server.js.map +1 -0
  46. package/lib/common/keys.d.ts.map +1 -1
  47. package/lib/common/keys.js +4 -3
  48. package/lib/common/keys.js.map +1 -1
  49. package/lib/common/logger-protocol.d.ts +2 -0
  50. package/lib/common/logger-protocol.d.ts.map +1 -1
  51. package/lib/common/logger-protocol.js +3 -0
  52. package/lib/common/logger-protocol.js.map +1 -1
  53. package/lib/common/logger-watcher.d.ts +4 -3
  54. package/lib/common/logger-watcher.d.ts.map +1 -1
  55. package/lib/common/logger-watcher.js +10 -6
  56. package/lib/common/logger-watcher.js.map +1 -1
  57. package/lib/common/logger.d.ts.map +1 -1
  58. package/lib/common/logger.js +4 -0
  59. package/lib/common/logger.js.map +1 -1
  60. package/lib/common/os.d.ts +5 -0
  61. package/lib/common/os.d.ts.map +1 -1
  62. package/lib/common/os.js +3 -1
  63. package/lib/common/os.js.map +1 -1
  64. package/lib/common/quick-pick-service.d.ts +6 -0
  65. package/lib/common/quick-pick-service.d.ts.map +1 -1
  66. package/lib/common/quick-pick-service.js.map +1 -1
  67. package/lib/electron-browser/menu/electron-menu-contribution.d.ts +4 -0
  68. package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
  69. package/lib/electron-browser/menu/electron-menu-contribution.js +12 -0
  70. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  71. package/lib/electron-browser/preload.d.ts.map +1 -1
  72. package/lib/electron-browser/preload.js +3 -0
  73. package/lib/electron-browser/preload.js.map +1 -1
  74. package/lib/electron-common/electron-api.d.ts +2 -0
  75. package/lib/electron-common/electron-api.d.ts.map +1 -1
  76. package/lib/electron-common/electron-api.js +2 -1
  77. package/lib/electron-common/electron-api.js.map +1 -1
  78. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  79. package/lib/electron-main/electron-api-main.js +1 -0
  80. package/lib/electron-main/electron-api-main.js.map +1 -1
  81. package/lib/electron-main/electron-main-application.d.ts +6 -0
  82. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  83. package/lib/electron-main/electron-main-application.js +34 -4
  84. package/lib/electron-main/electron-main-application.js.map +1 -1
  85. package/lib/node/backend-application-module.d.ts.map +1 -1
  86. package/lib/node/backend-application-module.js +4 -3
  87. package/lib/node/backend-application-module.js.map +1 -1
  88. package/lib/node/console-logger-server.d.ts.map +1 -1
  89. package/lib/node/console-logger-server.js +5 -1
  90. package/lib/node/console-logger-server.js.map +1 -1
  91. package/lib/node/i18n/i18n-backend-module.d.ts.map +1 -1
  92. package/lib/node/i18n/i18n-backend-module.js +7 -4
  93. package/lib/node/i18n/i18n-backend-module.js.map +1 -1
  94. package/lib/node/i18n/{localization-backend-contribution.d.ts → localization-server.d.ts} +5 -4
  95. package/lib/node/i18n/localization-server.d.ts.map +1 -0
  96. package/lib/node/i18n/{localization-backend-contribution.js → localization-server.js} +13 -16
  97. package/lib/node/i18n/localization-server.js.map +1 -0
  98. package/lib/node/logger-backend-module.d.ts.map +1 -1
  99. package/lib/node/logger-backend-module.js +6 -1
  100. package/lib/node/logger-backend-module.js.map +1 -1
  101. package/lib/node/os-backend-provider.d.ts +5 -0
  102. package/lib/node/os-backend-provider.d.ts.map +1 -0
  103. package/lib/node/{os-backend-application-contribution.js → os-backend-provider.js} +8 -10
  104. package/lib/node/os-backend-provider.js.map +1 -0
  105. package/package.json +9 -8
  106. package/src/browser/common-frontend-contribution.ts +1 -0
  107. package/src/browser/preload/i18n-preload-contribution.ts +50 -0
  108. package/src/browser/preload/os-preload-contribution.ts +37 -0
  109. package/src/browser/preload/preload-module.ts +45 -0
  110. package/src/browser/preload/preloader.ts +37 -0
  111. package/src/browser/preload/theme-preload-contribution.ts +31 -0
  112. package/src/browser/shell/application-shell.ts +11 -0
  113. package/src/common/i18n/localization-server.ts +25 -0
  114. package/src/common/i18n/nls.metadata.json +3969 -3719
  115. package/src/common/keys.ts +4 -3
  116. package/src/common/logger-protocol.ts +4 -0
  117. package/src/common/logger-watcher.ts +12 -7
  118. package/src/common/logger.ts +5 -0
  119. package/src/common/os.ts +8 -0
  120. package/src/common/quick-pick-service.ts +1 -0
  121. package/src/electron-browser/menu/electron-menu-contribution.ts +13 -0
  122. package/src/electron-browser/preload.ts +4 -1
  123. package/src/electron-common/electron-api.ts +2 -0
  124. package/src/electron-main/electron-api-main.ts +4 -1
  125. package/src/electron-main/electron-main-application.ts +40 -4
  126. package/src/node/backend-application-module.ts +7 -4
  127. package/src/node/console-logger-server.ts +5 -2
  128. package/src/node/i18n/i18n-backend-module.ts +9 -4
  129. package/src/node/i18n/{localization-backend-contribution.ts → localization-server.ts} +9 -10
  130. package/src/node/logger-backend-module.ts +8 -1
  131. package/src/node/{os-backend-application-contribution.ts → os-backend-provider.ts} +4 -9
  132. package/lib/browser/preloader.d.ts +0 -2
  133. package/lib/browser/preloader.d.ts.map +0 -1
  134. package/lib/browser/preloader.js +0 -75
  135. package/lib/browser/preloader.js.map +0 -1
  136. package/lib/node/i18n/localization-backend-contribution.d.ts.map +0 -1
  137. package/lib/node/i18n/localization-backend-contribution.js.map +0 -1
  138. package/lib/node/os-backend-application-contribution.d.ts +0 -6
  139. package/lib/node/os-backend-application-contribution.d.ts.map +0 -1
  140. package/lib/node/os-backend-application-contribution.js.map +0 -1
  141. package/src/browser/preloader.ts +0 -76
@@ -14,6 +14,7 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
+ import { nls } from './nls';
17
18
  import { isOSX } from './os';
18
19
  import { isObject } from './types';
19
20
 
@@ -252,7 +253,7 @@ export class KeyCode {
252
253
  }
253
254
  /* If duplicates i.e ctrl+ctrl+a or alt+alt+b or b+alt+b it is invalid */
254
255
  if (keys.length !== new Set(keys).size) {
255
- throw new Error(`Can't parse keybinding ${keybinding} Duplicate modifiers`);
256
+ throw new Error(nls.localize('theia/core/keybinding/duplicateModifierError', "Can't parse keybinding {0} Duplicate modifiers", keybinding));
256
257
  }
257
258
 
258
259
  for (let keyString of keys) {
@@ -266,7 +267,7 @@ export class KeyCode {
266
267
  if (isOSX) {
267
268
  schema.meta = true;
268
269
  } else {
269
- throw new Error(`Can't parse keybinding ${keybinding} meta is for OSX only`);
270
+ throw new Error(nls.localize('theia/core/keybinding/metaError', "Can't parse keybinding {0} meta is for OSX only", keybinding));
270
271
  }
271
272
  /* ctrlcmd for M1 keybindings that work on both macOS and other platforms */
272
273
  } else if (keyString === SpecialCases.CTRLCMD) {
@@ -288,7 +289,7 @@ export class KeyCode {
288
289
  schema.key = key;
289
290
  }
290
291
  } else {
291
- throw new Error(`Unrecognized key '${keyString}' in '${keybinding}'`);
292
+ throw new Error(nls.localize('theia/core/keybinding/unrecognizedKeyError', 'Unrecognized key {0} in {1}', keyString, keybinding));
292
293
  }
293
294
  }
294
295
 
@@ -38,6 +38,7 @@ export interface ILogLevelChangedEvent {
38
38
 
39
39
  export interface ILoggerClient {
40
40
  onLogLevelChanged(event: ILogLevelChangedEvent): void;
41
+ onLogConfigChanged(): void;
41
42
  }
42
43
 
43
44
  @injectable()
@@ -49,6 +50,9 @@ export class DispatchingLoggerClient implements ILoggerClient {
49
50
  this.clients.forEach(client => client.onLogLevelChanged(event));
50
51
  }
51
52
 
53
+ onLogConfigChanged(): void {
54
+ this.clients.forEach(client => client.onLogConfigChanged());
55
+ }
52
56
  }
53
57
 
54
58
  export const rootLoggerName = 'root';
@@ -22,22 +22,27 @@ import { ILoggerClient, ILogLevelChangedEvent } from './logger-protocol';
22
22
  export class LoggerWatcher {
23
23
 
24
24
  getLoggerClient(): ILoggerClient {
25
- const emitter = this.onLogLevelChangedEmitter;
25
+ const logLevelEmitter = this.onLogLevelChangedEmitter;
26
+ const logConfigEmitter = this.onLogConfigChangedEmitter;
26
27
  return {
27
28
  onLogLevelChanged(event: ILogLevelChangedEvent): void {
28
- emitter.fire(event);
29
- }
29
+ logLevelEmitter.fire(event);
30
+ },
31
+ onLogConfigChanged(): void {
32
+ logConfigEmitter.fire();
33
+ },
30
34
  };
31
35
  }
32
36
 
33
- private onLogLevelChangedEmitter = new Emitter<ILogLevelChangedEvent>();
37
+ protected onLogLevelChangedEmitter = new Emitter<ILogLevelChangedEvent>();
34
38
 
35
39
  get onLogLevelChanged(): Event<ILogLevelChangedEvent> {
36
40
  return this.onLogLevelChangedEmitter.event;
37
41
  }
38
42
 
39
- // FIXME: get rid of it, backend services should as well set a client on the server
40
- fireLogLevelChanged(event: ILogLevelChangedEvent): void {
41
- this.onLogLevelChangedEmitter.fire(event);
43
+ protected onLogConfigChangedEmitter = new Emitter<void>();
44
+
45
+ get onLogConfigChanged(): Event<void> {
46
+ return this.onLogConfigChangedEmitter.event;
42
47
  }
43
48
  }
@@ -261,6 +261,11 @@ export class Logger implements ILogger {
261
261
  }
262
262
  });
263
263
  });
264
+
265
+ /* Refetch log level if overall config in backend changed. */
266
+ this.loggerWatcher.onLogConfigChanged(() => {
267
+ this._logLevel = this.created.then(_ => this.server.getLogLevel(this.name));
268
+ });
264
269
  }
265
270
 
266
271
  setLogLevel(logLevel: number): Promise<void> {
package/src/common/os.ts CHANGED
@@ -72,3 +72,11 @@ export namespace OS {
72
72
  };
73
73
 
74
74
  }
75
+
76
+ export const OSBackendProviderPath = '/os';
77
+
78
+ export const OSBackendProvider = Symbol('OSBackendProvider');
79
+
80
+ export interface OSBackendProvider {
81
+ getBackendOS(): Promise<OS.Type>;
82
+ }
@@ -54,6 +54,7 @@ export interface QuickPickItem {
54
54
  description?: string;
55
55
  detail?: string;
56
56
  keySequence?: KeySequence;
57
+ iconPath?: URI | Uri | { light?: URI | Uri; dark: URI | Uri } | { id: string };
57
58
  iconClasses?: string[];
58
59
  alwaysShow?: boolean;
59
60
  highlights?: QuickPickItemHighlights;
@@ -30,6 +30,8 @@ import { WindowTitleService } from '../../browser/window/window-title-service';
30
30
 
31
31
  import '../../../src/electron-browser/menu/electron-menu-style.css';
32
32
  import { MenuDto } from '../../electron-common/electron-api';
33
+ import { ThemeService } from '../../browser/theming';
34
+ import { ThemeChangeEvent } from '../../common/theme';
33
35
 
34
36
  export namespace ElectronCommands {
35
37
  export const TOGGLE_DEVELOPER_TOOLS = Command.toDefaultLocalizedCommand({
@@ -88,6 +90,9 @@ export class ElectronMenuContribution extends BrowserMenuBarContribution impleme
88
90
  @inject(WindowService)
89
91
  protected readonly windowService: WindowService;
90
92
 
93
+ @inject(ThemeService)
94
+ protected readonly themeService: ThemeService;
95
+
91
96
  @inject(CustomTitleWidgetFactory)
92
97
  protected readonly customTitleWidgetFactory: CustomTitleWidgetFactory;
93
98
 
@@ -123,6 +128,9 @@ export class ElectronMenuContribution extends BrowserMenuBarContribution impleme
123
128
  this.handleToggleMaximized();
124
129
  });
125
130
  this.attachMenuBarVisibilityListener();
131
+ this.themeService.onDidColorThemeChange(e => {
132
+ this.handleThemeChange(e);
133
+ });
126
134
  }
127
135
 
128
136
  protected attachWindowFocusListener(app: FrontendApplication): void {
@@ -414,6 +422,11 @@ export class ElectronMenuContribution extends BrowserMenuBarContribution impleme
414
422
  }
415
423
  }
416
424
 
425
+ protected handleThemeChange(e: ThemeChangeEvent): void {
426
+ const backgroundColor = window.getComputedStyle(document.body).backgroundColor;
427
+ window.electronTheiaCore.setBackgroundColor(backgroundColor);
428
+ }
429
+
417
430
  }
418
431
 
419
432
  @injectable()
@@ -25,7 +25,7 @@ import {
25
25
  CHANNEL_ON_WINDOW_EVENT, CHANNEL_GET_ZOOM_LEVEL, CHANNEL_SET_ZOOM_LEVEL, CHANNEL_IS_FULL_SCREENABLE, CHANNEL_TOGGLE_FULL_SCREEN,
26
26
  CHANNEL_IS_FULL_SCREEN, CHANNEL_SET_MENU_BAR_VISIBLE, CHANNEL_REQUEST_CLOSE, CHANNEL_SET_TITLE_STYLE, CHANNEL_RESTART,
27
27
  CHANNEL_REQUEST_RELOAD, CHANNEL_APP_STATE_CHANGED, CHANNEL_SHOW_ITEM_IN_FOLDER, CHANNEL_READ_CLIPBOARD, CHANNEL_WRITE_CLIPBOARD,
28
- CHANNEL_KEYBOARD_LAYOUT_CHANGED, CHANNEL_IPC_CONNECTION, InternalMenuDto, CHANNEL_REQUEST_SECONDARY_CLOSE
28
+ CHANNEL_KEYBOARD_LAYOUT_CHANGED, CHANNEL_IPC_CONNECTION, InternalMenuDto, CHANNEL_REQUEST_SECONDARY_CLOSE, CHANNEL_SET_BACKGROUND_COLOR
29
29
  } from '../electron-common/electron-api';
30
30
 
31
31
  // eslint-disable-next-line import/no-extraneous-dependencies
@@ -101,6 +101,9 @@ const api: TheiaCoreAPI = {
101
101
  setTitleBarStyle: function (style): void {
102
102
  ipcRenderer.send(CHANNEL_SET_TITLE_STYLE, style);
103
103
  },
104
+ setBackgroundColor: function (backgroundColor): void {
105
+ ipcRenderer.send(CHANNEL_SET_BACKGROUND_COLOR, backgroundColor);
106
+ },
104
107
  minimize: function (): void {
105
108
  ipcRenderer.send(CHANNEL_MINIMIZE);
106
109
  },
@@ -56,6 +56,7 @@ export interface TheiaCoreAPI {
56
56
 
57
57
  getTitleBarStyleAtStartup(): Promise<string>;
58
58
  setTitleBarStyle(style: string): void;
59
+ setBackgroundColor(backgroundColor: string): void;
59
60
  minimize(): void;
60
61
  isMaximized(): boolean; // TODO: this should really be async, since it blocks the renderer process
61
62
  maximize(): void;
@@ -109,6 +110,7 @@ export const CHANNEL_ATTACH_SECURITY_TOKEN = 'AttachSecurityToken';
109
110
 
110
111
  export const CHANNEL_GET_TITLE_STYLE_AT_STARTUP = 'GetTitleStyleAtStartup';
111
112
  export const CHANNEL_SET_TITLE_STYLE = 'SetTitleStyle';
113
+ export const CHANNEL_SET_BACKGROUND_COLOR = 'SetBackgroundColor';
112
114
  export const CHANNEL_CLOSE = 'Close';
113
115
  export const CHANNEL_MINIMIZE = 'Minimize';
114
116
  export const CHANNEL_MAXIMIZE = 'Maximize';
@@ -50,7 +50,8 @@ import {
50
50
  CHANNEL_SET_MENU_BAR_VISIBLE,
51
51
  CHANNEL_TOGGLE_FULL_SCREEN,
52
52
  CHANNEL_IS_MAXIMIZED,
53
- CHANNEL_REQUEST_SECONDARY_CLOSE
53
+ CHANNEL_REQUEST_SECONDARY_CLOSE,
54
+ CHANNEL_SET_BACKGROUND_COLOR
54
55
  } from '../electron-common/electron-api';
55
56
  import { ElectronMainApplication, ElectronMainApplicationContribution } from './electron-main-application';
56
57
  import { Disposable, DisposableCollection, isOSX, MaybePromise } from '../common';
@@ -152,6 +153,8 @@ export class TheiaMainApi implements ElectronMainApplicationContribution {
152
153
 
153
154
  ipcMain.on(CHANNEL_SET_TITLE_STYLE, (event, style) => application.setTitleBarStyle(event.sender, style));
154
155
 
156
+ ipcMain.on(CHANNEL_SET_BACKGROUND_COLOR, (event, backgroundColor) => application.setBackgroundColor(event.sender, backgroundColor));
157
+
155
158
  ipcMain.on(CHANNEL_MINIMIZE, event => {
156
159
  BrowserWindow.fromWebContents(event.sender)?.minimize();
157
160
  });
@@ -15,13 +15,13 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { inject, injectable, named } from 'inversify';
18
- import { screen, app, BrowserWindow, WebContents, Event as ElectronEvent, BrowserWindowConstructorOptions, nativeImage } from '../../electron-shared/electron';
18
+ import { screen, app, BrowserWindow, WebContents, Event as ElectronEvent, BrowserWindowConstructorOptions, nativeImage, nativeTheme } from '../../electron-shared/electron';
19
19
  import * as path from 'path';
20
20
  import { Argv } from 'yargs';
21
21
  import { AddressInfo } from 'net';
22
22
  import { promises as fs } from 'fs';
23
23
  import { fork, ForkOptions } from 'child_process';
24
- import { FrontendApplicationConfig } from '@theia/application-package/lib/application-props';
24
+ import { DefaultTheme, FrontendApplicationConfig } from '@theia/application-package/lib/application-props';
25
25
  import URI from '../common/uri';
26
26
  import { FileUri } from '../node/file-uri';
27
27
  import { Deferred } from '../common/promise-util';
@@ -180,10 +180,13 @@ export class ElectronMainApplication {
180
180
 
181
181
  protected _config: FrontendApplicationConfig | undefined;
182
182
  protected useNativeWindowFrame: boolean = true;
183
+ protected customBackgroundColor?: string;
183
184
  protected didUseNativeWindowFrameOnStart = new Map<number, boolean>();
184
185
  protected windows = new Map<number, TheiaElectronWindow>();
185
186
  protected restarting = false;
186
187
 
188
+ protected initialWindow?: BrowserWindow;
189
+
187
190
  get config(): FrontendApplicationConfig {
188
191
  if (!this._config) {
189
192
  throw new Error('You have to start the application first.');
@@ -195,6 +198,7 @@ export class ElectronMainApplication {
195
198
  this.useNativeWindowFrame = this.getTitleBarStyle(config) === 'native';
196
199
  this._config = config;
197
200
  this.hookApplicationEvents();
201
+ this.showInitialWindow();
198
202
  const port = await this.startBackend();
199
203
  this._backendPort.resolve(port);
200
204
  await app.whenReady();
@@ -226,6 +230,15 @@ export class ElectronMainApplication {
226
230
 
227
231
  public setTitleBarStyle(webContents: WebContents, style: string): void {
228
232
  this.useNativeWindowFrame = isOSX || style === 'native';
233
+ this.saveState(webContents);
234
+ }
235
+
236
+ setBackgroundColor(webContents: WebContents, backgroundColor: string): void {
237
+ this.customBackgroundColor = backgroundColor;
238
+ this.saveState(webContents);
239
+ }
240
+
241
+ protected saveState(webContents: Electron.WebContents): void {
229
242
  const browserWindow = BrowserWindow.fromWebContents(webContents);
230
243
  if (browserWindow) {
231
244
  this.saveWindowState(browserWindow);
@@ -242,6 +255,16 @@ export class ElectronMainApplication {
242
255
  return this.didUseNativeWindowFrameOnStart.get(webContents.id) ? 'native' : 'custom';
243
256
  }
244
257
 
258
+ protected showInitialWindow(): void {
259
+ if (this.config.electron.showWindowEarly) {
260
+ app.whenReady().then(async () => {
261
+ const options = await this.getLastWindowOptions();
262
+ this.initialWindow = await this.createWindow({ ...options });
263
+ this.initialWindow.show();
264
+ });
265
+ }
266
+ }
267
+
245
268
  protected async launch(params: ElectronMainExecutionParams): Promise<void> {
246
269
  createYargs(params.argv, params.cwd)
247
270
  .command('$0 [file]', false,
@@ -303,6 +326,7 @@ export class ElectronMainApplication {
303
326
  return {
304
327
  show: false,
305
328
  title: this.config.applicationName,
329
+ backgroundColor: DefaultTheme.defaultBackgroundColor(this.config.electron.windowOptions?.darkTheme || nativeTheme.shouldUseDarkColors),
306
330
  minWidth: 200,
307
331
  minHeight: 120,
308
332
  webPreferences: {
@@ -320,18 +344,29 @@ export class ElectronMainApplication {
320
344
  }
321
345
 
322
346
  async openDefaultWindow(): Promise<BrowserWindow> {
323
- const [uri, electronWindow] = await Promise.all([this.createWindowUri(), this.createWindow()]);
347
+ const options = this.getDefaultTheiaWindowOptions();
348
+ const [uri, electronWindow] = await Promise.all([this.createWindowUri(), this.reuseOrCreateWindow(options)]);
324
349
  electronWindow.loadURL(uri.withFragment(DEFAULT_WINDOW_HASH).toString(true));
325
350
  return electronWindow;
326
351
  }
327
352
 
328
353
  protected async openWindowWithWorkspace(workspacePath: string): Promise<BrowserWindow> {
329
354
  const options = await this.getLastWindowOptions();
330
- const [uri, electronWindow] = await Promise.all([this.createWindowUri(), this.createWindow(options)]);
355
+ const [uri, electronWindow] = await Promise.all([this.createWindowUri(), this.reuseOrCreateWindow(options)]);
331
356
  electronWindow.loadURL(uri.withFragment(encodeURI(workspacePath)).toString(true));
332
357
  return electronWindow;
333
358
  }
334
359
 
360
+ protected async reuseOrCreateWindow(asyncOptions: MaybePromise<TheiaBrowserWindowOptions>): Promise<BrowserWindow> {
361
+ if (!this.initialWindow) {
362
+ return this.createWindow(asyncOptions);
363
+ }
364
+ // reset initial window after having it re-used once
365
+ const window = this.initialWindow;
366
+ this.initialWindow = undefined;
367
+ return window;
368
+ }
369
+
335
370
  /** Configures native window creation, i.e. using window.open or links with target "_blank" in the frontend. */
336
371
  protected configureNativeSecondaryWindowCreation(electronWindow: BrowserWindow): void {
337
372
  electronWindow.webContents.setWindowOpenHandler(() => {
@@ -455,6 +490,7 @@ export class ElectronMainApplication {
455
490
  y: bounds.y,
456
491
  frame: this.useNativeWindowFrame,
457
492
  screenLayout: this.getCurrentScreenLayout(),
493
+ backgroundColor: this.customBackgroundColor
458
494
  };
459
495
  this.electronStore.set('windowstate', options);
460
496
  } catch (e) {
@@ -19,7 +19,7 @@ import { ApplicationPackage } from '@theia/application-package';
19
19
  import { REQUEST_SERVICE_PATH } from '@theia/request';
20
20
  import {
21
21
  bindContributionProvider, MessageService, MessageClient, ConnectionHandler, RpcConnectionHandler,
22
- CommandService, commandServicePath, messageServicePath
22
+ CommandService, commandServicePath, messageServicePath, OSBackendProvider, OSBackendProviderPath
23
23
  } from '../common';
24
24
  import { BackendApplication, BackendApplicationContribution, BackendApplicationCliContribution, BackendApplicationServer } from './backend-application';
25
25
  import { CliManager, CliContribution } from './cli';
@@ -38,7 +38,7 @@ import { EnvironmentUtils } from './environment-utils';
38
38
  import { ProcessUtils } from './process-utils';
39
39
  import { ProxyCliContribution } from './request/proxy-cli-contribution';
40
40
  import { bindNodeStopwatch, bindBackendStopwatchServer } from './performance';
41
- import { OSBackendApplicationContribution } from './os-backend-application-contribution';
41
+ import { OSBackendProviderImpl } from './os-backend-provider';
42
42
  import { BackendRequestFacade } from './request/backend-request-facade';
43
43
  import { FileSystemLocking, FileSystemLockingImpl } from './filesystem-locking';
44
44
 
@@ -116,8 +116,11 @@ export const backendApplicationModule = new ContainerModule(bind => {
116
116
  bind(EnvironmentUtils).toSelf().inSingletonScope();
117
117
  bind(ProcessUtils).toSelf().inSingletonScope();
118
118
 
119
- bind(OSBackendApplicationContribution).toSelf().inSingletonScope();
120
- bind(BackendApplicationContribution).toService(OSBackendApplicationContribution);
119
+ bind(OSBackendProviderImpl).toSelf().inSingletonScope();
120
+ bind(OSBackendProvider).toService(OSBackendProviderImpl);
121
+ bind(ConnectionHandler).toDynamicValue(
122
+ ctx => new RpcConnectionHandler(OSBackendProviderPath, () => ctx.container.get(OSBackendProvider))
123
+ ).inSingletonScope();
121
124
 
122
125
  bind(ProxyCliContribution).toSelf().inSingletonScope();
123
126
  bind(CliContribution).toService(ProxyCliContribution);
@@ -17,7 +17,7 @@
17
17
  import { inject, injectable, postConstruct } from 'inversify';
18
18
  import { LoggerWatcher } from '../common/logger-watcher';
19
19
  import { LogLevelCliContribution } from './logger-cli-contribution';
20
- import { ILoggerServer, ILoggerClient, ConsoleLogger } from '../common/logger-protocol';
20
+ import { ILoggerServer, ILoggerClient, ConsoleLogger, rootLoggerName } from '../common/logger-protocol';
21
21
 
22
22
  @injectable()
23
23
  export class ConsoleLoggerServer implements ILoggerServer {
@@ -32,9 +32,13 @@ export class ConsoleLoggerServer implements ILoggerServer {
32
32
 
33
33
  @postConstruct()
34
34
  protected init(): void {
35
+ this.setLogLevel(rootLoggerName, this.cli.defaultLogLevel);
35
36
  for (const name of Object.keys(this.cli.logLevels)) {
36
37
  this.setLogLevel(name, this.cli.logLevels[name]);
37
38
  }
39
+ this.cli.onLogConfigChanged(() => {
40
+ this.client?.onLogConfigChanged();
41
+ });
38
42
  }
39
43
 
40
44
  async setLogLevel(name: string, newLogLevel: number): Promise<void> {
@@ -45,7 +49,6 @@ export class ConsoleLoggerServer implements ILoggerServer {
45
49
  if (this.client !== undefined) {
46
50
  this.client.onLogLevelChanged(event);
47
51
  }
48
- this.watcher.fireLogLevelChanged(event);
49
52
  }
50
53
 
51
54
  async getLogLevel(name: string): Promise<number> {
@@ -19,9 +19,10 @@ import { localizationPath } from '../../common/i18n/localization';
19
19
  import { LocalizationProvider } from './localization-provider';
20
20
  import { ConnectionHandler, RpcConnectionHandler, bindContributionProvider } from '../../common';
21
21
  import { LocalizationRegistry, LocalizationContribution } from './localization-contribution';
22
- import { LocalizationBackendContribution } from './localization-backend-contribution';
23
- import { BackendApplicationContribution } from '../backend-application';
22
+ import { LocalizationServerImpl } from './localization-server';
24
23
  import { TheiaLocalizationContribution } from './theia-localization-contribution';
24
+ import { LocalizationServer, LocalizationServerPath } from '../../common/i18n/localization-server';
25
+ import { BackendApplicationContribution } from '../backend-application';
25
26
 
26
27
  export default new ContainerModule(bind => {
27
28
  bind(LocalizationProvider).toSelf().inSingletonScope();
@@ -30,8 +31,12 @@ export default new ContainerModule(bind => {
30
31
  ).inSingletonScope();
31
32
  bind(LocalizationRegistry).toSelf().inSingletonScope();
32
33
  bindContributionProvider(bind, LocalizationContribution);
33
- bind(LocalizationBackendContribution).toSelf().inSingletonScope();
34
- bind(BackendApplicationContribution).toService(LocalizationBackendContribution);
34
+ bind(LocalizationServerImpl).toSelf().inSingletonScope();
35
+ bind(LocalizationServer).toService(LocalizationServerImpl);
36
+ bind(BackendApplicationContribution).toService(LocalizationServerImpl);
37
+ bind(ConnectionHandler).toDynamicValue(ctx =>
38
+ new RpcConnectionHandler(LocalizationServerPath, () => ctx.container.get(LocalizationServer))
39
+ ).inSingletonScope();
35
40
  bind(TheiaLocalizationContribution).toSelf().inSingletonScope();
36
41
  bind(LocalizationContribution).toService(TheiaLocalizationContribution);
37
42
  });
@@ -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
 
17
- import * as express from 'express';
18
17
  import { inject, injectable } from 'inversify';
18
+ import { Localization } from 'src/common/i18n/localization';
19
+ import { LocalizationServer } from '../../common/i18n/localization-server';
19
20
  import { nls } from '../../common/nls';
20
21
  import { Deferred } from '../../common/promise-util';
21
22
  import { BackendApplicationContribution } from '../backend-application';
@@ -23,7 +24,8 @@ import { LocalizationRegistry } from './localization-contribution';
23
24
  import { LocalizationProvider } from './localization-provider';
24
25
 
25
26
  @injectable()
26
- export class LocalizationBackendContribution implements BackendApplicationContribution {
27
+ export class LocalizationServerImpl implements LocalizationServer, BackendApplicationContribution {
28
+
27
29
  protected readonly initialized = new Deferred<void>();
28
30
 
29
31
  @inject(LocalizationRegistry)
@@ -41,13 +43,10 @@ export class LocalizationBackendContribution implements BackendApplicationContri
41
43
  return this.initialized.promise;
42
44
  }
43
45
 
44
- configure(app: express.Application): void {
45
- app.get('/i18n/:locale', async (req, res) => {
46
- await this.waitForInitialization();
47
- let locale = req.params.locale;
48
- locale = this.localizationProvider.getAvailableLanguages().some(e => e.languageId === locale) ? locale : nls.defaultLocale;
49
- this.localizationProvider.setCurrentLanguage(locale);
50
- res.send(this.localizationProvider.loadLocalization(locale));
51
- });
46
+ async loadLocalization(languageId: string): Promise<Localization> {
47
+ await this.waitForInitialization();
48
+ languageId = this.localizationProvider.getAvailableLanguages().some(e => e.languageId === languageId) ? languageId : nls.defaultLocale;
49
+ this.localizationProvider.setCurrentLanguage(languageId);
50
+ return this.localizationProvider.loadLocalization(languageId);
52
51
  }
53
52
  }
@@ -63,7 +63,14 @@ export const loggerBackendModule = new ContainerModule(bind => {
63
63
  bind(DispatchingLoggerClient).toSelf().inSingletonScope();
64
64
  bindLogger(bind, {
65
65
  onLoggerServerActivation: ({ container }, server) => {
66
- server.setClient(container.get(DispatchingLoggerClient));
66
+ const dispatchingLoggerClient = container.get(DispatchingLoggerClient);
67
+ server.setClient(dispatchingLoggerClient);
68
+
69
+ // register backend logger watcher as a client
70
+ const loggerWatcher = container.get(LoggerWatcher);
71
+ dispatchingLoggerClient.clients.add(loggerWatcher.getLoggerClient());
72
+
73
+ // make sure dispatching logger client is the only client
67
74
  server.setClient = () => {
68
75
  throw new Error('use DispatchingLoggerClient');
69
76
  };
@@ -14,17 +14,12 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import * as express from 'express';
18
17
  import { injectable } from 'inversify';
19
- import { BackendApplicationContribution } from './backend-application';
20
- import { OS } from '../common/os';
18
+ import { OS, OSBackendProvider } from '../common/os';
21
19
 
22
20
  @injectable()
23
- export class OSBackendApplicationContribution implements BackendApplicationContribution {
24
-
25
- configure(app: express.Application): void {
26
- app.get('/os', (_, res) => {
27
- res.send(OS.type());
28
- });
21
+ export class OSBackendProviderImpl implements OSBackendProvider {
22
+ getBackendOS(): Promise<OS.Type> {
23
+ return Promise.resolve(OS.type());
29
24
  }
30
25
  }
@@ -1,2 +0,0 @@
1
- export declare function preload(): Promise<void>;
2
- //# sourceMappingURL=preloader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preloader.d.ts","sourceRoot":"","sources":["../../src/browser/preloader.ts"],"names":[],"mappings":"AAqEA,wBAAsB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAM7C"}
@@ -1,75 +0,0 @@
1
- "use strict";
2
- // *****************************************************************************
3
- // Copyright (C) 2022 TypeFox and others.
4
- //
5
- // This program and the accompanying materials are made available under the
6
- // terms of the Eclipse Public License v. 2.0 which is available at
7
- // http://www.eclipse.org/legal/epl-2.0.
8
- //
9
- // This Source Code may also be made available under the following Secondary
10
- // Licenses when the conditions for such availability set forth in the Eclipse
11
- // Public License v. 2.0 are satisfied: GNU General Public License, version 2
12
- // with the GNU Classpath Exception which is available at
13
- // https://www.gnu.org/software/classpath/license.html.
14
- //
15
- // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
16
- // *****************************************************************************
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.preload = void 0;
19
- const nls_1 = require("../common/nls");
20
- const endpoint_1 = require("./endpoint");
21
- const os_1 = require("../common/os");
22
- const frontend_application_config_provider_1 = require("./frontend-application-config-provider");
23
- function fetchFrom(path) {
24
- const endpoint = new endpoint_1.Endpoint({ path }).getRestUrl().toString();
25
- return fetch(endpoint);
26
- }
27
- async function loadTranslations() {
28
- const defaultLocale = frontend_application_config_provider_1.FrontendApplicationConfigProvider.get().defaultLocale;
29
- if (defaultLocale && !nls_1.nls.locale) {
30
- Object.assign(nls_1.nls, {
31
- locale: defaultLocale
32
- });
33
- }
34
- if (nls_1.nls.locale) {
35
- const response = await fetchFrom(`/i18n/${nls_1.nls.locale}`);
36
- const localization = await response.json();
37
- if (localization.languagePack) {
38
- nls_1.nls.localization = localization;
39
- }
40
- else {
41
- // In case the localization that we've loaded doesn't localize Theia completely (languagePack is false)
42
- // We simply reset the locale to the default again
43
- Object.assign(nls_1.nls, {
44
- locale: defaultLocale || undefined
45
- });
46
- }
47
- }
48
- }
49
- async function loadBackendOS() {
50
- const response = await fetchFrom('/os');
51
- const osType = await response.text();
52
- const isWindows = osType === 'Windows';
53
- const isOSX = osType === 'OSX';
54
- os_1.OS.backend.isOSX = isOSX;
55
- os_1.OS.backend.isWindows = isWindows;
56
- os_1.OS.backend.type = () => osType;
57
- os_1.OS.backend.EOL = isWindows ? '\r\n' : '\n';
58
- }
59
- function initBackground() {
60
- // The default light background color is based on the `colors#editor.background` value from
61
- // `packages/monaco/data/monaco-themes/vscode/dark_vs.json` and the dark background comes from the `light_vs.json`.
62
- const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
63
- const value = window.localStorage.getItem(frontend_application_config_provider_1.DEFAULT_BACKGROUND_COLOR_STORAGE_KEY) || (dark ? '#1E1E1E' : '#FFFFFF');
64
- const documentElement = document.documentElement;
65
- documentElement.style.setProperty('--theia-editor-background', value);
66
- }
67
- async function preload() {
68
- await Promise.allSettled([
69
- loadTranslations(),
70
- loadBackendOS(),
71
- initBackground(),
72
- ]);
73
- }
74
- exports.preload = preload;
75
- //# sourceMappingURL=preloader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preloader.js","sourceRoot":"","sources":["../../src/browser/preloader.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;AAEhF,uCAAoC;AACpC,yCAAsC;AACtC,qCAAkC;AAClC,iGAAiI;AAGjI,SAAS,SAAS,CAAC,IAAY;IAC3B,MAAM,QAAQ,GAAG,IAAI,mBAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC;IAChE,OAAO,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC3B,MAAM,aAAa,GAAG,wEAAiC,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC;IAC5E,IAAI,aAAa,IAAI,CAAC,SAAG,CAAC,MAAM,EAAE;QAC9B,MAAM,CAAC,MAAM,CAAC,SAAG,EAAE;YACf,MAAM,EAAE,aAAa;SACxB,CAAC,CAAC;KACN;IACD,IAAI,SAAG,CAAC,MAAM,EAAE;QACZ,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,SAAS,SAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAkB,CAAC;QAC3D,IAAI,YAAY,CAAC,YAAY,EAAE;YAC3B,SAAG,CAAC,YAAY,GAAG,YAAY,CAAC;SACnC;aAAM;YACH,uGAAuG;YACvG,kDAAkD;YAClD,MAAM,CAAC,MAAM,CAAC,SAAG,EAAE;gBACf,MAAM,EAAE,aAAa,IAAI,SAAS;aACrC,CAAC,CAAC;SACN;KACJ;AACL,CAAC;AAED,KAAK,UAAU,aAAa;IACxB,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAa,CAAC;IAChD,MAAM,SAAS,GAAG,MAAM,KAAK,SAAS,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,KAAK,KAAK,CAAC;IAC/B,OAAE,CAAC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;IACzB,OAAE,CAAC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IACjC,OAAE,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;IAC/B,OAAE,CAAC,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,SAAS,cAAc;IACnB,2FAA2F;IAC3F,mHAAmH;IACnH,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAC;IAC5F,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,2EAAoC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClH,MAAM,eAAe,GAAG,QAAQ,CAAC,eAAe,CAAC;IACjD,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;AAC1E,CAAC;AAEM,KAAK,UAAU,OAAO;IACzB,MAAM,OAAO,CAAC,UAAU,CAAC;QACrB,gBAAgB,EAAE;QAClB,aAAa,EAAE;QACf,cAAc,EAAE;KACnB,CAAC,CAAC;AACP,CAAC;AAND,0BAMC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"localization-backend-contribution.d.ts","sourceRoot":"","sources":["../../../src/node/i18n/localization-backend-contribution.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAE/D,qBACa,+BAAgC,YAAW,8BAA8B;IAClF,SAAS,CAAC,QAAQ,CAAC,WAAW,iBAAwB;IAGtD,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAG9D,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,CAAC;IAExD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAItC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,GAAG,IAAI;CAS5C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"localization-backend-contribution.js","sourceRoot":"","sources":["../../../src/node/i18n/localization-backend-contribution.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;;;;;;;;;AAGhF,yCAA+C;AAC/C,0CAAuC;AACvC,4DAAqD;AAErD,2EAAmE;AACnE,mEAA+D;AAG/D,IAAa,+BAA+B,GAA5C,MAAa,+BAA+B;IAA5C;QACuB,gBAAW,GAAG,IAAI,uBAAQ,EAAQ,CAAC;IA0B1D,CAAC;IAlBG,KAAK,CAAC,UAAU;QACZ,MAAM,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,qBAAqB;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;IACpC,CAAC;IAED,SAAS,CAAC,GAAwB;QAC9B,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACxC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACnC,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;YAC/B,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAG,CAAC,aAAa,CAAC;YAC3H,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAvBG;IADC,IAAA,kBAAM,EAAC,gDAAoB,CAAC;8BACY,gDAAoB;6EAAC;AAG9D;IADC,IAAA,kBAAM,EAAC,4CAAoB,CAAC;8BACY,4CAAoB;6EAAC;AAPrD,+BAA+B;IAD3C,IAAA,sBAAU,GAAE;GACA,+BAA+B,CA2B3C;AA3BY,0EAA+B"}
@@ -1,6 +0,0 @@
1
- import * as express from 'express';
2
- import { BackendApplicationContribution } from './backend-application';
3
- export declare class OSBackendApplicationContribution implements BackendApplicationContribution {
4
- configure(app: express.Application): void;
5
- }
6
- //# sourceMappingURL=os-backend-application-contribution.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"os-backend-application-contribution.d.ts","sourceRoot":"","sources":["../../src/node/os-backend-application-contribution.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AAGvE,qBACa,gCAAiC,YAAW,8BAA8B;IAEnF,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,GAAG,IAAI;CAK5C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"os-backend-application-contribution.js","sourceRoot":"","sources":["../../src/node/os-backend-application-contribution.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;;;;;;AAGhF,yCAAuC;AAEvC,qCAAkC;AAGlC,IAAa,gCAAgC,GAA7C,MAAa,gCAAgC;IAEzC,SAAS,CAAC,GAAwB;QAC9B,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;YACtB,GAAG,CAAC,IAAI,CAAC,OAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAA;AAPY,gCAAgC;IAD5C,IAAA,sBAAU,GAAE;GACA,gCAAgC,CAO5C;AAPY,4EAAgC"}