UNPKG

ng-jhipster

Version:

A Jhipster util library for Angular

146 lines (142 loc) 17.8 kB
/* Copyright 2013-2020 the original author or authors from the JHipster project. This file is part of the JHipster project, see https://www.jhipster.tech/ for more information. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ import { Injectable, SecurityContext, Optional, NgZone } from '@angular/core'; import { DomSanitizer } from '@angular/platform-browser'; import { TranslateService } from '@ngx-translate/core'; import { JhiConfigService } from '../config.service'; import * as i0 from "@angular/core"; import * as i1 from "@angular/platform-browser"; import * as i2 from "../config.service"; import * as i3 from "@ngx-translate/core"; export class JhiAlertService { constructor(sanitizer, configService, ngZone, translateService) { this.sanitizer = sanitizer; this.configService = configService; this.ngZone = ngZone; this.translateService = translateService; const config = this.configService.getConfig(); this.toast = config.alertAsToast; this.i18nEnabled = config.i18nEnabled; this.alertId = 0; // unique id for each alert. Starts from 0. this.alerts = []; this.timeout = config.alertTimeout; } clear() { this.alerts.splice(0, this.alerts.length); } get() { return this.alerts; } success(msg, params, position) { return this.addAlert({ type: 'success', msg, params, timeout: this.timeout, toast: this.isToast(), position }, []); } error(msg, params, position) { return this.addAlert({ type: 'danger', msg, params, timeout: this.timeout, toast: this.isToast(), position }, []); } warning(msg, params, position) { return this.addAlert({ type: 'warning', msg, params, timeout: this.timeout, toast: this.isToast(), position }, []); } info(msg, params, position) { return this.addAlert({ type: 'info', msg, params, timeout: this.timeout, toast: this.isToast(), position }, []); } addAlert(alertOptions, extAlerts) { alertOptions.id = this.alertId++; if (this.i18nEnabled && alertOptions.msg) { alertOptions.msg = this.translateService.instant(alertOptions.msg, alertOptions.params); } const alert = this.factory(alertOptions); if (alertOptions.timeout && alertOptions.timeout > 0) { // Workaround protractor waiting for setTimeout. // Reference https://www.protractortest.org/#/timeouts this.ngZone.runOutsideAngular(() => { setTimeout(() => { this.ngZone.run(() => { this.closeAlert(alertOptions.id, extAlerts); }); }, alertOptions.timeout); }); } return alert; } closeAlert(id, extAlerts) { const thisAlerts = extAlerts && extAlerts.length > 0 ? extAlerts : this.alerts; return this.closeAlertByIndex(thisAlerts.map(e => e.id).indexOf(id), thisAlerts); } closeAlertByIndex(index, thisAlerts) { return thisAlerts.splice(index, 1); } isToast() { return this.toast; } factory(alertOptions) { const alert = { type: alertOptions.type, msg: this.sanitizer.sanitize(SecurityContext.HTML, alertOptions.msg), id: alertOptions.id, timeout: alertOptions.timeout, toast: alertOptions.toast, position: alertOptions.position ? alertOptions.position : 'top right', scoped: alertOptions.scoped, close: (alerts) => { return this.closeAlert(alertOptions.id, alerts); } }; if (!alert.scoped) { this.alerts.push(alert); } return alert; } } JhiAlertService.ɵprov = i0.ɵɵdefineInjectable({ factory: function JhiAlertService_Factory() { return new JhiAlertService(i0.ɵɵinject(i1.DomSanitizer), i0.ɵɵinject(i2.JhiConfigService), i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i3.TranslateService, 8)); }, token: JhiAlertService, providedIn: "root" }); JhiAlertService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; JhiAlertService.ctorParameters = () => [ { type: DomSanitizer }, { type: JhiConfigService }, { type: NgZone }, { type: TranslateService, decorators: [{ type: Optional }] } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlL2FsZXJ0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7O0FBbUJyRCxNQUFNLE9BQU8sZUFBZTtJQU94QixZQUNZLFNBQXVCLEVBQ3ZCLGFBQStCLEVBQy9CLE1BQWMsRUFDRixnQkFBa0M7UUFIOUMsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNGLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFFdEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsMkNBQTJDO1FBQzdELElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxHQUFHO1FBQ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBVyxFQUFFLE1BQVksRUFBRSxRQUFpQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQ2hCO1lBQ0ksSUFBSSxFQUFFLFNBQVM7WUFDZixHQUFHO1lBQ0gsTUFBTTtZQUNOLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNyQixRQUFRO1NBQ1gsRUFDRCxFQUFFLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBVyxFQUFFLE1BQVksRUFBRSxRQUFpQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQ2hCO1lBQ0ksSUFBSSxFQUFFLFFBQVE7WUFDZCxHQUFHO1lBQ0gsTUFBTTtZQUNOLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNyQixRQUFRO1NBQ1gsRUFDRCxFQUFFLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBVyxFQUFFLE1BQVksRUFBRSxRQUFpQjtRQUNoRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQ2hCO1lBQ0ksSUFBSSxFQUFFLFNBQVM7WUFDZixHQUFHO1lBQ0gsTUFBTTtZQUNOLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNyQixRQUFRO1NBQ1gsRUFDRCxFQUFFLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFJLENBQUMsR0FBVyxFQUFFLE1BQVksRUFBRSxRQUFpQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQ2hCO1lBQ0ksSUFBSSxFQUFFLE1BQU07WUFDWixHQUFHO1lBQ0gsTUFBTTtZQUNOLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNyQixRQUFRO1NBQ1gsRUFDRCxFQUFFLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFRCxRQUFRLENBQUMsWUFBc0IsRUFBRSxTQUFxQjtRQUNsRCxZQUFZLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRTtZQUN0QyxZQUFZLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0Y7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pDLElBQUksWUFBWSxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsT0FBTyxHQUFHLENBQUMsRUFBRTtZQUNqRCxnREFBZ0Q7WUFDaEQsc0RBQXNEO1lBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO2dCQUM5QixVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTt3QkFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO29CQUNoRCxDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQyxDQUFDO1NBQ1A7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsVUFBVSxDQUFDLEVBQVUsRUFBRSxTQUFzQjtRQUN6QyxNQUFNLFVBQVUsR0FBZSxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzRixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsaUJBQWlCLENBQUMsS0FBYSxFQUFFLFVBQXNCO1FBQ25ELE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUVPLE9BQU8sQ0FBQyxZQUFzQjtRQUNsQyxNQUFNLEtBQUssR0FBYTtZQUNwQixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDdkIsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQztZQUNwRSxFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUU7WUFDbkIsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPO1lBQzdCLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSztZQUN6QixRQUFRLEVBQUUsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsV0FBVztZQUNyRSxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU07WUFDM0IsS0FBSyxFQUFFLENBQUMsTUFBa0IsRUFBRSxFQUFFO2dCQUMxQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNwRCxDQUFDO1NBQ0osQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDOzs7O1lBMUlKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBckJRLFlBQVk7WUFHWixnQkFBZ0I7WUFKdUIsTUFBTTtZQUU3QyxnQkFBZ0IsdUJBZ0NoQixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiBDb3B5cmlnaHQgMjAxMy0yMDIwIHRoZSBvcmlnaW5hbCBhdXRob3Igb3IgYXV0aG9ycyBmcm9tIHRoZSBKSGlwc3RlciBwcm9qZWN0LlxuXG4gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEpIaXBzdGVyIHByb2plY3QsIHNlZSBodHRwczovL3d3dy5qaGlwc3Rlci50ZWNoL1xuIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBTZWN1cml0eUNvbnRleHQsIE9wdGlvbmFsLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5pbXBvcnQgeyBKaGlDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vY29uZmlnLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBKaGlBbGVydFR5cGUgPSAnc3VjY2VzcycgfCAnZGFuZ2VyJyB8ICd3YXJuaW5nJyB8ICdpbmZvJztcblxuZXhwb3J0IGludGVyZmFjZSBKaGlBbGVydCB7XG4gICAgaWQ/OiBudW1iZXI7XG4gICAgdHlwZTogSmhpQWxlcnRUeXBlO1xuICAgIG1zZzogc3RyaW5nO1xuICAgIHBhcmFtcz86IGFueTtcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIHRvYXN0PzogYm9vbGVhbjtcbiAgICBwb3NpdGlvbj86IHN0cmluZztcbiAgICBzY29wZWQ/OiBib29sZWFuO1xuICAgIGNsb3NlPzogKGFsZXJ0czogSmhpQWxlcnRbXSkgPT4gdm9pZDtcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBKaGlBbGVydFNlcnZpY2Uge1xuICAgIHByaXZhdGUgYWxlcnRJZDogbnVtYmVyO1xuICAgIHByaXZhdGUgYWxlcnRzOiBKaGlBbGVydFtdO1xuICAgIHByaXZhdGUgdGltZW91dDogbnVtYmVyO1xuICAgIHByaXZhdGUgdG9hc3Q6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBpMThuRW5hYmxlZDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgICAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IEpoaUNvbmZpZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxuICAgICkge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMudG9hc3QgPSBjb25maWcuYWxlcnRBc1RvYXN0O1xuICAgICAgICB0aGlzLmkxOG5FbmFibGVkID0gY29uZmlnLmkxOG5FbmFibGVkO1xuICAgICAgICB0aGlzLmFsZXJ0SWQgPSAwOyAvLyB1bmlxdWUgaWQgZm9yIGVhY2ggYWxlcnQuIFN0YXJ0cyBmcm9tIDAuXG4gICAgICAgIHRoaXMuYWxlcnRzID0gW107XG4gICAgICAgIHRoaXMudGltZW91dCA9IGNvbmZpZy5hbGVydFRpbWVvdXQ7XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuYWxlcnRzLnNwbGljZSgwLCB0aGlzLmFsZXJ0cy5sZW5ndGgpO1xuICAgIH1cblxuICAgIGdldCgpOiBKaGlBbGVydFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxlcnRzO1xuICAgIH1cblxuICAgIHN1Y2Nlc3MobXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcpOiBKaGlBbGVydCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGVycm9yKG1zZzogc3RyaW5nLCBwYXJhbXM/OiBhbnksIHBvc2l0aW9uPzogc3RyaW5nKTogSmhpQWxlcnQge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRBbGVydChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHdhcm5pbmcobXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcpOiBKaGlBbGVydCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGluZm8obXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcpOiBKaGlBbGVydCB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgICBtc2csXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXG4gICAgICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZEFsZXJ0KGFsZXJ0T3B0aW9uczogSmhpQWxlcnQsIGV4dEFsZXJ0czogSmhpQWxlcnRbXSk6IEpoaUFsZXJ0IHtcbiAgICAgICAgYWxlcnRPcHRpb25zLmlkID0gdGhpcy5hbGVydElkKys7XG4gICAgICAgIGlmICh0aGlzLmkxOG5FbmFibGVkICYmIGFsZXJ0T3B0aW9ucy5tc2cpIHtcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9ucy5tc2cgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChhbGVydE9wdGlvbnMubXNnLCBhbGVydE9wdGlvbnMucGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGVydCA9IHRoaXMuZmFjdG9yeShhbGVydE9wdGlvbnMpO1xuICAgICAgICBpZiAoYWxlcnRPcHRpb25zLnRpbWVvdXQgJiYgYWxlcnRPcHRpb25zLnRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBwcm90cmFjdG9yIHdhaXRpbmcgZm9yIHNldFRpbWVvdXQuXG4gICAgICAgICAgICAgLy8gUmVmZXJlbmNlIGh0dHBzOi8vd3d3LnByb3RyYWN0b3J0ZXN0Lm9yZy8jL3RpbWVvdXRzXG4gICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZUFsZXJ0KGFsZXJ0T3B0aW9ucy5pZCwgZXh0QWxlcnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0sIGFsZXJ0T3B0aW9ucy50aW1lb3V0KTtcbiAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxlcnQ7XG4gICAgfVxuXG4gICAgY2xvc2VBbGVydChpZDogbnVtYmVyLCBleHRBbGVydHM/OiBKaGlBbGVydFtdKTogSmhpQWxlcnRbXSB7XG4gICAgICAgIGNvbnN0IHRoaXNBbGVydHM6IEpoaUFsZXJ0W10gPSBleHRBbGVydHMgJiYgZXh0QWxlcnRzLmxlbmd0aCA+IDAgPyBleHRBbGVydHMgOiB0aGlzLmFsZXJ0cztcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2VBbGVydEJ5SW5kZXgodGhpc0FsZXJ0cy5tYXAoZSA9PiBlLmlkKS5pbmRleE9mKGlkKSwgdGhpc0FsZXJ0cyk7XG4gICAgfVxuXG4gICAgY2xvc2VBbGVydEJ5SW5kZXgoaW5kZXg6IG51bWJlciwgdGhpc0FsZXJ0czogSmhpQWxlcnRbXSk6IEpoaUFsZXJ0W10ge1xuICAgICAgICByZXR1cm4gdGhpc0FsZXJ0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cblxuICAgIGlzVG9hc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvYXN0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZmFjdG9yeShhbGVydE9wdGlvbnM6IEpoaUFsZXJ0KTogSmhpQWxlcnQge1xuICAgICAgICBjb25zdCBhbGVydDogSmhpQWxlcnQgPSB7XG4gICAgICAgICAgICB0eXBlOiBhbGVydE9wdGlvbnMudHlwZSxcbiAgICAgICAgICAgIG1zZzogdGhpcy5zYW5pdGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIGFsZXJ0T3B0aW9ucy5tc2cpLFxuICAgICAgICAgICAgaWQ6IGFsZXJ0T3B0aW9ucy5pZCxcbiAgICAgICAgICAgIHRpbWVvdXQ6IGFsZXJ0T3B0aW9ucy50aW1lb3V0LFxuICAgICAgICAgICAgdG9hc3Q6IGFsZXJ0T3B0aW9ucy50b2FzdCxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhbGVydE9wdGlvbnMucG9zaXRpb24gPyBhbGVydE9wdGlvbnMucG9zaXRpb24gOiAndG9wIHJpZ2h0JyxcbiAgICAgICAgICAgIHNjb3BlZDogYWxlcnRPcHRpb25zLnNjb3BlZCxcbiAgICAgICAgICAgIGNsb3NlOiAoYWxlcnRzOiBKaGlBbGVydFtdKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2VBbGVydChhbGVydE9wdGlvbnMuaWQsIGFsZXJ0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICghYWxlcnQuc2NvcGVkKSB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0cy5wdXNoKGFsZXJ0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxlcnQ7XG4gICAgfVxufVxuIl19