@theia/ovsx-client 1.67.0-next.56 → 1.67.0-next.59

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 (53) hide show
  1. package/lib/index.d.ts +7 -0
  2. package/lib/index.d.ts.map +1 -0
  3. package/lib/index.js +33 -0
  4. package/lib/index.js.map +1 -0
  5. package/lib/ovsx-api-filter.d.ts +37 -0
  6. package/lib/ovsx-api-filter.d.ts.map +1 -0
  7. package/lib/ovsx-api-filter.js +117 -0
  8. package/lib/ovsx-api-filter.js.map +1 -0
  9. package/lib/ovsx-http-client.d.ts +21 -0
  10. package/lib/ovsx-http-client.d.ts.map +1 -0
  11. package/lib/ovsx-http-client.js +84 -0
  12. package/lib/ovsx-http-client.js.map +1 -0
  13. package/lib/ovsx-router-client.d.ts +69 -0
  14. package/lib/ovsx-router-client.d.ts.map +1 -0
  15. package/lib/ovsx-router-client.js +175 -0
  16. package/lib/ovsx-router-client.js.map +1 -0
  17. package/lib/ovsx-router-client.spec.d.ts +2 -0
  18. package/lib/ovsx-router-client.spec.d.ts.map +1 -0
  19. package/lib/ovsx-router-client.spec.js +108 -0
  20. package/lib/ovsx-router-client.spec.js.map +1 -0
  21. package/lib/ovsx-router-filters/abstract-reg-exp-filter.d.ts +6 -0
  22. package/lib/ovsx-router-filters/abstract-reg-exp-filter.d.ts.map +1 -0
  23. package/lib/ovsx-router-filters/abstract-reg-exp-filter.js +28 -0
  24. package/lib/ovsx-router-filters/abstract-reg-exp-filter.js.map +1 -0
  25. package/lib/ovsx-router-filters/extension-id-matches-filter.d.ts +8 -0
  26. package/lib/ovsx-router-filters/extension-id-matches-filter.d.ts.map +1 -0
  27. package/lib/ovsx-router-filters/extension-id-matches-filter.js +34 -0
  28. package/lib/ovsx-router-filters/extension-id-matches-filter.js.map +1 -0
  29. package/lib/ovsx-router-filters/index.d.ts +3 -0
  30. package/lib/ovsx-router-filters/index.d.ts.map +1 -0
  31. package/lib/ovsx-router-filters/index.js +23 -0
  32. package/lib/ovsx-router-filters/index.js.map +1 -0
  33. package/lib/ovsx-router-filters/request-contains-filter.d.ts +9 -0
  34. package/lib/ovsx-router-filters/request-contains-filter.d.ts.map +1 -0
  35. package/lib/ovsx-router-filters/request-contains-filter.js +36 -0
  36. package/lib/ovsx-router-filters/request-contains-filter.js.map +1 -0
  37. package/lib/ovsx-types.d.ts +245 -0
  38. package/lib/ovsx-types.d.ts.map +1 -0
  39. package/lib/ovsx-types.js +75 -0
  40. package/lib/ovsx-types.js.map +1 -0
  41. package/lib/test/ovsx-mock-client.d.ts +44 -0
  42. package/lib/test/ovsx-mock-client.d.ts.map +1 -0
  43. package/lib/test/ovsx-mock-client.js +174 -0
  44. package/lib/test/ovsx-mock-client.js.map +1 -0
  45. package/lib/test/ovsx-router-client.spec-data.d.ts +11 -0
  46. package/lib/test/ovsx-router-client.spec-data.d.ts.map +1 -0
  47. package/lib/test/ovsx-router-client.spec-data.js +67 -0
  48. package/lib/test/ovsx-router-client.spec-data.js.map +1 -0
  49. package/lib/types.d.ts +2 -0
  50. package/lib/types.d.ts.map +1 -0
  51. package/lib/types.js +18 -0
  52. package/lib/types.js.map +1 -0
  53. package/package.json +3 -3
