@c8y/ngx-components 1017.0.261 → 1017.0.262
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/core/plugins/plugins.service.d.ts +9 -0
- package/esm2020/core/plugins/plugins.service.mjs +37 -2
- package/fesm2015/c8y-ngx-components.mjs +35 -1
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +35 -1
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -105,6 +105,15 @@ export declare class PluginsService {
|
|
|
105
105
|
* @returns Returns list of remotes.
|
|
106
106
|
*/
|
|
107
107
|
getMFRemotes(application: IApplication): ApplicationRemotePlugins;
|
|
108
|
+
/**
|
|
109
|
+
* Verifies if an application is owned by management tenant.
|
|
110
|
+
*
|
|
111
|
+
* @param app The application to verify.
|
|
112
|
+
* @returns True if owned by management tenant.
|
|
113
|
+
*/
|
|
114
|
+
isOwnedByManagement(app: IApplication): boolean;
|
|
115
|
+
private removeDuplicates;
|
|
116
|
+
private isFromCurrentTenant;
|
|
108
117
|
/**
|
|
109
118
|
* Modifies the list of plugins to have additional information such as id.
|
|
110
119
|
* @ignore
|
|
@@ -4,6 +4,7 @@ import { ApplicationService } from '@c8y/ngx-components/api';
|
|
|
4
4
|
import { cloneDeep, get, uniqBy } from 'lodash-es';
|
|
5
5
|
import { coerce, compare } from 'semver';
|
|
6
6
|
import { AppStateService } from '../common/ui-state.service';
|
|
7
|
+
import { groupBy } from 'lodash-es';
|
|
7
8
|
import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "@c8y/ngx-components/api";
|
|
9
10
|
import * as i2 from "../common/ui-state.service";
|
|
@@ -25,7 +26,8 @@ export class PluginsService {
|
|
|
25
26
|
async listPackages(params = {}) {
|
|
26
27
|
const apps = await this.listApplicationsByCurrentTenant(params);
|
|
27
28
|
const webApps = apps.filter(app => this.isPackage(app));
|
|
28
|
-
|
|
29
|
+
const uniqueWebApps = this.removeDuplicates(webApps, 'contextPath');
|
|
30
|
+
return uniqueWebApps.sort((a, b) => a.name.localeCompare(b.name));
|
|
29
31
|
}
|
|
30
32
|
/**
|
|
31
33
|
* Checks if an application is a package.
|
|
@@ -161,6 +163,39 @@ export class PluginsService {
|
|
|
161
163
|
getMFRemotes(application) {
|
|
162
164
|
return application?.config?.remotes;
|
|
163
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* Verifies if an application is owned by management tenant.
|
|
168
|
+
*
|
|
169
|
+
* @param app The application to verify.
|
|
170
|
+
* @returns True if owned by management tenant.
|
|
171
|
+
*/
|
|
172
|
+
isOwnedByManagement(app) {
|
|
173
|
+
const appOwner = get(app, 'owner.tenant.id');
|
|
174
|
+
return appOwner === 'management';
|
|
175
|
+
}
|
|
176
|
+
removeDuplicates(apps, key) {
|
|
177
|
+
const uniqueList = [];
|
|
178
|
+
const groupedAppsByKey = groupBy(apps, key);
|
|
179
|
+
const groupedApps = Object.keys(groupedAppsByKey).map(key => groupedAppsByKey[key]);
|
|
180
|
+
for (const appsGroup of groupedApps) {
|
|
181
|
+
if (appsGroup.length < 2) {
|
|
182
|
+
uniqueList.push(...appsGroup);
|
|
183
|
+
}
|
|
184
|
+
else {
|
|
185
|
+
const appFromCurrentTenant = appsGroup.find(app => this.isFromCurrentTenant(app));
|
|
186
|
+
if (appFromCurrentTenant) {
|
|
187
|
+
uniqueList.push(appFromCurrentTenant);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
const appNotOwnedByManagement = appsGroup.find(app => !this.isOwnedByManagement(app));
|
|
191
|
+
uniqueList.push(appNotOwnedByManagement);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return uniqueList;
|
|
195
|
+
}
|
|
196
|
+
isFromCurrentTenant(app) {
|
|
197
|
+
return app.owner.tenant.id === this.appStateService.currentTenant.value.name;
|
|
198
|
+
}
|
|
164
199
|
/**
|
|
165
200
|
* Modifies the list of plugins to have additional information such as id.
|
|
166
201
|
* @ignore
|
|
@@ -247,4 +282,4 @@ PluginsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", versi
|
|
|
247
282
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: PluginsService, decorators: [{
|
|
248
283
|
type: Injectable
|
|
249
284
|
}], ctorParameters: function () { return [{ type: i1.ApplicationService }, { type: i2.AppStateService }]; } });
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9wbHVnaW5zL3BsdWdpbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDTCx1QkFBdUIsRUFLeEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7OztBQUk3RCxNQUFNLE9BQU8sY0FBYztJQUN6QixZQUNVLGtCQUFzQyxFQUN0QyxlQUFnQztRQURoQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtJQUN2QyxDQUFDO0lBRUosMEZBQTBGO0lBQzFGLHlCQUF5QjtJQUN6Qiw2RUFBNkU7SUFDN0UsNkZBQTZGO0lBQzdGLElBQUk7SUFFSjs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFjLEVBQUU7UUFDakMsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsK0JBQStCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFB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Q0FBQztJQUNyQyxDQUFDOzsyR0EvVFUsY0FBYzsrR0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eSxcbiAgQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLFxuICBJQXBwbGljYXRpb24sXG4gIElBcHBsaWNhdGlvblZlcnNpb24sXG4gIElNYW5pZmVzdFxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FwaSc7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGdldCwgdW5pcUJ5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNvZXJjZSwgY29tcGFyZSB9IGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblBsdWdpbiwgUGx1Z2luc0NvbmZpZyB9IGZyb20gJy4vcGx1Z2lucy5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQbHVnaW5zU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZVNlcnZpY2U6IEFwcFN0YXRlU2VydmljZVxuICApIHt9XG5cbiAgLy8gVE9ETyBWZXJpZnkgaWYgd2Ugc2hvdWxkIGxpc3QgcGFja2FnZXMgdXNpbmcgbGlzdEJ5VGVuYW50IG9yIGJhc2VkIG9uIGFsbCBhcHBsaWNhdGlvbnMuXG4gIC8vIGFzeW5jIGxpc3RQYWNrYWdlcygpIHtcbiAgLy8gICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogMjAwMCB9KTtcbiAgLy8gICByZXR1cm4gZGF0YS5maWx0ZXIoKGFwcDogYW55KSA9PiBhcHAuZXhwb3J0cyB8fCAoYXBwLm1hbmlmZXN0ICYmIGFwcC5tYW5pZmVzdC5leHBvcnRzKSk7XG4gIC8vIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhY2thZ2VzLlxuICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgUmV0dXJucyBhIGxpc3Qgb2YgcGFja2FnZXMuXG4gICAqL1xuICBhc3luYyBsaXN0UGFja2FnZXMocGFyYW1zOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5saXN0QXBwbGljYXRpb25zQnlDdXJyZW50VGVuYW50KHBhcmFtcyk7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApKTtcbiAgICByZXR1cm4gd2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYW4gYXBwbGljYXRpb24gaXMgYSBwYWNrYWdlLlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdHJ1ZSBpZiB0aGUgYXBwbGljYXRpb24gaXMgYSBwYWNrYWdlLlxuICAgKi9cbiAgaXNQYWNrYWdlKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwbGljYXRpb24ubWFuaWZlc3Q/LmlzUGFja2FnZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSByZW1vdGVzIGZpZWxkIGluIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIGJ5IGFkZGluZyBuZXcgcGx1Z2lucy5cbiAgICogSW1wb3J0YW50OiBpZiB0aGUgcmVtb3RlcyBvYmplY3QgaXMgbm90IHNldCBvbiB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QsXG4gICAqIHJlbW90ZXMgd2lsbCBub3QgYmUgYWRkZWQuIE1ha2Ugc3VyZSB0aGF0IHRoaXMgb2JqZWN0IGV4aXN0cyBpbiB0aGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gcGx1Z2lucyBMaXN0IG9mIHJlbW90ZXMgdG8gYmUgYWRkZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdXBkYXRlZCBhcHBsaWNhdGlvbiByZW1vdGVzLlxuICAgKi9cbiAgYXN5bmMgYWRkUmVtb3RlcyhcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luIHwgQXBwbGljYXRpb25QbHVnaW5bXVxuICApOiBQcm9taXNlPEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucz4ge1xuICAgIGNvbnN0IGFwcENvbmZpZ1JlbW90ZXMgPSAoYXBwbGljYXRpb24/LmNvbmZpZyBhcyBQbHVnaW5zQ29uZmlnKT8ucmVtb3RlcztcbiAgICBpZiAoYXBwQ29uZmlnUmVtb3Rlcykge1xuICAgICAgY29uc3QgbmV3UmVtb3RlcyA9IHRoaXMuYWRkUGx1Z2luVG9SZW1vdGVzKGFwcENvbmZpZ1JlbW90ZXMsIHBsdWdpbnMpO1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlUmVtb3Rlc0luQXBwQ29uZmlnKGFwcGxpY2F0aW9uLCBuZXdSZW1vdGVzKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbW90ZXMgZmllbGQgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gYnkgcmVtb3ZpbmcgcGx1Z2lucy5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gcGx1Z2lucyBMaXN0IG9mIHJlbW90ZXMgdG8gYmUgcmVtb3ZlZC5cbiAgICogQHJldHVybnMgUmV0dXJucyB1cGRhdGVkIGFwcGxpY2F0aW9uIHJlbW90ZXMuXG4gICAqL1xuICBhc3luYyByZW1vdmVSZW1vdGVzKFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25QbHVnaW4gfCBBcHBsaWNhdGlvblBsdWdpbltdXG4gICk6IFByb21pc2U8QXBwbGljYXRpb25SZW1vdGVQbHVnaW5zPiB7XG4gICAgY29uc3QgYXBwQ29uZmlnUmVtb3RlcyA9IChhcHBsaWNhdGlvbj8uY29uZmlnIGFzIFBsdWdpbnNDb25maWcpPy5yZW1vdGVzO1xuICAgIGNvbnN0IG5ld1JlbW90ZXMgPSB0aGlzLnJlbW92ZVBsdWdpbnNGcm9tUmVtb3RlcyhhcHBDb25maWdSZW1vdGVzLCBwbHVnaW5zKTtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVSZW1vdGVzSW5BcHBDb25maWcoYXBwbGljYXRpb24sIG5ld1JlbW90ZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbW90ZXMgZmllbGQgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHBhcmFtIHBsdWdpbnMgTGlzdCBvZiByZW1vdGVzIHRvIGJlIGFkZGVkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHVwZGF0ZWQgYXBwbGljYXRpb24gcmVtb3Rlcy5cbiAgICovXG4gIGFzeW5jIHVwZGF0ZVJlbW90ZXNJbkFwcENvbmZpZyhcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHBsdWdpbnM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2luc1xuICApOiBQcm9taXNlPEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucz4ge1xuICAgIGNvbnN0IHVwZGF0ZWRBcHBXaXRoQ29uZmlnID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlQXBwbGljYXRpb25Db25maWcoXG4gICAgICBhcHBsaWNhdGlvbixcbiAgICAgIHtcbiAgICAgICAgcmVtb3RlczogcGx1Z2luc1xuICAgICAgfSBhcyBQbHVnaW5zQ29uZmlnXG4gICAgKTtcbiAgICByZXR1cm4gdXBkYXRlZEFwcFdpdGhDb25maWc/LmNvbmZpZz8ucmVtb3RlcyB8fCB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHRoZSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAgICovXG4gIGFzeW5jIGdldEN1bXVsb2NpdHlKc29uRmlsZShhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgYzh5SnNvbiA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcE1hbmlmZXN0KGFwcGxpY2F0aW9uKTtcbiAgICBpZiAoIWM4eUpzb24ucmVtb3Rlcykge1xuICAgICAgYzh5SnNvbi5yZW1vdGVzID0ge307XG4gICAgfVxuICAgIHJldHVybiBjOHlKc29uO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluaXRpYWwgc3RhdGUgb2YgcmVtb3RlcyBpbiB0aGUgY29uZmlndXJhdGlvbiAod2hlbiBpdCdzIG1pc3NpbmcpLCBiYXNlZCBvbiB0aGUgbGlzdCBvZiByZW1vdGVzIGJlaW5nIGluIHRoZSBhcHBsaWNhdGlvbiBtYW5pZmVzdC5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uICBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgUmV0dXJucyBhIGxpc3Qgb2YgcmVtb3RlcyB0aGF0IGhhcyBiZWVuIGFzc2lnbmVkIHRvIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdC5cbiAgICovXG4gIGFzeW5jIHNldEluaXRpYWxSZW1vdGVzKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWFuaWZlc3RSZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMgPSAoXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0Q3VtdWxvY2l0eUpzb25GaWxlKGFwcGxpY2F0aW9uKVxuICAgICAgKT8ucmVtb3RlcztcblxuICAgICAgaWYgKG1hbmlmZXN0UmVtb3Rlcykge1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyByZW1vdGVzIGluIHRoZSBjb25maWcgYWRkIHJlbW90ZXMgZnJvbSB0aGUgbWFuaWZlc3QgYXMgYW4gaW5pdGlhbCB2YWx1ZSBpZiB0aGVyZSBhcmUgc29tZS5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMudXBkYXRlUmVtb3Rlc0luQXBwQ29uZmlnKGFwcGxpY2F0aW9uLCBtYW5pZmVzdFJlbW90ZXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTb3J0cyB2ZXJzaW9ucyBsaXN0IG9yIGxpc3Qgb2Ygb2JqZWN0cyBieSB2ZXJzaW9uIHByb3BlcnR5XG4gICAqIEByZXR1cm5zIGxpc3Qgb2YgdmVyc2lvbnMgYXMgYXJyYXkgb2Ygc3RyaW5ncyBvciBhcnJheSBvZiBvYmplY3RzIHNvcnRlZCBieSB2ZXJzaW9uIHByb3BlcnR5XG4gICAqXG4gICAqIEBwYXJhbSB7eyBsaXN0OiBUW107IHBhdGg6IHN0cmluZ1tdIH0gfCBzdHJpbmdbXX0gc291cmNlIGRhdGEgdG8gc29ydFxuICAgKiBAcGFyYW0geydhc2MnIHwgJ2Rlc2MnfSBvcmRlciBhc2NlbmRpbmcgb3IgZGVzY2VuZGluZyBvcmRlciBvZiBzb3J0aW5nXG4gICAqXG4gICAqICoqRXhhbXBsZSoqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZGF0YSA9IFsnMS41LjAnLCAnMi4wLjAnXTtcbiAgICogY29uc3Qgc29ydGVkRGF0YSA9IHBsdWdpbnNTZXJ2aWNlLnNvcnRWZXJzaW9ucyh2ZXJzaW9ucywgJ2Rlc2MnKTtcbiAgICogLy8gc29ydGVkRGF0YTpcbiAgICogLy8gWycyLjAuMCcsICcxLjUuMCddXG4gICAqIGBgYFxuICAgKlxuICAgKiAqKkV4YW1wbGUqKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGRhdGEgPSBbXG4gICAqICB7YXBwOiB7YXBwVmVyc2lvbjogJzEuNS4wJ319LFxuICAgKiAge2FwcDoge2FwcFZlcnNpb246ICcyLjAuMCd9fSxcbiAgICogXTtcbiAgICogY29uc3Qgc29ydGVkRGF0YSA9IHBsdWdpbnNTZXJ2aWNlLnNvcnRWZXJzaW9ucyh7bGlzdDogZGF0YSwgcGF0aDogWydhcHAnLCAnYXBwVmVyc2lvbiddfSwgJ2Rlc2MnKTtcbiAgICogLy8gc29ydGVkRGF0YTpcbiAgICogLy8gW1xuICAgKiAvLyAge2FwcDoge2FwcFZlcnNpb246ICcyLjAuMCd9fSxcbiAgICogLy8gIHthcHA6IHthcHBWZXJzaW9uOiAnMS41LjAnfX1cbiAgICogLy8gXVxuICAgKiBgYGBcbiAgICovXG4gIHNvcnRWZXJzaW9uczxUPihzb3VyY2U6IHsgbGlzdDogVFtdOyBwYXRoOiBzdHJpbmdbXSB9LCBvcmRlcjogJ2FzYycgfCAnZGVzYycpOiBUW107XG4gIHNvcnRWZXJzaW9ucyhzb3VyY2U6IHN0cmluZ1tdLCBvcmRlcjogJ2FzYycgfCAnZGVzYycpOiBzdHJpbmdbXTtcbiAgc29ydFZlcnNpb25zKHNvdXJjZTogYW55LCBvcmRlcjogJ2FzYycgfCAnZGVzYycpOiBhbnkge1xuICAgIGNvbnN0IHNvdXJjZUNvcHkgPSBjbG9uZURlZXAoc291cmNlKTtcbiAgICBpZiAoc291cmNlLmxpc3QgJiYgc291cmNlLnBhdGgpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBzb3VyY2VDb3B5LnBhdGguam9pbignLicpO1xuICAgICAgcmV0dXJuIHNvdXJjZUNvcHkubGlzdC5zb3J0KFxuICAgICAgICAoYSwgYikgPT4gY29tcGFyZShjb2VyY2UoZ2V0KGEsIHBhdGgpKSwgY29lcmNlKGdldChiLCBwYXRoKSkpICogKG9yZGVyID09PSAnYXNjJyA/IDEgOiAtMSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzb3VyY2VDb3B5LnNvcnQoKGEsIGIpID0+IGNvbXBhcmUoY29lcmNlKGEpLCBjb2VyY2UoYikpICogKG9yZGVyID09PSAnYXNjJyA/IDEgOiAtMSkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhIGxpc3Qgb2YgZXhwb3J0ZWQgcGx1Z2lucyBmcm9tIHRoZSBhcHBsaWNhdGlvbiBvYmplY3QuXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgUmV0dXJucyBhIGxpc3Qgb2YgZXhwb3J0ZWQgcGx1Z2lucy5cbiAgICovXG4gIGdldE1GRXhwb3J0cyhhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uKTogQXBwbGljYXRpb25QbHVnaW5bXSB7XG4gICAgY29uc3QgbWFuaWZlc3Q6IFBhcnRpYWw8SU1hbmlmZXN0PiA9IGFwcGxpY2F0aW9uLm1hbmlmZXN0O1xuICAgIGlmICghbWFuaWZlc3QgfHwgIW1hbmlmZXN0LmV4cG9ydHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kUGx1Z2luc0RldGFpbHMobWFuaWZlc3QuZXhwb3J0cywgYXBwbGljYXRpb24uY29udGV4dFBhdGgsIHtcbiAgICAgIHZlcnNpb246IG1hbmlmZXN0LnZlcnNpb24sXG4gICAgICBiaW5hcnlJZDogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYSBsaXN0IG9mIGV4cG9ydHMgZnJvbSBlYWNoIGF2YWlsYWJsZSBwYWNrYWdlLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGEgbGlzdCBvZiBhbGwgZXhwb3J0ZWQgcGx1Z2lucy5cbiAgICovXG4gIGFzeW5jIGdldEFsbE1GRXhwb3J0cyhhbGxWZXJzaW9ucyA9IGZhbHNlKTogUHJvbWlzZTxBcHBsaWNhdGlvblBsdWdpbltdPiB7XG4gICAgY29uc3QgcGx1Z2lucyA9IG5ldyBBcnJheTxBcHBsaWNhdGlvblBsdWdpbj4oKTtcbiAgICBjb25zdCBwYWNrYWdlcyA9IGF3YWl0IHRoaXMubGlzdFBhY2thZ2VzKCk7XG4gICAgZm9yIChjb25zdCBwa2cgb2YgcGFja2FnZXMpIHtcbiAgICAgIGlmICghcGtnPy5tYW5pZmVzdD8uZXhwb3J0cykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChhbGxWZXJzaW9ucyAmJiBBcnJheS5pc0FycmF5KHBrZy5hcHBsaWNhdGlvblZlcnNpb25zKSkge1xuICAgICAgICBwa2cuYXBwbGljYXRpb25WZXJzaW9ucy5mb3JFYWNoKHZlcnNpb24gPT4ge1xuICAgICAgICAgIHBsdWdpbnMucHVzaChcbiAgICAgICAgICAgIC4uLnRoaXMuZXh0ZW5kUGx1Z2luc0RldGFpbHMocGtnLm1hbmlmZXN0LmV4cG9ydHMsIHBrZy5jb250ZXh0UGF0aCwgdmVyc2lvbilcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBsdWdpbnMucHVzaChcbiAgICAgICAgICAuLi50aGlzLmV4dGVuZFBsdWdpbnNEZXRhaWxzKHBrZy5tYW5pZmVzdC5leHBvcnRzLCBwa2cuY29udGV4dFBhdGgsIHtcbiAgICAgICAgICAgIHZlcnNpb246IHBrZy5tYW5pZmVzdC52ZXJzaW9uLFxuICAgICAgICAgICAgYmluYXJ5SWQ6IHVuZGVmaW5lZFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwbHVnaW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGEgbGlzdCBvZiByZW1vdGVzIGZyb20gdGhlIGFwcGxpY2F0aW9uIG9iamVjdC5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGxpc3Qgb2YgcmVtb3Rlcy5cbiAgICovXG4gIGdldE1GUmVtb3RlcyhhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICByZXR1cm4gKGFwcGxpY2F0aW9uPy5jb25maWcgYXMgUGx1Z2luc0NvbmZpZyk/LnJlbW90ZXM7XG4gIH1cblxuICAvKipcbiAgICogTW9kaWZpZXMgdGhlIGxpc3Qgb2YgcGx1Z2lucyB0byBoYXZlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VjaCBhcyBpZC5cbiAgICogQGlnbm9yZVxuICAgKi9cbiAgcHJpdmF0ZSBleHRlbmRQbHVnaW5zRGV0YWlscyhcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbltdID0gW10sXG4gICAgY29udGV4dFBhdGg6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBJQXBwbGljYXRpb25WZXJzaW9uXG4gICk6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIGNvbnN0IGV4dGVuZGVkUGx1Z2lucyA9IHBsdWdpbnMubWFwKHAgPT4gKHtcbiAgICAgIC4uLnAsXG4gICAgICBpZDogdGhpcy5jcmVhdGVQbHVnaW5JZChjb250ZXh0UGF0aCwgcCwgdmVyc2lvbi52ZXJzaW9uKSxcbiAgICAgIGNvbnRleHRQYXRoLFxuICAgICAgdmVyc2lvbjogdmVyc2lvbi52ZXJzaW9uLFxuICAgICAgdGFnczogdmVyc2lvbi50YWdzIHx8IFtdXG4gICAgfSkpO1xuICAgIHJldHVybiBleHRlbmRlZFBsdWdpbnM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3RBcHBsaWNhdGlvbnNCeUN1cnJlbnRUZW5hbnQocGFyYW1zOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBmaWx0ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICB0eXBlOiAnSE9TVEVEJyxcbiAgICAgICAgcGFnZVNpemU6IDIwMDAsXG4gICAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGFyYW1zXG4gICAgKTtcbiAgICBjb25zdCBzaGFyZWRGaWx0ZXIgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBhdmFpbGFiaWxpdHk6IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlNIQVJFRCxcbiAgICAgICAgdHlwZTogJ0hPU1RFRCcsXG4gICAgICAgIHBhZ2VTaXplOiAyMDAwLFxuICAgICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBhcmFtc1xuICAgICk7XG5cbiAgICBjb25zdCB0ZW5hbnROYW1lID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZS5uYW1lO1xuICAgIGNvbnN0IFtyZXN1bHRBcHBzT3duZWRCeVRlbmFudCwgcmVzdWx0U2hhcmVkQXBwc10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlUZW5hbnQodGVuYW50TmFtZSwgZmlsdGVyKSxcbiAgICAgIHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3Qoc2hhcmVkRmlsdGVyKVxuICAgIF0pO1xuICAgIGNvbnN0IHsgZGF0YTogYXBwc093bmVkQnlUZW5hbnQgfSA9IHJlc3VsdEFwcHNPd25lZEJ5VGVuYW50O1xuICAgIGNvbnN0IHsgZGF0YTogc2hhcmVkQXBwcyB9ID0gcmVzdWx0U2hhcmVkQXBwcztcbiAgICBjb25zdCB3ZWJBcHBzID0gWy4uLmFwcHNPd25lZEJ5VGVuYW50LCAuLi5zaGFyZWRBcHBzXTtcbiAgICByZXR1cm4gdW5pcUJ5KHdlYkFwcHMsIChhcHA6IElBcHBsaWNhdGlvbikgPT4gYXBwLmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUGx1Z2luVG9SZW1vdGVzKFxuICAgIHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyxcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbiB8IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKTogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zIHtcbiAgICBpZiAoIXBsdWdpbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVtb3Rlc0NvcHkgPSBjbG9uZURlZXAocmVtb3Rlcyk7XG4gICAgY29uc3QgdGVtcCA9IEFycmF5LmlzQXJyYXkocGx1Z2lucykgPyBwbHVnaW5zIDogW3BsdWdpbnNdO1xuXG4gICAgdGVtcC5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRleHRQYXRoLCBtb2R1bGVOYW1lIH0gPSB0aGlzLnBhcnNlUGx1Z2luSWQocGx1Z2luLmlkKTtcbiAgICAgIGlmICghY29udGV4dFBhdGggfHwgIW1vZHVsZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdPy5sZW5ndGggPj0gMFxuICAgICAgICA/IHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXS5wdXNoKG1vZHVsZU5hbWUpXG4gICAgICAgIDogKHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSA9IFtdKS5wdXNoKG1vZHVsZU5hbWUpO1xuICAgICAgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdID0gWy4uLm5ldyBTZXQocmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdKV07XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlbW90ZXNDb3B5O1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVQbHVnaW5zRnJvbVJlbW90ZXMoXG4gICAgcmVtb3RlczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLFxuICAgIHBsdWdpbnM6IEFwcGxpY2F0aW9uUGx1Z2luIHwgQXBwbGljYXRpb25QbHVnaW5bXVxuICApIHtcbiAgICBpZiAoIXJlbW90ZXMgfHwgIXBsdWdpbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVtb3Rlc0NvcHkgPSBjbG9uZURlZXAocmVtb3Rlcyk7XG4gICAgY29uc3QgdGVtcCA9IEFycmF5LmlzQXJyYXkocGx1Z2lucykgPyBwbHVnaW5zIDogW3BsdWdpbnNdO1xuXG4gICAgdGVtcC5mb3JFYWNoKHBsdWdpbiA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRleHRQYXRoLCBtb2R1bGVOYW1lIH0gPSB0aGlzLnBhcnNlUGx1Z2luSWQocGx1Z2luLmlkKTtcbiAgICAgIGlmICghY29udGV4dFBhdGggfHwgIW1vZHVsZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdID0gcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdLmZpbHRlcihwID0+IHAgIT09IG1vZHVsZU5hbWUpO1xuICAgICAgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdID0gWy4uLm5ldyBTZXQocmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdKV07XG4gICAgICBpZiAocmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgcmVtb3Rlc0NvcHlbY29udGV4dFBhdGhdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZW1vdGVzQ29weTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUGx1Z2luSWQoY29udGV4dFBhdGg6IHN0cmluZywgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbiwgdmVyc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7Y29udGV4dFBhdGh9QCR7dmVyc2lvbn0vJHtwbHVnaW4ubW9kdWxlfWA7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlUGx1Z2luSWQoaWQ6IHN0cmluZyk6IHsgY29udGV4dFBhdGg6IHN0cmluZzsgbW9kdWxlTmFtZTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IFtjb250ZXh0UGF0aCwgbW9kdWxlTmFtZV0gPSBpZC5zcGxpdCgnLycpO1xuICAgIHJldHVybiB7IGNvbnRleHRQYXRoLCBtb2R1bGVOYW1lIH07XG4gIH1cbn1cbiJdfQ==
|
|
285
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9wbHVnaW5zL3BsdWdpbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFDTCx1QkFBdUIsRUFLeEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7O0FBSXBDLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQ1Usa0JBQXNDLEVBQ3RDLGVBQWdDO1FBRGhDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQ3ZDLENBQUM7SUFFSiwwRkFBMEY7SUFDMUYseUJBQXlCO0lBQ3pCLDZFQUE2RTtJQUM3RSw2RkFBNkY7SUFDN0YsSUFBSTtJQUVKOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQWMsRUFBRTtRQUNqQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0Is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QUFDO0lBRU8sY0FBYyxDQUFDLFdBQW1CLEVBQUUsTUFBeUIsRUFBRSxPQUFlO1FBQ3BGLE9BQU8sR0FBRyxXQUFXLElBQUksT0FBTyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRU8sYUFBYSxDQUFDLEVBQVU7UUFDOUIsTUFBTSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDckMsQ0FBQzs7MkdBcldVLGNBQWM7K0dBQWQsY0FBYzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksXG4gIEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyxcbiAgSUFwcGxpY2F0aW9uLFxuICBJQXBwbGljYXRpb25WZXJzaW9uLFxuICBJTWFuaWZlc3Rcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hcGknO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBnZXQsIHVuaXFCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBjb2VyY2UsIGNvbXBhcmUgfSBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ3JvdXBCeSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblBsdWdpbiwgUGx1Z2luc0NvbmZpZyB9IGZyb20gJy4vcGx1Z2lucy5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQbHVnaW5zU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXBwbGljYXRpb25TZXJ2aWNlOiBBcHBsaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcHBTdGF0ZVNlcnZpY2U6IEFwcFN0YXRlU2VydmljZVxuICApIHt9XG5cbiAgLy8gVE9ETyBWZXJpZnkgaWYgd2Ugc2hvdWxkIGxpc3QgcGFja2FnZXMgdXNpbmcgbGlzdEJ5VGVuYW50IG9yIGJhc2VkIG9uIGFsbCBhcHBsaWNhdGlvbnMuXG4gIC8vIGFzeW5jIGxpc3RQYWNrYWdlcygpIHtcbiAgLy8gICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmxpc3QoeyBwYWdlU2l6ZTogMjAwMCB9KTtcbiAgLy8gICByZXR1cm4gZGF0YS5maWx0ZXIoKGFwcDogYW55KSA9PiBhcHAuZXhwb3J0cyB8fCAoYXBwLm1hbmlmZXN0ICYmIGFwcC5tYW5pZmVzdC5leHBvcnRzKSk7XG4gIC8vIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBhIGxpc3Qgb2YgYXZhaWxhYmxlIHBhY2thZ2VzLlxuICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycy5cbiAgICogQHJldHVybnMgUmV0dXJucyBhIGxpc3Qgb2YgcGFja2FnZXMuXG4gICAqL1xuICBhc3luYyBsaXN0UGFja2FnZXMocGFyYW1zOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5saXN0QXBwbGljYXRpb25zQnlDdXJyZW50VGVuYW50KHBhcmFtcyk7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApKTtcbiAgICBjb25zdCB1bmlxdWVXZWJBcHBzID0gdGhpcy5yZW1vdmVEdXBsaWNhdGVzKHdlYkFwcHMsICdjb250ZXh0UGF0aCcpO1xuICAgIHJldHVybiB1bmlxdWVXZWJBcHBzLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbiBhcHBsaWNhdGlvbiBpcyBhIHBhY2thZ2UuXG4gICAqIEBwYXJhbSBhcHBsaWNhdGlvbiBBcHBsaWNhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgUmV0dXJucyB0cnVlIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBhIHBhY2thZ2UuXG4gICAqL1xuICBpc1BhY2thZ2UoYXBwbGljYXRpb246IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHBsaWNhdGlvbi5tYW5pZmVzdD8uaXNQYWNrYWdlID09PSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbW90ZXMgZmllbGQgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbmZpZ3VyYXRpb24gYnkgYWRkaW5nIG5ldyBwbHVnaW5zLlxuICAgKiBJbXBvcnRhbnQ6IGlmIHRoZSByZW1vdGVzIG9iamVjdCBpcyBub3Qgc2V0IG9uIHRoZSBjb25maWd1cmF0aW9uIG9iamVjdCxcbiAgICogcmVtb3RlcyB3aWxsIG5vdCBiZSBhZGRlZC4gTWFrZSBzdXJlIHRoYXQgdGhpcyBvYmplY3QgZXhpc3RzIGluIHRoZSBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBwbHVnaW5zIExpc3Qgb2YgcmVtb3RlcyB0byBiZSBhZGRlZC5cbiAgICogQHJldHVybnMgUmV0dXJucyB1cGRhdGVkIGFwcGxpY2F0aW9uIHJlbW90ZXMuXG4gICAqL1xuICBhc3luYyBhZGRSZW1vdGVzKFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25QbHVnaW4gfCBBcHBsaWNhdGlvblBsdWdpbltdXG4gICk6IFByb21pc2U8QXBwbGljYXRpb25SZW1vdGVQbHVnaW5zPiB7XG4gICAgY29uc3QgYXBwQ29uZmlnUmVtb3RlcyA9IChhcHBsaWNhdGlvbj8uY29uZmlnIGFzIFBsdWdpbnNDb25maWcpPy5yZW1vdGVzO1xuICAgIGlmIChhcHBDb25maWdSZW1vdGVzKSB7XG4gICAgICBjb25zdCBuZXdSZW1vdGVzID0gdGhpcy5hZGRQbHVnaW5Ub1JlbW90ZXMoYXBwQ29uZmlnUmVtb3RlcywgcGx1Z2lucyk7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVSZW1vdGVzSW5BcHBDb25maWcoYXBwbGljYXRpb24sIG5ld1JlbW90ZXMpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcmVtb3RlcyBmaWVsZCBpbiB0aGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiBieSByZW1vdmluZyBwbHVnaW5zLlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBwbHVnaW5zIExpc3Qgb2YgcmVtb3RlcyB0byBiZSByZW1vdmVkLlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIHVwZGF0ZWQgYXBwbGljYXRpb24gcmVtb3Rlcy5cbiAgICovXG4gIGFzeW5jIHJlbW92ZVJlbW90ZXMoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbiB8IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKTogUHJvbWlzZTxBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnM+IHtcbiAgICBjb25zdCBhcHBDb25maWdSZW1vdGVzID0gKGFwcGxpY2F0aW9uPy5jb25maWcgYXMgUGx1Z2luc0NvbmZpZyk/LnJlbW90ZXM7XG4gICAgY29uc3QgbmV3UmVtb3RlcyA9IHRoaXMucmVtb3ZlUGx1Z2luc0Zyb21SZW1vdGVzKGFwcENvbmZpZ1JlbW90ZXMsIHBsdWdpbnMpO1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnVwZGF0ZVJlbW90ZXNJbkFwcENvbmZpZyhhcHBsaWNhdGlvbiwgbmV3UmVtb3Rlcyk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcmVtb3RlcyBmaWVsZCBpbiB0aGUgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gcGx1Z2lucyBMaXN0IG9mIHJlbW90ZXMgdG8gYmUgYWRkZWQuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdXBkYXRlZCBhcHBsaWNhdGlvbiByZW1vdGVzLlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlUmVtb3Rlc0luQXBwQ29uZmlnKFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zXG4gICk6IFByb21pc2U8QXBwbGljYXRpb25SZW1vdGVQbHVnaW5zPiB7XG4gICAgY29uc3QgdXBkYXRlZEFwcFdpdGhDb25maWcgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGVBcHBsaWNhdGlvbkNvbmZpZyhcbiAgICAgIGFwcGxpY2F0aW9uLFxuICAgICAge1xuICAgICAgICByZW1vdGVzOiBwbHVnaW5zXG4gICAgICB9IGFzIFBsdWdpbnNDb25maWdcbiAgICApO1xuICAgIHJldHVybiB1cGRhdGVkQXBwV2l0aENvbmZpZz8uY29uZmlnPy5yZW1vdGVzIHx8IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGFwcGxpY2F0aW9uIG1hbmlmZXN0LlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGFwcGxpY2F0aW9uIG1hbmlmZXN0LlxuICAgKi9cbiAgYXN5bmMgZ2V0Q3VtdWxvY2l0eUpzb25GaWxlKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pIHtcbiAgICBjb25zdCBjOHlKc29uID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0QXBwTWFuaWZlc3QoYXBwbGljYXRpb24pO1xuICAgIGlmICghYzh5SnNvbi5yZW1vdGVzKSB7XG4gICAgICBjOHlKc29uLnJlbW90ZXMgPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIGM4eUpzb247XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiByZW1vdGVzIGluIHRoZSBjb25maWd1cmF0aW9uICh3aGVuIGl0J3MgbWlzc2luZyksIGJhc2VkIG9uIHRoZSBsaXN0IG9mIHJlbW90ZXMgYmVpbmcgaW4gdGhlIGFwcGxpY2F0aW9uIG1hbmlmZXN0LlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGEgbGlzdCBvZiByZW1vdGVzIHRoYXQgaGFzIGJlZW4gYXNzaWduZWQgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxuICAgKi9cbiAgYXN5bmMgc2V0SW5pdGlhbFJlbW90ZXMoYXBwbGljYXRpb246IElBcHBsaWNhdGlvbikge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtYW5pZmVzdFJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyA9IChcbiAgICAgICAgYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbkZpbGUoYXBwbGljYXRpb24pXG4gICAgICApPy5yZW1vdGVzO1xuXG4gICAgICBpZiAobWFuaWZlc3RSZW1vdGVzKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHJlbW90ZXMgaW4gdGhlIGNvbmZpZyBhZGQgcmVtb3RlcyBmcm9tIHRoZSBtYW5pZmVzdCBhcyBhbiBpbml0aWFsIHZhbHVlIGlmIHRoZXJlIGFyZSBzb21lLlxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVSZW1vdGVzSW5BcHBDb25maWcoYXBwbGljYXRpb24sIG1hbmlmZXN0UmVtb3Rlcyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNvcnRzIHZlcnNpb25zIGxpc3Qgb3IgbGlzdCBvZiBvYmplY3RzIGJ5IHZlcnNpb24gcHJvcGVydHlcbiAgICogQHJldHVybnMgbGlzdCBvZiB2ZXJzaW9ucyBhcyBhcnJheSBvZiBzdHJpbmdzIG9yIGFycmF5IG9mIG9iamVjdHMgc29ydGVkIGJ5IHZlcnNpb24gcHJvcGVydHlcbiAgICpcbiAgICogQHBhcmFtIHt7IGxpc3Q6IFRbXTsgcGF0aDogc3RyaW5nW10gfSB8IHN0cmluZ1tdfSBzb3VyY2UgZGF0YSB0byBzb3J0XG4gICAqIEBwYXJhbSB7J2FzYycgfCAnZGVzYyd9IG9yZGVyIGFzY2VuZGluZyBvciBkZXNjZW5kaW5nIG9yZGVyIG9mIHNvcnRpbmdcbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBkYXRhID0gWycxLjUuMCcsICcyLjAuMCddO1xuICAgKiBjb25zdCBzb3J0ZWREYXRhID0gcGx1Z2luc1NlcnZpY2Uuc29ydFZlcnNpb25zKHZlcnNpb25zLCAnZGVzYycpO1xuICAgKiAvLyBzb3J0ZWREYXRhOlxuICAgKiAvLyBbJzIuMC4wJywgJzEuNS4wJ11cbiAgICogYGBgXG4gICAqXG4gICAqICoqRXhhbXBsZSoqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZGF0YSA9IFtcbiAgICogIHthcHA6IHthcHBWZXJzaW9uOiAnMS41LjAnfX0sXG4gICAqICB7YXBwOiB7YXBwVmVyc2lvbjogJzIuMC4wJ319LFxuICAgKiBdO1xuICAgKiBjb25zdCBzb3J0ZWREYXRhID0gcGx1Z2luc1NlcnZpY2Uuc29ydFZlcnNpb25zKHtsaXN0OiBkYXRhLCBwYXRoOiBbJ2FwcCcsICdhcHBWZXJzaW9uJ119LCAnZGVzYycpO1xuICAgKiAvLyBzb3J0ZWREYXRhOlxuICAgKiAvLyBbXG4gICAqIC8vICB7YXBwOiB7YXBwVmVyc2lvbjogJzIuMC4wJ319LFxuICAgKiAvLyAge2FwcDoge2FwcFZlcnNpb246ICcxLjUuMCd9fVxuICAgKiAvLyBdXG4gICAqIGBgYFxuICAgKi9cbiAgc29ydFZlcnNpb25zPFQ+KHNvdXJjZTogeyBsaXN0OiBUW107IHBhdGg6IHN0cmluZ1tdIH0sIG9yZGVyOiAnYXNjJyB8ICdkZXNjJyk6IFRbXTtcbiAgc29ydFZlcnNpb25zKHNvdXJjZTogc3RyaW5nW10sIG9yZGVyOiAnYXNjJyB8ICdkZXNjJyk6IHN0cmluZ1tdO1xuICBzb3J0VmVyc2lvbnMoc291cmNlOiBhbnksIG9yZGVyOiAnYXNjJyB8ICdkZXNjJyk6IGFueSB7XG4gICAgY29uc3Qgc291cmNlQ29weSA9IGNsb25lRGVlcChzb3VyY2UpO1xuICAgIGlmIChzb3VyY2UubGlzdCAmJiBzb3VyY2UucGF0aCkge1xuICAgICAgY29uc3QgcGF0aCA9IHNvdXJjZUNvcHkucGF0aC5qb2luKCcuJyk7XG4gICAgICByZXR1cm4gc291cmNlQ29weS5saXN0LnNvcnQoXG4gICAgICAgIChhLCBiKSA9PiBjb21wYXJlKGNvZXJjZShnZXQoYSwgcGF0aCkpLCBjb2VyY2UoZ2V0KGIsIHBhdGgpKSkgKiAob3JkZXIgPT09ICdhc2MnID8gMSA6IC0xKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNvdXJjZUNvcHkuc29ydCgoYSwgYikgPT4gY29tcGFyZShjb2VyY2UoYSksIGNvZXJjZShiKSkgKiAob3JkZXIgPT09ICdhc2MnID8gMSA6IC0xKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGEgbGlzdCBvZiBleHBvcnRlZCBwbHVnaW5zIGZyb20gdGhlIGFwcGxpY2F0aW9uIG9iamVjdC5cbiAgICogQHBhcmFtIGFwcGxpY2F0aW9uIEFwcGxpY2F0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBSZXR1cm5zIGEgbGlzdCBvZiBleHBvcnRlZCBwbHVnaW5zLlxuICAgKi9cbiAgZ2V0TUZFeHBvcnRzKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pOiBBcHBsaWNhdGlvblBsdWdpbltdIHtcbiAgICBjb25zdCBtYW5pZmVzdDogUGFydGlhbDxJTWFuaWZlc3Q+ID0gYXBwbGljYXRpb24ubWFuaWZlc3Q7XG4gICAgaWYgKCFtYW5pZmVzdCB8fCAhbWFuaWZlc3QuZXhwb3J0cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5leHRlbmRQbHVnaW5zRGV0YWlscyhtYW5pZmVzdC5leHBvcnRzLCBhcHBsaWNhdGlvbi5jb250ZXh0UGF0aCwge1xuICAgICAgdmVyc2lvbjogbWFuaWZlc3QudmVyc2lvbixcbiAgICAgIGJpbmFyeUlkOiB1bmRlZmluZWRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBhIGxpc3Qgb2YgZXhwb3J0cyBmcm9tIGVhY2ggYXZhaWxhYmxlIHBhY2thZ2UuXG4gICAqIEByZXR1cm5zIFJldHVybnMgYSBsaXN0IG9mIGFsbCBleHBvcnRlZCBwbHVnaW5zLlxuICAgKi9cbiAgYXN5bmMgZ2V0QWxsTUZFeHBvcnRzKGFsbFZlcnNpb25zID0gZmFsc2UpOiBQcm9taXNlPEFwcGxpY2F0aW9uUGx1Z2luW10+IHtcbiAgICBjb25zdCBwbHVnaW5zID0gbmV3IEFycmF5PEFwcGxpY2F0aW9uUGx1Z2luPigpO1xuICAgIGNvbnN0IHBhY2thZ2VzID0gYXdhaXQgdGhpcy5saXN0UGFja2FnZXMoKTtcbiAgICBmb3IgKGNvbnN0IHBrZyBvZiBwYWNrYWdlcykge1xuICAgICAgaWYgKCFwa2c/Lm1hbmlmZXN0Py5leHBvcnRzKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGFsbFZlcnNpb25zICYmIEFycmF5LmlzQXJyYXkocGtnLmFwcGxpY2F0aW9uVmVyc2lvbnMpKSB7XG4gICAgICAgIHBrZy5hcHBsaWNhdGlvblZlcnNpb25zLmZvckVhY2godmVyc2lvbiA9PiB7XG4gICAgICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICAgICAgLi4udGhpcy5leHRlbmRQbHVnaW5zRGV0YWlscyhwa2cubWFuaWZlc3QuZXhwb3J0cywgcGtnLmNvbnRleHRQYXRoLCB2ZXJzaW9uKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICAgIC4uLnRoaXMuZXh0ZW5kUGx1Z2luc0RldGFpbHMocGtnLm1hbmlmZXN0LmV4cG9ydHMsIHBrZy5jb250ZXh0UGF0aCwge1xuICAgICAgICAgICAgdmVyc2lvbjogcGtnLm1hbmlmZXN0LnZlcnNpb24sXG4gICAgICAgICAgICBiaW5hcnlJZDogdW5kZWZpbmVkXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBsdWdpbnM7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgYSBsaXN0IG9mIHJlbW90ZXMgZnJvbSB0aGUgYXBwbGljYXRpb24gb2JqZWN0LlxuICAgKiBAcGFyYW0gYXBwbGljYXRpb24gQXBwbGljYXRpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEByZXR1cm5zIFJldHVybnMgbGlzdCBvZiByZW1vdGVzLlxuICAgKi9cbiAgZ2V0TUZSZW1vdGVzKGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24pOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMge1xuICAgIHJldHVybiAoYXBwbGljYXRpb24/LmNvbmZpZyBhcyBQbHVnaW5zQ29uZmlnKT8ucmVtb3RlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiBhbiBhcHBsaWNhdGlvbiBpcyBvd25lZCBieSBtYW5hZ2VtZW50IHRlbmFudC5cbiAgICpcbiAgICogQHBhcmFtIGFwcCBUaGUgYXBwbGljYXRpb24gdG8gdmVyaWZ5LlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIG93bmVkIGJ5IG1hbmFnZW1lbnQgdGVuYW50LlxuICAgKi9cbiAgaXNPd25lZEJ5TWFuYWdlbWVudChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFwcE93bmVyID0gZ2V0KGFwcCwgJ293bmVyLnRlbmFudC5pZCcpO1xuICAgIHJldHVybiBhcHBPd25lciA9PT0gJ21hbmFnZW1lbnQnO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEdXBsaWNhdGVzKGFwcHM6IElBcHBsaWNhdGlvbltdLCBrZXk6IHN0cmluZyk6IElBcHBsaWNhdGlvbltdIHtcbiAgICBjb25zdCB1bmlxdWVMaXN0OiBJQXBwbGljYXRpb25bXSA9IFtdO1xuICAgIGNvbnN0IGdyb3VwZWRBcHBzQnlLZXk6IFJlY29yZDxzdHJpbmcsIElBcHBsaWNhdGlvbltdPiA9IGdyb3VwQnkoYXBwcywga2V5KTtcbiAgICBjb25zdCBncm91cGVkQXBwczogSUFwcGxpY2F0aW9uW11bXSA9IE9iamVjdC5rZXlzKGdyb3VwZWRBcHBzQnlLZXkpLm1hcChcbiAgICAgIGtleSA9PiBncm91cGVkQXBwc0J5S2V5W2tleV1cbiAgICApO1xuICAgIGZvciAoY29uc3QgYXBwc0dyb3VwIG9mIGdyb3VwZWRBcHBzKSB7XG4gICAgICBpZiAoYXBwc0dyb3VwLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgdW5pcXVlTGlzdC5wdXNoKC4uLmFwcHNHcm91cCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhcHBGcm9tQ3VycmVudFRlbmFudCA9IGFwcHNHcm91cC5maW5kKGFwcCA9PiB0aGlzLmlzRnJvbUN1cnJlbnRUZW5hbnQoYXBwKSk7XG4gICAgICAgIGlmIChhcHBGcm9tQ3VycmVudFRlbmFudCkge1xuICAgICAgICAgIHVuaXF1ZUxpc3QucHVzaChhcHBGcm9tQ3VycmVudFRlbmFudCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXBwTm90T3duZWRCeU1hbmFnZW1lbnQgPSBhcHBzR3JvdXAuZmluZChhcHAgPT4gIXRoaXMuaXNPd25lZEJ5TWFuYWdlbWVudChhcHApKTtcbiAgICAgICAgdW5pcXVlTGlzdC5wdXNoKGFwcE5vdE93bmVkQnlNYW5hZ2VtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuaXF1ZUxpc3Q7XG4gIH1cblxuICBwcml2YXRlIGlzRnJvbUN1cnJlbnRUZW5hbnQoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLm93bmVyLnRlbmFudC5pZCA9PT0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZS5uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmaWVzIHRoZSBsaXN0IG9mIHBsdWdpbnMgdG8gaGF2ZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHN1Y2ggYXMgaWQuXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHByaXZhdGUgZXh0ZW5kUGx1Z2luc0RldGFpbHMoXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25QbHVnaW5bXSA9IFtdLFxuICAgIGNvbnRleHRQYXRoOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogSUFwcGxpY2F0aW9uVmVyc2lvblxuICApOiBBcHBsaWNhdGlvblBsdWdpbltdIHtcbiAgICBjb25zdCBleHRlbmRlZFBsdWdpbnMgPSBwbHVnaW5zLm1hcChwID0+ICh7XG4gICAgICAuLi5wLFxuICAgICAgaWQ6IHRoaXMuY3JlYXRlUGx1Z2luSWQoY29udGV4dFBhdGgsIHAsIHZlcnNpb24udmVyc2lvbiksXG4gICAgICBjb250ZXh0UGF0aCxcbiAgICAgIHZlcnNpb246IHZlcnNpb24udmVyc2lvbixcbiAgICAgIHRhZ3M6IHZlcnNpb24udGFncyB8fCBbXVxuICAgIH0pKTtcbiAgICByZXR1cm4gZXh0ZW5kZWRQbHVnaW5zO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsaXN0QXBwbGljYXRpb25zQnlDdXJyZW50VGVuYW50KHBhcmFtczogYW55ID0ge30pOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgZmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ0hPU1RFRCcsXG4gICAgICAgIHBhZ2VTaXplOiAyMDAwLFxuICAgICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBhcmFtc1xuICAgICk7XG4gICAgY29uc3Qgc2hhcmVkRmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRUQsXG4gICAgICAgIHR5cGU6ICdIT1NURUQnLFxuICAgICAgICBwYWdlU2l6ZTogMjAwMCxcbiAgICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWVcbiAgICAgIH0sXG4gICAgICBwYXJhbXNcbiAgICApO1xuXG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLmN1cnJlbnRUZW5hbnQudmFsdWUubmFtZTtcbiAgICBjb25zdCBbcmVzdWx0QXBwc093bmVkQnlUZW5hbnQsIHJlc3VsdFNoYXJlZEFwcHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdEJ5VGVuYW50KHRlbmFudE5hbWUsIGZpbHRlciksXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0KHNoYXJlZEZpbHRlcilcbiAgICBdKTtcbiAgICBjb25zdCB7IGRhdGE6IGFwcHNPd25lZEJ5VGVuYW50IH0gPSByZXN1bHRBcHBzT3duZWRCeVRlbmFudDtcbiAgICBjb25zdCB7IGRhdGE6IHNoYXJlZEFwcHMgfSA9IHJlc3VsdFNoYXJlZEFwcHM7XG4gICAgY29uc3Qgd2ViQXBwcyA9IFsuLi5hcHBzT3duZWRCeVRlbmFudCwgLi4uc2hhcmVkQXBwc107XG4gICAgcmV0dXJuIHVuaXFCeSh3ZWJBcHBzLCAoYXBwOiBJQXBwbGljYXRpb24pID0+IGFwcC5pZCk7XG4gIH1cblxuICBwcml2YXRlIGFkZFBsdWdpblRvUmVtb3RlcyhcbiAgICByZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMsXG4gICAgcGx1Z2luczogQXBwbGljYXRpb25QbHVnaW4gfCBBcHBsaWNhdGlvblBsdWdpbltdXG4gICk6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyB7XG4gICAgaWYgKCFwbHVnaW5zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbW90ZXNDb3B5ID0gY2xvbmVEZWVwKHJlbW90ZXMpO1xuICAgIGNvbnN0IHRlbXAgPSBBcnJheS5pc0FycmF5KHBsdWdpbnMpID8gcGx1Z2lucyA6IFtwbHVnaW5zXTtcblxuICAgIHRlbXAuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgY29uc3QgeyBjb250ZXh0UGF0aCwgbW9kdWxlTmFtZSB9ID0gdGhpcy5wYXJzZVBsdWdpbklkKHBsdWdpbi5pZCk7XG4gICAgICBpZiAoIWNvbnRleHRQYXRoIHx8ICFtb2R1bGVOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXT8ubGVuZ3RoID49IDBcbiAgICAgICAgPyByZW1vdGVzQ29weVtjb250ZXh0UGF0aF0ucHVzaChtb2R1bGVOYW1lKVxuICAgICAgICA6IChyZW1vdGVzQ29weVtjb250ZXh0UGF0aF0gPSBbXSkucHVzaChtb2R1bGVOYW1lKTtcbiAgICAgIHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSA9IFsuLi5uZXcgU2V0KHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSldO1xuICAgIH0pO1xuICAgIHJldHVybiByZW1vdGVzQ29weTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlUGx1Z2luc0Zyb21SZW1vdGVzKFxuICAgIHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucyxcbiAgICBwbHVnaW5zOiBBcHBsaWNhdGlvblBsdWdpbiB8IEFwcGxpY2F0aW9uUGx1Z2luW11cbiAgKSB7XG4gICAgaWYgKCFyZW1vdGVzIHx8ICFwbHVnaW5zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbW90ZXNDb3B5ID0gY2xvbmVEZWVwKHJlbW90ZXMpO1xuICAgIGNvbnN0IHRlbXAgPSBBcnJheS5pc0FycmF5KHBsdWdpbnMpID8gcGx1Z2lucyA6IFtwbHVnaW5zXTtcblxuICAgIHRlbXAuZm9yRWFjaChwbHVnaW4gPT4ge1xuICAgICAgY29uc3QgeyBjb250ZXh0UGF0aCwgbW9kdWxlTmFtZSB9ID0gdGhpcy5wYXJzZVBsdWdpbklkKHBsdWdpbi5pZCk7XG4gICAgICBpZiAoIWNvbnRleHRQYXRoIHx8ICFtb2R1bGVOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSA9IHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXS5maWx0ZXIocCA9PiBwICE9PSBtb2R1bGVOYW1lKTtcbiAgICAgIHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSA9IFsuLi5uZXcgU2V0KHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXSldO1xuICAgICAgaWYgKHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVsZXRlIHJlbW90ZXNDb3B5W2NvbnRleHRQYXRoXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVtb3Rlc0NvcHk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBsdWdpbklkKGNvbnRleHRQYXRoOiBzdHJpbmcsIHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sIHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2NvbnRleHRQYXRofUAke3ZlcnNpb259LyR7cGx1Z2luLm1vZHVsZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVBsdWdpbklkKGlkOiBzdHJpbmcpOiB7IGNvbnRleHRQYXRoOiBzdHJpbmc7IG1vZHVsZU5hbWU6IHN0cmluZyB9IHtcbiAgICBjb25zdCBbY29udGV4dFBhdGgsIG1vZHVsZU5hbWVdID0gaWQuc3BsaXQoJy8nKTtcbiAgICByZXR1cm4geyBjb250ZXh0UGF0aCwgbW9kdWxlTmFtZSB9O1xuICB9XG59XG4iXX0=
|
|
@@ -18691,7 +18691,8 @@ class PluginsService {
|
|
|
18691
18691
|
return __awaiter(this, void 0, void 0, function* () {
|
|
18692
18692
|
const apps = yield this.listApplicationsByCurrentTenant(params);
|
|
18693
18693
|
const webApps = apps.filter(app => this.isPackage(app));
|
|
18694
|
-
|
|
18694
|
+
const uniqueWebApps = this.removeDuplicates(webApps, 'contextPath');
|
|
18695
|
+
return uniqueWebApps.sort((a, b) => a.name.localeCompare(b.name));
|
|
18695
18696
|
});
|
|
18696
18697
|
}
|
|
18697
18698
|
/**
|
|
@@ -18847,6 +18848,39 @@ class PluginsService {
|
|
|
18847
18848
|
var _a;
|
|
18848
18849
|
return (_a = application === null || application === void 0 ? void 0 : application.config) === null || _a === void 0 ? void 0 : _a.remotes;
|
|
18849
18850
|
}
|
|
18851
|
+
/**
|
|
18852
|
+
* Verifies if an application is owned by management tenant.
|
|
18853
|
+
*
|
|
18854
|
+
* @param app The application to verify.
|
|
18855
|
+
* @returns True if owned by management tenant.
|
|
18856
|
+
*/
|
|
18857
|
+
isOwnedByManagement(app) {
|
|
18858
|
+
const appOwner = get(app, 'owner.tenant.id');
|
|
18859
|
+
return appOwner === 'management';
|
|
18860
|
+
}
|
|
18861
|
+
removeDuplicates(apps, key) {
|
|
18862
|
+
const uniqueList = [];
|
|
18863
|
+
const groupedAppsByKey = groupBy(apps, key);
|
|
18864
|
+
const groupedApps = Object.keys(groupedAppsByKey).map(key => groupedAppsByKey[key]);
|
|
18865
|
+
for (const appsGroup of groupedApps) {
|
|
18866
|
+
if (appsGroup.length < 2) {
|
|
18867
|
+
uniqueList.push(...appsGroup);
|
|
18868
|
+
}
|
|
18869
|
+
else {
|
|
18870
|
+
const appFromCurrentTenant = appsGroup.find(app => this.isFromCurrentTenant(app));
|
|
18871
|
+
if (appFromCurrentTenant) {
|
|
18872
|
+
uniqueList.push(appFromCurrentTenant);
|
|
18873
|
+
continue;
|
|
18874
|
+
}
|
|
18875
|
+
const appNotOwnedByManagement = appsGroup.find(app => !this.isOwnedByManagement(app));
|
|
18876
|
+
uniqueList.push(appNotOwnedByManagement);
|
|
18877
|
+
}
|
|
18878
|
+
}
|
|
18879
|
+
return uniqueList;
|
|
18880
|
+
}
|
|
18881
|
+
isFromCurrentTenant(app) {
|
|
18882
|
+
return app.owner.tenant.id === this.appStateService.currentTenant.value.name;
|
|
18883
|
+
}
|
|
18850
18884
|
/**
|
|
18851
18885
|
* Modifies the list of plugins to have additional information such as id.
|
|
18852
18886
|
* @ignore
|