UNPKG

ngx-manage

Version:

- angular class descriptor and state

352 lines 21.7 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 {?} */ const Injector = new class { constructor() { this.hash = {}; } // resolving instances /** * @template T * @param {?} target * @return {?} */ resolveHash(target) { if (this.hash[target.name]) { return this.hash[target.name]; } // tokens are required dependencies, while injections are resolved tokens from the Injector /** @type {?} */ let tokens = Reflect.getMetadata('design:paramtypes', target) || []; /** @type {?} */ let injections = tokens.map((/** * @param {?} token * @return {?} */ token => Injector.resolve(token))); this.hash[target.name] = new target(...injections); return this.hash[target.name]; } /** * @template T * @param {?} target * @return {?} */ resolve(target) { // tokens are required dependencies, while injections are resolved tokens from the Injector /** @type {?} */ let tokens = Reflect.getMetadata('design:paramtypes', target) || []; /** @type {?} */ let injections = tokens.map((/** * @param {?} token * @return {?} */ token => Injector.resolve(token))); return new target(...injections); } }; export class StateMessage { /** * @param {?} name * @param {?} state * @param {?} msg */ constructor(name, state, msg) { this.name = name; this.state = state; this.msg = msg; } } 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) { }; } export class StateMessageService { /** * @param {?} name * @param {?} message * @param {?} state * @return {?} */ SendMessage(name, message, state) { return tslib_1.__awaiter(this, void 0, void 0, function* () { /** @type {?} */ var msg = {}; state.sendMessage(name, msg); return; }); } } /** * @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) { }; } class StateService { constructor() { this.version = '1.0.2'; this.subjects = {}; this.state = {}; } /** * @private * @param {?} name * @return {?} */ init(name) { if (!this.subjects[name]) { this.state = {}; this.subjects[name] = new Subject(); } return this.subjects[name]; } /** * @param {?} name * @param {?} cb * @return {?} */ getState(name, cb) { return this.init(name).asObservable().subscribe((/** * @param {?} msg * @return {?} */ (msg) => cb(msg))); } /** * @param {?} set * @return {?} */ getStates(set) { /** @type {?} */ var subscribtion = []; for (var s in set) { subscribtion.push(this.init(s).asObservable().subscribe((/** * @param {?} msg * @return {?} */ (msg) => { /** @type {?} */ const fn = set[msg.name] || set[s]; fn(msg); }))); } return subscribtion; } /** * @param {?} name * @param {?} message * @return {?} */ sendMessage(name, message) { /** @type {?} */ var a = this.init(name); a.next({ msg: message, name: name }); } /** * @param {?} name * @param {?} id * @return {?} */ read(name, id) { /** @type {?} */ const d = this.state[name] || {}; /** @type {?} */ const 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 {?} */ write(name, id, data, 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); } } } 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 extends constr { constructor() { super(...arguments); this.message = service; this.subscribtion = []; } /** * @param {?} set * @return {?} */ getStates(set) { this.subscribtion = state.getStates(set); } /** * @param {?} name * @param {?} cb * @return {?} */ getState(name, cb) { this.subscribtion.push(state.getState(name, cb)); } /** * @param {?} name * @param {?} message * @return {?} */ sendMessage(name, message) { if (this.message) { this.message.SendMessage(name, message, state); } } /** * @return {?} */ ngOnDestroy() { this.subscribtion.forEach((/** * @param {?} e * @return {?} */ (e) => e.unsubscribe())); } }; }); } export class StateBase { constructor() { } /** * @param {?} name * @param {?} cb * @return {?} */ getState(name, cb) { } ; /** * @param {?} name * @param {?} message * @return {?} */ sendMessage(name, message) { } /** * @return {?} */ ngOnDestroy() { } /** * @param {?} set * @return {?} */ getStates(set) { } ; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25neC1tYW5hZ2UvIiwic291cmNlcyI6WyJsaWIvYmFzZS9zdGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFHLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVoQyxPQUFPLGtCQUFrQixDQUFBOztNQUduQixRQUFRLEdBQUcsSUFBSTtJQUFBO1FBQ25CLFNBQUksR0FBTyxFQUFFLENBQUM7SUFtQmhCLENBQUM7Ozs7Ozs7SUFqQkMsV0FBVyxDQUFJLE1BQWlCO1FBQzlCLElBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQ3pCO1lBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjs7O1lBRUcsTUFBTSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTs7WUFDL0QsVUFBVSxHQUFHLE1BQU0sQ0FBQyxHQUFHOzs7O1FBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFNLEtBQUssQ0FBQyxFQUFDO1FBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFDbkQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxDQUFDOzs7Ozs7SUFDRCxPQUFPLENBQUksTUFBaUI7OztZQUV0QixNQUFNLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFOztZQUMvRCxVQUFVLEdBQUcsTUFBTSxDQUFDLEdBQUc7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFP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LENBQUMsQ0FBQztpQkFDOUM7WUFDSCxDQUFDOzs7O1lBQ0QsV0FBVztnQkFFVCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU87Ozs7Z0JBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFBLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBQyxDQUFDO1lBQ2xELENBQUM7U0FDRixDQUFBO0lBQ0gsQ0FBQyxFQUFBO0FBQ0gsQ0FBQztBQUdELE1BQU0sT0FBTyxTQUFTO0lBQ3BCLGdCQUFnQixDQUFDOzs7Ozs7SUFDakIsUUFBUSxDQUFDLElBQVcsRUFBQyxFQUFXLElBQUUsQ0FBQztJQUFBLENBQUM7Ozs7OztJQUNwQyxXQUFXLENBQUMsSUFBVyxFQUFDLE9BQVksSUFBRSxDQUFDOzs7O0lBQ3ZDLFdBQVcsS0FBRyxDQUFDOzs7OztJQUNmLFNBQVMsQ0FBQyxHQUFHLElBQUUsQ0FBQztJQUFBLENBQUM7Q0FDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyAgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICdyZWZsZWN0LW1ldGFkYXRhJ1xuaW1wb3J0IHsgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmNvbnN0IEluamVjdG9yID0gbmV3IGNsYXNzIHtcbiAgaGFzaDphbnkgPSB7fTtcbiAgLy8gcmVzb2x2aW5nIGluc3RhbmNlc1xuICByZXNvbHZlSGFzaDxUPih0YXJnZXQ6IFR5cGU8YW55Pik6IFQge1xuICAgIGlmKHRoaXMuaGFzaFt0YXJnZXQubmFtZV0pXG4gICAge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzaFt0YXJnZXQubmFtZV07XG4gICAgfVxuICAgIC8vIHRva2VucyBhcmUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzLCB3aGlsZSBpbmplY3Rpb25zIGFyZSByZXNvbHZlZCB0b2tlbnMgZnJvbSB0aGUgSW5qZWN0b3JcbiAgICBsZXQgdG9rZW5zID0gUmVmbGVjdC5nZXRNZXRhZGF0YSgnZGVzaWduOnBhcmFtdHlwZXMnLCB0YXJnZXQpIHx8IFtdLFxuICAgICAgICBpbmplY3Rpb25zID0gdG9rZW5zLm1hcCh0b2tlbiA9PiBJbmplY3Rvci5yZXNvbHZlPGFueT4odG9rZW4pKTtcbiAgICB0aGlzLmhhc2hbdGFyZ2V0Lm5hbWVdID0gbmV3IHRhcmdldCguLi5pbmplY3Rpb25zKTtcbiAgICByZXR1cm4gdGhpcy5oYXNoW3RhcmdldC5uYW1lXTtcbiAgfVxuICByZXNvbHZlPFQ+KHRhcmdldDogVHlwZTxhbnk+KTogVCB7XG4gICAgLy8gdG9rZW5zIGFyZSByZXF1aXJlZCBkZXBlbmRlbmNpZXMsIHdoaWxlIGluamVjdGlvbnMgYXJlIHJlc29sdmVkIHRva2VucyBmcm9tIHRoZSBJbmplY3RvclxuICAgIGxldCB0b2tlbnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhKCdkZXNpZ246cGFyYW10eXBlcycsIHRhcmdldCkgfHwgW10sXG4gICAgICAgIGluamVjdGlvbnMgPSB0b2tlbnMubWFwKHRva2VuID0+IEluamVjdG9yLnJlc29sdmU8YW55Pih0b2tlbikpO1xuICAgIHJldHVybiBuZXcgdGFyZ2V0KC4uLmluamVjdGlvbnMpO1xuICB9XG59O1xuXG5cbmV4cG9ydCBjbGFzcyBTdGF0ZU1lc3NhZ2VcbntcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIG5hbWU6c3RyaW5nLFxuICAgIHB1YmxpYyBzdGF0ZTphbnksXG4gICAgcHVibGljIG1zZzphbnlcbiAgKXt9XG59XG5pbnRlcmZhY2UgSVN0YXRlTWVzc2FnZVNlcnZpY2VcbntcbiAgU2VuZE1lc3NhZ2UobmFtZTpzdHJpbmcsbWVzc2FnZTogYW55LHN0YXRlOklTdGF0ZVNlcnZpY2UpOlByb21pc2U8YW55Pjtcbn1cblxuZXhwb3J0IGNsYXNzIFN0YXRlTWVzc2FnZVNlcnZpY2UgaW1wbGVtZW50cyBJU3RhdGVNZXNzYWdlU2VydmljZVxue1xuICBhc3luYyBTZW5kTWVzc2FnZShuYW1lOnN0cmluZyxtZXNzYWdlOiBhbnksc3RhdGU6SVN0YXRlU2VydmljZSk6UHJvbWlzZTxhbnk+XG4gIHtcbiAgICB2YXIgbXNnID0ge307XG4gICAgc3RhdGUuc2VuZE1lc3NhZ2UobmFtZSxtc2cpO1xuICAgIHJldHVybjtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTdGF0ZVNlcnZpY2VcbntcbiAgZ2V0U3RhdGUobmFtZTpzdHJpbmcsY2I6RnVuY3Rpb24pOy8vOk9ic2VydmFibGU8YW55PlxuICBzZW5kTWVzc2FnZShuYW1lOnN0cmluZyxtZXNzYWdlOiBhbnkpO1xuICBnZXRTdGF0ZXMoc2V0KTtcbiAgcmVhZChuYW1lOnN0cmluZyxpZDpudW1iZXIpOmFueTtcbiAgd3JpdGUobmFtZTpzdHJpbmcsaWQ6bnVtYmVyLGRhdGE6YW55LGNhY2hlOkJvb2xlYW4pO1xufVxuXG5jbGFzcyBTdGF0ZVNlcnZpY2UgaW1wbGVtZW50cyBJU3RhdGVTZXJ2aWNlXG57XG4gIHByaXZhdGUgdmVyc2lvbjpzdHJpbmcgID0gJzEuMC4yJztcbiAgcHJpdmF0ZSBzdWJqZWN0cyA9IHt9O1xuICBwcml2YXRlIHN0YXRlID0ge307XG4gIGNvbnN0cnVjdG9yKClcbiAge1xuICB9XG4gIHByaXZhdGUgaW5pdChuYW1lOnN0cmluZyk6U3ViamVjdDxhbnk+XG4gIHtcbiAgICBpZighdGhpcy5zdWJqZWN0c1tuYW1lXSlcbiAgICB7XG4gICAgICB0aGlzLnN0YXRlID0ge307XG4gICAgICB0aGlzLnN1YmplY3RzW25hbWVdID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdWJqZWN0c1tuYW1lXTtcbiAgfVxuICBnZXRTdGF0ZShuYW1lOnN0cmluZyxjYjpGdW5jdGlvbil7XG4gICAgcmV0dXJuIHRoaXMuaW5pdChuYW1lKS5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKG1zZyk9PmNiKG1zZykpO1xuICB9XG4gIGdldFN0YXRlcyhzZXQpe1xuICAgIHZhciBzdWJzY3JpYnRpb246YW55W10gPSBbXTtcbiAgICBmb3IodmFyIHMgaW4gIHNldClcbiAgICB7XG4gICAgICBzdWJzY3JpYnRpb24ucHVzaChcbiAgICAgICAgdGhpcy5pbml0KHMpLmFzT2JzZXJ2YWJsZSgpLnN1YnNjcmliZSgobXNnKT0+e1xuICAgICAgICAgIGNvbnN0IGZuID0gc2V0W21zZy5uYW1lXSB8fCBzZXRbc107XG4gICAgICAgICAgZm4obXNnKVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1YnNjcmlidGlvbjtcbiAgfVxuICBzZW5kTWVzc2FnZShuYW1lOnN0cmluZyxtZXNzYWdlOiBhbnkpe1xuICAgIHZhciBhID0gdGhpcy5pbml0KG5hbWUpO1xuICAgIGEubmV4dCh7IG1zZyA6IG1lc3NhZ2UsbmFtZTpuYW1lIH0pO1xuICB9ICBcbiAgcmVhZChuYW1lOnN0cmluZyxpZDpudW1iZXIpOmFueVxuICB7XG4gICAgY29uc3QgZCA9IHRoaXMuc3RhdGVbbmFtZV0gfHwge307XG4gICAgY29uc3QgaSA9IGRbaWRdO1xuICAgIGlmKGkpIHJldHVybiBpO1xuXG4gICAgdmFyIGRhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnZlcnNpb24rJ18nK25hbWUrJ18nK2lkKTtcbiAgICB2YXIgY2FjaGVEYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICBpZihjYWNoZURhdGEpXG4gICAge1xuICAgICAgdGhpcy5zdGF0ZVtuYW1lXSA9IHRoaXMuc3RhdGVbbmFtZV0gfHwge307XG4gICAgICB0aGlzLnN0YXRlW25hbWVdW2lkXSA9IGNhY2hlRGF0YTtcbiAgICAgIHRoaXMud3JpdGUobmFtZSxpZCxjYWNoZURhdGEsdHJ1ZSk7XG4gICAgICByZXR1cm4gdGhpcy5zdGF0ZVtuYW1lXVtpZF07XG4gICAgfVxuICB9XG4gIHdyaXRlKG5hbWU6c3RyaW5nLGlkOm51bWJlcixkYXRhOmFueSxjYWNoZTpCb29sZWFuID0gZmFsc2UpXG4gIHtcbiAgICBpZighdGhpcy5zdGF0ZVtuYW1lXSkgdGhpcy5zdGF0ZVtuYW1lXSA9IHt9O1xuICAgIGlmKHRoaXMuc3RhdGVbbmFtZV0pXG4gICAge1xuICAgICAgdGhpcy5zdGF0ZVtuYW1lXVtpZF0gPSBkYXRhO1xuICAgIH1cbiAgICBpZighY2FjaGUpXG4gICAge1xuICAgICAgdmFyIGMgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMudmVyc2lvbisnXycrbmFtZSsnXycraWQsIGMpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU3RhdGVEZWNvcmF0b3IoY29uZmlnOmFueSkge1xuICByZXR1cm4gZnVuY3Rpb24gX0RlY29yYXRvck5hbWU8VCBleHRlbmRzIHtuZXcoLi4uYXJnczogYW55W10pOiB7fX0+KGNvbnN0cjogVCl7XG4gICAgdmFyIHNlcnZpY2U6SVN0YXRlTWVzc2FnZVNlcnZpY2U7XG4gICAgdmFyIHN0YXRlIDogU3RhdGVTZXJ2aWNlID0gSW5qZWN0b3IucmVzb2x2ZUhhc2g8U3RhdGVTZXJ2aWNlPihTdGF0ZVNlcnZpY2UpO1xuICAgIGlmKGNvbmZpZy5zZXJ2aWNlKVxuICAgIHtcbiAgICAgIHZhciBpID0gY29uZmlnLnNlcnZpY2U7XG4gICAgICBpZihpLnN0YXRpYylcbiAgICAgICAgc2VydmljZSA9IEluamVjdG9yLnJlc29sdmVIYXNoPHR5cGVvZiBpLmRlZj4oaS5kZWYpO1xuICAgICAgZWxzZVxuICAgICAgICBzZXJ2aWNlID0gSW5qZWN0b3IucmVzb2x2ZTx0eXBlb2YgaS5kZWY+KGkuZGVmKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgY29uc3RyIHtcbiAgICAgIG1lc3NhZ2U6SVN0YXRlTWVzc2FnZVNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgc3Vic2NyaWJ0aW9uOmFueVtdID0gW107XG4gICAgICBnZXRTdGF0ZXMoc2V0KVxuICAgICAge1xuICAgICAgICB0aGlzLnN1YnNjcmlidGlvbiA9IHN0YXRlLmdldFN0YXRlcyhzZXQpO1xuICAgICAgfVxuICAgICAgZ2V0U3RhdGUobmFtZTpzdHJpbmcsY2I6RnVuY3Rpb24pXG4gICAgICB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJ0aW9uLnB1c2goc3RhdGUuZ2V0U3RhdGUobmFtZSxjYikpO1xuICAgICAgfVxuICAgICAgc2VuZE1lc3NhZ2UobmFtZTpzdHJpbmcsbWVzc2FnZTogYW55KXtcbiAgICAgICAgaWYodGhpcy5tZXNzYWdlKVxuICAgICAgICB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlLlNlbmRNZXNzYWdlKG5hbWUsbWVzc2FnZSxzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5nT25EZXN0cm95KClcbiAgICAgIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYnRpb24uZm9yRWFjaCgoZSk9PmUudW5zdWJzY3JpYmUoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIFN0YXRlQmFzZSBpbXBsZW1lbnRzIE9uRGVzdHJveXtcbiAgY29uc3RydWN0b3IoKSB7IH1cbiAgZ2V0U3RhdGUobmFtZTpzdHJpbmcsY2I6RnVuY3Rpb24pe307XG4gIHNlbmRNZXNzYWdlKG5hbWU6c3RyaW5nLG1lc3NhZ2U6IGFueSl7fVxuICBuZ09uRGVzdHJveSgpe31cbiAgZ2V0U3RhdGVzKHNldCl7fTtcbn1cbiJdfQ==