UNPKG

reducers-creator

Version:

Reducers Creator is an awesome tiny javascript package that allows you to easily and intuitively create reducer functions. Mainly used to create redux reducers.

47 lines (39 loc) 1.43 kB
"use strict"; /** * Copyright (c) 2020-present Ruben Arushanyan (https://github.com/ruben-arushanyan) * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ var _require = require('immer'), produce = _require.produce; var _require2 = require('./utils'), isString = _require2.isString, isUndefined = _require2.isUndefined, isObject = _require2.isObject; var reducerTreeParser = require('./reducerTreeParser'); var reducersCreator = function reducersCreator(reducer_name, initial_state, reducer_tree) { if (!isString(reducer_name)) { throw new TypeError('reducer name must be the String'); } var reducerHandlers = reducerTreeParser(reducer_tree, reducer_name); return function () { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initial_state; var action = arguments.length > 1 ? arguments[1] : undefined; action = isObject(action) ? action : {}; var type = String(action.type); if (reducerHandlers.hasOwnProperty(type)) { var reducerHandler = reducerHandlers[type]; return produce(state, function (draftState) { var returnedValue = reducerHandler(draftState, action); if (!isUndefined(returnedValue)) { return returnedValue; } }); } else { return state; } }; }; module.exports = reducersCreator;