@stratio/egeo
Version:
331 lines • 25 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/st-modal/st-modal.service.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
/*
* © 2017 Stratio Big Data Inc., Sucursal en España.
*
* This software is licensed under the Apache License, Version 2.0.
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the terms of the License for more details.
*
* SPDX-License-Identifier: Apache-2.0.
*/
import { ComponentFactoryResolver, Injectable } from '@angular/core';
import { Subject } from 'rxjs';
/* local dependencies */
import { StModalComponent } from './st-modal.component';
import { StModalResponse, StModalBasicType } from './st-modal.model';
var StModalService = /** @class */ (function () {
function StModalService(_cfr) {
this._cfr = _cfr;
this._containerRef = undefined;
this.dynamicModal = undefined;
}
Object.defineProperty(StModalService.prototype, "container", {
/* External API */
set: /* External API */
/**
* @param {?} container
* @return {?}
*/
function (container) {
this._containerRef = container;
},
enumerable: true,
configurable: true
});
// - Public methods
// - Public methods
/**
* @param {?} config
* @param {?=} component
* @param {?=} disabledAnimation
* @return {?}
*/
StModalService.prototype.show =
// - Public methods
/**
* @param {?} config
* @param {?=} component
* @param {?=} disabledAnimation
* @return {?}
*/
function (config, component, disabledAnimation) {
/** @type {?} */
var errors = this.canCreateModal(config, component);
if (errors && errors.length > 0) {
throw new Error(errors.join(' '));
}
this.notifyButtonInteraction = new Subject();
this.createModal(this.createConfig(config), component, disabledAnimation);
return this.notifyButtonInteraction.asObservable();
};
/**
* @param {?} type
* @param {?} modalTitle
* @param {?} messageTitle
* @param {?} message
* @param {?} okButton
* @param {?=} cancelButton
* @param {?=} maxWidth
* @param {?=} minWidth
* @param {?=} icon
* @param {?=} showCloseBtn
* @return {?}
*/
StModalService.prototype.showBasicModal = /**
* @param {?} type
* @param {?} modalTitle
* @param {?} messageTitle
* @param {?} message
* @param {?} okButton
* @param {?=} cancelButton
* @param {?=} maxWidth
* @param {?=} minWidth
* @param {?=} icon
* @param {?=} showCloseBtn
* @return {?}
*/
function (type, modalTitle, messageTitle, message, okButton, cancelButton, maxWidth, minWidth, icon, showCloseBtn) {
if (cancelButton === void 0) { cancelButton = ''; }
if (maxWidth === void 0) { maxWidth = 600; }
if (minWidth === void 0) { minWidth = 400; }
if (icon === void 0) { icon = ''; }
if (showCloseBtn === void 0) { showCloseBtn = false; }
/** @type {?} */
var iconStatus;
/** @type {?} */
var buttons = [{
label: okButton,
classes: (type === StModalBasicType.DELETE) ? 'button-critical' : 'button-primary',
responseValue: StModalResponse.YES,
closeOnClick: true
}];
if (type !== StModalBasicType.INFO) {
buttons.unshift({
label: cancelButton,
classes: (type === StModalBasicType.DELETE) ? 'button-borderless' : 'button-secondary',
responseValue: StModalResponse.NO,
closeOnClick: true
});
}
switch (type) {
case StModalBasicType.DELETE:
iconStatus = 'delete';
break;
case StModalBasicType.WARNING:
iconStatus = 'alert';
break;
default:
iconStatus = icon;
break;
}
return this.show({
fullscreen: false,
message: message,
messageTitle: messageTitle,
modalTitle: modalTitle,
buttons: buttons,
maxWidth: maxWidth,
minWidth: minWidth,
showCloseBtn: showCloseBtn,
iconStatus: iconStatus
});
};
/**
* @return {?}
*/
StModalService.prototype.close = /**
* @return {?}
*/
function () {
this.destroy();
};
/* INTERNAL METHODS FOR WORK WITH MODALS */
/* INTERNAL METHODS FOR WORK WITH MODALS */
/**
* @private
* @param {?} modalConfig
* @param {?=} component
* @param {?=} disabledAnimation
* @return {?}
*/
StModalService.prototype.createModal = /* INTERNAL METHODS FOR WORK WITH MODALS */
/**
* @private
* @param {?} modalConfig
* @param {?=} component
* @param {?=} disabledAnimation
* @return {?}
*/
function (modalConfig, component, disabledAnimation) {
/** @type {?} */
var stModalFactory = this._cfr.resolveComponentFactory(StModalComponent);
if (stModalFactory) {
this._containerRef.clear();
this.dynamicModal = this._containerRef.createComponent(stModalFactory);
this.bindVars(modalConfig, component, disabledAnimation);
}
};
/**
* @private
* @return {?}
*/
StModalService.prototype.destroy = /**
* @private
* @return {?}
*/
function () {
if (this.dynamicModal) {
this.dynamicModal.destroy();
this.dynamicModal = undefined;
this.notifyButtonInteraction.next(StModalResponse.CLOSE);
this.notifyButtonInteraction.complete();
}
};
/**
* @private
* @param {?} modalConfig
* @param {?} component
* @param {?} disabledAnimation
* @return {?}
*/
StModalService.prototype.bindVars = /**
* @private
* @param {?} modalConfig
* @param {?} component
* @param {?} disabledAnimation
* @return {?}
*/
function (modalConfig, component, disabledAnimation) {
this.dynamicModal.instance.component = component;
this.dynamicModal.instance.click.subscribe(this.notify.bind(this));
this.dynamicModal.instance.modalConfig = modalConfig;
this.dynamicModal.instance.disabledAnimation = (disabledAnimation !== null) ? disabledAnimation : true;
this.dynamicModal.changeDetectorRef.detectChanges();
};
/**
* @private
* @param {?} buttonResponse
* @return {?}
*/
StModalService.prototype.notify = /**
* @private
* @param {?} buttonResponse
* @return {?}
*/
function (buttonResponse) {
this.notifyButtonInteraction.next(buttonResponse.response);
if (buttonResponse.close) {
this.close();
}
};
/**
* @private
* @param {?} config
* @param {?=} component
* @return {?}
*/
StModalService.prototype.canCreateModal = /**
* @private
* @param {?} config
* @param {?=} component
* @return {?}
*/
function (config, component) {
/** @type {?} */
var errors = [];
if (!this._containerRef) {
errors.push("[ERROR]: StModalService => Cant find container, are you sure you declarate in MAIN APP component in html and typescript?");
}
if (this.dynamicModal !== undefined) {
errors.push("[ERROR]: StModalService => Can't create modal beacause already exists one. Are you sure that you call close method?)");
}
if (!component && !config.message && !config.html) {
errors.push("[ERROR]: StModalService => Can't find message, html or component to show in modal");
}
return errors;
};
/**
* @private
* @param {?} config
* @return {?}
*/
StModalService.prototype.createConfig = /**
* @private
* @param {?} config
* @return {?}
*/
function (config) {
/** @type {?} */
var defaultConfig = {
fullscreen: false,
inputs: {},
outputs: {},
modalTitle: 'Default title',
messageTitle: 'Default subtitle',
buttons: [],
message: undefined,
html: undefined,
maxWidth: undefined,
minWidth: undefined,
empty: false
};
/** @type {?} */
var checkedConfig = Object.assign({}, defaultConfig, config);
checkedConfig.buttons = this.checkButtons(checkedConfig.buttons);
return checkedConfig;
};
/**
* @private
* @param {?} buttons
* @return {?}
*/
StModalService.prototype.checkButtons = /**
* @private
* @param {?} buttons
* @return {?}
*/
function (buttons) {
return buttons.map((/**
* @param {?} button
* @return {?}
*/
function (button) { return Object.assign({}, { label: 'Button', closeOnClick: false }, button); }));
};
StModalService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
StModalService.ctorParameters = function () { return [
{ type: ComponentFactoryResolver }
]; };
return StModalService;
}());
export { StModalService };
if (false) {
/**
* @type {?}
* @private
*/
StModalService.prototype._containerRef;
/**
* @type {?}
* @private
*/
StModalService.prototype.dynamicModal;
/**
* @type {?}
* @private
*/
StModalService.prototype.notifyButtonInteraction;
/**
* @type {?}
* @private
*/
StModalService.prototype._cfr;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtbW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdHJhdGlvL2VnZW8vIiwic291cmNlcyI6WyJsaWIvc3QtbW9kYWwvc3QtbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFVQSxPQUFPLEVBRUosd0JBQXdCLEVBRXhCLFVBQVUsRUFHWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUU1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBR0osZUFBZSxFQUVmLGdCQUFnQixFQUNsQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCO0lBT0csd0JBQW9CLElBQThCO1FBQTlCLFNBQUksR0FBSixJQUFJLENBQTBCO1FBSjFDLGtCQUFhLEdBQXFCLFNBQVMsQ0FBQztRQUM1QyxpQkFBWSxHQUFtQyxTQUFTLENBQUM7SUFHWCxDQUFDO0lBR3ZELHNCQUFJLHFDQUFTO1FBRGIsa0JBQWtCOzs7Ozs7UUFDbEIsVUFBYyxTQUEyQjtZQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUNsQyxDQUFDOzs7T0FBQTtJQUVELG1CQUFtQjs7Ozs7Ozs7SUFDbkIsNkJBQUk7Ozs7Ozs7O0lBQUosVUFBSyxNQUFxQixFQUFFLFNBQXFCLEVBQUUsaUJBQTJCOztZQUN2RSxNQUFNLEdBQWEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO1FBQzdELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksT0FBTyxFQUFtQixDQUFDO1FBQzlELElBQUksQ0FB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QUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFuRSxDQUFtRSxFQUFDLENBQUM7SUFDckcsQ0FBQzs7Z0JBM0pILFVBQVU7Ozs7Z0JBakJSLHdCQUF3Qjs7SUE2SzNCLHFCQUFDO0NBQUEsQUE1SkQsSUE0SkM7U0EzSlksY0FBYzs7Ozs7O0lBRXhCLHVDQUFvRDs7Ozs7SUFDcEQsc0NBQWlFOzs7OztJQUNqRSxpREFBMEQ7Ozs7O0lBRTlDLDhCQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiDCqSAyMDE3IFN0cmF0aW8gQmlnIERhdGEgSW5jLiwgU3VjdXJzYWwgZW4gRXNwYcOxYS5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZO1xuICogd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiAqIFNlZSB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMC5cbiAqL1xuaW1wb3J0IHtcbiAgIENvbXBvbmVudEZhY3RvcnksXG4gICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICBDb21wb25lbnRSZWYsXG4gICBJbmplY3RhYmxlLFxuICAgVHlwZSxcbiAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlICwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuLyogbG9jYWwgZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgeyBTdE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9zdC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgIFN0TW9kYWxCdXR0b24sXG4gICBTdE1vZGFsQ29uZmlnLFxuICAgU3RNb2RhbFJlc3BvbnNlLFxuICAgU3RNb2RhbEJ1dHRvblJlc3BvbnNlLFxuICAgU3RNb2RhbEJhc2ljVHlwZVxufSBmcm9tICcuL3N0LW1vZGFsLm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFN0TW9kYWxTZXJ2aWNlIHtcblxuICAgcHJpdmF0ZSBfY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmID0gdW5kZWZpbmVkO1xuICAgcHJpdmF0ZSBkeW5hbWljTW9kYWw6IENvbXBvbmVudFJlZjxTdE1vZGFsQ29tcG9uZW50PiA9IHVuZGVmaW5lZDtcbiAgIHByaXZhdGUgbm90aWZ5QnV0dG9uSW50ZXJhY3Rpb246IFN1YmplY3Q8U3RNb2RhbFJlc3BvbnNlPjtcblxuICAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHsgfVxuXG4gICAvKiBFeHRlcm5hbCBBUEkgKi9cbiAgIHNldCBjb250YWluZXIoY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICB0aGlzLl9jb250YWluZXJSZWYgPSBjb250YWluZXI7XG4gICB9XG5cbiAgIC8vIC0gUHVibGljIG1ldGhvZHNcbiAgIHNob3coY29uZmlnOiBTdE1vZGFsQ29uZmlnLCBjb21wb25lbnQ/OiBUeXBlPGFueT4sIGRpc2FibGVkQW5pbWF0aW9uPzogYm9vbGVhbik6IE9ic2VydmFibGU8U3RNb2RhbFJlc3BvbnNlPiB7XG4gICAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IHRoaXMuY2FuQ3JlYXRlTW9kYWwoY29uZmlnLCBjb21wb25lbnQpO1xuICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9ycy5qb2luKCcgJykpO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3RpZnlCdXR0b25JbnRlcmFjdGlvbiA9IG5ldyBTdWJqZWN0PFN0TW9kYWxSZXNwb25zZT4oKTtcbiAgICAgIHRoaXMuY3JlYXRlTW9kYWwodGhpcy5jcmVhdGVDb25maWcoY29uZmlnKSwgY29tcG9uZW50LCBkaXNhYmxlZEFuaW1hdGlvbik7XG4gICAgICByZXR1cm4gdGhpcy5ub3RpZnlCdXR0b25JbnRlcmFjdGlvbi5hc09ic2VydmFibGUoKTtcbiAgIH1cblxuICAgc2hvd0Jhc2ljTW9kYWwoXG4gICAgICB0eXBlOiBTdE1vZGFsQmFzaWNUeXBlLFxuICAgICAgbW9kYWxUaXRsZTogc3RyaW5nLFxuICAgICAgbWVzc2FnZVRpdGxlOiBzdHJpbmcsXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBva0J1dHRvbjogc3RyaW5nLFxuICAgICAgY2FuY2VsQnV0dG9uOiBzdHJpbmcgPSAnJyxcbiAgICAgIG1heFdpZHRoOiBudW1iZXIgPSA2MDAsXG4gICAgICBtaW5XaWR0aDogbnVtYmVyID0gNDAwLFxuICAgICAgaWNvbjogc3RyaW5nID0gJycsXG4gICAgICBzaG93Q2xvc2VCdG46IGJvb2xlYW4gPSBmYWxzZVxuICAgKTogT2JzZXJ2YWJsZTxTdE1vZGFsUmVzcG9uc2U+IHtcbiAgICAgIGxldCBpY29uU3RhdHVzOiBzdHJpbmc7XG5cbiAgICAgIGNvbnN0IGJ1dHRvbnM6IFN0TW9kYWxCdXR0b25bXSA9IFt7XG4gICAgICAgICBsYWJlbDogb2tCdXR0b24sXG4gICAgICAgICBjbGFzc2VzOiAodHlwZSA9PT0gU3RNb2RhbEJhc2ljVHlwZS5ERUxFVEUpID8gJ2J1dHRvbi1jcml0aWNhbCcgOiAnYnV0dG9uLXByaW1hcnknLFxuICAgICAgICAgcmVzcG9uc2VWYWx1ZTogU3RNb2RhbFJlc3BvbnNlLllFUyxcbiAgICAgICAgIGNsb3NlT25DbGljazogdHJ1ZVxuICAgICAgfV07XG5cbiAgICAgIGlmICh0eXBlICE9PSBTdE1vZGFsQmFzaWNUeXBlLklORk8pIHtcbiAgICAgICAgIGJ1dHRvbnMudW5zaGlmdCh7XG4gICAgICAgICAgICBsYWJlbDogY2FuY2VsQnV0dG9uLFxuICAgICAgICAgICAgY2xhc3NlczogKHR5cGUgPT09IFN0TW9kYWxCYXNpY1R5cGUuREVMRVRFKSA/ICdidXR0b24tYm9yZGVybGVzcycgOiAnYnV0dG9uLXNlY29uZGFyeScsXG4gICAgICAgICAgICByZXNwb25zZVZhbHVlOiBTdE1vZGFsUmVzcG9uc2UuTk8sXG4gICAgICAgICAgICBjbG9zZU9uQ2xpY2s6IHRydWVcbiAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgIGNhc2UgU3RNb2RhbEJhc2ljVHlwZS5ERUxFVEU6XG4gICAgICAgICAgICBpY29uU3RhdHVzID0gJ2RlbGV0ZSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgIGNhc2UgU3RNb2RhbEJhc2ljVHlwZS5XQVJOSU5HOlxuICAgICAgICAgICAgaWNvblN0YXR1cyA9ICdhbGVydCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpY29uU3RhdHVzID0gaWNvbjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgICAgIGZ1bGxzY3JlZW46IGZhbHNlLFxuICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgIG1lc3NhZ2VUaXRsZSxcbiAgICAgICAgIG1vZGFsVGl0bGUsXG4gICAgICAgICBidXR0b25zLFxuICAgICAgICAgbWF4V2lkdGgsXG4gICAgICAgICBtaW5XaWR0aCxcbiAgICAgICAgIHNob3dDbG9zZUJ0bixcbiAgICAgICAgIGljb25TdGF0dXNcbiAgICAgIH0pO1xuICAgfVxuXG4gICBjbG9zZSgpOiB2b2lkIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgfVxuXG4gICAvKiBJTlRFUk5BTCBNRVRIT0RTIEZPUiBXT1JLIFdJVEggTU9EQUxTICovXG4gICBwcml2YXRlIGNyZWF0ZU1vZGFsKG1vZGFsQ29uZmlnOiBTdE1vZGFsQ29uZmlnLCBjb21wb25lbnQ/OiBUeXBlPGFueT4sIGRpc2FibGVkQW5pbWF0aW9uPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgbGV0IHN0TW9kYWxGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PFN0TW9kYWxDb21wb25lbnQ+ID0gdGhpcy5fY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFN0TW9kYWxDb21wb25lbnQpO1xuICAgICAgaWYgKHN0TW9kYWxGYWN0b3J5KSB7XG4gICAgICAgICB0aGlzLl9jb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgIHRoaXMuZHluYW1pY01vZGFsID0gdGhpcy5fY29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxTdE1vZGFsQ29tcG9uZW50PihzdE1vZGFsRmFjdG9yeSk7XG4gICAgICAgICB0aGlzLmJpbmRWYXJzKG1vZGFsQ29uZmlnLCBjb21wb25lbnQsIGRpc2FibGVkQW5pbWF0aW9uKTtcbiAgICAgIH1cbiAgIH1cblxuICAgcHJpdmF0ZSBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuZHluYW1pY01vZGFsKSB7XG4gICAgICAgICB0aGlzLmR5bmFtaWNNb2RhbC5kZXN0cm95KCk7XG4gICAgICAgICB0aGlzLmR5bmFtaWNNb2RhbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMubm90aWZ5QnV0dG9uSW50ZXJhY3Rpb24ubmV4dChTdE1vZGFsUmVzcG9uc2UuQ0xPU0UpO1xuICAgICAgICAgdGhpcy5ub3RpZnlCdXR0b25JbnRlcmFjdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgfVxuXG4gICBwcml2YXRlIGJpbmRWYXJzKG1vZGFsQ29uZmlnOiBTdE1vZGFsQ29uZmlnLCBjb21wb25lbnQ6IFR5cGU8YW55PiwgZGlzYWJsZWRBbmltYXRpb246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgIHRoaXMuZHluYW1pY01vZGFsLmluc3RhbmNlLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcblxuICAgICAgdGhpcy5keW5hbWljTW9kYWwuaW5zdGFuY2UuY2xpY2suc3Vic2NyaWJlKHRoaXMubm90aWZ5LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5keW5hbWljTW9kYWwuaW5zdGFuY2UubW9kYWxDb25maWcgPSBtb2RhbENvbmZpZztcbiAgICAgIHRoaXMuZHluYW1pY01vZGFsLmluc3RhbmNlLmRpc2FibGVkQW5pbWF0aW9uID0gKGRpc2FibGVkQW5pbWF0aW9uICE9PSBudWxsKSA/IGRpc2FibGVkQW5pbWF0aW9uIDogdHJ1ZTtcblxuICAgICAgdGhpcy5keW5hbWljTW9kYWwuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgfVxuXG4gICBwcml2YXRlIG5vdGlmeShidXR0b25SZXNwb25zZTogU3RNb2RhbEJ1dHRvblJlc3BvbnNlKTogdm9pZCB7XG4gICAgICB0aGlzLm5vdGlmeUJ1dHRvbkludGVyYWN0aW9uLm5leHQoYnV0dG9uUmVzcG9uc2UucmVzcG9uc2UpO1xuICAgICAgaWYgKGJ1dHRvblJlc3BvbnNlLmNsb3NlKSB7XG4gICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG4gICB9XG5cbiAgIHByaXZhdGUgY2FuQ3JlYXRlTW9kYWwoY29uZmlnOiBTdE1vZGFsQ29uZmlnLCBjb21wb25lbnQ/OiBUeXBlPGFueT4pOiBzdHJpbmdbXSB7XG4gICAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgaWYgKCF0aGlzLl9jb250YWluZXJSZWYpIHtcbiAgICAgICAgIGVycm9ycy5wdXNoKGBbRVJST1JdOiBTdE1vZGFsU2VydmljZSA9PiBDYW50IGZpbmQgY29udGFpbmVyLCBhcmUgeW91IHN1cmUgeW91IGRlY2xhcmF0ZSBpbiBNQUlOIEFQUCBjb21wb25lbnQgaW4gaHRtbCBhbmQgdHlwZXNjcmlwdD9gKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmR5bmFtaWNNb2RhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICBlcnJvcnMucHVzaChgW0VSUk9SXTogU3RNb2RhbFNlcnZpY2UgPT4gQ2FuJ3QgY3JlYXRlIG1vZGFsIGJlYWNhdXNlIGFscmVhZHkgZXhpc3RzIG9uZS4gQXJlIHlvdSBzdXJlIHRoYXQgeW91IGNhbGwgY2xvc2UgbWV0aG9kPylgKTtcbiAgICAgIH1cbiAgICAgIGlmICghY29tcG9uZW50ICYmICFjb25maWcubWVzc2FnZSAmJiAhY29uZmlnLmh0bWwpIHtcbiAgICAgICAgIGVycm9ycy5wdXNoKGBbRVJST1JdOiBTdE1vZGFsU2VydmljZSA9PiBDYW4ndCBmaW5kIG1lc3NhZ2UsIGh0bWwgb3IgY29tcG9uZW50IHRvIHNob3cgaW4gbW9kYWxgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICB9XG5cbiAgIHByaXZhdGUgY3JlYXRlQ29uZmlnKGNvbmZpZzogU3RNb2RhbENvbmZpZyk6IFN0TW9kYWxDb25maWcge1xuICAgICAgY29uc3QgZGVmYXVsdENvbmZpZzogU3RNb2RhbENvbmZpZyA9IHtcbiAgICAgICAgIGZ1bGxzY3JlZW46IGZhbHNlLFxuICAgICAgICAgaW5wdXRzOiB7fSxcbiAgICAgICAgIG91dHB1dHM6IHt9LFxuICAgICAgICAgbW9kYWxUaXRsZTogJ0RlZmF1bHQgdGl0bGUnLFxuICAgICAgICAgbWVzc2FnZVRpdGxlOiAnRGVmYXVsdCBzdWJ0aXRsZScsXG4gICAgICAgICBidXR0b25zOiBbXSxcbiAgICAgICAgIG1lc3NhZ2U6IHVuZGVmaW5lZCxcbiAgICAgICAgIGh0bWw6IHVuZGVmaW5lZCxcbiAgICAgICAgIG1heFdpZHRoOiB1bmRlZmluZWQsXG4gICAgICAgICBtaW5XaWR0aDogdW5kZWZpbmVkLFxuICAgICAgICAgZW1wdHk6IGZhbHNlXG4gICAgICB9O1xuICAgICAgY29uc3QgY2hlY2tlZENvbmZpZzogU3RNb2RhbENvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb25maWcsIGNvbmZpZyk7XG4gICAgICBjaGVja2VkQ29uZmlnLmJ1dHRvbnMgPSB0aGlzLmNoZWNrQnV0dG9ucyhjaGVja2VkQ29uZmlnLmJ1dHRvbnMpO1xuICAgICAgcmV0dXJuIGNoZWNrZWRDb25maWc7XG4gICB9XG5cbiAgIHByaXZhdGUgY2hlY2tCdXR0b25zKGJ1dHRvbnM6IFN0TW9kYWxCdXR0b25bXSk6IFN0TW9kYWxCdXR0b25bXSB7XG4gICAgICByZXR1cm4gYnV0dG9ucy5tYXAoYnV0dG9uID0+IE9iamVjdC5hc3NpZ24oe30sIHsgbGFiZWw6ICdCdXR0b24nLCBjbG9zZU9uQ2xpY2s6IGZhbHNlIH0sIGJ1dHRvbikpO1xuICAgfVxufVxuIl19