package/lib/index.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ export { OVSXApiFilter, OVSXApiFilterImpl, OVSXApiFilterProvider } from './ovsx-api-filter';
2
+ export { OVSXHttpClient, OVSX_RATE_LIMIT } from './ovsx-http-client';
3
+ export { OVSXMockClient } from './test/ovsx-mock-client';
4
+ export { OVSXRouterClient, OVSXRouterConfig, OVSXRouterFilterFactory as FilterFactory } from './ovsx-router-client';
5
+ export * from './ovsx-router-filters';
6
+ export * from './ovsx-types';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,uBAAuB,IAAI,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpH,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2021 Ericsson 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.OVSXRouterClient = exports.OVSXMockClient = exports.OVSX_RATE_LIMIT = exports.OVSXHttpClient = exports.OVSXApiFilterProvider = exports.OVSXApiFilterImpl = exports.OVSXApiFilter = void 0;
19
+ const tslib_1 = require("tslib");
20
+ var ovsx_api_filter_1 = require("./ovsx-api-filter");
21
+ Object.defineProperty(exports, "OVSXApiFilter", { enumerable: true, get: function () { return ovsx_api_filter_1.OVSXApiFilter; } });
22
+ Object.defineProperty(exports, "OVSXApiFilterImpl", { enumerable: true, get: function () { return ovsx_api_filter_1.OVSXApiFilterImpl; } });
23
+ Object.defineProperty(exports, "OVSXApiFilterProvider", { enumerable: true, get: function () { return ovsx_api_filter_1.OVSXApiFilterProvider; } });
24
+ var ovsx_http_client_1 = require("./ovsx-http-client");
25
+ Object.defineProperty(exports, "OVSXHttpClient", { enumerable: true, get: function () { return ovsx_http_client_1.OVSXHttpClient; } });
26
+ Object.defineProperty(exports, "OVSX_RATE_LIMIT", { enumerable: true, get: function () { return ovsx_http_client_1.OVSX_RATE_LIMIT; } });
27
+ var ovsx_mock_client_1 = require("./test/ovsx-mock-client");
28
+ Object.defineProperty(exports, "OVSXMockClient", { enumerable: true, get: function () { return ovsx_mock_client_1.OVSXMockClient; } });
29
+ var ovsx_router_client_1 = require("./ovsx-router-client");
30
+ Object.defineProperty(exports, "OVSXRouterClient", { enumerable: true, get: function () { return ovsx_router_client_1.OVSXRouterClient; } });
31
+ tslib_1.__exportStar(require("./ovsx-router-filters"), exports);
32
+ tslib_1.__exportStar(require("./ovsx-types"), exports);
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,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,qDAA4F;AAAnF,gHAAA,aAAa,OAAA;AAAE,oHAAA,iBAAiB,OAAA;AAAE,wHAAA,qBAAqB,OAAA;AAChE,uDAAqE;AAA5D,kHAAA,cAAc,OAAA;AAAE,mHAAA,eAAe,OAAA;AACxC,4DAAyD;AAAhD,kHAAA,cAAc,OAAA;AACvB,2DAAoH;AAA3G,sHAAA,gBAAgB,OAAA;AACzB,gEAAsC;AACtC,uDAA6B"}
@@ -0,0 +1,37 @@
1
+ import { OVSXClient, VSXAllVersions, VSXExtensionRaw, VSXQueryOptions, VSXSearchEntry } from './ovsx-types';
2
+ export declare const OVSXApiFilterProvider: unique symbol;
3
+ export type OVSXApiFilterProvider = () => Promise<OVSXApiFilter>;
4
+ export declare const OVSXApiFilter: unique symbol;
5
+ /**
6
+ * Filter various data types based on a pre-defined supported VS Code API version.
7
+ */
8
+ export interface OVSXApiFilter {
9
+ supportedApiVersion: string;
10
+ findLatestCompatibleExtension(query: VSXQueryOptions): Promise<VSXExtensionRaw | undefined>;
11
+ /**
12
+ * Get the latest compatible extension version:
13
+ * - A builtin extension is fetched based on the extension version which matches the API.
14
+ * - An extension satisfies compatibility if its `engines.vscode` version is supported.
15
+ *
16
+ * @param extensionId the extension id.
17
+ * @returns the data for the latest compatible extension version if available, else `undefined`.
18
+ */
19
+ getLatestCompatibleExtension(extensions: VSXExtensionRaw[]): VSXExtensionRaw | undefined;
20
+ getLatestCompatibleVersion(searchEntry: VSXSearchEntry): VSXAllVersions | undefined;
21
+ }
22
+ export declare class OVSXApiFilterImpl implements OVSXApiFilter {
23
+ client: OVSXClient;
24
+ supportedApiVersion: string;
25
+ constructor(client: OVSXClient, supportedApiVersion: string);
26
+ findLatestCompatibleExtension(query: VSXQueryOptions): Promise<VSXExtensionRaw | undefined>;
27
+ protected queryLatestCompatibleExtension(query: VSXQueryOptions): Promise<VSXExtensionRaw | undefined>;
28
+ getLatestCompatibleExtension(extensions: VSXExtensionRaw[]): VSXExtensionRaw | undefined;
29
+ getLatestCompatibleVersion(searchEntry: VSXSearchEntry): VSXAllVersions | undefined;
30
+ protected isBuiltinNamespace(namespace: string): boolean;
31
+ /**
32
+ * @returns `a >= b`
33
+ */
34
+ protected versionGreaterThanOrEqualTo(a: string, b: string): boolean;
35
+ protected supportedVscodeApiSatisfies(vscodeApiRange: string): boolean;
36
+ }
37
+ //# sourceMappingURL=ovsx-api-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ovsx-api-filter.d.ts","sourceRoot":"","sources":["../src/ovsx-api-filter.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAwB,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAElI,eAAO,MAAM,qBAAqB,eAAkC,CAAC;AAErE,MAAM,MAAM,qBAAqB,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;AAEjE,eAAO,MAAM,aAAa,eAA0B,CAAC;AACrD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,6BAA6B,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAAC;IAC5F;;;;;;;OAOG;IACH,4BAA4B,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,eAAe,GAAG,SAAS,CAAC;IACzF,0BAA0B,CAAC,WAAW,EAAE,cAAc,GAAG,cAAc,GAAG,SAAS,CAAC;CACvF;AAED,qBAAa,iBAAkB,YAAW,aAAa;IAGxC,MAAM,EAAE,UAAU;IAClB,mBAAmB,EAAE,MAAM;gBAD3B,MAAM,EAAE,UAAU,EAClB,mBAAmB,EAAE,MAAM;IAGhC,6BAA6B,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;cAkBjF,8BAA8B,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAyB5G,4BAA4B,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,eAAe,GAAG,SAAS;IAUxF,0BAA0B,CAAC,WAAW,EAAE,cAAc,GAAG,cAAc,GAAG,SAAS;IAkBnF,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIxD;;OAEG;IACH,SAAS,CAAC,2BAA2B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO;IASpE,SAAS,CAAC,2BAA2B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;CAGzE"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2023 Ericsson 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.OVSXApiFilterImpl = exports.OVSXApiFilter = exports.OVSXApiFilterProvider = void 0;
19
+ const semver = require("semver");
20
+ const ovsx_types_1 = require("./ovsx-types");
21
+ exports.OVSXApiFilterProvider = Symbol('OVSXApiFilterProvider');
22
+ exports.OVSXApiFilter = Symbol('OVSXApiFilter');
23
+ class OVSXApiFilterImpl {
24
+ constructor(client, supportedApiVersion) {
25
+ this.client = client;
26
+ this.supportedApiVersion = supportedApiVersion;
27
+ }
28
+ async findLatestCompatibleExtension(query) {
29
+ const targetPlatform = query.targetPlatform;
30
+ if (!targetPlatform) {
31
+ return this.queryLatestCompatibleExtension(query);
32
+ }
33
+ const latestWithTargetPlatform = await this.queryLatestCompatibleExtension(query);
34
+ let latestUniversal;
35
+ if (targetPlatform !== 'universal' && targetPlatform !== 'web') {
36
+ // Additionally query the universal version, as there might be a newer one available
37
+ latestUniversal = await this.queryLatestCompatibleExtension({ ...query, targetPlatform: 'universal' });
38
+ }
39
+ if (latestWithTargetPlatform && latestUniversal) {
40
+ // Prefer the version with the target platform if it's greater or equal to the universal version
41
+ return this.versionGreaterThanOrEqualTo(latestWithTargetPlatform.version, latestUniversal.version) ? latestWithTargetPlatform : latestUniversal;
42
+ }
43
+ return latestWithTargetPlatform !== null && latestWithTargetPlatform !== void 0 ? latestWithTargetPlatform : latestUniversal;
44
+ }
45
+ async queryLatestCompatibleExtension(query) {
46
+ let offset = 0;
47
+ let size = 5;
48
+ let loop = true;
49
+ while (loop) {
50
+ const queryOptions = {
51
+ ...query,
52
+ offset,
53
+ size // there is a great chance that the newest version will work
54
+ };
55
+ const results = await this.client.query(queryOptions);
56
+ const compatibleExtension = this.getLatestCompatibleExtension(results.extensions);
57
+ if (compatibleExtension) {
58
+ return compatibleExtension;
59
+ }
60
+ // Adjust offset by the amount of returned extensions
61
+ offset += results.extensions.length;
62
+ // Continue querying if there are more extensions available
63
+ loop = results.totalSize > offset;
64
+ // Adjust the size to fetch more extensions next time
65
+ size = Math.min(size * 2, 100);
66
+ }
67
+ return undefined;
68
+ }
69
+ getLatestCompatibleExtension(extensions) {
70
+ if (extensions.length === 0) {
71
+ return;
72
+ }
73
+ else if (this.isBuiltinNamespace(extensions[0].namespace.toLowerCase())) {
74
+ return extensions.find(extension => this.versionGreaterThanOrEqualTo(this.supportedApiVersion, extension.version));
75
+ }
76
+ else {
77
+ return extensions.find(extension => { var _a, _b; return this.supportedVscodeApiSatisfies((_b = (_a = extension.engines) === null || _a === void 0 ? void 0 : _a.vscode) !== null && _b !== void 0 ? _b : '*'); });
78
+ }
79
+ }
80
+ getLatestCompatibleVersion(searchEntry) {
81
+ function getLatestCompatibleVersion(predicate) {
82
+ if (searchEntry.allVersions) {
83
+ return searchEntry.allVersions.find(predicate);
84
+ }
85
+ // If the allVersions field is missing then try to use the
86
+ // searchEntry as VSXAllVersions and check if it's compatible:
87
+ if (predicate(searchEntry)) {
88
+ return searchEntry;
89
+ }
90
+ }
91
+ if (this.isBuiltinNamespace(searchEntry.namespace)) {
92
+ return getLatestCompatibleVersion(allVersions => this.versionGreaterThanOrEqualTo(this.supportedApiVersion, allVersions.version));
93
+ }
94
+ else {
95
+ return getLatestCompatibleVersion(allVersions => { var _a, _b; return this.supportedVscodeApiSatisfies((_b = (_a = allVersions.engines) === null || _a === void 0 ? void 0 : _a.vscode) !== null && _b !== void 0 ? _b : '*'); });
96
+ }
97
+ }
98
+ isBuiltinNamespace(namespace) {
99
+ return ovsx_types_1.VSXBuiltinNamespaces.is(namespace);
100
+ }
101
+ /**
102
+ * @returns `a >= b`
103
+ */
104
+ versionGreaterThanOrEqualTo(a, b) {
105
+ const versionA = semver.clean(a);
106
+ const versionB = semver.clean(b);
107
+ if (!versionA || !versionB) {
108
+ return false;
109
+ }
110
+ return semver.gte(versionA, versionB);
111
+ }
112
+ supportedVscodeApiSatisfies(vscodeApiRange) {
113
+ return semver.satisfies(this.supportedApiVersion, vscodeApiRange);
114
+ }
115
+ }
116
+ exports.OVSXApiFilterImpl = OVSXApiFilterImpl;
117
+ //# sourceMappingURL=ovsx-api-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ovsx-api-filter.js","sourceRoot":"","sources":["../src/ovsx-api-filter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { OVSXClient, VSXQueryOptions, VSXQueryResult, VSXSearchOptions, VSXSearchResult } from './ovsx-types';
2
+ import { RequestService } from '@theia/request';
3
+ import { RateLimiter } from 'limiter';
4
+ export declare const OVSX_RATE_LIMIT = 15;
5
+ export declare class OVSXHttpClient implements OVSXClient {
6
+ protected vsxRegistryUrl: string;
7
+ protected requestService: RequestService;
8
+ protected rateLimiter: RateLimiter;
9
+ /**
10
+ * @param requestService
11
+ * @returns factory that will cache clients based on the requested input URL.
12
+ */
13
+ static createClientFactory(requestService: RequestService, rateLimiter?: RateLimiter): (url: string) => OVSXClient;
14
+ constructor(vsxRegistryUrl: string, requestService: RequestService, rateLimiter?: RateLimiter);
15
+ search(searchOptions?: VSXSearchOptions): Promise<VSXSearchResult>;
16
+ query(queryOptions?: VSXQueryOptions): Promise<VSXQueryResult>;
17
+ protected requestJson<R>(url: string): Promise<R>;
18
+ protected buildUrl(url: string, query?: object): string;
19
+ protected buildQueryString(searchQuery?: object): string;
20
+ }
21
+ //# sourceMappingURL=ovsx-http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ovsx-http-client.d.ts","sourceRoot":"","sources":["../src/ovsx-http-client.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC9G,OAAO,EAAkB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,qBAAa,cAAe,YAAW,UAAU;IAazC,SAAS,CAAC,cAAc,EAAE,MAAM;IAChC,SAAS,CAAC,cAAc,EAAE,cAAc;IACxC,SAAS,CAAC,WAAW;IAbzB;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,UAAU;gBAOpG,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,cAAc,EAC9B,WAAW,cAA8E;IAGvG,MAAM,CAAC,aAAa,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAIlE,KAAK,CAAC,YAAY,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;cAI9C,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAsBvD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM;IAIvD,SAAS,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;CAc3D"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2023 Ericsson 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.OVSXHttpClient = exports.OVSX_RATE_LIMIT = void 0;
19
+ const request_1 = require("@theia/request");
20
+ const limiter_1 = require("limiter");
21
+ exports.OVSX_RATE_LIMIT = 15;
22
+ class OVSXHttpClient {
23
+ /**
24
+ * @param requestService
25
+ * @returns factory that will cache clients based on the requested input URL.
26
+ */
27
+ static createClientFactory(requestService, rateLimiter) {
28
+ // eslint-disable-next-line no-null/no-null
29
+ const cachedClients = Object.create(null);
30
+ return url => { var _a; return (_a = cachedClients[url]) !== null && _a !== void 0 ? _a : (cachedClients[url] = new this(url, requestService, rateLimiter)); };
31
+ }
32
+ constructor(vsxRegistryUrl, requestService, rateLimiter = new limiter_1.RateLimiter({ tokensPerInterval: exports.OVSX_RATE_LIMIT, interval: 'second' })) {
33
+ this.vsxRegistryUrl = vsxRegistryUrl;
34
+ this.requestService = requestService;
35
+ this.rateLimiter = rateLimiter;
36
+ }
37
+ search(searchOptions) {
38
+ return this.requestJson(this.buildUrl('api/-/search', searchOptions));
39
+ }
40
+ query(queryOptions) {
41
+ return this.requestJson(this.buildUrl('api/v2/-/query', queryOptions));
42
+ }
43
+ async requestJson(url) {
44
+ const attempts = 5;
45
+ for (let i = 0; i < attempts; i++) {
46
+ // Use 1, 2, 4, 8, 16 tokens for each attempt
47
+ const tokenCount = Math.pow(2, i);
48
+ await this.rateLimiter.removeTokens(tokenCount);
49
+ const context = await this.requestService.request({
50
+ url,
51
+ headers: { 'Accept': 'application/json' }
52
+ });
53
+ if (context.res.statusCode === 429) {
54
+ console.warn('OVSX rate limit exceeded. Consider reducing the rate limit.');
55
+ // If there are still more attempts left, retry the request with a higher token count
56
+ if (i < attempts - 1) {
57
+ continue;
58
+ }
59
+ }
60
+ return request_1.RequestContext.asJson(context);
61
+ }
62
+ throw new Error('Failed to fetch data from OVSX.');
63
+ }
64
+ buildUrl(url, query) {
65
+ return new URL(`${url}${this.buildQueryString(query)}`, this.vsxRegistryUrl).toString();
66
+ }
67
+ buildQueryString(searchQuery) {
68
+ if (!searchQuery) {
69
+ return '';
70
+ }
71
+ let queryString = '';
72
+ for (const [key, value] of Object.entries(searchQuery)) {
73
+ if (typeof value === 'string') {
74
+ queryString += `&${key}=${encodeURIComponent(value)}`;
75
+ }
76
+ else if (typeof value === 'boolean' || typeof value === 'number') {
77
+ queryString += `&${key}=${value}`;
78
+ }
79
+ }
80
+ return queryString && '?' + queryString.slice(1);
81
+ }
82
+ }
83
+ exports.OVSXHttpClient = OVSXHttpClient;
84
+ //# sourceMappingURL=ovsx-http-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ovsx-http-client.js","sourceRoot":"","sources":["../src/ovsx-http-client.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,0CAA0C;AAC1C,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,4CAAgE;AAChE,qCAAsC;AAEzB,QAAA,eAAe,GAAG,EAAE,CAAC;AAElC,MAAa,cAAc;IAEvB;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,cAA8B,EAAE,WAAyB;QAChF,2CAA2C;QAC3C,MAAM,aAAa,GAA+B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACtE,OAAO,GAAG,CAAC,EAAE,wBAAC,aAAa,CAAC,GAAG,qCAAjB,aAAa,CAAC,GAAG,IAAM,IAAI,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,CAAC,IAAA,CAAC;IACpF,CAAC;IAED,YACc,cAAsB,EACtB,cAA8B,EAC9B,cAAc,IAAI,qBAAW,CAAC,EAAE,iBAAiB,EAAE,uBAAe,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QAFzF,mBAAc,GAAd,cAAc,CAAQ;QACtB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,gBAAW,GAAX,WAAW,CAA8E;IACnG,CAAC;IAEL,MAAM,CAAC,aAAgC;QACnC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,YAA8B;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;IAC3E,CAAC;IAES,KAAK,CAAC,WAAW,CAAI,GAAW;QACtC,MAAM,QAAQ,GAAG,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,6CAA6C;YAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClC,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;gBAC9C,GAAG;gBACH,OAAO,EAAE,EAAE,QAAQ,EAAE,kBAAkB,EAAE;aAC5C,CAAC,CAAC;YACH,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;gBACjC,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;gBAC5E,qFAAqF;gBACrF,IAAI,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,CAAC;oBACnB,SAAS;gBACb,CAAC;YACL,CAAC;YACD,OAAO,wBAAc,CAAC,MAAM,CAAI,OAAO,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC;IAES,QAAQ,CAAC,GAAW,EAAE,KAAc;QAC1C,OAAO,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5F,CAAC;IAES,gBAAgB,CAAC,WAAoB;QAC3C,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACd,CAAC;QACD,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC5B,WAAW,IAAI,IAAI,GAAG,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1D,CAAC;iBAAM,IAAI,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACjE,WAAW,IAAI,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;YACtC,CAAC;QACL,CAAC;QACD,OAAO,WAAW,IAAI,GAAG,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;CACJ;AAlED,wCAkEC"}
@@ -0,0 +1,69 @@
1
+ import { ExtensionLike, OVSXClient, OVSXClientProvider, VSXQueryOptions, VSXQueryResult, VSXSearchOptions, VSXSearchResult } from './ovsx-types';
2
+ import type { MaybePromise } from './types';
3
+ export interface OVSXRouterFilter {
4
+ filterSearchOptions?(searchOptions?: VSXSearchOptions): MaybePromise<unknown>;
5
+ filterQueryOptions?(queryOptions?: VSXQueryOptions): MaybePromise<unknown>;
6
+ filterExtension?(extension: ExtensionLike): MaybePromise<unknown>;
7
+ }
8
+ /**
9
+ * @param conditions key/value mapping of condition statements that rules may process
10
+ * @param remainingKeys keys left to be processed, remove items from it when you handled them
11
+ */
12
+ export type OVSXRouterFilterFactory = (conditions: Readonly<Record<string, unknown>>, remainingKeys: Set<string>) => MaybePromise<OVSXRouterFilter | undefined>;
13
+ /**
14
+ * Helper function to create factories that handle a single condition key.
15
+ */
16
+ export declare function createFilterFactory(conditionKey: string, factory: (conditionValue: unknown) => OVSXRouterFilter | undefined): OVSXRouterFilterFactory;
17
+ export interface OVSXRouterConfig {
18
+ /**
19
+ * Registry aliases that will be used for routing.
20
+ */
21
+ registries?: {
22
+ [alias: string]: string;
23
+ };
24
+ /**
25
+ * The registry/ies to use by default.
26
+ */
27
+ use: string | string[];
28
+ /**
29
+ * Filters for the different phases of interfacing with a registry.
30
+ */
31
+ rules?: OVSXRouterRule[];
32
+ }
33
+ export interface OVSXRouterRule {
34
+ [condition: string]: unknown;
35
+ use?: string | string[] | null;
36
+ }
37
+ /**
38
+ * @internal
39
+ */
40
+ export interface OVSXRouterParsedRule {
41
+ filters: OVSXRouterFilter[];
42
+ use: string[];
43
+ }
44
+ /**
45
+ * Route and agglomerate queries according to {@link routerConfig}.
46
+ * {@link ruleFactories} is the actual logic used to evaluate the config.
47
+ * Each rule implementation will be ran sequentially over each configured rule.
48
+ */
49
+ export declare class OVSXRouterClient implements OVSXClient {
50
+ protected readonly useDefault: string[];
51
+ protected readonly clientProvider: OVSXClientProvider;
52
+ protected readonly rules: OVSXRouterParsedRule[];
53
+ static FromConfig(routerConfig: OVSXRouterConfig, clientProvider: OVSXClientProvider, filterFactories: OVSXRouterFilterFactory[]): Promise<OVSXRouterClient>;
54
+ protected static ParseRules(rules: OVSXRouterRule[], filterFactories: OVSXRouterFilterFactory[], aliases?: Record<string, string>): Promise<OVSXRouterParsedRule[]>;
55
+ protected static ParseUse(use: string | string[] | null | undefined, aliases?: Record<string, string>): string[];
56
+ constructor(useDefault: string[], clientProvider: OVSXClientProvider, rules: OVSXRouterParsedRule[]);
57
+ search(searchOptions?: VSXSearchOptions): Promise<VSXSearchResult>;
58
+ query(queryOptions?: VSXQueryOptions): Promise<VSXQueryResult>;
59
+ protected emptySearchResult(searchOptions?: VSXSearchOptions): VSXSearchResult;
60
+ protected emptyQueryResult(queryOptions?: VSXQueryOptions): VSXQueryResult;
61
+ protected mergedQuery(registries: string[], queryOptions?: VSXQueryOptions): Promise<VSXQueryResult>;
62
+ protected mergedSearch(registries: string[], searchOptions?: VSXSearchOptions): Promise<VSXSearchResult>;
63
+ protected mergeSearchResults(results: Map<string, VSXSearchResult>): Promise<VSXSearchResult>;
64
+ protected mergeQueryResults(results: Map<string, VSXQueryResult>): Promise<VSXQueryResult>;
65
+ protected filterExtension<T extends ExtensionLike>(sourceUri: string, extension: T): Promise<T | undefined>;
66
+ protected runRules<T>(runFilter: (filter: OVSXRouterFilter) => unknown, onRuleMatched: (rule: OVSXRouterParsedRule) => T): Promise<T | undefined>;
67
+ protected runRules<T, U>(runFilter: (filter: OVSXRouterFilter) => unknown, onRuleMatched: (rule: OVSXRouterParsedRule) => T, onNoRuleMatched: () => U): Promise<T | U>;
68
+ }
69
+ //# sourceMappingURL=ovsx-router-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ovsx-router-client.d.ts","sourceRoot":"","sources":["../src/ovsx-router-client.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAmB,eAAe,EAAE,cAAc,EAAkB,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAClL,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,gBAAgB;IAC7B,mBAAmB,CAAC,CAAC,aAAa,CAAC,EAAE,gBAAgB,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9E,kBAAkB,CAAC,CAAC,YAAY,CAAC,EAAE,eAAe,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAC3E,eAAe,CAAC,CAAC,SAAS,EAAE,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;CACrE;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,YAAY,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;AAEhK;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,cAAc,EAAE,OAAO,KAAK,gBAAgB,GAAG,SAAS,GAAG,uBAAuB,CAUrJ;AAED,MAAM,WAAW,gBAAgB;IAC7B;;OAEG;IACH,UAAU,CAAC,EAAE;QACT,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAC1B,CAAA;IACD;;OAEG;IACH,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACtB;;OAEG;IACH,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;CAC3B;AAED,MAAM,WAAW,cAAc;IAC3B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAA;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAA;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,GAAG,EAAE,MAAM,EAAE,CAAA;CAChB;AAED;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IAuC3C,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE;IACvC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,kBAAkB;IACrD,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,oBAAoB,EAAE;WAvCvC,UAAU,CAAC,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,kBAAkB,EAAE,eAAe,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC;qBAS3I,UAAU,CAAC,KAAK,EAAE,cAAc,EAAE,EAAE,eAAe,EAAE,uBAAuB,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAczK,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE;gBAczF,UAAU,EAAE,MAAM,EAAE,EACpB,cAAc,EAAE,kBAAkB,EAClC,KAAK,EAAE,oBAAoB,EAAE;IAG9C,MAAM,CAAC,aAAa,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;IAUlE,KAAK,CAAC,YAAY,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;IAUxE,SAAS,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,gBAAgB,GAAG,eAAe;IAO9E,SAAS,CAAC,gBAAgB,CAAC,YAAY,CAAC,EAAE,eAAe,GAAG,cAAc;cAQ1D,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;cAI1F,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,aAAa,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;cAI9F,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC;cAcnF,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;cAahF,eAAe,CAAC,CAAC,SAAS,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAQjH,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IACjJ,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;CAczK"}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ // *****************************************************************************
3
+ // Copyright (C) 2023 Ericsson 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.OVSXRouterClient = exports.createFilterFactory = void 0;
19
+ /**
20
+ * Helper function to create factories that handle a single condition key.
21
+ */
22
+ function createFilterFactory(conditionKey, factory) {
23
+ return (conditions, remainingKeys) => {
24
+ if (conditionKey in conditions) {
25
+ const filter = factory(conditions[conditionKey]);
26
+ if (filter) {
27
+ remainingKeys.delete(conditionKey);
28
+ return filter;
29
+ }
30
+ }
31
+ };
32
+ }
33
+ exports.createFilterFactory = createFilterFactory;
34
+ /**
35
+ * Route and agglomerate queries according to {@link routerConfig}.
36
+ * {@link ruleFactories} is the actual logic used to evaluate the config.
37
+ * Each rule implementation will be ran sequentially over each configured rule.
38
+ */
39
+ class OVSXRouterClient {
40
+ static async FromConfig(routerConfig, clientProvider, filterFactories) {
41
+ const rules = routerConfig.rules ? await this.ParseRules(routerConfig.rules, filterFactories, routerConfig.registries) : [];
42
+ return new this(this.ParseUse(routerConfig.use, routerConfig.registries), clientProvider, rules);
43
+ }
44
+ static async ParseRules(rules, filterFactories, aliases) {
45
+ return Promise.all(rules.map(async ({ use, ...conditions }) => {
46
+ const remainingKeys = new Set(Object.keys(conditions));
47
+ const filters = removeNullValues(await Promise.all(filterFactories.map(filterFactory => filterFactory(conditions, remainingKeys))));
48
+ if (remainingKeys.size > 0) {
49
+ throw new Error(`unknown conditions: ${Array.from(remainingKeys).join(', ')}`);
50
+ }
51
+ return {
52
+ filters,
53
+ use: this.ParseUse(use, aliases)
54
+ };
55
+ }));
56
+ }
57
+ static ParseUse(use, aliases) {
58
+ if (typeof use === 'string') {
59
+ return [alias(use)];
60
+ }
61
+ else if (Array.isArray(use)) {
62
+ return use.map(alias);
63
+ }
64
+ else {
65
+ return [];
66
+ }
67
+ function alias(aliasOrUri) {
68
+ var _a;
69
+ return (_a = aliases === null || aliases === void 0 ? void 0 : aliases[aliasOrUri]) !== null && _a !== void 0 ? _a : aliasOrUri;
70
+ }
71
+ }
72
+ constructor(useDefault, clientProvider, rules) {
73
+ this.useDefault = useDefault;
74
+ this.clientProvider = clientProvider;
75
+ this.rules = rules;
76
+ }
77
+ async search(searchOptions) {
78
+ return this.runRules(filter => { var _a; return (_a = filter.filterSearchOptions) === null || _a === void 0 ? void 0 : _a.call(filter, searchOptions); }, rule => rule.use.length > 0
79
+ ? this.mergedSearch(rule.use, searchOptions)
80
+ : this.emptySearchResult(searchOptions), () => this.mergedSearch(this.useDefault, searchOptions));
81
+ }
82
+ async query(queryOptions = {}) {
83
+ return this.runRules(filter => { var _a; return (_a = filter.filterQueryOptions) === null || _a === void 0 ? void 0 : _a.call(filter, queryOptions); }, rule => rule.use.length > 0
84
+ ? this.mergedQuery(rule.use, queryOptions)
85
+ : this.emptyQueryResult(queryOptions), () => this.mergedQuery(this.useDefault, queryOptions));
86
+ }
87
+ emptySearchResult(searchOptions) {
88
+ var _a;
89
+ return {
90
+ extensions: [],
91
+ offset: (_a = searchOptions === null || searchOptions === void 0 ? void 0 : searchOptions.offset) !== null && _a !== void 0 ? _a : 0
92
+ };
93
+ }
94
+ emptyQueryResult(queryOptions) {
95
+ return {
96
+ offset: 0,
97
+ totalSize: 0,
98
+ extensions: []
99
+ };
100
+ }
101
+ async mergedQuery(registries, queryOptions) {
102
+ return this.mergeQueryResults(await createMapping(registries, async (registry) => (await this.clientProvider(registry)).query(queryOptions)));
103
+ }
104
+ async mergedSearch(registries, searchOptions) {
105
+ return this.mergeSearchResults(await createMapping(registries, async (registry) => (await this.clientProvider(registry)).search(searchOptions)));
106
+ }
107
+ async mergeSearchResults(results) {
108
+ const filtering = [];
109
+ results.forEach((result, sourceUri) => {
110
+ filtering.push(Promise
111
+ .all(result.extensions.map(extension => this.filterExtension(sourceUri, extension)))
112
+ .then(removeNullValues));
113
+ });
114
+ return {
115
+ extensions: interleave(await Promise.all(filtering)),
116
+ offset: Math.min(...Array.from(results.values(), result => result.offset))
117
+ };
118
+ }
119
+ async mergeQueryResults(results) {
120
+ const filtering = [];
121
+ results.forEach((result, sourceUri) => {
122
+ result.extensions.forEach(extension => filtering.push(this.filterExtension(sourceUri, extension)));
123
+ });
124
+ const extensions = removeNullValues(await Promise.all(filtering));
125
+ return {
126
+ offset: 0,
127
+ totalSize: extensions.length,
128
+ extensions
129
+ };
130
+ }
131
+ async filterExtension(sourceUri, extension) {
132
+ return this.runRules(filter => { var _a; return (_a = filter.filterExtension) === null || _a === void 0 ? void 0 : _a.call(filter, extension); }, rule => rule.use.includes(sourceUri) ? extension : undefined, () => extension);
133
+ }
134
+ async runRules(runFilter, onRuleMatched, onNoRuleMatched) {
135
+ for (const rule of this.rules) {
136
+ const results = removeNullValues(await Promise.all(rule.filters.map(filter => runFilter(filter))));
137
+ if (results.length > 0 && results.every(value => value)) {
138
+ return onRuleMatched(rule);
139
+ }
140
+ }
141
+ return onNoRuleMatched === null || onNoRuleMatched === void 0 ? void 0 : onNoRuleMatched();
142
+ }
143
+ }
144
+ exports.OVSXRouterClient = OVSXRouterClient;
145
+ function nonNullable(value) {
146
+ // eslint-disable-next-line no-null/no-null
147
+ return typeof value !== 'undefined' && value !== null;
148
+ }
149
+ function removeNullValues(values) {
150
+ return values.filter(nonNullable);
151
+ }
152
+ /**
153
+ * Create a map where the keys are each element from {@link values} and the
154
+ * values are the result of a mapping function applied on the key.
155
+ */
156
+ async function createMapping(values, map, thisArg) {
157
+ return new Map(await Promise.all(values.map(async (value, index) => [value, await map.call(thisArg, value, index)])));
158
+ }
159
+ /**
160
+ * @example
161
+ * interleave([[1, 2, 3], [4, 5], [6, 7, 8]]) === [1, 4, 6, 2, 5, 7, 3, 8]
162
+ */
163
+ function interleave(arrays) {
164
+ const interleaved = [];
165
+ const length = Math.max(...arrays.map(array => array.length));
166
+ for (let i = 0; i < length; i++) {
167
+ for (const array of arrays) {
168
+ if (i < array.length) {
169
+ interleaved.push(array[i]);
170
+ }
171
+ }
172
+ }
173
+ return interleaved;
174
+ }
175
+ //# sourceMappingURL=ovsx-router-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ovsx-router-client.js","sourceRoot":"","sources":["../src/ovsx-router-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ovsx-router-client.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ovsx-router-client.spec.d.ts","sourceRoot":"","sources":["../src/ovsx-router-client.spec.ts"],"names":[],"mappings":""}