UNPKG

@gongt/ts-stl-client

Version:
84 lines 2.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const create_logger_1 = require("@gongt/ts-stl-library/debug/create-logger"); const levels_1 = require("@gongt/ts-stl-library/debug/levels"); const silly = create_logger_1.createLogger(levels_1.LOG_LEVEL.SILLY, 'v-store'); function reduce(Constructor, Action, ...reducer) { const vs = new Constructor; return vs['reduce'](Action, ...reducer); } exports.reduce = reduce; function reduceAny(Constructor, Action, ...reducer) { const vs = new Constructor; return vs['reduceAny'](Action, ...reducer); } exports.reduceAny = reduceAny; function extractorOf(vs) { return function (state) { if (state[vs.name] === null || state[vs.name] === undefined) { displayExtractError(state, vs.name); } return state[vs.name]; }; } exports.extractorOf = extractorOf; function subExtractorOf(vs, key) { return function (state) { if (state[vs.name] === null || state[vs.name] === undefined) { displayExtractError(state, vs.name); } if (!state[vs.name].hasOwnProperty(key)) { displayExtractError(state, vs.name + '.' + key); } return state[vs.name][key]; }; } exports.subExtractorOf = subExtractorOf; const output = create_logger_1.createLogger(levels_1.LOG_LEVEL.ERROR, 'vs'); function displayExtractError(state, varName) { output('================'); output(` Cannot get variable '${varName}' of redux store`); output(` did you called store.reigster(${varName.replace(/\..*$/, '')})`); output(` and defined a property "defaultValue" in subStore "${varName.replace(/\..*$/, '')}"`); output(' STATE: %j', state); output('================'); throw new Error(`Cannot get variable '${varName}' of redux store`); } class VirtualStore { constructor() { this.reducers = []; if (this.constructor['instance']) { return this.constructor['instance']; } this.constructor['instance'] = this; this.name = this.constructor.name; silly('construct vs: ', this.name); } reduce(Action, ...reducer) { for (let fn of reducer) { this.reducers.push({ callback: fn, actionName: Action.name, storeName: this.name, global: false, }); } } reduceAny(Action, ...reducer) { for (let fn of reducer) { this.reducers.push({ callback: fn, actionName: Action.name, storeName: this.name, global: true, }); } } getReducers() { Object.freeze(this.reducers); return this.reducers; } } VirtualStore.ANY = '*'; exports.VirtualStore = VirtualStore; //# sourceMappingURL=virtual-store.js.map