redux-saga
Version:
Saga middleware for Redux to handle Side Effects
297 lines (261 loc) • 8.77 kB
JavaScript
exports.__esModule = true;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
exports.check = check;
exports.hasOwn = hasOwn;
exports.remove = remove;
exports.deferred = deferred;
exports.arrayOfDeffered = arrayOfDeffered;
exports.delay = delay;
exports.createMockTask = createMockTask;
exports.autoInc = autoInc;
exports.makeIterator = makeIterator;
exports.log = log;
exports.deprecate = deprecate;
var sym = exports.sym = function sym(id) {
return '@@redux-saga/' + id;
};
var TASK = /*#__PURE__*/exports.TASK = sym('TASK');
var HELPER = /*#__PURE__*/exports.HELPER = sym('HELPER');
var MATCH = /*#__PURE__*/exports.MATCH = sym('MATCH');
var CANCEL = /*#__PURE__*/exports.CANCEL = sym('CANCEL_PROMISE');
var SAGA_ACTION = /*#__PURE__*/exports.SAGA_ACTION = sym('SAGA_ACTION');
var SELF_CANCELLATION = /*#__PURE__*/exports.SELF_CANCELLATION = sym('SELF_CANCELLATION');
var konst = exports.konst = function konst(v) {
return function () {
return v;
};
};
var kTrue = /*#__PURE__*/exports.kTrue = konst(true);
var kFalse = /*#__PURE__*/exports.kFalse = konst(false);
var noop = exports.noop = function noop() {};
var ident = exports.ident = function ident(v) {
return v;
};
function check(value, predicate, error) {
if (!predicate(value)) {
log('error', 'uncaught at check', error);
throw new Error(error);
}
}
var hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn(object, property) {
return is.notUndef(object) && hasOwnProperty.call(object, property);
}
var is = exports.is = {
undef: function undef(v) {
return v === null || v === undefined;
},
notUndef: function notUndef(v) {
return v !== null && v !== undefined;
},
func: function func(f) {
return typeof f === 'function';
},
number: function number(n) {
return typeof n === 'number';
},
string: function string(s) {
return typeof s === 'string';
},
array: Array.isArray,
object: function object(obj) {
return obj && !is.array(obj) && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object';
},
promise: function promise(p) {
return p && is.func(p.then);
},
iterator: function iterator(it) {
return it && is.func(it.next) && is.func(it.throw);
},
iterable: function iterable(it) {
return it && is.func(Symbol) ? is.func(it[Symbol.iterator]) : is.array(it);
},
task: function task(t) {
return t && t[TASK];
},
observable: function observable(ob) {
return ob && is.func(ob.subscribe);
},
buffer: function buffer(buf) {
return buf && is.func(buf.isEmpty) && is.func(buf.take) && is.func(buf.put);
},
pattern: function pattern(pat) {
return pat && (is.string(pat) || (typeof pat === 'undefined' ? 'undefined' : _typeof(pat)) === 'symbol' || is.func(pat) || is.array(pat));
},
channel: function channel(ch) {
return ch && is.func(ch.take) && is.func(ch.close);
},
helper: function helper(it) {
return it && it[HELPER];
},
stringableFunc: function stringableFunc(f) {
return is.func(f) && hasOwn(f, 'toString');
}
};
var object = exports.object = {
assign: function assign(target, source) {
for (var i in source) {
if (hasOwn(source, i)) {
target[i] = source[i];
}
}
}
};
function remove(array, item) {
var index = array.indexOf(item);
if (index >= 0) {
array.splice(index, 1);
}
}
var array = exports.array = {
from: function from(obj) {
var arr = Array(obj.length);
for (var i in obj) {
if (hasOwn(obj, i)) {
arr[i] = obj[i];
}
}
return arr;
}
};
function deferred() {
var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var def = _extends({}, props);
var promise = new Promise(function (resolve, reject) {
def.resolve = resolve;
def.reject = reject;
});
def.promise = promise;
return def;
}
function arrayOfDeffered(length) {
var arr = [];
for (var i = 0; i < length; i++) {
arr.push(deferred());
}
return arr;
}
function delay(ms) {
var val = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var timeoutId = void 0;
var promise = new Promise(function (resolve) {
timeoutId = setTimeout(function () {
return resolve(val);
}, ms);
});
promise[CANCEL] = function () {
return clearTimeout(timeoutId);
};
return promise;
}
function createMockTask() {
var _ref;
var running = true;
var _result = void 0,
_error = void 0;
return _ref = {}, _ref[TASK] = true, _ref.isRunning = function isRunning() {
return running;
}, _ref.result = function result() {
return _result;
}, _ref.error = function error() {
return _error;
}, _ref.setRunning = function setRunning(b) {
return running = b;
}, _ref.setResult = function setResult(r) {
return _result = r;
}, _ref.setError = function setError(e) {
return _error = e;
}, _ref;
}
function autoInc() {
var seed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
return function () {
return ++seed;
};
}
var uid = /*#__PURE__*/exports.uid = autoInc();
var kThrow = function kThrow(err) {
throw err;
};
var kReturn = function kReturn(value) {
return { value: value, done: true };
};
function makeIterator(next) {
var thro = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : kThrow;
var name = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
var isHelper = arguments[3];
var iterator = { name: name, next: next, throw: thro, return: kReturn };
if (isHelper) {
iterator[HELPER] = true;
}
if (typeof Symbol !== 'undefined') {
iterator[Symbol.iterator] = function () {
return iterator;
};
}
return iterator;
}
/**
Print error in a useful way whether in a browser environment
(with expandable error stack traces), or in a node.js environment
(text-only log output)
**/
function log(level, message) {
var error = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
/*eslint-disable no-console*/
if (typeof window === 'undefined') {
console.log('redux-saga ' + level + ': ' + message + '\n' + (error && error.stack || error));
} else {
console[level](message, error);
}
}
function deprecate(fn, deprecationWarning) {
return function () {
if (process.env.NODE_ENV === 'development') log('warn', deprecationWarning);
return fn.apply(undefined, arguments);
};
}
var updateIncentive = exports.updateIncentive = function updateIncentive(deprecated, preferred) {
return deprecated + ' has been deprecated in favor of ' + preferred + ', please update your code';
};
var internalErr = exports.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 = exports.createSetContextWarning = function createSetContextWarning(ctx, props) {
return (ctx ? ctx + '.' : '') + 'setContext(props): argument ' + props + ' is not a plain object';
};
var wrapSagaDispatch = exports.wrapSagaDispatch = function wrapSagaDispatch(dispatch) {
return function (action) {
return dispatch(Object.defineProperty(action, SAGA_ACTION, { value: true }));
};
};
var cloneableGenerator = exports.cloneableGenerator = function cloneableGenerator(generatorFunc) {
return function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
var history = [];
var gen = generatorFunc.apply(undefined, args);
return {
next: function next(arg) {
history.push(arg);
return gen.next(arg);
},
clone: function clone() {
var clonedGen = cloneableGenerator(generatorFunc).apply(undefined, args);
history.forEach(function (arg) {
return clonedGen.next(arg);
});
return clonedGen;
},
return: function _return(value) {
return gen.return(value);
},
throw: function _throw(exception) {
return gen.throw(exception);
}
};
};
};
;