UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

283 lines 31.6 kB
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: [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, OutletDirective], 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, OutletDirective ], 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: [ 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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bkI7b0JBQ0QsWUFBWSxFQUFFO3dCQUNaLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCLDBCQUEwQjt3QkFDMUIsMkJBQTJCO3dCQUMzQixtQkFBbUI7d0JBQ25CLCtCQUErQjt3QkFDL0IsNEJBQTRCO3dCQUM1QixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixtQkFBbUI7cUJBQ3BCO29CQUNELFNBQVMsRUFBRSxDQUFDLGFBQWEsQ0FBQztpQkFDM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY3JvbGxpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSBhcyBOZ0NvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBBUFBfSU5JVElBTElaRVIsIE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0YU1vZHVsZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXBpJztcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Rvb2x0aXAnO1xuaW1wb3J0IHsgc2V0VGhlbWUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3V0aWxzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJMThuTW9kdWxlIH0gZnJvbSAnLi4vaTE4bi9pMThuLm1vZHVsZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vaTE4bi90cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBBc3NldExpbmtQaXBlIH0gZnJvbSAnLi9hc3NldC1saW5rLnBpcGUnO1xuaW1wb3J0IHsgQnl0ZXNQaXBlIH0gZnJvbSAnLi9ieXRlcy5waXBlJztcbmltcG9ydCB7IEM4eUNvbXBvbmVudE91dGxldCB9IGZyb20gJy4vY29tcG9uZW50LW91dGxldC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICcuL2RhdGUucGlwZSc7XG5pbXBvcnQgeyBEcm9wZG93bkRpcmVjdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vZHJvcGRvd24tZGlyZWN0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29udGV4dERpcmVjdGl2ZSB9IGZyb20gJy4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEZvck9mRGlyZWN0aXZlIH0gZnJvbSAnLi9mb3JPZi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR2VuZXJpY0ZpbGVJY29uUGlwZSB9IGZyb20gJy4vZ2VuZXJpYy1maWxlLWljb24ucGlwZSc7XG5pbXBvcnQgeyBHZXRHcm91cEljb25QaXBlIH0gZnJvbSAnLi9nZXQtZ3JvdXAtaWNvbi5waXBlJztcbmltcG9ydCB7IEh1bWFuaXplQXBwTmFtZVBpcGUgfSBmcm9tICcuL2h1bWFuaXplLWFwcC1uYW1lLnBpcGUnO1xuaW1wb3J0IHsgSHVtYW5pemVQaXBlIH0gZnJvbSAnLi9odW1hbml6ZS5waXBlJztcbmltcG9ydCB7IEljb25EaXJlY3RpdmUgfSBmcm9tICcuL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IElmQWxsb3dlZERpcmVjdGl2ZSB9IGZyb20gJy4vaWYtYWxsb3dlZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTG9hZE1vcmVDb21wb25lbnQgfSBmcm9tICcuL2xvYWQtbW9yZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTG9hZGluZ0NvbXBvbmVudCB9IGZyb20gJy4vbG9hZGluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWFwRnVuY3Rpb25QaXBlIH0gZnJvbSAnLi9tYXAtZnVuY3Rpb24ucGlwZSc7XG5pbXBvcnQgeyBNYXJrZG93blRvSHRtbFBpcGUgfSBmcm9tICcuL21hcmtkb3duLXRvLWh0bWwucGlwZSc7XG5pbXBvcnQgeyBNb05hbWVQaXBlIH0gZnJvbSAnLi9tby1uYW1lLnBpcGUnO1xuaW1wb3J0IHsgTnVtYmVyUGlwZSB9IGZyb20gJy4vbnVtYmVyLnBpcGUnO1xuaW1wb3J0IHsgT3BlcmF0aW9uUmVzdWx0Q29tcG9uZW50IH0gZnJvbSAnLi9vcGVyYXRpb24tcmVzdWx0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBob29rT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7IE91dGxldERpcmVjdGl2ZSB9IGZyb20gJy4vb3V0bGV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBQcm9ncmVzc0JhckNvbXBvbmVudCB9IGZyb20gJy4vcHJvZ3Jlc3MtYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTaG9ydGVuVXNlck5hbWVQaXBlIH0gZnJvbSAnLi9zaG9ydGVuLXVzZXItbmFtZS5waXBlJztcbmltcG9ydCB7IFNob3VsZFNob3dNb1BpcGUgfSBmcm9tICcuL3Nob3VsZC1zaG93LW1vLnBpcGUnO1xuaW1wb3J0IHsgU2hvd0lmRmlsdGVyUGlwZSB9IGZyb20gJy4vc2hvdy1pZi1maWx0ZXIucGlwZSc7XG5pbXBvcnQgeyBTa2lwTGlua0RpcmVjdGl2ZSB9IGZyb20gJy4vc2tpcC1saW5rLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTdHJpbmdpZnlPYmplY3RQaXBlIH0gZnJvbSAnLi9zdHJpbmdpZnktb2JqZWN0LnBpcGUnO1xuaW1wb3J0IHsgVGFic2V0QXJpYURpcmVjdGl2ZSB9IGZyb20gJy4vdGFic2V0LWFyaWEuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRleHRhcmVhQXV0b3Jlc2l6ZURpcmVjdGl2ZSB9IGZyb20gJy4vdGV4dGFyZWEtYXV0b3Jlc2l6ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi91aS1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJOYW1lSW5pdGlhbHNQaXBlIH0gZnJvbSAnLi91c2VyLW5hbWUtaW5pdGlhbHMucGlwZSc7XG5pbXBvcnQgeyBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi91c2VyLXByZWZlcmVuY2VzL3VzZXItcHJlZmVyZW5jZXMuc2VydmljZSc7XG5pbXBvcnQgeyBWaXJ0dWFsU2Nyb2xsV2luZG93RGlyZWN0aXZlIH0gZnJvbSAnLi92aXJ0dWFsLXNjcm9sbC92aXJ0dWFsLXNjcm9sbC13aW5kb3cuZGlyZWN0aXZlJztcbmltcG9ydCB7IFZpcnR1YWxTY3JvbGxlcldyYXBwZXJDb21wb25lbnQgfSBmcm9tICcuL3ZpcnR1YWwtc2Nyb2xsL3ZpcnR1YWwtc2Nyb2xsZXItd3JhcHBlci5jb21wb25lbnQnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVNlcnZpY2VzKFxuICB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICBzdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICB1c2VyUHJlZmVyZW5jZXM6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2Vcbikge1xuICBjb25zdCBpbml0aWFsaXplID0gKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5U3RyaW5nTGFuZ3VhZ2UgPSB0cmFuc2xhdGVTZXJ2aWNlLnF1ZXJ5U3RyaW5nTGFuZygpO1xuICAgIGNvbnN0IGZpcnN0TGFuZ3VhZ2UgPSB0cmFuc2xhdGVTZXJ2aWNlLmZpcnN0U3VwcG9ydGVkTGFuZ3VhZ2UoKTtcblxuICAgIC8qXG4gICAgICBUaGUgP2xhbmcgcGFyYW1ldGVyIHdpbGwgcHJldmVudCB0aGUgdXNlciBwcmVmZXJlbmNlIGxhbmd1YWdlIGZyb20gYmVpbmcgYWN0aXZhdGVkXG4gICAgKi9cbiAgICBpZiAocXVlcnlTdHJpbmdMYW5ndWFnZSAmJiB0cmFuc2xhdGVTZXJ2aWNlLmdldFN1cHBvcnRlZChxdWVyeVN0cmluZ0xhbmd1YWdlKSkge1xuICAgICAgdHJhbnNsYXRlU2VydmljZS5zd2l0Y2hUb0xhbmd1YWdlKHF1ZXJ5U3RyaW5nTGFuZ3VhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS5jdXJyZW50VXNlclxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAodXNlciA9PiB1c2VyICYmIHVzZXIudXNlck5hbWUpLFxuICAgICAgICAgIGZpbHRlcih1ID0+ICEhdSksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdXNlclByZWZlcmVuY2VzLmdldCgnbGFuZ3VhZ2UnKSksXG4gICAgICAgICAgc3RhcnRXaXRoKGZpcnN0TGFuZ3VhZ2UpLFxuICAgICAgICAgIGZpbHRlcihsYW5nID0+ICEhbGFuZyksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUobGFuZyA9PiB7XG4gICAgICAgICAgdHJhbnNsYXRlU2VydmljZS5zd2l0Y2hUb0xhbmd1YWdlKGxhbmcpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiBpbml0aWFsaXplO1xufVxuXG4vKipcbiAqIENvbW1vbmx5IHVzZWQgZGlyZWN0aXZlcywgZGF0YSBhY2Nlc3MgYW5kIHRyYW5zbGF0aW9uLiBUaGlzIG1vZHVsZSBpcyB0aGUgc2hhcmVkXG4gKiBtb2R1bGUgYWNyb3NzIGFsbCBjb3JlIGNvbXBvbmVudHMuIEl0IHNob3VsZCBiZSBpbXBvcnRlZCBieSBkZWZhdWx0LlxuICpcbiAqIEBleHBvcnRzIEljb25EaXJlY3RpdmUgQSBkaXJlY3RpdmUgdG8gc2V0IGEgYzh5IGljb24gd2l0aCBbYzh5SWNvbl09XCIncm9ja2V0J1wiLlxuICogQGV4cG9ydHMgT3V0bGV0RGlyZWN0aXZlIEEgZGlyZWN0aXZlIHdoaWNoIGFsbG93cyB0byBzZXQgRE9NIG9yIEFuZ3VsYXIgdGVtcGxhdGVzICh1c2VkIGZvciB1cGdyYWRlKS5cbiAqIEBleHBvcnRzIEkxOG5Nb2R1bGUgVHJhbnNsYXRpb24gbW9kdWxlLlxuICogQGV4cG9ydHMgTmdDb21tb25Nb2R1bGUgQW5ndWxhciBjb21tb24gbW9kdWxlLlxuICogQGV4cG9ydHMgRGF0YU1vZHVsZSBUaGUgZGF0YSBsYXllciB0byBhbGxvdyBESSB3aXRoIEBjOHkvY2xpZW50LlxuICogQGV4cG9ydHMgSHVtYW5pemVBcHBOYW1lUGlwZSBIdW1hbml6ZSBhbiBhcHBsaWNhdGlvbiBuYW1lIGZvciBkaXNwbGF5IGluIGUuZy4gdGhlIGFwcCBzd2l0Y2hlciAoZS5nLiBgZGV2aWNlbWFuYWdlbWVudGAgYmVjb21lcyBgRGV2aWNlIE1hbmFnZW1lbnRgKS5cbiAqIEBleHBvcnRzIEh1bWFuaXplUGlwZSBIdW1hbml6ZSBhIHN0cmluZywgZS5nLiBgYzh5X3dhdGVyX3RlbXBlcmF0dXJlYCBiZWNvbWVzIGBXYXRlciBUZW1wZXJhdHVyZWAuXG4gKiBAZXhwb3J0cyBTaG91bGRTaG93TW9QaXBlIENoZWNrcyBpZiBwYXNzZWQgbWFuYWdlZCBvYmplY3QgaXMgZGV2aWNlIG9yIGdyb3VwIHR5cGUuXG4gKiBAZXhwb3J0cyBHZXRHcm91cEljb25QaXBlIEdldHMgcHJvcGVyIGdyb3VwIGljb24uXG4gKiBAZXhwb3J0cyBTaG9ydGVuVXNlck5hbWVQaXBlIEFsbG93cyBhIHNob3J0IG5hbWUuIEUuZy4gYEZvbyBCYXJgIGdldHMgYEYuIEJhcmAuXG4gKiBAZXhwb3J0cyBVc2VyTmFtZUluaXRpYWxzUGlwZSBBbGxvd3MgdGhlIGluaXRpYWxzIGZyb20gdGhlIG5hbWUuIEUuZy4gYEZvbyBCYXJgIGdldHMgYEZCYC5cbiAqIEBleHBvcnRzIEZvck9mRGlyZWN0aXZlIEEgZm9yT2YgZGlyZWN0aXZlIGxpa2UgbmdGb3IgYnV0IHdpdGggbG9hZC1tb3JlIGZ1bmN0aW9uLlxuICogQGV4cG9ydHMgTG9hZE1vcmVDb21wb25lbnQgQSBjb21wb25lbnQgdG8gbG9hZCBtb3JlIGRhdGEgZnJvbSBhIGNlcnRhaW4gZGF0YS1zb3VyY2UuXG4gKiBAZXhwb3J0cyBQcm9ncmVzc0JhckNvbXBvbmVudCBEaXNwbGF5cyBlaXRoZXIgZGVmaW5lZCBvciB1bmRlZmluZWQgcHJvZ3Jlc3MuXG4gKiBAZXhwb3J0cyBEcm9wZG93bkRpcmVjdGlvbkRpcmVjdGl2ZSBEZXRlcm1pbmVzIGlmIGEgZHJvcGRvd24gb3BlbnMgdG8gdGhlIGJvdHRvbSBvciB0byB0aGUgdG9wLlxuICogQGV4cG9ydHMgVGV4dGFyZWFBdXRvcmVzaXplRGlyZWN0aXZlIHJlc2l6ZXMgYSB0ZXh0YXJlYSBoZWlnaHQgYXMgdGhlIHVzZXIgaW5wdXRzLlxuICogQGV4cG9ydHMgT3BlcmF0aW9uUmVzdWx0Q29tcG9uZW50IGRpc3BsYXlzIGFuIGFuaW1hdGVkIHN2ZyBmb3Igc3VjY2VzcyBhbmQgZXJyb3Igb3BlcmF0aW9ucy5cbiAqL1xuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1xuICAgIE5nQ29tbW9uTW9kdWxlLFxuICAgIEkxOG5Nb2R1bGUsXG4gICAgVG9vbHRpcE1vZHVsZSxcbiAgICBTY3JvbGxpbmdNb2R1bGUsXG4gICAgQXNzZXRMaW5rUGlwZSxcbiAgICBDOHlDb21wb25lbnRPdXRsZXQsXG4gICAgSHVtYW5pemVBcHBOYW1lUGlwZSxcbiAgICBJY29uRGlyZWN0aXZlLFxuICAgIERhdGVQaXBlLFxuICAgIExvYWRpbmdDb21wb25lbnQsXG4gICAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBFbXB0eVN0YXRlQ29udGV4dERpcmVjdGl2ZSxcbiAgICBCeXRlc1BpcGUsXG4gICAgVXNlck5hbWVJbml0aWFsc1BpcGUsXG4gICAgU2hvcnRlblVzZXJOYW1lUGlwZSxcbiAgICBIdW1hbml6ZVBpcGUsXG4gICAgSWZBbGxvd2VkRGlyZWN0aXZlLFxuICAgIE51bWJlclBpcGUsXG4gICAgT3BlcmF0aW9uUmVzdWx0Q29tcG9uZW50LFxuICAgIE1hcmtkb3duVG9IdG1sUGlwZSxcbiAgICBNb05hbWVQaXBlLFxuICAgIE91dGxldERpcmVjdGl2ZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgRW1wdHlTdGF0ZUNvbXBvbmVudCxcbiAgICBFbXB0eVN0YXRlQ29udGV4dERpcmVjdGl2ZSxcbiAgICBJY29uRGlyZWN0aXZlLFxuICAgIE91dGxldERpcmVjdGl2ZSxcbiAgICBJMThuTW9kdWxlLFxuICAgIE5nQ29tbW9uTW9kdWxlLFxuICAgIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gICAgSHVtYW5pemVQaXBlLFxuICAgIFNob3VsZFNob3dNb1BpcGUsXG4gICAgR2V0R3JvdXBJY29uUGlwZSxcbiAgICBJZkFsbG93ZWREaXJlY3RpdmUsXG4gICAgU2hvcnRlblVzZXJOYW1lUGlwZSxcbiAgICBVc2VyTmFtZUluaXRpYWxzUGlwZSxcbiAgICBGb3JPZkRpcmVjdGl2ZSxcbiAgICBMb2FkTW9yZUNvbXBvbmVudCxcbiAgICBNYXBGdW5jdGlvblBpcGUsXG4gICAgUHJvZ3Jlc3NCYXJDb21wb25lbnQsXG4gICAgRGF0ZVBpcGUsXG4gICAgTnVtYmVyUGlwZSxcbiAgICBMb2FkaW5nQ29tcG9uZW50LFxuICAgIERyb3Bkb3duRGlyZWN0aW9uRGlyZWN0aXZlLFxuICAgIFRleHRhcmVhQXV0b3Jlc2l6ZURpcmVjdGl2ZSxcbiAgICBUYWJzZXRBcmlhRGlyZWN0aXZlLFxuICAgIE9wZXJhdGlvblJlc3VsdENvbXBvbmVudCxcbiAgICBWaXJ0dWFsU2Nyb2xsZXJXcmFwcGVyQ29tcG9uZW50LFxuICAgIFZpcnR1YWxTY3JvbGxXaW5kb3dEaXJlY3RpdmUsXG4gICAgQnl0ZXNQaXBlLFxuICAgIFNob3dJZkZpbHRlclBpcGUsXG4gICAgU2tpcExpbmtEaXJlY3RpdmUsXG4gICAgTWFya2Rvd25Ub0h0bWxQaXBlLFxuICAgIE1vTmFtZVBpcGUsXG4gICAgR2VuZXJpY0ZpbGVJY29uUGlwZSxcbiAgICBTdHJpbmdpZnlPYmplY3RQaXBlLFxuICAgIEFzc2V0TGlua1BpcGUsXG4gICAgQzh5Q29tcG9uZW50T3V0bGV0XG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFNob3VsZFNob3dNb1BpcGUsXG4gICAgR2V0R3JvdXBJY29uUGlwZSxcbiAgICBGb3JPZkRpcmVjdGl2ZSxcbiAgICBMb2FkTW9yZUNvbXBvbmVudCxcbiAgICBNYXBGdW5jdGlvblBpcGUsXG4gICAgUHJvZ3Jlc3NCYXJDb21wb25lbnQsXG4gICAgRHJvcGRvd25EaXJlY3Rpb25EaXJlY3RpdmUsXG4gICAgVGV4dGFyZWFBdXRvcmVzaXplRGlyZWN0aXZlLFxuICAgIFRhYnNldEFyaWFEaXJlY3RpdmUsXG4gICAgVmlydHVhbFNjcm9sbGVyV3JhcHBlckNvbXBvbmVudCxcbiAgICBWaXJ0dWFsU2Nyb2xsV2luZG93RGlyZWN0aXZlLFxuICAgIFNob3dJZkZpbHRlclBpcGUsXG4gICAgU2tpcExpbmtEaXJlY3RpdmUsXG4gICAgR2VuZXJpY0ZpbGVJY29uUGlwZSxcbiAgICBTdHJpbmdpZnlPYmplY3RQaXBlXG4gIF0sXG4gIHByb3ZpZGVyczogW0Fzc2V0TGlua1BpcGVdXG59KVxuZXhwb3J0IGNsYXNzIENvbW1vbk1vZHVsZSB7XG4gIHN0YXRpYyBwcm92aWRlcnMoKTogUHJvdmlkZXJbXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLkRhdGFNb2R1bGUucHJvdmlkZXJzKCksXG4gICAgICAvLyBUT0RPOiBtYXliZSB3ZSBjYW4gdGhpbmsgb2YgYSB3YXkgdG8gcmVtb3ZlIHRoaXMgQzhZX0FQUCBnbG9iYWxcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgaG9va09wdGlvbnMoKHdpbmRvdyBhcyBhbnkpLkM4WV9BUFAgfHwge30pLFxuICAgICAge1xuICAgICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICAgIHVzZUZhY3Rvcnk6IGluaXRpYWxpemVTZXJ2aWNlcyxcbiAgICAgICAgZGVwczogW1RyYW5zbGF0ZVNlcnZpY2UsIEFwcFN0YXRlU2VydmljZSwgVXNlclByZWZlcmVuY2VzU2VydmljZV0sXG4gICAgICAgIG11bHRpOiB0cnVlXG4gICAgICB9LFxuICAgICAgLi4uSTE4bk1vZHVsZS5wcm92aWRlcnMoKSxcbiAgICAgIEh1bWFuaXplUGlwZSxcbiAgICAgIFNob3VsZFNob3dNb1BpcGUsXG4gICAgICBHZXRHcm91cEljb25QaXBlLFxuICAgICAgSHVtYW5pemVBcHBOYW1lUGlwZSxcbiAgICAgIFNob3J0ZW5Vc2VyTmFtZVBpcGUsXG4gICAgICBNYXBGdW5jdGlvblBpcGUsXG4gICAgICBEYXRlUGlwZSxcbiAgICAgIEJ5dGVzUGlwZVxuICAgIF07XG4gIH1cblxuICBzdGF0aWMgZm9yUm9vdCgpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPENvbW1vbk1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQ29tbW9uTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBDb21tb25Nb2R1bGUucHJvdmlkZXJzKClcbiAgICB9O1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHNldFRoZW1lKCdiczQnKTtcbiAgfVxufVxuIl19