'use strict'; function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var symbols = require('@redux-saga/symbols'); var _extends = _interopDefault(require('@babel/runtime/helpers/extends')); var is = require('@redux-saga/is'); var delayP = _interopDefault(require('@redux-saga/delay-p')); var konst = function konst(v) { return function () { return v; }; }; var kTrue = /*#__PURE__*/ konst(true); exports.noop = function noop() {}; if ( typeof Proxy !== 'undefined') { exports.noop = /*#__PURE__*/ new Proxy(exports.noop, { set: function set() { throw internalErr('There was an attempt to assign a property to internal `noop` function.'); } }); } var identity = function identity(v) { return v; }; var hasSymbol = typeof Symbol === 'function'; var asyncIteratorSymbol = hasSymbol && Symbol.asyncIterator ? Symbol.asyncIterator : '@@asyncIterator'; function check(value, predicate, error) { if (!predicate(value)) { throw new Error(error); } } var assignWithSymbols = function assignWithSymbols(target, source) { _extends(target, source); if (Object.getOwnPropertySymbols) { Object.getOwnPropertySymbols(source).forEach(function (s) { target[s] = source[s]; }); } }; var flatMap = function flatMap(mapper, arr) { var _ref; return (_ref = []).concat.apply(_ref, arr.map(mapper)); }; function remove(array, item) { var index = array.indexOf(item); if (index >= 0) { array.splice(index, 1); } } function once(fn) { var called = false; return function () { if (called) { return; } called = true; fn(); }; } var kThrow = function kThrow(err) { throw err; }; var kReturn = function kReturn(value) { return { value: value, done: true }; }; function makeIterator(next, thro, name) { if (thro === void 0) { thro = kThrow; } if (name === void 0) { name = 'iterator'; } var iterator = { meta: { name: name }, next: next, throw: thro, return: kReturn, isSagaIterator: true }; if (typeof Symbol !== 'undefined') { iterator[Symbol.iterator] = function () { return iterator; }; } return iterator; } function logError(error, _ref2) { var sagaStack = _ref2.sagaStack; /*eslint-disable no-console*/ console.error(error); console.error(sagaStack); } var internalErr = function internalErr(err) { 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"); }; var createSetContextWarning = function createSetContextWarning(ctx, props) { return (ctx ? ctx + '.' : '') + "setContext(props): argument " + props + " is not a plain object"; }; var 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 var createEmptyArray = function createEmptyArray(n) { return Array.apply(null, new Array(n)); }; var wrapSagaDispatch = function wrapSagaDispatch(dispatch) { return function (action) { { check(action, function (ac) { return !Object.isFrozen(ac); }, FROZEN_ACTION_ERROR); } return dispatch(Object.defineProperty(action, symbols.SAGA_ACTION, { value: true })); }; }; var shouldTerminate = function shouldTerminate(res) { return res === symbols.TERMINATE; }; var shouldCancel = function shouldCancel(res) { return res === symbols.TASK_CANCEL; }; var shouldComplete = function shouldComplete(res) { return shouldTerminate(res) || shouldCancel(res); }; function createAllStyleChildCallbacks(shape, parentCallback) { var keys = Object.keys(shape); var totalCount = keys.length; { check(totalCount, function (c) { return c > 0; }, 'createAllStyleChildCallbacks: get an empty array or object'); } var completedCount = 0; var completed; var results = is.array(shape) ? createEmptyArray(totalCount) : {}; var childCallbacks = {}; function checkEnd() { if (completedCount === totalCount) { completed = true; parentCallback(results); } } keys.forEach(function (key) { var chCbAtKey = function chCbAtKey(res, isErr) { if (completed) { return; } if (isErr || shouldComplete(res)) { parentCallback.cancel(); parentCallback(res, isErr); } else { results[key] = res; completedCount++; checkEnd(); } }; chCbAtKey.cancel = exports.noop; childCallbacks[key] = chCbAtKey; }); parentCallback.cancel = function () { if (!completed) { completed = true; keys.forEach(function (key) { return childCallbacks[key].cancel(); }); } }; return childCallbacks; } function getMetaInfo(fn) { return { name: fn.name || 'anonymous', location: getLocation(fn) }; } function getLocation(instrumented) { return instrumented[symbols.SAGA_LOCATION]; } var BUFFER_OVERFLOW = "Channel's Buffer overflow!"; var ON_OVERFLOW_THROW = 1; var ON_OVERFLOW_DROP = 2; var ON_OVERFLOW_SLIDE = 3; var ON_OVERFLOW_EXPAND = 4; var zeroBuffer = { isEmpty: kTrue, put: exports.noop, take: exports.noop }; function ringBuffer(limit, overflowAction) { if (limit === void 0) { limit = 10; } var arr = new Array(limit); var length = 0; var pushIndex = 0; var popIndex = 0; var push = function push(it) { arr[pushIndex] = it; pushIndex = (pushIndex + 1) % limit; length++; }; var take = function take() { if (length != 0) { var it = arr[popIndex]; arr[popIndex] = null; length--; popIndex = (popIndex + 1) % limit; return it; } }; var flush = function flush() { var items = []; while (length) { items.push(take()); } return items; }; return { isEmpty: function isEmpty() { return length == 0; }, put: function put(it) { if (length < limit) { push(it); } else { var doubledLimit; switch (overflowAction) { case ON_OVERFLOW_THROW: throw new Error(BUFFER_OVERFLOW); case ON_OVERFLOW_SLIDE: arr[pushIndex] = it; pushIndex = (pushIndex + 1) % limit; popIndex = pushIndex; break; case ON_OVERFLOW_EXPAND: doubledLimit = 2 * limit; arr = flush(); length = arr.length; pushIndex = arr.length; popIndex = 0; arr.length = doubledLimit; limit = doubledLimit; push(it); break; default: // DROP } } }, take: take, flush: flush }; } var none = function none() { return zeroBuffer; }; var fixed = function fixed(limit) { return ringBuffer(limit, ON_OVERFLOW_THROW); }; var dropping = function dropping(limit) { return ringBuffer(limit, ON_OVERFLOW_DROP); }; var sliding = function sliding(limit) { return ringBuffer(limit, ON_OVERFLOW_SLIDE); }; var expanding = function expanding(initialSize) { return ringBuffer(initialSize, ON_OVERFLOW_EXPAND); }; var buffers = /*#__PURE__*/Object.freeze({ __proto__: null, none: none, fixed: fixed, dropping: dropping, sliding: sliding, expanding: expanding }); var TAKE = 'TAKE'; var PUT = 'PUT'; var ALL = 'ALL'; var RACE = 'RACE'; var CALL = 'CALL'; var CPS = 'CPS'; var FORK = 'FORK'; var JOIN = 'JOIN'; var CANCEL = 'CANCEL'; var SELECT = 'SELECT'; var ACTION_CHANNEL = 'ACTION_CHANNEL'; var CANCELLED = 'CANCELLED'; var FLUSH = 'FLUSH'; var GET_CONTEXT = 'GET_CONTEXT'; var SET_CONTEXT = 'SET_CONTEXT'; var effectTypes = /*#__PURE__*/Object.freeze({ __proto__: null, TAKE: TAKE, PUT: PUT, ALL: ALL, RACE: RACE, CALL: CALL, CPS: CPS, FORK: FORK, JOIN: JOIN, CANCEL: CANCEL, SELECT: SELECT, ACTION_CHANNEL: ACTION_CHANNEL, CANCELLED: CANCELLED, FLUSH: FLUSH, GET_CONTEXT: GET_CONTEXT, SET_CONTEXT: SET_CONTEXT }); var TEST_HINT = '\n(HINT: if you are getting these errors in tests, consider using createMockTask from @redux-saga/testing-utils)'; var makeEffect = function makeEffect(type, payload) { var _ref; return _ref = {}, _ref[symbols.IO] = true, _ref.combinator = false, _ref.type = type, _ref.payload = payload, _ref; }; var isForkEffect = function isForkEffect(eff) { return is.effect(eff) && eff.type === FORK; }; var detach = function detach(eff) { { check(eff, isForkEffect, 'detach(eff): argument must be a fork effect'); } return makeEffect(FORK, _extends({}, eff.payload, { detached: true })); }; function take(patternOrChannel, multicastPattern) { if (patternOrChannel === void 0) { patternOrChannel = '*'; } if ( arguments.length) { check(arguments[0], is.notUndef, 'take(patternOrChannel): patternOrChannel is undefined'); } if (is.pattern(patternOrChannel)) { if (is.notUndef(multicastPattern)) { /* eslint-disable no-console */ console.warn("take(pattern) takes one argument but two were provided. Consider passing an array for listening to several action types"); } return makeEffect(TAKE, { pattern: patternOrChannel }); } if (is.multicast(patternOrChannel) && is.notUndef(multicastPattern) && is.pattern(multicastPattern)) { return makeEffect(TAKE, { channel: patternOrChannel, pattern: multicastPattern }); } if (is.channel(patternOrChannel)) { if (is.notUndef(multicastPattern)) { /* eslint-disable no-console */ console.warn("take(channel) takes one argument but two were provided. Second argument is ignored."); } return makeEffect(TAKE, { channel: patternOrChannel }); } { throw new Error("take(patternOrChannel): argument " + patternOrChannel + " is not valid channel or a valid pattern"); } } var takeMaybe = function takeMaybe() { var eff = take.apply(void 0, arguments); eff.payload.maybe = true; return eff; }; function put(channel, action) { { if (arguments.length > 1) { check(channel, is.notUndef, 'put(channel, action): argument channel is undefined'); check(channel, is.channel, "put(channel, action): argument " + channel + " is not a valid channel"); check(action, is.notUndef, 'put(channel, action): argument action is undefined'); } else { check(channel, is.notUndef, 'put(action): argument action is undefined'); } } if (is.undef(action)) { action = channel; // `undefined` instead of `null` to make default parameter work channel = undefined; } return makeEffect(PUT, { channel: channel, action: action }); } var putResolve = function putResolve() { var eff = put.apply(void 0, arguments); eff.payload.resolve = true; return eff; }; function all(effects) { var eff = makeEffect(ALL, effects); eff.combinator = true; return eff; } function race(effects) { var eff = makeEffect(RACE, effects); eff.combinator = true; return eff; } // this match getFnCallDescriptor logic var validateFnDescriptor = function validateFnDescriptor(effectName, fnDescriptor) { check(fnDescriptor, is.notUndef, effectName + ": argument fn is undefined or null"); if (is.func(fnDescriptor)) { return; } var context = null; var fn; if (is.array(fnDescriptor)) { context = fnDescriptor[0]; fn = fnDescriptor[1]; check(fn, is.notUndef, effectName + ": argument of type [context, fn] has undefined or null `fn`"); } else if (is.object(fnDescriptor)) { context = fnDescriptor.context; fn = fnDescriptor.fn; check(fn, is.notUndef, effectName + ": argument of type {context, fn} has undefined or null `fn`"); } else { check(fnDescriptor, is.func, effectName + ": argument fn is not function"); return; } if (context && is.string(fn)) { check(context[fn], is.func, effectName + ": context arguments has no such method - \"" + fn + "\""); return; } check(fn, is.func, effectName + ": unpacked fn argument (from [context, fn] or {context, fn}) is not a function"); }; function getFnCallDescriptor(fnDescriptor, args) { var context = null; var fn; if (is.func(fnDescriptor)) { fn = fnDescriptor; } else { if (is.array(fnDescriptor)) { context = fnDescriptor[0]; fn = fnDescriptor[1]; } else { context = fnDescriptor.context; fn = fnDescriptor.fn; } if (context && is.string(fn) && is.func(context[fn])) { fn = context[fn]; } } return { context: context, fn: fn, args: args }; } var isNotDelayEffect = function isNotDelayEffect(fn) { return fn !== delay; }; function call(fnDescriptor) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } { var arg0 = typeof args[0] === 'number' ? args[0] : 'ms'; 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 + ")`"); validateFnDescriptor('call', fnDescriptor); } return makeEffect(CALL, getFnCallDescriptor(fnDescriptor, args)); } function apply(context, fn, args) { if (args === void 0) { args = []; } var fnDescriptor = [context, fn]; { validateFnDescriptor('apply', fnDescriptor); } return makeEffect(CALL, getFnCallDescriptor([context, fn], args)); } function cps(fnDescriptor) { { validateFnDescriptor('cps', fnDescriptor); } for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { args[_key2 - 1] = arguments[_key2]; } return makeEffect(CPS, getFnCallDescriptor(fnDescriptor, args)); } function fork(fnDescriptor) { { validateFnDescriptor('fork', fnDescriptor); check(fnDescriptor, function (arg) { return !is.effect(arg); }, 'fork: argument must not be an effect'); } for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { args[_key3 - 1] = arguments[_key3]; } return makeEffect(FORK, getFnCallDescriptor(fnDescriptor, args)); } function spawn(fnDescriptor) { { validateFnDescriptor('spawn', fnDescriptor); } for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) { args[_key4 - 1] = arguments[_key4]; } return detach(fork.apply(void 0, [fnDescriptor].concat(args))); } function join(taskOrTasks) { { if (arguments.length > 1) { throw new Error('join(...tasks) is not supported any more. Please use join([...tasks]) to join multiple tasks.'); } if (is.array(taskOrTasks)) { taskOrTasks.forEach(function (t) { check(t, is.task, "join([...tasks]): argument " + t + " is not a valid Task object " + TEST_HINT); }); } else { check(taskOrTasks, is.task, "join(task): argument " + taskOrTasks + " is not a valid Task object " + TEST_HINT); } } return makeEffect(JOIN, taskOrTasks); } function cancel(taskOrTasks) { if (taskOrTasks === void 0) { taskOrTasks = symbols.SELF_CANCELLATION; } { if (arguments.length > 1) { throw new Error('cancel(...tasks) is not supported any more. Please use cancel([...tasks]) to cancel multiple tasks.'); } if (is.array(taskOrTasks)) { taskOrTasks.forEach(function (t) { check(t, is.task, "cancel([...tasks]): argument " + t + " is not a valid Task object " + TEST_HINT); }); } else if (taskOrTasks !== symbols.SELF_CANCELLATION && is.notUndef(taskOrTasks)) { check(taskOrTasks, is.task, "cancel(task): argument " + taskOrTasks + " is not a valid Task object " + TEST_HINT); } } return makeEffect(CANCEL, taskOrTasks); } function select(selector) { if (selector === void 0) { selector = identity; } for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) { args[_key5 - 1] = arguments[_key5]; } if ( arguments.length) { check(arguments[0], is.notUndef, 'select(selector, [...]): argument selector is undefined'); check(selector, is.func, "select(selector, [...]): argument " + selector + " is not a function"); } return makeEffect(SELECT, { selector: selector, args: args }); } /** channel(pattern, [buffer]) => creates a proxy channel for store actions **/ function actionChannel(pattern, buffer) { { check(pattern, is.pattern, 'actionChannel(pattern,...): argument pattern is not valid'); if (arguments.length > 1) { check(buffer, is.notUndef, 'actionChannel(pattern, buffer): argument buffer is undefined'); check(buffer, is.buffer, "actionChannel(pattern, buffer): argument " + buffer + " is not a valid buffer"); } } return makeEffect(ACTION_CHANNEL, { pattern: pattern, buffer: buffer }); } function cancelled() { return makeEffect(CANCELLED, {}); } function flush(channel) { { check(channel, is.channel, "flush(channel): argument " + channel + " is not valid channel"); } return makeEffect(FLUSH, channel); } function getContext(prop) { { check(prop, is.string, "getContext(prop): argument " + prop + " is not a string"); } return makeEffect(GET_CONTEXT, prop); } function setContext(props) { { check(props, is.object, createSetContextWarning(null, props)); } return makeEffect(SET_CONTEXT, props); } var delay = /*#__PURE__*/ call.bind(null, delayP); exports.ACTION_CHANNEL = ACTION_CHANNEL; exports.ALL = ALL; exports.CALL = CALL; exports.CANCEL = CANCEL; exports.CANCELLED = CANCELLED; exports.CPS = CPS; exports.FLUSH = FLUSH; exports.FORK = FORK; exports.GET_CONTEXT = GET_CONTEXT; exports.JOIN = JOIN; exports.PUT = PUT; exports.RACE = RACE; exports.SELECT = SELECT; exports.SET_CONTEXT = SET_CONTEXT; exports.TAKE = TAKE; exports.actionChannel = actionChannel; exports.all = all; exports.apply = apply; exports.assignWithSymbols = assignWithSymbols; exports.asyncIteratorSymbol = asyncIteratorSymbol; exports.buffers = buffers; exports.call = call; exports.cancel = cancel; exports.cancelled = cancelled; exports.check = check; exports.cps = cps; exports.createAllStyleChildCallbacks = createAllStyleChildCallbacks; exports.createEmptyArray = createEmptyArray; exports.createSetContextWarning = createSetContextWarning; exports.delay = delay; exports.detach = detach; exports.effectTypes = effectTypes; exports.expanding = expanding; exports.flatMap = flatMap; exports.flush = flush; exports.fork = fork; exports.getContext = getContext; exports.getLocation = getLocation; exports.getMetaInfo = getMetaInfo; exports.identity = identity; exports.internalErr = internalErr; exports.join = join; exports.kTrue = kTrue; exports.logError = logError; exports.makeIterator = makeIterator; exports.none = none; exports.once = once; exports.put = put; exports.putResolve = putResolve; exports.race = race; exports.remove = remove; exports.select = select; exports.setContext = setContext; exports.shouldCancel = shouldCancel; exports.shouldComplete = shouldComplete; exports.shouldTerminate = shouldTerminate; exports.sliding = sliding; exports.spawn = spawn; exports.take = take; exports.takeMaybe = takeMaybe; exports.wrapSagaDispatch = wrapSagaDispatch;