@gongt/ts-stl-client
Version:
84 lines • 2.88 kB
JavaScript
;
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