@simplux/core
Version:
The core package of simplux. Contains everything to manage your application state in a simple way.
24 lines (23 loc) • 3.48 kB
JavaScript
/**
* @internal
*/
export function createModuleReducer(moduleName, initialState, moduleMutations) {
const mutationPrefix = `@simplux/${moduleName}/mutation/`;
return (state = initialState, action) => {
if (action.type.startsWith(mutationPrefix)) {
const { mutationName, args } = action;
const mutation = moduleMutations[mutationName];
if (process.env.NODE_ENV !== 'production') {
if (!mutation) {
throw new Error(`mutation '${mutationName}' does not exist in module '${moduleName}'`);
}
}
return (mutation === null || mutation === void 0 ? void 0 : mutation(state, ...args)) || state;
}
if (action.type === `@simplux/${moduleName}/setState`) {
return action.state;
}
return state;
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkdWNlci5qcyIsInNvdXJjZXMiOlsiQHNpbXBsdXgvY29yZS9zcmMvcmVkdWNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gJ3JlZHV4J1xyXG5pbXBvcnQgdHlwZSB7IE11dGF0aW9uRGVmaW5pdGlvbnMgfSBmcm9tICcuL211dGF0aW9ucy5qcydcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2R1bGVSZWR1Y2VyPFRTdGF0ZT4oXHJcbiAgbW9kdWxlTmFtZTogc3RyaW5nLFxyXG4gIGluaXRpYWxTdGF0ZTogVFN0YXRlLFxyXG4gIG1vZHVsZU11dGF0aW9uczogTXV0YXRpb25EZWZpbml0aW9uczxUU3RhdGU+LFxyXG4pIHtcclxuICBjb25zdCBtdXRhdGlvblByZWZpeCA9IGBAc2ltcGx1eC8ke21vZHVsZU5hbWV9L211dGF0aW9uL2BcclxuXHJcbiAgcmV0dXJuIDxUQWN0aW9uIGV4dGVuZHMgQWN0aW9uPHN0cmluZz4+KFxyXG4gICAgc3RhdGUgPSBpbml0aWFsU3RhdGUsXHJcbiAgICBhY3Rpb246IFRBY3Rpb24sXHJcbiAgKTogVFN0YXRlID0+IHtcclxuICAgIGlmIChhY3Rpb24udHlwZS5zdGFydHNXaXRoKG11dGF0aW9uUHJlZml4KSkge1xyXG4gICAgICBjb25zdCB7IG11dGF0aW9uTmFtZSwgYXJncyB9ID0gYWN0aW9uIGFzIGFueVxyXG4gICAgICBjb25zdCBtdXRhdGlvbiA9IG1vZHVsZU11dGF0aW9uc1ttdXRhdGlvbk5hbWVdXHJcblxyXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgICAgIGlmICghbXV0YXRpb24pIHtcclxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYG11dGF0aW9uICcke211dGF0aW9uTmFtZX0nIGRvZXMgbm90IGV4aXN0IGluIG1vZHVsZSAnJHttb2R1bGVOYW1lfSdgLFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIG11dGF0aW9uPy4oc3RhdGUsIC4uLmFyZ3MpIHx8IHN0YXRlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFjdGlvbi50eXBlID09PSBgQHNpbXBsdXgvJHttb2R1bGVOYW1lfS9zZXRTdGF0ZWApIHtcclxuICAgICAgcmV0dXJuIChhY3Rpb24gYXMgYW55KS5zdGF0ZVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdGF0ZVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0E7O0dBRUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLFVBQWtCLEVBQ2xCLFlBQW9CLEVBQ3BCLGVBQTRDO0lBRTVDLE1BQU0sY0FBYyxHQUFHLFlBQVksVUFBVSxZQUFZLENBQUE7SUFFekQsT0FBTyxDQUNMLEtBQUssR0FBRyxZQUFZLEVBQ3BCLE1BQWUsRUFDUCxFQUFFO1FBQ1YsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUMxQyxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQWEsQ0FBQTtZQUM1QyxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUE7WUFFOUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLEVBQUU7Z0JBQ3pDLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2IsTUFBTSxJQUFJLEtBQUssQ0FDYixhQUFhLFlBQVksK0JBQStCLFVBQVUsR0FBRyxDQUN0RSxDQUFBO2lCQUNGO2FBQ0Y7WUFFRCxPQUFPLENBQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFHLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFJLEtBQUssQ0FBQTtTQUMzQztRQUVELElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZLFVBQVUsV0FBVyxFQUFFO1lBQ3JELE9BQVEsTUFBYyxDQUFDLEtBQUssQ0FBQTtTQUM3QjtRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyJ9