@theia/core 1.40.1 → 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 (284) hide show
  1. package/README.md +7 -7
  2. package/i18n/nls.cs.json +6 -1
  3. package/i18n/nls.de.json +6 -1
  4. package/i18n/nls.es.json +6 -1
  5. package/i18n/nls.fr.json +6 -1
  6. package/i18n/nls.hu.json +6 -1
  7. package/i18n/nls.it.json +6 -1
  8. package/i18n/nls.ja.json +6 -1
  9. package/i18n/nls.json +6 -1
  10. package/i18n/nls.pl.json +6 -1
  11. package/i18n/nls.pt-br.json +6 -1
  12. package/i18n/nls.pt-pt.json +6 -1
  13. package/i18n/nls.ru.json +6 -1
  14. package/i18n/nls.zh-cn.json +6 -1
  15. package/lib/browser/common-frontend-contribution.d.ts +11 -0
  16. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  17. package/lib/browser/common-frontend-contribution.js +98 -14
  18. package/lib/browser/common-frontend-contribution.js.map +1 -1
  19. package/lib/browser/context-menu-renderer.d.ts +5 -0
  20. package/lib/browser/context-menu-renderer.d.ts.map +1 -1
  21. package/lib/browser/label-parser.d.ts +8 -0
  22. package/lib/browser/label-parser.d.ts.map +1 -1
  23. package/lib/browser/label-parser.js +14 -0
  24. package/lib/browser/label-parser.js.map +1 -1
  25. package/lib/browser/label-parser.spec.js +33 -0
  26. package/lib/browser/label-parser.spec.js.map +1 -1
  27. package/lib/browser/menu/browser-context-menu-renderer.d.ts +1 -1
  28. package/lib/browser/menu/browser-context-menu-renderer.d.ts.map +1 -1
  29. package/lib/browser/menu/browser-context-menu-renderer.js +2 -2
  30. package/lib/browser/menu/browser-context-menu-renderer.js.map +1 -1
  31. package/lib/browser/menu/browser-menu-plugin.d.ts +1 -1
  32. package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
  33. package/lib/browser/menu/browser-menu-plugin.js +2 -2
  34. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  35. package/lib/browser/performance/frontend-stopwatch.d.ts.map +1 -1
  36. package/lib/browser/performance/frontend-stopwatch.js +6 -2
  37. package/lib/browser/performance/frontend-stopwatch.js.map +1 -1
  38. package/lib/browser/preferences/preference-contribution.d.ts +2 -0
  39. package/lib/browser/preferences/preference-contribution.d.ts.map +1 -1
  40. package/lib/browser/preferences/preference-contribution.js +48 -24
  41. package/lib/browser/preferences/preference-contribution.js.map +1 -1
  42. package/lib/browser/preload/i18n-preload-contribution.d.ts +7 -0
  43. package/lib/browser/preload/i18n-preload-contribution.d.ts.map +1 -0
  44. package/lib/browser/preload/i18n-preload-contribution.js +63 -0
  45. package/lib/browser/preload/i18n-preload-contribution.js.map +1 -0
  46. package/lib/browser/preload/os-preload-contribution.d.ts +7 -0
  47. package/lib/browser/preload/os-preload-contribution.d.ts.map +1 -0
  48. package/lib/browser/preload/os-preload-contribution.js +49 -0
  49. package/lib/browser/preload/os-preload-contribution.js.map +1 -0
  50. package/lib/browser/preload/preload-module.d.ts +4 -0
  51. package/lib/browser/preload/preload-module.d.ts.map +1 -0
  52. package/lib/browser/preload/preload-module.js +39 -0
  53. package/lib/browser/preload/preload-module.js.map +1 -0
  54. package/lib/browser/preload/preloader.d.ts +12 -0
  55. package/lib/browser/preload/preloader.d.ts.map +1 -0
  56. package/lib/browser/preload/preloader.js +45 -0
  57. package/lib/browser/preload/preloader.js.map +1 -0
  58. package/lib/browser/preload/theme-preload-contribution.d.ts +5 -0
  59. package/lib/browser/preload/theme-preload-contribution.d.ts.map +1 -0
  60. package/lib/browser/preload/theme-preload-contribution.js +40 -0
  61. package/lib/browser/preload/theme-preload-contribution.js.map +1 -0
  62. package/lib/browser/saveable.d.ts +15 -1
  63. package/lib/browser/saveable.d.ts.map +1 -1
  64. package/lib/browser/saveable.js +34 -1
  65. package/lib/browser/saveable.js.map +1 -1
  66. package/lib/browser/shell/application-shell.d.ts +2 -0
  67. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  68. package/lib/browser/shell/application-shell.js +8 -0
  69. package/lib/browser/shell/application-shell.js.map +1 -1
  70. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts +46 -1
  71. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.d.ts.map +1 -1
  72. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js +87 -6
  73. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.js.map +1 -1
  74. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts +20 -2
  75. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.d.ts.map +1 -1
  76. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js +28 -1
  77. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.js.map +1 -1
  78. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts +25 -1
  79. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.d.ts.map +1 -1
  80. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js +79 -7
  81. package/lib/browser/shell/tab-bar-toolbar/tab-bar-toolbar.js.map +1 -1
  82. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  83. package/lib/browser/shell/tab-bars.js +9 -1
  84. package/lib/browser/shell/tab-bars.js.map +1 -1
  85. package/lib/browser/tree/tree-model.d.ts +2 -0
  86. package/lib/browser/tree/tree-model.d.ts.map +1 -1
  87. package/lib/browser/tree/tree-model.js +6 -0
  88. package/lib/browser/tree/tree-model.js.map +1 -1
  89. package/lib/browser/tree/tree-widget.d.ts +18 -0
  90. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  91. package/lib/browser/tree/tree-widget.js +57 -0
  92. package/lib/browser/tree/tree-widget.js.map +1 -1
  93. package/lib/browser/tree/tree.d.ts +18 -0
  94. package/lib/browser/tree/tree.d.ts.map +1 -1
  95. package/lib/browser/tree/tree.js +6 -0
  96. package/lib/browser/tree/tree.js.map +1 -1
  97. package/lib/browser/widgets/enhanced-preview-widget.d.ts +7 -0
  98. package/lib/browser/widgets/enhanced-preview-widget.d.ts.map +1 -0
  99. package/lib/browser/widgets/enhanced-preview-widget.js +27 -0
  100. package/lib/browser/widgets/enhanced-preview-widget.js.map +1 -0
  101. package/lib/browser/window-contribution.js +1 -1
  102. package/lib/browser/window-contribution.js.map +1 -1
  103. package/lib/common/array-utils.d.ts +7 -0
  104. package/lib/common/array-utils.d.ts.map +1 -1
  105. package/lib/common/array-utils.js +21 -0
  106. package/lib/common/array-utils.js.map +1 -1
  107. package/lib/common/event.d.ts +5 -0
  108. package/lib/common/event.d.ts.map +1 -1
  109. package/lib/common/event.js +5 -1
  110. package/lib/common/event.js.map +1 -1
  111. package/lib/common/i18n/localization-server.d.ts +7 -0
  112. package/lib/common/i18n/localization-server.d.ts.map +1 -0
  113. package/lib/common/i18n/localization-server.js +21 -0
  114. package/lib/common/i18n/localization-server.js.map +1 -0
  115. package/lib/common/keys.d.ts.map +1 -1
  116. package/lib/common/keys.js +4 -3
  117. package/lib/common/keys.js.map +1 -1
  118. package/lib/common/logger-protocol.d.ts +2 -0
  119. package/lib/common/logger-protocol.d.ts.map +1 -1
  120. package/lib/common/logger-protocol.js +3 -0
  121. package/lib/common/logger-protocol.js.map +1 -1
  122. package/lib/common/logger-watcher.d.ts +4 -3
  123. package/lib/common/logger-watcher.d.ts.map +1 -1
  124. package/lib/common/logger-watcher.js +10 -6
  125. package/lib/common/logger-watcher.js.map +1 -1
  126. package/lib/common/logger.d.ts.map +1 -1
  127. package/lib/common/logger.js +4 -0
  128. package/lib/common/logger.js.map +1 -1
  129. package/lib/common/menu/menu-model-registry.d.ts +12 -1
  130. package/lib/common/menu/menu-model-registry.d.ts.map +1 -1
  131. package/lib/common/menu/menu-model-registry.js +46 -0
  132. package/lib/common/menu/menu-model-registry.js.map +1 -1
  133. package/lib/common/os.d.ts +5 -0
  134. package/lib/common/os.d.ts.map +1 -1
  135. package/lib/common/os.js +3 -1
  136. package/lib/common/os.js.map +1 -1
  137. package/lib/common/performance/measurement.d.ts +21 -0
  138. package/lib/common/performance/measurement.d.ts.map +1 -1
  139. package/lib/common/performance/stopwatch.d.ts +10 -2
  140. package/lib/common/performance/stopwatch.d.ts.map +1 -1
  141. package/lib/common/performance/stopwatch.js +34 -11
  142. package/lib/common/performance/stopwatch.js.map +1 -1
  143. package/lib/common/promise-util.d.ts +4 -0
  144. package/lib/common/promise-util.d.ts.map +1 -1
  145. package/lib/common/promise-util.js +11 -1
  146. package/lib/common/promise-util.js.map +1 -1
  147. package/lib/common/promise-util.spec.js +26 -12
  148. package/lib/common/promise-util.spec.js.map +1 -1
  149. package/lib/common/quick-pick-service.d.ts +6 -0
  150. package/lib/common/quick-pick-service.d.ts.map +1 -1
  151. package/lib/common/quick-pick-service.js.map +1 -1
  152. package/lib/common/types.d.ts +4 -0
  153. package/lib/common/types.d.ts.map +1 -1
  154. package/lib/common/types.js +16 -1
  155. package/lib/common/types.js.map +1 -1
  156. package/lib/common/uri.d.ts +1 -0
  157. package/lib/common/uri.d.ts.map +1 -1
  158. package/lib/common/uri.js +3 -0
  159. package/lib/common/uri.js.map +1 -1
  160. package/lib/electron-browser/menu/electron-context-menu-renderer.js +2 -2
  161. package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
  162. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +1 -1
  163. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  164. package/lib/electron-browser/menu/electron-main-menu-factory.js +2 -2
  165. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  166. package/lib/electron-browser/menu/electron-menu-contribution.d.ts +4 -0
  167. package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
  168. package/lib/electron-browser/menu/electron-menu-contribution.js +12 -0
  169. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  170. package/lib/electron-browser/preload.d.ts.map +1 -1
  171. package/lib/electron-browser/preload.js +3 -0
  172. package/lib/electron-browser/preload.js.map +1 -1
  173. package/lib/electron-common/electron-api.d.ts +2 -0
  174. package/lib/electron-common/electron-api.d.ts.map +1 -1
  175. package/lib/electron-common/electron-api.js +2 -1
  176. package/lib/electron-common/electron-api.js.map +1 -1
  177. package/lib/electron-main/electron-api-main.d.ts.map +1 -1
  178. package/lib/electron-main/electron-api-main.js +1 -0
  179. package/lib/electron-main/electron-api-main.js.map +1 -1
  180. package/lib/electron-main/electron-main-application.d.ts +6 -0
  181. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  182. package/lib/electron-main/electron-main-application.js +37 -4
  183. package/lib/electron-main/electron-main-application.js.map +1 -1
  184. package/lib/node/backend-application-module.d.ts.map +1 -1
  185. package/lib/node/backend-application-module.js +4 -3
  186. package/lib/node/backend-application-module.js.map +1 -1
  187. package/lib/node/backend-application.d.ts +5 -1
  188. package/lib/node/backend-application.d.ts.map +1 -1
  189. package/lib/node/backend-application.js +28 -5
  190. package/lib/node/backend-application.js.map +1 -1
  191. package/lib/node/console-logger-server.d.ts.map +1 -1
  192. package/lib/node/console-logger-server.js +5 -1
  193. package/lib/node/console-logger-server.js.map +1 -1
  194. package/lib/node/i18n/i18n-backend-module.d.ts.map +1 -1
  195. package/lib/node/i18n/i18n-backend-module.js +7 -4
  196. package/lib/node/i18n/i18n-backend-module.js.map +1 -1
  197. package/lib/node/i18n/{localization-backend-contribution.d.ts → localization-server.d.ts} +5 -4
  198. package/lib/node/i18n/localization-server.d.ts.map +1 -0
  199. package/lib/node/i18n/{localization-backend-contribution.js → localization-server.js} +13 -16
  200. package/lib/node/i18n/localization-server.js.map +1 -0
  201. package/lib/node/logger-backend-module.d.ts.map +1 -1
  202. package/lib/node/logger-backend-module.js +6 -1
  203. package/lib/node/logger-backend-module.js.map +1 -1
  204. package/lib/node/logger-cli-contribution.spec.js +1 -1
  205. package/lib/node/logger-cli-contribution.spec.js.map +1 -1
  206. package/lib/node/main.d.ts +2 -5
  207. package/lib/node/main.d.ts.map +1 -1
  208. package/lib/node/main.js.map +1 -1
  209. package/lib/node/os-backend-provider.d.ts +5 -0
  210. package/lib/node/os-backend-provider.d.ts.map +1 -0
  211. package/lib/node/{os-backend-application-contribution.js → os-backend-provider.js} +8 -10
  212. package/lib/node/os-backend-provider.js.map +1 -0
  213. package/lib/node/performance/node-stopwatch.js +1 -1
  214. package/lib/node/performance/node-stopwatch.js.map +1 -1
  215. package/package.json +10 -9
  216. package/src/browser/common-frontend-contribution.ts +108 -17
  217. package/src/browser/context-menu-renderer.ts +5 -0
  218. package/src/browser/label-parser.spec.ts +38 -0
  219. package/src/browser/label-parser.ts +15 -0
  220. package/src/browser/menu/browser-context-menu-renderer.ts +2 -2
  221. package/src/browser/menu/browser-menu-plugin.ts +2 -2
  222. package/src/browser/performance/frontend-stopwatch.ts +5 -2
  223. package/src/browser/preferences/preference-contribution.ts +49 -24
  224. package/src/browser/preload/i18n-preload-contribution.ts +50 -0
  225. package/src/browser/preload/os-preload-contribution.ts +37 -0
  226. package/src/browser/preload/preload-module.ts +45 -0
  227. package/src/browser/preload/preloader.ts +37 -0
  228. package/src/browser/preload/theme-preload-contribution.ts +31 -0
  229. package/src/browser/saveable.ts +41 -2
  230. package/src/browser/shell/application-shell.ts +11 -0
  231. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-registry.ts +94 -8
  232. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar-types.ts +28 -1
  233. package/src/browser/shell/tab-bar-toolbar/tab-bar-toolbar.tsx +87 -8
  234. package/src/browser/shell/tab-bars.ts +8 -1
  235. package/src/browser/style/tabs.css +32 -2
  236. package/src/browser/tree/tree-model.ts +8 -0
  237. package/src/browser/tree/tree-widget.tsx +66 -0
  238. package/src/browser/tree/tree.ts +27 -0
  239. package/src/browser/widgets/enhanced-preview-widget.ts +27 -0
  240. package/src/browser/window-contribution.ts +1 -1
  241. package/src/common/array-utils.ts +20 -0
  242. package/src/common/event.ts +12 -2
  243. package/src/common/i18n/localization-server.ts +25 -0
  244. package/src/common/i18n/nls.metadata.json +6767 -6260
  245. package/src/common/keys.ts +4 -3
  246. package/src/common/logger-protocol.ts +4 -0
  247. package/src/common/logger-watcher.ts +12 -7
  248. package/src/common/logger.ts +5 -0
  249. package/src/common/menu/menu-model-registry.ts +50 -0
  250. package/src/common/os.ts +8 -0
  251. package/src/common/performance/measurement.ts +26 -0
  252. package/src/common/performance/stopwatch.ts +38 -12
  253. package/src/common/promise-util.spec.ts +43 -12
  254. package/src/common/promise-util.ts +12 -0
  255. package/src/common/quick-pick-service.ts +1 -0
  256. package/src/common/types.ts +17 -0
  257. package/src/common/uri.ts +4 -0
  258. package/src/electron-browser/menu/electron-context-menu-renderer.ts +2 -2
  259. package/src/electron-browser/menu/electron-main-menu-factory.ts +2 -2
  260. package/src/electron-browser/menu/electron-menu-contribution.ts +13 -0
  261. package/src/electron-browser/preload.ts +4 -1
  262. package/src/electron-common/electron-api.ts +2 -0
  263. package/src/electron-main/electron-api-main.ts +4 -1
  264. package/src/electron-main/electron-main-application.ts +43 -4
  265. package/src/node/backend-application-module.ts +7 -4
  266. package/src/node/backend-application.ts +30 -5
  267. package/src/node/console-logger-server.ts +5 -2
  268. package/src/node/i18n/i18n-backend-module.ts +9 -4
  269. package/src/node/i18n/{localization-backend-contribution.ts → localization-server.ts} +9 -10
  270. package/src/node/logger-backend-module.ts +8 -1
  271. package/src/node/logger-cli-contribution.spec.ts +1 -1
  272. package/src/node/main.ts +1 -6
  273. package/src/node/{os-backend-application-contribution.ts → os-backend-provider.ts} +4 -9
  274. package/src/node/performance/node-stopwatch.ts +1 -1
  275. package/lib/browser/preloader.d.ts +0 -2
  276. package/lib/browser/preloader.d.ts.map +0 -1
  277. package/lib/browser/preloader.js +0 -75
  278. package/lib/browser/preloader.js.map +0 -1
  279. package/lib/node/i18n/localization-backend-contribution.d.ts.map +0 -1
  280. package/lib/node/i18n/localization-backend-contribution.js.map +0 -1
  281. package/lib/node/os-backend-application-contribution.d.ts +0 -6
  282. package/lib/node/os-backend-application-contribution.d.ts.map +0 -1
  283. package/lib/node/os-backend-application-contribution.js.map +0 -1
  284. package/src/browser/preloader.ts +0 -76
