|
| 1 | +'use strict'; |
| 2 | + |
| 3 | +Object.defineProperty(exports, '__esModule', { value: true }); |
| 4 | + |
| 5 | +var DELIMITER = '/'; |
| 6 | +var isDev = process.env.NODE_ENV !== 'production'; |
| 7 | +var namespacedActionType = function namespacedActionType(namespace, type) { |
| 8 | + return namespace === '' ? type : "" + namespace + DELIMITER + type; |
| 9 | +}; |
| 10 | +var isObject = function isObject(o) { |
| 11 | + return o instanceof Object && !Array.isArray(o); |
| 12 | +}; |
| 13 | +var isFunction = function isFunction(o) { |
| 14 | + return typeof o === 'function'; |
| 15 | +}; |
| 16 | +var createCapturedError = function createCapturedError(message, cst) { |
| 17 | + var error = new Error(message); |
| 18 | + if (cst && Error.captureStackTrace) Error.captureStackTrace(error, cst); |
| 19 | + return error; |
| 20 | +}; |
| 21 | +var checkStateShape = function checkStateShape(next, prev, action) { |
| 22 | + var missingKeys = []; |
| 23 | + Object.keys(next).forEach(function (key) { |
| 24 | + if (key in prev) return; |
| 25 | + missingKeys.push(key); |
| 26 | + }); |
| 27 | + |
| 28 | + if (missingKeys.length > 0) { |
| 29 | + console.warn("Reducer for action '" + action.type + "' produced new keys: [" + missingKeys.join(',') + "]"); |
| 30 | + } |
| 31 | +}; |
| 32 | + |
| 33 | +var createTypes = function createTypes(namespace, types) { |
| 34 | + if (types === void 0) { |
| 35 | + types = []; |
| 36 | + } |
| 37 | + |
| 38 | + if (Array.isArray(namespace)) { |
| 39 | + types = namespace; |
| 40 | + namespace = ''; |
| 41 | + } |
| 42 | + |
| 43 | + if (typeof namespace !== 'string' || !Array.isArray(types) || types.length === 0) throw createError(ARGUMENT_ERROR); |
| 44 | + var result = {}; |
| 45 | + types.forEach(function (type) { |
| 46 | + result[type] = namespacedActionType(namespace, type); |
| 47 | + }); |
| 48 | + return result; |
| 49 | +}; |
| 50 | + |
| 51 | +var createError = function createError(message) { |
| 52 | + return createCapturedError(message, createTypes); |
| 53 | +}; |
| 54 | + |
| 55 | +var ARGUMENT_ERROR = 'Expected first argument to be a string (for namespaced actions) or non empty array (types)' + 'or/and second argument (types) to be a non empty array.'; |
| 56 | + |
| 57 | +function _extends() { |
| 58 | + _extends = Object.assign || function (target) { |
| 59 | + for (var i = 1; i < arguments.length; i++) { |
| 60 | + var source = arguments[i]; |
| 61 | + |
| 62 | + for (var key in source) { |
| 63 | + if (Object.prototype.hasOwnProperty.call(source, key)) { |
| 64 | + target[key] = source[key]; |
| 65 | + } |
| 66 | + } |
| 67 | + } |
| 68 | + |
| 69 | + return target; |
| 70 | + }; |
| 71 | + |
| 72 | + return _extends.apply(this, arguments); |
| 73 | +} |
| 74 | + |
| 75 | +var composeReducer = function composeReducer() { |
| 76 | + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { |
| 77 | + args[_key] = arguments[_key]; |
| 78 | + } |
| 79 | + |
| 80 | + var _prepareParams = prepareParams(args), |
| 81 | + _prepareParams$namesp = _prepareParams.namespace, |
| 82 | + namespace = _prepareParams$namesp === void 0 ? '' : _prepareParams$namesp, |
| 83 | + types = _prepareParams.types, |
| 84 | + initialState = _prepareParams.initialState, |
| 85 | + _prepareParams$reduce = _prepareParams.reducers, |
| 86 | + reducers = _prepareParams$reduce === void 0 ? {} : _prepareParams$reduce, |
| 87 | + globalReducer = _prepareParams.globalReducer; |
| 88 | + |
| 89 | + if (types !== undefined && !isObject(types) || types === undefined && typeof namespace !== 'string' || !isObject(initialState) || !isObject(reducers) || globalReducer !== undefined && !isFunction(globalReducer)) throw createError$1(ARGUMENT_ERROR$1); |
| 90 | + var typeToReducerMap = types ? createMapFromTypes(types, reducers) : createMapFromNamespace(namespace, reducers); |
| 91 | + return function (state, action) { |
| 92 | + if (state === void 0) { |
| 93 | + state = initialState; |
| 94 | + } |
| 95 | + |
| 96 | + var reduce = typeToReducerMap[action.type]; |
| 97 | + if (reduce) state = reduce(state, action); |
| 98 | + if (globalReducer) state = globalReducer(state, action); |
| 99 | + if (isDev) checkStateShape(state, initialState, action); |
| 100 | + return state; |
| 101 | + }; |
| 102 | +}; |
| 103 | + |
| 104 | +var prepareParams = function prepareParams(args) { |
| 105 | + if (typeof args[0] === 'string') { |
| 106 | + console.warn(DEPRICATED_API_WARNING); |
| 107 | + return { |
| 108 | + namespace: args[0], |
| 109 | + reducers: args[1], |
| 110 | + initialState: args[2], |
| 111 | + globalReducer: args[3] |
| 112 | + }; |
| 113 | + } |
| 114 | + |
| 115 | + return args[0] || {}; |
| 116 | +}; |
| 117 | + |
| 118 | +var createMapFromTypes = function createMapFromTypes(types, reducers) { |
| 119 | + var result = {}; |
| 120 | + Object.keys(reducers).forEach(function (key) { |
| 121 | + if (!(key in types)) throw createError$1("There is no '" + key + "' action type."); |
| 122 | + result[types[key]] = normalizeReducer(reducers[key]); |
| 123 | + }); |
| 124 | + return result; |
| 125 | +}; |
| 126 | + |
| 127 | +var createMapFromNamespace = function createMapFromNamespace(namespace, reducers) { |
| 128 | + var result = {}; |
| 129 | + Object.keys(reducers).forEach(function (type) { |
| 130 | + result[namespacedActionType(namespace, type)] = normalizeReducer(reducers[type]); |
| 131 | + }); |
| 132 | + return result; |
| 133 | +}; |
| 134 | + |
| 135 | +var normalizeReducer = function normalizeReducer(reducer) { |
| 136 | + return isFunction(reducer) ? reducer : function (state) { |
| 137 | + return _extends({}, state, reducer); |
| 138 | + }; |
| 139 | +}; |
| 140 | + |
| 141 | +var ARGUMENT_ERROR$1 = "As argument expected object of shape : {\n namespace: 'string',\n types: 'object',\n initialState: 'object',\n reducers: 'object',\n globalReducer: 'function'\n}.\nRequired keys: namespace or types, initialState."; |
| 142 | +var DEPRICATED_API_WARNING = 'redux-compose-reducer#composeReducer: ' + 'Multiple arguments api is depricated and will be removed in future versions. ' + 'Please use object argument.'; |
| 143 | + |
| 144 | +var createError$1 = function createError(message) { |
| 145 | + return createCapturedError(message, composeReducer); |
| 146 | +}; |
| 147 | + |
| 148 | +exports.createTypes = createTypes; |
| 149 | +exports.composeReducer = composeReducer; |
0 commit comments