@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
283 lines • 31.6 kB
JavaScript
import { ScrollingModule } from '@angular/cdk/scrolling';
import { CommonModule as NgCommonModule } from '@angular/common';
import { APP_INITIALIZER, NgModule } from '@angular/core';
import { DataModule } from '@c8y/ngx-components/api';
import { TooltipModule } from 'ngx-bootstrap/tooltip';
import { setTheme } from 'ngx-bootstrap/utils';
import { distinctUntilChanged, filter, map, startWith, switchMap } from 'rxjs/operators';
import { I18nModule } from '../i18n/i18n.module';
import { TranslateService } from '../i18n/translate.service';
import { AssetLinkPipe } from './asset-link.pipe';
import { BytesPipe } from './bytes.pipe';
import { C8yComponentOutlet } from './component-outlet.directive';
import { DatePipe } from './date.pipe';
import { DropdownDirectionDirective } from './dropdown-direction.directive';
import { EmptyStateContextDirective } from './empty-state/empty-state-context.directive';
import { EmptyStateComponent } from './empty-state/empty-state.component';
import { ForOfDirective } from './forOf.directive';
import { GenericFileIconPipe } from './generic-file-icon.pipe';
import { GetGroupIconPipe } from './get-group-icon.pipe';
import { HumanizeAppNamePipe } from './humanize-app-name.pipe';
import { HumanizePipe } from './humanize.pipe';
import { IconDirective } from './icon.directive';
import { IfAllowedDirective } from './if-allowed.directive';
import { LoadMoreComponent } from './load-more.component';
import { LoadingComponent } from './loading.component';
import { MapFunctionPipe } from './map-function.pipe';
import { MarkdownToHtmlPipe } from './markdown-to-html.pipe';
import { MoNamePipe } from './mo-name.pipe';
import { NumberPipe } from './number.pipe';
import { OperationResultComponent } from './operation-result.component';
import { hookOptions } from './options.service';
import { OutletDirective } from './outlet.directive';
import { ProgressBarComponent } from './progress-bar.component';
import { ShortenUserNamePipe } from './shorten-user-name.pipe';
import { ShouldShowMoPipe } from './should-show-mo.pipe';
import { ShowIfFilterPipe } from './show-if-filter.pipe';
import { SkipLinkDirective } from './skip-link.directive';
import { StringifyObjectPipe } from './stringify-object.pipe';
import { TabsetAriaDirective } from './tabset-aria.directive';
import { TextareaAutoresizeDirective } from './textarea-autoresize.directive';
import { AppStateService } from './ui-state.service';
import { UserNameInitialsPipe } from './user-name-initials.pipe';
import { UserPreferencesService } from './user-preferences/user-preferences.service';
import { VirtualScrollWindowDirective } from './virtual-scroll/virtual-scroll-window.directive';
import { VirtualScrollerWrapperComponent } from './virtual-scroll/virtual-scroller-wrapper.component';
import * as i0 from "@angular/core";
export function initializeServices(translateService, state, userPreferences) {
const initialize = () => {
const queryStringLanguage = translateService.queryStringLang();
const firstLanguage = translateService.firstSupportedLanguage();
/*
The ?lang parameter will prevent the user preference language from being activated
*/
if (queryStringLanguage && translateService.getSupported(queryStringLanguage)) {
translateService.switchToLanguage(queryStringLanguage);
}
else {
state.currentUser
.pipe(map(user => user && user.userName), filter(u => !!u), distinctUntilChanged(), switchMap(() => userPreferences.get('language')), startWith(firstLanguage), filter(lang => !!lang), distinctUntilChanged())
.subscribe(lang => {
translateService.switchToLanguage(lang);
});
}
};
return initialize;
}
/**
* Commonly used directives, data access and translation. This module is the shared
* module across all core components. It should be imported by default.
*
* @exports IconDirective A directive to set a c8y icon with [c8yIcon]="'rocket'".
* @exports OutletDirective A directive which allows to set DOM or Angular templates (used for upgrade).
* @exports I18nModule Translation module.
* @exports NgCommonModule Angular common module.
* @exports DataModule The data layer to allow DI with @c8y/client.
* @exports HumanizeAppNamePipe Humanize an application name for display in e.g. the app switcher (e.g. `devicemanagement` becomes `Device Management`).
* @exports HumanizePipe Humanize a string, e.g. `c8y_water_temperature` becomes `Water Temperature`.
* @exports ShouldShowMoPipe Checks if passed managed object is device or group type.
* @exports GetGroupIconPipe Gets proper group icon.
* @exports ShortenUserNamePipe Allows a short name. E.g. `Foo Bar` gets `F. Bar`.
* @exports UserNameInitialsPipe Allows the initials from the name. E.g. `Foo Bar` gets `FB`.
* @exports ForOfDirective A forOf directive like ngFor but with load-more function.
* @exports LoadMoreComponent A component to load more data from a certain data-source.
* @exports ProgressBarComponent Displays either defined or undefined progress.
* @exports DropdownDirectionDirective Determines if a dropdown opens to the bottom or to the top.
* @exports TextareaAutoresizeDirective resizes a textarea height as the user inputs.
* @exports OperationResultComponent displays an animated svg for success and error operations.
*/
export class CommonModule {
static providers() {
return [
...DataModule.providers(),
// TODO: maybe we can think of a way to remove this C8Y_APP global
// tslint:disable-next-line
hookOptions(window.C8Y_APP || {}),
{
provide: APP_INITIALIZER,
useFactory: initializeServices,
deps: [TranslateService, AppStateService, UserPreferencesService],
multi: true
},
...I18nModule.providers(),
HumanizePipe,
ShouldShowMoPipe,
GetGroupIconPipe,
HumanizeAppNamePipe,
ShortenUserNamePipe,
MapFunctionPipe,
DatePipe,
BytesPipe
];
}
static forRoot() {
return {
ngModule: CommonModule,
providers: CommonModule.providers()
};
}
constructor() {
setTheme('bs4');
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: CommonModule, declarations: [OutletDirective,
ShouldShowMoPipe,
GetGroupIconPipe,
ForOfDirective,
LoadMoreComponent,
MapFunctionPipe,
ProgressBarComponent,
DropdownDirectionDirective,
TextareaAutoresizeDirective,
TabsetAriaDirective,
VirtualScrollerWrapperComponent,
VirtualScrollWindowDirective,
ShowIfFilterPipe,
SkipLinkDirective,
GenericFileIconPipe,
StringifyObjectPipe], imports: [NgCommonModule,
I18nModule,
TooltipModule,
ScrollingModule,
AssetLinkPipe,
C8yComponentOutlet,
HumanizeAppNamePipe,
IconDirective,
DatePipe,
LoadingComponent,
EmptyStateComponent,
EmptyStateContextDirective,
BytesPipe,
UserNameInitialsPipe,
ShortenUserNamePipe,
HumanizePipe,
IfAllowedDirective,
NumberPipe,
OperationResultComponent,
MarkdownToHtmlPipe,
MoNamePipe], exports: [EmptyStateComponent,
EmptyStateContextDirective,
IconDirective,
OutletDirective,
I18nModule,
NgCommonModule,
HumanizeAppNamePipe,
HumanizePipe,
ShouldShowMoPipe,
GetGroupIconPipe,
IfAllowedDirective,
ShortenUserNamePipe,
UserNameInitialsPipe,
ForOfDirective,
LoadMoreComponent,
MapFunctionPipe,
ProgressBarComponent,
DatePipe,
NumberPipe,
LoadingComponent,
DropdownDirectionDirective,
TextareaAutoresizeDirective,
TabsetAriaDirective,
OperationResultComponent,
VirtualScrollerWrapperComponent,
VirtualScrollWindowDirective,
BytesPipe,
ShowIfFilterPipe,
SkipLinkDirective,
MarkdownToHtmlPipe,
MoNamePipe,
GenericFileIconPipe,
StringifyObjectPipe,
AssetLinkPipe,
C8yComponentOutlet] }); }
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CommonModule, providers: [AssetLinkPipe], imports: [NgCommonModule,
I18nModule,
TooltipModule,
ScrollingModule, I18nModule,
NgCommonModule] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CommonModule, decorators: [{
type: NgModule,
args: [{
imports: [
NgCommonModule,
I18nModule,
TooltipModule,
ScrollingModule,
AssetLinkPipe,
C8yComponentOutlet,
HumanizeAppNamePipe,
IconDirective,
DatePipe,
LoadingComponent,
EmptyStateComponent,
EmptyStateContextDirective,
BytesPipe,
UserNameInitialsPipe,
ShortenUserNamePipe,
HumanizePipe,
IfAllowedDirective,
NumberPipe,
OperationResultComponent,
MarkdownToHtmlPipe,
MoNamePipe
],
exports: [
EmptyStateComponent,
EmptyStateContextDirective,
IconDirective,
OutletDirective,
I18nModule,
NgCommonModule,
HumanizeAppNamePipe,
HumanizePipe,
ShouldShowMoPipe,
GetGroupIconPipe,
IfAllowedDirective,
ShortenUserNamePipe,
UserNameInitialsPipe,
ForOfDirective,
LoadMoreComponent,
MapFunctionPipe,
ProgressBarComponent,
DatePipe,
NumberPipe,
LoadingComponent,
DropdownDirectionDirective,
TextareaAutoresizeDirective,
TabsetAriaDirective,
OperationResultComponent,
VirtualScrollerWrapperComponent,
VirtualScrollWindowDirective,
BytesPipe,
ShowIfFilterPipe,
SkipLinkDirective,
MarkdownToHtmlPipe,
MoNamePipe,
GenericFileIconPipe,
StringifyObjectPipe,
AssetLinkPipe,
C8yComponentOutlet
],
declarations: [
OutletDirective,
ShouldShowMoPipe,
GetGroupIconPipe,
ForOfDirective,
LoadMoreComponent,
MapFunctionPipe,
ProgressBarComponent,
DropdownDirectionDirective,
TextareaAutoresizeDirective,
TabsetAriaDirective,
VirtualScrollerWrapperComponent,
VirtualScrollWindowDirective,
ShowIfFilterPipe,
SkipLinkDirective,
GenericFileIconPipe,
StringifyObjectPipe
],
providers: [AssetLinkPipe]
}]
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2NvbW1vbi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLElBQUksY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBdUIsUUFBUSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMxRSxPQUFPLEVB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WSxFQUFFO3dCQUNaLGVBQWU7d0JBQ2YsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLG9CQUFvQjt3QkFDcEIsMEJBQTBCO3dCQUMxQiwyQkFBMkI7d0JBQzNCLG1CQUFtQjt3QkFDbkIsK0JBQStCO3dCQUMvQiw0QkFBNEI7d0JBQzVCLGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLG1CQUFtQjtxQkFDcEI7b0JBQ0QsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDO2lCQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjcm9sbGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIGFzIE5nQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRhTW9kdWxlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hcGknO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvdG9vbHRpcCc7XG5pbXBvcnQgeyBzZXRUaGVtZSB9IGZyb20gJ25neC1ib290c3RyYXAvdXRpbHMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEkxOG5Nb2R1bGUgfSBmcm9tICcuLi9pMThuL2kxOG4ubW9kdWxlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9pMThuL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFzc2V0TGlua1BpcGUgfSBmcm9tICcuL2Fzc2V0LWxpbmsucGlwZSc7XG5pbXBvcnQgeyBCeXRlc1BpcGUgfSBmcm9tICcuL2J5dGVzLnBpcGUnO1xuaW1wb3J0IHsgQzh5Q29tcG9uZW50T3V0bGV0IH0gZnJvbSAnLi9jb21wb25lbnQtb3V0bGV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJy4vZGF0ZS5waXBlJztcbmltcG9ydCB7IERyb3Bkb3duRGlyZWN0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi9kcm9wZG93bi1kaXJlY3Rpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuL2Zvck9mLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBHZW5lcmljRmlsZUljb25QaXBlIH0gZnJvbSAnLi9nZW5lcmljLWZpbGUtaWNvbi5waXBlJztcbmltcG9ydCB7IEdldEdyb3VwSWNvblBpcGUgfSBmcm9tICcuL2dldC1ncm91cC1pY29uLnBpcGUnO1xuaW1wb3J0IHsgSHVtYW5pemVBcHBOYW1lUGlwZSB9IGZyb20gJy4vaHVtYW5pemUtYXBwLW5hbWUucGlwZSc7XG5pbXBvcnQgeyBIdW1hbml6ZVBpcGUgfSBmcm9tICcuL2h1bWFuaXplLnBpcGUnO1xuaW1wb3J0IHsgSWNvbkRpcmVjdGl2ZSB9IGZyb20gJy4vaWNvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWZBbGxvd2VkRGlyZWN0aXZlIH0gZnJvbSAnLi9pZi1hbGxvd2VkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMb2FkTW9yZUNvbXBvbmVudCB9IGZyb20gJy4vbG9hZC1tb3JlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMb2FkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi9sb2FkaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXBGdW5jdGlvblBpcGUgfSBmcm9tICcuL21hcC1mdW5jdGlvbi5waXBlJztcbmltcG9ydCB7IE1hcmtkb3duVG9IdG1sUGlwZSB9IGZyb20gJy4vbWFya2Rvd24tdG8taHRtbC5waXBlJztcbmltcG9ydCB7IE1vTmFtZVBpcGUgfSBmcm9tICcuL21vLW5hbWUucGlwZSc7XG5pbXBvcnQgeyBOdW1iZXJQaXBlIH0gZnJvbSAnLi9udW1iZXIucGlwZSc7XG5pbXBvcnQgeyBPcGVyYXRpb25SZXN1bHRDb21wb25lbnQgfSBmcm9tICcuL29wZXJhdGlvbi1yZXN1bHQuY29tcG9uZW50JztcbmltcG9ydCB7IGhvb2tPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3V0bGV0RGlyZWN0aXZlIH0gZnJvbSAnLi9vdXRsZXQuZGlyZWN0aXZlJztcbmltcG9ydCB7IFByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnLi9wcm9ncmVzcy1iYXIuY29tcG9uZW50JztcbmltcG9ydCB7IFNob3J0ZW5Vc2VyTmFtZVBpcGUgfSBmcm9tICcuL3Nob3J0ZW4tdXNlci1uYW1lLnBpcGUnO1xuaW1wb3J0IHsgU2hvdWxkU2hvd01vUGlwZSB9IGZyb20gJy4vc2hvdWxkLXNob3ctbW8ucGlwZSc7XG5pbXBvcnQgeyBTaG93SWZGaWx0ZXJQaXBlIH0gZnJvbSAnLi9zaG93LWlmLWZpbHRlci5waXBlJztcbmltcG9ydCB7IFNraXBMaW5rRGlyZWN0aXZlIH0gZnJvbSAnLi9za2lwLWxpbmsuZGlyZWN0aXZlJztcbmltcG9ydCB7IFN0cmluZ2lmeU9iamVjdFBpcGUgfSBmcm9tICcuL3N0cmluZ2lmeS1vYmplY3QucGlwZSc7XG5pbXBvcnQgeyBUYWJzZXRBcmlhRGlyZWN0aXZlIH0gZnJvbSAnLi90YWJzZXQtYXJpYS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVGV4dGFyZWFBdXRvcmVzaXplRGlyZWN0aXZlIH0gZnJvbSAnLi90ZXh0YXJlYS1hdXRvcmVzaXplLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlck5hbWVJbml0aWFsc1BpcGUgfSBmcm9tICcuL3VzZXItbmFtZS1pbml0aWFscy5waXBlJztcbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UgfSBmcm9tICcuL3VzZXItcHJlZmVyZW5jZXMvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxXaW5kb3dEaXJlY3RpdmUgfSBmcm9tICcuL3ZpcnR1YWwtc2Nyb2xsL3ZpcnR1YWwtc2Nyb2xsLXdpbmRvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVmlydHVhbFNjcm9sbGVyV3JhcHBlckNvbXBvbmVudCB9IGZyb20gJy4vdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGxlci13cmFwcGVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplU2VydmljZXMoXG4gIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gIHN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gIHVzZXJQcmVmZXJlbmNlczogVXNlclByZWZlcmVuY2VzU2VydmljZVxuKSB7XG4gIGNvbnN0IGluaXRpYWxpemUgPSAoKSA9PiB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmdMYW5ndWFnZSA9IHRyYW5zbGF0ZVNlcnZpY2UucXVlcnlTdHJpbmdMYW5nKCk7XG4gICAgY29uc3QgZmlyc3RMYW5ndWFnZSA9IHRyYW5zbGF0ZVNlcnZpY2UuZmlyc3RTdXBwb3J0ZWRMYW5ndWFnZSgpO1xuXG4gICAgLypcbiAgICAgIFRoZSA/bGFuZyBwYXJhbWV0ZXIgd2lsbCBwcmV2ZW50IHRoZSB1c2VyIHByZWZlcmVuY2UgbGFuZ3VhZ2UgZnJvbSBiZWluZyBhY3RpdmF0ZWRcbiAgICAqL1xuICAgIGlmIChxdWVyeVN0cmluZ0xhbmd1YWdlICYmIHRyYW5zbGF0ZVNlcnZpY2UuZ2V0U3VwcG9ydGVkKHF1ZXJ5U3RyaW5nTGFuZ3VhZ2UpKSB7XG4gICAgICB0cmFuc2xhdGVTZXJ2aWNlLnN3aXRjaFRvTGFuZ3VhZ2UocXVlcnlTdHJpbmdMYW5ndWFnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRlLmN1cnJlbnRVc2VyXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIG1hcCh1c2VyID0+IHVzZXIgJiYgdXNlci51c2VyTmFtZSksXG4gICAgICAgICAgZmlsdGVyKHUgPT4gISF1KSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB1c2VyUHJlZmVyZW5jZXMuZ2V0KCdsYW5ndWFnZScpKSxcbiAgICAgICAgICBzdGFydFdpdGgoZmlyc3RMYW5ndWFnZSksXG4gICAgICAgICAgZmlsdGVyKGxhbmcgPT4gISFsYW5nKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShsYW5nID0+IHtcbiAgICAgICAgICB0cmFuc2xhdGVTZXJ2aWNlLnN3aXRjaFRvTGFuZ3VhZ2UobGFuZyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGluaXRpYWxpemU7XG59XG5cbi8qKlxuICogQ29tbW9ubHkgdXNlZCBkaXJlY3RpdmVzLCBkYXRhIGFjY2VzcyBhbmQgdHJhbnNsYXRpb24uIFRoaXMgbW9kdWxlIGlzIHRoZSBzaGFyZWRcbiAqIG1vZHVsZSBhY3Jvc3MgYWxsIGNvcmUgY29tcG9uZW50cy4gSXQgc2hvdWxkIGJlIGltcG9ydGVkIGJ5IGRlZmF1bHQuXG4gKlxuICogQGV4cG9ydHMgSWNvbkRpcmVjdGl2ZSBBIGRpcmVjdGl2ZSB0byBzZXQgYSBjOHkgaWNvbiB3aXRoIFtjOHlJY29uXT1cIidyb2NrZXQnXCIuXG4gKiBAZXhwb3J0cyBPdXRsZXREaXJlY3RpdmUgQSBkaXJlY3RpdmUgd2hpY2ggYWxsb3dzIHRvIHNldCBET00gb3IgQW5ndWxhciB0ZW1wbGF0ZXMgKHVzZWQgZm9yIHVwZ3JhZGUpLlxuICogQGV4cG9ydHMgSTE4bk1vZHVsZSBUcmFuc2xhdGlvbiBtb2R1bGUuXG4gKiBAZXhwb3J0cyBOZ0NvbW1vbk1vZHVsZSBBbmd1bGFyIGNvbW1vbiBtb2R1bGUuXG4gKiBAZXhwb3J0cyBEYXRhTW9kdWxlIFRoZSBkYXRhIGxheWVyIHRvIGFsbG93IERJIHdpdGggQGM4eS9jbGllbnQuXG4gKiBAZXhwb3J0cyBIdW1hbml6ZUFwcE5hbWVQaXBlIEh1bWFuaXplIGFuIGFwcGxpY2F0aW9uIG5hbWUgZm9yIGRpc3BsYXkgaW4gZS5nLiB0aGUgYXBwIHN3aXRjaGVyIChlLmcuIGBkZXZpY2VtYW5hZ2VtZW50YCBiZWNvbWVzIGBEZXZpY2UgTWFuYWdlbWVudGApLlxuICogQGV4cG9ydHMgSHVtYW5pemVQaXBlIEh1bWFuaXplIGEgc3RyaW5nLCBlLmcuIGBjOHlfd2F0ZXJfdGVtcGVyYXR1cmVgIGJlY29tZXMgYFdhdGVyIFRlbXBlcmF0dXJlYC5cbiAqIEBleHBvcnRzIFNob3VsZFNob3dNb1BpcGUgQ2hlY2tzIGlmIHBhc3NlZCBtYW5hZ2VkIG9iamVjdCBpcyBkZXZpY2Ugb3IgZ3JvdXAgdHlwZS5cbiAqIEBleHBvcnRzIEdldEdyb3VwSWNvblBpcGUgR2V0cyBwcm9wZXIgZ3JvdXAgaWNvbi5cbiAqIEBleHBvcnRzIFNob3J0ZW5Vc2VyTmFtZVBpcGUgQWxsb3dzIGEgc2hvcnQgbmFtZS4gRS5nLiBgRm9vIEJhcmAgZ2V0cyBgRi4gQmFyYC5cbiAqIEBleHBvcnRzIFVzZXJOYW1lSW5pdGlhbHNQaXBlIEFsbG93cyB0aGUgaW5pdGlhbHMgZnJvbSB0aGUgbmFtZS4gRS5nLiBgRm9vIEJhcmAgZ2V0cyBgRkJgLlxuICogQGV4cG9ydHMgRm9yT2ZEaXJlY3RpdmUgQSBmb3JPZiBkaXJlY3RpdmUgbGlrZSBuZ0ZvciBidXQgd2l0aCBsb2FkLW1vcmUgZnVuY3Rpb24uXG4gKiBAZXhwb3J0cyBMb2FkTW9yZUNvbXBvbmVudCBBIGNvbXBvbmVudCB0byBsb2FkIG1vcmUgZGF0YSBmcm9tIGEgY2VydGFpbiBkYXRhLXNvdXJjZS5cbiAqIEBleHBvcnRzIFByb2dyZXNzQmFyQ29tcG9uZW50IERpc3BsYXlzIGVpdGhlciBkZWZpbmVkIG9yIHVuZGVmaW5lZCBwcm9ncmVzcy5cbiAqIEBleHBvcnRzIERyb3Bkb3duRGlyZWN0aW9uRGlyZWN0aXZlIERldGVybWluZXMgaWYgYSBkcm9wZG93biBvcGVucyB0byB0aGUgYm90dG9tIG9yIHRvIHRoZSB0b3AuXG4gKiBAZXhwb3J0cyBUZXh0YXJlYUF1dG9yZXNpemVEaXJlY3RpdmUgcmVzaXplcyBhIHRleHRhcmVhIGhlaWdodCBhcyB0aGUgdXNlciBpbnB1dHMuXG4gKiBAZXhwb3J0cyBPcGVyYXRpb25SZXN1bHRDb21wb25lbnQgZGlzcGxheXMgYW4gYW5pbWF0ZWQgc3ZnIGZvciBzdWNjZXNzIGFuZCBlcnJvciBvcGVyYXRpb25zLlxuICovXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgTmdDb21tb25Nb2R1bGUsXG4gICAgSTE4bk1vZHVsZSxcbiAgICBUb29sdGlwTW9kdWxlLFxuICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgICBBc3NldExpbmtQaXBlLFxuICAgIEM4eUNvbXBvbmVudE91dGxldCxcbiAgICBIdW1hbml6ZUFwcE5hbWVQaXBlLFxuICAgIEljb25EaXJlY3RpdmUsXG4gICAgRGF0ZVBpcGUsXG4gICAgTG9hZGluZ0NvbXBvbmVudCxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb250ZXh0RGlyZWN0aXZlLFxuICAgIEJ5dGVzUGlwZSxcbiAgICBVc2VyTmFtZUluaXRpYWxzUGlwZSxcbiAgICBTaG9ydGVuVXNlck5hbWVQaXBlLFxuICAgIEh1bWFuaXplUGlwZSxcbiAgICBJZkFsbG93ZWREaXJlY3RpdmUsXG4gICAgTnVtYmVyUGlwZSxcbiAgICBPcGVyYXRpb25SZXN1bHRDb21wb25lbnQsXG4gICAgTWFya2Rvd25Ub0h0bWxQaXBlLFxuICAgIE1vTmFtZVBpcGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbnRleHREaXJlY3RpdmUsXG4gICAgSWNvbkRpcmVjdGl2ZSxcbiAgICBPdXRsZXREaXJlY3RpdmUsXG4gICAgSTE4bk1vZHVsZSxcbiAgICBOZ0NvbW1vbk1vZHVsZSxcbiAgICBIdW1hbml6ZUFwcE5hbWVQaXBlLFxuICAgIEh1bWFuaXplUGlwZSxcbiAgICBTaG91bGRTaG93TW9QaXBlLFxuICAgIEdldEdyb3VwSWNvblBpcGUsXG4gICAgSWZBbGxvd2VkRGlyZWN0aXZlLFxuICAgIFNob3J0ZW5Vc2VyTmFtZVBpcGUsXG4gICAgVXNlck5hbWVJbml0aWFsc1BpcGUsXG4gICAgRm9yT2ZEaXJlY3RpdmUsXG4gICAgTG9hZE1vcmVDb21wb25lbnQsXG4gICAgTWFwRnVuY3Rpb25QaXBlLFxuICAgIFByb2dyZXNzQmFyQ29tcG9uZW50LFxuICAgIERhdGVQaXBlLFxuICAgIE51bWJlclBpcGUsXG4gICAgTG9hZGluZ0NvbXBvbmVudCxcbiAgICBEcm9wZG93bkRpcmVjdGlvbkRpcmVjdGl2ZSxcbiAgICBUZXh0YXJlYUF1dG9yZXNpemVEaXJlY3RpdmUsXG4gICAgVGFic2V0QXJpYURpcmVjdGl2ZSxcbiAgICBPcGVyYXRpb25SZXN1bHRDb21wb25lbnQsXG4gICAgVmlydHVhbFNjcm9sbGVyV3JhcHBlckNvbXBvbmVudCxcbiAgICBWaXJ0dWFsU2Nyb2xsV2luZG93RGlyZWN0aXZlLFxuICAgIEJ5dGVzUGlwZSxcbiAgICBTaG93SWZGaWx0ZXJQaXBlLFxuICAgIFNraXBMaW5rRGlyZWN0aXZlLFxuICAgIE1hcmtkb3duVG9IdG1sUGlwZSxcbiAgICBNb05hbWVQaXBlLFxuICAgIEdlbmVyaWNGaWxlSWNvblBpcGUsXG4gICAgU3RyaW5naWZ5T2JqZWN0UGlwZSxcbiAgICBBc3NldExpbmtQaXBlLFxuICAgIEM4eUNvbXBvbmVudE91dGxldFxuICBdLFxuICBkZWNsYXJhdGlvbnM6IFtcbiAgICBPdXRsZXREaXJlY3RpdmUsXG4gICAgU2hvdWxkU2hvd01vUGlwZSxcbiAgICBHZXRHcm91cEljb25QaXBlLFxuICAgIEZvck9mRGlyZWN0aXZlLFxuICAgIExvYWRNb3JlQ29tcG9uZW50LFxuICAgIE1hcEZ1bmN0aW9uUGlwZSxcbiAgICBQcm9ncmVzc0JhckNvbXBvbmVudCxcbiAgICBEcm9wZG93bkRpcmVjdGlvbkRpcmVjdGl2ZSxcbiAgICBUZXh0YXJlYUF1dG9yZXNpemVEaXJlY3RpdmUsXG4gICAgVGFic2V0QXJpYURpcmVjdGl2ZSxcbiAgICBWaXJ0dWFsU2Nyb2xsZXJXcmFwcGVyQ29tcG9uZW50LFxuICAgIFZpcnR1YWxTY3JvbGxXaW5kb3dEaXJlY3RpdmUsXG4gICAgU2hvd0lmRmlsdGVyUGlwZSxcbiAgICBTa2lwTGlua0RpcmVjdGl2ZSxcbiAgICBHZW5lcmljRmlsZUljb25QaXBlLFxuICAgIFN0cmluZ2lmeU9iamVjdFBpcGVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbQXNzZXRMaW5rUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29tbW9uTW9kdWxlIHtcbiAgc3RhdGljIHByb3ZpZGVycygpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uRGF0YU1vZHVsZS5wcm92aWRlcnMoKSxcbiAgICAgIC8vIFRPRE86IG1heWJlIHdlIGNhbiB0aGluayBvZiBhIHdheSB0byByZW1vdmUgdGhpcyBDOFlfQVBQIGdsb2JhbFxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gICAgICBob29rT3B0aW9ucygod2luZG93IGFzIGFueSkuQzhZX0FQUCB8fCB7fSksXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICAgICAgdXNlRmFjdG9yeTogaW5pdGlhbGl6ZVNlcnZpY2VzLFxuICAgICAgICBkZXBzOiBbVHJhbnNsYXRlU2VydmljZSwgQXBwU3RhdGVTZXJ2aWNlLCBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlXSxcbiAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgIH0sXG4gICAgICAuLi5JMThuTW9kdWxlLnByb3ZpZGVycygpLFxuICAgICAgSHVtYW5pemVQaXBlLFxuICAgICAgU2hvdWxkU2hvd01vUGlwZSxcbiAgICAgIEdldEdyb3VwSWNvblBpcGUsXG4gICAgICBIdW1hbml6ZUFwcE5hbWVQaXBlLFxuICAgICAgU2hvcnRlblVzZXJOYW1lUGlwZSxcbiAgICAgIE1hcEZ1bmN0aW9uUGlwZSxcbiAgICAgIERhdGVQaXBlLFxuICAgICAgQnl0ZXNQaXBlXG4gICAgXTtcbiAgfVxuXG4gIHN0YXRpYyBmb3JSb290KCk6IE1vZHVsZVdpdGhQcm92aWRlcnM8Q29tbW9uTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBDb21tb25Nb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IENvbW1vbk1vZHVsZS5wcm92aWRlcnMoKVxuICAgIH07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc2V0VGhlbWUoJ2JzNCcpO1xuICB9XG59XG4iXX0=