UNPKG

redux-saga-watch-actions

Version:

Easily create watchers to map actions to sagas

87 lines (66 loc) 2.69 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.createInjectSaga = exports.createCancelAllTasks = exports.createCancelTask = void 0; var _tinyInvariant = _interopRequireDefault(require("tiny-invariant")); const createCancelTask = tasks => key => { if (!tasks[key]) { return; } const task = tasks[key].task; if (!task) { return; } const result = task.cancel(); delete tasks[key]; return result; }; exports.createCancelTask = createCancelTask; const createCancelAllTasks = (tasks, cancelTask) => () => Object.keys(tasks).map(key => cancelTask(key)); exports.createCancelAllTasks = createCancelAllTasks; const createInjectSaga = (tasks, cancelTask, runSaga) => ({ key, saga, args } = {}) => { !key ? process.env.NODE_ENV !== "production" ? (0, _tinyInvariant.default)(false, 'injectSaga expects a key option to identify this saga') : invariant(false) : void 0; !saga ? process.env.NODE_ENV !== "production" ? (0, _tinyInvariant.default)(false, 'injectSaga expects a saga option to specify which saga to run') : invariant(false) : void 0; !(args === undefined || Array.isArray(args)) ? process.env.NODE_ENV !== "production" ? (0, _tinyInvariant.default)(false, 'injectSaga expects args option to be undefined or an array of args') : invariant(false) : void 0; let task; let prevSaga; if (tasks[key]) { task = tasks[key].task; prevSaga = tasks[key].prevSaga; } if (task && prevSaga !== saga) { cancelTask(key); task = undefined; } const alreadyRunning = task && typeof task.isRunning === 'function' ? task.isRunning() : false; if (task === undefined || !alreadyRunning) { task = args ? runSaga(saga, args) : runSaga(saga); tasks[key] = { task, prevSaga: saga }; } return task; }; exports.createInjectSaga = createInjectSaga; const createSagaMiddlewareHelpers = (sagaMiddleware, tasks = {}) => { !(sagaMiddleware && typeof sagaMiddleware.run === 'function') ? process.env.NODE_ENV !== "production" ? (0, _tinyInvariant.default)(false, 'createSagaMiddlewareHelpers expects a sagaMiddleware to include a run method') : invariant(false) : void 0; const runSaga = (...args) => sagaMiddleware.run(...args); const cancelTask = createCancelTask(tasks); const cancelAllTasks = createCancelAllTasks(tasks, cancelTask); const injectSaga = createInjectSaga(tasks, cancelTask, runSaga); return { cancelAllTasks, cancelTask, injectSaga, runSaga }; }; var _default = createSagaMiddlewareHelpers; exports.default = _default;