UNPKG

@uex/web-extensions

Version:

Uex extensions for Angular 6+ web projects

211 lines 17.9 kB
/** * @fileoverview added by tsickle * Generated from: lib/modules/dialog/dialog.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable } from "@angular/core"; import * as _ from "lodash"; import { DialogBaseService } from "./dialog.base.service"; import { DialogLoadingComponent } from "./components/loading/loading.component"; import { DialogAlertComponent } from "./components/alert/alert.component"; import { DialogConfirmComponent } from "./components/confirm/confirm.component"; import { DialogPromptComponent } from "./components/prompt/prompt.component"; import { DialogViewerComponent } from "./components/viewer/viewer.component"; /** * Serviço que inicializa e exibe um modal a partir de um componente * * Example * ```ts * private dialog: Dialog; * private openModal() { * if(!this.dialog) { * this.dialog = this.dialogService.create(TesteModal, { * // Dialog params (Opcional) * teste: { * 'its work?': true * } * }, { * // Dialog settings (Opcional) * backdrop: { // Backdrop settings (Opcional) * onClick: 'close' // Opcional: 'close', 'dismiss', 'none' (default: close) * }, * header: { // Header settings (Opcional) * title: 'Teste modal', // Obrigatório * subtitle: 'Isso é apenas um teste', // Opcional * closable: true, // Opcional (default: true) * closeClick: 'close' // Opcional: 'close', 'dismiss' (default: close) * } * }); * // Quando o modal é aberto * this.dialog.onOpen.subscribe(() => console.log("Modal opened")); * // Quando o dialog é ocultado * this.dialog.onDismiss.subscribe(() => console.log("Modal dismissed")); * // Quando o dialog é destruido * this.dialog.onClose.subscribe(() => console.log("Modal closed")); * // Quando o dialog retorna um valor * this.dialog.onReturnValue.subscribe((response) => console.log("Modal response:", response)); * } * this.dialog.open(); * } * ``` * */ export class DialogService { /** * @param {?} _baseService */ constructor(_baseService) { this._baseService = _baseService; } /** * @return {?} */ get onShow() { return this._baseService.onShow; } /** * @return {?} */ get onHide() { return this._baseService.onHide; } /** * @return {?} */ get visibleDialogs() { return this._baseService.visibleDialogs; } /** * @return {?} */ get dialogs() { return this._baseService.dialogs; } /** * @param {?} component * @param {?=} params * @param {?=} settings * @return {?} */ create(component, params, settings) { return this._baseService.create(component, params, settings); } /** * @param {?} component * @param {?=} params * @param {?=} settings * @return {?} */ open(component, params, settings) { return this._baseService.open(component, params, settings); } /** * @param {?} message * @return {?} */ loading(message) { return this.open(DialogLoadingComponent, { message }, { size: "xs", backdrop: { onClick: "none" } }); } /** * @param {?} params * @return {?} */ alert(params) { /** @type {?} */ let size = params.size ? params.size : "xs"; delete params.size; return this.open(DialogAlertComponent, params, { size }); } /** * @param {?} params * @param {?} callback * @return {?} */ confirm(params, callback) { /** @type {?} */ let size = params.size ? params.size : "xs"; delete params.size; /** @type {?} */ let dialog = this.open(DialogConfirmComponent, params, { size, backdrop: { onClick: "none" } }); /** @type {?} */ const subscription = dialog.onReturnValue.subscribe((/** * @param {?} response * @return {?} */ (response) => { subscription.unsubscribe(); callback(response); dialog.close(); })); return dialog; } /** * @param {?} params * @param {?} callback * @return {?} */ prompt(params, callback) { /** @type {?} */ let size = params.size ? params.size : "xs"; delete params.size; if (!_.isArray(params.schema)) params.schema = [(/** @type {?} */ (params.schema))]; /** @type {?} */ let dialog = this.open(DialogPromptComponent, params, { size, backdrop: { onClick: "none" } }); /** @type {?} */ const subscription = dialog.onReturnValue.subscribe((/** * @param {?} response * @return {?} */ (response) => { subscription.unsubscribe(); callback(response); dialog.close(); })); return dialog; } /** * @param {?} src * @param {?=} type * @return {?} */ openViewer(src, type = "image") { return this.open(DialogViewerComponent, { src, type }, { size: "responsive", keyboard: { onEscape: "close" }, fit_to_screen: false, wrapper_class: "uex-dialog-viewer-wrapper", dialog_class: "uex-dialog-viewer-dialog", content_class: "uex-dialog-viewer-content", backdrop_class: "uex-dialog-viewer-backdrop" }); } } DialogService.decorators = [ { type: Injectable } ]; /** @nocollapse */ DialogService.ctorParameters = () => [ { type: DialogBaseService } ]; if (false) { /** * @type {?} * @private */ DialogService.prototype._baseService; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWV4L3dlYi1leHRlbnNpb25zLyIsInNvdXJjZXMiOlsibGliL21vZHVsZXMvZGlhbG9nL2RpYWxvZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUM7QUFhNUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHMUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDaEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QzdFLE1BQU0sT0FBTyxhQUFhOzs7O0lBQ3hCLFlBQW9CLFlBQStCO1FBQS9CLGlCQUFZLEdBQVosWUFBWSxDQUFtQjtJQUFHLENBQUM7Ozs7SUFFdkQsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxDQUFDOzs7O0lBQ0QsSUFBVyxNQUFNO1FBQ2YsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxDQUFDOzs7O0lBRUQsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7SUFDMUMsQ0FBQzs7OztJQUVELElBQVcsT0FBTztRQUNoQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO0lBQ25DLENBQUM7Ozs7Ozs7SUFFTSxNQUFNLENBQ1gsU0FBYyxFQUNkLE1BQVksRUFDWixRQUF5QjtRQUV6QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDL0QsQ0FBQzs7Ozs7OztJQUVNLElBQUksQ0FBQyxTQUFjLEVBQUUsTUFBWSxFQUFFLFFBQXlCO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDOzs7OztJQUVNLE9BQU8sQ0FBQyxPQUFzQztRQUNuRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQ2Qsc0JBQXNCLEVBQ3RCO1lBQ0UsT0FBTztTQUNSLEVBQ0Q7WUFDRSxJQUFJLEVBQUUsSUFBSTtZQUNWLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7U0FDOUIsQ0FDRixDQUFDO0lBQ0osQ0FBQzs7Ozs7SUFFTSxLQUFLLENBQUMsTUFBeUI7O1lBQ2hDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJO1FBQzNDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztRQUNuQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDOzs7Ozs7SUFFTSxPQUFPLENBQ1osTUFBMkIsRUFDM0IsUUFBK0I7O1lBRTNCLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJO1FBQzNDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQzs7WUFDZixNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLEVBQUU7WUFDckQsSUFBSTtZQUNKLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7U0FDOUIsQ0FBQzs7Y0FDSSxZQUFZLEdBQWlCLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUzs7OztRQUMvRCxDQUFDLFFBQWlCLEVBQUUsRUFBRTtZQUNwQixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDLEVBQ0Y7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOzs7Ozs7SUFFTSxNQUFNLENBQ1gsTUFBMEIsRUFDMUIsUUFBOEI7O1lBRTFCLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJO1FBQzNDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxtQkFBZ0IsTUFBTSxDQUFDLE1BQU0sRUFBQSxDQUFDLENBQUM7O1lBQzlDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sRUFBRTtZQUNwRCxJQUFJO1lBQ0osUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtTQUM5QixDQUFDOztjQUNJLFlBQVksR0FBaUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxTQUFTOzs7O1FBQy9ELENBQUMsUUFBb0IsRUFBRSxFQUFFO1lBQ3ZCLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzQixRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbkIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUMsRUFDRjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Ozs7OztJQUVNLFVBQVUsQ0FBQyxHQUFXLEVBQUUsT0FBMEIsT0FBTztRQUM5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQ2QscUJBQXFCLEVBQ3JCLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUNiO1lBQ0UsSUFBSSxFQUFFLFlBQVk7WUFDbEIsUUFBUSxFQUFFO2dCQUNSLFFBQVEsRUFBRSxPQUFPO2FBQ2xCO1lBQ0QsYUFBYSxFQUFFLEtBQUs7WUFDcEIsYUFBYSxFQUFFLDJCQUEyQjtZQUMxQyxZQUFZLEVBQUUsMEJBQTBCO1lBQ3hDLGFBQWEsRUFBRSwyQkFBMkI7WUFDMUMsY0FBYyxFQUFFLDRCQUE0QjtTQUM3QyxDQUNGLENBQUM7SUFDSixDQUFDOzs7WUE1R0YsVUFBVTs7OztZQWxERixpQkFBaUI7Ozs7Ozs7SUFvRFoscUNBQXVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgRXZlbnRFbWl0dGVyIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCAqIGFzIF8gZnJvbSBcImxvZGFzaFwiO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuaW1wb3J0IHtcclxuICBEaWFsb2csXHJcbiAgRGlhbG9nU2V0dGluZ3MsXHJcbiAgRGlhbG9nQWxlcnRQYXJhbXMsXHJcbiAgRGlhbG9nQ29uZmlybVBhcmFtcyxcclxuICBEaWFsb2dDb25maXJtQ2FsbGJhY2ssXHJcbiAgRGlhbG9nUHJvbXB0UGFyYW1zLFxyXG4gIERpYWxvZ1Byb21wdENhbGxiYWNrLFxyXG4gIERpYWxvZ1N0cmluZ0Z1bmN0aW9uXHJcbn0gZnJvbSBcIi4vZGlhbG9nLmJhc2VcIjtcclxuaW1wb3J0IHsgRGlhbG9nQmFzZVNlcnZpY2UgfSBmcm9tIFwiLi9kaWFsb2cuYmFzZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEZvcm1WYWx1ZXMsIEZvcm1TY2hlbWFEYXRhIH0gZnJvbSBcIi4uL2Zvcm0vZm9ybS5pbnRlcmZhY2VcIjtcclxuXHJcbmltcG9ydCB7IERpYWxvZ0xvYWRpbmdDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2xvYWRpbmcvbG9hZGluZy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRGlhbG9nQWxlcnRDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRzL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEaWFsb2dDb25maXJtQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy9jb25maXJtL2NvbmZpcm0uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERpYWxvZ1Byb21wdENvbXBvbmVudCB9IGZyb20gXCIuL2NvbXBvbmVudHMvcHJvbXB0L3Byb21wdC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRGlhbG9nVmlld2VyQ29tcG9uZW50IH0gZnJvbSBcIi4vY29tcG9uZW50cy92aWV3ZXIvdmlld2VyLmNvbXBvbmVudFwiO1xyXG5cclxuLyoqXHJcbiAqIFNlcnZpw6dvIHF1ZSBpbmljaWFsaXphIGUgZXhpYmUgdW0gbW9kYWwgYSBwYXJ0aXIgZGUgdW0gY29tcG9uZW50ZVxyXG4gKlxyXG4gKiBFeGFtcGxlXHJcblxyXG5gYGB0c1xyXG5wcml2YXRlIGRpYWxvZzogRGlhbG9nO1xyXG5wcml2YXRlIG9wZW5Nb2RhbCgpIHtcclxuICBpZighdGhpcy5kaWFsb2cpIHtcclxuICAgIHRoaXMuZGlhbG9nID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmNyZWF0ZShUZXN0ZU1vZGFsLCB7XHJcbiAgICAgIC8vIERpYWxvZyBwYXJhbXMgKE9wY2lvbmFsKVxyXG4gICAgICB0ZXN0ZToge1xyXG4gICAgICAgICdpdHMgd29yaz8nOiB0cnVlXHJcbiAgICAgIH1cclxuICAgIH0sIHtcclxuICAgICAgLy8gRGlhbG9nIHNldHRpbmdzIChPcGNpb25hbClcclxuICAgICAgYmFja2Ryb3A6IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2tkcm9wIHNldHRpbmdzIChPcGNpb25hbClcclxuICAgICAgICBvbkNsaWNrOiAnY2xvc2UnICAgICAgICAgICAgICAgICAgICAgIC8vIE9wY2lvbmFsOiAnY2xvc2UnLCAnZGlzbWlzcycsICdub25lJyAoZGVmYXVsdDogY2xvc2UpXHJcbiAgICAgIH0sXHJcbiAgICAgIGhlYWRlcjogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIZWFkZXIgc2V0dGluZ3MgKE9wY2lvbmFsKVxyXG4gICAgICAgIHRpdGxlOiAnVGVzdGUgbW9kYWwnLCAgICAgICAgICAgICAgICAgLy8gT2JyaWdhdMOzcmlvXHJcbiAgICAgICAgc3VidGl0bGU6ICdJc3NvIMOpIGFwZW5hcyB1bSB0ZXN0ZScsICAgLy8gT3BjaW9uYWxcclxuICAgICAgICBjbG9zYWJsZTogdHJ1ZSwgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wY2lvbmFsIChkZWZhdWx0OiB0cnVlKVxyXG4gICAgICAgIGNsb3NlQ2xpY2s6ICdjbG9zZScgICAgICAgICAgICAgICAgICAgLy8gT3BjaW9uYWw6ICdjbG9zZScsICdkaXNtaXNzJyAoZGVmYXVsdDogY2xvc2UpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gUXVhbmRvIG8gbW9kYWwgw6kgYWJlcnRvXHJcbiAgICB0aGlzLmRpYWxvZy5vbk9wZW4uc3Vic2NyaWJlKCgpID0+IGNvbnNvbGUubG9nKFwiTW9kYWwgb3BlbmVkXCIpKTtcclxuICAgIC8vIFF1YW5kbyBvIGRpYWxvZyDDqSBvY3VsdGFkb1xyXG4gICAgdGhpcy5kaWFsb2cub25EaXNtaXNzLnN1YnNjcmliZSgoKSA9PiBjb25zb2xlLmxvZyhcIk1vZGFsIGRpc21pc3NlZFwiKSk7XHJcbiAgICAvLyBRdWFuZG8gbyBkaWFsb2cgw6kgZGVzdHJ1aWRvXHJcbiAgICB0aGlzLmRpYWxvZy5vbkNsb3NlLnN1YnNjcmliZSgoKSA9PiBjb25zb2xlLmxvZyhcIk1vZGFsIGNsb3NlZFwiKSk7XHJcbiAgICAvLyBRdWFuZG8gbyBkaWFsb2cgcmV0b3JuYSB1bSB2YWxvclxyXG4gICAgdGhpcy5kaWFsb2cub25SZXR1cm5WYWx1ZS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiBjb25zb2xlLmxvZyhcIk1vZGFsIHJlc3BvbnNlOlwiLCByZXNwb25zZSkpO1xyXG4gIH1cclxuICB0aGlzLmRpYWxvZy5vcGVuKCk7XHJcbn1cclxuYGBgXHJcblxyXG4gKlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgRGlhbG9nU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYmFzZVNlcnZpY2U6IERpYWxvZ0Jhc2VTZXJ2aWNlKSB7fVxyXG5cclxuICBwdWJsaWMgZ2V0IG9uU2hvdygpOiBFdmVudEVtaXR0ZXI8RGlhbG9nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmFzZVNlcnZpY2Uub25TaG93O1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IG9uSGlkZSgpOiBFdmVudEVtaXR0ZXI8RGlhbG9nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmFzZVNlcnZpY2Uub25IaWRlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2aXNpYmxlRGlhbG9ncygpOiBBcnJheTxEaWFsb2c+IHtcclxuICAgIHJldHVybiB0aGlzLl9iYXNlU2VydmljZS52aXNpYmxlRGlhbG9ncztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGlhbG9ncygpOiBBcnJheTxEaWFsb2c+IHtcclxuICAgIHJldHVybiB0aGlzLl9iYXNlU2VydmljZS5kaWFsb2dzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZShcclxuICAgIGNvbXBvbmVudDogYW55LFxyXG4gICAgcGFyYW1zPzogYW55LFxyXG4gICAgc2V0dGluZ3M/OiBEaWFsb2dTZXR0aW5nc1xyXG4gICk6IERpYWxvZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYmFzZVNlcnZpY2UuY3JlYXRlKGNvbXBvbmVudCwgcGFyYW1zLCBzZXR0aW5ncyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb3Blbihjb21wb25lbnQ6IGFueSwgcGFyYW1zPzogYW55LCBzZXR0aW5ncz86IERpYWxvZ1NldHRpbmdzKTogRGlhbG9nIHtcclxuICAgIHJldHVybiB0aGlzLl9iYXNlU2VydmljZS5vcGVuKGNvbXBvbmVudCwgcGFyYW1zLCBzZXR0aW5ncyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9hZGluZyhtZXNzYWdlOiBEaWFsb2dTdHJpbmdGdW5jdGlvbiB8IHN0cmluZyk6IERpYWxvZyB7XHJcbiAgICByZXR1cm4gdGhpcy5vcGVuKFxyXG4gICAgICBEaWFsb2dMb2FkaW5nQ29tcG9uZW50LFxyXG4gICAgICB7XHJcbiAgICAgICAgbWVzc2FnZVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgc2l6ZTogXCJ4c1wiLFxyXG4gICAgICAgIGJhY2tkcm9wOiB7IG9uQ2xpY2s6IFwibm9uZVwiIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhbGVydChwYXJhbXM6IERpYWxvZ0FsZXJ0UGFyYW1zKTogRGlhbG9nIHtcclxuICAgIGxldCBzaXplID0gcGFyYW1zLnNpemUgPyBwYXJhbXMuc2l6ZSA6IFwieHNcIjtcclxuICAgIGRlbGV0ZSBwYXJhbXMuc2l6ZTtcclxuICAgIHJldHVybiB0aGlzLm9wZW4oRGlhbG9nQWxlcnRDb21wb25lbnQsIHBhcmFtcywgeyBzaXplIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbmZpcm0oXHJcbiAgICBwYXJhbXM6IERpYWxvZ0NvbmZpcm1QYXJhbXMsXHJcbiAgICBjYWxsYmFjazogRGlhbG9nQ29uZmlybUNhbGxiYWNrXHJcbiAgKTogRGlhbG9nIHtcclxuICAgIGxldCBzaXplID0gcGFyYW1zLnNpemUgPyBwYXJhbXMuc2l6ZSA6IFwieHNcIjtcclxuICAgIGRlbGV0ZSBwYXJhbXMuc2l6ZTtcclxuICAgIGxldCBkaWFsb2cgPSB0aGlzLm9wZW4oRGlhbG9nQ29uZmlybUNvbXBvbmVudCwgcGFyYW1zLCB7XHJcbiAgICAgIHNpemUsXHJcbiAgICAgIGJhY2tkcm9wOiB7IG9uQ2xpY2s6IFwibm9uZVwiIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBkaWFsb2cub25SZXR1cm5WYWx1ZS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXNwb25zZTogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIGNhbGxiYWNrKHJlc3BvbnNlKTtcclxuICAgICAgICBkaWFsb2cuY2xvc2UoKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHJldHVybiBkaWFsb2c7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJvbXB0KFxyXG4gICAgcGFyYW1zOiBEaWFsb2dQcm9tcHRQYXJhbXMsXHJcbiAgICBjYWxsYmFjazogRGlhbG9nUHJvbXB0Q2FsbGJhY2tcclxuICApOiBEaWFsb2cge1xyXG4gICAgbGV0IHNpemUgPSBwYXJhbXMuc2l6ZSA/IHBhcmFtcy5zaXplIDogXCJ4c1wiO1xyXG4gICAgZGVsZXRlIHBhcmFtcy5zaXplO1xyXG4gICAgaWYgKCFfLmlzQXJyYXkocGFyYW1zLnNjaGVtYSkpXHJcbiAgICAgIHBhcmFtcy5zY2hlbWEgPSBbPEZvcm1TY2hlbWFEYXRhPnBhcmFtcy5zY2hlbWFdO1xyXG4gICAgbGV0IGRpYWxvZyA9IHRoaXMub3BlbihEaWFsb2dQcm9tcHRDb21wb25lbnQsIHBhcmFtcywge1xyXG4gICAgICBzaXplLFxyXG4gICAgICBiYWNrZHJvcDogeyBvbkNsaWNrOiBcIm5vbmVcIiB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gZGlhbG9nLm9uUmV0dXJuVmFsdWUuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzcG9uc2U6IEZvcm1WYWx1ZXMpID0+IHtcclxuICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICBjYWxsYmFjayhyZXNwb25zZSk7XHJcbiAgICAgICAgZGlhbG9nLmNsb3NlKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICByZXR1cm4gZGlhbG9nO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW5WaWV3ZXIoc3JjOiBzdHJpbmcsIHR5cGU6IFwiaW1hZ2VcIiB8IFwidmlkZW9cIiA9IFwiaW1hZ2VcIik6IERpYWxvZyB7XHJcbiAgICByZXR1cm4gdGhpcy5vcGVuKFxyXG4gICAgICBEaWFsb2dWaWV3ZXJDb21wb25lbnQsXHJcbiAgICAgIHsgc3JjLCB0eXBlIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBzaXplOiBcInJlc3BvbnNpdmVcIixcclxuICAgICAgICBrZXlib2FyZDoge1xyXG4gICAgICAgICAgb25Fc2NhcGU6IFwiY2xvc2VcIlxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZml0X3RvX3NjcmVlbjogZmFsc2UsXHJcbiAgICAgICAgd3JhcHBlcl9jbGFzczogXCJ1ZXgtZGlhbG9nLXZpZXdlci13cmFwcGVyXCIsXHJcbiAgICAgICAgZGlhbG9nX2NsYXNzOiBcInVleC1kaWFsb2ctdmlld2VyLWRpYWxvZ1wiLFxyXG4gICAgICAgIGNvbnRlbnRfY2xhc3M6IFwidWV4LWRpYWxvZy12aWV3ZXItY29udGVudFwiLFxyXG4gICAgICAgIGJhY2tkcm9wX2NsYXNzOiBcInVleC1kaWFsb2ctdmlld2VyLWJhY2tkcm9wXCJcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIl19