UNPKG

fundamental-ngx

Version:

SAP Fiori Fundamentals, implemented in Angular

210 lines 20.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ComponentFactoryResolver, Injectable, ApplicationRef, Injector } from '@angular/core'; import { ModalComponent } from '../modal.component'; import { ModalBackdrop } from '../modal-utils/modal-backdrop'; import { ModalContainer } from '../modal-utils/modal-container'; import { ModalConfig } from '../modal-utils/modal-config'; import { ModalRef } from '../modal-utils/modal-ref'; import { ModalInjector } from '../modal-utils/modal-injector'; var ModalService = /** @class */ (function () { function ModalService(componentFactoryResolver, appRef, injector) { this.componentFactoryResolver = componentFactoryResolver; this.appRef = appRef; this.injector = injector; this.modals = []; } /** * @return {?} */ ModalService.prototype.hasOpenModals = /** * @return {?} */ function () { return this.modals && this.modals.length > 0; }; /** * @return {?} */ ModalService.prototype.dismissAll = /** * @return {?} */ function () { var _this = this; this.modals.forEach((/** * @param {?} item * @return {?} */ function (item) { _this.destroyModalComponent(item.modalRef); })); }; /** * @param {?} contentType * @param {?=} modalConfig * @return {?} */ ModalService.prototype.open = /** * @param {?} contentType * @param {?=} modalConfig * @return {?} */ function (contentType, modalConfig) { var _this = this; if (modalConfig === void 0) { modalConfig = new ModalConfig(); } // Get default values from model modalConfig = Object.assign(new ModalConfig(), modalConfig); // Setup injectable data /** @type {?} */ var configMap = new WeakMap(); /** @type {?} */ var modalRef = new ModalRef(); modalRef.data = (modalConfig ? modalConfig.data : undefined); configMap.set(ModalRef, modalRef); // Prepare container /** @type {?} */ var containerFactory = this.componentFactoryResolver.resolveComponentFactory(ModalContainer); /** @type {?} */ var containerRef = containerFactory.create(this.injector); this.appRef.attachView(containerRef.hostView); // Prepare modal /** @type {?} */ var componentFactory = this.componentFactoryResolver.resolveComponentFactory(ModalComponent); /** @type {?} */ var componentRef = componentFactory.create(new ModalInjector(this.injector, configMap)); this.appRef.attachView(componentRef.hostView); // Prepare backdrop /** @type {?} */ var backdropRef; if (modalConfig.hasBackdrop) { /** @type {?} */ var backdropFactory = this.componentFactoryResolver.resolveComponentFactory(ModalBackdrop); backdropRef = backdropFactory.create(new ModalInjector(this.injector, configMap)); this.appRef.attachView(backdropRef.hostView); } // Subscribe to close of modalRef /** @type {?} */ var refSub = modalRef.afterClosed.subscribe((/** * @return {?} */ function () { _this.destroyModalComponent(componentRef); refSub.unsubscribe(); }), (/** * @return {?} */ function () { _this.destroyModalComponent(componentRef); refSub.unsubscribe(); })); // Assign component attributes /** @type {?} */ var configObj = Object.assign({}, modalConfig); Object.keys(configObj).forEach((/** * @param {?} key * @return {?} */ function (key) { if (key !== 'data') { componentRef.instance[key] = configObj[key]; if (modalConfig.hasBackdrop) { backdropRef.instance[key] = configObj[key]; } } })); componentRef.instance.childComponentType = contentType; // Sizing componentRef.location.nativeElement.style.minWidth = configObj.minWidth; componentRef.location.nativeElement.style.minHeight = configObj.minHeight; componentRef.location.nativeElement.style.maxWidth = configObj.maxWidth; componentRef.location.nativeElement.style.maxHeight = configObj.maxHeight; componentRef.location.nativeElement.style.width = configObj.width; componentRef.location.nativeElement.style.height = configObj.height; // Render container /** @type {?} */ var containerEl = (/** @type {?} */ (((/** @type {?} */ (containerRef.hostView))).rootNodes[0])); document.body.appendChild(containerEl); // Render backdrop if (modalConfig.hasBackdrop) { /** @type {?} */ var domBackdrop = (/** @type {?} */ (((/** @type {?} */ (backdropRef.hostView))).rootNodes[0])); containerRef.location.nativeElement.appendChild(domBackdrop); } // Render modal /** @type {?} */ var domElement = (/** @type {?} */ (((/** @type {?} */ (componentRef.hostView))).rootNodes[0])); containerRef.location.nativeElement.appendChild(domElement); this.modals.push({ modalRef: componentRef, backdropRef: backdropRef, containerRef: containerRef }); return modalRef; }; /** * @private * @param {?} modal * @return {?} */ ModalService.prototype.destroyModalComponent = /** * @private * @param {?} modal * @return {?} */ function (modal) { /** @type {?} */ var arrayRef = this.modals.find((/** * @param {?} item * @return {?} */ function (item) { return item.modalRef === modal; })); /** @type {?} */ var indexOf = this.modals.indexOf(arrayRef); this.appRef.detachView(arrayRef.modalRef.hostView); this.appRef.detachView(arrayRef.containerRef.hostView); arrayRef.containerRef.destroy(); arrayRef.modalRef.destroy(); if (arrayRef.backdropRef) { this.appRef.detachView(arrayRef.backdropRef.hostView); arrayRef.backdropRef.destroy(); } this.modals[indexOf] = null; this.modals = this.modals.filter((/** * @param {?} item * @return {?} */ function (item) { return item !== null && item !== undefined; })); }; ModalService.decorators = [ { type: Injectable } ]; /** @nocollapse */ ModalService.ctorParameters = function () { return [ { type: ComponentFactoryResolver }, { type: ApplicationRef }, { type: Injector } ]; }; return ModalService; }()); export { ModalService }; if (false) { /** * @type {?} * @private */ ModalService.prototype.modals; /** * @type {?} * @private */ ModalService.prototype.componentFactoryResolver; /** * @type {?} * @private */ ModalService.prototype.appRef; /** * @type {?} * @private */ ModalService.prototype.injector; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2Z1bmRhbWVudGFsLW5neC8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbC9tb2RhbC1zZXJ2aWNlL21vZGFsLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDSCx3QkFBd0IsRUFDeEIsVUFBVSxFQUNWLGNBQWMsRUFDZCxRQUFRLEVBS1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQ7SUFRSSxzQkFBb0Isd0JBQWtELEVBQ2xELE1BQXNCLEVBQ3RCLFFBQWtCO1FBRmxCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQVI5QixXQUFNLEdBSVIsRUFBRSxDQUFDO0lBSWdDLENBQUM7Ozs7SUFFbkMsb0NBQWE7OztJQUFwQjtRQUNJLE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQzs7OztJQUVNLGlDQUFVOzs7SUFBakI7UUFBQSxpQkFJQztRQUhHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTzs7OztRQUFDLFVBQUEsSUFBSTtZQUNwQixLQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FB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QVU7Ozs7Z0JBaEJQLHdCQUF3QjtnQkFFeEIsY0FBYztnQkFDZCxRQUFROztJQWlJWixtQkFBQztDQUFBLEFBcEhELElBb0hDO1NBbkhZLFlBQVk7Ozs7OztJQUNyQiw4QkFJUzs7Ozs7SUFFRyxnREFBMEQ7Ozs7O0lBQzFELDhCQUE4Qjs7Ozs7SUFDOUIsZ0NBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgSW5qZWN0YWJsZSxcbiAgICBBcHBsaWNhdGlvblJlZixcbiAgICBJbmplY3RvcixcbiAgICBFbWJlZGRlZFZpZXdSZWYsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIFR5cGUsXG4gICAgVGVtcGxhdGVSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL21vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb2RhbEJhY2tkcm9wIH0gZnJvbSAnLi4vbW9kYWwtdXRpbHMvbW9kYWwtYmFja2Ryb3AnO1xuaW1wb3J0IHsgTW9kYWxDb250YWluZXIgfSBmcm9tICcuLi9tb2RhbC11dGlscy9tb2RhbC1jb250YWluZXInO1xuaW1wb3J0IHsgTW9kYWxDb25maWcgfSBmcm9tICcuLi9tb2RhbC11dGlscy9tb2RhbC1jb25maWcnO1xuaW1wb3J0IHsgTW9kYWxSZWYgfSBmcm9tICcuLi9tb2RhbC11dGlscy9tb2RhbC1yZWYnO1xuaW1wb3J0IHsgTW9kYWxJbmplY3RvciB9IGZyb20gJy4uL21vZGFsLXV0aWxzL21vZGFsLWluamVjdG9yJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vZGFsU2VydmljZSB7XG4gICAgcHJpdmF0ZSBtb2RhbHM6IHtcbiAgICAgICAgbW9kYWxSZWY6IENvbXBvbmVudFJlZjxNb2RhbENvbXBvbmVudD4sXG4gICAgICAgIGJhY2tkcm9wUmVmPzogQ29tcG9uZW50UmVmPE1vZGFsQmFja2Ryb3A+LFxuICAgICAgICBjb250YWluZXJSZWY/OiBDb21wb25lbnRSZWY8TW9kYWxDb250YWluZXI+XG4gICAgfVtdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3Rvcikge31cblxuICAgIHB1YmxpYyBoYXNPcGVuTW9kYWxzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RhbHMgJiYgdGhpcy5tb2RhbHMubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzbWlzc0FsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb2RhbHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveU1vZGFsQ29tcG9uZW50KGl0ZW0ubW9kYWxSZWYpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3Blbihjb250ZW50VHlwZTogVHlwZTxhbnk+IHwgVGVtcGxhdGVSZWY8YW55PiwgbW9kYWxDb25maWc6IE1vZGFsQ29uZmlnID0gbmV3IE1vZGFsQ29uZmlnKCkpOiBNb2RhbFJlZiB7XG5cbiAgICAgICAgLy8gR2V0IGRlZmF1bHQgdmFsdWVzIGZyb20gbW9kZWxcbiAgICAgICAgbW9kYWxDb25maWcgPSBPYmplY3QuYXNzaWduKG5ldyBNb2RhbENvbmZpZygpLCBtb2RhbENvbmZpZyk7XG5cbiAgICAgICAgLy8gU2V0dXAgaW5qZWN0YWJsZSBkYXRhXG4gICAgICAgIGNvbnN0IGNvbmZpZ01hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gbmV3IE1vZGFsUmVmKCk7XG4gICAgICAgIG1vZGFsUmVmLmRhdGEgPSAobW9kYWxDb25maWcgPyBtb2RhbENvbmZpZy5kYXRhIDogdW5kZWZpbmVkKTtcbiAgICAgICAgY29uZmlnTWFwLnNldChNb2RhbFJlZiwgbW9kYWxSZWYpO1xuXG4gICAgICAgIC8vIFByZXBhcmUgY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShNb2RhbENvbnRhaW5lcik7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclJlZiA9IGNvbnRhaW5lckZhY3RvcnkuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KGNvbnRhaW5lclJlZi5ob3N0Vmlldyk7XG5cbiAgICAgICAgLy8gUHJlcGFyZSBtb2RhbFxuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTW9kYWxDb21wb25lbnQpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRSZWYgPSBjb21wb25lbnRGYWN0b3J5LmNyZWF0ZShuZXcgTW9kYWxJbmplY3Rvcih0aGlzLmluamVjdG9yLCBjb25maWdNYXApKTtcbiAgICAgICAgdGhpcy5hcHBSZWYuYXR0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuXG4gICAgICAgIC8vIFByZXBhcmUgYmFja2Ryb3BcbiAgICAgICAgbGV0IGJhY2tkcm9wUmVmO1xuICAgICAgICBpZiAobW9kYWxDb25maWcuaGFzQmFja2Ryb3ApIHtcbiAgICAgICAgICAgIGNvbnN0IGJhY2tkcm9wRmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KE1vZGFsQmFja2Ryb3ApO1xuICAgICAgICAgICAgYmFja2Ryb3BSZWYgPSBiYWNrZHJvcEZhY3RvcnkuY3JlYXRlKG5ldyBNb2RhbEluamVjdG9yKHRoaXMuaW5qZWN0b3IsIGNvbmZpZ01hcCkpO1xuICAgICAgICAgICAgdGhpcy5hcHBSZWYuYXR0YWNoVmlldyhiYWNrZHJvcFJlZi5ob3N0Vmlldyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gY2xvc2Ugb2YgbW9kYWxSZWZcbiAgICAgICAgY29uc3QgcmVmU3ViID0gbW9kYWxSZWYuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveU1vZGFsQ29tcG9uZW50KGNvbXBvbmVudFJlZik7XG4gICAgICAgICAgICByZWZTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95TW9kYWxDb21wb25lbnQoY29tcG9uZW50UmVmKTtcbiAgICAgICAgICAgIHJlZlN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBBc3NpZ24gY29tcG9uZW50IGF0dHJpYnV0ZXNcbiAgICAgICAgY29uc3QgY29uZmlnT2JqID0gT2JqZWN0LmFzc2lnbih7fSwgbW9kYWxDb25maWcpO1xuICAgICAgICBPYmplY3Qua2V5cyhjb25maWdPYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgIT09ICdkYXRhJykge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZVtrZXldID0gY29uZmlnT2JqW2tleV07XG5cbiAgICAgICAgICAgICAgICBpZiAobW9kYWxDb25maWcuaGFzQmFja2Ryb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3BSZWYuaW5zdGFuY2Vba2V5XSA9IGNvbmZpZ09ialtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5jaGlsZENvbXBvbmVudFR5cGUgPSBjb250ZW50VHlwZTtcblxuICAgICAgICAvLyBTaXppbmdcbiAgICAgICAgY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWluV2lkdGggPSBjb25maWdPYmoubWluV2lkdGg7XG4gICAgICAgIGNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LnN0eWxlLm1pbkhlaWdodCA9IGNvbmZpZ09iai5taW5IZWlnaHQ7XG4gICAgICAgIGNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LnN0eWxlLm1heFdpZHRoID0gY29uZmlnT2JqLm1heFdpZHRoO1xuICAgICAgICBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5zdHlsZS5tYXhIZWlnaHQgPSBjb25maWdPYmoubWF4SGVpZ2h0O1xuICAgICAgICBjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IGNvbmZpZ09iai53aWR0aDtcbiAgICAgICAgY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gY29uZmlnT2JqLmhlaWdodDtcblxuICAgICAgICAvLyBSZW5kZXIgY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckVsID0gKGNvbnRhaW5lclJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lckVsKTtcblxuICAgICAgICAvLyBSZW5kZXIgYmFja2Ryb3BcbiAgICAgICAgaWYgKG1vZGFsQ29uZmlnLmhhc0JhY2tkcm9wKSB7XG4gICAgICAgICAgICBjb25zdCBkb21CYWNrZHJvcCA9IChiYWNrZHJvcFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgY29udGFpbmVyUmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9tQmFja2Ryb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVuZGVyIG1vZGFsXG4gICAgICAgIGNvbnN0IGRvbUVsZW1lbnQgPSAoY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnRhaW5lclJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKGRvbUVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMubW9kYWxzLnB1c2goe21vZGFsUmVmOiBjb21wb25lbnRSZWYsIGJhY2tkcm9wUmVmOiBiYWNrZHJvcFJlZiwgY29udGFpbmVyUmVmOiBjb250YWluZXJSZWZ9KTtcbiAgICAgICAgcmV0dXJuIG1vZGFsUmVmO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveU1vZGFsQ29tcG9uZW50KG1vZGFsOiBDb21wb25lbnRSZWY8TW9kYWxDb21wb25lbnQ+KSB7XG4gICAgICAgIGNvbnN0IGFycmF5UmVmID0gdGhpcy5tb2RhbHMuZmluZCgoaXRlbSkgPT4gaXRlbS5tb2RhbFJlZiA9PT0gbW9kYWwpO1xuICAgICAgICBjb25zdCBpbmRleE9mID0gdGhpcy5tb2RhbHMuaW5kZXhPZihhcnJheVJlZik7XG4gICAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcoYXJyYXlSZWYubW9kYWxSZWYuaG9zdFZpZXcpO1xuICAgICAgICB0aGlzLmFwcFJlZi5kZXRhY2hWaWV3KGFycmF5UmVmLmNvbnRhaW5lclJlZi5ob3N0Vmlldyk7XG4gICAgICAgIGFycmF5UmVmLmNvbnRhaW5lclJlZi5kZXN0cm95KCk7XG4gICAgICAgIGFycmF5UmVmLm1vZGFsUmVmLmRlc3Ryb3koKTtcblxuICAgICAgICBpZiAoYXJyYXlSZWYuYmFja2Ryb3BSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcoYXJyYXlSZWYuYmFja2Ryb3BSZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgYXJyYXlSZWYuYmFja2Ryb3BSZWYuZGVzdHJveSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb2RhbHNbaW5kZXhPZl0gPSBudWxsO1xuICAgICAgICB0aGlzLm1vZGFscyA9IHRoaXMubW9kYWxzLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IG51bGwgJiYgaXRlbSAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG5cbn1cbiJdfQ==