UNPKG

@universis/common

Version:

Universis - common directives and services

139 lines (138 loc) 17 kB
import { ChangeDetectorRef, Injectable, Inject, InjectionToken } from '@angular/core'; import { TranslateService, TranslatePipe } from '@ngx-translate/core'; import * as i0 from "@angular/core"; import * as i1 from "@ngx-translate/core"; export let GUEST_SIDEBAR_LOCATIONS = new InjectionToken('app.guest-sidebar.locations'); class TranslationChangeDetector extends ChangeDetectorRef { checkNoChanges() { } detach() { } detectChanges() { } markForCheck() { } reattach() { } } export class AppGuestSidebarService { constructor(_translateService, sidebarLocations) { this._translateService = _translateService; this.sidebarLocations = sidebarLocations; this.navigationItems = []; this._changeDetector = new TranslationChangeDetector(); } loadConfig() { return new Promise((resolve, reject) => { this.addRange(this.sidebarLocations); return resolve(); }); } /** * Adds one or more navigation items to application sidebar * @param {AppSidebarNavigationItem} item */ add(...item) { // initialize translate pipe with null change detector const pipe = new TranslatePipe(this._translateService, this._changeDetector); // add navigation items to array this.navigationItems.push.apply(this.navigationItems, item.map(navigationItem => { // translate name const x = Object.assign(navigationItem, { name: pipe.transform(navigationItem.key) }); if (Array.isArray(x.children)) { // translate children x.children = x.children.map(child => { return Object.assign(child, { name: pipe.transform(child.key) }); }); } return x; })); } /** * Adds a collection of navigation items to application sidebar * @param {Array<AppSidebarNavigationItem>} items */ addRange(items) { return this.add.apply(this, items); } /** * Remove one navigation item from application sidebar * @param {AppSidebarNavigationItem} item */ remove(item) { // find item to remove const itemIndex = this.navigationItems.findIndex(el => el.name === item.name || el.url === item.url || el.key === item.key); // if item is found if (itemIndex !== -1) { this.navigationItems.splice(itemIndex, 1); } } /** * Removes one or more navigation items from application sidebar * @param {Array<AppSidebarNavigationItem>} items */ removeRange(items) { for (const item of items) { this.remove(item); } } /** * Adds one or more navigation items to as children to a sidebar item * @param {AppSidebarNavigationItem} parent * @param {AppSidebarNavigationItem} item */ addChild(parent, ...item) { // initialize translate pipe with null change detector const pipe = new TranslatePipe(this._translateService, this._changeDetector); // translate child const translatedChild = item.map(navigationItem => { // translate name const x = Object.assign(navigationItem, { name: pipe.transform(navigationItem.key) }); if (Array.isArray(x.children)) { // translate children x.children = x.children.map(child => { return Object.assign(child, { name: pipe.transform(child.key) }); }); } return x; }); // find parent by index and insert into place const parentIndex = this.navigationItems.findIndex(el => el.name === parent.name || el.url === parent.url || el.key === parent.key); if (parentIndex) { const parentWithChildren = this.navigationItems[parentIndex]; const childrenArray = parentWithChildren.children || []; childrenArray.push.apply(childrenArray, translatedChild); parentWithChildren.children = childrenArray; // Replaces parent with parentWithChildren this.navigationItems.splice(parentIndex, 1, parentWithChildren); } } /** * Adds a collection of navigation items to as children to a parent * @param {AppSidebarNavigationItem} parent * @param {Array<AppSidebarNavigationItem>} items */ addChildren(parent, items) { return this.addChild.apply(this, [parent, ...items]); } } AppGuestSidebarService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ AppGuestSidebarService.ctorParameters = () => [ { type: TranslateService }, { type: Array, decorators: [{ type: Inject, args: [GUEST_SIDEBAR_LOCATIONS,] }] } ]; AppGuestSidebarService.ngInjectableDef = i0.defineInjectable({ factory: function AppGuestSidebarService_Factory() { return new AppGuestSidebarService(i0.inject(i1.TranslateService), i0.inject(GUEST_SIDEBAR_LOCATIONS)); }, token: AppGuestSidebarService, providedIn: "root" }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWd1ZXN0LXNpZGViYXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvY29tbW9uLyIsInNvdXJjZXMiOlsic2hhcmVkL3NlcnZpY2VzL2FwcC1ndWVzdC1zaWRlYmFyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGlCQUFpQixFQUFFLFVBQVUsRUFBWSxNQUFNLEVBQUUsY0FBYyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzlGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBWXBFLE1BQU0sQ0FBQyxJQUFJLHVCQUF1QixHQUFHLElBQUksY0FBYyxDQUFrQyw2QkFBNkIsQ0FBQyxDQUFDO0FBRXhILCtCQUFnQyxTQUFRLGlCQUFpQjtJQUN2RCxjQUFjO0lBQ2QsQ0FBQztJQUVELE1BQU07SUFDTixDQUFDO0lBRUQsYUFBYTtJQUNiLENBQUM7SUFFRCxZQUFZO0lBQ1osQ0FBQztJQUVELFFBQVE7SUFDUixDQUFDO0NBRUY7QUFLRCxNQUFNO0lBSUosWUFBb0IsaUJBQW1DLEVBQ1osZ0JBQWlEO1FBRHhFLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDWixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlDO1FBSHJGLG9CQUFlLEdBQW9DLEVBQUUsQ0FBQztRQUkzRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUkseUJBQXlCLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNyQyxPQUFPLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEdBQUcsQ0FBQyxHQUFHLElBQXFDO1FBQzdDLHNEQUFzRDtRQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzdFLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzlFLGlCQUFpQjtZQUNuQixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRTtnQkFDdEMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQzthQUN6QyxDQUFDLENBQUM7WUFDSCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM3QixxQkFBcUI7Z0JBQ3JCLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ25DLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7d0JBQzFCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQ2hDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNKO1lBQ0QsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFFBQVEsQ0FBQyxLQUFzQztRQUNwRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLElBQThCO1FBQzFDLHNCQUFzQjtRQUN0QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0gsbUJBQW1CO1FBQ25CLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUcsQ0FBQztTQUM3QztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXLENBQUMsS0FBc0M7UUFDdkQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksUUFBUSxDQUFDLE1BQWdDLEVBQUUsR0FBRyxJQUFxQztRQUN4RixzREFBc0Q7UUFDdEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM3RSxrQkFBa0I7UUFDbEIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUNoRCxpQkFBaUI7WUFDakIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQUU7Z0JBQ3RDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7YUFDekMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDN0IscUJBQXFCO2dCQUNyQixDQUFDLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNuQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO3dCQUMxQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO3FCQUNoQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDSCw2Q0FBNkM7UUFDN0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BJLElBQUksV0FBVyxFQUFFO1lBQ2YsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzdELE1BQU0sYUFBYSxHQUFHLGtCQUFrQixDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDeEQsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ3pELGtCQUFrQixDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUM7WUFDNUMsMENBQTBDO1lBQzFDLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztTQUNqRTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksV0FBVyxDQUFDLE1BQWdDLEVBQUUsS0FBc0M7UUFDekYsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7OztZQXRIRixVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7Ozs7WUFsQ08sZ0JBQWdCO1lBd0N1QyxLQUFLLHVCQUEvRCxNQUFNLFNBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0YWJsZSwgT3B0aW9uYWwsIEluamVjdCwgSW5qZWN0aW9uVG9rZW59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlLCBUcmFuc2xhdGVQaXBlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIEFwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbSB7XG4gIGtleTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgY2xhc3M/OiBzdHJpbmc7XG4gIGluZGV4PzogbnVtYmVyO1xuICBpY29uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IEFycmF5PEFwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbT47XG59XG5cbmV4cG9ydCBsZXQgR1VFU1RfU0lERUJBUl9MT0NBVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48QXJyYXk8QXBwU2lkZWJhck5hdmlnYXRpb25JdGVtPj4oJ2FwcC5ndWVzdC1zaWRlYmFyLmxvY2F0aW9ucycpO1xuXG5jbGFzcyBUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yIGV4dGVuZHMgQ2hhbmdlRGV0ZWN0b3JSZWYge1xuICBjaGVja05vQ2hhbmdlcygpOiB2b2lkIHtcbiAgfVxuXG4gIGRldGFjaCgpOiB2b2lkIHtcbiAgfVxuXG4gIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBtYXJrRm9yQ2hlY2soKTogdm9pZCB7XG4gIH1cblxuICByZWF0dGFjaCgpOiB2b2lkIHtcbiAgfVxuXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFwcEd1ZXN0U2lkZWJhclNlcnZpY2Uge1xuXG4gIHB1YmxpYyBuYXZpZ2F0aW9uSXRlbXM6IEFycmF5PEFwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlRGV0ZWN0b3I6IFRyYW5zbGF0aW9uQ2hhbmdlRGV0ZWN0b3I7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQEluamVjdChHVUVTVF9TSURFQkFSX0xPQ0FUSU9OUykgcHJpdmF0ZSBzaWRlYmFyTG9jYXRpb25zOiBBcnJheTxBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW0+KSB7XG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IgPSBuZXcgVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvcigpO1xuICB9XG5cbiAgcHVibGljIGxvYWRDb25maWcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuYWRkUmFuZ2UodGhpcy5zaWRlYmFyTG9jYXRpb25zKTtcbiAgICAgIHJldHVybiByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBvbmUgb3IgbW9yZSBuYXZpZ2F0aW9uIGl0ZW1zIHRvIGFwcGxpY2F0aW9uIHNpZGViYXJcbiAgICogQHBhcmFtIHtBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW19IGl0ZW1cbiAgICovXG4gIHB1YmxpYyBhZGQoLi4uaXRlbTogQXJyYXk8QXBwU2lkZWJhck5hdmlnYXRpb25JdGVtPik6IHZvaWQge1xuICAgICAgICAvLyBpbml0aWFsaXplIHRyYW5zbGF0ZSBwaXBlIHdpdGggbnVsbCBjaGFuZ2UgZGV0ZWN0b3JcbiAgICAgICAgY29uc3QgcGlwZSA9IG5ldyBUcmFuc2xhdGVQaXBlKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UsIHRoaXMuX2NoYW5nZURldGVjdG9yKTtcbiAgICAgICAgLy8gYWRkIG5hdmlnYXRpb24gaXRlbXMgdG8gYXJyYXlcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSXRlbXMucHVzaC5hcHBseSh0aGlzLm5hdmlnYXRpb25JdGVtcywgaXRlbS5tYXAobmF2aWdhdGlvbkl0ZW0gPT4ge1xuICAgICAgICAgIC8vIHRyYW5zbGF0ZSBuYW1lXG4gICAgICAgIGNvbnN0IHggPSBPYmplY3QuYXNzaWduKG5hdmlnYXRpb25JdGVtLCB7XG4gICAgICAgICAgbmFtZTogcGlwZS50cmFuc2Zvcm0obmF2aWdhdGlvbkl0ZW0ua2V5KVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeC5jaGlsZHJlbikpIHtcbiAgICAgICAgICAvLyB0cmFuc2xhdGUgY2hpbGRyZW5cbiAgICAgICAgICB4LmNoaWxkcmVuID0geC5jaGlsZHJlbi5tYXAoIGNoaWxkID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNoaWxkLCB7XG4gICAgICAgICAgICAgIG5hbWU6IHBpcGUudHJhbnNmb3JtKGNoaWxkLmtleSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4O1xuICAgICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb2xsZWN0aW9uIG9mIG5hdmlnYXRpb24gaXRlbXMgdG8gYXBwbGljYXRpb24gc2lkZWJhclxuICAgKiBAcGFyYW0ge0FycmF5PEFwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbT59IGl0ZW1zXG4gICAqL1xuICBwdWJsaWMgYWRkUmFuZ2UoaXRlbXM6IEFycmF5PEFwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbT4pOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5hZGQuYXBwbHkodGhpcywgaXRlbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBvbmUgbmF2aWdhdGlvbiBpdGVtIGZyb20gYXBwbGljYXRpb24gc2lkZWJhclxuICAgKiBAcGFyYW0ge0FwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbX0gaXRlbVxuICAgKi9cbiAgcHVibGljIHJlbW92ZShpdGVtOiBBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW0pOiB2b2lkIHtcbiAgICAvLyBmaW5kIGl0ZW0gdG8gcmVtb3ZlXG4gICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5uYXZpZ2F0aW9uSXRlbXMuZmluZEluZGV4KGVsID0+IGVsLm5hbWUgPT09IGl0ZW0ubmFtZSB8fCBlbC51cmwgPT09IGl0ZW0udXJsIHx8ICBlbC5rZXkgPT09IGl0ZW0ua2V5KTtcbiAgICAvLyBpZiBpdGVtIGlzIGZvdW5kXG4gICAgaWYgKGl0ZW1JbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbkl0ZW1zLnNwbGljZShpdGVtSW5kZXgsIDEsICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgb25lIG9yIG1vcmUgbmF2aWdhdGlvbiBpdGVtcyBmcm9tIGFwcGxpY2F0aW9uIHNpZGViYXJcbiAgICogQHBhcmFtIHtBcnJheTxBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW0+fSBpdGVtc1xuICAgKi9cbiAgcHVibGljIHJlbW92ZVJhbmdlKGl0ZW1zOiBBcnJheTxBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW0+KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICB0aGlzLnJlbW92ZShpdGVtKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBvbmUgb3IgbW9yZSBuYXZpZ2F0aW9uIGl0ZW1zIHRvIGFzIGNoaWxkcmVuIHRvIGEgc2lkZWJhciBpdGVtXG4gICAqIEBwYXJhbSB7QXBwU2lkZWJhck5hdmlnYXRpb25JdGVtfSBwYXJlbnRcbiAgICogQHBhcmFtIHtBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW19IGl0ZW1cbiAgICovXG4gIHB1YmxpYyBhZGRDaGlsZChwYXJlbnQ6IEFwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbSwgLi4uaXRlbTogQXJyYXk8QXBwU2lkZWJhck5hdmlnYXRpb25JdGVtPik6IHZvaWQge1xuICAgIC8vIGluaXRpYWxpemUgdHJhbnNsYXRlIHBpcGUgd2l0aCBudWxsIGNoYW5nZSBkZXRlY3RvclxuICAgIGNvbnN0IHBpcGUgPSBuZXcgVHJhbnNsYXRlUGlwZSh0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLCB0aGlzLl9jaGFuZ2VEZXRlY3Rvcik7XG4gICAgLy8gdHJhbnNsYXRlIGNoaWxkXG4gICAgY29uc3QgdHJhbnNsYXRlZENoaWxkID0gaXRlbS5tYXAobmF2aWdhdGlvbkl0ZW0gPT4ge1xuICAgICAgLy8gdHJhbnNsYXRlIG5hbWVcbiAgICAgIGNvbnN0IHggPSBPYmplY3QuYXNzaWduKG5hdmlnYXRpb25JdGVtLCB7XG4gICAgICAgIG5hbWU6IHBpcGUudHJhbnNmb3JtKG5hdmlnYXRpb25JdGVtLmtleSlcbiAgICAgIH0pO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeC5jaGlsZHJlbikpIHtcbiAgICAgICAgLy8gdHJhbnNsYXRlIGNoaWxkcmVuXG4gICAgICAgIHguY2hpbGRyZW4gPSB4LmNoaWxkcmVuLm1hcCggY2hpbGQgPT4ge1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGNoaWxkLCB7XG4gICAgICAgICAgICBuYW1lOiBwaXBlLnRyYW5zZm9ybShjaGlsZC5rZXkpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHg7XG4gICAgfSk7XG4gICAgLy8gZmluZCBwYXJlbnQgYnkgaW5kZXggYW5kIGluc2VydCBpbnRvIHBsYWNlXG4gICAgY29uc3QgcGFyZW50SW5kZXggPSB0aGlzLm5hdmlnYXRpb25JdGVtcy5maW5kSW5kZXgoZWwgPT4gZWwubmFtZSA9PT0gcGFyZW50Lm5hbWUgfHwgZWwudXJsID09PSBwYXJlbnQudXJsIHx8IGVsLmtleSA9PT0gcGFyZW50LmtleSk7XG4gICAgaWYgKHBhcmVudEluZGV4KSB7XG4gICAgICBjb25zdCBwYXJlbnRXaXRoQ2hpbGRyZW4gPSB0aGlzLm5hdmlnYXRpb25JdGVtc1twYXJlbnRJbmRleF07XG4gICAgICBjb25zdCBjaGlsZHJlbkFycmF5ID0gcGFyZW50V2l0aENoaWxkcmVuLmNoaWxkcmVuIHx8IFtdO1xuICAgICAgY2hpbGRyZW5BcnJheS5wdXNoLmFwcGx5KGNoaWxkcmVuQXJyYXksIHRyYW5zbGF0ZWRDaGlsZCk7XG4gICAgICBwYXJlbnRXaXRoQ2hpbGRyZW4uY2hpbGRyZW4gPSBjaGlsZHJlbkFycmF5O1xuICAgICAgLy8gUmVwbGFjZXMgcGFyZW50IHdpdGggcGFyZW50V2l0aENoaWxkcmVuXG4gICAgICB0aGlzLm5hdmlnYXRpb25JdGVtcy5zcGxpY2UocGFyZW50SW5kZXgsIDEsIHBhcmVudFdpdGhDaGlsZHJlbik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb2xsZWN0aW9uIG9mIG5hdmlnYXRpb24gaXRlbXMgdG8gYXMgY2hpbGRyZW4gdG8gYSBwYXJlbnRcbiAgICogQHBhcmFtIHtBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW19IHBhcmVudFxuICAgKiBAcGFyYW0ge0FycmF5PEFwcFNpZGViYXJOYXZpZ2F0aW9uSXRlbT59IGl0ZW1zXG4gICAqL1xuICBwdWJsaWMgYWRkQ2hpbGRyZW4ocGFyZW50OiBBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW0sIGl0ZW1zOiBBcnJheTxBcHBTaWRlYmFyTmF2aWdhdGlvbkl0ZW0+KTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ2hpbGQuYXBwbHkodGhpcywgW3BhcmVudCwgLi4uaXRlbXNdKTtcbiAgfVxufVxuIl19