redux-saga-watch-actions
Version:
Easily create watchers to map actions to sagas
87 lines (66 loc) • 2.69 kB
JavaScript
;
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;