ngx-manage
Version:
- angular class descriptor and state
448 lines • 25.1 kB
JavaScript
/**
* @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