UNPKG

58.8 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.cjs.js","sources":["../src/actions.js","../src/apis.js","../src/reducer.js","../src/lib.js","../src/selector.js","../../../node_modules/@redux-saga/symbols/dist/redux-saga-symbols.esm.js","../../../node_modules/@redux-saga/is/dist/redux-saga-is.esm.js","../../../node_modules/@redux-saga/delay-p/dist/redux-saga-delay-p.esm.js","../../../node_modules/@redux-saga/core/dist/chunk-e922c950.js","../../../node_modules/@redux-saga/core/dist/redux-saga-effects.esm.js","../src/saga.js","../src/index.js"],"sourcesContent":["/// <reference path='../typings/index.d.ts' />\nimport { endsWith, startsWith } from \"lodash\";\n\nexport const PREFIX = \"@API\";\nexport const REQUEST = \"REQUEST\";\nexport const SUCCESS = \"SUCCESS\";\nexport const FAILURE = \"FAILURE\";\nexport const CLEAR = \"CLEAR\";\nexport const REFRESH = \"REFRESH\";\n\n/**\n * make api action types\n * @param {string} base base name\n */\nexport const makeTypes = key => ({\n request: `${PREFIX}/${key}/${REQUEST}`,\n success: `${PREFIX}/${key}/${SUCCESS}`,\n failure: `${PREFIX}/${key}/${FAILURE}`,\n clear: `${PREFIX}/${key}/${CLEAR}`,\n refresh: `${PREFIX}/${key}/${REFRESH}`,\n});\n\nexport const successOf = key => `${PREFIX}/${key}/${SUCCESS}`;\nexport const requestOf = key => `${PREFIX}/${key}/${REQUEST}`;\nexport const failureOf = key => `${PREFIX}/${key}/${FAILURE}`;\nexport const clearOf = key => `${PREFIX}/${key}/${CLEAR}`;\nexport const refreshOf = key => `${PREFIX}/${key}/${REFRESH}`;\n\n/**\n * action is api action\n * @param {import(\"@36node/redux-api\").Action} action action\n */\nexport function isApi(action) {\n const { key, type } = action;\n return key && startsWith(type, PREFIX);\n}\n\n/**\n * Is request action\n * @param {import(\"@36node/redux-api\").Action} action action\n */\nexport function isRequest(action) {\n return isApi(action) && endsWith(action.type, REQUEST);\n}\n\n/**\n * Is success action\n * @param {import(\"@36node/redux-api\").Action} action action\n */\nexport function isSuccess(action) {\n return isApi(action) && endsWith(action.type, SUCCESS);\n}\n\n/**\n * Is failure action\n * @param {import(\"@36node/redux-api\").Action} action action\n */\nexport function isFailure(action) {\n return isApi(action) && endsWith(action.type, FAILURE);\n}\n\n/**\n * Is clear action\n * @param {import(\"@36node/redux-api\").Action} action action\n */\nexport function isClear(action) {\n return isApi(action) && endsWith(action.type, CLEAR);\n}\n\n/**\n * Is refresh action\n * @param {import(\"@36node/redux-api\").Action} action action\n */\nexport function isRefresh(action) {\n return isApi(action) && endsWith(action.type, REFRESH);\n}\n","export const Apis = new Map();\n\nexport function registerSaga(key, api) {\n Apis.set(key, api);\n}\n","/// <reference path='../typings/index.d.ts' />\nimport { get, union, setWith, clone, mergeWith, isArray } from \"lodash\";\n\nimport { isApi, isRequest, isFailure, isSuccess, isClear } from \"./actions\";\nimport { Apis } from \"./apis\";\n\nexport const initState = {\n loading: false,\n result: null,\n request: {},\n meta: {},\n total: 0,\n};\n\nfunction r(state = initState, action = {}) {\n const { payload = {}, error, meta = {} } = action;\n const { xTotalCount, result } = payload;\n const { append = false } = meta;\n\n if (isRequest(action)) {\n return { ...state, loading: true, request: payload, meta };\n }\n\n if (isSuccess(action)) {\n return {\n ...state,\n loading: false,\n result: append ? union(result, state.result) : result,\n total: xTotalCount && Number(xTotalCount),\n meta: { ...state.meta, ...meta },\n };\n }\n\n if (isFailure(action)) {\n return {\n ...state,\n loading: false,\n error,\n meta: { ...state.meta, ...meta },\n };\n }\n\n if (isClear(action)) {\n return initState;\n }\n\n return state;\n}\n\nconst customizer = (objValue, srcValue, key, object, source, stack) => {\n if (stack.size === 2) {\n // will not merge array\n if (isArray(srcValue)) {\n return srcValue;\n }\n }\n};\n\nexport function entitiesReducer(state = {}, action) {\n if (action.payload && action.payload.entities) {\n return mergeWith({}, state, action.payload.entities, customizer);\n }\n return state;\n}\n\n/**\n * api root reducer\n * @param {Object} state state\n * @param {import(\"@36node/redux-api\").Action} action action\n */\nexport function apiReducer(state = {}, action) {\n const { key } = action;\n\n if (isApi(action)) {\n // key not register\n const api = Apis.get(key);\n\n if (!api) {\n return state;\n }\n\n return setWith(\n { ...state },\n api.reduxPath,\n r(get(state, api.reduxPath), action),\n clone\n );\n }\n return state;\n}\n\nconst apiReducers = {\n apis: apiReducer,\n entities: entitiesReducer,\n};\n\nexport default apiReducers;\n","import {\n isArray,\n isObjectLike,\n isPlainObject,\n map,\n transform,\n set,\n camelCase,\n} from \"lodash\";\n\nfunction createIteratee(converter, self) {\n return (result, value, key) =>\n set(result, converter(key), isObjectLike(value) ? self(value) : value);\n}\n\nfunction createHumps(keyConverter) {\n return function humps(node) {\n if (isArray(node)) return map(node, humps);\n if (isPlainObject(node))\n return transform(node, createIteratee(keyConverter, humps));\n return node;\n };\n}\n\nexport const humps = createHumps(camelCase);\n\n/**\n * camel case key\n * @param {String} key\n */\nexport const camelCaseKey = key => {\n return key\n .split(\".\")\n .map(k => camelCase(k))\n .join(\".\");\n};\n","import { get } from \"lodash\";\nimport { createSelector } from \"reselect\";\nimport { denormalize } from \"normalizr\";\nimport { initState } from \"./reducer\";\nimport { camelCaseKey } from \"./lib\";\n\nconst entitiesSelector = state => state.entities;\n\nexport const makeStateSelector = path => state =>\n get(state.apis, path) || initState;\n\n/**\n *\n * @param {string} key api key or redux state key\n * @param {object} schema output data schema\n * @returns {function(object) => object} selector\n */\nconst makeApiSelector = (key, schema) => {\n const path = camelCaseKey(key);\n const stateSelector = makeStateSelector(path);\n\n return createSelector(\n stateSelector,\n entitiesSelector,\n (state, entities) => {\n const { result } = state;\n if (!result || !schema) return state;\n const deResult = denormalize(result, schema, entities);\n return { ...state, result: deResult };\n }\n );\n};\n\nexport default makeApiSelector;\n","var createSymbol = function createSymbol(name) {\n return \"@@redux-saga/\" + name;\n};\n\nvar CANCEL =\n/*#__PURE__*/\ncreateSymbol('CANCEL_PROMISE');\nvar CHANNEL_END_TYPE =\n/*#__PURE__*/\ncreateSymbol('CHANNEL_END');\nvar IO =\n/*#__PURE__*/\ncreateSymbol('IO');\nvar MATCH =\n/*#__PURE__*/\ncreateSymbol('MATCH');\nvar MULTICAST =\n/*#__PURE__*/\ncreateSymbol('MULTICAST');\nvar SAGA_ACTION =\n/*#__PURE__*/\ncreateSymbol('SAGA_ACTION');\nvar SELF_CANCELLATION =\n/*#__PURE__*/\ncreateSymbol('SELF_CANCELLATION');\nvar TASK =\n/*#__PURE__*/\ncreateSymbol('TASK');\nvar TASK_CANCEL =\n/*#__PURE__*/\ncreateSymbol('TASK_CANCEL');\nvar TERMINATE =\n/*#__PURE__*/\ncreateSymbol('TERMINATE');\nvar SAGA_LOCATION =\n/*#__PURE__*/\ncreateSymbol('LOCATION');\n\nexport { CANCEL, CHANNEL_END_TYPE, IO, MATCH, MULTICAST, SAGA_ACTION, SELF_CANCELLATION, TASK, TASK_CANCEL, TERMINATE, SAGA_LOCATION };\n","import { TASK, SAGA_ACTION, MULTICAST, IO } from '@redux-saga/symbols';\n\nvar undef = function undef(v) {\n return v === null || v === undefined;\n};\nvar notUndef = function notUndef(v) {\n return v !== null && v !== undefined;\n};\nvar func = function func(f) {\n return typeof f === 'function';\n};\nvar number = function number(n) {\n return typeof n === 'number';\n};\nvar string = function string(s) {\n return typeof s === 'string';\n};\nvar array = Array.isArray;\nvar object = function object(obj) {\n return obj && !array(obj) && typeof obj === 'object';\n};\nvar promise = function promise(p) {\n return p && func(p.then);\n};\nvar iterator = function iterator(it) {\n return it && func(it.next) && func(it.throw);\n};\nvar iterable = function iterable(it) {\n return it && func(Symbol) ? func(it[Symbol.iterator]) : array(it);\n};\nvar task = function task(t) {\n return t && t[TASK];\n};\nvar sagaAction = function sagaAction(a) {\n return Boolean(a && a[SAGA_ACTION]);\n};\nvar observable = function observable(ob) {\n return ob && func(ob.subscribe);\n};\nvar buffer = function buffer(buf) {\n return buf && func(buf.isEmpty) && func(buf.take) && func(buf.put);\n};\nvar pattern = function pattern(pat) {\n return pat && (string(pat) || symbol(pat) || func(pat) || array(pat) && pat.every(pattern));\n};\nvar channel = function channel(ch) {\n return ch && func(ch.take) && func(ch.close);\n};\nvar stringableFunc = function stringableFunc(f) {\n return func(f) && f.hasOwnProperty('toString');\n};\nvar symbol = function symbol(sym) {\n return Boolean(sym) && typeof Symbol === 'function' && sym.constructor === Symbol && sym !== Symbol.prototype;\n};\nvar multicast = function multicast(ch) {\n return channel(ch) && ch[MULTICAST];\n};\nvar effect = function effect(eff) {\n return eff && eff[IO];\n};\n\nexport { undef, notUndef, func, number, string, array, object, promise, iterator, iterable, task, sagaAction, observable, buffer, pattern, channel, stringableFunc, symbol, multicast, effect };\n","import { CANCEL } from '@redux-saga/symbols';\n\nfunction delayP(ms, val) {\n if (val === void 0) {\n val = true;\n }\n\n var timeoutId;\n var promise = new Promise(function (resolve) {\n timeoutId = setTimeout(resolve, ms, val);\n });\n\n promise[CANCEL] = function () {\n clearTimeout(timeoutId);\n };\n\n return promise;\n}\n\nexport default delayP;\n","import { TASK_CANCEL, TERMINATE, SAGA_LOCATION, SAGA_ACTION, IO, SELF_CANCELLATION } from '@redux-saga/symbols';\nimport _extends from '@babel/runtime/helpers/esm/extends';\nimport { array, notUndef, pattern, multicast, channel, undef, task, func, buffer, string, object } from '@redux-saga/is';\nimport delayP from '@redux-saga/delay-p';\n\nvar konst = function konst(v) {\n return function () {\n return v;\n };\n};\nvar kTrue =\n/*#__PURE__*/\nkonst(true);\nvar noop = function noop() {};\nvar identity = function identity(v) {\n return v;\n};\nvar hasSymbol = typeof Symbol === 'function';\nvar asyncIteratorSymbol = hasSymbol && Symbol.asyncIterator ? Symbol.asyncIterator : '@@asyncIterator';\nfunction check(value, predicate, error) {\n if (!predicate(value)) {\n throw new Error(error);\n }\n}\nvar assignWithSymbols = function assignWithSymbols(target, source) {\n _extends(target, source);\n\n if (Object.getOwnPropertySymbols) {\n Object.getOwnPropertySymbols(source).forEach(function (s) {\n target[s] = source[s];\n });\n }\n};\nvar flatMap = function flatMap(mapper, arr) {\n var _ref;\n\n return (_ref = []).concat.apply(_ref, arr.map(mapper));\n};\nfunction remove(array, item) {\n var index = array.indexOf(item);\n\n if (index >= 0) {\n array.splice(index, 1);\n }\n}\nfunction once(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n\n called = true;\n fn();\n };\n}\n\nvar kThrow = function kThrow(err) {\n throw err;\n};\n\nvar kReturn = function kReturn(value) {\n return {\n value: value,\n done: true\n };\n};\n\nfunction makeIterator(next, thro, name) {\n if (thro === void 0) {\n thro = kThrow;\n }\n\n if (name === void 0) {\n name = 'iterator';\n }\n\n var iterator = {\n meta: {\n name: name\n },\n next: next,\n throw: thro,\n return: kReturn,\n isSagaIterator: true\n };\n\n if (typeof Symbol !== 'undefined') {\n iterator[Symbol.iterator] = function () {\n return iterator;\n };\n }\n\n return iterator;\n}\nfunction logError(error, _ref2) {\n var sagaStack = _ref2.sagaStack;\n\n /*eslint-disable no-console*/\n console.error(error);\n console.error(sagaStack);\n}\nvar internalErr = function internalErr(err) {\n return new Error(\"\\n redux-saga: Error checking hooks detected an inconsistent state. This is likely a bug\\n in redux-saga code and not yours. Thanks for reporting this in the project's github repo.\\n Error: \" + err + \"\\n\");\n};\nvar createSetContextWarning = function createSetContextWarning(ctx, props) {\n return (ctx ? ctx + '.' : '') + \"setContext(props): argument \" + props + \" is not a plain object\";\n};\nvar FROZEN_ACTION_ERROR = \"You can't put (a.k.a. dispatch from saga) frozen actions.\\nWe have to define a special non-enumerable property on those actions for scheduling purposes.\\nOtherwise you wouldn't be able to communicate properly between sagas & other subscribers (action ordering would become far less predictable).\\nIf you are using redux and you care about this behaviour (frozen actions),\\nthen you might want to switch to freezing actions in a middleware rather than in action creator.\\nExample implementation:\\n\\nconst freezeActions = store => next => action => next(Object.freeze(action))\\n\"; // creates empty, but not-holey array\n\nvar createEmptyArray = function createEmptyArray(n) {\n return Array.apply(null, new Array(n));\n};\nvar wrapSagaDispatch = function wrapSagaDispatch(dispatch) {\n return function (action) {\n if (process.env.NODE_ENV !== 'production') {\n check(action, function (ac) {\n return !Object.isFrozen(ac);\n }, FROZEN_ACTION_ERROR);\n }\n\n return dispatch(Object.defineProperty(action, SAGA_ACTION, {\n value: true\n }));\n };\n};\nvar shouldTerminate = function shouldTerminate(res) {\n return res === TERMINATE;\n};\nvar shouldCancel = function shouldCancel(res) {\n return res === TASK_CANCEL;\n};\nvar shouldComplete = function shouldComplete(res) {\n return shouldTerminate(res) || shouldCancel(res);\n};\nfunction createAllStyleChildCallbacks(shape, parentCallback) {\n var keys = Object.keys(shape);\n var totalCount = keys.length;\n\n if (process.env.NODE_ENV !== 'production') {\n check(totalCount, function (c) {\n return c > 0;\n }, 'createAllStyleChildCallbacks: get an empty array or object');\n }\n\n var completedCount = 0;\n var completed;\n var results = array(shape) ? createEmptyArray(totalCount) : {};\n var childCallbacks = {};\n\n function checkEnd() {\n if (completedCount === totalCount) {\n completed = true;\n parentCallback(results);\n }\n }\n\n keys.forEach(function (key) {\n var chCbAtKey = function chCbAtKey(res, isErr) {\n if (completed) {\n return;\n }\n\n if (isErr || shouldComplete(res)) {\n parentCallback.cancel();\n parentCallback(res, isErr);\n } else {\n results[key] = res;\n completedCount++;\n checkEnd();\n }\n };\n\n chCbAtKey.cancel = noop;\n childCallbacks[key] = chCbAtKey;\n });\n\n parentCallback.cancel = function () {\n if (!completed) {\n completed = true;\n keys.forEach(function (key) {\n return childCallbacks[key].cancel();\n });\n }\n };\n\n return childCallbacks;\n}\nfunction getMetaInfo(fn) {\n return {\n name: fn.name || 'anonymous',\n location: getLocation(fn)\n };\n}\nfunction getLocation(instrumented) {\n return instrumented[SAGA_LOCATION];\n}\n\nvar BUFFER_OVERFLOW = \"Channel's Buffer overflow!\";\nvar ON_OVERFLOW_THROW = 1;\nvar ON_OVERFLOW_DROP = 2;\nvar ON_OVERFLOW_SLIDE = 3;\nvar ON_OVERFLOW_EXPAND = 4;\nvar zeroBuffer = {\n isEmpty: kTrue,\n put: noop,\n take: noop\n};\n\nfunction ringBuffer(limit, overflowAction) {\n if (limit === void 0) {\n limit = 10;\n }\n\n var arr = new Array(limit);\n var length = 0;\n var pushIndex = 0;\n var popIndex = 0;\n\n var push = function push(it) {\n arr[pushIndex] = it;\n pushIndex = (pushIndex + 1) % limit;\n length++;\n };\n\n var take = function take() {\n if (length != 0) {\n var it = arr[popIndex];\n arr[popIndex] = null;\n length--;\n popIndex = (popIndex + 1) % limit;\n return it;\n }\n };\n\n var flush = function flush() {\n var items = [];\n\n while (length) {\n items.push(take());\n }\n\n return items;\n };\n\n return {\n isEmpty: function isEmpty() {\n return length == 0;\n },\n put: function put(it) {\n if (length < limit) {\n push(it);\n } else {\n var doubledLimit;\n\n switch (overflowAction) {\n case ON_OVERFLOW_THROW:\n throw new Error(BUFFER_OVERFLOW);\n\n case ON_OVERFLOW_SLIDE:\n arr[pushIndex] = it;\n pushIndex = (pushIndex + 1) % limit;\n popIndex = pushIndex;\n break;\n\n case ON_OVERFLOW_EXPAND:\n doubledLimit = 2 * limit;\n arr = flush();\n length = arr.length;\n pushIndex = arr.length;\n popIndex = 0;\n arr.length = doubledLimit;\n limit = doubledLimit;\n push(it);\n break;\n\n default: // DROP\n\n }\n }\n },\n take: take,\n flush: flush\n };\n}\n\nvar none = function none() {\n return zeroBuffer;\n};\nvar fixed = function fixed(limit) {\n return ringBuffer(limit, ON_OVERFLOW_THROW);\n};\nvar dropping = function dropping(limit) {\n return ringBuffer(limit, ON_OVERFLOW_DROP);\n};\nvar sliding = function sliding(limit) {\n return ringBuffer(limit, ON_OVERFLOW_SLIDE);\n};\nvar expanding = function expanding(initialSize) {\n return ringBuffer(initialSize, ON_OVERFLOW_EXPAND);\n};\n\nvar buffers = /*#__PURE__*/Object.freeze({\n none: none,\n fixed: fixed,\n dropping: dropping,\n sliding: sliding,\n expanding: expanding\n});\n\nvar TAKE = 'TAKE';\nvar PUT = 'PUT';\nvar ALL = 'ALL';\nvar RACE = 'RACE';\nvar CALL = 'CALL';\nvar CPS = 'CPS';\nvar FORK = 'FORK';\nvar JOIN = 'JOIN';\nvar CANCEL = 'CANCEL';\nvar SELECT = 'SELECT';\nvar ACTION_CHANNEL = 'ACTION_CHANNEL';\nvar CANCELLED = 'CANCELLED';\nvar FLUSH = 'FLUSH';\nvar GET_CONTEXT = 'GET_CONTEXT';\nvar SET_CONTEXT = 'SET_CONTEXT';\n\nvar effectTypes = /*#__PURE__*/Object.freeze({\n TAKE: TAKE,\n PUT: PUT,\n ALL: ALL,\n RACE: RACE,\n CALL: CALL,\n CPS: CPS,\n FORK: FORK,\n JOIN: JOIN,\n CANCEL: CANCEL,\n SELECT: SELECT,\n ACTION_CHANNEL: ACTION_CHANNEL,\n CANCELLED: CANCELLED,\n FLUSH: FLUSH,\n GET_CONTEXT: GET_CONTEXT,\n SET_CONTEXT: SET_CONTEXT\n});\n\nvar TEST_HINT = '\\n(HINT: if you are getting this errors in tests, consider using createMockTask from @redux-saga/testing-utils)';\n\nvar makeEffect = function makeEffect(type, payload) {\n var _ref;\n\n return _ref = {}, _ref[IO] = true, _ref.combinator = false, _ref.type = type, _ref.payload = payload, _ref;\n};\n\nvar isForkEffect = function isForkEffect(eff) {\n return eff && eff[IO] && eff.type === FORK;\n};\n\nvar detach = function detach(eff) {\n if (process.env.NODE_ENV !== 'production') {\n check(eff, isForkEffect, 'detach(eff): argument must be a fork effect');\n }\n\n return makeEffect(FORK, _extends({}, eff.payload, {\n detached: true\n }));\n};\nfunction take(patternOrChannel, multicastPattern) {\n if (patternOrChannel === void 0) {\n patternOrChannel = '*';\n }\n\n if (process.env.NODE_ENV !== 'production' && arguments.length) {\n check(arguments[0], notUndef, 'take(patternOrChannel): patternOrChannel is undefined');\n }\n\n if (pattern(patternOrChannel)) {\n return makeEffect(TAKE, {\n pattern: patternOrChannel\n });\n }\n\n if (multicast(patternOrChannel) && notUndef(multicastPattern) && pattern(multicastPattern)) {\n return makeEffect(TAKE, {\n channel: patternOrChannel,\n pattern: multicastPattern\n });\n }\n\n if (channel(patternOrChannel)) {\n return makeEffect(TAKE, {\n channel: patternOrChannel\n });\n }\n\n if (process.env.NODE_ENV !== 'production') {\n throw new Error(\"take(patternOrChannel): argument \" + patternOrChannel + \" is not valid channel or a valid pattern\");\n }\n}\nvar takeMaybe = function takeMaybe() {\n var eff = take.apply(void 0, arguments);\n eff.payload.maybe = true;\n return eff;\n};\nfunction put(channel$1, action) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n check(channel$1, notUndef, 'put(channel, action): argument channel is undefined');\n check(channel$1, channel, \"put(channel, action): argument \" + channel$1 + \" is not a valid channel\");\n check(action, notUndef, 'put(channel, action): argument action is undefined');\n } else {\n check(channel$1, notUndef, 'put(action): argument action is undefined');\n }\n }\n\n if (undef(action)) {\n action = channel$1; // `undefined` instead of `null` to make default parameter work\n\n channel$1 = undefined;\n }\n\n return makeEffect(PUT, {\n channel: channel$1,\n action: action\n });\n}\nvar putResolve = function putResolve() {\n var eff = put.apply(void 0, arguments);\n eff.payload.resolve = true;\n return eff;\n};\nfunction all(effects) {\n var eff = makeEffect(ALL, effects);\n eff.combinator = true;\n return eff;\n}\nfunction race(effects) {\n var eff = makeEffect(RACE, effects);\n eff.combinator = true;\n return eff;\n} // this match getFnCallDescriptor logic\n\nvar validateFnDescriptor = function validateFnDescriptor(effectName, fnDescriptor) {\n check(fnDescriptor, notUndef, effectName + \": argument fn is undefined or null\");\n\n if (func(fnDescriptor)) {\n return;\n }\n\n var context = null;\n var fn;\n\n if (array(fnDescriptor)) {\n context = fnDescriptor[0];\n fn = fnDescriptor[1];\n check(fn, notUndef, effectName + \": argument of type [context, fn] has undefined or null `fn`\");\n } else if (object(fnDescriptor)) {\n context = fnDescriptor.context;\n fn = fnDescriptor.fn;\n check(fn, notUndef, effectName + \": argument of type {context, fn} has undefined or null `fn`\");\n } else {\n check(fnDescriptor, func, effectName + \": argument fn is not function\");\n return;\n }\n\n if (context && string(fn)) {\n check(context[fn], func, effectName + \": context arguments has no such method - \\\"\" + fn + \"\\\"\");\n return;\n }\n\n check(fn, func, effectName + \": unpacked fn argument (from [context, fn] or {context, fn}) is not a function\");\n};\n\nfunction getFnCallDescriptor(fnDescriptor, args) {\n var context = null;\n var fn;\n\n if (func(fnDescriptor)) {\n fn = fnDescriptor;\n } else {\n if (array(fnDescriptor)) {\n context = fnDescriptor[0];\n fn = fnDescriptor[1];\n } else {\n context = fnDescriptor.context;\n fn = fnDescriptor.fn;\n }\n\n if (context && string(fn) && func(context[fn])) {\n fn = context[fn];\n }\n }\n\n return {\n context: context,\n fn: fn,\n args: args\n };\n}\n\nvar isNotDelayEffect = function isNotDelayEffect(fn) {\n return fn !== delay;\n};\n\nfunction call(fnDescriptor) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n if (process.env.NODE_ENV !== 'production') {\n var arg0 = typeof args[0] === 'number' ? args[0] : 'ms';\n check(fnDescriptor, isNotDelayEffect, \"instead of writing `yield call(delay, \" + arg0 + \")` where delay is an effect from `redux-saga/effects` you should write `yield delay(\" + arg0 + \")`\");\n validateFnDescriptor('call', fnDescriptor);\n }\n\n return makeEffect(CALL, getFnCallDescriptor(fnDescriptor, args));\n}\nfunction apply(context, fn, args) {\n if (args === void 0) {\n args = [];\n }\n\n var fnDescriptor = [context, fn];\n\n if (process.env.NODE_ENV !== 'production') {\n validateFnDescriptor('apply', fnDescriptor);\n }\n\n return makeEffect(CALL, getFnCallDescriptor([context, fn], args));\n}\nfunction cps(fnDescriptor) {\n if (process.env.NODE_ENV !== 'production') {\n validateFnDescriptor('cps', fnDescriptor);\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n return makeEffect(CPS, getFnCallDescriptor(fnDescriptor, args));\n}\nfunction fork(fnDescriptor) {\n if (process.env.NODE_ENV !== 'production') {\n validateFnDescriptor('fork', fnDescriptor);\n }\n\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n\n return makeEffect(FORK, getFnCallDescriptor(fnDescriptor, args));\n}\nfunction spawn(fnDescriptor) {\n if (process.env.NODE_ENV !== 'production') {\n validateFnDescriptor('spawn', fnDescriptor);\n }\n\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n\n return detach(fork.apply(void 0, [fnDescriptor].concat(args)));\n}\nfunction join(taskOrTasks) {\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n throw new Error('join(...tasks) is not supported any more. Please use join([...tasks]) to join multiple tasks.');\n }\n\n if (array(taskOrTasks)) {\n taskOrTasks.forEach(function (t) {\n check(t, task, \"join([...tasks]): argument \" + t + \" is not a valid Task object \" + TEST_HINT);\n });\n } else {\n check(taskOrTasks, task, \"join(task): argument \" + taskOrTasks + \" is not a valid Task object \" + TEST_HINT);\n }\n }\n\n return makeEffect(JOIN, taskOrTasks);\n}\nfunction cancel(taskOrTasks) {\n if (taskOrTasks === void 0) {\n taskOrTasks = SELF_CANCELLATION;\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (arguments.length > 1) {\n throw new Error('cancel(...tasks) is not supported any more. Please use cancel([...tasks]) to cancel multiple tasks.');\n }\n\n if (array(taskOrTasks)) {\n taskOrTasks.forEach(function (t) {\n check(t, task, \"cancel([...tasks]): argument \" + t + \" is not a valid Task object \" + TEST_HINT);\n });\n } else if (taskOrTasks !== SELF_CANCELLATION && notUndef(taskOrTasks)) {\n check(taskOrTasks, task, \"cancel(task): argument \" + taskOrTasks + \" is not a valid Task object \" + TEST_HINT);\n }\n }\n\n return makeEffect(CANCEL, taskOrTasks);\n}\nfunction select(selector) {\n if (selector === void 0) {\n selector = identity;\n }\n\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n\n if (process.env.NODE_ENV !== 'production' && arguments.length) {\n check(arguments[0], notUndef, 'select(selector, [...]): argument selector is undefined');\n check(selector, func, \"select(selector, [...]): argument \" + selector + \" is not a function\");\n }\n\n return makeEffect(SELECT, {\n selector: selector,\n args: args\n });\n}\n/**\n channel(pattern, [buffer]) => creates a proxy channel for store actions\n**/\n\nfunction actionChannel(pattern$1, buffer$1) {\n if (process.env.NODE_ENV !== 'production') {\n check(pattern$1, pattern, 'actionChannel(pattern,...): argument pattern is not valid');\n\n if (arguments.length > 1) {\n check(buffer$1, notUndef, 'actionChannel(pattern, buffer): argument buffer is undefined');\n check(buffer$1, buffer, \"actionChannel(pattern, buffer): argument \" + buffer$1 + \" is not a valid buffer\");\n }\n }\n\n return makeEffect(ACTION_CHANNEL, {\n pattern: pattern$1,\n buffer: buffer$1\n });\n}\nfunction cancelled() {\n return makeEffect(CANCELLED, {});\n}\nfunction flush(channel$1) {\n if (process.env.NODE_ENV !== 'production') {\n check(channel$1, channel, \"flush(channel): argument \" + channel$1 + \" is not valid channel\");\n }\n\n return makeEffect(FLUSH, channel$1);\n}\nfunction getContext(prop) {\n if (process.env.NODE_ENV !== 'production') {\n check(prop, string, \"getContext(prop): argument \" + prop + \" is not a string\");\n }\n\n return makeEffect(GET_CONTEXT, prop);\n}\nfunction setContext(props) {\n if (process.env.NODE_ENV !== 'production') {\n check(props, object, createSetContextWarning(null, props));\n }\n\n return makeEffect(SET_CONTEXT, props);\n}\nvar delay =\n/*#__PURE__*/\ncall.bind(null, delayP);\n\nexport { kTrue as a, expanding as b, check as c, none as d, once as e, remove as f, internalErr as g, TAKE as h, PUT as i, ALL as j, RACE as k, CALL as l, CPS as m, FORK as n, JOIN as o, CANCEL as p, SELECT as q, ACTION_CHANNEL as r, CANCELLED as s, FLUSH as t, GET_CONTEXT as u, SET_CONTEXT as v, getMetaInfo as w, noop as x, createAllStyleChildCallbacks as y, createEmptyArray as z, assignWithSymbols as A, makeIterator as B, shouldComplete as C, flatMap as D, getLocation as E, createSetContextWarning as F, asyncIteratorSymbol as G, shouldCancel as H, shouldTerminate as I, logError as J, wrapSagaDispatch as K, identity as L, take as M, fork as N, cancel as O, call as P, actionChannel as Q, sliding as R, delay as S, race as T, buffers as U, detach as V, effectTypes as W, takeMaybe as X, put as Y, putResolve as Z, all as _, apply as $, cps as a0, spawn as a1, join as a2, select as a3, cancelled as a4, flush as a5, getContext as a6, setContext as a7 };\n","import '@redux-saga/symbols';\nimport '@babel/runtime/helpers/esm/extends';\nimport { channel, stringableFunc, func, notUndef } from '@redux-saga/is';\nimport { B as makeIterator, M as take, N as fork, O as cancel, P as call, Q as actionChannel, R as sliding, S as delay, T as race, c as check } from './chunk-e922c950.js';\nexport { W as effectTypes, M as take, X as takeMaybe, Y as put, Z as putResolve, _ as all, T as race, P as call, $ as apply, a0 as cps, N as fork, a1 as spawn, a2 as join, O as cancel, a3 as select, Q as actionChannel, a4 as cancelled, a5 as flush, a6 as getContext, a7 as setContext, S as delay } from './chunk-e922c950.js';\nimport '@redux-saga/delay-p';\n\nvar done = function done(value) {\n return {\n done: true,\n value: value\n };\n};\n\nvar qEnd = {};\nfunction safeName(patternOrChannel) {\n if (channel(patternOrChannel)) {\n return 'channel';\n }\n\n if (stringableFunc(patternOrChannel)) {\n return String(patternOrChannel);\n }\n\n if (func(patternOrChannel)) {\n return patternOrChannel.name;\n }\n\n return String(patternOrChannel);\n}\nfunction fsmIterator(fsm, startState, name) {\n var stateUpdater,\n errorState,\n effect,\n nextState = startState;\n\n function next(arg, error) {\n if (nextState === qEnd) {\n return done(arg);\n }\n\n if (error && !errorState) {\n nextState = qEnd;\n throw error;\n } else {\n stateUpdater && stateUpdater(arg);\n var currentState = error ? fsm[errorState](error) : fsm[nextState]();\n nextState = currentState.nextState;\n effect = currentState.effect;\n stateUpdater = currentState.stateUpdater;\n errorState = currentState.errorState;\n return nextState === qEnd ? done(arg) : effect;\n }\n }\n\n return makeIterator(next, function (error) {\n return next(null, error);\n }, name);\n}\n\nfunction takeEvery(patternOrChannel, worker) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var yTake = {\n done: false,\n value: take(patternOrChannel)\n };\n\n var yFork = function yFork(ac) {\n return {\n done: false,\n value: fork.apply(void 0, [worker].concat(args, [ac]))\n };\n };\n\n var action,\n setAction = function setAction(ac) {\n return action = ac;\n };\n\n return fsmIterator({\n q1: function q1() {\n return {\n nextState: 'q2',\n effect: yTake,\n stateUpdater: setAction\n };\n },\n q2: function q2() {\n return {\n nextState: 'q1',\n effect: yFork(action)\n };\n }\n }, 'q1', \"takeEvery(\" + safeName(patternOrChannel) + \", \" + worker.name + \")\");\n}\n\nfunction takeLatest(patternOrChannel, worker) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var yTake = {\n done: false,\n value: take(patternOrChannel)\n };\n\n var yFork = function yFork(ac) {\n return {\n done: false,\n value: fork.apply(void 0, [worker].concat(args, [ac]))\n };\n };\n\n var yCancel = function yCancel(task) {\n return {\n done: false,\n value: cancel(task)\n };\n };\n\n var task, action;\n\n var setTask = function setTask(t) {\n return task = t;\n };\n\n var setAction = function setAction(ac) {\n return action = ac;\n };\n\n return fsmIterator({\n q1: function q1() {\n return {\n nextState: 'q2',\n effect: yTake,\n stateUpdater: setAction\n };\n },\n q2: function q2() {\n return task ? {\n nextState: 'q3',\n effect: yCancel(task)\n } : {\n nextState: 'q1',\n effect: yFork(action),\n stateUpdater: setTask\n };\n },\n q3: function q3() {\n return {\n nextState: 'q1',\n effect: yFork(action),\n stateUpdater: setTask\n };\n }\n }, 'q1', \"takeLatest(\" + safeName(patternOrChannel) + \", \" + worker.name + \")\");\n}\n\nfunction takeLeading(patternOrChannel, worker) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n var yTake = {\n done: false,\n value: take(patternOrChannel)\n };\n\n var yCall = function yCall(ac) {\n return {\n done: false,\n value: call.apply(void 0, [worker].concat(args, [ac]))\n };\n };\n\n var action;\n\n var setAction = function setAction(ac) {\n return action = ac;\n };\n\n return fsmIterator({\n q1: function q1() {\n return {\n nextState: 'q2',\n effect: yTake,\n stateUpdater: setAction\n };\n },\n q2: function q2() {\n return {\n nextState: 'q1',\n effect: yCall(action)\n };\n }\n }, 'q1', \"takeLeading(\" + safeName(patternOrChannel) + \", \" + worker.name + \")\");\n}\n\nfunction throttle(delayLength, pattern, worker) {\n for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n args[_key - 3] = arguments[_key];\n }\n\n var action, channel;\n var yActionChannel = {\n done: false,\n value: actionChannel(pattern, sliding(1))\n };\n\n var yTake = function yTake() {\n return {\n done: false,\n value: take(channel)\n };\n };\n\n var yFork = function yFork(ac) {\n return {\n done: false,\n value: fork.apply(void 0, [worker].concat(args, [ac]))\n };\n };\n\n var yDelay = {\n done: false,\n value: delay(delayLength)\n };\n\n var setAction = function setAction(ac) {\n return action = ac;\n };\n\n var setChannel = function setChannel(ch) {\n return channel = ch;\n };\n\n return fsmIterator({\n q1: function q1() {\n return {\n nextState: 'q2',\n effect: yActionChannel,\n stateUpdater: setChannel\n };\n },\n q2: function q2() {\n return {\n nextState: 'q3',\n effect: yTake(),\n stateUpdater: setAction\n };\n },\n q3: function q3() {\n return {\n nextState: 'q4',\n effect: yFork(action)\n };\n },\n q4: function q4() {\n return {\n nextState: 'q2',\n effect: yDelay\n };\n }\n }, 'q1', \"throttle(\" + safeName(pattern) + \", \" + worker.name + \")\");\n}\n\nfunction retry(maxTries, delayLength, fn) {\n var counter = maxTries;\n\n for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n args[_key - 3] = arguments[_key];\n }\n\n var yCall = {\n done: false,\n value: call.apply(void 0, [fn].concat(args))\n };\n var yDelay = {\n done: false,\n value: delay(delayLength)\n };\n return fsmIterator({\n q1: function q1() {\n return {\n nextState: 'q2',\n effect: yCall,\n errorState: 'q10'\n };\n },\n q2: function q2() {\n return {\n nextState: qEnd\n };\n },\n q10: function q10(error) {\n counter -= 1;\n\n if (counter <= 0) {\n throw error;\n }\n\n return {\n nextState: 'q1',\n effect: yDelay\n };\n }\n }, 'q1', \"retry(\" + fn.name + \")\");\n}\n\nfunction debounceHelper(delayLength, patternOrChannel, worker) {\n for (var _len = arguments.length, args = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {\n args[_key - 3] = arguments[_key];\n }\n\n var action, raceOutput;\n var yTake = {\n done: false,\n value: take(patternOrChannel)\n };\n var yRace = {\n done: false,\n value: race({\n action: take(patternOrChannel),\n debounce: delay(delayLength)\n })\n };\n\n var yFork = function yFork(ac) {\n return {\n done: false,\n value: fork.apply(void 0, [worker].concat(args, [ac]))\n };\n };\n\n var yNoop = function yNoop(value) {\n return {\n done: false,\n value: value\n };\n };\n\n var setAction = function setAction(ac) {\n return action = ac;\n };\n\n var setRaceOutput = function setRaceOutput(ro) {\n return raceOutput = ro;\n };\n\n return fsmIterator({\n q1: function q1() {\n return {\n nextState: 'q2',\n effect: yTake,\n stateUpdater: setAction\n };\n },\n q2: function q2() {\n return {\n nextState: 'q3',\n effect: yRace,\n stateUpdater: setRaceOutput\n };\n },\n q3: function q3() {\n return raceOutput.debounce ? {\n nextState: 'q1',\n effect: yFork(action)\n } : {\n nextState: 'q2',\n effect: yNoop(raceOutput.action),\n stateUpdater: setAction\n };\n }\n }, 'q1', \"debounce(\" + safeName(patternOrChannel) + \", \" + worker.name + \")\");\n}\n\nvar validateTakeEffect = function validateTakeEffect(fn, patternOrChannel, worker) {\n check(patternOrChannel, notUndef, fn.name + \" requires a pattern or channel\");\n check(worker, notUndef, fn.name + \" requires a saga parameter\");\n};\n\nfunction takeEvery$1(patternOrChannel, worker) {\n if (process.env.NODE_ENV !== 'production') {\n validateTakeEffect(takeEvery$1, patternOrChannel, worker);\n }\n\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n\n return fork.apply(void 0, [takeEvery, patternOrChannel, worker].concat(args));\n}\nfunction takeLatest$1(patternOrChannel, worker) {\n if (process.env.NODE_ENV !== 'production') {\n validateTakeEffect(takeLatest$1, patternOrChannel, worker);\n }\n\n for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n args[_key2 - 2] = arguments[_key2];\n }\n\n return fork.apply(void 0, [takeLatest, patternOrChannel, worker].concat(args));\n}\nfunction takeLeading$1(patternOrChannel, worker) {\n if (process.env.NODE_ENV !== 'production') {\n validateTakeEffect(takeLeading$1, patternOrChannel, worker);\n }\n\n for (var _len3 = arguments.length, args = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n args[_key3 - 2] = arguments[_key3];\n }\n\n return fork.apply(void 0, [takeLeading, patternOrChannel, worker].concat(args));\n}\nfunction throttle$1(ms, pattern, worker) {\n if (process.env.NODE_ENV !== 'production') {\n check(pattern, notUndef, 'throttle requires a pattern');\n check(worker, notUndef, 'throttle requires a saga parameter');\n }\n\n for (var _len4 = arguments.length, args = new Array(_len4 > 3 ? _len4 - 3 : 0), _key4 = 3; _key4 < _len4; _key4++) {\n args[_key4 - 3] = arguments[_key4];\n }\n\n return fork.apply(void 0, [throttle, ms, pattern, worker].concat(args));\n}\nfunction retry$1(maxTries, delayLength, worker) {\n for (var _len5 = arguments.length, args = new Array(_len5 > 3 ? _len5 - 3 : 0), _key5 = 3; _key5 < _len5; _key5++) {\n args[_key5 - 3] = arguments[_key5];\n }\n\n return call.apply(void 0, [retry, maxTries, delayLength, worker].concat(args));\n}\nfunction debounce(delayLength, pattern, worker) {\n for (var _len6 = arguments.length, args = new Array(_len6 > 3 ? _len6 - 3 : 0), _key6 = 3; _key6 < _len6; _key6++) {\n args[_key6 - 3] = arguments[_key6];\n }\n\n return fork.apply(void 0, [debounceHelper, delayLength, pattern, worker].concat(args));\n}\n\nexport { debounce, retry$1 as retry, takeEvery$1 as takeEvery, takeLatest$1 as takeLatest, takeLeading$1 as takeLeading, throttle$1 as throttle };\n","/// <reference path='../typings/index.d.ts' />\nimport {\n call,\n cancel,\n fork,\n take,\n put,\n all,\n takeLatest,\n select,\n} from \"redux-saga/effects\";\nimport { normalize } from \"normalizr\";\nimport {\n isRequest,\n isRefresh,\n successOf,\n failureOf,\n requestOf,\n} from \"./actions\";\nimport { humps } from \"./lib\";\nimport { makeStateSelector } from \"./selector\";\nimport { Apis } from \"./apis\";\n\n// hooks\nconst sagaHooks = {\n beforeRequest: null,\n afterRequest: null,\n};\n\nexport function registerHooks(hooks = {}) {\n sagaHooks.beforeRequest = hooks.beforeRequest || null;\n sagaHooks.afterRequest = hooks.afterRequest || null;\n}\n\n/**\n *\n * @param {string} key\n * @param {import(\"@36node/redux-api\").Action} action\n * @param {import(\"@36node/redux-api\").Meta} meta\n */\nexport function* callAPI(key, action, meta) {\n if (!key) return;\n if (!action) return;\n\n const { payload } = action;\n const api = Apis.get(key);\n\n if (!api) {\n throw new Error(`redux-api: api ${key} should be registered`);\n }\n\n const endpoint = api.endpoint;\n if (!endpoint) {\n throw new Error(`redux-api: api ${key} should has endpoint`);\n }\n\n const schema = api.schema;\n\n if (sagaHooks.beforeRequest) {\n const passed = yield call(sagaHooks.beforeRequest, key, action, api);\n // if before request hook return false, will cancel current request\n if (!passed) {\n return;\n }\n }\n\n let epResult;\n let epError;\n try {\n epResult = (yield call(endpoint, payload)) || {};\n const { body = {}, headers = {} } = epResult;\n const data = schema ? normalize(body, schema) : { result: body };\n\n yield put({\n type: successOf(key),\n payload: { ...data, ...humps(headers) },\n key,\n meta,\n });\n } catch (err) {\n yield put({\n type: failureOf(key),\n error: err,\n key,\n meta,\n });\n epError = err;\n }\n\n if (sagaHooks.afterRequest) {\n yield call(sagaHooks.afterRequest, key, action, api, epResult, epError);\n }\n}\n\nexport function* watchRequest() {\n const tasks = {};\n while (true) {\n const action = yield take(isRequest);\n const { meta = {}, key } = action;\n if (tasks[key]) yield cancel(tasks[key]); //cancel last task of key\n tasks[key] = yield fork(callAPI, key, action, meta);\n }\n}\n\nexport function* watchRefresh(action) {\n // const action = yield take(isRefresh);\n const { key } = action;\n const api = Apis.get(key);\n if (!api) {\n throw new Error(`redux-api: api ${key} should be registered`);\n }\n const stateSelector = makeStateSelector(api.reduxPath);\n const apiState = yield select(stateSelector);\n\n // put last request action\n yield put({\n type: requestOf(key),\n key,\n payload: apiState.request,\n meta: apiState.meta,\n });\n // while (true) {\n // }\n}\n\nexport function* watchApis() {\n yield all([fork(watchRequest), takeLatest(isRefresh, watchRefresh)]);\n}\n","import { requestOf, clearOf, refreshOf } from \"./actions\";\nimport { registerSaga, Apis } from \"./apis\";\nimport makeApiSelector from \"./selector\";\nimport { camelCaseKey } from \"./lib\";\n\nexport { default as apiReducers, apiReducer, entitiesReducer } from \"./reducer\";\nexport { watchApis, registerHooks } from \"./saga\";\nexport {\n isApi,\n isSuccess,\n isRequest,\n isFailure,\n successOf,\n failureOf,\n requestOf,\n} from \"./actions\";\n\nclass Api {\n constructor(key, endpoint, schema, reduxPath) {\n this._key = key;\n this._endpoint = endpoint;\n this._schema = schema;\n this._reduxPath = camelCaseKey(reduxPath || key);\n }\n\n get endpoint() {\n return this._endpoint;\n }\n\n get key() {\n return this._key;\n }\n\n get schema() {\n return this._schema;\n }\n\n get reduxPath() {\n return this._reduxPath;\n }\n\n get actions() {\n return {\n request: (payload, meta = {}) => ({\n type: requestOf(this.key),\n key: this.key,\n payload,\n meta,\n }),\n\n clear: (meta = {}) => ({\n type: clearOf(this.key),\n key: this.key,\n meta,\n }),\n\n refresh: (meta = {}) => ({\n type: refreshOf(this.key),\n key: this.key,\n meta,\n }),\n };\n }\n}\n\nexport function createApiActions(key, opts = {}) {\n if (!key) {\n throw new Error(\"Api need a key!\");\n }\n\n if (!opts.endpoint) {\n throw new Error(\"Api need an endpoint function\");\n }\n\n if (Apis.has(key)) {\n return Apis.get(key).actions;\n }\n\n const api = new Api(key, opts.endpoint, opts.schema, opts.reduxPath);\n registerSaga(key, api);\n return api.actions;\n}\n\nexport function createApiSelector(key, schema) {\n return makeApiSelector(key, schema);\n}\n\nexport function apiSelector(key, schema) {\n console.warn(\n \"apiSelector function is deprecated, please use createApiSelector \"\n );\n return makeApiSelector(key, schema);\n}\n"],"names":["PREFIX","REQUEST","SUCCESS","FAILURE","CLEAR","REFRESH","successOf","key","requestOf","failureOf","clearOf","refreshOf","isApi","action","type","startsWith","isRequest","endsWith","isSuccess","isFailure","isClear","isRefresh","Apis","Map","registerSaga","api","set","initState","loading","result","request","meta","total","r","state","payload","error","xTotalCount","append","union","customizer","objValue","srcValue","object","source","stack","size","isArray","entitiesReducer","entities","mergeWith","apiReducer","get","setWith","reduxPath","clone","apiReducers","apis","createIteratee","converter","self","value","isObjectLike","createHumps","keyConverter","humps","node","map","isPlainObject","transform","camelCase","camelCaseKey","split","k","join","entitiesSelector","makeStateSelector","path","makeApiSelector","schema","stateSelector","createSelector","deResult","denormalize","createSymbol","name","CANCEL","IO","MULTICAST","SELF_CANCELLATION","undef","v","notUndef","func","f","string","s","array","Array","pattern","pat","symbol","every","channel","ch","take","close","stringableFunc","hasOwnProperty","sym","Symbol","constructor","prototype","multicast","delayP","ms","val","timeoutId","promise","Promise","resolve","setTimeout","clearTimeout","konst","kTrue","noop","identity","kThrow","err","kReturn","done","makeIterator","next","thro","iterator","throw","return","isSagaIterator","BUFFER_OVERFLOW","ON_OVERFLOW_THROW","ON_OVERFLOW_DROP","ON_OVERFLOW_SLIDE","ON_OVERFLOW_EXPAND","zeroBuffer","isEmpty","put","ringBuffer","limit","overflowAction","arr","length","pushIndex","popIndex","push","it","flush","items","doubledLimit","Error","none","fixed","dropping","sliding","expanding","initialSize","buffers","Object","freeze","TAKE","PUT","ALL","RACE","CALL","CPS","FORK","JOIN","SELECT","ACTION_CHANNEL","CANCELLED","FLUSH","GET_CONTEXT","SET_CONTEXT","effectTypes","makeEffect","_ref","combinator","patternOrChannel","multicastPattern","channel$1","undefined","all","effects","eff","getFnCallDescriptor","fnDescriptor","args","fn","context","call","_len","arguments","_key","fork","_len3","_key3","cancel","taskOrTasks","select","selector","_len5","_key5","delay","bind","qEnd","safeName","String","fsmIterator","fsm","startState","stateUpdater","errorState","effect","nextState","arg","currentState","takeLatest","worker","task","yTake","yFork","ac","apply","concat","yCancel","setTask","t","setAction","q1","q2","q3","takeLatest$1","_len2","_key2","sagaHooks","beforeRequest","afterRequest","registerHooks","hooks","callAPI","endpoint","epResult","epError","body","headers","data","normalize","watchRequest","tasks","watchRefresh","apiState","watchApis","Api","_endpoint","_schema","_reduxPath","this","clear","refresh","createApiActions","opts","has","actions","createApiSelector","apiSelector","console","warn"],"mappings":"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"}
\No newline at end of file