UNPKG

lamb-web-lib

Version:

LambWebLib. Es un proyecto angular de tipo Librería. que contiene una Suit de componentes reutilizables para el proyecto [Lamb Financial](https://lamb.upeu.edu.pe).

174 lines 19.6 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,uselessCode} checked by tsc */ import { Injectable, ApplicationRef, Injector, Inject, ComponentFactoryResolver, TemplateRef, ReflectiveInjector, } from '@angular/core'; import { DOCUMENT } from '@angular/common'; import { LambActiveModal, LambModalRef } from './modal-ref'; import { isDefined, isString } from './util/util'; import { LambModalBackdropComponent } from './modal-backdrop.component'; import { LambModalWindowComponent } from './modal-window.component'; import { ContentRef } from './util/popup'; export class LambModalStackService { /** * @param {?} applicationRef * @param {?} injector * @param {?} componentFactoryResolver * @param {?} document */ constructor(applicationRef, injector, componentFactoryResolver, document) { this.applicationRef = applicationRef; this.injector = injector; this.componentFactoryResolver = componentFactoryResolver; this._windowAttributes = ['backdrop', 'keyboard', 'centered', 'size', 'windowClass']; this._document = document; } /** * @param {?} moduleCFR * @param {?} contentInjector * @param {?} content * @param {?} options * @return {?} */ open(moduleCFR, contentInjector, content, options) { /** @type {?} */ const containerEl = isDefined(options.container) ? this._document.querySelector(options.container) : this._document.body; if (!containerEl) { throw new Error(`El contenedor modal especificado "${options.container || 'body'}" no fue encontrado en el DOM`); } /** @type {?} */ const activeModal = new LambActiveModal(); /** @type {?} */ const contentRef = this.getContentRef(moduleCFR, options.injector || contentInjector, content, activeModal); /** @type {?} */ const backdropCmptRef = options.backdrop !== false ? this.attachBackdrop(containerEl) : null; /** @type {?} */ const windowCmptRef = this.attachWindowComponent(containerEl, contentRef); /** @type {?} */ const lambModalRef = new LambModalRef(windowCmptRef, contentRef, backdropCmptRef, options.beforeDismiss); activeModal.close = (result) => { lambModalRef.close(result); }; activeModal.dismiss = (reason) => { lambModalRef.dismiss(reason); }; this.applyWindowOptions(windowCmptRef.instance, options); return lambModalRef; } /** * @param {?} containerEl * @return {?} */ attachBackdrop(containerEl) { /** @type {?} */ const backdropFactory = this.componentFactoryResolver.resolveComponentFactory(LambModalBackdropComponent); /** @type {?} */ const backdropCmptRef = backdropFactory.create(this.injector); this.applicationRef.attachView(backdropCmptRef.hostView); containerEl.appendChild(backdropCmptRef.location.nativeElement); return backdropCmptRef; } /** * @param {?} containerEl * @param {?} contentRef * @return {?} */ attachWindowComponent(containerEl, contentRef) { /** @type {?} */ const windowFactory = this.componentFactoryResolver.resolveComponentFactory(LambModalWindowComponent); /** @type {?} */ const windowCmptRef = windowFactory.create(this.injector, contentRef.nodes); this.applicationRef.attachView(windowCmptRef.hostView); containerEl.appendChild(windowCmptRef.location.nativeElement); return windowCmptRef; } /** * @param {?} windowInstance * @param {?} options * @return {?} */ applyWindowOptions(windowInstance, options) { this._windowAttributes.forEach((optionName) => { if (isDefined(options[optionName])) { windowInstance[optionName] = options[optionName]; } }); } /** * @param {?} moduleCFR * @param {?} contentInjector * @param {?} content * @param {?} context * @return {?} */ getContentRef(moduleCFR, contentInjector, content, context) { if (!content) { return new ContentRef([]); } else if (content instanceof TemplateRef) { return this.createFromTemplateRef(content, context); } else if (isString(content)) { return this.createFromString(content); } else { return this.createFromComponent(moduleCFR, contentInjector, content, context); } } /** * @param {?} content * @param {?} context * @return {?} */ createFromTemplateRef(content, context) { /** @type {?} */ const viewRef = content.createEmbeddedView(context); this.applicationRef.attachView(viewRef); return new ContentRef([viewRef.rootNodes], viewRef); } /** * @param {?} content * @return {?} */ createFromString(content) { /** @type {?} */ const component = this._document.createTextNode(`${content}`); return new ContentRef([[component]]); } /** * @param {?} moduleCFR * @param {?} contentInjector * @param {?} content * @param {?} context * @return {?} */ createFromComponent(moduleCFR, contentInjector, content, context) { /** @type {?} */ const contentComponentFactory = moduleCFR.resolveComponentFactory(content); /** @type {?} */ const modalContentInjector = ReflectiveInjector.resolveAndCreate([{ provide: LambActiveModal, useValue: context }], contentInjector); /** @type {?} */ const componentRef = contentComponentFactory.create(modalContentInjector); this.applicationRef.attachView(componentRef.hostView); return new ContentRef([[componentRef.location.nativeElement]], componentRef.hostView, componentRef); } } LambModalStackService.decorators = [ { type: Injectable }, ]; LambModalStackService.ctorParameters = () => [ { type: ApplicationRef }, { type: Injector }, { type: ComponentFactoryResolver }, { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] } ]; if (false) { /** @type {?} */ LambModalStackService.prototype._document; /** @type {?} */ LambModalStackService.prototype._windowAttributes; /** @type {?} */ LambModalStackService.prototype.applicationRef; /** @type {?} */ LambModalStackService.prototype.injector; /** @type {?} */ LambModalStackService.prototype.componentFactoryResolver; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtc3RhY2suc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2xhbWItd2ViLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL21vZGFsL21vZGFsLXN0YWNrLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFDcEMsTUFBTSxFQUFFLHdCQUF3QixFQUNkLFdBQVcsRUFBRSxrQkFBa0IsR0FDbEQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHMUMsTUFBTTs7Ozs7OztJQUlKLFlBQ1UsY0FBOEIsRUFDOUIsUUFBa0IsRUFDbEIsd0JBQWtELEVBQ3hDLFFBQVE7UUFIbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUxwRCxzQkFBaUIsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztRQVF0RixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUM1QixDQUFDOzs7Ozs7OztJQUVELElBQUksQ0FBQyxTQUFtQyxFQUFFLGVBQXlCLEVBQUUsT0FBWSxFQUFFLE9BQU87O2NBQ2xGLFdBQVcsR0FB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YyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUM7UUFDN0QsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQzs7Ozs7Ozs7SUFFTyxtQkFBbUIsQ0FDekIsU0FBbUMsRUFBRSxlQUF5QixFQUFFLE9BQVksRUFDNUUsT0FBd0I7O2NBQ2xCLHVCQUF1QixHQUFHLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUM7O2NBQ3BFLG9CQUFvQixHQUN4QixrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxlQUFlLENBQUM7O2NBQ25HLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUM7UUFDekUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDdEcsQ0FBQzs7O1lBakdGLFVBQVU7OztZQVhHLGNBQWM7WUFBRSxRQUFRO1lBQzVCLHdCQUF3Qjs0Q0FtQjdCLE1BQU0sU0FBQyxRQUFROzs7O0lBUGxCLDBDQUF1Qjs7SUFDdkIsa0RBQXdGOztJQUd0RiwrQ0FBc0M7O0lBQ3RDLHlDQUEwQjs7SUFDMUIseURBQTBEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBJbmplY3RhYmxlLCBBcHBsaWNhdGlvblJlZiwgSW5qZWN0b3IsXHJcbiAgSW5qZWN0LCBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZixcclxuICBDb21wb25lbnRGYWN0b3J5LCBUZW1wbGF0ZVJlZiwgUmVmbGVjdGl2ZUluamVjdG9yLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IExhbWJBY3RpdmVNb2RhbCwgTGFtYk1vZGFsUmVmIH0gZnJvbSAnLi9tb2RhbC1yZWYnO1xyXG5pbXBvcnQgeyBpc0RlZmluZWQsIGlzU3RyaW5nIH0gZnJvbSAnLi91dGlsL3V0aWwnO1xyXG5pbXBvcnQgeyBMYW1iTW9kYWxCYWNrZHJvcENvbXBvbmVudCB9IGZyb20gJy4vbW9kYWwtYmFja2Ryb3AuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTGFtYk1vZGFsV2luZG93Q29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC13aW5kb3cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29udGVudFJlZiB9IGZyb20gJy4vdXRpbC9wb3B1cCc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBMYW1iTW9kYWxTdGFja1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgX2RvY3VtZW50OiBhbnk7XHJcbiAgcHJpdmF0ZSBfd2luZG93QXR0cmlidXRlcyA9IFsnYmFja2Ryb3AnLCAna2V5Ym9hcmQnLCAnY2VudGVyZWQnLCAnc2l6ZScsICd3aW5kb3dDbGFzcyddO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQsXHJcbiAgKSB7XHJcbiAgICB0aGlzLl9kb2N1bWVudCA9IGRvY3VtZW50O1xyXG4gIH1cclxuXHJcbiAgb3Blbihtb2R1bGVDRlI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgY29udGVudEluamVjdG9yOiBJbmplY3RvciwgY29udGVudDogYW55LCBvcHRpb25zKTogTGFtYk1vZGFsUmVmIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckVsID0gaXNEZWZpbmVkKG9wdGlvbnMuY29udGFpbmVyKSA/XHJcbiAgICAgIHRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iob3B0aW9ucy5jb250YWluZXIpIDogdGhpcy5fZG9jdW1lbnQuYm9keTtcclxuICAgIGlmICghY29udGFpbmVyRWwpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFbCBjb250ZW5lZG9yIG1vZGFsIGVzcGVjaWZpY2FkbyBcIiR7b3B0aW9ucy5jb250YWluZXIgfHwgJ2JvZHknfVwiIG5vIGZ1ZSBlbmNvbnRyYWRvIGVuIGVsIERPTWApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFjdGl2ZU1vZGFsID0gbmV3IExhbWJBY3RpdmVNb2RhbCgpO1xyXG4gICAgY29uc3QgY29udGVudFJlZiA9IHRoaXMuZ2V0Q29udGVudFJlZihtb2R1bGVDRlIsIG9wdGlvbnMuaW5qZWN0b3IgfHwgY29udGVudEluamVjdG9yLCBjb250ZW50LCBhY3RpdmVNb2RhbCk7XHJcblxyXG4gICAgY29uc3QgYmFja2Ryb3BDbXB0UmVmOiBDb21wb25lbnRSZWY8TGFtYk1vZGFsQmFja2Ryb3BDb21wb25lbnQ+ID1cclxuICAgICAgb3B0aW9ucy5iYWNrZHJvcCAhPT0gZmFsc2UgPyB0aGlzLmF0dGFjaEJhY2tkcm9wKGNvbnRhaW5lckVsKSA6IG51bGw7XHJcbiAgICBjb25zdCB3aW5kb3dDbXB0UmVmOiBDb21wb25lbnRSZWY8TGFtYk1vZGFsV2luZG93Q29tcG9uZW50PlxyXG4gICAgICA9IHRoaXMuYXR0YWNoV2luZG93Q29tcG9uZW50KGNvbnRhaW5lckVsLCBjb250ZW50UmVmKTtcclxuICAgIGNvbnN0IGxhbWJNb2RhbFJlZjogTGFtYk1vZGFsUmVmID1cclxuICAgICAgbmV3IExhbWJNb2RhbFJlZih3aW5kb3dDbXB0UmVmLCBjb250ZW50UmVmLCBiYWNrZHJvcENtcHRSZWYsIG9wdGlvbnMuYmVmb3JlRGlzbWlzcyk7XHJcblxyXG4gICAgYWN0aXZlTW9kYWwuY2xvc2UgPSAocmVzdWx0OiBhbnkpID0+IHsgbGFtYk1vZGFsUmVmLmNsb3NlKHJlc3VsdCk7IH07XHJcbiAgICBhY3RpdmVNb2RhbC5kaXNtaXNzID0gKHJlYXNvbjogYW55KSA9PiB7IGxhbWJNb2RhbFJlZi5kaXNtaXNzKHJlYXNvbik7IH07XHJcblxyXG4gICAgdGhpcy5hcHBseVdpbmRvd09wdGlvbnMod2luZG93Q21wdFJlZi5pbnN0YW5jZSwgb3B0aW9ucyk7XHJcbiAgICByZXR1cm4gbGFtYk1vZGFsUmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhdHRhY2hCYWNrZHJvcChjb250YWluZXJFbDogYW55KTogQ29tcG9uZW50UmVmPExhbWJNb2RhbEJhY2tkcm9wQ29tcG9uZW50PiB7XHJcbiAgICBjb25zdCBiYWNrZHJvcEZhY3Rvcnk6IENvbXBvbmVudEZhY3Rvcnk8TGFtYk1vZGFsQmFja2Ryb3BDb21wb25lbnQ+ID1cclxuICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGFtYk1vZGFsQmFja2Ryb3BDb21wb25lbnQpO1xyXG4gICAgY29uc3QgYmFja2Ryb3BDbXB0UmVmID0gYmFja2Ryb3BGYWN0b3J5LmNyZWF0ZSh0aGlzLmluamVjdG9yKTtcclxuICAgIHRoaXMuYXBwbGljYXRpb25SZWYuYXR0YWNoVmlldyhiYWNrZHJvcENtcHRSZWYuaG9zdFZpZXcpO1xyXG4gICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQoYmFja2Ryb3BDbXB0UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgcmV0dXJuIGJhY2tkcm9wQ21wdFJlZjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXR0YWNoV2luZG93Q29tcG9uZW50KGNvbnRhaW5lckVsOiBhbnksIGNvbnRlbnRSZWY6IGFueSk6IENvbXBvbmVudFJlZjxMYW1iTW9kYWxXaW5kb3dDb21wb25lbnQ+IHtcclxuICAgIGNvbnN0IHdpbmRvd0ZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMYW1iTW9kYWxXaW5kb3dDb21wb25lbnQpO1xyXG4gICAgY29uc3Qgd2luZG93Q21wdFJlZiA9IHdpbmRvd0ZhY3RvcnkuY3JlYXRlKHRoaXMuaW5qZWN0b3IsIGNvbnRlbnRSZWYubm9kZXMpO1xyXG4gICAgdGhpcy5hcHBsaWNhdGlvblJlZi5hdHRhY2hWaWV3KHdpbmRvd0NtcHRSZWYuaG9zdFZpZXcpO1xyXG4gICAgY29udGFpbmVyRWwuYXBwZW5kQ2hpbGQod2luZG93Q21wdFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50KTtcclxuICAgIHJldHVybiB3aW5kb3dDbXB0UmVmO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseVdpbmRvd09wdGlvbnMod2luZG93SW5zdGFuY2U6IExhbWJNb2RhbFdpbmRvd0NvbXBvbmVudCwgb3B0aW9uczogT2JqZWN0KTogdm9pZCB7XHJcbiAgICB0aGlzLl93aW5kb3dBdHRyaWJ1dGVzLmZvckVhY2goKG9wdGlvbk5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoaXNEZWZpbmVkKG9wdGlvbnNbb3B0aW9uTmFtZV0pKSB7XHJcbiAgICAgICAgd2luZG93SW5zdGFuY2Vbb3B0aW9uTmFtZV0gPSBvcHRpb25zW29wdGlvbk5hbWVdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Q29udGVudFJlZihcclxuICAgIG1vZHVsZUNGUjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBjb250ZW50SW5qZWN0b3I6IEluamVjdG9yLCBjb250ZW50OiBhbnksXHJcbiAgICBjb250ZXh0OiBMYW1iQWN0aXZlTW9kYWwpOiBDb250ZW50UmVmIHtcclxuICAgIGlmICghY29udGVudCkge1xyXG4gICAgICByZXR1cm4gbmV3IENvbnRlbnRSZWYoW10pO1xyXG4gICAgfSBlbHNlIGlmIChjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRnJvbVRlbXBsYXRlUmVmKGNvbnRlbnQsIGNvbnRleHQpO1xyXG4gICAgfSBlbHNlIGlmIChpc1N0cmluZyhjb250ZW50KSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVGcm9tU3RyaW5nKGNvbnRlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRnJvbUNvbXBvbmVudChtb2R1bGVDRlIsIGNvbnRlbnRJbmplY3RvciwgY29udGVudCwgY29udGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZyb21UZW1wbGF0ZVJlZihjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+LCBjb250ZXh0OiBMYW1iQWN0aXZlTW9kYWwpOiBDb250ZW50UmVmIHtcclxuICAgIGNvbnN0IHZpZXdSZWYgPSBjb250ZW50LmNyZWF0ZUVtYmVkZGVkVmlldyhjb250ZXh0KTtcclxuICAgIHRoaXMuYXBwbGljYXRpb25SZWYuYXR0YWNoVmlldyh2aWV3UmVmKTtcclxuICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbdmlld1JlZi5yb290Tm9kZXNdLCB2aWV3UmVmKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRnJvbVN0cmluZyhjb250ZW50OiBzdHJpbmcpOiBDb250ZW50UmVmIHtcclxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuX2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKGAke2NvbnRlbnR9YCk7XHJcbiAgICByZXR1cm4gbmV3IENvbnRlbnRSZWYoW1tjb21wb25lbnRdXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUZyb21Db21wb25lbnQoXHJcbiAgICBtb2R1bGVDRlI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgY29udGVudEluamVjdG9yOiBJbmplY3RvciwgY29udGVudDogYW55LFxyXG4gICAgY29udGV4dDogTGFtYkFjdGl2ZU1vZGFsKTogQ29udGVudFJlZiB7XHJcbiAgICBjb25zdCBjb250ZW50Q29tcG9uZW50RmFjdG9yeSA9IG1vZHVsZUNGUi5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb250ZW50KTtcclxuICAgIGNvbnN0IG1vZGFsQ29udGVudEluamVjdG9yID1cclxuICAgICAgUmVmbGVjdGl2ZUluamVjdG9yLnJlc29sdmVBbmRDcmVhdGUoW3sgcHJvdmlkZTogTGFtYkFjdGl2ZU1vZGFsLCB1c2VWYWx1ZTogY29udGV4dCB9XSwgY29udGVudEluamVjdG9yKTtcclxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IGNvbnRlbnRDb21wb25lbnRGYWN0b3J5LmNyZWF0ZShtb2RhbENvbnRlbnRJbmplY3Rvcik7XHJcbiAgICB0aGlzLmFwcGxpY2F0aW9uUmVmLmF0dGFjaFZpZXcoY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcclxuICAgIHJldHVybiBuZXcgQ29udGVudFJlZihbW2NvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50XV0sIGNvbXBvbmVudFJlZi5ob3N0VmlldywgY29tcG9uZW50UmVmKTtcclxuICB9XHJcbn1cclxuIl19