UNPKG

@neocomplexx/ngx-neo-modal-mat

Version:
391 lines 37.9 kB
import { __awaiter, __generator, __read, __spread } 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"; var NgxNeoModalMatService = /** @class */ (function () { function NgxNeoModalMatService(dialog, translate) { var _this = this; this.dialog = dialog; this.translate = translate; this.originalAlert = window.alert; window.alert = function (msg) { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.alert(msg)]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; } NgxNeoModalMatService.prototype.openModal = function (config) { return __awaiter(this, void 0, void 0, function () { var dialogRef; return __generator(this, function (_a) { dialogRef = this.dialog.open(NgxNeoModalMatComponent, { data: { config: config } }); return [2 /*return*/, dialogRef.afterClosed().toPromise()]; }); }); }; /** * Show message. Can be use as window.alert */ NgxNeoModalMatService.prototype.alert = function (msg, autofocus) { if (autofocus === void 0) { autofocus = false; } return __awaiter(this, void 0, void 0, function () { var config; return __generator(this, function (_a) { switch (_a.label) { case 0: config = { title: { visibility: false }, message: msg, button: { cancel: { visibility: false }, accept: { autofocus: autofocus, } } }; return [4 /*yield*/, this.openModal(config)]; case 1: _a.sent(); return [2 /*return*/]; } }); }); }; /** * * Show succsessfull message */ NgxNeoModalMatService.prototype.success = function (msg, autofocus) { if (autofocus === void 0) { autofocus = true; } return __awaiter(this, void 0, void 0, function () { var title, config; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.translate.get('SUCCESSTITLE').toPromise()]; case 1: title = _a.sent(); config = { title: { text: title }, message: msg, type: 'success', button: { cancel: { visibility: false }, accept: { autofocus: autofocus, } } }; return [2 /*return*/, this.openModal(config)]; } }); }); }; /** * * Warning message */ NgxNeoModalMatService.prototype.warning = function (msg, autofocus) { if (autofocus === void 0) { autofocus = false; } return __awaiter(this, void 0, void 0, function () { var title, config; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.translate.get('WARNTITLE').toPromise()]; case 1: title = _a.sent(); config = { title: { text: title }, message: msg, type: 'warning', button: { cancel: { visibility: false }, accept: { autofocus: autofocus, } } }; return [2 /*return*/, this.openModal(config)]; } }); }); }; /** * * Error message */ NgxNeoModalMatService.prototype.error = function (msg, autofocus) { if (autofocus === void 0) { autofocus = true; } return __awaiter(this, void 0, void 0, function () { var title, config; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.translate.get('ERRORTITLE').toPromise()]; case 1: title = _a.sent(); config = { title: { text: title }, message: msg, type: 'error', button: { cancel: { visibility: false }, accept: { autofocus: autofocus, } } }; return [2 /*return*/, this.openModal(config)]; } }); }); }; /** * * Information message */ NgxNeoModalMatService.prototype.info = function (msg, autofocus) { if (autofocus === void 0) { autofocus = true; } return __awaiter(this, void 0, void 0, function () { var title, config; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.translate.get('INFOTITLE').toPromise()]; case 1: title = _a.sent(); config = { title: { text: title }, message: msg, type: 'info', button: { cancel: { visibility: false }, accept: { autofocus: autofocus, } } }; return [2 /*return*/, this.openModal(config)]; } }); }); }; /** * * Show decission modal with question and two options for accept or reject. */ // tslint:disable-next-line:max-line-length NgxNeoModalMatService.prototype.decision = function (questionMsg, successMsg, cancelMsg, autofocus) { if (autofocus === void 0) { autofocus = AlertButton.Cancel; } return __awaiter(this, void 0, void 0, function () { var buttonAcceptFocus, buttonCancelFocus, title, config; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: buttonAcceptFocus = autofocus === AlertButton.Accept; buttonCancelFocus = autofocus === AlertButton.Cancel; return [4 /*yield*/, this.translate.get('DECISIONTITLE').toPromise()]; case 1: title = _a.sent(); config = { title: { text: title }, message: questionMsg, type: 'question', button: { cancel: { autofocus: buttonCancelFocus }, accept: { autofocus: buttonAcceptFocus } } }; return [2 /*return*/, this.openModal(config) .then(function (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 NgxNeoModalMatService.prototype.input = function (title, placeholder, successMsg, autofocus, buttonAutofocus) { if (autofocus === void 0) { autofocus = true; } if (buttonAutofocus === void 0) { buttonAutofocus = AlertButton.Accept; } return __awaiter(this, void 0, void 0, function () { var buttonAcceptFocus, buttonCancelFocus, config; var _this = this; return __generator(this, function (_a) { buttonAcceptFocus = buttonAutofocus === AlertButton.Accept; buttonCancelFocus = buttonAutofocus === AlertButton.Cancel; config = { title: { text: title }, message: '', input: { placeholder: placeholder, visibility: true, autofocus: autofocus }, button: { accepct: { autofocus: buttonAcceptFocus }, cancel: { autofocus: buttonCancelFocus } } }; return [2 /*return*/, this.openModal(config) .then(function (value) { if (value.ButtonResponse === AlertButton.Accept) { if (successMsg) { _this.success(successMsg); } } return Promise.resolve(value); })]; }); }); }; // tslint:disable:no-bitwise NgxNeoModalMatService.prototype.yesNoCancel = function (title, message, buttonFocus) { return __awaiter(this, void 0, void 0, function () { return __generator(this, function (_a) { return [2 /*return*/, this.custom(title, message, (AlertButton.Yes | AlertButton.No | AlertButton.Cancel), buttonFocus)]; }); }); }; NgxNeoModalMatService.prototype.custom = function (title, message, buttons, buttonFocus) { return __awaiter(this, void 0, void 0, function () { var buttonAccept, buttonYes, buttonCancel, buttonNo, buttonRetry, buttonAcceptFocus, buttonYesFocus, buttonCancelFocus, buttonNoFocus, buttonRetryFocus, config; return __generator(this, function (_a) { buttonAccept = (buttons & AlertButton.Accept) > 0; buttonYes = (buttons & AlertButton.Yes) > 0; buttonCancel = (buttons & AlertButton.Cancel) > 0; buttonNo = (buttons & AlertButton.No) > 0; buttonRetry = (buttons & AlertButton.Retry) > 0; buttonAcceptFocus = buttonFocus === AlertButton.Accept; buttonYesFocus = buttonFocus === AlertButton.Yes; buttonCancelFocus = buttonFocus === AlertButton.Cancel; buttonNoFocus = buttonFocus === AlertButton.No; buttonRetryFocus = buttonFocus === AlertButton.Retry; config = { title: { text: title }, message: 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 [2 /*return*/, this.openModal(config)]; }); }); }; NgxNeoModalMatService.prototype.isObject = function (item) { return (item && typeof item === 'object' && !Array.isArray(item)); }; // this will lead to infinite recursion on circular references NgxNeoModalMatService.prototype.mergeDeep = function (target) { var _a, _b; var sources = []; for (var _i = 1; _i < arguments.length; _i++) { sources[_i - 1] = arguments[_i]; } if (!sources.length) { return target; } var source = sources.shift(); if (this.isObject(target) && this.isObject(source)) { for (var key in source) { if (this.isObject(source[key])) { if (!target[key]) { Object.assign(target, (_a = {}, _a[key] = {}, _a)); } this.mergeDeep(target[key], source[key]); } else { Object.assign(target, (_b = {}, _b[key] = source[key], _b)); } } } return this.mergeDeep.apply(this, __spread([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' }); return NgxNeoModalMatService; }()); export { NgxNeoModalMatService }; /*@__PURE__*/ (function () { i0.ɵsetClassMetadata(NgxNeoModalMatService, [{ type: Injectable, args: [{ providedIn: 'root' }] }], function () { return [{ type: i1.MatDialog }, { type: i2.TranslateService }]; }, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW5lby1tb2RhbC1tYXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BuZW9jb21wbGV4eC9uZ3gtbmVvLW1vZGFsLW1hdC8iLCJzb3VyY2VzIjpbImxpYi9uZ3gtbmVvLW1vZGFsLW1hdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSx1QkFBdUIsRUFBZSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsU0FBUyxFQUFpQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBRXZEO0lBUUUsK0JBQW1CLE1BQWlCLEVBQVUsU0FBMkI7UUFBekUsaUJBS0M7UUFMa0IsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUFVLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNsQyxNQUFNLENBQUMsS0FBSyxHQUFHLFVBQU8sR0FBRzs7OzRCQUN2QixxQkFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFBOzt3QkFBckIsU0FBcUIsQ0FBQzs7OzthQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVhLHlDQUFTLEdBQXZCLFVBQXdCLE1BQVc7Ozs7Z0JBRTNCLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtvQkFDMUQsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRTtpQkFDekIsQ0FBQyxDQUFDO2dCQUVILHNCQUFPLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLEVBQUUsRUFBQzs7O0tBRTVDO0lBR0Q7O01BRUU7SUFDVyxxQ0FBSyxHQUFsQixVQUFtQixHQUFXLEVBQUUsU0FBaUI7UUFBakIs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IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5neE5lb01vZGFsTWF0Q29tcG9uZW50LCBBbGVydFJlc3VsdCwgQWxlcnRCdXR0b24gfSBmcm9tICcuL25neC1uZW8tbW9kYWwtbWF0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nUmVmLCBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOZ3hOZW9Nb2RhbE1hdFNlcnZpY2Uge1xyXG4gIHRlbXBsYXRlOiBhbnk7XHJcblxyXG4gIHB1YmxpYyBvcmlnaW5hbEFsZXJ0OiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZywgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgIHRoaXMub3JpZ2luYWxBbGVydCA9IHdpbmRvdy5hbGVydDtcclxuICAgIHdpbmRvdy5hbGVydCA9IGFzeW5jIChtc2cpID0+IHtcclxuICAgICAgYXdhaXQgdGhpcy5hbGVydChtc2cpO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgb3Blbk1vZGFsKGNvbmZpZzogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuXHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKE5neE5lb01vZGFsTWF0Q29tcG9uZW50LCB7XHJcbiAgICAgIGRhdGE6IHsgY29uZmlnOiBjb25maWcgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnRvUHJvbWlzZSgpO1xyXG5cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAqIFNob3cgbWVzc2FnZS4gQ2FuIGJlIHVzZSBhcyB3aW5kb3cuYWxlcnRcclxuICAqL1xyXG4gIHB1YmxpYyBhc3luYyBhbGVydChtc2c6IHN0cmluZywgYXV0b2ZvY3VzID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogZmFsc2VcclxuICAgICAgfSxcclxuICAgICAgbWVzc2FnZTogbXNnLFxyXG4gICAgICBidXR0b246IHtcclxuICAgICAgICBjYW5jZWw6IHtcclxuICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhY2NlcHQ6IHtcclxuICAgICAgICAgIGF1dG9mb2N1czogYXV0b2ZvY3VzLFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGF3YWl0IHRoaXMub3Blbk1vZGFsKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIFNob3cgc3VjY3Nlc3NmdWxsICBtZXNzYWdlXHJcbiAgICovXHJcbiAgcHVibGljIGFzeW5jIHN1Y2Nlc3MobXNnOiBzdHJpbmcsIGF1dG9mb2N1cyA9IHRydWUpOiBQcm9taXNlPEFsZXJ0UmVzdWx0PiB7XHJcbiAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmdldCgnU1VDQ0VTU1RJVExFJykudG9Qcm9taXNlKCk7XHJcbiAgICBjb25zdCBjb25maWcgPSB7XHJcbiAgICAgIHRpdGxlOiB7XHJcbiAgICAgICAgdGV4dDogdGl0bGVcclxuICAgICAgfSxcclxuICAgICAgbWVzc2FnZTogbXNnLFxyXG4gICAgICB0eXBlOiAnc3VjY2VzcycsXHJcbiAgICAgIGJ1dHRvbjoge1xyXG4gICAgICAgIGNhbmNlbDoge1xyXG4gICAgICAgICAgdmlzaWJpbGl0eTogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFjY2VwdDoge1xyXG4gICAgICAgICAgYXV0b2ZvY3VzOiBhdXRvZm9jdXMsXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMub3Blbk1vZGFsKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqXHJcbiAgKiBXYXJuaW5nIG1lc3NhZ2VcclxuICAqL1xyXG4gIHB1YmxpYyBhc3luYyB3YXJuaW5nKG1zZzogc3RyaW5nLCBhdXRvZm9jdXMgPSBmYWxzZSk6IFByb21pc2U8QWxlcnRSZXN1bHQ+IHtcclxuICAgIGNvbnN0IHRpdGxlID0gYXdhaXQgdGhpcy50cmFuc2xhdGUuZ2V0KCdXQVJOVElUTEUnKS50b1Byb21pc2UoKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgdGl0bGU6IHtcclxuICAgICAgICB0ZXh0OiB0aXRsZVxyXG4gICAgICB9LFxyXG4gICAgICBtZXNzYWdlOiBtc2csXHJcbiAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgYnV0dG9uOiB7XHJcbiAgICAgICAgY2FuY2VsOiB7XHJcbiAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWNjZXB0OiB7XHJcbiAgICAgICAgICBhdXRvZm9jdXM6IGF1dG9mb2N1cyxcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMub3Blbk1vZGFsKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICpcclxuICogRXJyb3IgbWVzc2FnZVxyXG4gKi9cclxuICBwdWJsaWMgYXN5bmMgZXJyb3IobXNnOiBzdHJpbmcsIGF1dG9mb2N1cyA9IHRydWUpOiBQcm9taXNlPEFsZXJ0UmVzdWx0PiB7XHJcbiAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRlLmdldCgnRVJST1JUSVRMRScpLnRvUHJvbWlzZSgpO1xyXG4gICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICB0aXRsZToge1xyXG4gICAgICAgIHRleHQ6IHRpdGxlXHJcbiAgICAgIH0sXHJcbiAgICAgIG1lc3NhZ2U6IG1zZyxcclxuICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgYnV0dG9uOiB7XHJcbiAgICAgICAgY2FuY2VsOiB7XHJcbiAgICAgICAgICB2aXNpYmlsaXR5OiBmYWxzZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYWNjZXB0OiB7XHJcbiAgICAgICAgICBhdXRvZm9jdXM6IGF1dG9mb2N1cyxcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5vcGVuTW9kYWwoY29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogSW5mb3JtYXRpb24gbWVzc2FnZVxyXG4gICAqL1xyXG4gIHB1YmxpYyBhc3luYyBpbmZvKG1zZzogc3RyaW5nLCBhdXRvZm9jdXMgPSB0cnVlKTogUHJvbWlzZTxBbGVydFJlc3VsdD4ge1xyXG4gICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5nZXQoJ0lORk9USVRMRScpLnRvUHJvbWlzZSgpO1xyXG4gICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICB0aXRsZToge1xyXG4gICAgICAgIHRleHQ6IHRpdGxlXHJcbiAgICAgIH0sXHJcbiAgICAgIG1lc3NhZ2U6IG1zZyxcclxuICAgICAgdHlwZTogJ2luZm8nLFxyXG4gICAgICBidXR0b246IHtcclxuICAgICAgICBjYW5jZWw6IHtcclxuICAgICAgICAgIHZpc2liaWxpdHk6IGZhbHNlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhY2NlcHQ6IHtcclxuICAgICAgICAgIGF1dG9mb2N1czogYXV0b2ZvY3VzLFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzLm9wZW5Nb2RhbChjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBTaG93IGRlY2lzc2lvbiBtb2RhbCB3aXRoIHF1ZXN0aW9uIGFuZCB0d28gb3B0aW9ucyBmb3IgYWNjZXB0IG9yIHJlamVjdC5cclxuICAgKi9cclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbiAgcHVibGljIGFzeW5jIGRlY2lzaW9uKHF1ZXN0aW9uTXNnOiBzdHJpbmcsIHN1Y2Nlc3NNc2c/OiBzdHJpbmcsIGNhbmNlbE1zZz86IHN0cmluZywgYXV0b2ZvY3VzID0gQWxlcnRCdXR0b24uQ2FuY2VsKTogUHJvbWlzZTxBbGVydFJlc3VsdD4ge1xyXG4gICAgY29uc3QgYnV0dG9uQWNjZXB0Rm9jdXMgPSBhdXRvZm9jdXMgPT09IEFsZXJ0QnV0dG9uLkFjY2VwdDtcclxuICAgIGNvbnN0IGJ1dHRvbkNhbmNlbEZvY3VzID0gYXV0b2ZvY3VzID09PSBBbGVydEJ1dHRvbi5DYW5jZWw7XHJcblxyXG4gICAgY29uc3QgdGl0bGUgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5nZXQoJ0RFQ0lTSU9OVElUTEUnKS50b1Byb21pc2UoKTtcclxuICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgdGl0bGU6IHtcclxuICAgICAgICB0ZXh0OiB0aXRsZVxyXG4gICAgICB9LFxyXG4gICAgICBtZXNzYWdlOiBxdWVzdGlvbk1zZyxcclxuICAgICAgdHlwZTogJ3F1ZXN0aW9uJyxcclxuICAgICAgYnV0dG9uOiB7XHJcbiAgICAgICAgY2FuY2VsOiB7XHJcbiAgICAgICAgICBhdXRvZm9jdXM6IGJ1dHRvbkNhbmNlbEZvY3VzXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhY2NlcHQ6IHtcclxuICAgICAgICAgIGF1dG9mb2N1czogYnV0dG9uQWNjZXB0Rm9jdXNcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIHRoaXMub3Blbk1vZGFsKGNvbmZpZylcclxuICAgICAgLnRoZW4oKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgaWYgKHZhbHVlLkJ1dHRvblJlc3BvbnNlID09PSBBbGVydEJ1dHRvbi5BY2NlcHQpIHtcclxuICAgICAgICAgIGlmIChzdWNjZXNzTXNnICYmIHN1Y2Nlc3NNc2cgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VjY2VzcyhzdWNjZXNzTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGNhbmNlbE1zZykge1xyXG4gICAgICAgICAgICB0aGlzLmluZm8oY2FuY2VsTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogSW5wdXQgdGV4dCBtZXNzYWdlXHJcbiAgICovXHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG4gIHB1YmxpYyBhc3luYyBpbnB1dCh0aXRsZTogc3RyaW5nLCBwbGFjZWhvbGRlcjogc3RyaW5nLCBzdWNjZXNzTXNnPzogc3RyaW5nLCBhdXRvZm9jdXMgPSB0cnVlLCBidXR0b25BdXRvZm9jdXM6IEFsZXJ0QnV0dG9uID0gQWxlcnRCdXR0b24uQWNjZXB0KTogUHJvbWlzZTxBbGVydFJlc3VsdD4ge1xyXG4gICAgY29uc3QgYnV0dG9uQWNjZXB0Rm9jdXMgPSBidXR0b25BdXRvZm9jdXMgPT09IEFsZXJ0QnV0dG9uLkFjY2VwdDtcclxuICAgIGNvbnN0IGJ1dHRvbkNhbmNlbEZvY3VzID0gYnV0dG9uQXV0b2ZvY3VzID09PSBBbGVydEJ1dHRvbi5DYW5jZWw7XHJcblxyXG4gICAgY29uc3QgY29uZmlnID0ge1xyXG4gICAgICB0aXRsZToge1xyXG4gICAgICAgIHRleHQ6IHRpdGxlXHJcbiAgICAgIH0sXHJcbiAgICAgIG1lc3NhZ2U6ICcnLFxyXG4gICAgICBpbnB1dDoge1xyXG4gICAgICAgIHBsYWNlaG9sZGVyLFxyXG4gICAgICAgIHZpc2liaWxpdHk6IHRydWUsXHJcbiAgICAgICAgYXV0b2ZvY3VzOiBhdXRvZm9jdXNcclxuICAgICAgfSxcclxuICAgICAgYnV0dG9uOiB7XHJcbiAgICAgICAgYWNjZXBjdDoge1xyXG4gICAgICAgICAgYXV0b2ZvY3VzOiBidXR0b25BY2NlcHRGb2N1c1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuY2VsOiB7XHJcbiAgICAgICAgICBhdXRvZm9jdXM6IGJ1dHRvbkNhbmNlbEZvY3VzXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB0aGlzLm9wZW5Nb2RhbChjb25maWcpXHJcbiAgICAgIC50aGVuKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgIGlmICh2YWx1ZS5CdXR0b25SZXNwb25zZSA9PT0gQWxlcnRCdXR0b24uQWNjZXB0KSB7XHJcbiAgICAgICAgICBpZiAoc3VjY2Vzc01zZykge1xyXG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3Moc3VjY2Vzc01zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xyXG4gICAgICB9KTtcclxuXHJcblxyXG5cclxuICB9XHJcblxyXG4gIC8vIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2VcclxuICBwdWJsaWMgYXN5bmMgeWVzTm9DYW5jZWwodGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBidXR0b25Gb2N1czogQWxlcnRCdXR0b24pOiBQcm9taXNlPEFsZXJ0UmVzdWx0PiB7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tKHRpdGxlLCBtZXNzYWdlLCAoQWxlcnRCdXR0b24uWWVzIHwgQWxlcnRCdXR0b24uTm8gfCBBbGVydEJ1dHRvbi5DYW5jZWwpLCBidXR0b25Gb2N1cyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGN1c3RvbSh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcsIGJ1dHRvbnM6IEFsZXJ0QnV0dG9uLCBidXR0b25Gb2N1czogQWxlcnRCdXR0b24pOiBQcm9taXNlPEFsZXJ0UmVzdWx0PiB7XHJcbiAgICBjb25zdCBidXR0b25BY2NlcHQ6IGJvb2xlYW4gPSAoYnV0dG9ucyAmIEFsZXJ0QnV0dG9uLkFjY2VwdCkgPiAwO1xyXG4gICAgY29uc3QgYnV0dG9uWWVzOiBib29sZWFuID0gKGJ1dHRvbnMgJiBBbGVydEJ1dHRvbi5ZZXMpID4gMDtcclxuICAgIGNvbnN0IGJ1dHRvbkNhbmNlbDogYm9vbGVhbiA9IChidXR0b25zICYgQWxlcnRCdXR0b24uQ2FuY2VsKSA+IDA7XHJcbiAgICBjb25zdCBidXR0b25ObzogYm9vbGVhbiA9IChidXR0b25zICYgQWxlcnRCdXR0b24uTm8pID4gMDtcclxuICAgIGNvbnN0IGJ1dHRvblJldHJ5OiBib29sZWFuID0gKGJ1dHRvbnMgJiBBbGVydEJ1dHRvbi5SZXRyeSkgPiAwO1xyXG5cclxuICAgIGNvbnN0IGJ1dHRvbkFjY2VwdEZvY3VzOiBib29sZWFuID0gYnV0dG9uRm9jdXMgPT09IEFsZXJ0QnV0dG9uLkFjY2VwdDtcclxuICAgIGNvbnN0IGJ1dHRvblllc0ZvY3VzOiBib29sZWFuID0gYnV0dG9uRm9jdXMgPT09IEFsZXJ0QnV0dG9uLlllcztcclxuICAgIGNvbnN0IGJ1dHRvbkNhbmNlbEZvY3VzOiBib29sZWFuID0gYnV0dG9uRm9jdXMgPT09IEFsZXJ0QnV0dG9uLkNhbmNlbDtcclxuICAgIGNvbnN0IGJ1dHRvbk5vRm9jdXM6IGJvb2xlYW4gPSBidXR0b25Gb2N1cyA9PT0gQWxlcnRCdXR0b24uTm87XHJcbiAgICBjb25zdCBidXR0b25SZXRyeUZvY3VzOiBib29sZWFuID0gYnV0dG9uRm9jdXMgPT09IEFsZXJ0QnV0dG9uLlJldHJ5O1xyXG5cclxuICAgIGNvbnN0IGNvbmZpZyA9IHtcclxuICAgICAgdGl0bGU6IHtcclxuICAgICAgICB0ZXh0OiB0aXRsZVxyXG4gICAgICB9LFxyXG4gICAgICBtZXNzYWdlLFxyXG4gICAgICBidXR0b246IHtcclxuICAgICAgICB5ZXM6IHtcclxuICAgICAgICAgIHZpc2liaWxpdHk6IGJ1dHRvblllcyxcclxuICAgICAgICAgIGF1dG9mb2N1czogYnV0dG9uWWVzRm9jdXNcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5vOiB7XHJcbiAgICAgICAgICB2aXNpYmlsaXR5OiBidXR0b25ObyxcclxuICAgICAgICAgIGF1dG9mb2N1czogYnV0dG9uTm9Gb2N1c1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmV0cnk6IHtcclxuICAgICAgICAgIHZpc2liaWxpdHk6IGJ1dHRvblJldHJ5LFxyXG4gICAgICAgICAgYXV0b2ZvY3VzOiBidXR0b25SZXRyeUZvY3VzXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5jZWw6IHtcclxuICAgICAgICAgIHZpc2liaWxpdHk6IGJ1dHRvbkNhbmNlbCxcclxuICAgICAgICAgIGF1dG9mb2N1czogYnV0dG9uQ2FuY2VsRm9jdXNcclxuICAgICAgICB9LFxyXG4gICAgICAgIGFjY2VwdDoge1xyXG4gICAgICAgICAgdmlzaWJpbGl0eTogYnV0dG9uQWNjZXB0LFxyXG4gICAgICAgICAgYXV0b2ZvY3VzOiBidXR0b25BY2NlcHRGb2N1c1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcblxyXG4gICAgcmV0dXJuIHRoaXMub3Blbk1vZGFsKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIHByaXZhdGUgaXNPYmplY3QoaXRlbSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChpdGVtICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShpdGVtKSk7XHJcbiAgfVxyXG5cclxuICAvLyB0aGlzIHdpbGwgbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24gb24gY2lyY3VsYXIgcmVmZXJlbmNlc1xyXG4gIHByaXZhdGUgbWVyZ2VEZWVwKHRhcmdldCwgLi4uc291cmNlcyk6IGFueSB7XHJcbiAgICBpZiAoIXNvdXJjZXMubGVuZ3RoKSB7IHJldHVybiB0YXJnZXQ7IH1cclxuICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZXMuc2hpZnQoKTtcclxuXHJcbiAgICBpZiAodGhpcy5pc09iamVjdCh0YXJnZXQpICYmIHRoaXMuaXNPYmplY3Qoc291cmNlKSkge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcclxuICAgICAgICBpZiAodGhpcy5pc09iamVjdChzb3VyY2Vba2V5XSkpIHtcclxuICAgICAgICAgIGlmICghdGFyZ2V0W2tleV0pIHsgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHsgW2tleV06IHt9IH0pOyB9XHJcbiAgICAgICAgICB0aGlzLm1lcmdlRGVlcCh0YXJnZXRba2V5XSwgc291cmNlW2tleV0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgeyBba2V5XTogc291cmNlW2tleV0gfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMubWVyZ2VEZWVwKHRhcmdldCwgLi4uc291cmNlcyk7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19