UNPKG

@neocomplexx/ngx-neo-modal-mat

Version:
310 lines 32 kB
import { __awaiter } from "tslib"; import { Injectable } from '@angular/core'; import { NgxNeoModalMatComponent, AlertButton } from './ngx-neo-modal-mat.component'; import { MatDialog } from '@angular/material/dialog'; import { TranslateService } from '@ngx-translate/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/material/dialog"; import * as i2 from "@ngx-translate/core"; export class NgxNeoModalMatService { constructor(dialog, translate) { this.dialog = dialog; this.translate = translate; this.originalAlert = window.alert; window.alert = (msg) => __awaiter(this, void 0, void 0, function* () { yield this.alert(msg); }); } openModal(config) { return __awaiter(this, void 0, void 0, function* () { const dialogRef = this.dialog.open(NgxNeoModalMatComponent, { data: { config: config } }); return dialogRef.afterClosed().toPromise(); }); } /** * Show message. Can be use as window.alert */ alert(msg, autofocus = false) { return __awaiter(this, void 0, void 0, function* () { const config = { title: { visibility: false }, message: msg, button: { cancel: { visibility: false }, accept: { autofocus: autofocus, } } }; yield this.openModal(config); }); } /** * * Show succsessfull message */ success(msg, autofocus = true) { return __awaiter(this, void 0, void 0, function* () { const title = yield this.translate.get('SUCCESSTITLE').toPromise(); const config = { title: { text: title }, message: msg, type: 'success', button: { cancel: { visibility: false }, accept: { autofocus: autofocus, } } }; return this.openModal(config); }); } /** * * Warning message */ warning(msg, autofocus = false) { return __awaiter(this, void 0, void 0, function* () { const title = yield this.translate.get('WARNTITLE').toPromise(); const config = { title: { text: title }, message: msg, type: 'warning', button: { cancel: { visibility: false }, accept: { autofocus: autofocus, } } }; return this.openModal(config); }); } /** * * Error message */ error(msg, autofocus = true) { return __awaiter(this, void 0, void 0, function* () { const title = yield this.translate.get('ERRORTITLE').toPromise(); const config = { title: { text: title }, message: msg, type: 'error', button: { cancel: { visibility: false }, accept: { autofocus: autofocus, } } }; return this.openModal(config); }); } /** * * Information message */ info(msg, autofocus = true) { return __awaiter(this, void 0, void 0, function* () { const title = yield this.translate.get('INFOTITLE').toPromise(); const config = { title: { text: title }, message: msg, type: 'info', button: { cancel: { visibility: false }, accept: { autofocus: autofocus, } } }; return this.openModal(config); }); } /** * * Show decission modal with question and two options for accept or reject. */ // tslint:disable-next-line:max-line-length decision(questionMsg, successMsg, cancelMsg, autofocus = AlertButton.Cancel) { return __awaiter(this, void 0, void 0, function* () { const buttonAcceptFocus = autofocus === AlertButton.Accept; const buttonCancelFocus = autofocus === AlertButton.Cancel; const title = yield this.translate.get('DECISIONTITLE').toPromise(); const config = { title: { text: title }, message: questionMsg, type: 'question', button: { cancel: { autofocus: buttonCancelFocus }, accept: { autofocus: buttonAcceptFocus } } }; return this.openModal(config) .then((value) => { if (value.ButtonResponse === AlertButton.Accept) { if (successMsg && successMsg !== '') { this.success(successMsg); } } else { if (cancelMsg) { this.info(cancelMsg); } } return Promise.resolve(value); }); }); } /** * * Input text message */ // tslint:disable-next-line:max-line-length input(title, placeholder, successMsg, autofocus = true, buttonAutofocus = AlertButton.Accept) { return __awaiter(this, void 0, void 0, function* () { const buttonAcceptFocus = buttonAutofocus === AlertButton.Accept; const buttonCancelFocus = buttonAutofocus === AlertButton.Cancel; const config = { title: { text: title }, message: '', input: { placeholder, visibility: true, autofocus: autofocus }, button: { accepct: { autofocus: buttonAcceptFocus }, cancel: { autofocus: buttonCancelFocus } } }; return this.openModal(config) .then((value) => { if (value.ButtonResponse === AlertButton.Accept) { if (successMsg) { this.success(successMsg); } } return Promise.resolve(value); }); }); } // tslint:disable:no-bitwise yesNoCancel(title, message, buttonFocus) { return __awaiter(this, void 0, void 0, function* () { return this.custom(title, message, (AlertButton.Yes | AlertButton.No | AlertButton.Cancel), buttonFocus); }); } custom(title, message, buttons, buttonFocus) { return __awaiter(this, void 0, void 0, function* () { const buttonAccept = (buttons & AlertButton.Accept) > 0; const buttonYes = (buttons & AlertButton.Yes) > 0; const buttonCancel = (buttons & AlertButton.Cancel) > 0; const buttonNo = (buttons & AlertButton.No) > 0; const buttonRetry = (buttons & AlertButton.Retry) > 0; const buttonAcceptFocus = buttonFocus === AlertButton.Accept; const buttonYesFocus = buttonFocus === AlertButton.Yes; const buttonCancelFocus = buttonFocus === AlertButton.Cancel; const buttonNoFocus = buttonFocus === AlertButton.No; const buttonRetryFocus = buttonFocus === AlertButton.Retry; const config = { title: { text: title }, message, button: { yes: { visibility: buttonYes, autofocus: buttonYesFocus }, no: { visibility: buttonNo, autofocus: buttonNoFocus }, retry: { visibility: buttonRetry, autofocus: buttonRetryFocus }, cancel: { visibility: buttonCancel, autofocus: buttonCancelFocus }, accept: { visibility: buttonAccept, autofocus: buttonAcceptFocus } } }; return this.openModal(config); }); } isObject(item) { return (item && typeof item === 'object' && !Array.isArray(item)); } // this will lead to infinite recursion on circular references mergeDeep(target, ...sources) { if (!sources.length) { return target; } const source = sources.shift(); if (this.isObject(target) && this.isObject(source)) { for (const key in source) { if (this.isObject(source[key])) { if (!target[key]) { Object.assign(target, { [key]: {} }); } this.mergeDeep(target[key], source[key]); } else { Object.assign(target, { [key]: source[key] }); } } } return this.mergeDeep(target, ...sources); } } /** @nocollapse */ NgxNeoModalMatService.ɵfac = function NgxNeoModalMatService_Factory(t) { return new (t || NgxNeoModalMatService)(i0.ɵɵinject(i1.MatDialog), i0.ɵɵinject(i2.TranslateService)); }; /** @nocollapse */ NgxNeoModalMatService.ɵprov = i0.ɵɵdefineInjectable({ token: NgxNeoModalMatService, factory: NgxNeoModalMatService.ɵfac, providedIn: 'root' }); /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(NgxNeoModalMatService, [{ type: Injectable, args: [{ providedIn: 'root' }] }], function () { return [{ type: i1.MatDialog }, { type: i2.TranslateService }]; }, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW5lby1tb2RhbC1tYXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZW9jb21wbGV4eC9uZ3gtbmVvLW1vZGFsLW1hdC8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtbmVvLW1vZGFsLW1hdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBZSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsU0FBUyxFQUFpQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBS3ZELE1BQU0sT0FBTyxxQkFBcUI7SUFLaEMsWUFBbUIsTUFBaUIsRUFBVSxTQUEyQjtRQUF0RCxXQUFNLEdBQU4sTUFBTSxDQUFXO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDdkUsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBTyxHQUFHLEVBQUUsRUFBRTtZQUMzQixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsQ0FBQyxDQUFBLENBQUM7SUFDSixDQUFDO0lBRWEsU0FBUyxDQUFDLE1BQVc7O1lBRWpDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO2dCQUMxRCxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO2FBQ3pCLENBQUMsQ0FBQztZQUVILE9BQU8sU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBRTdDLENBQUM7S0FBQTtJQUdEOztNQUVFO0lBQ1csS0FBSyxDQUFDLEdBQVcsRUFBRSxTQUFTLEdBQUcsS0FBSzs7WUFFL0Ms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LENBQUMsRUFBRTtZQUNsRCxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRTtnQkFDeEIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3FCQUFFO29CQUMzRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDMUM7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQy9DO2FBQ0Y7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDOzs2R0E5U1UscUJBQXFCO2dGQUFyQixxQkFBcUIsV0FBckIscUJBQXFCLG1CQUZwQixNQUFNO2tEQUVQLHFCQUFxQjtjQUhqQyxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5neE5lb01vZGFsTWF0Q29tcG9uZW50LCBBbGVydFJlc3VsdCwgQWxlcnRCdXR0b24gfSBmcm9tICcuL25neC1uZW8tbW9kYWwtbWF0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hOZW9Nb2RhbE1hdFNlcnZpY2Uge1xyXG4gIHRlbXBsYXRlOiBhbnk7XHJcblxyXG4gIHB1YmxpYyBvcmlnaW5hbEFsZXJ0OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgIHRoaXMub3JpZ2luYWxBbGVydCA9IHdpbmRvdy5hbGVydDtcclxuICAgIHdpbmRvdy5hbGVydCA9IGFzeW5jIChtc2cpID0+IHtcclxuICAgICAgYXdhaXQgdGhpcy5hbGVydChtc2cpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb3Blbk1vZGFsKGNvbmZpZzogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuXHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE5neE5lb01vZGFsTWF0Q29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHsgY29uZmlnOiBjb25maWcgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG5cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAqIFNob3cgbWVzc2FnZS4gQ2FuIGJlIHVzZSBhcyB3aW5kb3cuYWxlcnRcclxuICAqL1xyXG4gIHB1YmxpYyBhc3luYyBhbGVydChtc2c6IHN0cmluZywgYXV0b2ZvY3VzID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgbWVzc2FnZTogbXNnLFxyXG4gICAgICBidXR0b246IHtcclxuICAgICAgICBjYW5jZWw6IHtcclxuICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhY2NlcHQ6IHtcclxuICAgICAgICAgIGF1dG9mb2N1czogYXV0b2ZvY3VzLFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGF3YWl0IHRoaXMub3Blbk1vZGFsKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIFNob3cgc3VjY3Nlc3NmdWxsICBtZXNzYWdlXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHN1Y2Nlc3MobXNnOiBzdHJpbmcsIGF1dG9mb2N1cyA9IHRydWUpOiBQcm9taXNlPEFsZXJ0UmVzdWx0PiB7XHJcbiAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmdldCgnU1VDQ0VTU1RJVExFJykudG9Qcm9taXNlKCk7XHJcbiAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgdGV4dDogdGl0bGVcclxuICAgICAgfSxcclxuICAgICAgbWVzc2FnZTogbXNnLFxyXG4gICAgICB0eXBlOiAnc3VjY2VzcycsXHJcbiAgICAgIGJ1dHRvbjoge1xyXG4gICAgICAgIGNhbmNlbDoge1xyXG4gICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFjY2VwdDoge1xyXG4gICAgICAgICAgYXV0b2ZvY3VzOiBhdXRvZm9jdXMsXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMub3Blbk1vZGFsKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqXHJcbiAgKiBXYXJuaW5nIG1lc3NhZ2VcclxuICAqL1xyXG4gIHB1YmxpYyBhc3luYyB3YXJuaW5nKG1zZzogc3RyaW5nLCBhdXRvZm9jdXMgPSBmYWxzZSk6IFByb21pc2U8QWxlcnRSZXN1bHQ+IHtcclxuICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGUuZ2V0KCdXQVJOVElUTEUnKS50b1Byb21pc2UoKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgdGl0bGU6IHtcclxuICAgICAgICB0ZXh0OiB0aXRsZVxyXG4gICAgICB9LFxyXG4gICAgICBtZXNzYWdlOiBtc2csXHJcbiAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgYnV0dG9uOiB7XHJcbiAgICAgICAgY2FuY2VsOiB7XHJcbiAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWNjZXB0OiB7XHJcbiAgICAgICAgICBhdXRvZm9jdXM6IGF1dG9mb2N1cyxcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMub3Blbk1vZGFsKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICpcclxuICogRXJyb3IgbWVzc2FnZVxyXG4gKi9cclxuICBwdWJsaWMgYXN5bmMgZXJyb3IobXNnOiBzdHJpbmcsIGF1dG9mb2N1cyA9IHRydWUpOiBQcm9taXNlPEFsZXJ0UmVzdWx0PiB7XHJcbiAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmdldCgnRVJST1JUSVRMRScpLnRvUHJvbWlzZSgpO1xyXG4gICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICB0aXRsZToge1xyXG4gICAgICAgIHRleHQ6IHRpdGxlXHJcbiAgICAgIH0sXHJcbiAgICAgIG1lc3NhZ2U6IG1zZyxcclxuICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgYnV0dG9uOiB7XHJcbiAgICAgICAgY2FuY2VsOiB7XHJcbiAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWNjZXB0OiB7XHJcbiAgICAgICAgICBhdXRvZm9jdXM6IGF1dG9mb2N1cyxcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5vcGVuTW9kYWwoY29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogSW5mb3JtYXRpb24gbWVzc2FnZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBpbmZvKG1zZzogc3RyaW5nLCBhdXRvZm9jdXMgPSB0cnVlKTogUHJvbWlzZTxBbGVydFJlc3VsdD4ge1xyXG4gICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5nZXQoJ0lORk9USVRMRScpLnRvUHJvbWlzZSgpO1xyXG4gICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICB0aXRsZToge1xyXG4gICAgICAgIHRleHQ6IHRpdGxlXHJcbiAgICAgIH0sXHJcbiAgICAgIG1lc3NhZ2U6IG1zZyxcclxuICAgICAgdHlwZTogJ2luZm8nLFxyXG4gICAgICBidXR0b246IHtcclxuICAgICAgICBjYW5jZWw6IHtcclxuICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhY2NlcHQ6IHtcclxuICAgICAgICAgIGF1dG9mb2N1czogYXV0b2ZvY3VzLFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLm9wZW5Nb2RhbChjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBTaG93IGRlY2lzc2lvbiBtb2RhbCB3aXRoIHF1ZXN0aW9uIGFuZCB0d28gb3B0aW9ucyBmb3IgYWNjZXB0IG9yIHJlamVjdC5cclxuICAgKi9cclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgcHVibGljIGFzeW5jIGRlY2lzaW9uKHF1ZXN0aW9uTXNnOiBzdHJpbmcsIHN1Y2Nlc3NNc2c/OiBzdHJpbmcsIGNhbmNlbE1zZz86IHN0cmluZywgYXV0b2ZvY3VzID0gQWxlcnRCdXR0b24uQ2FuY2VsKTogUHJvbWlzZTxBbGVydFJlc3VsdD4ge1xyXG4gICAgY29uc3QgYnV0dG9uQWNjZXB0Rm9jdXMgPSBhdXRvZm9jdXMgPT09IEFsZXJ0QnV0dG9uLkFjY2VwdDtcclxuICAgIGNvbnN0IGJ1dHRvbkNhbmNlbEZvY3VzID0gYXV0b2ZvY3VzID09PSBBbGVydEJ1dHRvbi5DYW5jZWw7XHJcblxyXG4gICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5nZXQoJ0RFQ0lTSU9OVElUTEUnKS50b1Byb21pc2UoKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgdGl0bGU6IHtcclxuICAgICAgICB0ZXh0OiB0aXRsZVxyXG4gICAgICB9LFxyXG4gICAgICBtZXNzYWdlOiBxdWVzdGlvbk1zZyxcclxuICAgICAgdHlwZTogJ3F1ZXN0aW9uJyxcclxuICAgICAgYnV0dG9uOiB7XHJcbiAgICAgICAgY2FuY2VsOiB7XHJcbiAgICAgICAgICBhdXRvZm9jdXM6IGJ1dHRvbkNhbmNlbEZvY3VzXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhY2NlcHQ6IHtcclxuICAgICAgICAgIGF1dG9mb2N1czogYnV0dG9uQWNjZXB0Rm9jdXNcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMub3Blbk1vZGFsKGNvbmZpZylcclxuICAgICAgLnRoZW4oKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLkJ1dHRvblJlc3BvbnNlID09PSBBbGVydEJ1dHRvbi5BY2NlcHQpIHtcclxuICAgICAgICAgIGlmIChzdWNjZXNzTXNnICYmIHN1Y2Nlc3NNc2cgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VjY2VzcyhzdWNjZXNzTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGNhbmNlbE1zZykge1xyXG4gICAgICAgICAgICB0aGlzLmluZm8oY2FuY2VsTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogSW5wdXQgdGV4dCBtZXNzYWdlXHJcbiAgICovXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG4gIHB1YmxpYyBhc3luYyBpbnB1dCh0aXRsZTogc3RyaW5nLCBwbGFjZWhvbGRlcjogc3RyaW5nLCBzdWNjZXNzTXNnPzogc3RyaW5nLCBhdXRvZm9jdXMgPSB0cnVlLCBidXR0b25BdXRvZm9jdXM6IEFsZXJ0QnV0dG9uID0gQWxlcnRCdXR0b24uQWNjZXB0KTogUHJvbWlzZTxBbGVydFJlc3VsdD4ge1xyXG4gICAgY29uc3QgYnV0dG9uQWNjZXB0Rm9jdXMgPSBidXR0b25BdXRvZm9jdXMgPT09IEFsZXJ0QnV0dG9uLkFjY2VwdDtcclxuICAgIGNvbnN0IGJ1dHRvbkNhbmNlbEZvY3VzID0gYnV0dG9uQXV0b2ZvY3VzID09PSBBbGVydEJ1dHRvbi5DYW5jZWw7XHJcblxyXG4gICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICB0aXRsZToge1xyXG4gICAgICAgIHRleHQ6IHRpdGxlXHJcbiAgICAgIH0sXHJcbiAgICAgIG1lc3NhZ2U6ICcnLFxyXG4gICAgICBpbnB1dDoge1xyXG4gICAgICAgIHBsYWNlaG9sZGVyLFxyXG4gICAgICAgIHZpc2liaWxpdHk6IHRydWUsXHJcbiAgICAgICAgYXV0b2ZvY3VzOiBhdXRvZm9jdXNcclxuICAgICAgfSxcclxuICAgICAgYnV0dG9uOiB7XHJcbiAgICAgICAgYWNjZXBjdDoge1xyXG4gICAgICAgICAgYXV0b2ZvY3VzOiBidXR0b25BY2NlcHRGb2N1c1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuY2VsOiB7XHJcbiAgICAgICAgICBhdXRvZm9jdXM6IGJ1dHRvbkNhbmNlbEZvY3VzXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLm9wZW5Nb2RhbChjb25maWcpXHJcbiAgICAgIC50aGVuKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZS5CdXR0b25SZXNwb25zZSA9PT0gQWxlcnRCdXR0b24uQWNjZXB0KSB7XHJcbiAgICAgICAgICBpZiAoc3VjY2Vzc01zZykge1xyXG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3Moc3VjY2Vzc01zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xyXG4gICAgICB9KTtcclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIC8vIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2VcclxuICBwdWJsaWMgYXN5bmMgeWVzTm9DYW5jZWwodGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBidXR0b25Gb2N1czogQWxlcnRCdXR0b24pOiBQcm9taXNlPEFsZXJ0UmVzdWx0PiB7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tKHRpdGxlLCBtZXNzYWdlLCAoQWxlcnRCdXR0b24uWWVzIHwgQWxlcnRCdXR0b24uTm8gfCBBbGVydEJ1dHRvbi5DYW5jZWwpLCBidXR0b25Gb2N1cyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGN1c3RvbSh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IEFsZXJ0QnV0dG9uLCBidXR0b25Gb2N1czogQWxlcnRCdXR0b24pOiBQcm9taXNlPEFsZXJ0UmVzdWx0PiB7XHJcbiAgICBjb25zdCBidXR0b25BY2NlcHQ6IGJvb2xlYW4gPSAoYnV0dG9ucyAmIEFsZXJ0QnV0dG9uLkFjY2VwdCkgPiAwO1xyXG4gICAgY29uc3QgYnV0dG9uWWVzOiBib29sZWFuID0gKGJ1dHRvbnMgJiBBbGVydEJ1dHRvbi5ZZXMpID4gMDtcclxuICAgIGNvbnN0IGJ1dHRvbkNhbmNlbDogYm9vbGVhbiA9IChidXR0b25zICYgQWxlcnRCdXR0b24uQ2FuY2VsKSA+IDA7XHJcbiAgICBjb25zdCBidXR0b25ObzogYm9vbGVhbiA9IChidXR0b25zICYgQWxlcnRCdXR0b24uTm8pID4gMDtcclxuICAgIGNvbnN0IGJ1dHRvblJldHJ5OiBib29sZWFuID0gKGJ1dHRvbnMgJiBBbGVydEJ1dHRvbi5SZXRyeSkgPiAwO1xyXG5cclxuICAgIGNvbnN0IGJ1dHRvbkFjY2VwdEZvY3VzOiBib29sZWFuID0gYnV0dG9uRm9jdXMgPT09IEFsZXJ0QnV0dG9uLkFjY2VwdDtcclxuICAgIGNvbnN0IGJ1dHRvblllc0ZvY3VzOiBib29sZWFuID0gYnV0dG9uRm9jdXMgPT09IEFsZXJ0QnV0dG9uLlllcztcclxuICAgIGNvbnN0IGJ1dHRvbkNhbmNlbEZvY3VzOiBib29sZWFuID0gYnV0dG9uRm9jdXMgPT09IEFsZXJ0QnV0dG9uLkNhbmNlbDtcclxuICAgIGNvbnN0IGJ1dHRvbk5vRm9jdXM6IGJvb2xlYW4gPSBidXR0b25Gb2N1cyA9PT0gQWxlcnRCdXR0b24uTm87XHJcbiAgICBjb25zdCBidXR0b25SZXRyeUZvY3VzOiBib29sZWFuID0gYnV0dG9uRm9jdXMgPT09IEFsZXJ0QnV0dG9uLlJldHJ5O1xyXG5cclxuICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgdGl0bGU6IHtcclxuICAgICAgICB0ZXh0OiB0aXRsZVxyXG4gICAgICB9LFxyXG4gICAgICBtZXNzYWdlLFxyXG4gICAgICBidXR0b246IHtcclxuICAgICAgICB5ZXM6IHtcclxuICAgICAgICAgIHZpc2liaWxpdHk6IGJ1dHRvblllcyxcclxuICAgICAgICAgIGF1dG9mb2N1czogYnV0dG9uWWVzRm9jdXNcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5vOiB7XHJcbiAgICAgICAgICB2aXNpYmlsaXR5OiBidXR0b25ObyxcclxuICAgICAgICAgIGF1dG9mb2N1czogYnV0dG9uTm9Gb2N1c1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmV0cnk6IHtcclxuICAgICAgICAgIHZpc2liaWxpdHk6IGJ1dHRvblJldHJ5LFxyXG4gICAgICAgICAgYXV0b2ZvY3VzOiBidXR0b25SZXRyeUZvY3VzXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5jZWw6IHtcclxuICAgICAgICAgIHZpc2liaWxpdHk6IGJ1dHRvbkNhbmNlbCxcclxuICAgICAgICAgIGF1dG9mb2N1czogYnV0dG9uQ2FuY2VsRm9jdXNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFjY2VwdDoge1xyXG4gICAgICAgICAgdmlzaWJpbGl0eTogYnV0dG9uQWNjZXB0LFxyXG4gICAgICAgICAgYXV0b2ZvY3VzOiBidXR0b25BY2NlcHRGb2N1c1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcblxyXG4gICAgcmV0dXJuIHRoaXMub3Blbk1vZGFsKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgaXNPYmplY3QoaXRlbSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpdGVtKSk7XHJcbiAgfVxyXG5cclxuICAvLyB0aGlzIHdpbGwgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24gb24gY2lyY3VsYXIgcmVmZXJlbmNlc1xyXG4gIHByaXZhdGUgbWVyZ2VEZWVwKHRhcmdldCwgLi4uc291cmNlcyk6IGFueSB7XHJcbiAgICBpZiAoIXNvdXJjZXMubGVuZ3RoKSB7IHJldHVybiB0YXJnZXQ7IH1cclxuICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09iamVjdCh0YXJnZXQpICYmIHRoaXMuaXNPYmplY3Qoc291cmNlKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcclxuICAgICAgICBpZiAodGhpcy5pc09iamVjdChzb3VyY2Vba2V5XSkpIHtcclxuICAgICAgICAgIGlmICghdGFyZ2V0W2tleV0pIHsgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHsgW2tleV06IHt9IH0pOyB9XHJcbiAgICAgICAgICB0aGlzLm1lcmdlRGVlcCh0YXJnZXRba2V5XSwgc291cmNlW2tleV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgeyBba2V5XTogc291cmNlW2tleV0gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubWVyZ2VEZWVwKHRhcmdldCwgLi4uc291cmNlcyk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19