@c8y/ngx-components 1021.63.2 → 1021.66.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts +7 -2
- package/auth-configuration/sso-configuration/template-parts/signature-configuration.component.d.ts.map +1 -1
- package/core/bottom-drawer/bottom-drawer-ref.d.ts +4 -0
- package/core/bottom-drawer/bottom-drawer-ref.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb-item.component.d.ts +1 -1
- package/core/breadcrumb/breadcrumb-item.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb-outlet.component.d.ts +1 -1
- package/core/breadcrumb/breadcrumb-outlet.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb.component.d.ts +1 -1
- package/core/breadcrumb/breadcrumb.component.d.ts.map +1 -1
- package/core/breadcrumb/breadcrumb.module.d.ts +7 -7
- package/core/breadcrumb/breadcrumb.module.d.ts.map +1 -1
- package/core/common/common.module.d.ts +38 -38
- package/core/common/date-format.service.d.ts +30 -0
- package/core/common/date-format.service.d.ts.map +1 -0
- package/core/common/date.pipe.d.ts +7 -3
- package/core/common/date.pipe.d.ts.map +1 -1
- package/core/common/index.d.ts +1 -0
- package/core/common/index.d.ts.map +1 -1
- package/core/common/outlet.directive.d.ts +1 -1
- package/core/common/outlet.directive.d.ts.map +1 -1
- package/core/common/user-preferences/user-preferences-store-current-user.d.ts +11 -0
- package/core/common/user-preferences/user-preferences-store-current-user.d.ts.map +1 -0
- package/core/common/user-preferences/user-preferences.service.d.ts +40 -1
- package/core/common/user-preferences/user-preferences.service.d.ts.map +1 -1
- package/core/date-picker/date-picker.component.d.ts +3 -1
- package/core/date-picker/date-picker.component.d.ts.map +1 -1
- package/core/date-time-picker/date-time-picker.component.d.ts +6 -3
- package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
- package/core/dynamic-forms/date/date.type.component.d.ts +3 -0
- package/core/dynamic-forms/date/date.type.component.d.ts.map +1 -1
- package/core/plugins/plugins.model.d.ts +1 -0
- package/core/plugins/plugins.model.d.ts.map +1 -1
- package/core/plugins/plugins.service.d.ts +7 -2
- package/core/plugins/plugins.service.d.ts.map +1 -1
- package/core/time-interval/time-interval.component.d.ts +4 -2
- package/core/time-interval/time-interval.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugin-readme.component.d.ts +15 -0
- package/ecosystem/application-plugins/application-plugin-readme.component.d.ts.map +1 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -2
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.module.d.ts +4 -3
- package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
- package/ecosystem/application-plugins/install-plugin.component.d.ts +8 -4
- package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/plugin-list.component.d.ts +10 -26
- package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/plugin-list.service.d.ts +27 -0
- package/ecosystem/application-plugins/plugin-list.service.d.ts.map +1 -0
- package/ecosystem/ecosystem.module.d.ts +2 -1
- package/ecosystem/ecosystem.module.d.ts.map +1 -1
- package/ecosystem/packages/package-changelog-tab/package-changelog-tab.component.d.ts +15 -0
- package/ecosystem/packages/package-changelog-tab/package-changelog-tab.component.d.ts.map +1 -0
- package/ecosystem/packages/package-changelog.guard.d.ts +10 -0
- package/ecosystem/packages/package-changelog.guard.d.ts.map +1 -0
- package/ecosystem/packages/package-details/package-details.component.d.ts +7 -9
- package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts +5 -1
- package/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts +8 -3
- package/ecosystem/packages/package-versions/package-contents/packages-contents.component.d.ts.map +1 -1
- package/ecosystem/packages/package-versions/packages-versions.component.d.ts +9 -2
- package/ecosystem/packages/package-versions/packages-versions.component.d.ts.map +1 -1
- package/ecosystem/shared/index.d.ts +1 -0
- package/ecosystem/shared/index.d.ts.map +1 -1
- package/ecosystem/shared/package-changelog/package-changelog.component.d.ts +24 -0
- package/ecosystem/shared/package-changelog/package-changelog.component.d.ts.map +1 -0
- package/ecosystem/shared/shared-ecosystem.module.d.ts +2 -1
- package/ecosystem/shared/shared-ecosystem.module.d.ts.map +1 -1
- package/esm2022/auth-configuration/sso-configuration/template-parts/signature-configuration.component.mjs +11 -7
- package/esm2022/core/bottom-drawer/bottom-drawer-ref.mjs +9 -3
- package/esm2022/core/breadcrumb/breadcrumb-item.component.mjs +3 -3
- package/esm2022/core/breadcrumb/breadcrumb-outlet.component.mjs +19 -9
- package/esm2022/core/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/core/breadcrumb/breadcrumb.module.mjs +16 -5
- package/esm2022/core/common/common.module.mjs +6 -6
- package/esm2022/core/common/date-format.service.mjs +81 -0
- package/esm2022/core/common/date.pipe.mjs +29 -6
- package/esm2022/core/common/index.mjs +2 -1
- package/esm2022/core/common/outlet.directive.mjs +4 -3
- package/esm2022/core/common/user-preferences/user-preferences-store-current-user.mjs +22 -0
- package/esm2022/core/common/user-preferences/user-preferences.service.mjs +106 -16
- package/esm2022/core/date-picker/date-picker.component.mjs +11 -4
- package/esm2022/core/date-time-picker/date-time-picker.component.mjs +20 -11
- package/esm2022/core/dynamic-forms/date/date.type.component.mjs +12 -4
- package/esm2022/core/plugins/plugins.model.mjs +1 -1
- package/esm2022/core/plugins/plugins.service.mjs +31 -5
- package/esm2022/core/time-interval/time-interval.component.mjs +9 -2
- package/esm2022/ecosystem/application-plugins/application-plugin-readme.component.mjs +26 -0
- package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +29 -14
- package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +6 -3
- package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +21 -15
- package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +3 -3
- package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +26 -202
- package/esm2022/ecosystem/application-plugins/plugin-list.service.mjs +200 -0
- package/esm2022/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.mjs +3 -3
- package/esm2022/ecosystem/application-properties/update-application-modal/update-application-modal.component.mjs +1 -1
- package/esm2022/ecosystem/ecosystem.module.mjs +21 -5
- package/esm2022/ecosystem/packages/package-changelog-tab/package-changelog-tab.component.mjs +33 -0
- package/esm2022/ecosystem/packages/package-changelog.guard.mjs +22 -0
- package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +25 -44
- package/esm2022/ecosystem/packages/package-versions/package-contents/contents-plugins/contents-plugins.component.mjs +14 -4
- package/esm2022/ecosystem/packages/package-versions/package-contents/packages-contents.component.mjs +27 -8
- package/esm2022/ecosystem/packages/package-versions/packages-versions.component.mjs +22 -8
- package/esm2022/ecosystem/shared/index.mjs +2 -1
- package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +3 -3
- package/esm2022/ecosystem/shared/package-changelog/package-changelog.component.mjs +82 -0
- package/esm2022/ecosystem/shared/package-version-select/package-version-select.component.mjs +3 -3
- package/esm2022/ecosystem/shared/shared-ecosystem.module.mjs +12 -6
- package/esm2022/operations/bulk-operation-scheduler/operation-scheduler.component.mjs +9 -7
- package/esm2022/operations/bulk-operations-list/bulk-operations-list.component.mjs +1 -1
- package/esm2022/upgrade/ng1/downgraded.services.mjs +3 -2
- package/esm2022/upgrade/ng1/index.mjs +3 -2
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +9 -5
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +209 -142
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +96 -13
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +336 -186
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs +7 -5
- package/fesm2022/c8y-ngx-components-operations-bulk-operation-scheduler.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-bulk-operations-list.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs +3 -1
- package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +833 -550
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +45 -6
- package/locales/es.po +45 -6
- package/locales/fr.po +45 -6
- package/locales/ja_JP.po +45 -6
- package/locales/ko.po +45 -6
- package/locales/locales.pot +42 -6
- package/locales/nl.po +45 -6
- package/locales/pl.po +45 -6
- package/locales/pt_BR.po +45 -6
- package/locales/zh_CN.po +45 -6
- package/locales/zh_TW.po +45 -6
- package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts +4 -2
- package/operations/bulk-operation-scheduler/operation-scheduler.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/upgrade/ng1/downgraded.services.d.ts +1 -0
- package/upgrade/ng1/downgraded.services.d.ts.map +1 -1
- package/upgrade/ng1/index.d.ts.map +1 -1
|
@@ -20,11 +20,11 @@ export class PluginListItemComponent {
|
|
|
20
20
|
this.isItemSelected.next(event);
|
|
21
21
|
}
|
|
22
22
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PluginListItemComponent, deps: [{ token: i1.PluginsService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
23
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PluginListItemComponent, selector: "c8y-plugin-list-item", inputs: { plugin: "plugin", selectable: "selectable", hideSource: "hideSource" }, outputs: { isItemSelected: "isItemSelected" }, ngImport: i0, template: "<c8y-li-checkbox\n class=\"p-r-16 p-l-0\"\n (change)=\"onChange($event.target.checked)\"\n *ngIf=\"selectable\"\n [disabled]=\"plugin.installed\"\n [selected]=\"plugin.selected\"\n></c8y-li-checkbox>\n<c8y-li-icon class=\"p-l-0 text-center\">\n <i class=\"c8y-plugin-icon\">\n <span>{{ plugin.name?.substr(0, 2) }}</span>\n </i>\n</c8y-li-icon>\n<div class=\"p-relative\">\n <div [ngClass]=\"{ 'p-r-8': selectable }\">\n <p>\n <span class=\"text-medium\">{{ plugin.name }}</span>\n <em class=\"text-muted small m-l-8\">{{ plugin.version }}</em>\n <span *ngIf=\"plugin.installed\">\n <i\n class=\"text-success\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <em\n class=\"text-muted small\"\n translate\n >\n Installed`plugins`\n </em>\n </span>\n </p>\n <p class=\"small l-h-tight\">{{ plugin.description }}</p>\n </div>\n\n <span\n class=\"tag tag--info a-s-start m-t-8\"\n *ngIf=\"selectable && !hideSource\"\n >\n {{ plugin.contextPath }}\n </span>\n\n <span\n class=\"tag a-s-start m-t-8 m-l-4\"\n [ngClass]=\"{\n 'tag--default': packageType === PACKAGE_TYPE.COMMUNITY,\n 'tag--primary': packageType === PACKAGE_TYPE.OFFICIAL\n }\"\n >\n {{ plugin.originApp?.label || plugin.originApp?.manifest?.label | translatePackageLabel }}\n </span>\n</div>\n", dependencies: [{ kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i1.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "pipe", type: i3.TranslatePackageLabelPipe, name: "translatePackageLabel" }] }); }
|
|
23
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PluginListItemComponent, selector: "c8y-plugin-list-item", inputs: { plugin: "plugin", selectable: "selectable", hideSource: "hideSource" }, outputs: { isItemSelected: "isItemSelected" }, ngImport: i0, template: "<c8y-li-checkbox\n class=\"p-r-16 p-l-0\"\n (change)=\"onChange($event.target.checked)\"\n *ngIf=\"selectable\"\n [disabled]=\"plugin.installed\"\n [selected]=\"plugin.selected\"\n></c8y-li-checkbox>\n<c8y-li-icon class=\"p-l-0 text-center\">\n <i class=\"c8y-plugin-icon\">\n <span>{{ plugin.name?.substr(0, 2) }}</span>\n </i>\n</c8y-li-icon>\n<div class=\"p-relative flex-grow\">\n <div [ngClass]=\"{ 'p-r-8': selectable }\">\n <p>\n <span class=\"text-medium\">{{ plugin.name }}</span>\n <em class=\"text-muted small m-l-8\">{{ plugin.version }}</em>\n <span *ngIf=\"plugin.installed\">\n <i\n class=\"text-success\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <em\n class=\"text-muted small\"\n translate\n >\n Installed`plugins`\n </em>\n </span>\n </p>\n <p class=\"small l-h-tight\">{{ plugin.description }}</p>\n </div>\n\n <span\n class=\"tag tag--info a-s-start m-t-8\"\n *ngIf=\"selectable && !hideSource\"\n >\n {{ plugin.contextPath }}\n </span>\n\n <span\n class=\"tag a-s-start m-t-8 m-l-4\"\n [ngClass]=\"{\n 'tag--default': packageType === PACKAGE_TYPE.COMMUNITY,\n 'tag--primary': packageType === PACKAGE_TYPE.OFFICIAL\n }\"\n >\n {{ plugin.originApp?.label || plugin.originApp?.manifest?.label | translatePackageLabel }}\n </span>\n</div>\n", dependencies: [{ kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.ListItemIconComponent, selector: "c8y-list-item-icon, c8y-li-icon", inputs: ["icon", "status"] }, { kind: "component", type: i1.ListItemCheckboxComponent, selector: "c8y-list-item-checkbox, c8y-li-checkbox", inputs: ["selected", "indeterminate", "disabled", "displayAsSwitch"], outputs: ["onSelect"] }, { kind: "pipe", type: i3.TranslatePackageLabelPipe, name: "translatePackageLabel" }] }); }
|
|
24
24
|
}
|
|
25
25
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PluginListItemComponent, decorators: [{
|
|
26
26
|
type: Component,
|
|
27
|
-
args: [{ selector: 'c8y-plugin-list-item', template: "<c8y-li-checkbox\n class=\"p-r-16 p-l-0\"\n (change)=\"onChange($event.target.checked)\"\n *ngIf=\"selectable\"\n [disabled]=\"plugin.installed\"\n [selected]=\"plugin.selected\"\n></c8y-li-checkbox>\n<c8y-li-icon class=\"p-l-0 text-center\">\n <i class=\"c8y-plugin-icon\">\n <span>{{ plugin.name?.substr(0, 2) }}</span>\n </i>\n</c8y-li-icon>\n<div class=\"p-relative\">\n <div [ngClass]=\"{ 'p-r-8': selectable }\">\n <p>\n <span class=\"text-medium\">{{ plugin.name }}</span>\n <em class=\"text-muted small m-l-8\">{{ plugin.version }}</em>\n <span *ngIf=\"plugin.installed\">\n <i\n class=\"text-success\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <em\n class=\"text-muted small\"\n translate\n >\n Installed`plugins`\n </em>\n </span>\n </p>\n <p class=\"small l-h-tight\">{{ plugin.description }}</p>\n </div>\n\n <span\n class=\"tag tag--info a-s-start m-t-8\"\n *ngIf=\"selectable && !hideSource\"\n >\n {{ plugin.contextPath }}\n </span>\n\n <span\n class=\"tag a-s-start m-t-8 m-l-4\"\n [ngClass]=\"{\n 'tag--default': packageType === PACKAGE_TYPE.COMMUNITY,\n 'tag--primary': packageType === PACKAGE_TYPE.OFFICIAL\n }\"\n >\n {{ plugin.originApp?.label || plugin.originApp?.manifest?.label | translatePackageLabel }}\n </span>\n</div>\n" }]
|
|
27
|
+
args: [{ selector: 'c8y-plugin-list-item', template: "<c8y-li-checkbox\n class=\"p-r-16 p-l-0\"\n (change)=\"onChange($event.target.checked)\"\n *ngIf=\"selectable\"\n [disabled]=\"plugin.installed\"\n [selected]=\"plugin.selected\"\n></c8y-li-checkbox>\n<c8y-li-icon class=\"p-l-0 text-center\">\n <i class=\"c8y-plugin-icon\">\n <span>{{ plugin.name?.substr(0, 2) }}</span>\n </i>\n</c8y-li-icon>\n<div class=\"p-relative flex-grow\">\n <div [ngClass]=\"{ 'p-r-8': selectable }\">\n <p>\n <span class=\"text-medium\">{{ plugin.name }}</span>\n <em class=\"text-muted small m-l-8\">{{ plugin.version }}</em>\n <span *ngIf=\"plugin.installed\">\n <i\n class=\"text-success\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <em\n class=\"text-muted small\"\n translate\n >\n Installed`plugins`\n </em>\n </span>\n </p>\n <p class=\"small l-h-tight\">{{ plugin.description }}</p>\n </div>\n\n <span\n class=\"tag tag--info a-s-start m-t-8\"\n *ngIf=\"selectable && !hideSource\"\n >\n {{ plugin.contextPath }}\n </span>\n\n <span\n class=\"tag a-s-start m-t-8 m-l-4\"\n [ngClass]=\"{\n 'tag--default': packageType === PACKAGE_TYPE.COMMUNITY,\n 'tag--primary': packageType === PACKAGE_TYPE.OFFICIAL\n }\"\n >\n {{ plugin.originApp?.label || plugin.originApp?.manifest?.label | translatePackageLabel }}\n </span>\n</div>\n" }]
|
|
28
28
|
}], ctorParameters: () => [{ type: i1.PluginsService }], propDecorators: { plugin: [{
|
|
29
29
|
type: Input
|
|
30
30
|
}], selectable: [{
|
|
@@ -34,4 +34,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
34
34
|
}], isItemSelected: [{
|
|
35
35
|
type: Output
|
|
36
36
|
}] } });
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxpc3QtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vYXBwbGljYXRpb24tcGx1Z2lucy9wbHVnaW4tbGlzdC1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9hcHBsaWNhdGlvbi1wbHVnaW5zL3BsdWdpbi1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQXFCLFdBQVcsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFNckYsTUFBTSxPQUFPLHVCQUF1QjtJQVVsQyxZQUFvQixhQUE2QjtRQUE3QixrQkFBYSxHQUFiLGFBQWEsQ0FBZ0I7UUFQeEMsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNsQixtQkFBYyxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXJFLGdCQUFXLEdBQWdCLFdBQVcsQ0FBQyxPQUFPLENBQUM7UUFFdEMsaUJBQVksR0FBRyxXQUFXLENBQUM7SUFFZ0IsQ0FBQztJQUVyRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBSztRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQzsrR0FuQlUsdUJBQXVCO21HQUF2Qix1QkFBdUIsNkxDUHBDLHk0Q0FrREE7OzRGRDNDYSx1QkFBdUI7a0JBSm5DLFNBQVM7K0JBQ0Usc0JBQXNCO21GQUl2QixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvblBsdWdpbiwgUGFja2FnZVR5cGUsIFBsdWdpbnNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1wbHVnaW4tbGlzdC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BsdWdpbi1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBsdWdpbkxpc3RJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbjtcbiAgQElucHV0KCkgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgaGlkZVNvdXJjZSA9IGZhbHNlO1xuICBAT3V0cHV0KCkgaXNJdGVtU2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwYWNrYWdlVHlwZTogUGFja2FnZVR5cGUgPSBQYWNrYWdlVHlwZS5VTktOT1dOO1xuXG4gIHJlYWRvbmx5IFBBQ0tBR0VfVFlQRSA9IFBhY2thZ2VUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGx1Z2luU2VydmljZTogUGx1Z2luc1NlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5wYWNrYWdlVHlwZSA9IHRoaXMucGx1Z2luU2VydmljZS5nZXRQYWNrYWdlVHlwZSh0aGlzLnBsdWdpbi5vcmlnaW5BcHApO1xuICB9XG5cbiAgb25DaGFuZ2UoZXZlbnQpIHtcbiAgICB0aGlzLnBsdWdpbi5zZWxlY3RlZCA9ICF0aGlzLnBsdWdpbi5zZWxlY3RlZDtcbiAgICB0aGlzLmlzSXRlbVNlbGVjdGVkLm5leHQoZXZlbnQpO1xuICB9XG59XG4iLCI8Yzh5LWxpLWNoZWNrYm94XG4gIGNsYXNzPVwicC1yLTE2IHAtbC0wXCJcbiAgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQudGFyZ2V0LmNoZWNrZWQpXCJcbiAgKm5nSWY9XCJzZWxlY3RhYmxlXCJcbiAgW2Rpc2FibGVkXT1cInBsdWdpbi5pbnN0YWxsZWRcIlxuICBbc2VsZWN0ZWRdPVwicGx1Z2luLnNlbGVjdGVkXCJcbj48L2M4eS1saS1jaGVja2JveD5cbjxjOHktbGktaWNvbiBjbGFzcz1cInAtbC0wIHRleHQtY2VudGVyXCI+XG4gIDxpIGNsYXNzPVwiYzh5LXBsdWdpbi1pY29uXCI+XG4gICAgPHNwYW4+e3sgcGx1Z2luLm5hbWU/LnN1YnN0cigwLCAyKSB9fTwvc3Bhbj5cbiAgPC9pPlxuPC9jOHktbGktaWNvbj5cbjxkaXYgY2xhc3M9XCJwLXJlbGF0aXZlIGZsZXgtZ3Jvd1wiPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3Atci04Jzogc2VsZWN0YWJsZSB9XCI+XG4gICAgPHA+XG4gICAgICA8c3BhbiBjbGFzcz1cInRleHQtbWVkaXVtXCI+e3sgcGx1Z2luLm5hbWUgfX08L3NwYW4+XG4gICAgICA8ZW0gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG0tbC04XCI+e3sgcGx1Z2luLnZlcnNpb24gfX08L2VtPlxuICAgICAgPHNwYW4gKm5nSWY9XCJwbHVnaW4uaW5zdGFsbGVkXCI+XG4gICAgICAgIDxpXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LXN1Y2Nlc3NcIlxuICAgICAgICAgIFtjOHlJY29uXT1cIidjaGVjay1jaXJjbGUnXCJcbiAgICAgICAgPjwvaT5cbiAgICAgICAgPGVtXG4gICAgICAgICAgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgPlxuICAgICAgICAgIEluc3RhbGxlZGBwbHVnaW5zYFxuICAgICAgICA8L2VtPlxuICAgICAgPC9zcGFuPlxuICAgIDwvcD5cbiAgICA8cCBjbGFzcz1cInNtYWxsIGwtaC10aWdodFwiPnt7IHBsdWdpbi5kZXNjcmlwdGlvbiB9fTwvcD5cbiAgPC9kaXY+XG5cbiAgPHNwYW5cbiAgICBjbGFzcz1cInRhZyB0YWctLWluZm8gYS1zLXN0YXJ0IG0tdC04XCJcbiAgICAqbmdJZj1cInNlbGVjdGFibGUgJiYgIWhpZGVTb3VyY2VcIlxuICA+XG4gICAge3sgcGx1Z2luLmNvbnRleHRQYXRoIH19XG4gIDwvc3Bhbj5cblxuICA8c3BhblxuICAgIGNsYXNzPVwidGFnIGEtcy1zdGFydCBtLXQtOCBtLWwtNFwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgJ3RhZy0tZGVmYXVsdCc6IHBhY2thZ2VUeXBlID09PSBQQUNLQUdFX1RZUEUuQ09NTVVOSVRZLFxuICAgICAgJ3RhZy0tcHJpbWFyeSc6IHBhY2thZ2VUeXBlID09PSBQQUNLQUdFX1RZUEUuT0ZGSUNJQUxcbiAgICB9XCJcbiAgPlxuICAgIHt7IHBsdWdpbi5vcmlnaW5BcHA/LmxhYmVsIHx8IHBsdWdpbi5vcmlnaW5BcHA/Lm1hbmlmZXN0Py5sYWJlbCB8IHRyYW5zbGF0ZVBhY2thZ2VMYWJlbCB9fVxuICA8L3NwYW4+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -1,28 +1,14 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { EcosystemService, PRODUCT_EXPERIENCE_ECOSYSTEM } from '@c8y/ngx-components/ecosystem/shared';
|
|
5
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
6
|
-
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
7
|
-
import { BehaviorSubject, firstValueFrom, Observable } from 'rxjs';
|
|
8
|
-
import { AppsToUpdateRemotesSelectComponent } from './apps-to-update-remotes-select.component';
|
|
9
|
-
import { pick } from 'lodash-es';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { PluginListService } from './plugin-list.service';
|
|
10
4
|
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "
|
|
12
|
-
import * as i2 from "ngx-
|
|
13
|
-
import * as i3 from "@
|
|
14
|
-
import * as i4 from "
|
|
15
|
-
import * as i5 from "@angular/common";
|
|
16
|
-
import * as i6 from "./plugin-list-item.component";
|
|
5
|
+
import * as i1 from "./plugin-list.service";
|
|
6
|
+
import * as i2 from "@c8y/ngx-components";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
import * as i4 from "./plugin-list-item.component";
|
|
17
9
|
export class PluginListComponent {
|
|
18
|
-
constructor(
|
|
19
|
-
this.
|
|
20
|
-
this.bsModalService = bsModalService;
|
|
21
|
-
this.pluginsService = pluginsService;
|
|
22
|
-
this.alertService = alertService;
|
|
23
|
-
this.translateService = translateService;
|
|
24
|
-
this.gainsightService = gainsightService;
|
|
25
|
-
this.humanizeAppNamePipe = humanizeAppNamePipe;
|
|
10
|
+
constructor(pluginListService) {
|
|
11
|
+
this.pluginListService = pluginListService;
|
|
26
12
|
this.CURRENT_LOCATION = location.href;
|
|
27
13
|
this.emptyListText = '';
|
|
28
14
|
this.hideSource = false;
|
|
@@ -31,200 +17,34 @@ export class PluginListComponent {
|
|
|
31
17
|
*/
|
|
32
18
|
this.installable = false;
|
|
33
19
|
this.selectedItems = new EventEmitter();
|
|
34
|
-
this.
|
|
20
|
+
this.showOverview = new EventEmitter();
|
|
35
21
|
this.selectedPlugins = {};
|
|
36
|
-
this.updatingPluginId =
|
|
37
|
-
this.appsDisabled = new Set();
|
|
22
|
+
this.updatingPluginId = this.pluginListService.updatingPluginId;
|
|
38
23
|
}
|
|
39
24
|
updateSelectedItems(selected, plugin) {
|
|
40
25
|
this.selectedPlugins[plugin.id] = selected ? plugin : undefined;
|
|
41
26
|
const onlyInstalledPlugins = Object.values(this.selectedPlugins).filter(Boolean);
|
|
42
27
|
this.selectedItems.emit(onlyInstalledPlugins);
|
|
43
28
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
async uninstallPlugin(plugin) {
|
|
48
|
-
await this.updateAppRemotes(plugin, 'uninstall');
|
|
49
|
-
}
|
|
50
|
-
async updateAppRemotes(plugin, updateType) {
|
|
51
|
-
this.updatingPluginId[updateType] = plugin?.id;
|
|
52
|
-
let initialState;
|
|
53
|
-
try {
|
|
54
|
-
const apps = await this.getAppsForUpdate(plugin, updateType);
|
|
55
|
-
initialState = {
|
|
56
|
-
apps,
|
|
57
|
-
updateType,
|
|
58
|
-
pluginName: plugin.name,
|
|
59
|
-
appsDisabled: this.appsDisabled
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
catch (e) {
|
|
63
|
-
this.alertService.addServerFailure(e);
|
|
64
|
-
this.updatingPluginId[updateType] = '';
|
|
29
|
+
showPluginOverview(plugin) {
|
|
30
|
+
if (plugin?.id === this.selectedPlugin?.id) {
|
|
65
31
|
return;
|
|
66
32
|
}
|
|
67
|
-
|
|
68
|
-
try {
|
|
69
|
-
selectedApps = await this.selectApps(initialState);
|
|
70
|
-
if (!selectedApps) {
|
|
71
|
-
this.updatingPluginId[updateType] = '';
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
// unreached
|
|
77
|
-
}
|
|
78
|
-
if (updateType === 'install') {
|
|
79
|
-
const isArchived = await this.ecosystemService.verifyArchived([plugin]);
|
|
80
|
-
if (!isArchived) {
|
|
81
|
-
this.updatingPluginId[updateType] = '';
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
const licensesVerifiedByUser = await this.ecosystemService.verifyLicenses([plugin]);
|
|
85
|
-
if (!licensesVerifiedByUser) {
|
|
86
|
-
this.updatingPluginId[updateType] = '';
|
|
87
|
-
return;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
for (const app of selectedApps) {
|
|
91
|
-
try {
|
|
92
|
-
if (updateType === 'install') {
|
|
93
|
-
const versionIsCompatible = await this.ecosystemService.verifyPluginVersionsCompatibility([plugin], app);
|
|
94
|
-
if (!versionIsCompatible) {
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
await this.handleRemotesUpdate(app, plugin, updateType);
|
|
99
|
-
const humanizedAppName = await firstValueFrom(this.humanizeAppNamePipe.transform(app));
|
|
100
|
-
const successText = updateType === 'install'
|
|
101
|
-
? this.translateService.instant(gettext('Plugin installed to application "{{ appName }}".'), {
|
|
102
|
-
appName: humanizedAppName
|
|
103
|
-
})
|
|
104
|
-
: this.translateService.instant(gettext('Plugin uninstalled from application "{{ appName }}".'), { appName: humanizedAppName });
|
|
105
|
-
this.alertService.success(successText);
|
|
106
|
-
this.onUpdateEventHandleGS(plugin, app, updateType);
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
this.onUpdateEventHandleGS(plugin, app, updateType, error);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
this.updatingPluginId[updateType] = '';
|
|
33
|
+
this.showOverview.emit(plugin);
|
|
113
34
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
'name',
|
|
117
|
-
'contextPath',
|
|
118
|
-
'module',
|
|
119
|
-
'version',
|
|
120
|
-
'type',
|
|
121
|
-
'id'
|
|
122
|
-
]);
|
|
123
|
-
const gsEventResult = updateType === 'install'
|
|
124
|
-
? PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_INSTALLED
|
|
125
|
-
: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.RESULTS.PLUGIN_REMOVED;
|
|
126
|
-
const eventData = {
|
|
127
|
-
component: PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.COMPONENTS.PLUGIN_LIST,
|
|
128
|
-
result: error || gsEventResult,
|
|
129
|
-
url: this.CURRENT_LOCATION,
|
|
130
|
-
...pluginCustomEventInfo,
|
|
131
|
-
targetApplicationName: app.name,
|
|
132
|
-
targetApplicationContextPath: app.contextPath,
|
|
133
|
-
...(error && { error })
|
|
134
|
-
};
|
|
135
|
-
this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_ECOSYSTEM.APPLICATIONS.EVENTS.PACKAGE_PLUGINS, eventData);
|
|
136
|
-
}
|
|
137
|
-
async getAppsForUpdate(plugin, updateType) {
|
|
138
|
-
let apps = (await this.ecosystemService.getWebApplications()).filter(app => this.ecosystemService.isOwner(app) && app.type !== ApplicationType.EXTERNAL);
|
|
139
|
-
if (updateType === 'install') {
|
|
140
|
-
this.appsDisabled.clear();
|
|
141
|
-
for (const app of apps) {
|
|
142
|
-
if (this.isPluginInstalledInApp(plugin, app)) {
|
|
143
|
-
this.appsDisabled.add(app.id);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
if (updateType === 'uninstall') {
|
|
148
|
-
const installedApps = [];
|
|
149
|
-
for (const app of apps) {
|
|
150
|
-
if (this.isPluginInstalledInApp(plugin, app)) {
|
|
151
|
-
installedApps.push(app);
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
apps = installedApps;
|
|
155
|
-
}
|
|
156
|
-
return apps;
|
|
157
|
-
}
|
|
158
|
-
isPluginInstalledInApp(plugin, app) {
|
|
159
|
-
const appRemotes = this.pluginsService.getMFRemotes(app) || {};
|
|
160
|
-
for (const [remoteName, modules] of Object.entries(appRemotes)) {
|
|
161
|
-
const pluginFromThisPackageIsInstalled = this.getPluginContextPathWithoutVersion(remoteName) === plugin.contextPath;
|
|
162
|
-
const specificPluginModuleIsInstalled = modules.some(module => module === plugin.module);
|
|
163
|
-
if (pluginFromThisPackageIsInstalled && specificPluginModuleIsInstalled) {
|
|
164
|
-
return true;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
return false;
|
|
168
|
-
}
|
|
169
|
-
getPluginContextPathWithoutVersion(remote) {
|
|
170
|
-
return remote.split('@')[0];
|
|
171
|
-
}
|
|
172
|
-
async handleRemotesUpdate(application, plugin, updateType) {
|
|
173
|
-
try {
|
|
174
|
-
// When remotes object is not set in the configuration object of an application.
|
|
175
|
-
// Fallback to setInitialRemotes is triggered.
|
|
176
|
-
const { remotes, excludedRemotes } = await (updateType === 'install'
|
|
177
|
-
? this.pluginsService.addRemotes(application, plugin)
|
|
178
|
-
: this.pluginsService.removeRemotes(application, this.getAllPluginsToRemove(plugin)));
|
|
179
|
-
if (!application.config) {
|
|
180
|
-
application.config = {};
|
|
181
|
-
}
|
|
182
|
-
application.config.remotes = remotes;
|
|
183
|
-
application.config.excludedRemotes = excludedRemotes;
|
|
184
|
-
const actualRemotes = this.pluginsService.getMFRemotes(application);
|
|
185
|
-
return this.emitRemotes(actualRemotes);
|
|
186
|
-
}
|
|
187
|
-
catch (er) {
|
|
188
|
-
if (er) {
|
|
189
|
-
this.alertService.addServerFailure(er);
|
|
190
|
-
}
|
|
191
|
-
throw er;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
getAllPluginsToRemove(plugin) {
|
|
195
|
-
return this.package.applicationVersions.map(av => ({
|
|
196
|
-
id: `${plugin.contextPath}@${av.version}/${plugin.module}`,
|
|
197
|
-
idLatest: `${plugin.contextPath}/${plugin.module}`,
|
|
198
|
-
module: plugin.module,
|
|
199
|
-
path: plugin.path
|
|
200
|
-
}));
|
|
201
|
-
}
|
|
202
|
-
emitRemotes(remotes) {
|
|
203
|
-
this.remotePlugins$.next(remotes);
|
|
204
|
-
return { ...this.remotePlugins$.value };
|
|
35
|
+
async installPlugin(plugin) {
|
|
36
|
+
await this.pluginListService.updateAppRemotes(plugin, 'install', this.package);
|
|
205
37
|
}
|
|
206
|
-
async
|
|
207
|
-
|
|
208
|
-
return await this.bsModalService.show(AppsToUpdateRemotesSelectComponent, {
|
|
209
|
-
class: 'modal-sm',
|
|
210
|
-
ariaDescribedby: 'modal-body',
|
|
211
|
-
ariaLabelledBy: 'modal-title',
|
|
212
|
-
initialState,
|
|
213
|
-
ignoreBackdropClick: true,
|
|
214
|
-
keyboard: false
|
|
215
|
-
}).content.result;
|
|
216
|
-
}
|
|
217
|
-
catch (er) {
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
38
|
+
async uninstallPlugin(plugin) {
|
|
39
|
+
await this.pluginListService.updateAppRemotes(plugin, 'uninstall', this.package);
|
|
220
40
|
}
|
|
221
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PluginListComponent, deps: [{ token: i1.
|
|
222
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PluginListComponent, selector: "c8y-plugin-list", inputs: { plugins$: "plugins$", emptyListText: "emptyListText", selectable: "selectable", hideSource: "hideSource", installable: "installable", package: "package" }, outputs: { selectedItems: "selectedItems" }, ngImport: i0, template: "<c8y-list-group class=\"bg-inherit\">\n <ng-container *ngIf=\"(plugins$ | async)?.length !== 0; else emptyList\">\n <ng-container *ngFor=\"let plugin of plugins$ | async\">\n <c8y-li
|
|
41
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PluginListComponent, deps: [{ token: i1.PluginListService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
42
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PluginListComponent, selector: "c8y-plugin-list", inputs: { plugins$: "plugins$", emptyListText: "emptyListText", selectable: "selectable", hideSource: "hideSource", installable: "installable", package: "package", selectedPlugin: "selectedPlugin" }, outputs: { selectedItems: "selectedItems", showOverview: "showOverview" }, ngImport: i0, template: "<c8y-list-group class=\"bg-inherit\">\n <ng-container *ngIf=\"(plugins$ | async)?.length !== 0; else emptyList\">\n <ng-container *ngFor=\"let plugin of plugins$ | async\">\n <c8y-li\n [ngClass]=\"{\n disabled: plugin.installed,\n selected: selectedPlugin?.id === plugin?.id\n }\"\n >\n <div class=\"d-flex fit-w\">\n <ng-container *ngIf=\"plugin.readmePath\">\n <button\n class=\"c8y-list__item__btn d-flex fit-w gap-4\"\n title=\"{{ 'Details' | translate }}\"\n (click)=\"showPluginOverview(plugin)\"\n >\n <c8y-plugin-list-item\n class=\"d-contents\"\n (isItemSelected)=\"updateSelectedItems($event, plugin)\"\n [plugin]=\"plugin\"\n [selectable]=\"selectable\"\n [hideSource]=\"hideSource\"\n ></c8y-plugin-list-item>\n <i\n class=\"icon-24 m-l-auto a-s-center\"\n c8yIcon=\"forward\"\n ></i>\n </button>\n </ng-container>\n <ng-container *ngIf=\"!plugin.readmePath\">\n <c8y-plugin-list-item\n class=\"d-contents\"\n (isItemSelected)=\"updateSelectedItems($event, plugin)\"\n [plugin]=\"plugin\"\n [selectable]=\"selectable\"\n [hideSource]=\"hideSource\"\n ></c8y-plugin-list-item>\n </ng-container>\n </div>\n <div class=\"p-l-40 m-t-4 d-flex flex-wrap gap-8\">\n <button\n class=\"btn btn-danger btn-sm\"\n title=\"{{ 'Uninstall plugin' | translate }}\"\n *ngIf=\"installable\"\n (click)=\"uninstallPlugin(plugin)\"\n [ngClass]=\"{ 'btn-pending': plugin.id === updatingPluginId.uninstall }\"\n [disabled]=\"updatingPluginId.uninstall && plugin.id === updatingPluginId.uninstall\"\n data-cy=\"plugin-list--uninstall-plugin-button\"\n translate\n >\n Uninstall plugin\n </button>\n <button\n class=\"btn btn-default btn-sm m-0\"\n title=\"{{ 'Install plugin' | translate }}\"\n *ngIf=\"installable\"\n (click)=\"installPlugin(plugin)\"\n [ngClass]=\"{ 'btn-pending': plugin.id === updatingPluginId.install }\"\n [disabled]=\"updatingPluginId.install && plugin.id === updatingPluginId.install\"\n data-cy=\"plugin-list--install-plugin-button\"\n translate\n >\n Install plugin\n </button>\n </div>\n </c8y-li>\n </ng-container>\n </ng-container>\n</c8y-list-group>\n<ng-template #emptyList>\n <c8y-ui-empty-state\n [icon]=\"'plugin'\"\n [title]=\"emptyListText | translate\"\n [horizontal]=\"true\"\n *ngIf=\"emptyListText\"\n ></c8y-ui-empty-state>\n</ng-template>\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i4.PluginListItemComponent, selector: "c8y-plugin-list-item", inputs: ["plugin", "selectable", "hideSource"], outputs: ["isItemSelected"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
|
|
223
43
|
}
|
|
224
44
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PluginListComponent, decorators: [{
|
|
225
45
|
type: Component,
|
|
226
|
-
args: [{ selector: 'c8y-plugin-list', template: "<c8y-list-group class=\"bg-inherit\">\n <ng-container *ngIf=\"(plugins$ | async)?.length !== 0; else emptyList\">\n <ng-container *ngFor=\"let plugin of plugins$ | async\">\n <c8y-li
|
|
227
|
-
}], ctorParameters: () => [{ type: i1.
|
|
46
|
+
args: [{ selector: 'c8y-plugin-list', template: "<c8y-list-group class=\"bg-inherit\">\n <ng-container *ngIf=\"(plugins$ | async)?.length !== 0; else emptyList\">\n <ng-container *ngFor=\"let plugin of plugins$ | async\">\n <c8y-li\n [ngClass]=\"{\n disabled: plugin.installed,\n selected: selectedPlugin?.id === plugin?.id\n }\"\n >\n <div class=\"d-flex fit-w\">\n <ng-container *ngIf=\"plugin.readmePath\">\n <button\n class=\"c8y-list__item__btn d-flex fit-w gap-4\"\n title=\"{{ 'Details' | translate }}\"\n (click)=\"showPluginOverview(plugin)\"\n >\n <c8y-plugin-list-item\n class=\"d-contents\"\n (isItemSelected)=\"updateSelectedItems($event, plugin)\"\n [plugin]=\"plugin\"\n [selectable]=\"selectable\"\n [hideSource]=\"hideSource\"\n ></c8y-plugin-list-item>\n <i\n class=\"icon-24 m-l-auto a-s-center\"\n c8yIcon=\"forward\"\n ></i>\n </button>\n </ng-container>\n <ng-container *ngIf=\"!plugin.readmePath\">\n <c8y-plugin-list-item\n class=\"d-contents\"\n (isItemSelected)=\"updateSelectedItems($event, plugin)\"\n [plugin]=\"plugin\"\n [selectable]=\"selectable\"\n [hideSource]=\"hideSource\"\n ></c8y-plugin-list-item>\n </ng-container>\n </div>\n <div class=\"p-l-40 m-t-4 d-flex flex-wrap gap-8\">\n <button\n class=\"btn btn-danger btn-sm\"\n title=\"{{ 'Uninstall plugin' | translate }}\"\n *ngIf=\"installable\"\n (click)=\"uninstallPlugin(plugin)\"\n [ngClass]=\"{ 'btn-pending': plugin.id === updatingPluginId.uninstall }\"\n [disabled]=\"updatingPluginId.uninstall && plugin.id === updatingPluginId.uninstall\"\n data-cy=\"plugin-list--uninstall-plugin-button\"\n translate\n >\n Uninstall plugin\n </button>\n <button\n class=\"btn btn-default btn-sm m-0\"\n title=\"{{ 'Install plugin' | translate }}\"\n *ngIf=\"installable\"\n (click)=\"installPlugin(plugin)\"\n [ngClass]=\"{ 'btn-pending': plugin.id === updatingPluginId.install }\"\n [disabled]=\"updatingPluginId.install && plugin.id === updatingPluginId.install\"\n data-cy=\"plugin-list--install-plugin-button\"\n translate\n >\n Install plugin\n </button>\n </div>\n </c8y-li>\n </ng-container>\n </ng-container>\n</c8y-list-group>\n<ng-template #emptyList>\n <c8y-ui-empty-state\n [icon]=\"'plugin'\"\n [title]=\"emptyListText | translate\"\n [horizontal]=\"true\"\n *ngIf=\"emptyListText\"\n ></c8y-ui-empty-state>\n</ng-template>\n" }]
|
|
47
|
+
}], ctorParameters: () => [{ type: i1.PluginListService }], propDecorators: { plugins$: [{
|
|
228
48
|
type: Input
|
|
229
49
|
}], emptyListText: [{
|
|
230
50
|
type: Input
|
|
@@ -236,7 +56,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
236
56
|
type: Input
|
|
237
57
|
}], package: [{
|
|
238
58
|
type: Input
|
|
59
|
+
}], selectedPlugin: [{
|
|
60
|
+
type: Input
|
|
239
61
|
}], selectedItems: [{
|
|
240
62
|
type: Output
|
|
63
|
+
}], showOverview: [{
|
|
64
|
+
type: Output
|
|
241
65
|
}] } });
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvcGx1Z2luLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvcGx1Z2luLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQTRCLGVBQWUsRUFBZ0IsTUFBTSxhQUFhLENBQUM7QUFDdEYsT0FBTyxFQUNMLFlBQVksRUFFWixnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLE9BQU8sRUFDUCxtQkFBbUIsRUFDcEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLDRCQUE0QixFQUM3QixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbkUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFL0YsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7QUFNakMsTUFBTSxPQUFPLG1CQUFtQjtJQWtCOUIsWUFDVSxnQkFBa0MsRUFDbEMsY0FBOEIsRUFDOUIsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsZ0JBQWtDLEVBQ2xDLGdCQUFrQyxFQUNsQyxtQkFBd0M7UUFOeEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxtQkFB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QUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbEQsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtTQUNsQixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyxXQUFXLENBQUMsT0FBaUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRU8sS0FBSyxDQUFDLFVBQVUsQ0FDdEIsWUFHQztRQUVELElBQUksQ0FBQztZQUNILE9BQU8sTUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtnQkFDM0QsS0FBSyxFQUFFLFVBQVU7Z0JBQ2pCLGVBQWUsRUFBRSxZQUFZO2dCQUM3QixjQUFjLEVBQUUsYUFBYTtnQkFDN0IsWUFBWTtnQkFDWixtQkFBbUIsRUFBRSxJQUFJO2dCQUN6QixRQUFRLEVBQUUsS0FBSzthQUNoQixDQUFDLENBQUMsT0FDSixDQUFDLE1BQU0sQ0FBQztRQUNYLENBQUM7UUFBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1lBQ1osT0FBTztRQUNULENBQUM7SUFDSCxDQUFDOytHQXZRVSxtQkFBbUI7bUdBQW5CLG1CQUFtQiwwUUN6QmhDLHc2REFpREE7OzRGRHhCYSxtQkFBbUI7a0JBSi9CLFNBQVM7K0JBQ0UsaUJBQWlCOzBRQU1sQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zLCBBcHBsaWNhdGlvblR5cGUsIElBcHBsaWNhdGlvbiB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgQXBwbGljYXRpb25QbHVnaW4sXG4gIEdhaW5zaWdodFNlcnZpY2UsXG4gIFBsdWdpbnNTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBIdW1hbml6ZUFwcE5hbWVQaXBlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgRWNvc3lzdGVtU2VydmljZSxcbiAgUFJPRFVDVF9FWFBFUklFTkNFX0VDT1NZU1RFTVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwcHNUb1VwZGF0ZVJlbW90ZXNTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2FwcHMtdG8tdXBkYXRlLXJlbW90ZXMtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVcGRhdGVUeXBlIH0gZnJvbSAnLi9hcHBzLXRvLXVwZGF0ZS1yZW1vdGVzLXNlbGVjdC5tb2RlbCc7XG5pbXBvcnQgeyBwaWNrIH0gZnJvbSAnbG9kYXNoLWVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXBsdWdpbi1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BsdWdpbi1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQbHVnaW5MaXN0Q29tcG9uZW50IHtcbiAgQ1VSUkVOVF9MT0NBVElPTiA9IGxvY2F0aW9uLmhyZWY7XG5cbiAgQElucHV0KCkgcGx1Z2lucyQ6IE9ic2VydmFibGU8QXBwbGljYXRpb25QbHVnaW5bXT47XG4gIEBJbnB1dCgpIGVtcHR5TGlzdFRleHQgPSAnJztcbiAgQElucHV0KCkgc2VsZWN0YWJsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgaGlkZVNvdXJjZSA9IGZhbHNlO1xuICAvKipcbiAgICogU2hvd3MgdGhlIGluc3RhbGwgYnV0dG9uIGZvciBlYWNoIHBsdWdpbiBzZXBhcmF0ZWx5LiBDdXJyZW50bHkgdXNlZCBpbiBwYWNrYWdlLWRldGFpbHMgdmlldy5cbiAgICovXG4gIEBJbnB1dCgpIGluc3RhbGxhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBhY2thZ2U6IElBcHBsaWNhdGlvbjtcbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXM6IEV2ZW50RW1pdHRlcjxBcHBsaWNhdGlvblBsdWdpbltdPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcmVtb3RlUGx1Z2lucyQ6IEJlaGF2aW9yU3ViamVjdDxBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnM+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XG4gIHNlbGVjdGVkUGx1Z2luczogeyBba2V5OiBzdHJpbmddOiBBcHBsaWNhdGlvblBsdWdpbiB9ID0ge307XG4gIHVwZGF0aW5nUGx1Z2luSWQ6IFJlY29yZDxVcGRhdGVUeXBlLCBzdHJpbmc+ID0geyBpbnN0YWxsOiAnJywgdW5pbnN0YWxsOiAnJyB9O1xuICBhcHBzRGlzYWJsZWQ6IFNldDxJQXBwbGljYXRpb25bJ2lkJ10+ID0gbmV3IFNldDxJQXBwbGljYXRpb25bJ2lkJ10+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGx1Z2luc1NlcnZpY2U6IFBsdWdpbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZSxcbiAgICBwcml2YXRlIGh1bWFuaXplQXBwTmFtZVBpcGU6IEh1bWFuaXplQXBwTmFtZVBpcGVcbiAgKSB7fVxuXG4gIHVwZGF0ZVNlbGVjdGVkSXRlbXMoc2VsZWN0ZWQ6IGJvb2xlYW4sIHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pIHtcbiAgICB0aGlzLnNlbGVjdGVkUGx1Z2luc1twbHVnaW4uaWRdID0gc2VsZWN0ZWQgPyBwbHVnaW4gOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgb25seUluc3RhbGxlZFBsdWdpbnMgPSBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0ZWRQbHVnaW5zKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQob25seUluc3RhbGxlZFBsdWdpbnMpO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFBsdWdpbihwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luKSB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVBcHBSZW1vdGVzKHBsdWdpbiwgJ2luc3RhbGwnKTtcbiAgfVxuXG4gIGFzeW5jIHVuaW5zdGFsbFBsdWdpbihwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luKSB7XG4gICAgYXdhaXQgdGhpcy51cGRhdGVBcHBSZW1vdGVzKHBsdWdpbiwgJ3VuaW5zdGFsbCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVBcHBSZW1vdGVzKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sIHVwZGF0ZVR5cGU6IFVwZGF0ZVR5cGUpIHtcbiAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSBwbHVnaW4/LmlkO1xuICAgIGxldCBpbml0aWFsU3RhdGU6IFBpY2s8XG4gICAgICBBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50LFxuICAgICAgJ2FwcHMnIHwgJ3VwZGF0ZVR5cGUnIHwgJ3BsdWdpbk5hbWUnIHwgJ2FwcHNEaXNhYmxlZCdcbiAgICA+O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhcHBzID0gYXdhaXQgdGhpcy5nZXRBcHBzRm9yVXBkYXRlKHBsdWdpbiwgdXBkYXRlVHlwZSk7XG4gICAgICBpbml0aWFsU3RhdGUgPSB7XG4gICAgICAgIGFwcHMsXG4gICAgICAgIHVwZGF0ZVR5cGUsXG4gICAgICAgIHBsdWdpbk5hbWU6IHBsdWdpbi5uYW1lLFxuICAgICAgICBhcHBzRGlzYWJsZWQ6IHRoaXMuYXBwc0Rpc2FibGVkXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgc2VsZWN0ZWRBcHBzOiBJQXBwbGljYXRpb25bXTtcbiAgICB0cnkge1xuICAgICAgc2VsZWN0ZWRBcHBzID0gYXdhaXQgdGhpcy5zZWxlY3RBcHBzKGluaXRpYWxTdGF0ZSk7XG4gICAgICBpZiAoIXNlbGVjdGVkQXBwcykge1xuICAgICAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSAnJztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gdW5yZWFjaGVkXG4gICAgfVxuXG4gICAgaWYgKHVwZGF0ZVR5cGUgPT09ICdpbnN0YWxsJykge1xuICAgICAgY29uc3QgaXNBcmNoaXZlZCA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS52ZXJpZnlBcmNoaXZlZChbcGx1Z2luXSk7XG4gICAgICBpZiAoIWlzQXJjaGl2ZWQpIHtcbiAgICAgICAgdGhpcy51cGRhdGluZ1BsdWdpbklkW3VwZGF0ZVR5cGVdID0gJyc7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGljZW5zZXNWZXJpZmllZEJ5VXNlciA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS52ZXJpZnlMaWNlbnNlcyhbcGx1Z2luXSk7XG4gICAgICBpZiAoIWxpY2Vuc2VzVmVyaWZpZWRCeVVzZXIpIHtcbiAgICAgICAgdGhpcy51cGRhdGluZ1BsdWdpbklkW3VwZGF0ZVR5cGVdID0gJyc7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGFwcCBvZiBzZWxlY3RlZEFwcHMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh1cGRhdGVUeXBlID09PSAnaW5zdGFsbCcpIHtcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uSXNDb21wYXRpYmxlID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnZlcmlmeVBsdWdpblZlcnNpb25zQ29tcGF0aWJpbGl0eShcbiAgICAgICAgICAgIFtwbHVnaW5dLFxuICAgICAgICAgICAgYXBwXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghdmVyc2lvbklzQ29tcGF0aWJsZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVSZW1vdGVzVXBkYXRlKGFwcCwgcGx1Z2luLCB1cGRhdGVUeXBlKTtcbiAgICAgICAgY29uc3QgaHVtYW5pemVkQXBwTmFtZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHVtYW5pemVBcHBOYW1lUGlwZS50cmFuc2Zvcm0oYXBwKSk7XG4gICAgICAgIGNvbnN0IHN1Y2Nlc3NUZXh0ID1cbiAgICAgICAgICB1cGRhdGVUeXBlID09PSAnaW5zdGFsbCdcbiAgICAgICAgICAgID8gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgZ2V0dGV4dCgnUGx1Z2luIGluc3RhbGxlZCB0byBhcHBsaWNhdGlvbiBcInt7IGFwcE5hbWUgfX1cIi4nKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBhcHBOYW1lOiBodW1hbml6ZWRBcHBOYW1lXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgIGdldHRleHQoJ1BsdWdpbiB1bmluc3RhbGxlZCBmcm9tIGFwcGxpY2F0aW9uIFwie3sgYXBwTmFtZSB9fVwiLicpLFxuICAgICAgICAgICAgICAgIHsgYXBwTmFtZTogaHVtYW5pemVkQXBwTmFtZSB9XG4gICAgICAgICAgICAgICk7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3Moc3VjY2Vzc1RleHQpO1xuICAgICAgICB0aGlzLm9uVXBkYXRlRXZlbnRIYW5kbGVHUyhwbHVnaW4sIGFwcCwgdXBkYXRlVHlwZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLm9uVXBkYXRlRXZlbnRIYW5kbGVHUyhwbHVnaW4sIGFwcCwgdXBkYXRlVHlwZSwgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0aW5nUGx1Z2luSWRbdXBkYXRlVHlwZV0gPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgb25VcGRhdGVFdmVudEhhbmRsZUdTKFxuICAgIHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgdXBkYXRlVHlwZTogVXBkYXRlVHlwZSxcbiAgICBlcnJvcj86IHVua25vd25cbiAgKSB7XG4gICAgY29uc3QgcGx1Z2luQ3VzdG9tRXZlbnRJbmZvID0gcGljayhwbHVnaW4sIFtcbiAgICAgICduYW1lJyxcbiAgICAgICdjb250ZXh0UGF0aCcsXG4gICAgICAnbW9kdWxlJyxcbiAgICAgICd2ZXJzaW9uJyxcbiAgICAgICd0eXBlJyxcbiAgICAgICdpZCdcbiAgICBdIHNhdGlzZmllcyAoa2V5b2YgQXBwbGljYXRpb25QbHVnaW4pW10pO1xuXG4gICAgY29uc3QgZ3NFdmVudFJlc3VsdCA9XG4gICAgICB1cGRhdGVUeXBlID09PSAnaW5zdGFsbCdcbiAgICAgICAgPyBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlBMVUdJTl9JTlNUQUxMRURcbiAgICAgICAgOiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlBMVUdJTl9SRU1PVkVEO1xuXG4gICAgY29uc3QgZXZlbnREYXRhID0ge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0VfRUNPU1lTVEVNLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLlBMVUdJTl9MSVNULFxuICAgICAgcmVzdWx0OiBlcnJvciB8fCBnc0V2ZW50UmVzdWx0LFxuICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT04sXG4gICAgICAuLi5wbHVnaW5DdXN0b21FdmVudEluZm8sXG4gICAgICB0YXJnZXRBcHBsaWNhdGlvbk5hbWU6IGFwcC5uYW1lLFxuICAgICAgdGFyZ2V0QXBwbGljYXRpb25Db250ZXh0UGF0aDogYXBwLmNvbnRleHRQYXRoLFxuICAgICAgLi4uKGVycm9yICYmIHsgZXJyb3IgfSlcbiAgICB9O1xuXG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChcbiAgICAgIFBST0RVQ1RfRVhQRVJJRU5DRV9FQ09TWVNURU0uQVBQTElDQVRJT05TLkVWRU5UUy5QQUNLQUdFX1BMVUdJTlMsXG4gICAgICBldmVudERhdGFcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRBcHBzRm9yVXBkYXRlKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sIHVwZGF0ZVR5cGU6IFVwZGF0ZVR5cGUpIHtcbiAgICBsZXQgYXBwcyA9IChhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0V2ViQXBwbGljYXRpb25zKCkpLmZpbHRlcihcbiAgICAgIGFwcCA9PiB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuaXNPd25lcihhcHApICYmIGFwcC50eXBlICE9PSBBcHBsaWNhdGlvblR5cGUuRVhURVJOQUxcbiAgICApO1xuXG4gICAgaWYgKHVwZGF0ZVR5cGUgPT09ICdpbnN0YWxsJykge1xuICAgICAgdGhpcy5hcHBzRGlzYWJsZWQuY2xlYXIoKTtcbiAgICAgIGZvciAoY29uc3QgYXBwIG9mIGFwcHMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQbHVnaW5JbnN0YWxsZWRJbkFwcChwbHVnaW4sIGFwcCkpIHtcbiAgICAgICAgICB0aGlzLmFwcHNEaXNhYmxlZC5hZGQoYXBwLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1cGRhdGVUeXBlID09PSAndW5pbnN0YWxsJykge1xuICAgICAgY29uc3QgaW5zdGFsbGVkQXBwczogSUFwcGxpY2F0aW9uW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgYXBwIG9mIGFwcHMpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNQbHVnaW5JbnN0YWxsZWRJbkFwcChwbHVnaW4sIGFwcCkpIHtcbiAgICAgICAgICBpbnN0YWxsZWRBcHBzLnB1c2goYXBwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXBwcyA9IGluc3RhbGxlZEFwcHM7XG4gICAgfVxuICAgIHJldHVybiBhcHBzO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1BsdWdpbkluc3RhbGxlZEluQXBwKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4sIGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgYXBwUmVtb3RlcyA9IHRoaXMucGx1Z2luc1NlcnZpY2UuZ2V0TUZSZW1vdGVzKGFwcCkgfHwge307XG5cbiAgICBmb3IgKGNvbnN0IFtyZW1vdGVOYW1lLCBtb2R1bGVzXSBvZiBPYmplY3QuZW50cmllcyhhcHBSZW1vdGVzKSkge1xuICAgICAgY29uc3QgcGx1Z2luRnJvbVRoaXNQYWNrYWdlSXNJbnN0YWxsZWQgPVxuICAgICAgICB0aGlzLmdldFBsdWdpbkNvbnRleHRQYXRoV2l0aG91dFZlcnNpb24ocmVtb3RlTmFtZSkgPT09IHBsdWdpbi5jb250ZXh0UGF0aDtcbiAgICAgIGNvbnN0IHNwZWNpZmljUGx1Z2luTW9kdWxlSXNJbnN0YWxsZWQgPSBtb2R1bGVzLnNvbWUobW9kdWxlID0+IG1vZHVsZSA9PT0gcGx1Z2luLm1vZHVsZSk7XG4gICAgICBpZiAocGx1Z2luRnJvbVRoaXNQYWNrYWdlSXNJbnN0YWxsZWQgJiYgc3BlY2lmaWNQbHVnaW5Nb2R1bGVJc0luc3RhbGxlZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQbHVnaW5Db250ZXh0UGF0aFdpdGhvdXRWZXJzaW9uKHJlbW90ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHJlbW90ZS5zcGxpdCgnQCcpWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVSZW1vdGVzVXBkYXRlKFxuICAgIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb24sXG4gICAgcGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbixcbiAgICB1cGRhdGVUeXBlOiBVcGRhdGVUeXBlXG4gICkge1xuICAgIHRyeSB7XG4gICAgICAvLyBXaGVuIHJlbW90ZXMgb2JqZWN0IGlzIG5vdCBzZXQgaW4gdGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IG9mIGFuIGFwcGxpY2F0aW9uLlxuICAgICAgLy8gRmFsbGJhY2sgdG8gc2V0SW5pdGlhbFJlbW90ZXMgaXMgdHJpZ2dlcmVkLlxuICAgICAgY29uc3QgeyByZW1vdGVzLCBleGNsdWRlZFJlbW90ZXMgfSA9IGF3YWl0ICh1cGRhdGVUeXBlID09PSAnaW5zdGFsbCdcbiAgICAgICAgPyB0aGlzLnBsdWdpbnNTZXJ2aWNlLmFkZFJlbW90ZXMoYXBwbGljYXRpb24sIHBsdWdpbilcbiAgICAgICAgOiB0aGlzLnBsdWdpbnNTZXJ2aWNlLnJlbW92ZVJlbW90ZXMoYXBwbGljYXRpb24sIHRoaXMuZ2V0QWxsUGx1Z2luc1RvUmVtb3ZlKHBsdWdpbikpKTtcbiAgICAgIGlmICghYXBwbGljYXRpb24uY29uZmlnKSB7XG4gICAgICAgIGFwcGxpY2F0aW9uLmNvbmZpZyA9IHt9O1xuICAgICAgfVxuICAgICAgYXBwbGljYXRpb24uY29uZmlnLnJlbW90ZXMgPSByZW1vdGVzO1xuICAgICAgYXBwbGljYXRpb24uY29uZmlnLmV4Y2x1ZGVkUmVtb3RlcyA9IGV4Y2x1ZGVkUmVtb3RlcztcbiAgICAgIGNvbnN0IGFjdHVhbFJlbW90ZXMgPSB0aGlzLnBsdWdpbnNTZXJ2aWNlLmdldE1GUmVtb3RlcyhhcHBsaWNhdGlvbik7XG4gICAgICByZXR1cm4gdGhpcy5lbWl0UmVtb3RlcyhhY3R1YWxSZW1vdGVzKTtcbiAgICB9IGNhdGNoIChlcikge1xuICAgICAgaWYgKGVyKSB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXIpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXI7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbGxQbHVnaW5zVG9SZW1vdmUocGx1Z2luOiBBcHBsaWNhdGlvblBsdWdpbik6IEFwcGxpY2F0aW9uUGx1Z2luW10ge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UuYXBwbGljYXRpb25WZXJzaW9ucy5tYXAoYXYgPT4gKHtcbiAgICAgIGlkOiBgJHtwbHVnaW4uY29udGV4dFBhdGh9QCR7YXYudmVyc2lvbn0vJHtwbHVnaW4ubW9kdWxlfWAsXG4gICAgICBpZExhdGVzdDogYCR7cGx1Z2luLmNvbnRleHRQYXRofS8ke3BsdWdpbi5tb2R1bGV9YCxcbiAgICAgIG1vZHVsZTogcGx1Z2luLm1vZHVsZSxcbiAgICAgIHBhdGg6IHBsdWdpbi5wYXRoXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UmVtb3RlcyhyZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMpOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMge1xuICAgIHRoaXMucmVtb3RlUGx1Z2lucyQubmV4dChyZW1vdGVzKTtcbiAgICByZXR1cm4geyAuLi50aGlzLnJlbW90ZVBsdWdpbnMkLnZhbHVlIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbGVjdEFwcHMoXG4gICAgaW5pdGlhbFN0YXRlOiBQaWNrPFxuICAgICAgQXBwc1RvVXBkYXRlUmVtb3Rlc1NlbGVjdENvbXBvbmVudCxcbiAgICAgICdhcHBzJyB8ICd1cGRhdGVUeXBlJyB8ICdwbHVnaW5OYW1lJyB8ICdhcHBzRGlzYWJsZWQnXG4gICAgPlxuICApOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCAoXG4gICAgICAgIHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhBcHBzVG9VcGRhdGVSZW1vdGVzU2VsZWN0Q29tcG9uZW50LCB7XG4gICAgICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICAgICAgYXJpYURlc2NyaWJlZGJ5OiAnbW9kYWwtYm9keScsXG4gICAgICAgICAgYXJpYUxhYmVsbGVkQnk6ICdtb2RhbC10aXRsZScsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICAgICAga2V5Ym9hcmQ6IGZhbHNlXG4gICAgICAgIH0pLmNvbnRlbnQgYXMgQXBwc1RvVXBkYXRlUmVtb3Rlc1NlbGVjdENvbXBvbmVudFxuICAgICAgKS5yZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cbiIsIjxjOHktbGlzdC1ncm91cCBjbGFzcz1cImJnLWluaGVyaXRcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihwbHVnaW5zJCB8IGFzeW5jKT8ubGVuZ3RoICE9PSAwOyBlbHNlIGVtcHR5TGlzdFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBsdWdpbiBvZiBwbHVnaW5zJCB8IGFzeW5jXCI+XG4gICAgICA8Yzh5LWxpIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IHBsdWdpbi5pbnN0YWxsZWQgfVwiIGNsYXNzPVwiYmctaW5oZXJpdFwiPlxuICAgICAgICA8Yzh5LXBsdWdpbi1saXN0LWl0ZW1cbiAgICAgICAgICAoaXNJdGVtU2VsZWN0ZWQpPVwidXBkYXRlU2VsZWN0ZWRJdGVtcygkZXZlbnQsIHBsdWdpbilcIlxuICAgICAgICAgIFtwbHVnaW5dPVwicGx1Z2luXCJcbiAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgICBbaGlkZVNvdXJjZV09XCJoaWRlU291cmNlXCJcbiAgICAgICAgICBjbGFzcz1cImQtZmxleFwiXG4gICAgICAgID48L2M4eS1wbHVnaW4tbGlzdC1pdGVtPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicC1sLTQwIG0tdC00XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJpbnN0YWxsYWJsZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidW5pbnN0YWxsUGx1Z2luKHBsdWdpbilcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBwbHVnaW4uaWQgPT09IHVwZGF0aW5nUGx1Z2luSWQudW5pbnN0YWxsIH1cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVwZGF0aW5nUGx1Z2luSWQudW5pbnN0YWxsICYmIHBsdWdpbi5pZCAhPT0gdXBkYXRpbmdQbHVnaW5JZC51bmluc3RhbGxcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tc20gbS1sLTRcIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnVW5pbnN0YWxsIHBsdWdpbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgZGF0YS1jeT1cInBsdWdpbi1saXN0LS11bmluc3RhbGwtcGx1Z2luLWJ1dHRvblwiXG4gICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICBVbmluc3RhbGwgcGx1Z2luXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJpbnN0YWxsYWJsZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaW5zdGFsbFBsdWdpbihwbHVnaW4pXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogcGx1Z2luLmlkID09PSB1cGRhdGluZ1BsdWdpbklkLmluc3RhbGwgfVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidXBkYXRpbmdQbHVnaW5JZC5pbnN0YWxsICYmIHBsdWdpbi5pZCAhPT0gdXBkYXRpbmdQbHVnaW5JZC5pbnN0YWxsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJ0bi1zbSBtLWwtOFwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdJbnN0YWxsIHBsdWdpbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgZGF0YS1jeT1cInBsdWdpbi1saXN0LS1pbnN0YWxsLXBsdWdpbi1idXR0b25cIlxuICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgSW5zdGFsbCBwbHVnaW5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2M4eS1saT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L2M4eS1saXN0LWdyb3VwPlxuPG5nLXRlbXBsYXRlICNlbXB0eUxpc3Q+XG4gIDxkaXYgY2xhc3M9XCJjOHktZW1wdHktc3RhdGUgdGV4dC1sZWZ0XCIgKm5nSWY9XCJlbXB0eUxpc3RUZXh0XCI+XG4gICAgPGgxIGM4eUljb249XCJwbHVnaW5cIj48L2gxPlxuICAgIDxwPlxuICAgICAge3sgZW1wdHlMaXN0VGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvcD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
66
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvcGx1Z2luLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL2FwcGxpY2F0aW9uLXBsdWdpbnMvcGx1Z2luLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUl2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7QUFPMUQsTUFBTSxPQUFPLG1CQUFtQjtJQWtCOUIsWUFBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFqQnhELHFCQUFnQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFHeEIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFFbkIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUM1Qjs7V0FFRztRQUNNLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBR25CLGtCQUFhLEdBQXNDLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEUsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUMvRCxvQkFBZSxHQUF5QyxFQUFFLENBQUM7UUFJekQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNsRSxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBaUIsRUFBRSxNQUF5QjtRQUM5RCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ2hFLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQXlCO1FBQzFDLElBQUksTUFBTSxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBeUI7UUFDM0MsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBeUI7UUFDN0MsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkYsQ0FBQzsrR0F6Q1UsbUJBQW1CO21HQUFuQixtQkFBbUIsMFVDYmhDLCs1RkE2RUE7OzRGRGhFYSxtQkFBbUI7a0JBSi9CLFNBQVM7K0JBQ0UsaUJBQWlCO3NGQU1sQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElBcHBsaWNhdGlvbiB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFwcGxpY2F0aW9uUGx1Z2luIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUGx1Z2luTGlzdFNlcnZpY2UgfSBmcm9tICcuL3BsdWdpbi1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXBkYXRlVHlwZSB9IGZyb20gJy4vYXBwcy10by11cGRhdGUtcmVtb3Rlcy1zZWxlY3QubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktcGx1Z2luLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGx1Z2luLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBsdWdpbkxpc3RDb21wb25lbnQge1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcblxuICBASW5wdXQoKSBwbHVnaW5zJDogT2JzZXJ2YWJsZTxBcHBsaWNhdGlvblBsdWdpbltdPjtcbiAgQElucHV0KCkgZW1wdHlMaXN0VGV4dCA9ICcnO1xuICBASW5wdXQoKSBzZWxlY3RhYmxlOiBib29sZWFuO1xuICBASW5wdXQoKSBoaWRlU291cmNlID0gZmFsc2U7XG4gIC8qKlxuICAgKiBTaG93cyB0aGUgaW5zdGFsbCBidXR0b24gZm9yIGVhY2ggcGx1Z2luIHNlcGFyYXRlbHkuIEN1cnJlbnRseSB1c2VkIGluIHBhY2thZ2UtZGV0YWlscyB2aWV3LlxuICAgKi9cbiAgQElucHV0KCkgaW5zdGFsbGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgcGFja2FnZTogSUFwcGxpY2F0aW9uO1xuICBASW5wdXQoKSBzZWxlY3RlZFBsdWdpbjogQXBwbGljYXRpb25QbHVnaW47XG4gIEBPdXRwdXQoKSBzZWxlY3RlZEl0ZW1zOiBFdmVudEVtaXR0ZXI8QXBwbGljYXRpb25QbHVnaW5bXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzaG93T3ZlcnZpZXcgPSBuZXcgRXZlbnRFbWl0dGVyPEFwcGxpY2F0aW9uUGx1Z2luPigpO1xuICBzZWxlY3RlZFBsdWdpbnM6IHsgW2tleTogc3RyaW5nXTogQXBwbGljYXRpb25QbHVnaW4gfSA9IHt9O1xuICB1cGRhdGluZ1BsdWdpbklkOiBSZWNvcmQ8VXBkYXRlVHlwZSwgc3RyaW5nPjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHBsdWdpbkxpc3RTZXJ2aWNlOiBQbHVnaW5MaXN0U2VydmljZSkge1xuICAgIHRoaXMudXBkYXRpbmdQbHVnaW5JZCA9IHRoaXMucGx1Z2luTGlzdFNlcnZpY2UudXBkYXRpbmdQbHVnaW5JZDtcbiAgfVxuXG4gIHVwZGF0ZVNlbGVjdGVkSXRlbXMoc2VsZWN0ZWQ6IGJvb2xlYW4sIHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pIHtcbiAgICB0aGlzLnNlbGVjdGVkUGx1Z2luc1twbHVnaW4uaWRdID0gc2VsZWN0ZWQgPyBwbHVnaW4gOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgb25seUluc3RhbGxlZFBsdWdpbnMgPSBPYmplY3QudmFsdWVzKHRoaXMuc2VsZWN0ZWRQbHVnaW5zKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQob25seUluc3RhbGxlZFBsdWdpbnMpO1xuICB9XG5cbiAgc2hvd1BsdWdpbk92ZXJ2aWV3KHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pOiB2b2lkIHtcbiAgICBpZiAocGx1Z2luPy5pZCA9PT0gdGhpcy5zZWxlY3RlZFBsdWdpbj8uaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaG93T3ZlcnZpZXcuZW1pdChwbHVnaW4pO1xuICB9XG5cbiAgYXN5bmMgaW5zdGFsbFBsdWdpbihwbHVnaW46IEFwcGxpY2F0aW9uUGx1Z2luKSB7XG4gICAgYXdhaXQgdGhpcy5wbHVnaW5MaXN0U2VydmljZS51cGRhdGVBcHBSZW1vdGVzKHBsdWdpbiwgJ2luc3RhbGwnLCB0aGlzLnBhY2thZ2UpO1xuICB9XG5cbiAgYXN5bmMgdW5pbnN0YWxsUGx1Z2luKHBsdWdpbjogQXBwbGljYXRpb25QbHVnaW4pIHtcbiAgICBhd2FpdCB0aGlzLnBsdWdpbkxpc3RTZXJ2aWNlLnVwZGF0ZUFwcFJlbW90ZXMocGx1Z2luLCAndW5pbnN0YWxsJywgdGhpcy5wYWNrYWdlKTtcbiAgfVxufVxuIiwiPGM4eS1saXN0LWdyb3VwIGNsYXNzPVwiYmctaW5oZXJpdFwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHBsdWdpbnMkIHwgYXN5bmMpPy5sZW5ndGggIT09IDA7IGVsc2UgZW1wdHlMaXN0XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGx1Z2luIG9mIHBsdWdpbnMkIHwgYXN5bmNcIj5cbiAgICAgIDxjOHktbGlcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgIGRpc2FibGVkOiBwbHVnaW4uaW5zdGFsbGVkLFxuICAgICAgICAgIHNlbGVjdGVkOiBzZWxlY3RlZFBsdWdpbj8uaWQgPT09IHBsdWdpbj8uaWRcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZml0LXdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGx1Z2luLnJlYWRtZVBhdGhcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktbGlzdF9faXRlbV9fYnRuIGQtZmxleCBmaXQtdyBnYXAtNFwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0RldGFpbHMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dQbHVnaW5PdmVydmlldyhwbHVnaW4pXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGM4eS1wbHVnaW4tbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWNvbnRlbnRzXCJcbiAgICAgICAgICAgICAgICAoaXNJdGVtU2VsZWN0ZWQpPVwidXBkYXRlU2VsZWN0ZWRJdGVtcygkZXZlbnQsIHBsdWdpbilcIlxuICAgICAgICAgICAgICAgIFtwbHVnaW5dPVwicGx1Z2luXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICBbaGlkZVNvdXJjZV09XCJoaWRlU291cmNlXCJcbiAgICAgICAgICAgICAgPjwvYzh5LXBsdWdpbi1saXN0LWl0ZW0+XG4gICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpY29uLTI0IG0tbC1hdXRvIGEtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgIGM4eUljb249XCJmb3J3YXJkXCJcbiAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcGx1Z2luLnJlYWRtZVBhdGhcIj5cbiAgICAgICAgICAgIDxjOHktcGx1Z2luLWxpc3QtaXRlbVxuICAgICAgICAgICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgICAgICAgICAoaXNJdGVtU2VsZWN0ZWQpPVwidXBkYXRlU2VsZWN0ZWRJdGVtcygkZXZlbnQsIHBsdWdpbilcIlxuICAgICAgICAgICAgICBbcGx1Z2luXT1cInBsdWdpblwiXG4gICAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInNlbGVjdGFibGVcIlxuICAgICAgICAgICAgICBbaGlkZVNvdXJjZV09XCJoaWRlU291cmNlXCJcbiAgICAgICAgICAgID48L2M4eS1wbHVnaW4tbGlzdC1pdGVtPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtbC00MCBtLXQtNCBkLWZsZXggZmxleC13cmFwIGdhcC04XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tc21cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnVW5pbnN0YWxsIHBsdWdpbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgKm5nSWY9XCJpbnN0YWxsYWJsZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidW5pbnN0YWxsUGx1Z2luKHBsdWdpbilcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnYnRuLXBlbmRpbmcnOiBwbHVnaW4uaWQgPT09IHVwZGF0aW5nUGx1Z2luSWQudW5pbnN0YWxsIH1cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVwZGF0aW5nUGx1Z2luSWQudW5pbnN0YWxsICYmIHBsdWdpbi5pZCA9PT0gdXBkYXRpbmdQbHVnaW5JZC51bmluc3RhbGxcIlxuICAgICAgICAgICAgZGF0YS1jeT1cInBsdWdpbi1saXN0LS11bmluc3RhbGwtcGx1Z2luLWJ1dHRvblwiXG4gICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICA+XG4gICAgICAgICAgICBVbmluc3RhbGwgcGx1Z2luXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgYnRuLXNtIG0tMFwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdJbnN0YWxsIHBsdWdpbicgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgKm5nSWY9XCJpbnN0YWxsYWJsZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiaW5zdGFsbFBsdWdpbihwbHVnaW4pXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2J0bi1wZW5kaW5nJzogcGx1Z2luLmlkID09PSB1cGRhdGluZ1BsdWdpbklkLmluc3RhbGwgfVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwidXBkYXRpbmdQbHVnaW5JZC5pbnN0YWxsICYmIHBsdWdpbi5pZCA9PT0gdXBkYXRpbmdQbHVnaW5JZC5pbnN0YWxsXCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJwbHVnaW4tbGlzdC0taW5zdGFsbC1wbHVnaW4tYnV0dG9uXCJcbiAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgID5cbiAgICAgICAgICAgIEluc3RhbGwgcGx1Z2luXG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jOHktbGk+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9jOHktbGlzdC1ncm91cD5cbjxuZy10ZW1wbGF0ZSAjZW1wdHlMaXN0PlxuICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgW2ljb25dPVwiJ3BsdWdpbidcIlxuICAgIFt0aXRsZV09XCJlbXB0eUxpc3RUZXh0IHwgdHJhbnNsYXRlXCJcbiAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAqbmdJZj1cImVtcHR5TGlzdFRleHRcIlxuICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG48L25nLXRlbXBsYXRlPlxuIl19
|