@theia/core 1.25.0-next.7 → 1.25.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 (148) hide show
  1. package/README.md +3 -3
  2. package/lib/browser/browser.d.ts +3 -0
  3. package/lib/browser/browser.d.ts.map +1 -1
  4. package/lib/browser/browser.js +51 -1
  5. package/lib/browser/browser.js.map +1 -1
  6. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  7. package/lib/browser/common-frontend-contribution.js +59 -10
  8. package/lib/browser/common-frontend-contribution.js.map +1 -1
  9. package/lib/browser/preferences/preference-validation-service.d.ts +13 -0
  10. package/lib/browser/preferences/preference-validation-service.d.ts.map +1 -1
  11. package/lib/browser/preferences/preference-validation-service.js +92 -7
  12. package/lib/browser/preferences/preference-validation-service.js.map +1 -1
  13. package/lib/browser/preferences/preference-validation-service.spec.js +58 -0
  14. package/lib/browser/preferences/preference-validation-service.spec.js.map +1 -1
  15. package/lib/browser/preloader.d.ts +2 -0
  16. package/lib/browser/preloader.d.ts.map +1 -0
  17. package/lib/browser/{nls-loader.js → preloader.js} +25 -6
  18. package/lib/browser/preloader.js.map +1 -0
  19. package/lib/browser/quick-input/quick-pick-service-impl.d.ts +1 -1
  20. package/lib/browser/quick-input/quick-pick-service-impl.d.ts.map +1 -1
  21. package/lib/browser/quick-input/quick-pick-service-impl.js.map +1 -1
  22. package/lib/browser/resource-context-key.js +2 -3
  23. package/lib/browser/resource-context-key.js.map +1 -1
  24. package/lib/browser/saveable.d.ts +6 -1
  25. package/lib/browser/saveable.d.ts.map +1 -1
  26. package/lib/browser/saveable.js.map +1 -1
  27. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  28. package/lib/browser/shell/application-shell.js +1 -0
  29. package/lib/browser/shell/application-shell.js.map +1 -1
  30. package/lib/browser/status-bar/status-bar.d.ts +2 -0
  31. package/lib/browser/status-bar/status-bar.d.ts.map +1 -1
  32. package/lib/browser/status-bar/status-bar.js +2 -1
  33. package/lib/browser/status-bar/status-bar.js.map +1 -1
  34. package/lib/browser/tree/tree-widget.d.ts +1 -1
  35. package/lib/browser/tree/tree-widget.d.ts.map +1 -1
  36. package/lib/browser/tree/tree-widget.js +18 -7
  37. package/lib/browser/tree/tree-widget.js.map +1 -1
  38. package/lib/browser/widget-decoration.d.ts +11 -0
  39. package/lib/browser/widget-decoration.d.ts.map +1 -1
  40. package/lib/browser/widget-decoration.js +7 -0
  41. package/lib/browser/widget-decoration.js.map +1 -1
  42. package/lib/browser/widgets/select-component.d.ts +52 -0
  43. package/lib/browser/widgets/select-component.d.ts.map +1 -0
  44. package/lib/browser/widgets/select-component.js +287 -0
  45. package/lib/browser/widgets/select-component.js.map +1 -0
  46. package/lib/common/application-protocol.d.ts +3 -0
  47. package/lib/common/application-protocol.d.ts.map +1 -1
  48. package/lib/common/disposable.d.ts +1 -0
  49. package/lib/common/disposable.d.ts.map +1 -1
  50. package/lib/common/disposable.js +12 -4
  51. package/lib/common/disposable.js.map +1 -1
  52. package/lib/common/disposable.spec.d.ts +2 -0
  53. package/lib/common/disposable.spec.d.ts.map +1 -0
  54. package/lib/common/disposable.spec.js +31 -0
  55. package/lib/common/disposable.spec.js.map +1 -0
  56. package/lib/common/i18n/localization.d.ts +7 -5
  57. package/lib/common/i18n/localization.d.ts.map +1 -1
  58. package/lib/common/i18n/localization.js.map +1 -1
  59. package/lib/common/json-schema.d.ts +1 -0
  60. package/lib/common/json-schema.d.ts.map +1 -1
  61. package/lib/common/nls.js +24 -4
  62. package/lib/common/nls.js.map +1 -1
  63. package/lib/common/os.d.ts +5 -0
  64. package/lib/common/os.d.ts.map +1 -1
  65. package/lib/common/os.js +5 -0
  66. package/lib/common/os.js.map +1 -1
  67. package/lib/common/path.d.ts +20 -17
  68. package/lib/common/path.d.ts.map +1 -1
  69. package/lib/common/path.js +37 -0
  70. package/lib/common/path.js.map +1 -1
  71. package/lib/common/path.spec.js +37 -0
  72. package/lib/common/path.spec.js.map +1 -1
  73. package/lib/common/quick-pick-service.d.ts +1 -1
  74. package/lib/common/quick-pick-service.d.ts.map +1 -1
  75. package/lib/common/quick-pick-service.js +0 -15
  76. package/lib/common/quick-pick-service.js.map +1 -1
  77. package/lib/common/selection-service.d.ts +7 -0
  78. package/lib/common/selection-service.d.ts.map +1 -1
  79. package/lib/common/selection-service.js +5 -0
  80. package/lib/common/selection-service.js.map +1 -1
  81. package/lib/common/uri.d.ts +12 -1
  82. package/lib/common/uri.d.ts.map +1 -1
  83. package/lib/common/uri.js +14 -0
  84. package/lib/common/uri.js.map +1 -1
  85. package/lib/electron-browser/menu/electron-menu-contribution.d.ts +1 -0
  86. package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
  87. package/lib/electron-browser/menu/electron-menu-contribution.js +10 -4
  88. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  89. package/lib/electron-common/electron-token.d.ts +3 -3
  90. package/lib/electron-common/electron-token.d.ts.map +1 -1
  91. package/lib/electron-common/electron-token.js +4 -3
  92. package/lib/electron-common/electron-token.js.map +1 -1
  93. package/lib/node/backend-application-module.d.ts.map +1 -1
  94. package/lib/node/backend-application-module.js +3 -0
  95. package/lib/node/backend-application-module.js.map +1 -1
  96. package/lib/node/i18n/localization-backend-contribution.js +1 -1
  97. package/lib/node/i18n/localization-backend-contribution.js.map +1 -1
  98. package/lib/node/i18n/localization-contribution.d.ts +4 -3
  99. package/lib/node/i18n/localization-contribution.d.ts.map +1 -1
  100. package/lib/node/i18n/localization-contribution.js +15 -10
  101. package/lib/node/i18n/localization-contribution.js.map +1 -1
  102. package/lib/node/i18n/localization-provider.d.ts +2 -2
  103. package/lib/node/i18n/localization-provider.d.ts.map +1 -1
  104. package/lib/node/i18n/localization-provider.js +9 -4
  105. package/lib/node/i18n/localization-provider.js.map +1 -1
  106. package/lib/node/os-backend-application-contribution.d.ts +6 -0
  107. package/lib/node/os-backend-application-contribution.d.ts.map +1 -0
  108. package/lib/node/os-backend-application-contribution.js +38 -0
  109. package/lib/node/os-backend-application-contribution.js.map +1 -0
  110. package/package.json +5 -5
  111. package/src/browser/browser.ts +62 -0
  112. package/src/browser/common-frontend-contribution.ts +68 -10
  113. package/src/browser/preferences/preference-validation-service.spec.ts +59 -0
  114. package/src/browser/preferences/preference-validation-service.ts +85 -8
  115. package/src/browser/{nls-loader.ts → preloader.ts} +26 -4
  116. package/src/browser/quick-input/quick-pick-service-impl.ts +2 -2
  117. package/src/browser/resource-context-key.ts +2 -2
  118. package/src/browser/saveable.ts +3 -1
  119. package/src/browser/shell/application-shell.ts +1 -0
  120. package/src/browser/status-bar/status-bar.tsx +4 -1
  121. package/src/browser/style/select-component.css +96 -0
  122. package/src/browser/style/tree.css +6 -0
  123. package/src/browser/style/view-container.css +2 -2
  124. package/src/browser/tree/tree-widget.tsx +21 -9
  125. package/src/browser/widget-decoration.ts +14 -0
  126. package/src/browser/widgets/select-component.tsx +340 -0
  127. package/src/common/application-protocol.ts +3 -0
  128. package/src/common/disposable.spec.ts +30 -0
  129. package/src/common/disposable.ts +15 -4
  130. package/src/common/i18n/localization.ts +6 -3
  131. package/src/common/json-schema.ts +1 -0
  132. package/src/common/nls.ts +25 -4
  133. package/src/common/os.ts +6 -0
  134. package/src/common/path.spec.ts +44 -0
  135. package/src/common/path.ts +40 -0
  136. package/src/common/quick-pick-service.ts +1 -17
  137. package/src/common/selection-service.ts +8 -2
  138. package/src/common/uri.ts +26 -1
  139. package/src/electron-browser/menu/electron-menu-contribution.ts +11 -4
  140. package/src/electron-common/electron-token.ts +4 -3
  141. package/src/node/backend-application-module.ts +4 -0
  142. package/src/node/i18n/localization-backend-contribution.ts +1 -1
  143. package/src/node/i18n/localization-contribution.ts +21 -13
  144. package/src/node/i18n/localization-provider.ts +12 -7
  145. package/src/node/os-backend-application-contribution.ts +30 -0
  146. package/lib/browser/nls-loader.d.ts +0 -2
  147. package/lib/browser/nls-loader.d.ts.map +0 -1
  148. package/lib/browser/nls-loader.js.map +0 -1
