@miracledevs/paradigm-web-angular
Version:
An angular wrapper with base functionality and helper services.
270 lines • 19.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
/*!
* Paradigm Framework - Angular Wrapper
* Copyright (c) 2017 Miracle Devs, Inc
* Licensed under MIT (https://github.com/MiracleDevs/Paradigm.Web.Shared/blob/master/LICENSE)
*/
import { Injectable, ComponentFactoryResolver, Injector } from '@angular/core';
import { ArrayList, ObjectExtensions } from '@miracledevs/paradigm-ui-web-shared';
import { ServiceBase } from './base.service';
import * as i0 from "@angular/core";
/**
* Represents a modal dialog instance.
* This class lifespan depends on the modal dialog lifespan.
* @template TParameters, TResult
*/
var /**
* Represents a modal dialog instance.
* This class lifespan depends on the modal dialog lifespan.
* @template TParameters, TResult
*/
ModalInstance = /** @class */ (function () {
/**
* Creates an instance of @see ModalInstance
* @param type the modal component type.
*/
function ModalInstance(type) {
this.type = type;
}
Object.defineProperty(ModalInstance.prototype, "componentRef", {
/**
* Gets the component ref associated to the modal dialog.
*/
get: /**
* Gets the component ref associated to the modal dialog.
* @return {?}
*/
function () { return this.innerComponentRef; },
enumerable: true,
configurable: true
});
/**
* Sets the component ref reference.
* @param componentRef the component ref object.
*/
/**
* Sets the component ref reference.
* @param {?} componentRef the component ref object.
* @return {?}
*/
ModalInstance.prototype.setComponentRef = /**
* Sets the component ref reference.
* @param {?} componentRef the component ref object.
* @return {?}
*/
function (componentRef) {
this.innerComponentRef = componentRef;
};
return ModalInstance;
}());
/**
* Represents a modal dialog instance.
* This class lifespan depends on the modal dialog lifespan.
* @template TParameters, TResult
*/
export { ModalInstance };
if (false) {
/**
* A reference to the component ref object.
* @type {?}
* @private
*/
ModalInstance.prototype.innerComponentRef;
/**
* The type of the modal component.
* @type {?}
*/
ModalInstance.prototype.type;
/**
* Resolves and finish successfully the modal dialog.
* @type {?}
*/
ModalInstance.prototype.resolve;
/**
* Rejects and finish unsuccessfully the modal dialog.
* @type {?}
*/
ModalInstance.prototype.reject;
}
var ModalService = /** @class */ (function (_super) {
tslib_1.__extends(ModalService, _super);
/**
* Creates a new instance of @see ModalService
* @param resolver a reference to the component factory resolver,
* @param injector a reference to the DI injector container
*/
function ModalService(resolver, injector) {
var _this = _super.call(this) || this;
_this.resolver = resolver;
_this.injector = injector;
_this.modalInstances = new ArrayList();
return _this;
}
/**
* Sets the view container ref that will hold and contain
* the modal components.
* @param container the view container ref.
*/
/**
* Sets the view container ref that will hold and contain
* the modal components.
* @param {?} container the view container ref.
* @return {?}
*/
ModalService.prototype.setViewContainer = /**
* Sets the view container ref that will hold and contain
* the modal components.
* @param {?} container the view container ref.
* @return {?}
*/
function (container) {
if (ObjectExtensions.isNull(container)) {
throw new Error('The container can not be null or undefined.');
}
this.viewContainer = container;
};
/**
* Gets the stack of modal instances.
*/
/**
* Gets the stack of modal instances.
* @return {?}
*/
ModalService.prototype.getModalInstances = /**
* Gets the stack of modal instances.
* @return {?}
*/
function () {
return this.modalInstances;
};
/**
* Opens a modal dialog component.
* @param type The modal component type.
* @param parameters the creation parameters to pass to the modal component.
*/
/**
* Opens a modal dialog component.
* @template TParameters, TResult
* @param {?} type The modal component type.
* @param {?=} parameters the creation parameters to pass to the modal component.
* @return {?}
*/
ModalService.prototype.open = /**
* Opens a modal dialog component.
* @template TParameters, TResult
* @param {?} type The modal component type.
* @param {?=} parameters the creation parameters to pass to the modal component.
* @return {?}
*/
function (type, parameters) {
var _this = this;
// create modal instance.
/** @type {?} */
var modalInstance = new ModalInstance(type);
this.modalInstances.add(modalInstance);
// setup the modal promise.
/** @type {?} */
var promise = new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
modalInstance.resolve = (/**
* @param {?=} result
* @return {?}
*/
function (result) {
resolve(result);
_this.remove(modalInstance);
});
modalInstance.reject = (/**
* @param {?=} reason
* @return {?}
*/
function (reason) {
reject(reason);
_this.remove(modalInstance);
});
}));
// create the component.
/** @type {?} */
var factory = this.resolver.resolveComponentFactory(type);
/** @type {?} */
var componentRef = factory.create(this.injector);
// initialize the modal and component.
modalInstance.setComponentRef(componentRef);
componentRef.instance.setModalService(this);
componentRef.instance.setModalInstance(modalInstance);
componentRef.instance.setParameters(parameters);
// insert view on screen.
this.viewContainer.insert(componentRef.hostView);
// return the promise.
return promise;
};
/**
* Removes the modal from the stack of modal instances.
* @param modalInstance the modal that will be removed.
*/
/**
* Removes the modal from the stack of modal instances.
* @private
* @template TParameters, TResult
* @param {?} modalInstance the modal that will be removed.
* @return {?}
*/
ModalService.prototype.remove = /**
* Removes the modal from the stack of modal instances.
* @private
* @template TParameters, TResult
* @param {?} modalInstance the modal that will be removed.
* @return {?}
*/
function (modalInstance) {
this.modalInstances.remove(modalInstance);
this.viewContainer.remove(this.viewContainer.indexOf(modalInstance.componentRef.hostView));
};
ModalService.decorators = [
{ type: Injectable, args: [{
providedIn: 'root'
},] }
];
/** @nocollapse */
ModalService.ctorParameters = function () { return [
{ type: ComponentFactoryResolver },
{ type: Injector }
]; };
/** @nocollapse */ ModalService.ngInjectableDef = i0.defineInjectable({ factory: function ModalService_Factory() { return new ModalService(i0.inject(i0.ComponentFactoryResolver), i0.inject(i0.INJECTOR)); }, token: ModalService, providedIn: "root" });
return ModalService;
}(ServiceBase));
export { ModalService };
if (false) {
/**
* A stack of modal instances.
* @type {?}
* @private
*/
ModalService.prototype.modalInstances;
/**
* A reference to the view container ref that will hold
* and contain the modal components.
* @type {?}
* @private
*/
ModalService.prototype.viewContainer;
/**
* @type {?}
* @private
*/
ModalService.prototype.resolver;
/**
* @type {?}
* @private
*/
ModalService.prototype.injector;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BtaXJhY2xlZGV2cy9wYXJhZGlnbS13ZWItYW5ndWxhci8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9tb2RhbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFNQSxPQUFPLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLFFBQVEsRUFBd0MsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQVU3Qzs7Ozs7O0lBMkJJOzs7T0FHRztJQUNILHVCQUFZLElBQW9EO1FBRTVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFURCxzQkFBSSx1Q0FBWTtRQUhoQjs7V0FFRzs7Ozs7UUFDSCxjQUE2RSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7OztPQUFBO0lBVzdHOzs7T0FHRzs7Ozs7O0lBQ0gsdUNBQWU7Ozs7O0lBQWYsVUFBZ0IsWUFBb0U7UUFFaEYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFlBQVksQ0FBQztJQUMxQyxDQUFDO0lBQ0wsb0JBQUM7QUFBRCxDQUFDLEFBNUNELElBNENDOzs7Ozs7Ozs7Ozs7O0lBdkNHLDBDQUFrRjs7Ozs7SUFLbEYsNkJBQThEOzs7OztJQUs5RCxnQ0FBK0I7Ozs7O0lBSy9CLCtCQUFvQjs7QUEwQnhCO0lBR2tDLHdDQUFXO0lBYXpDOzs7O09BSUc7SUFDSCxzQkFDWSxRQUFrQyxFQUNsQyxRQUFrQjtRQUY5QixZQUlJLGlCQUFPLFNBRVY7UUFMVyxjQUFRLEdBQVIsUUFBUSxDQUEwQjtRQUNsQyxjQUFRLEdBQVIsUUFBUSxDQUFVO1FBRzFCLEtBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQzs7SUFDMUMsQ0FBQztJQUVEOzs7O09BSUc7Ozs7Ozs7SUFDSCx1Q0FBZ0I7Ozs7OztJQUFoQixVQUFpQixTQUEyQjtRQUV4QyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFDdEM7WUFDSSxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7U0FDbEU7UUFFRCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7Ozs7O0lBQ0gsd0NBQWlCOzs7O0lBQWpCO1FBRUksT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHOzs7Ozs7OztJQUNILDJCQUFJOzs7Ozs7O0lBQUosVUFBMkIsSUFBb0QsRUFBRSxVQUF3QjtRQUF6RyxpQkFvQ0M7OztZQWpDUyxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQXVCLElBQUksQ0FBQztRQUNuRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQzs7O1lBR2pDLE9BQU8sR0FBRyxJQUFJLE9BQU87Ozs7O1FBQVUsVUFBQyxPQUFPLEVBQUUsTUFBTTtZQUVqRCxhQUFhLENBQUMsT0FBTzs7OztZQUFHLFVBQUMsTUFBZ0I7Z0JBRXJDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDaEIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUEsQ0FBQztZQUNGLGFBQWEsQ0FBQyxNQUFNOzs7O1lBQUcsVUFBQyxNQUFlO2dCQUVuQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2YsS0FBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUEsQ0FBQztRQUNOLENBQUMsRUFBQzs7O1lBR0ksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDOztZQUNyRCxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRWxELHNDQUFzQztRQUN0QyxhQUFhLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVDLFlBQVksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLFlBQVksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEQseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVqRCxzQkFBc0I7UUFDdEIsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7T0FHRzs7Ozs7Ozs7SUFDSyw2QkFBTTs7Ozs7OztJQUFkLFVBQXFDLGFBQWtEO1FBRW5GLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMvRixDQUFDOztnQkF2R0osVUFBVSxTQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7OztnQkE3RG9CLHdCQUF3QjtnQkFBRSxRQUFROzs7dUJBTnZEO0NBeUtDLEFBeEdELENBR2tDLFdBQVcsR0FxRzVDO1NBckdZLFlBQVk7Ozs7Ozs7SUFLckIsc0NBQTJEOzs7Ozs7O0lBTTNELHFDQUF3Qzs7Ozs7SUFRcEMsZ0NBQTBDOzs7OztJQUMxQyxnQ0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIFBhcmFkaWdtIEZyYW1ld29yayAtIEFuZ3VsYXIgV3JhcHBlclxuICogQ29weXJpZ2h0IChjKSAyMDE3IE1pcmFjbGUgRGV2cywgSW5jXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9NaXJhY2xlRGV2cy9QYXJhZGlnbS5XZWIuU2hhcmVkL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBJbmplY3RvciwgVHlwZSwgQ29tcG9uZW50UmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9jb21wb25lbnRzL21vZGFsLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEFycmF5TGlzdCwgT2JqZWN0RXh0ZW5zaW9ucyB9IGZyb20gJ0BtaXJhY2xlZGV2cy9wYXJhZGlnbS11aS13ZWItc2hhcmVkJztcbmltcG9ydCB7IFNlcnZpY2VCYXNlIH0gZnJvbSAnLi9iYXNlLnNlcnZpY2UnO1xuXG5leHBvcnQgdHlwZSBNb2RhbFJlc29sdmU8VFJlc3VsdD4gPSAocmVzdWx0OiBUUmVzdWx0KSA9PiB2b2lkO1xuXG5leHBvcnQgdHlwZSBNb2RhbFJlamVjdCA9IChyZWFzb246IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbW9kYWwgZGlhbG9nIGluc3RhbmNlLlxuICogVGhpcyBjbGFzcyBsaWZlc3BhbiBkZXBlbmRzIG9uIHRoZSBtb2RhbCBkaWFsb2cgbGlmZXNwYW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBNb2RhbEluc3RhbmNlPFRQYXJhbWV0ZXJzLCBUUmVzdWx0Plxue1xuICAgIC8qKlxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBjb21wb25lbnQgcmVmIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlubmVyQ29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8TW9kYWxDb21wb25lbnRCYXNlPFRQYXJhbWV0ZXJzLCBUUmVzdWx0Pj47XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdHlwZSBvZiB0aGUgbW9kYWwgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHR5cGU6IFR5cGU8TW9kYWxDb21wb25lbnRCYXNlPFRQYXJhbWV0ZXJzLCBUUmVzdWx0Pj47XG5cbiAgICAvKipcbiAgICAgKiBSZXNvbHZlcyBhbmQgZmluaXNoIHN1Y2Nlc3NmdWxseSB0aGUgbW9kYWwgZGlhbG9nLlxuICAgICAqL1xuICAgIHJlc29sdmU6IE1vZGFsUmVzb2x2ZTxUUmVzdWx0PjtcblxuICAgIC8qKlxuICAgICAqIFJlamVjdHMgYW5kIGZpbmlzaCB1bnN1Y2Nlc3NmdWxseSB0aGUgbW9kYWwgZGlhbG9nLlxuICAgICAqL1xuICAgIHJlamVjdDogTW9kYWxSZWplY3Q7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjb21wb25lbnQgcmVmIGFzc29jaWF0ZWQgdG8gdGhlIG1vZGFsIGRpYWxvZy5cbiAgICAgKi9cbiAgICBnZXQgY29tcG9uZW50UmVmKCk6IENvbXBvbmVudFJlZjxNb2RhbENvbXBvbmVudEJhc2U8VFBhcmFtZXRlcnMsIFRSZXN1bHQ+PiB7IHJldHVybiB0aGlzLmlubmVyQ29tcG9uZW50UmVmOyB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIEBzZWUgTW9kYWxJbnN0YW5jZVxuICAgICAqIEBwYXJhbSB0eXBlIHRoZSBtb2RhbCBjb21wb25lbnQgdHlwZS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0eXBlOiBUeXBlPE1vZGFsQ29tcG9uZW50QmFzZTxUUGFyYW1ldGVycywgVFJlc3VsdD4+KVxuICAgIHtcbiAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb21wb25lbnQgcmVmIHJlZmVyZW5jZS5cbiAgICAgKiBAcGFyYW0gY29tcG9uZW50UmVmIHRoZSBjb21wb25lbnQgcmVmIG9iamVjdC5cbiAgICAgKi9cbiAgICBzZXRDb21wb25lbnRSZWYoY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8TW9kYWxDb21wb25lbnRCYXNlPFRQYXJhbWV0ZXJzLCBUUmVzdWx0Pj4pOiB2b2lkXG4gICAge1xuICAgICAgICB0aGlzLmlubmVyQ29tcG9uZW50UmVmID0gY29tcG9uZW50UmVmO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBNb2RhbFNlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlQmFzZVxue1xuICAgIC8qKlxuICAgICAqIEEgc3RhY2sgb2YgbW9kYWwgaW5zdGFuY2VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgbW9kYWxJbnN0YW5jZXM6IEFycmF5TGlzdDxNb2RhbEluc3RhbmNlPGFueSwgYW55Pj47XG5cbiAgICAvKipcbiAgICAgKiBBIHJlZmVyZW5jZSB0byB0aGUgdmlldyBjb250YWluZXIgcmVmIHRoYXQgd2lsbCBob2xkXG4gICAgICogYW5kIGNvbnRhaW4gdGhlIG1vZGFsIGNvbXBvbmVudHMuXG4gICAgICovXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiBAc2VlIE1vZGFsU2VydmljZVxuICAgICAqIEBwYXJhbSByZXNvbHZlciBhIHJlZmVyZW5jZSB0byB0aGUgY29tcG9uZW50IGZhY3RvcnkgcmVzb2x2ZXIsXG4gICAgICogQHBhcmFtIGluamVjdG9yIGEgcmVmZXJlbmNlIHRvIHRoZSBESSBpbmplY3RvciBjb250YWluZXJcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcilcbiAgICB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubW9kYWxJbnN0YW5jZXMgPSBuZXcgQXJyYXlMaXN0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmlldyBjb250YWluZXIgcmVmIHRoYXQgd2lsbCBob2xkIGFuZCBjb250YWluXG4gICAgICogdGhlIG1vZGFsIGNvbXBvbmVudHMuXG4gICAgICogQHBhcmFtIGNvbnRhaW5lciB0aGUgdmlldyBjb250YWluZXIgcmVmLlxuICAgICAqL1xuICAgIHNldFZpZXdDb250YWluZXIoY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmKTogdm9pZFxuICAgIHtcbiAgICAgICAgaWYgKE9iamVjdEV4dGVuc2lvbnMuaXNOdWxsKGNvbnRhaW5lcikpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGNvbnRhaW5lciBjYW4gbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN0YWNrIG9mIG1vZGFsIGluc3RhbmNlcy5cbiAgICAgKi9cbiAgICBnZXRNb2RhbEluc3RhbmNlcygpOiBBcnJheUxpc3Q8TW9kYWxJbnN0YW5jZTxhbnksIGFueT4+XG4gICAge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RhbEluc3RhbmNlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyBhIG1vZGFsIGRpYWxvZyBjb21wb25lbnQuXG4gICAgICogQHBhcmFtIHR5cGUgVGhlIG1vZGFsIGNvbXBvbmVudCB0eXBlLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIHRoZSBjcmVhdGlvbiBwYXJhbWV0ZXJzIHRvIHBhc3MgdG8gdGhlIG1vZGFsIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBvcGVuPFRQYXJhbWV0ZXJzLCBUUmVzdWx0Pih0eXBlOiBUeXBlPE1vZGFsQ29tcG9uZW50QmFzZTxUUGFyYW1ldGVycywgVFJlc3VsdD4+LCBwYXJhbWV0ZXJzPzogVFBhcmFtZXRlcnMpOiBQcm9taXNlPFRSZXN1bHQ+XG4gICAge1xuICAgICAgICAvLyBjcmVhdGUgbW9kYWwgaW5zdGFuY2UuXG4gICAgICAgIGNvbnN0IG1vZGFsSW5zdGFuY2UgPSBuZXcgTW9kYWxJbnN0YW5jZTxUUGFyYW1ldGVycywgVFJlc3VsdD4odHlwZSk7XG4gICAgICAgIHRoaXMubW9kYWxJbnN0YW5jZXMuYWRkKG1vZGFsSW5zdGFuY2UpO1xuXG4gICAgICAgIC8vIHNldHVwIHRoZSBtb2RhbCBwcm9taXNlLlxuICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2U8VFJlc3VsdD4oKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgbW9kYWxJbnN0YW5jZS5yZXNvbHZlID0gKHJlc3VsdD86IFRSZXN1bHQpID0+XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKG1vZGFsSW5zdGFuY2UpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1vZGFsSW5zdGFuY2UucmVqZWN0ID0gKHJlYXNvbj86IHN0cmluZykgPT5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZShtb2RhbEluc3RhbmNlKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIGNyZWF0ZSB0aGUgY29tcG9uZW50LlxuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0eXBlKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gZmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3Rvcik7XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgbW9kYWwgYW5kIGNvbXBvbmVudC5cbiAgICAgICAgbW9kYWxJbnN0YW5jZS5zZXRDb21wb25lbnRSZWYoY29tcG9uZW50UmVmKTtcbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnNldE1vZGFsU2VydmljZSh0aGlzKTtcbiAgICAgICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnNldE1vZGFsSW5zdGFuY2UobW9kYWxJbnN0YW5jZSk7XG4gICAgICAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5zZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgIC8vIGluc2VydCB2aWV3IG9uIHNjcmVlbi5cbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLmluc2VydChjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuXG4gICAgICAgIC8vIHJldHVybiB0aGUgcHJvbWlzZS5cbiAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyB0aGUgbW9kYWwgZnJvbSB0aGUgc3RhY2sgb2YgbW9kYWwgaW5zdGFuY2VzLlxuICAgICAqIEBwYXJhbSBtb2RhbEluc3RhbmNlIHRoZSBtb2RhbCB0aGF0IHdpbGwgYmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZTxUUGFyYW1ldGVycywgVFJlc3VsdD4obW9kYWxJbnN0YW5jZTogTW9kYWxJbnN0YW5jZTxUUGFyYW1ldGVycywgVFJlc3VsdD4pOiB2b2lkXG4gICAge1xuICAgICAgICB0aGlzLm1vZGFsSW5zdGFuY2VzLnJlbW92ZShtb2RhbEluc3RhbmNlKTtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLnJlbW92ZSh0aGlzLnZpZXdDb250YWluZXIuaW5kZXhPZihtb2RhbEluc3RhbmNlLmNvbXBvbmVudFJlZi5ob3N0VmlldykpO1xuICAgIH1cbn1cbiJdfQ==