@stratio/egeo
Version:
256 lines • 22.2 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';
export class StModalService {
/**
* @param {?} _cfr
*/
constructor(_cfr) {
this._cfr = _cfr;
this._containerRef = undefined;
this.dynamicModal = undefined;
}
/* External API */
/**
* @param {?} container
* @return {?}
*/
set container(container) {
this._containerRef = container;
}
// - Public methods
/**
* @param {?} config
* @param {?=} component
* @param {?=} disabledAnimation
* @return {?}
*/
show(config, component, disabledAnimation) {
/** @type {?} */
let 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 {?}
*/
showBasicModal(type, modalTitle, messageTitle, message, okButton, cancelButton = '', maxWidth = 600, minWidth = 400, icon = '', showCloseBtn = false) {
/** @type {?} */
let iconStatus;
/** @type {?} */
const 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,
messageTitle,
modalTitle,
buttons,
maxWidth,
minWidth,
showCloseBtn,
iconStatus
});
}
/**
* @return {?}
*/
close() {
this.destroy();
}
/* INTERNAL METHODS FOR WORK WITH MODALS */
/**
* @private
* @param {?} modalConfig
* @param {?=} component
* @param {?=} disabledAnimation
* @return {?}
*/
createModal(modalConfig, component, disabledAnimation) {
/** @type {?} */
let stModalFactory = this._cfr.resolveComponentFactory(StModalComponent);
if (stModalFactory) {
this._containerRef.clear();
this.dynamicModal = this._containerRef.createComponent(stModalFactory);
this.bindVars(modalConfig, component, disabledAnimation);
}
}
/**
* @private
* @return {?}
*/
destroy() {
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 {?}
*/
bindVars(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 {?}
*/
notify(buttonResponse) {
this.notifyButtonInteraction.next(buttonResponse.response);
if (buttonResponse.close) {
this.close();
}
}
/**
* @private
* @param {?} config
* @param {?=} component
* @return {?}
*/
canCreateModal(config, component) {
/** @type {?} */
let 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 {?}
*/
createConfig(config) {
/** @type {?} */
const defaultConfig = {
fullscreen: false,
inputs: {},
outputs: {},
modalTitle: 'Default title',
messageTitle: 'Default subtitle',
buttons: [],
message: undefined,
html: undefined,
maxWidth: undefined,
minWidth: undefined,
empty: false
};
/** @type {?} */
const checkedConfig = Object.assign({}, defaultConfig, config);
checkedConfig.buttons = this.checkButtons(checkedConfig.buttons);
return checkedConfig;
}
/**
* @private
* @param {?} buttons
* @return {?}
*/
checkButtons(buttons) {
return buttons.map((/**
* @param {?} button
* @return {?}
*/
button => Object.assign({}, { label: 'Button', closeOnClick: false }, button)));
}
}
StModalService.decorators = [
{ type: Injectable }
];
/** @nocollapse */
StModalService.ctorParameters = () => [
{ type: ComponentFactoryResolver }
];
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtbW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdHJhdGlvL2VnZW8vIiwic291cmNlcyI6WyJsaWIvc3QtbW9kYWwvc3QtbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFVQSxPQUFPLEVBRUosd0JBQXdCLEVBRXhCLFVBQVUsRUFHWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUU1QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBR0osZUFBZSxFQUVmLGdCQUFnQixFQUNsQixNQUFNLGtCQUFrQixDQUFDO0FBRzFCLE1BQU0sT0FBTyxjQUFjOzs7O0lBTXhCLFlBQW9CLElBQThCO1FBQTlCLFNBQUksR0FBSixJQUFJLENBQTBCO1FBSjFDLGtCQUFhLEdBQXFCLFNBQVMsQ0FBQztRQUM1QyxpQkFBWSxHQUFtQyxTQUFTLENBQUM7SUFHWCxDQUFDOzs7Ozs7SUFHdkQsSUFBSSxTQUFTLENBQUMsU0FBMkI7UUFDdEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDbEMsQ0FBQzs7Ozs7Ozs7SUFHRCxJQUFJLENBQUMsTUFBcUIsRUFBRSxTQUFxQixFQUFFLGlCQUEyQjs7WUFDdkUsTUFBTSxHQUFhLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQztRQUM3RCxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5QixNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNwQztRQUNELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLE9BQU8sRUFBbUIsQ0FBQztRQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFB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bkc7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNqQixDQUFDOzs7Ozs7SUFFTyxZQUFZLENBQUMsTUFBcUI7O2NBQ2pDLGFBQWEsR0FBa0I7WUFDbEMsVUFBVSxFQUFFLEtBQUs7WUFDakIsTUFBTSxFQUFFLEVBQUU7WUFDVixPQUFPLEVBQUUsRUFBRTtZQUNYLFVBQVUsRUFBRSxlQUFlO1lBQzNCLFlBQVksRUFBRSxrQkFBa0I7WUFDaEMsT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLEVBQUUsU0FBUztZQUNsQixJQUFJLEVBQUUsU0FBUztZQUNmLFFBQVEsRUFBRSxTQUFTO1lBQ25CLFFBQVEsRUFBRSxTQUFTO1lBQ25CLEtBQUssRUFBRSxLQUFLO1NBQ2Q7O2NBQ0ssYUFBYSxHQUFrQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDO1FBQzdFLGFBQWEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakUsT0FBTyxhQUFhLENBQUM7SUFDeEIsQ0FBQzs7Ozs7O0lBRU8sWUFBWSxDQUFDLE9BQXdCO1FBQzFDLE9BQU8sT0FBTyxDQUFDLEdBQUc7Ozs7UUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUMsQ0FBQztJQUNyRyxDQUFDOzs7WUEzSkgsVUFBVTs7OztZQWpCUix3QkFBd0I7Ozs7Ozs7SUFvQnhCLHVDQUFvRDs7Ozs7SUFDcEQsc0NBQWlFOzs7OztJQUNqRSxpREFBMEQ7Ozs7O0lBRTlDLDhCQUFzQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiDCqSAyMDE3IFN0cmF0aW8gQmlnIERhdGEgSW5jLiwgU3VjdXJzYWwgZW4gRXNwYcOxYS5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZO1xuICogd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiAqIFNlZSB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMC5cbiAqL1xuaW1wb3J0IHtcbiAgIENvbXBvbmVudEZhY3RvcnksXG4gICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICBDb21wb25lbnRSZWYsXG4gICBJbmplY3RhYmxlLFxuICAgVHlwZSxcbiAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlICwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuLyogbG9jYWwgZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgeyBTdE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9zdC1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgIFN0TW9kYWxCdXR0b24sXG4gICBTdE1vZGFsQ29uZmlnLFxuICAgU3RNb2RhbFJlc3BvbnNlLFxuICAgU3RNb2RhbEJ1dHRvblJlc3BvbnNlLFxuICAgU3RNb2RhbEJhc2ljVHlwZVxufSBmcm9tICcuL3N0LW1vZGFsLm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFN0TW9kYWxTZXJ2aWNlIHtcblxuICAgcHJpdmF0ZSBfY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmID0gdW5kZWZpbmVkO1xuICAgcHJpdmF0ZSBkeW5hbWljTW9kYWw6IENvbXBvbmVudFJlZjxTdE1vZGFsQ29tcG9uZW50PiA9IHVuZGVmaW5lZDtcbiAgIHByaXZhdGUgbm90aWZ5QnV0dG9uSW50ZXJhY3Rpb246IFN1YmplY3Q8U3RNb2RhbFJlc3BvbnNlPjtcblxuICAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2ZyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHsgfVxuXG4gICAvKiBFeHRlcm5hbCBBUEkgKi9cbiAgIHNldCBjb250YWluZXIoY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICB0aGlzLl9jb250YWluZXJSZWYgPSBjb250YWluZXI7XG4gICB9XG5cbiAgIC8vIC0gUHVibGljIG1ldGhvZHNcbiAgIHNob3coY29uZmlnOiBTdE1vZGFsQ29uZmlnLCBjb21wb25lbnQ/OiBUeXBlPGFueT4sIGRpc2FibGVkQW5pbWF0aW9uPzogYm9vbGVhbik6IE9ic2VydmFibGU8U3RNb2RhbFJlc3BvbnNlPiB7XG4gICAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IHRoaXMuY2FuQ3JlYXRlTW9kYWwoY29uZmlnLCBjb21wb25lbnQpO1xuICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9ycy5qb2luKCcgJykpO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3RpZnlCdXR0b25JbnRlcmFjdGlvbiA9IG5ldyBTdWJqZWN0PFN0TW9kYWxSZXNwb25zZT4oKTtcbiAgICAgIHRoaXMuY3JlYXRlTW9kYWwodGhpcy5jcmVhdGVDb25maWcoY29uZmlnKSwgY29tcG9uZW50LCBkaXNhYmxlZEFuaW1hdGlvbik7XG4gICAgICByZXR1cm4gdGhpcy5ub3RpZnlCdXR0b25JbnRlcmFjdGlvbi5hc09ic2VydmFibGUoKTtcbiAgIH1cblxuICAgc2hvd0Jhc2ljTW9kYWwoXG4gICAgICB0eXBlOiBTdE1vZGFsQmFzaWNUeXBlLFxuICAgICAgbW9kYWxUaXRsZTogc3RyaW5nLFxuICAgICAgbWVzc2FnZVRpdGxlOiBzdHJpbmcsXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBva0J1dHRvbjogc3RyaW5nLFxuICAgICAgY2FuY2VsQnV0dG9uOiBzdHJpbmcgPSAnJyxcbiAgICAgIG1heFdpZHRoOiBudW1iZXIgPSA2MDAsXG4gICAgICBtaW5XaWR0aDogbnVtYmVyID0gNDAwLFxuICAgICAgaWNvbjogc3RyaW5nID0gJycsXG4gICAgICBzaG93Q2xvc2VCdG46IGJvb2xlYW4gPSBmYWxzZVxuICAgKTogT2JzZXJ2YWJsZTxTdE1vZGFsUmVzcG9uc2U+IHtcbiAgICAgIGxldCBpY29uU3RhdHVzOiBzdHJpbmc7XG5cbiAgICAgIGNvbnN0IGJ1dHRvbnM6IFN0TW9kYWxCdXR0b25bXSA9IFt7XG4gICAgICAgICBsYWJlbDogb2tCdXR0b24sXG4gICAgICAgICBjbGFzc2VzOiAodHlwZSA9PT0gU3RNb2RhbEJhc2ljVHlwZS5ERUxFVEUpID8gJ2J1dHRvbi1jcml0aWNhbCcgOiAnYnV0dG9uLXByaW1hcnknLFxuICAgICAgICAgcmVzcG9uc2VWYWx1ZTogU3RNb2RhbFJlc3BvbnNlLllFUyxcbiAgICAgICAgIGNsb3NlT25DbGljazogdHJ1ZVxuICAgICAgfV07XG5cbiAgICAgIGlmICh0eXBlICE9PSBTdE1vZGFsQmFzaWNUeXBlLklORk8pIHtcbiAgICAgICAgIGJ1dHRvbnMudW5zaGlmdCh7XG4gICAgICAgICAgICBsYWJlbDogY2FuY2VsQnV0dG9uLFxuICAgICAgICAgICAgY2xhc3NlczogKHR5cGUgPT09IFN0TW9kYWxCYXNpY1R5cGUuREVMRVRFKSA/ICdidXR0b24tYm9yZGVybGVzcycgOiAnYnV0dG9uLXNlY29uZGFyeScsXG4gICAgICAgICAgICByZXNwb25zZVZhbHVlOiBTdE1vZGFsUmVzcG9uc2UuTk8sXG4gICAgICAgICAgICBjbG9zZU9uQ2xpY2s6IHRydWVcbiAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgIGNhc2UgU3RNb2RhbEJhc2ljVHlwZS5ERUxFVEU6XG4gICAgICAgICAgICBpY29uU3RhdHVzID0gJ2RlbGV0ZSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgIGNhc2UgU3RNb2RhbEJhc2ljVHlwZS5XQVJOSU5HOlxuICAgICAgICAgICAgaWNvblN0YXR1cyA9ICdhbGVydCc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpY29uU3RhdHVzID0gaWNvbjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5zaG93KHtcbiAgICAgICAgIGZ1bGxzY3JlZW46IGZhbHNlLFxuICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgIG1lc3NhZ2VUaXRsZSxcbiAgICAgICAgIG1vZGFsVGl0bGUsXG4gICAgICAgICBidXR0b25zLFxuICAgICAgICAgbWF4V2lkdGgsXG4gICAgICAgICBtaW5XaWR0aCxcbiAgICAgICAgIHNob3dDbG9zZUJ0bixcbiAgICAgICAgIGljb25TdGF0dXNcbiAgICAgIH0pO1xuICAgfVxuXG4gICBjbG9zZSgpOiB2b2lkIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgfVxuXG4gICAvKiBJTlRFUk5BTCBNRVRIT0RTIEZPUiBXT1JLIFdJVEggTU9EQUxTICovXG4gICBwcml2YXRlIGNyZWF0ZU1vZGFsKG1vZGFsQ29uZmlnOiBTdE1vZGFsQ29uZmlnLCBjb21wb25lbnQ/OiBUeXBlPGFueT4sIGRpc2FibGVkQW5pbWF0aW9uPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgbGV0IHN0TW9kYWxGYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PFN0TW9kYWxDb21wb25lbnQ+ID0gdGhpcy5fY2ZyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFN0TW9kYWxDb21wb25lbnQpO1xuICAgICAgaWYgKHN0TW9kYWxGYWN0b3J5KSB7XG4gICAgICAgICB0aGlzLl9jb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgIHRoaXMuZHluYW1pY01vZGFsID0gdGhpcy5fY29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxTdE1vZGFsQ29tcG9uZW50PihzdE1vZGFsRmFjdG9yeSk7XG4gICAgICAgICB0aGlzLmJpbmRWYXJzKG1vZGFsQ29uZmlnLCBjb21wb25lbnQsIGRpc2FibGVkQW5pbWF0aW9uKTtcbiAgICAgIH1cbiAgIH1cblxuICAgcHJpdmF0ZSBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuZHluYW1pY01vZGFsKSB7XG4gICAgICAgICB0aGlzLmR5bmFtaWNNb2RhbC5kZXN0cm95KCk7XG4gICAgICAgICB0aGlzLmR5bmFtaWNNb2RhbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgIHRoaXMubm90aWZ5QnV0dG9uSW50ZXJhY3Rpb24ubmV4dChTdE1vZGFsUmVzcG9uc2UuQ0xPU0UpO1xuICAgICAgICAgdGhpcy5ub3RpZnlCdXR0b25JbnRlcmFjdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgfVxuICAgfVxuXG4gICBwcml2YXRlIGJpbmRWYXJzKG1vZGFsQ29uZmlnOiBTdE1vZGFsQ29uZmlnLCBjb21wb25lbnQ6IFR5cGU8YW55PiwgZGlzYWJsZWRBbmltYXRpb246IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgIHRoaXMuZHluYW1pY01vZGFsLmluc3RhbmNlLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcblxuICAgICAgdGhpcy5keW5hbWljTW9kYWwuaW5zdGFuY2UuY2xpY2suc3Vic2NyaWJlKHRoaXMubm90aWZ5LmJpbmQodGhpcykpO1xuICAgICAgdGhpcy5keW5hbWljTW9kYWwuaW5zdGFuY2UubW9kYWxDb25maWcgPSBtb2RhbENvbmZpZztcbiAgICAgIHRoaXMuZHluYW1pY01vZGFsLmluc3RhbmNlLmRpc2FibGVkQW5pbWF0aW9uID0gKGRpc2FibGVkQW5pbWF0aW9uICE9PSBudWxsKSA/IGRpc2FibGVkQW5pbWF0aW9uIDogdHJ1ZTtcblxuICAgICAgdGhpcy5keW5hbWljTW9kYWwuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgfVxuXG4gICBwcml2YXRlIG5vdGlmeShidXR0b25SZXNwb25zZTogU3RNb2RhbEJ1dHRvblJlc3BvbnNlKTogdm9pZCB7XG4gICAgICB0aGlzLm5vdGlmeUJ1dHRvbkludGVyYWN0aW9uLm5leHQoYnV0dG9uUmVzcG9uc2UucmVzcG9uc2UpO1xuICAgICAgaWYgKGJ1dHRvblJlc3BvbnNlLmNsb3NlKSB7XG4gICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG4gICB9XG5cbiAgIHByaXZhdGUgY2FuQ3JlYXRlTW9kYWwoY29uZmlnOiBTdE1vZGFsQ29uZmlnLCBjb21wb25lbnQ/OiBUeXBlPGFueT4pOiBzdHJpbmdbXSB7XG4gICAgICBsZXQgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgaWYgKCF0aGlzLl9jb250YWluZXJSZWYpIHtcbiAgICAgICAgIGVycm9ycy5wdXNoKGBbRVJST1JdOiBTdE1vZGFsU2VydmljZSA9PiBDYW50IGZpbmQgY29udGFpbmVyLCBhcmUgeW91IHN1cmUgeW91IGRlY2xhcmF0ZSBpbiBNQUlOIEFQUCBjb21wb25lbnQgaW4gaHRtbCBhbmQgdHlwZXNjcmlwdD9gKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmR5bmFtaWNNb2RhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICBlcnJvcnMucHVzaChgW0VSUk9SXTogU3RNb2RhbFNlcnZpY2UgPT4gQ2FuJ3QgY3JlYXRlIG1vZGFsIGJlYWNhdXNlIGFscmVhZHkgZXhpc3RzIG9uZS4gQXJlIHlvdSBzdXJlIHRoYXQgeW91IGNhbGwgY2xvc2UgbWV0aG9kPylgKTtcbiAgICAgIH1cbiAgICAgIGlmICghY29tcG9uZW50ICYmICFjb25maWcubWVzc2FnZSAmJiAhY29uZmlnLmh0bWwpIHtcbiAgICAgICAgIGVycm9ycy5wdXNoKGBbRVJST1JdOiBTdE1vZGFsU2VydmljZSA9PiBDYW4ndCBmaW5kIG1lc3NhZ2UsIGh0bWwgb3IgY29tcG9uZW50IHRvIHNob3cgaW4gbW9kYWxgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnJvcnM7XG4gICB9XG5cbiAgIHByaXZhdGUgY3JlYXRlQ29uZmlnKGNvbmZpZzogU3RNb2RhbENvbmZpZyk6IFN0TW9kYWxDb25maWcge1xuICAgICAgY29uc3QgZGVmYXVsdENvbmZpZzogU3RNb2RhbENvbmZpZyA9IHtcbiAgICAgICAgIGZ1bGxzY3JlZW46IGZhbHNlLFxuICAgICAgICAgaW5wdXRzOiB7fSxcbiAgICAgICAgIG91dHB1dHM6IHt9LFxuICAgICAgICAgbW9kYWxUaXRsZTogJ0RlZmF1bHQgdGl0bGUnLFxuICAgICAgICAgbWVzc2FnZVRpdGxlOiAnRGVmYXVsdCBzdWJ0aXRsZScsXG4gICAgICAgICBidXR0b25zOiBbXSxcbiAgICAgICAgIG1lc3NhZ2U6IHVuZGVmaW5lZCxcbiAgICAgICAgIGh0bWw6IHVuZGVmaW5lZCxcbiAgICAgICAgIG1heFdpZHRoOiB1bmRlZmluZWQsXG4gICAgICAgICBtaW5XaWR0aDogdW5kZWZpbmVkLFxuICAgICAgICAgZW1wdHk6IGZhbHNlXG4gICAgICB9O1xuICAgICAgY29uc3QgY2hlY2tlZENvbmZpZzogU3RNb2RhbENvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRDb25maWcsIGNvbmZpZyk7XG4gICAgICBjaGVja2VkQ29uZmlnLmJ1dHRvbnMgPSB0aGlzLmNoZWNrQnV0dG9ucyhjaGVja2VkQ29uZmlnLmJ1dHRvbnMpO1xuICAgICAgcmV0dXJuIGNoZWNrZWRDb25maWc7XG4gICB9XG5cbiAgIHByaXZhdGUgY2hlY2tCdXR0b25zKGJ1dHRvbnM6IFN0TW9kYWxCdXR0b25bXSk6IFN0TW9kYWxCdXR0b25bXSB7XG4gICAgICByZXR1cm4gYnV0dG9ucy5tYXAoYnV0dG9uID0+IE9iamVjdC5hc3NpZ24oe30sIHsgbGFiZWw6ICdCdXR0b24nLCBjbG9zZU9uQ2xpY2s6IGZhbHNlIH0sIGJ1dHRvbikpO1xuICAgfVxufVxuIl19