UNPKG

ngx-manage

Version:

- angular class descriptor and state

448 lines 25.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import * as tslib_1 from "tslib"; import { Subject } from 'rxjs'; import 'reflect-metadata'; /** @type {?} */ var Injector = new /** @class */ (function () { function class_1() { this.hash = {}; } // resolving instances // resolving instances /** * @template T * @param {?} target * @return {?} */ class_1.prototype.resolveHash = // resolving instances /** * @template T * @param {?} target * @return {?} */ function (target) { if (this.hash[target.name]) { return this.hash[target.name]; } // tokens are required dependencies, while injections are resolved tokens from the Injector /** @type {?} */ var tokens = Reflect.getMetadata('design:paramtypes', target) || []; /** @type {?} */ var injections = tokens.map((/** * @param {?} token * @return {?} */ function (token) { return Injector.resolve(token); })); this.hash[target.name] = new (target.bind.apply(target, tslib_1.__spread([void 0], injections)))(); return this.hash[target.name]; }; /** * @template T * @param {?} target * @return {?} */ class_1.prototype.resolve = /** * @template T * @param {?} target * @return {?} */ function (target) { // tokens are required dependencies, while injections are resolved tokens from the Injector /** @type {?} */ var tokens = Reflect.getMetadata('design:paramtypes', target) || []; /** @type {?} */ var injections = tokens.map((/** * @param {?} token * @return {?} */ function (token) { return Injector.resolve(token); })); return new (target.bind.apply(target, tslib_1.__spread([void 0], injections)))(); }; return class_1; }()); var StateMessage = /** @class */ (function () { function StateMessage(name, state, msg) { this.name = name; this.state = state; this.msg = msg; } return StateMessage; }()); export { StateMessage }; if (false) { /** @type {?} */ StateMessage.prototype.name; /** @type {?} */ StateMessage.prototype.state; /** @type {?} */ StateMessage.prototype.msg; } /** * @record */ function IStateMessageService() { } if (false) { /** * @param {?} name * @param {?} message * @param {?} state * @return {?} */ IStateMessageService.prototype.SendMessage = function (name, message, state) { }; } var StateMessageService = /** @class */ (function () { function StateMessageService() { } /** * @param {?} name * @param {?} message * @param {?} state * @return {?} */ StateMessageService.prototype.SendMessage = /** * @param {?} name * @param {?} message * @param {?} state * @return {?} */ function (name, message, state) { return tslib_1.__awaiter(this, void 0, void 0, function () { var msg; return tslib_1.__generator(this, function (_a) { msg = {}; state.sendMessage(name, msg); return [2 /*return*/]; }); }); }; return StateMessageService; }()); export { StateMessageService }; /** * @record */ export function IStateService() { } if (false) { /** * @param {?} name * @param {?} cb * @return {?} */ IStateService.prototype.getState = function (name, cb) { }; /** * @param {?} name * @param {?} message * @return {?} */ IStateService.prototype.sendMessage = function (name, message) { }; /** * @param {?} set * @return {?} */ IStateService.prototype.getStates = function (set) { }; /** * @param {?} name * @param {?} id * @return {?} */ IStateService.prototype.read = function (name, id) { }; /** * @param {?} name * @param {?} id * @param {?} data * @param {?} cache * @return {?} */ IStateService.prototype.write = function (name, id, data, cache) { }; } var StateService = /** @class */ (function () { function StateService() { this.version = '1.0.2'; this.subjects = {}; this.state = {}; } /** * @private * @param {?} name * @return {?} */ StateService.prototype.init = /** * @private * @param {?} name * @return {?} */ function (name) { if (!this.subjects[name]) { this.state = {}; this.subjects[name] = new Subject(); } return this.subjects[name]; }; /** * @param {?} name * @param {?} cb * @return {?} */ StateService.prototype.getState = /** * @param {?} name * @param {?} cb * @return {?} */ function (name, cb) { return this.init(name).asObservable().subscribe((/** * @param {?} msg * @return {?} */ function (msg) { return cb(msg); })); }; /** * @param {?} set * @return {?} */ StateService.prototype.getStates = /** * @param {?} set * @return {?} */ function (set) { /** @type {?} */ var subscribtion = []; for (var s in set) { subscribtion.push(this.init(s).asObservable().subscribe((/** * @param {?} msg * @return {?} */ function (msg) { /** @type {?} */ var fn = set[msg.name] || set[s]; fn(msg); }))); } return subscribtion; }; /** * @param {?} name * @param {?} message * @return {?} */ StateService.prototype.sendMessage = /** * @param {?} name * @param {?} message * @return {?} */ function (name, message) { /** @type {?} */ var a = this.init(name); a.next({ msg: message, name: name }); }; /** * @param {?} name * @param {?} id * @return {?} */ StateService.prototype.read = /** * @param {?} name * @param {?} id * @return {?} */ function (name, id) { /** @type {?} */ var d = this.state[name] || {}; /** @type {?} */ var i = d[id]; if (i) return i; /** @type {?} */ var data = localStorage.getItem(this.version + '_' + name + '_' + id); /** @type {?} */ var cacheData = JSON.parse(data); if (cacheData) { this.state[name] = this.state[name] || {}; this.state[name][id] = cacheData; this.write(name, id, cacheData, true); return this.state[name][id]; } }; /** * @param {?} name * @param {?} id * @param {?} data * @param {?=} cache * @return {?} */ StateService.prototype.write = /** * @param {?} name * @param {?} id * @param {?} data * @param {?=} cache * @return {?} */ function (name, id, data, cache) { if (cache === void 0) { cache = false; } if (!this.state[name]) this.state[name] = {}; if (this.state[name]) { this.state[name][id] = data; } if (!cache) { /** @type {?} */ var c = JSON.stringify(data); localStorage.setItem(this.version + '_' + name + '_' + id, c); } }; return StateService; }()); if (false) { /** * @type {?} * @private */ StateService.prototype.version; /** * @type {?} * @private */ StateService.prototype.subjects; /** * @type {?} * @private */ StateService.prototype.state; } /** * @param {?} config * @return {?} */ export function StateDecorator(config) { return (/** * @template T * @param {?} constr * @return {?} */ function _DecoratorName(constr) { /** @type {?} */ var service; /** @type {?} */ var state = Injector.resolveHash(StateService); if (config.service) { /** @type {?} */ var i = config.service; if (i.static) service = Injector.resolveHash(i.def); else service = Injector.resolve(i.def); } return /** @class */ (function (_super) { tslib_1.__extends(class_2, _super); function class_2() { var _this = _super !== null && _super.apply(this, arguments) || this; _this.message = service; _this.subscribtion = []; return _this; } /** * @param {?} set * @return {?} */ class_2.prototype.getStates = /** * @param {?} set * @return {?} */ function (set) { this.subscribtion = state.getStates(set); }; /** * @param {?} name * @param {?} cb * @return {?} */ class_2.prototype.getState = /** * @param {?} name * @param {?} cb * @return {?} */ function (name, cb) { this.subscribtion.push(state.getState(name, cb)); }; /** * @param {?} name * @param {?} message * @return {?} */ class_2.prototype.sendMessage = /** * @param {?} name * @param {?} message * @return {?} */ function (name, message) { if (this.message) { this.message.SendMessage(name, message, state); } }; /** * @return {?} */ class_2.prototype.ngOnDestroy = /** * @return {?} */ function () { this.subscribtion.forEach((/** * @param {?} e * @return {?} */ function (e) { return e.unsubscribe(); })); }; return class_2; }(constr)); }); } var StateBase = /** @class */ (function () { function StateBase() { } /** * @param {?} name * @param {?} cb * @return {?} */ StateBase.prototype.getState = /** * @param {?} name * @param {?} cb * @return {?} */ function (name, cb) { }; ; /** * @param {?} name * @param {?} message * @return {?} */ StateBase.prototype.sendMessage = /** * @param {?} name * @param {?} message * @return {?} */ function (name, message) { }; /** * @return {?} */ StateBase.prototype.ngOnDestroy = /** * @return {?} */ function () { }; /** * @param {?} set * @return {?} */ StateBase.prototype.getStates = /** * @param {?} set * @return {?} */ function (set) { }; ; return StateBase; }()); export { StateBase }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tYW5hZ2UvIiwic291cmNlcyI6WyJsaWIvYmFzZS9zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFHLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLGtCQUFrQixDQUFBOztJQUduQixRQUFRLEdBQUc7SUFBSTtRQUNuQixTQUFJLEdBQU8sRUFBRSxDQUFDO0lBbUJoQixDQUFDO0lBbEJDLHNCQUFzQjs7Ozs7OztJQUN0Qiw2QkFBVzs7Ozs7OztJQUFYLFVBQWUsTUFBaUI7UUFDOUIsSUFBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFDekI7WUFDRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9COzs7WUFFRyxNQUFNLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFOztZQUMvRCxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUc7Ozs7UUFBQyxVQUFBLEtBQUssSUFBSSxPQUFBLFFBQVEsQ0FBQyxPQUFPLENBQU0sS0FBSyxDQUFDLEVBQTVCLENBQTRCLEVBQUM7UUFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQU8sTUFBTSxZQUFOLE1BQU0sNkJBQUksVUFBVSxLQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7Ozs7SUFDRCx5QkFBTzs7Ozs7SUFBUCxVQUFXLE1BQWlCOzs7WUFFdEIsTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTs7WUFDL0QsVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFH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LEVBQUMsRUFBVztnQkFFOUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRCxDQUFDOzs7Ozs7WUFDRCw2QkFBVzs7Ozs7WUFBWCxVQUFZLElBQVcsRUFBQyxPQUFZO2dCQUNsQyxJQUFHLElBQUksQ0FBQyxPQUFPLEVBQ2Y7b0JBQ0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFDLE9BQU8sRUFBQyxLQUFLLENBQUMsQ0FBQztpQkFDOUM7WUFDSCxDQUFDOzs7O1lBQ0QsNkJBQVc7OztZQUFYO2dCQUVFLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTzs7OztnQkFBQyxVQUFDLENBQUMsSUFBRyxPQUFBLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBZixDQUFlLEVBQUMsQ0FBQztZQUNsRCxDQUFDO1lBQ0gsY0FBQztRQUFELENBQUMsQUFyQk0sQ0FBYyxNQUFNLEdBcUIxQjtJQUNILENBQUMsRUFBQTtBQUNILENBQUM7QUFHRDtJQUNFO0lBQWdCLENBQUM7Ozs7OztJQUNqQiw0QkFBUTs7Ozs7SUFBUixVQUFTLElBQVcsRUFBQyxFQUFXLElBQUUsQ0FBQztJQUFBLENBQUM7Ozs7OztJQUNwQywrQkFBVzs7Ozs7SUFBWCxVQUFZLElBQVcsRUFBQyxPQUFZLElBQUUsQ0FBQzs7OztJQUN2QywrQkFBVzs7O0lBQVgsY0FBYyxDQUFDOzs7OztJQUNmLDZCQUFTOzs7O0lBQVQsVUFBVSxHQUFHLElBQUUsQ0FBQztJQUFBLENBQUM7SUFDbkIsZ0JBQUM7QUFBRCxDQUFDLEFBTkQsSUFNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ICBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnXG5pbXBvcnQgeyBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuY29uc3QgSW5qZWN0b3IgPSBuZXcgY2xhc3Mge1xuICBoYXNoOmFueSA9IHt9O1xuICAvLyByZXNvbHZpbmcgaW5zdGFuY2VzXG4gIHJlc29sdmVIYXNoPFQ+KHRhcmdldDogVHlwZTxhbnk+KTogVCB7XG4gICAgaWYodGhpcy5oYXNoW3RhcmdldC5uYW1lXSlcbiAgICB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNoW3RhcmdldC5uYW1lXTtcbiAgICB9XG4gICAgLy8gdG9rZW5zIGFyZSByZXF1aXJlZCBkZXBlbmRlbmNpZXMsIHdoaWxlIGluamVjdGlvbnMgYXJlIHJlc29sdmVkIHRva2VucyBmcm9tIHRoZSBJbmplY3RvclxuICAgIGxldCB0b2tlbnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhKCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCkgfHwgW10sXG4gICAgICAgIGluamVjdGlvbnMgPSB0b2tlbnMubWFwKHRva2VuID0+IEluamVjdG9yLnJlc29sdmU8YW55Pih0b2tlbikpO1xuICAgIHRoaXMuaGFzaFt0YXJnZXQubmFtZV0gPSBuZXcgdGFyZ2V0KC4uLmluamVjdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLmhhc2hbdGFyZ2V0Lm5hbWVdO1xuICB9XG4gIHJlc29sdmU8VD4odGFyZ2V0OiBUeXBlPGFueT4pOiBUIHtcbiAgICAvLyB0b2tlbnMgYXJlIHJlcXVpcmVkIGRlcGVuZGVuY2llcywgd2hpbGUgaW5qZWN0aW9ucyBhcmUgcmVzb2x2ZWQgdG9rZW5zIGZyb20gdGhlIEluamVjdG9yXG4gICAgbGV0IHRva2VucyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGEoJ2Rlc2lnbjpwYXJhbXR5cGVzJywgdGFyZ2V0KSB8fCBbXSxcbiAgICAgICAgaW5qZWN0aW9ucyA9IHRva2Vucy5tYXAodG9rZW4gPT4gSW5qZWN0b3IucmVzb2x2ZTxhbnk+KHRva2VuKSk7XG4gICAgcmV0dXJuIG5ldyB0YXJnZXQoLi4uaW5qZWN0aW9ucyk7XG4gIH1cbn07XG5cblxuZXhwb3J0IGNsYXNzIFN0YXRlTWVzc2FnZVxue1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgbmFtZTpzdHJpbmcsXG4gICAgcHVibGljIHN0YXRlOmFueSxcbiAgICBwdWJsaWMgbXNnOmFueVxuICApe31cbn1cbmludGVyZmFjZSBJU3RhdGVNZXNzYWdlU2VydmljZVxue1xuICBTZW5kTWVzc2FnZShuYW1lOnN0cmluZyxtZXNzYWdlOiBhbnksc3RhdGU6SVN0YXRlU2VydmljZSk6UHJvbWlzZTxhbnk+O1xufVxuXG5leHBvcnQgY2xhc3MgU3RhdGVNZXNzYWdlU2VydmljZSBpbXBsZW1lbnRzIElTdGF0ZU1lc3NhZ2VTZXJ2aWNlXG57XG4gIGFzeW5jIFNlbmRNZXNzYWdlKG5hbWU6c3RyaW5nLG1lc3NhZ2U6IGFueSxzdGF0ZTpJU3RhdGVTZXJ2aWNlKTpQcm9taXNlPGFueT5cbiAge1xuICAgIHZhciBtc2cgPSB7fTtcbiAgICBzdGF0ZS5zZW5kTWVzc2FnZShuYW1lLG1zZyk7XG4gICAgcmV0dXJuO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN0YXRlU2VydmljZVxue1xuICBnZXRTdGF0ZShuYW1lOnN0cmluZyxjYjpGdW5jdGlvbik7Ly86T2JzZXJ2YWJsZTxhbnk+XG4gIHNlbmRNZXNzYWdlKG5hbWU6c3RyaW5nLG1lc3NhZ2U6IGFueSk7XG4gIGdldFN0YXRlcyhzZXQpO1xuICByZWFkKG5hbWU6c3RyaW5nLGlkOm51bWJlcik6YW55O1xuICB3cml0ZShuYW1lOnN0cmluZyxpZDpudW1iZXIsZGF0YTphbnksY2FjaGU6Qm9vbGVhbik7XG59XG5cbmNsYXNzIFN0YXRlU2VydmljZSBpbXBsZW1lbnRzIElTdGF0ZVNlcnZpY2VcbntcbiAgcHJpdmF0ZSB2ZXJzaW9uOnN0cmluZyAgPSAnMS4wLjInO1xuICBwcml2YXRlIHN1YmplY3RzID0ge307XG4gIHByaXZhdGUgc3RhdGUgPSB7fTtcbiAgY29uc3RydWN0b3IoKVxuICB7XG4gIH1cbiAgcHJpdmF0ZSBpbml0KG5hbWU6c3RyaW5nKTpTdWJqZWN0PGFueT5cbiAge1xuICAgIGlmKCF0aGlzLnN1YmplY3RzW25hbWVdKVxuICAgIHtcbiAgICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICAgIHRoaXMuc3ViamVjdHNbbmFtZV0gPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN1YmplY3RzW25hbWVdO1xuICB9XG4gIGdldFN0YXRlKG5hbWU6c3RyaW5nLGNiOkZ1bmN0aW9uKXtcbiAgICByZXR1cm4gdGhpcy5pbml0KG5hbWUpLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgobXNnKT0+Y2IobXNnKSk7XG4gIH1cbiAgZ2V0U3RhdGVzKHNldCl7XG4gICAgdmFyIHN1YnNjcmlidGlvbjphbnlbXSA9IFtdO1xuICAgIGZvcih2YXIgcyBpbiAgc2V0KVxuICAgIHtcbiAgICAgIHN1YnNjcmlidGlvbi5wdXNoKFxuICAgICAgICB0aGlzLmluaXQocykuYXNPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKChtc2cpPT57XG4gICAgICAgICAgY29uc3QgZm4gPSBzZXRbbXNnLm5hbWVdIHx8IHNldFtzXTtcbiAgICAgICAgICBmbihtc2cpXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic2NyaWJ0aW9uO1xuICB9XG4gIHNlbmRNZXNzYWdlKG5hbWU6c3RyaW5nLG1lc3NhZ2U6IGFueSl7XG4gICAgdmFyIGEgPSB0aGlzLmluaXQobmFtZSk7XG4gICAgYS5uZXh0KHsgbXNnIDogbWVzc2FnZSxuYW1lOm5hbWUgfSk7XG4gIH0gIFxuICByZWFkKG5hbWU6c3RyaW5nLGlkOm51bWJlcik6YW55XG4gIHtcbiAgICBjb25zdCBkID0gdGhpcy5zdGF0ZVtuYW1lXSB8fCB7fTtcbiAgICBjb25zdCBpID0gZFtpZF07XG4gICAgaWYoaSkgcmV0dXJuIGk7XG5cbiAgICB2YXIgZGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMudmVyc2lvbisnXycrbmFtZSsnXycraWQpO1xuICAgIHZhciBjYWNoZURhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgIGlmKGNhY2hlRGF0YSlcbiAgICB7XG4gICAgICB0aGlzLnN0YXRlW25hbWVdID0gdGhpcy5zdGF0ZVtuYW1lXSB8fCB7fTtcbiAgICAgIHRoaXMuc3RhdGVbbmFtZV1baWRdID0gY2FjaGVEYXRhO1xuICAgICAgdGhpcy53cml0ZShuYW1lLGlkLGNhY2hlRGF0YSx0cnVlKTtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlW25hbWVdW2lkXTtcbiAgICB9XG4gIH1cbiAgd3JpdGUobmFtZTpzdHJpbmcsaWQ6bnVtYmVyLGRhdGE6YW55LGNhY2hlOkJvb2xlYW4gPSBmYWxzZSlcbiAge1xuICAgIGlmKCF0aGlzLnN0YXRlW25hbWVdKSB0aGlzLnN0YXRlW25hbWVdID0ge307XG4gICAgaWYodGhpcy5zdGF0ZVtuYW1lXSlcbiAgICB7XG4gICAgICB0aGlzLnN0YXRlW25hbWVdW2lkXSA9IGRhdGE7XG4gICAgfVxuICAgIGlmKCFjYWNoZSlcbiAgICB7XG4gICAgICB2YXIgYyA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy52ZXJzaW9uKydfJytuYW1lKydfJytpZCwgYyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTdGF0ZURlY29yYXRvcihjb25maWc6YW55KSB7XG4gIHJldHVybiBmdW5jdGlvbiBfRGVjb3JhdG9yTmFtZTxUIGV4dGVuZHMge25ldyguLi5hcmdzOiBhbnlbXSk6IHt9fT4oY29uc3RyOiBUKXtcbiAgICB2YXIgc2VydmljZTpJU3RhdGVNZXNzYWdlU2VydmljZTtcbiAgICB2YXIgc3RhdGUgOiBTdGF0ZVNlcnZpY2UgPSBJbmplY3Rvci5yZXNvbHZlSGFzaDxTdGF0ZVNlcnZpY2U+KFN0YXRlU2VydmljZSk7XG4gICAgaWYoY29uZmlnLnNlcnZpY2UpXG4gICAge1xuICAgICAgdmFyIGkgPSBjb25maWcuc2VydmljZTtcbiAgICAgIGlmKGkuc3RhdGljKVxuICAgICAgICBzZXJ2aWNlID0gSW5qZWN0b3IucmVzb2x2ZUhhc2g8dHlwZW9mIGkuZGVmPihpLmRlZik7XG4gICAgICBlbHNlXG4gICAgICAgIHNlcnZpY2UgPSBJbmplY3Rvci5yZXNvbHZlPHR5cGVvZiBpLmRlZj4oaS5kZWYpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBjb25zdHIge1xuICAgICAgbWVzc2FnZTpJU3RhdGVNZXNzYWdlU2VydmljZSA9IHNlcnZpY2U7XG4gICAgICBzdWJzY3JpYnRpb246YW55W10gPSBbXTtcbiAgICAgIGdldFN0YXRlcyhzZXQpXG4gICAgICB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJ0aW9uID0gc3RhdGUuZ2V0U3RhdGVzKHNldCk7XG4gICAgICB9XG4gICAgICBnZXRTdGF0ZShuYW1lOnN0cmluZyxjYjpGdW5jdGlvbilcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYnRpb24ucHVzaChzdGF0ZS5nZXRTdGF0ZShuYW1lLGNiKSk7XG4gICAgICB9XG4gICAgICBzZW5kTWVzc2FnZShuYW1lOnN0cmluZyxtZXNzYWdlOiBhbnkpe1xuICAgICAgICBpZih0aGlzLm1lc3NhZ2UpXG4gICAgICAgIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2UuU2VuZE1lc3NhZ2UobmFtZSxtZXNzYWdlLHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbmdPbkRlc3Ryb3koKVxuICAgICAge1xuICAgICAgICB0aGlzLnN1YnNjcmlidGlvbi5mb3JFYWNoKChlKT0+ZS51bnN1YnNjcmliZSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuXG5leHBvcnQgY2xhc3MgU3RhdGVCYXNlIGltcGxlbWVudHMgT25EZXN0cm95e1xuICBjb25zdHJ1Y3RvcigpIHsgfVxuICBnZXRTdGF0ZShuYW1lOnN0cmluZyxjYjpGdW5jdGlvbil7fTtcbiAgc2VuZE1lc3NhZ2UobmFtZTpzdHJpbmcsbWVzc2FnZTogYW55KXt9XG4gIG5nT25EZXN0cm95KCl7fVxuICBnZXRTdGF0ZXMoc2V0KXt9O1xufVxuIl19