UNPKG

angular9-notifications-gpu

Version:

> A light and easy to use notifications library for Angular 2. ~~It features both regular page notifications (toasts) and push notifications.~~

207 lines 26.3 kB
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core'; import { NotificationsService } from '../../services/notifications.service'; import { NotificationAnimationType } from '../../enums/notification-animation-type.enum'; export class SimpleNotificationsComponent { constructor(service, cdr) { this.service = service; this.cdr = cdr; this.onCreate = new EventEmitter(); this.onDestroy = new EventEmitter(); this.notifications = []; this.position = ['bottom', 'right']; // Received values this.lastOnBottom = true; this.maxStack = 8; this.preventLastDuplicates = false; this.preventDuplicates = false; // Sent values this.timeOut = 0; this.maxLength = 0; this.clickToClose = true; this.clickIconToClose = false; this.showProgressBar = true; this.pauseOnHover = true; this.theClass = ''; this.rtl = false; this.animate = NotificationAnimationType.FromRight; this._usingComponentOptions = false; } set options(opt) { this._usingComponentOptions = true; this.attachChanges(opt); } ngOnInit() { /** * Only attach global options if config * options were never sent through input */ if (!this._usingComponentOptions) { this.attachChanges(this.service.globalOptions); } this.listener = this.service.emitter .subscribe(item => { switch (item.command) { case 'cleanAll': this.notifications = []; break; case 'clean': this.cleanSingle(item.id); break; case 'set': if (item.add) { this.add(item.notification); } else { this.defaultBehavior(item); } break; default: this.defaultBehavior(item); break; } if (!this.cdr['destroyed']) { this.cdr.detectChanges(); } }); } ngOnDestroy() { if (this.listener) { this.listener.unsubscribe(); } this.cdr.detach(); } // Default behavior on event defaultBehavior(value) { this.notifications.splice(this.notifications.indexOf(value.notification), 1); this.onDestroy.emit(this.buildEmit(value.notification, false)); } // Add the new notification to the notification array add(item) { item.createdOn = new Date(); let toBlock = this.preventLastDuplicates || this.preventDuplicates ? this.block(item) : false; // Save this as the last created notification this.lastNotificationCreated = item; // Override icon if set if (item.override && item.override.icons && item.override.icons[item.type]) { item.icon = item.override.icons[item.type]; } if (!toBlock) { // Check if the notification should be added at the start or the end of the array if (this.lastOnBottom) { if (this.notifications.length >= this.maxStack) { this.notifications.splice(0, 1); } this.notifications.push(item); } else { if (this.notifications.length >= this.maxStack) { this.notifications.splice(this.notifications.length - 1, 1); } this.notifications.splice(0, 0, item); } this.onCreate.emit(this.buildEmit(item, true)); } } // Check if notifications should be prevented block(item) { const toCheck = item.html ? this.checkHtml : this.checkStandard; if (this.preventDuplicates && this.notifications.length > 0) { for (let i = 0; i < this.notifications.length; i++) { if (toCheck(this.notifications[i], item)) { return true; } } } if (this.preventLastDuplicates) { let comp; if (this.preventLastDuplicates === 'visible' && this.notifications.length > 0) { if (this.lastOnBottom) { comp = this.notifications[this.notifications.length - 1]; } else { comp = this.notifications[0]; } } else if (this.preventLastDuplicates === 'all' && this.lastNotificationCreated) { comp = this.lastNotificationCreated; } else { return false; } return toCheck(comp, item); } return false; } checkStandard(checker, item) { return checker.type === item.type && checker.title === item.title && checker.content === item.content; } checkHtml(checker, item) { return checker.html ? checker.type === item.type && checker.title === item.title && checker.content === item.content && checker.html === item.html : false; } // Attach all the changes received in the options object attachChanges(options) { for (const key in options) { if (this.hasOwnProperty(key)) { this[key] = options[key]; } else if (key === 'icons') { this.service.icons = options[key]; } } } buildEmit(notification, to) { const toEmit = { createdOn: notification.createdOn, type: notification.type, icon: notification.icon, id: notification.id }; if (notification.html) { toEmit.html = notification.html; } else { toEmit.title = notification.title; toEmit.content = notification.content; } if (!to) { toEmit.destroyedOn = new Date(); } return toEmit; } cleanSingle(id) { let indexOfDelete = 0; let doDelete = false; let noti; this.notifications.forEach((notification, idx) => { if (notification.id === id) { indexOfDelete = idx; noti = notification; doDelete = true; } }); if (doDelete) { this.notifications.splice(indexOfDelete, 1); this.onDestroy.emit(this.buildEmit(noti, false)); } } } SimpleNotificationsComponent.decorators = [ { type: Component, args: [{ selector: 'simple-notifications', encapsulation: ViewEncapsulation.None, template: "<div class=\"simple-notification-wrapper\" [ngClass]=\"position\">\r\n <simple-notification\r\n *ngFor=\"let a of notifications; let i = index\"\r\n [item]=\"a\"\r\n [timeOut]=\"timeOut\"\r\n [clickToClose]=\"clickToClose\"\r\n [clickIconToClose]=\"clickIconToClose\"\r\n [maxLength]=\"maxLength\"\r\n [showProgressBar]=\"showProgressBar\"\r\n [pauseOnHover]=\"pauseOnHover\"\r\n [theClass]=\"theClass\"\r\n [rtl]=\"rtl\"\r\n [animate]=\"animate\"\r\n [position]=\"i\">\r\n </simple-notification>\r\n</div>", changeDetection: ChangeDetectionStrategy.OnPush, styles: [".simple-notification-wrapper{position:fixed;width:300px;z-index:1000}.simple-notification-wrapper.left{left:20px}.simple-notification-wrapper.top{top:20px}.simple-notification-wrapper.right{right:20px}.simple-notification-wrapper.bottom{bottom:20px}.simple-notification-wrapper.center{left:50%;transform:translateX(-50%)}.simple-notification-wrapper.middle{top:50%;transform:translateY(-50%)}.simple-notification-wrapper.middle.center{transform:translate(-50%,-50%)}@media (max-width:340px){.simple-notification-wrapper{width:auto;left:20px;right:20px}}"] }] } ]; /** @nocollapse */ SimpleNotificationsComponent.ctorParameters = () => [ { type: NotificationsService }, { type: ChangeDetectorRef } ]; SimpleNotificationsComponent.propDecorators = { options: [{ type: Input }], onCreate: [{ type: Output }], onDestroy: [{ type: Output }] }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLW5vdGlmaWNhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhcjktbm90aWZpY2F0aW9ucy1ncHUvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9zaW1wbGUtbm90aWZpY2F0aW9ucy9zaW1wbGUtbm90aWZpY2F0aW9ucy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMxRSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSw4Q0FBOEMsQ0FBQztBQVN2RixNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLFlBQ1UsT0FBNkIsRUFDN0IsR0FBc0I7UUFEdEIsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFDN0IsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFRdEIsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDOUIsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFekMsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBQ25DLGFBQVEsR0FBYSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUt6QyxrQkFBa0I7UUFDVixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixhQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsMEJBQXFCLEdBQVEsS0FBSyxDQUFDO1FBQ25DLHNCQUFpQixHQUFHLEtBQUssQ0FBQztRQUVsQyxjQUFjO1FBQ2QsWUFBTyxHQUFHLENBQUMsQ0FBQztRQUNaLGNBQVMsR0FBRyxDQUFDLENBQUM7UUFDZCxpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFD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Z2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge09wdGlvbnMsIFBvc2l0aW9ufSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL29wdGlvbnMudHlwZSc7XG5pbXBvcnQge05vdGlmaWNhdGlvbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9ub3RpZmljYXRpb24udHlwZSc7XG5pbXBvcnQge05vdGlmaWNhdGlvbnNTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHtOb3RpZmljYXRpb25BbmltYXRpb25UeXBlfSBmcm9tICcuLi8uLi9lbnVtcy9ub3RpZmljYXRpb24tYW5pbWF0aW9uLXR5cGUuZW51bSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpbXBsZS1ub3RpZmljYXRpb25zJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3NpbXBsZS1ub3RpZmljYXRpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2ltcGxlLW5vdGlmaWNhdGlvbnMuY29tcG9uZW50LmNzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTaW1wbGVOb3RpZmljYXRpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlcnZpY2U6IE5vdGlmaWNhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgQElucHV0KCkgc2V0IG9wdGlvbnMob3B0OiBPcHRpb25zKSB7XG4gICAgdGhpcy5fdXNpbmdDb21wb25lbnRPcHRpb25zID0gdHJ1ZTtcbiAgICB0aGlzLmF0dGFjaENoYW5nZXMob3B0KTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvbkNyZWF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uRGVzdHJveSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25bXSA9IFtdO1xuICBwb3NpdGlvbjogUG9zaXRpb24gPSBbJ2JvdHRvbScsICdyaWdodCddO1xuXG4gIHByaXZhdGUgbGFzdE5vdGlmaWNhdGlvbkNyZWF0ZWQ6IE5vdGlmaWNhdGlvbjtcbiAgcHJpdmF0ZSBsaXN0ZW5lcjogU3Vic2NyaXB0aW9uO1xuXG4gIC8vIFJlY2VpdmVkIHZhbHVlc1xuICBwcml2YXRlIGxhc3RPbkJvdHRvbSA9IHRydWU7XG4gIHByaXZhdGUgbWF4U3RhY2sgPSA4O1xuICBwcml2YXRlIHByZXZlbnRMYXN0RHVwbGljYXRlczogYW55ID0gZmFsc2U7XG4gIHByaXZhdGUgcHJldmVudER1cGxpY2F0ZXMgPSBmYWxzZTtcblxuICAvLyBTZW50IHZhbHVlc1xuICB0aW1lT3V0ID0gMDtcbiAgbWF4TGVuZ3RoID0gMDtcbiAgY2xpY2tUb0Nsb3NlID0gdHJ1ZTtcbiAgY2xpY2tJY29uVG9DbG9zZSA9IGZhbHNlO1xuICBzaG93UHJvZ3Jlc3NCYXIgPSB0cnVlO1xuICBwYXVzZU9uSG92ZXIgPSB0cnVlO1xuICB0aGVDbGFzcyA9ICcnO1xuICBydGwgPSBmYWxzZTtcbiAgYW5pbWF0ZTogTm90aWZpY2F0aW9uQW5pbWF0aW9uVHlwZSA9IE5vdGlmaWNhdGlvbkFuaW1hdGlvblR5cGUuRnJvbVJpZ2h0O1xuXG4gIHByaXZhdGUgX3VzaW5nQ29tcG9uZW50T3B0aW9ucyA9IGZhbHNlO1xuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgLyoqXG4gICAgICogT25seSBhdHRhY2ggZ2xvYmFsIG9wdGlvbnMgaWYgY29uZmlnXG4gICAgICogb3B0aW9ucyB3ZXJlIG5ldmVyIHNlbnQgdGhyb3VnaCBpbnB1dFxuICAgICAqL1xuICAgIGlmICghdGhpcy5fdXNpbmdDb21wb25lbnRPcHRpb25zKSB7XG4gICAgICB0aGlzLmF0dGFjaENoYW5nZXMoXG4gICAgICAgIHRoaXMuc2VydmljZS5nbG9iYWxPcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMubGlzdGVuZXIgPSB0aGlzLnNlcnZpY2UuZW1pdHRlclxuICAgICAgLnN1YnNjcmliZShpdGVtID0+IHtcbiAgICAgICAgc3dpdGNoIChpdGVtLmNvbW1hbmQpIHtcbiAgICAgICAgICBjYXNlICdjbGVhbkFsbCc6XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnY2xlYW4nOlxuICAgICAgICAgICAgdGhpcy5jbGVhblNpbmdsZShpdGVtLmlkISk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3NldCc6XG4gICAgICAgICAgICBpZiAoaXRlbS5hZGQpIHtcbiAgICAgICAgICAgICAgdGhpcy5hZGQoaXRlbS5ub3RpZmljYXRpb24hKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEJlaGF2aW9yKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0QmVoYXZpb3IoaXRlbSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY2RyWydkZXN0cm95ZWQnXSkge1xuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5saXN0ZW5lcikge1xuICAgICAgdGhpcy5saXN0ZW5lci51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRhY2goKTtcbiAgfVxuXG4gIC8vIERlZmF1bHQgYmVoYXZpb3Igb24gZXZlbnRcbiAgZGVmYXVsdEJlaGF2aW9yKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbnMuc3BsaWNlKHRoaXMubm90aWZpY2F0aW9ucy5pbmRleE9mKHZhbHVlLm5vdGlmaWNhdGlvbiksIDEpO1xuICAgIHRoaXMub25EZXN0cm95LmVtaXQodGhpcy5idWlsZEVtaXQodmFsdWUubm90aWZpY2F0aW9uLCBmYWxzZSkpO1xuICB9XG5cblxuICAvLyBBZGQgdGhlIG5ldyBub3RpZmljYXRpb24gdG8gdGhlIG5vdGlmaWNhdGlvbiBhcnJheVxuICBhZGQoaXRlbTogTm90aWZpY2F0aW9uKTogdm9pZCB7XG4gICAgaXRlbS5jcmVhdGVkT24gPSBuZXcgRGF0ZSgpO1xuXG4gICAgbGV0IHRvQmxvY2s6IGJvb2xlYW4gPSB0aGlzLnByZXZlbnRMYXN0RHVwbGljYXRlcyB8fCB0aGlzLnByZXZlbnREdXBsaWNhdGVzID8gdGhpcy5ibG9jayhpdGVtKSA6IGZhbHNlO1xuXG4gICAgLy8gU2F2ZSB0aGlzIGFzIHRoZSBsYXN0IGNyZWF0ZWQgbm90aWZpY2F0aW9uXG4gICAgdGhpcy5sYXN0Tm90aWZpY2F0aW9uQ3JlYXRlZCA9IGl0ZW07XG4gICAgLy8gT3ZlcnJpZGUgaWNvbiBpZiBzZXRcbiAgICBpZiAoaXRlbS5vdmVycmlkZSAmJiBpdGVtLm92ZXJyaWRlLmljb25zICYmIGl0ZW0ub3ZlcnJpZGUuaWNvbnNbaXRlbS50eXBlXSkge1xuICAgICAgaXRlbS5pY29uID0gaXRlbS5vdmVycmlkZS5pY29uc1tpdGVtLnR5cGVdO1xuICAgIH1cblxuICAgIGlmICghdG9CbG9jaykge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhlIG5vdGlmaWNhdGlvbiBzaG91bGQgYmUgYWRkZWQgYXQgdGhlIHN0YXJ0IG9yIHRoZSBlbmQgb2YgdGhlIGFycmF5XG4gICAgICBpZiAodGhpcy5sYXN0T25Cb3R0b20pIHtcbiAgICAgICAgaWYgKHRoaXMubm90aWZpY2F0aW9ucy5sZW5ndGggPj0gdGhpcy5tYXhTdGFjaykge1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5zcGxpY2UoMCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMucHVzaChpdGVtKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbnMubGVuZ3RoID49IHRoaXMubWF4U3RhY2spIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuc3BsaWNlKHRoaXMubm90aWZpY2F0aW9ucy5sZW5ndGggLSAxLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5zcGxpY2UoMCwgMCwgaXRlbSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMub25DcmVhdGUuZW1pdCh0aGlzLmJ1aWxkRW1pdChpdGVtLCB0cnVlKSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgbm90aWZpY2F0aW9ucyBzaG91bGQgYmUgcHJldmVudGVkXG4gIGJsb2NrKGl0ZW06IE5vdGlmaWNhdGlvbik6IGJvb2xlYW4ge1xuXG4gICAgY29uc3QgdG9DaGVjayA9IGl0ZW0uaHRtbCA/IHRoaXMuY2hlY2tIdG1sIDogdGhpcy5jaGVja1N0YW5kYXJkO1xuXG4gICAgaWYgKHRoaXMucHJldmVudER1cGxpY2F0ZXMgJiYgdGhpcy5ub3RpZmljYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ub3RpZmljYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0b0NoZWNrKHRoaXMubm90aWZpY2F0aW9uc1tpXSwgaXRlbSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnByZXZlbnRMYXN0RHVwbGljYXRlcykge1xuXG4gICAgICBsZXQgY29tcDogTm90aWZpY2F0aW9uO1xuXG4gICAgICBpZiAodGhpcy5wcmV2ZW50TGFzdER1cGxpY2F0ZXMgPT09ICd2aXNpYmxlJyAmJiB0aGlzLm5vdGlmaWNhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAodGhpcy5sYXN0T25Cb3R0b20pIHtcbiAgICAgICAgICBjb21wID0gdGhpcy5ub3RpZmljYXRpb25zW3RoaXMubm90aWZpY2F0aW9ucy5sZW5ndGggLSAxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21wID0gdGhpcy5ub3RpZmljYXRpb25zWzBdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucHJldmVudExhc3REdXBsaWNhdGVzID09PSAnYWxsJyAmJiB0aGlzLmxhc3ROb3RpZmljYXRpb25DcmVhdGVkKSB7XG4gICAgICAgIGNvbXAgPSB0aGlzLmxhc3ROb3RpZmljYXRpb25DcmVhdGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRvQ2hlY2soY29tcCwgaXRlbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY2hlY2tTdGFuZGFyZChjaGVja2VyOiBOb3RpZmljYXRpb24sIGl0ZW06IE5vdGlmaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjaGVja2VyLnR5cGUgPT09IGl0ZW0udHlwZSAmJiBjaGVja2VyLnRpdGxlID09PSBpdGVtLnRpdGxlICYmIGNoZWNrZXIuY29udGVudCA9PT0gaXRlbS5jb250ZW50O1xuICB9XG5cbiAgY2hlY2tIdG1sKGNoZWNrZXI6IE5vdGlmaWNhdGlvbiwgaXRlbTogTm90aWZpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNoZWNrZXIuaHRtbCA/IGNoZWNrZXIudHlwZSA9PT0gaXRlbS50eXBlICYmIGNoZWNrZXIudGl0bGUgPT09IGl0ZW0udGl0bGUgJiYgY2hlY2tlci5jb250ZW50ID09PSBpdGVtLmNvbnRlbnQgJiYgY2hlY2tlci5odG1sID09PSBpdGVtLmh0bWwgOiBmYWxzZTtcbiAgfVxuXG4gIC8vIEF0dGFjaCBhbGwgdGhlIGNoYW5nZXMgcmVjZWl2ZWQgaW4gdGhlIG9wdGlvbnMgb2JqZWN0XG4gIGF0dGFjaENoYW5nZXMob3B0aW9uczogYW55KSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3B0aW9ucykge1xuICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAoPGFueT50aGlzKVtrZXldID0gb3B0aW9uc1trZXldO1xuICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdpY29ucycpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmljb25zID0gb3B0aW9uc1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJ1aWxkRW1pdChub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbiwgdG86IGJvb2xlYW4pIHtcbiAgICBjb25zdCB0b0VtaXQ6IE5vdGlmaWNhdGlvbiA9IHtcbiAgICAgIGNyZWF0ZWRPbjogbm90aWZpY2F0aW9uLmNyZWF0ZWRPbixcbiAgICAgIHR5cGU6IG5vdGlmaWNhdGlvbi50eXBlLFxuICAgICAgaWNvbjogbm90aWZpY2F0aW9uLmljb24sXG4gICAgICBpZDogbm90aWZpY2F0aW9uLmlkXG4gICAgfTtcblxuICAgIGlmIChub3RpZmljYXRpb24uaHRtbCkge1xuICAgICAgdG9FbWl0Lmh0bWwgPSBub3RpZmljYXRpb24uaHRtbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdG9FbWl0LnRpdGxlID0gbm90aWZpY2F0aW9uLnRpdGxlO1xuICAgICAgdG9FbWl0LmNvbnRlbnQgPSBub3RpZmljYXRpb24uY29udGVudDtcbiAgICB9XG5cbiAgICBpZiAoIXRvKSB7XG4gICAgICB0b0VtaXQuZGVzdHJveWVkT24gPSBuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0b0VtaXQ7XG4gIH1cblxuICBjbGVhblNpbmdsZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgbGV0IGluZGV4T2ZEZWxldGUgPSAwO1xuICAgIGxldCBkb0RlbGV0ZSA9IGZhbHNlO1xuICAgIGxldCBub3RpO1xuXG4gICAgdGhpcy5ub3RpZmljYXRpb25zLmZvckVhY2goKG5vdGlmaWNhdGlvbiwgaWR4KSA9PiB7XG4gICAgICBpZiAobm90aWZpY2F0aW9uLmlkID09PSBpZCkge1xuICAgICAgICBpbmRleE9mRGVsZXRlID0gaWR4O1xuICAgICAgICBub3RpID0gbm90aWZpY2F0aW9uO1xuICAgICAgICBkb0RlbGV0ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZG9EZWxldGUpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5zcGxpY2UoaW5kZXhPZkRlbGV0ZSwgMSk7XG4gICAgICB0aGlzLm9uRGVzdHJveS5lbWl0KHRoaXMuYnVpbGRFbWl0KG5vdGksIGZhbHNlKSk7XG4gICAgfVxuICB9XG59XG4iXX0=