@theia/vsx-registry 1.27.0-next.49 → 1.27.0-next.52
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.
- package/lib/browser/vsx-language-quick-pick-service.d.ts +14 -0
- package/lib/browser/vsx-language-quick-pick-service.d.ts.map +1 -0
- package/lib/browser/vsx-language-quick-pick-service.js +104 -0
- package/lib/browser/vsx-language-quick-pick-service.js.map +1 -0
- package/lib/browser/vsx-registry-frontend-module.d.ts.map +1 -1
- package/lib/browser/vsx-registry-frontend-module.js +4 -1
- package/lib/browser/vsx-registry-frontend-module.js.map +1 -1
- package/package.json +9 -9
- package/src/browser/vsx-language-quick-pick-service.ts +97 -0
- package/src/browser/vsx-registry-frontend-module.ts +5 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { LanguageQuickPickItem, LanguageQuickPickService } from '@theia/core/lib/browser/i18n/language-quick-pick-service';
|
|
2
|
+
import { RequestService } from '@theia/core/shared/@theia/request';
|
|
3
|
+
import { LanguageInfo } from '@theia/core/lib/common/i18n/localization';
|
|
4
|
+
import { PluginServer } from '@theia/plugin-ext';
|
|
5
|
+
import { OVSXClientProvider } from '../common/ovsx-client-provider';
|
|
6
|
+
import { VSXSearchEntry } from '@theia/ovsx-client';
|
|
7
|
+
export declare class VSXLanguageQuickPickService extends LanguageQuickPickService {
|
|
8
|
+
protected readonly clientProvider: OVSXClientProvider;
|
|
9
|
+
protected readonly requestService: RequestService;
|
|
10
|
+
protected readonly pluginServer: PluginServer;
|
|
11
|
+
protected getAvailableLanguages(): Promise<LanguageQuickPickItem[]>;
|
|
12
|
+
protected loadExtensionLanguages(extension: VSXSearchEntry): Promise<LanguageInfo[]>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=vsx-language-quick-pick-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vsx-language-quick-pick-service.d.ts","sourceRoot":"","sources":["../../src/browser/vsx-language-quick-pick-service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,0DAA0D,CAAC;AAC3H,OAAO,EAAkB,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnF,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,qBACa,2BAA4B,SAAQ,wBAAwB;IAGrE,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,kBAAkB,CAAC;IAGtD,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IAGlD,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;cAErB,qBAAqB,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC;cAqClE,sBAAsB,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;CAsB7F"}
|
|
@@ -0,0 +1,104 @@
|
|
|
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 WITH Classpath-exception-2.0
|
|
16
|
+
// *****************************************************************************
|
|
17
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
18
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
19
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
20
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
21
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
22
|
+
};
|
|
23
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
24
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
25
|
+
};
|
|
26
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
+
exports.VSXLanguageQuickPickService = void 0;
|
|
28
|
+
const language_quick_pick_service_1 = require("@theia/core/lib/browser/i18n/language-quick-pick-service");
|
|
29
|
+
const request_1 = require("@theia/core/shared/@theia/request");
|
|
30
|
+
const inversify_1 = require("@theia/core/shared/inversify");
|
|
31
|
+
const plugin_ext_1 = require("@theia/plugin-ext");
|
|
32
|
+
const ovsx_client_provider_1 = require("../common/ovsx-client-provider");
|
|
33
|
+
const plugin_vscode_uri_1 = require("@theia/plugin-ext-vscode/lib/common/plugin-vscode-uri");
|
|
34
|
+
let VSXLanguageQuickPickService = class VSXLanguageQuickPickService extends language_quick_pick_service_1.LanguageQuickPickService {
|
|
35
|
+
async getAvailableLanguages() {
|
|
36
|
+
const client = await this.clientProvider();
|
|
37
|
+
const searchResult = await client.search({
|
|
38
|
+
category: 'Language Packs',
|
|
39
|
+
sortBy: 'downloadCount',
|
|
40
|
+
sortOrder: 'desc',
|
|
41
|
+
size: 20
|
|
42
|
+
});
|
|
43
|
+
if (searchResult.error) {
|
|
44
|
+
throw new Error('Error while loading available languages: ' + searchResult.error);
|
|
45
|
+
}
|
|
46
|
+
const extensionLanguages = await Promise.all(searchResult.extensions.map(async (extension) => ({
|
|
47
|
+
extension,
|
|
48
|
+
languages: await this.loadExtensionLanguages(extension)
|
|
49
|
+
})));
|
|
50
|
+
const languages = new Map();
|
|
51
|
+
for (const extension of extensionLanguages) {
|
|
52
|
+
for (const localizationContribution of extension.languages) {
|
|
53
|
+
if (!languages.has(localizationContribution.languageId)) {
|
|
54
|
+
languages.set(localizationContribution.languageId, Object.assign(Object.assign({}, this.createLanguageQuickPickItem(localizationContribution)), { execute: async () => {
|
|
55
|
+
const extensionUri = plugin_vscode_uri_1.VSCodeExtensionUri.toUri(extension.extension.name, extension.extension.namespace).toString();
|
|
56
|
+
await this.pluginServer.deploy(extensionUri);
|
|
57
|
+
} }));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return Array.from(languages.values());
|
|
62
|
+
}
|
|
63
|
+
async loadExtensionLanguages(extension) {
|
|
64
|
+
var _a, _b;
|
|
65
|
+
// When searching for extensions on ovsx, we don't receive the `manifest` property.
|
|
66
|
+
// This property is only set when querying a specific extension.
|
|
67
|
+
// To improve performance, we assume that a manifest exists at `/package.json`.
|
|
68
|
+
const downloadUrl = extension.files.download;
|
|
69
|
+
const parentUrl = downloadUrl.substring(0, downloadUrl.lastIndexOf('/'));
|
|
70
|
+
const manifestUrl = parentUrl + '/package.json';
|
|
71
|
+
try {
|
|
72
|
+
const manifestRequest = await this.requestService.request({ url: manifestUrl });
|
|
73
|
+
const manifestContent = request_1.RequestContext.asJson(manifestRequest);
|
|
74
|
+
const localizations = (_b = (_a = manifestContent.contributes) === null || _a === void 0 ? void 0 : _a.localizations) !== null && _b !== void 0 ? _b : [];
|
|
75
|
+
return localizations.map(e => ({
|
|
76
|
+
languageId: e.languageId,
|
|
77
|
+
languageName: e.languageName,
|
|
78
|
+
localizedLanguageName: e.localizedLanguageName,
|
|
79
|
+
languagePack: true
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
catch (_c) {
|
|
83
|
+
// The `package.json` file might not actually exist, simply return an empty array
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
__decorate([
|
|
89
|
+
(0, inversify_1.inject)(ovsx_client_provider_1.OVSXClientProvider),
|
|
90
|
+
__metadata("design:type", Function)
|
|
91
|
+
], VSXLanguageQuickPickService.prototype, "clientProvider", void 0);
|
|
92
|
+
__decorate([
|
|
93
|
+
(0, inversify_1.inject)(request_1.RequestService),
|
|
94
|
+
__metadata("design:type", Object)
|
|
95
|
+
], VSXLanguageQuickPickService.prototype, "requestService", void 0);
|
|
96
|
+
__decorate([
|
|
97
|
+
(0, inversify_1.inject)(plugin_ext_1.PluginServer),
|
|
98
|
+
__metadata("design:type", Object)
|
|
99
|
+
], VSXLanguageQuickPickService.prototype, "pluginServer", void 0);
|
|
100
|
+
VSXLanguageQuickPickService = __decorate([
|
|
101
|
+
(0, inversify_1.injectable)()
|
|
102
|
+
], VSXLanguageQuickPickService);
|
|
103
|
+
exports.VSXLanguageQuickPickService = VSXLanguageQuickPickService;
|
|
104
|
+
//# sourceMappingURL=vsx-language-quick-pick-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vsx-language-quick-pick-service.js","sourceRoot":"","sources":["../../src/browser/vsx-language-quick-pick-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vsx-registry-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/vsx-registry-frontend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,mCAAmC,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;
|
|
1
|
+
{"version":3,"file":"vsx-registry-frontend-module.d.ts","sourceRoot":"","sources":["../../src/browser/vsx-registry-frontend-module.ts"],"names":[],"mappings":"AAgBA,OAAO,mCAAmC,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;;AAuB/D,wBAuEG"}
|
|
@@ -34,7 +34,9 @@ const preference_provider_overrides_1 = require("./recommended-extensions/prefer
|
|
|
34
34
|
const ovsx_client_provider_1 = require("../common/ovsx-client-provider");
|
|
35
35
|
const vsx_environment_1 = require("../common/vsx-environment");
|
|
36
36
|
const request_1 = require("@theia/core/shared/@theia/request");
|
|
37
|
-
|
|
37
|
+
const language_quick_pick_service_1 = require("@theia/core/lib/browser/i18n/language-quick-pick-service");
|
|
38
|
+
const vsx_language_quick_pick_service_1 = require("./vsx-language-quick-pick-service");
|
|
39
|
+
exports.default = new inversify_1.ContainerModule((bind, unbind, _, rebind) => {
|
|
38
40
|
bind(ovsx_client_provider_1.OVSXClientProvider).toDynamicValue(ctx => {
|
|
39
41
|
const clientPromise = (0, ovsx_client_provider_1.createOVSXClient)(ctx.container.get(vsx_environment_1.VSXEnvironment), ctx.container.get(request_1.RequestService));
|
|
40
42
|
return () => clientPromise;
|
|
@@ -90,6 +92,7 @@ exports.default = new inversify_1.ContainerModule((bind, unbind) => {
|
|
|
90
92
|
})).inSingletonScope();
|
|
91
93
|
bind(vsx_extensions_search_model_1.VSXExtensionsSearchModel).toSelf().inSingletonScope();
|
|
92
94
|
bind(vsx_extensions_search_bar_1.VSXExtensionsSearchBar).toSelf().inSingletonScope();
|
|
95
|
+
rebind(language_quick_pick_service_1.LanguageQuickPickService).to(vsx_language_quick_pick_service_1.VSXLanguageQuickPickService).inSingletonScope();
|
|
93
96
|
(0, browser_1.bindViewContribution)(bind, vsx_extensions_contribution_1.VSXExtensionsContribution);
|
|
94
97
|
bind(browser_1.FrontendApplicationContribution).toService(vsx_extensions_contribution_1.VSXExtensionsContribution);
|
|
95
98
|
bind(color_application_contribution_1.ColorContribution).toService(vsx_extensions_contribution_1.VSXExtensionsContribution);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vsx-registry-frontend-module.js","sourceRoot":"","sources":["../../src/browser/vsx-registry-frontend-module.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,6CAA2C;AAE3C,4DAA+D;AAC/D,qDAEiC;AACjC,mFAA6E;AAC7E,+EAA0E;AAC1E,2EAAqE;AACrE,iEAA4D;AAC5D,2GAA2F;AAC3F,mEAA0F;AAC1F,mDAAyF;AACzF,iEAA4D;AAC5D,iFAA2E;AAC3E,mEAAqE;AACrE,+EAAyE;AACzE,4IAAmH;AACnH,0GAAyG;AACzG,yEAAsF;AACtF,+DAAiF;AACjF,+DAAmE;
|
|
1
|
+
{"version":3,"file":"vsx-registry-frontend-module.js","sourceRoot":"","sources":["../../src/browser/vsx-registry-frontend-module.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/vsx-registry",
|
|
3
|
-
"version": "1.27.0-next.
|
|
3
|
+
"version": "1.27.0-next.52+ce012845316",
|
|
4
4
|
"description": "Theia - VSX Registry",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/core": "1.27.0-next.
|
|
7
|
-
"@theia/filesystem": "1.27.0-next.
|
|
8
|
-
"@theia/ovsx-client": "1.27.0-next.
|
|
9
|
-
"@theia/plugin-ext": "1.27.0-next.
|
|
10
|
-
"@theia/plugin-ext-vscode": "1.27.0-next.
|
|
11
|
-
"@theia/preferences": "1.27.0-next.
|
|
12
|
-
"@theia/workspace": "1.27.0-next.
|
|
6
|
+
"@theia/core": "1.27.0-next.52+ce012845316",
|
|
7
|
+
"@theia/filesystem": "1.27.0-next.52+ce012845316",
|
|
8
|
+
"@theia/ovsx-client": "1.27.0-next.52+ce012845316",
|
|
9
|
+
"@theia/plugin-ext": "1.27.0-next.52+ce012845316",
|
|
10
|
+
"@theia/plugin-ext-vscode": "1.27.0-next.52+ce012845316",
|
|
11
|
+
"@theia/preferences": "1.27.0-next.52+ce012845316",
|
|
12
|
+
"@theia/workspace": "1.27.0-next.52+ce012845316",
|
|
13
13
|
"p-debounce": "^2.1.0",
|
|
14
14
|
"semver": "^5.4.1",
|
|
15
15
|
"uuid": "^8.0.0"
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"nyc": {
|
|
54
54
|
"extends": "../../configs/nyc.json"
|
|
55
55
|
},
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "ce0128453165d9a9493a7a958fcfaa4b0a2c6e9e"
|
|
57
57
|
}
|
|
@@ -0,0 +1,97 @@
|
|
|
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 { LanguageQuickPickItem, LanguageQuickPickService } from '@theia/core/lib/browser/i18n/language-quick-pick-service';
|
|
18
|
+
import { RequestContext, RequestService } from '@theia/core/shared/@theia/request';
|
|
19
|
+
import { inject, injectable } from '@theia/core/shared/inversify';
|
|
20
|
+
import { LanguageInfo } from '@theia/core/lib/common/i18n/localization';
|
|
21
|
+
import { PluginPackage, PluginServer } from '@theia/plugin-ext';
|
|
22
|
+
import { OVSXClientProvider } from '../common/ovsx-client-provider';
|
|
23
|
+
import { VSXSearchEntry } from '@theia/ovsx-client';
|
|
24
|
+
import { VSCodeExtensionUri } from '@theia/plugin-ext-vscode/lib/common/plugin-vscode-uri';
|
|
25
|
+
|
|
26
|
+
@injectable()
|
|
27
|
+
export class VSXLanguageQuickPickService extends LanguageQuickPickService {
|
|
28
|
+
|
|
29
|
+
@inject(OVSXClientProvider)
|
|
30
|
+
protected readonly clientProvider: OVSXClientProvider;
|
|
31
|
+
|
|
32
|
+
@inject(RequestService)
|
|
33
|
+
protected readonly requestService: RequestService;
|
|
34
|
+
|
|
35
|
+
@inject(PluginServer)
|
|
36
|
+
protected readonly pluginServer: PluginServer;
|
|
37
|
+
|
|
38
|
+
protected override async getAvailableLanguages(): Promise<LanguageQuickPickItem[]> {
|
|
39
|
+
const client = await this.clientProvider();
|
|
40
|
+
const searchResult = await client.search({
|
|
41
|
+
category: 'Language Packs',
|
|
42
|
+
sortBy: 'downloadCount',
|
|
43
|
+
sortOrder: 'desc',
|
|
44
|
+
size: 20
|
|
45
|
+
});
|
|
46
|
+
if (searchResult.error) {
|
|
47
|
+
throw new Error('Error while loading available languages: ' + searchResult.error);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const extensionLanguages = await Promise.all(
|
|
51
|
+
searchResult.extensions.map(async extension => ({
|
|
52
|
+
extension,
|
|
53
|
+
languages: await this.loadExtensionLanguages(extension)
|
|
54
|
+
}))
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
const languages = new Map<string, LanguageQuickPickItem>();
|
|
58
|
+
|
|
59
|
+
for (const extension of extensionLanguages) {
|
|
60
|
+
for (const localizationContribution of extension.languages) {
|
|
61
|
+
if (!languages.has(localizationContribution.languageId)) {
|
|
62
|
+
languages.set(localizationContribution.languageId, {
|
|
63
|
+
...this.createLanguageQuickPickItem(localizationContribution),
|
|
64
|
+
execute: async () => {
|
|
65
|
+
const extensionUri = VSCodeExtensionUri.toUri(extension.extension.name, extension.extension.namespace).toString();
|
|
66
|
+
await this.pluginServer.deploy(extensionUri);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return Array.from(languages.values());
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
protected async loadExtensionLanguages(extension: VSXSearchEntry): Promise<LanguageInfo[]> {
|
|
76
|
+
// When searching for extensions on ovsx, we don't receive the `manifest` property.
|
|
77
|
+
// This property is only set when querying a specific extension.
|
|
78
|
+
// To improve performance, we assume that a manifest exists at `/package.json`.
|
|
79
|
+
const downloadUrl = extension.files.download;
|
|
80
|
+
const parentUrl = downloadUrl.substring(0, downloadUrl.lastIndexOf('/'));
|
|
81
|
+
const manifestUrl = parentUrl + '/package.json';
|
|
82
|
+
try {
|
|
83
|
+
const manifestRequest = await this.requestService.request({ url: manifestUrl });
|
|
84
|
+
const manifestContent = RequestContext.asJson<PluginPackage>(manifestRequest);
|
|
85
|
+
const localizations = manifestContent.contributes?.localizations ?? [];
|
|
86
|
+
return localizations.map(e => ({
|
|
87
|
+
languageId: e.languageId,
|
|
88
|
+
languageName: e.languageName,
|
|
89
|
+
localizedLanguageName: e.localizedLanguageName,
|
|
90
|
+
languagePack: true
|
|
91
|
+
}));
|
|
92
|
+
} catch {
|
|
93
|
+
// The `package.json` file might not actually exist, simply return an empty array
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -36,8 +36,10 @@ import { bindPreferenceProviderOverrides } from './recommended-extensions/prefer
|
|
|
36
36
|
import { OVSXClientProvider, createOVSXClient } from '../common/ovsx-client-provider';
|
|
37
37
|
import { VSXEnvironment, VSX_ENVIRONMENT_PATH } from '../common/vsx-environment';
|
|
38
38
|
import { RequestService } from '@theia/core/shared/@theia/request';
|
|
39
|
+
import { LanguageQuickPickService } from '@theia/core/lib/browser/i18n/language-quick-pick-service';
|
|
40
|
+
import { VSXLanguageQuickPickService } from './vsx-language-quick-pick-service';
|
|
39
41
|
|
|
40
|
-
export default new ContainerModule((bind, unbind) => {
|
|
42
|
+
export default new ContainerModule((bind, unbind, _, rebind) => {
|
|
41
43
|
bind<OVSXClientProvider>(OVSXClientProvider).toDynamicValue(ctx => {
|
|
42
44
|
const clientPromise = createOVSXClient(ctx.container.get(VSXEnvironment), ctx.container.get(RequestService));
|
|
43
45
|
return () => clientPromise;
|
|
@@ -100,6 +102,8 @@ export default new ContainerModule((bind, unbind) => {
|
|
|
100
102
|
bind(VSXExtensionsSearchModel).toSelf().inSingletonScope();
|
|
101
103
|
bind(VSXExtensionsSearchBar).toSelf().inSingletonScope();
|
|
102
104
|
|
|
105
|
+
rebind(LanguageQuickPickService).to(VSXLanguageQuickPickService).inSingletonScope();
|
|
106
|
+
|
|
103
107
|
bindViewContribution(bind, VSXExtensionsContribution);
|
|
104
108
|
bind(FrontendApplicationContribution).toService(VSXExtensionsContribution);
|
|
105
109
|
bind(ColorContribution).toService(VSXExtensionsContribution);
|