package/src/common/uri.ts CHANGED
@@ -17,7 +17,11 @@
17
17
  import { URI as Uri } from 'vscode-uri';
18
18
  import { Path } from './path';
19
19
 
20
- export default class URI {
20
+ export class URI {
21
+
22
+ public static fromComponents(components: UriComponents): URI {
23
+ return new URI(Uri.revive(components));
24
+ }
21
25
 
22
26
  private readonly codeUri: Uri;
23
27
  private _path: Path | undefined;
@@ -245,4 +249,25 @@ export default class URI {
245
249
  private hasSameOrigin(uri: URI): boolean {
246
250
  return (this.authority === uri.authority) && (this.scheme === uri.scheme);
247
251
  }
252
+
253
+ toComponents(): UriComponents {
254
+ return {
255
+ scheme: this.scheme,
256
+ authority: this.authority,
257
+ path: this.path.toString(),
258
+ query: this.query,
259
+ fragment: this.fragment
260
+ };
261
+ }
248
262
  }
263
+
264
+ export interface UriComponents {
265
+ scheme: string;
266
+ authority: string;
267
+ path: string;
268
+ query: string;
269
+ fragment: string;
270
+ external?: string;
271
+ }
272
+
273
+ export default URI;
@@ -101,10 +101,7 @@ export class ElectronMenuContribution extends BrowserMenuBarContribution impleme
101
101
  override onStart(app: FrontendApplication): void {
102
102
  this.handleTitleBarStyling(app);
103
103
  if (isOSX) {
104
- // OSX: Recreate the menus when changing windows.
105
- // OSX only has one menu bar for all windows, so we need to swap
106
- // between them as the user switches windows.
107
- electronRemote.getCurrentWindow().on('focus', () => this.setMenu(app));
104
+ this.attachWindowFocusListener(app);
108
105
  }
109
106
  // Make sure the application menu is complete, once the frontend application is ready.
110
107
  // https://github.com/theia-ide/theia/issues/5100
@@ -125,6 +122,16 @@ export class ElectronMenuContribution extends BrowserMenuBarContribution impleme
125
122
  });
126
123
  }
