@gravity-ui/data-source
Version:
A wrapper around data fetching
26 lines (25 loc) • 1.3 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.withCancellation = exports.isCancellable = exports.isAbortable = void 0;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
var isCancellable = exports.isCancellable = function isCancellable(value) {
return (0, _typeof2.default)(value) === 'object' && value !== null && 'cancel' in value && typeof value.cancel === 'function';
};
var isAbortable = exports.isAbortable = function isAbortable(value) {
return (0, _typeof2.default)(value) === 'object' && value !== null && 'signal' in value && (0, _typeof2.default)(value.signal) === 'object' && value.signal !== null && 'addEventListener' in value.signal && typeof value.signal.addEventListener === 'function';
};
var withCancellation = exports.withCancellation = function withCancellation(fetch) {
return function (context, fetchContext, request) {
var value = fetch(context, fetchContext, request);
if (isAbortable(fetchContext) && isCancellable(value)) {
fetchContext.signal.addEventListener('abort', function () {
value.cancel();
});
}
return value;
};
};
// #sourceMappingURL=withCancellation.js.map
;