@@ -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) {
@@ -507,6 +543,9 @@ export class ElectronMainApplication {
507
543
  backendProcess.on('error', error => {
508
544
  reject(error);
509
545
  });
546
+ backendProcess.on('exit', () => {
547
+ reject(new Error('backend process exited'));
548
+ });
510
549
  app.on('quit', () => {
511
550
  // Only issue a kill signal if the backend process is running.
512
551
  // eslint-disable-next-line no-null/no-null
@@ -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);
@@ -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 * as dns from 'dns';
17
18
  import * as path from 'path';
18
19
  import * as http from 'http';
19
20
  import * as https from 'https';
@@ -29,6 +30,8 @@ import { AddressInfo } from 'net';
29
30
  import { ApplicationPackage } from '@theia/application-package';
30
31
  import { ProcessUtils } from './process-utils';
31
32
 
33
+ export type DnsResultOrder = 'ipv4first' | 'verbatim' | 'nodeDefault';
34
+
32
35
  const APP_PROJECT_PATH = 'app-project-path';
33
36
 
34
37
  const TIMER_WARNING_THRESHOLD = 50;
@@ -36,6 +39,7 @@ const TIMER_WARNING_THRESHOLD = 50;
36
39
  const DEFAULT_PORT = environment.electron.is() ? 0 : 3000;
37
40
  const DEFAULT_HOST = 'localhost';
38
41
  const DEFAULT_SSL = false;
42
+ const DEFAULT_DNS_DEFAULT_RESULT_ORDER: DnsResultOrder = 'ipv4first';
39
43
 
40
44
  export const BackendApplicationServer = Symbol('BackendApplicationServer');
41
45
  /**
@@ -107,6 +111,7 @@ export class BackendApplicationCliContribution implements CliContribution {
107
111
 
108
112
  port: number;
109
113
  hostname: string | undefined;
114
+ dnsDefaultResultOrder: DnsResultOrder = DEFAULT_DNS_DEFAULT_RESULT_ORDER;
110
115
  ssl: boolean | undefined;
111
116
  cert: string | undefined;
112
117
  certkey: string | undefined;
@@ -119,6 +124,12 @@ export class BackendApplicationCliContribution implements CliContribution {
119
124
  conf.option('cert', { description: 'Path to SSL certificate.', type: 'string' });
120
125
  conf.option('certkey', { description: 'Path to SSL certificate key.', type: 'string' });
121
126
  conf.option(APP_PROJECT_PATH, { description: 'Sets the application project directory', default: this.appProjectPath() });
127
+ conf.option('dnsDefaultResultOrder', {
128
+ type: 'string',
129
+ description: 'Configure Node\'s DNS resolver default behavior, see https://nodejs.org/docs/latest-v18.x/api/dns.html#dnssetdefaultresultorderorder',
130
+ choices: ['ipv4first', 'verbatim', 'nodeDefault'],
131
+ default: DEFAULT_DNS_DEFAULT_RESULT_ORDER
132
+ });
122
133
  }
123
134
 
124
135
  setArguments(args: yargs.Arguments): void {
@@ -128,6 +139,7 @@ export class BackendApplicationCliContribution implements CliContribution {
128
139
  this.cert = args.cert as string;
129
140
  this.certkey = args.certkey as string;
130
141
  this.projectPath = args[APP_PROJECT_PATH] as string;
142
+ this.dnsDefaultResultOrder = args.dnsDefaultResultOrder as DnsResultOrder;
131
143
  }
132
144
 
133
145
  protected appProjectPath(): string {
@@ -234,9 +246,13 @@ export class BackendApplication {
234
246
  this.app.use(...handlers);
235
247
  }
236
248
 
237
- async start(aPort?: number, aHostname?: string): Promise<http.Server | https.Server> {
238
- const hostname = aHostname !== undefined ? aHostname : this.cliParams.hostname;
239
- const port = aPort !== undefined ? aPort : this.cliParams.port;
249
+ async start(port?: number, hostname?: string): Promise<http.Server | https.Server> {
250
+ hostname ??= this.cliParams.hostname;
251
+ port ??= this.cliParams.port;
252
+
253
+ if (this.cliParams.dnsDefaultResultOrder !== 'nodeDefault') {
254
+ dns.setDefaultResultOrder(this.cliParams.dnsDefaultResultOrder);
255
+ }
240
256
 
241
257
  const deferred = new Deferred<http.Server | https.Server>();
242
258
  let server: http.Server | https.Server;
@@ -279,8 +295,10 @@ export class BackendApplication {
279
295
  });
280
296
 
281
297
  server.listen(port, hostname, () => {
282
- const scheme = this.cliParams.ssl ? 'https' : 'http';
283
- console.info(`Theia app listening on ${scheme}://${hostname || 'localhost'}:${(server.address() as AddressInfo).port}.`);
298
+ // address should be defined at this point
299
+ const address = server.address()!;
300
+ const url = typeof address === 'string' ? address : this.getHttpUrl(address, this.cliParams.ssl);
301
+ console.info(`Theia app listening on ${url}.`);
284
302
  deferred.resolve(server);
285
303
  });
286
304
 
@@ -301,6 +319,13 @@ export class BackendApplication {
301
319
  return this.stopwatch.startAsync('server', 'Finished starting backend application', () => deferred.promise);
302
320
  }
303
321
 
322
+ protected getHttpUrl({ address, port, family }: AddressInfo, ssl?: boolean): string {
323
+ const scheme = ssl ? 'https' : 'http';
324
+ return family.toLowerCase() === 'ipv6'
325
+ ? `${scheme}://[${address}]:${port}`
326
+ : `${scheme}://${address}:${port}`;
327
+ }
328
+
304
329
  protected onStop(): void {
305
330
  console.info('>>> Stopping backend contributions...');
306
331
  for (const contrib of this.contributionsProvider.getContributions()) {
@@ -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
  };
@@ -137,7 +137,7 @@ describe('log-level-cli-contribution', () => {
137
137
 
138
138
  const args: yargs.Arguments = yargs.parse(['--log-config', file.path]);
139
139
  await cli.setArguments(args);
140
- sinon.assert.calledWithMatch(consoleErrorSpy, 'Unexpected token { in JSON at position 1');
140
+ sinon.assert.calledWithMatch(consoleErrorSpy, 'Error reading log config file');
141
141
  });
142
142
 
143
143
  // Skip this test because it is flaky, sometimes we don't receive the event.
package/src/node/main.ts CHANGED
@@ -26,12 +26,7 @@ process.on('unhandledRejection', (reason, promise) => {
26
26
  throw reason;
27
27
  });
28
28
 
29
- export interface Address {
30
- readonly port: number;
31
- readonly address: string;
32
- }
33
-
34
- export async function start(serverModule: MaybePromise<http.Server | https.Server>): Promise<Address> {
29
+ export async function start(serverModule: MaybePromise<http.Server | https.Server>): Promise<AddressInfo> {
35
30
  const server = await serverModule;
36
31
  return server.address() as AddressInfo;
37
32
  }
@@ -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
  }
@@ -33,7 +33,7 @@ export class NodeStopwatch extends Stopwatch {
33
33
 
34
34
  return this.createMeasurement(name, () => {
35
35
  const duration = performance.now() - startTime;
36
- return duration;
36
+ return { duration, startTime };
37
37
  }, options);
38
38
  }
39
39
 
@@ -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"}
@@ -1,76 +0,0 @@
1
- // *****************************************************************************
2
- // Copyright (C) 2022 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 { nls } from '../common/nls';
18
- import { Endpoint } from './endpoint';
19
- import { OS } from '../common/os';
20
- import { DEFAULT_BACKGROUND_COLOR_STORAGE_KEY, FrontendApplicationConfigProvider } from './frontend-application-config-provider';
21
- import { Localization } from '../common/i18n/localization';
22
-
23
- function fetchFrom(path: string): Promise<Response> {
24
- const endpoint = new Endpoint({ path }).getRestUrl().toString();
25
- return fetch(endpoint);
26
- }
27
-
28
- async function loadTranslations(): Promise<void> {
29
- const defaultLocale = FrontendApplicationConfigProvider.get().defaultLocale;
30
- if (defaultLocale && !nls.locale) {
31
- Object.assign(nls, {
32
- locale: defaultLocale
33
- });
34
- }
35
- if (nls.locale) {
36
- const response = await fetchFrom(`/i18n/${nls.locale}`);
37
- const localization = await response.json() as Localization;
38
- if (localization.languagePack) {
39
- nls.localization = localization;
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, {
44
- locale: defaultLocale || undefined
45
- });
46
- }
47
- }
48
- }
49
-
50
- async function loadBackendOS(): Promise<void> {
51
- const response = await fetchFrom('/os');
52
- const osType = await response.text() as OS.Type;
53
- const isWindows = osType === 'Windows';
54
- const isOSX = osType === 'OSX';
55
- OS.backend.isOSX = isOSX;
56
- OS.backend.isWindows = isWindows;
57
- OS.backend.type = () => osType;
58
- OS.backend.EOL = isWindows ? '\r\n' : '\n';
59
- }
60
-
61
- function initBackground(): void {
62
- // The default light background color is based on the `colors#editor.background` value from
63
- // `packages/monaco/data/monaco-themes/vscode/dark_vs.json` and the dark background comes from the `light_vs.json`.
64
- const dark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
65
- const value = window.localStorage.getItem(DEFAULT_BACKGROUND_COLOR_STORAGE_KEY) || (dark ? '#1E1E1E' : '#FFFFFF');
66
- const documentElement = document.documentElement;
67
- documentElement.style.setProperty('--theia-editor-background', value);
68
- }
69
-
70
- export async function preload(): Promise<void> {
71
- await Promise.allSettled([
72
- loadTranslations(),
73
- loadBackendOS(),
74
- initBackground(),
75
- ]);
76
- }