UNPKG

typescript-fsa-redux-saga

Version:
72 lines 2.88 kB
"use strict"; exports.__esModule = true; var tslib_1 = require("tslib"); var effects_1 = require("redux-saga/effects"); function bindAsyncAction(actionCreator, options) { if (options === void 0) { options = {}; } return function (worker) { function boundAsyncActionSaga(params) { var _i, result, error_1; var args = []; for (_i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (!!options.skipStartedAction) return [3 /*break*/, 2]; return [4 /*yield*/, effects_1.put(actionCreator.started(params))]; case 1: _a.sent(); _a.label = 2; case 2: _a.trys.push([2, 5, 7, 11]); return [4 /*yield*/, effects_1.call.apply(void 0, [worker, params].concat(args))]; case 3: result = _a.sent(); return [4 /*yield*/, effects_1.put(actionCreator.done({ params: params, result: result }))]; case 4: _a.sent(); return [2 /*return*/, result]; case 5: error_1 = _a.sent(); return [4 /*yield*/, effects_1.put(actionCreator.failed({ params: params, error: error_1 }))]; case 6: _a.sent(); throw error_1; case 7: return [4 /*yield*/, effects_1.cancelled()]; case 8: if (!_a.sent()) return [3 /*break*/, 10]; return [4 /*yield*/, effects_1.put(actionCreator.failed({ params: params, error: 'cancelled' }))]; case 9: _a.sent(); _a.label = 10; case 10: return [7 /*endfinally*/]; case 11: return [2 /*return*/]; } }); } var capName = worker.name.charAt(0).toUpperCase() + worker.name.substring(1); return setFunctionName(boundAsyncActionSaga, "bound" + capName + "(" + actionCreator.type + ")"); }; } exports.bindAsyncAction = bindAsyncAction; /** * Set function name. * * Note that this won't have effect on built-in Chrome stack traces, although * useful for stack traces generated by `redux-saga`. */ function setFunctionName(func, name) { try { Object.defineProperty(func, 'name', { value: name, configurable: true }); } catch (e) { // ignore } return func; } //# sourceMappingURL=index.js.map