127
124
 
125
+ protected attachWindowFocusListener(app: FrontendApplication): void {
126
+ // OSX: Recreate the menus when changing windows.
127
+ // OSX only has one menu bar for all windows, so we need to swap
128
+ // between them as the user switches windows.
129
+ const targetWindow = electronRemote.getCurrentWindow();
130
+ const callback = () => this.setMenu(app);
131
+ targetWindow.on('focus', callback);
132
+ window.addEventListener('unload', () => targetWindow.off('focus', callback));
133
+ }
134
+
128
135
  handleTitleBarStyling(app: FrontendApplication): void {
129
136
  this.hideTopPanel(app);
130
137
  electron.ipcRenderer.on(TitleBarStyleAtStartup, (_event, style: string) => {
@@ -15,12 +15,13 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  /**
18
- * This token is unique the the current running instance. It is used by the backend
18
+ * This token is unique to the current running instance. It is used by the backend
19
19
  * to make sure it is an electron browser window that is connecting to its services.
20
20
  *
21
- * The identifier is a string, which makes it usable as a key for cookies or similar.
21
+ * The identifier is a string, which makes it usable as a key for cookies, environments, etc.
22
22
  */
23
- export const ElectronSecurityToken = 'x-theia-electron-token';
23
+ // Note that it needs to be uppercase for it to work properly in Windows environments.
24
+ export const ElectronSecurityToken: string = 'THEIA_ELECTRON_TOKEN';
24
25
  export interface ElectronSecurityToken {
25
26
  value: string;
26
27
  };
@@ -36,6 +36,7 @@ import { ContributionFilterRegistry, ContributionFilterRegistryImpl } from '../c
36
36
  import { EnvironmentUtils } from './environment-utils';
37
37
  import { ProcessUtils } from './process-utils';
38
38
  import { bindNodeStopwatch, bindBackendStopwatchServer } from './performance';
39
+ import { OSBackendApplicationContribution } from './os-backend-application-contribution';
39
40
 
40
41
  decorate(injectable(), ApplicationPackage);
41
42
 
@@ -111,6 +112,9 @@ export const backendApplicationModule = new ContainerModule(bind => {
111
112
  bind(EnvironmentUtils).toSelf().inSingletonScope();
112
113
  bind(ProcessUtils).toSelf().inSingletonScope();
113
114
 
115
+ bind(OSBackendApplicationContribution).toSelf().inSingletonScope();
116
+ bind(BackendApplicationContribution).toService(OSBackendApplicationContribution);
117
+
114
118
  bindNodeStopwatch(bind);
115
119
  bindBackendStopwatchServer(bind);
116
120
  });
@@ -36,7 +36,7 @@ export class LocalizationBackendContribution implements BackendApplicationContri
36
36
  configure(app: express.Application): void {
37
37
  app.get('/i18n/:locale', (req, res) => {
38
38
  let locale = req.params.locale;
39
- locale = this.localizationProvider.getAvailableLanguages().includes(locale) && locale || 'en';
39
+ locale = this.localizationProvider.getAvailableLanguages().some(e => e.languageId === locale) ? locale : 'en';
40
40
  this.localizationProvider.setCurrentLanguage(locale);
41
41
  res.send(this.localizationProvider.loadLocalization(locale));
42
42
  });
@@ -17,7 +17,7 @@
17
17
  import * as fs from 'fs-extra';
18
18
  import { inject, injectable, named } from 'inversify';
19
19
  import { ContributionProvider } from '../../common';
20
- import { Localization } from '../../common/i18n/localization';
20
+ import { LanguageInfo, Localization } from '../../common/i18n/localization';
21
21
  import { LocalizationProvider } from './localization-provider';
22
22
 
23
23
  export const LocalizationContribution = Symbol('LocalizationContribution');
@@ -45,16 +45,12 @@ export class LocalizationRegistry {
45
45
  this.localizationProvider.addLocalizations(localization);
46
46
  }
47
47
 
48
- registerLocalizationFromRequire(locale: string, required: unknown): void {
48
+ registerLocalizationFromRequire(locale: string | LanguageInfo, required: unknown): void {
49
49
  const translations = this.flattenTranslations(required);
50
- const localization: Localization = {
51
- languageId: locale,
52
- translations
53
- };
54
- this.registerLocalization(localization);
50
+ this.registerLocalization(this.createLocalization(locale, translations));
55
51
  }
56
52
 
57
- async registerLocalizationFromFile(localizationPath: string, locale?: string): Promise<void> {
53
+ async registerLocalizationFromFile(localizationPath: string, locale?: string | LanguageInfo): Promise<void> {
58
54
  if (!locale) {
59
55
  locale = this.identifyLocale(localizationPath);
60
56
  }
@@ -63,11 +59,23 @@ export class LocalizationRegistry {
63
59
  }
64
60
  const translationJson = await fs.readJson(localizationPath);
65
61
  const translations = this.flattenTranslations(translationJson);
66
- const localization: Localization = {
67
- languageId: locale,
68
- translations
69
- };
70
- this.registerLocalization(localization);
62
+ this.registerLocalization(this.createLocalization(locale, translations));
63
+ }
64
+
65
+ protected createLocalization(locale: string | LanguageInfo, translations: Record<string, string>): Localization {
66
+ let localization: Localization;
67
+ if (typeof locale === 'string') {
68
+ localization = {
69
+ languageId: locale,
70
+ translations
71
+ };
72
+ } else {
73
+ localization = {
74
+ ...locale,
75
+ translations
76
+ };
77
+ }
78
+ return localization;
71
79
  }
72
80
 
73
81
  protected flattenTranslations(localization: unknown): Record<string, string> {
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { injectable } from 'inversify';
18
- import { Localization } from '../../common/i18n/localization';
18
+ import { LanguageInfo, Localization } from '../../common/i18n/localization';
19
19
 
20
20
  @injectable()
21
21
  export class LocalizationProvider {
@@ -29,11 +29,11 @@ export class LocalizationProvider {
29
29
  if (!merged) {
30
30
  this.localizations.set(localization.languageId, merged = {
31
31
  languageId: localization.languageId,
32
- languageName: localization.languageName,
33
- localizedLanguageName: localization.localizedLanguageName,
34
32
  translations: {}
35
33
  });
36
34
  }
35
+ merged.languageName = merged.languageName || localization.languageName;
36
+ merged.localizedLanguageName = merged.localizedLanguageName || localization.localizedLanguageName;
37
37
  merged.languagePack = merged.languagePack || localization.languagePack;
38
38
  Object.assign(merged.translations, localization.translations);
39
39
  }
@@ -47,14 +47,19 @@ export class LocalizationProvider {
47
47
  return this.currentLanguage;
48
48
  }
49
49
 
50
- getAvailableLanguages(all?: boolean): string[] {
51
- const languageIds: string[] = [];
50
+ getAvailableLanguages(all?: boolean): LanguageInfo[] {
51
+ const languageIds: LanguageInfo[] = [];
52
52
  for (const localization of this.localizations.values()) {
53
53
  if (all || localization.languagePack) {
54
- languageIds.push(localization.languageId);
54
+ languageIds.push({
55
+ languageId: localization.languageId,
56
+ languageName: localization.languageName,
57
+ languagePack: localization.languagePack,
58
+ localizedLanguageName: localization.localizedLanguageName
59
+ });
55
60
  }
56
61
  }
57
- return languageIds.sort((a, b) => a.localeCompare(b));
62
+ return languageIds.sort((a, b) => a.languageId.localeCompare(b.languageId));
58
63
  }
59
64
 
60
65
  loadLocalization(languageId: string): Localization {
@@ -0,0 +1,30 @@
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 WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import * as express from 'express';
18
+ import { injectable } from 'inversify';
19
+ import { BackendApplicationContribution } from './backend-application';
20
+ import { OS } from '../common/os';
21
+
22
+ @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
+ });
29
+ }
30
+ }
@@ -1,2 +0,0 @@
1
- export declare function loadTranslations(): Promise<void>;
2
- //# sourceMappingURL=nls-loader.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nls-loader.d.ts","sourceRoot":"","sources":["../../src/browser/nls-loader.ts"],"names":[],"mappings":"AAoBA,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAYtD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"nls-loader.js","sourceRoot":"","sources":["../../src/browser/nls-loader.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,2EAA2E;AAC3E,gFAAgF;;;AAEhF,uCAAoC;AACpC,yCAAsC;AACtC,iGAA2F;AAEpF,KAAK,UAAU,gBAAgB;IAClC,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,IAAI,mBAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,GAAG,SAAG,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,CAAC;QACvF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvC,SAAG,CAAC,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;KAC5C;AACL,CAAC;AAZD,4CAYC"}