typescript-fsa-redux-saga
Version:
TypeScript FSA utilities for redux-saga
72 lines • 2.88 kB
JavaScript
;
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