UNPKG

@argab/request-service

Version:

Provides a fully customizable Library for handling API using Request repositories and Stubs.

173 lines (172 loc) 6.72 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.RequestRetry = void 0; var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator")); var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _Request = require("./Request"); var _helpers = require("./helpers"); var RequestRetry = /*#__PURE__*/function () { function RequestRetry(_ref) { var request = _ref.request, service = _ref.service, resolve = _ref.resolve; (0, _classCallCheck2["default"])(this, RequestRetry); (0, _defineProperty2["default"])(this, "request", void 0); (0, _defineProperty2["default"])(this, "service", void 0); (0, _defineProperty2["default"])(this, "resolve", void 0); if (!(request instanceof _Request.Request)) throw 'The RequestRetry`s "request" is not an instance of "Request".'; if (!(service instanceof _Request.RequestService)) throw 'The RequestRetry`s "service" is not an instance of "RequestService".'; this.request = request; this.service = service; this.resolve = resolve; var maxCount = this.request.data.retryMaxCount; var timeout = this.request.data.retryTimeout; var retryCount = this.request.data.retryCount; this.request.data.retryMaxCount = Number.isNaN(+maxCount) ? 0 : +maxCount; this.request.data.retryTimeout = Number.isNaN(+timeout) ? 0 : +timeout; this.request.data.retryCount = Number.isNaN(+retryCount) ? 0 : +retryCount; } (0, _createClass2["default"])(RequestRetry, [{ key: "getRetry", value: function () { var _getRetry = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() { var request, resolve, retry; return _regenerator["default"].wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: request = this.request; if (this.resolve !== undefined) { resolve = this.resolve; } else { resolve = request.data.retryOnCatch && request.data.dataError ? request.data.retryOnCatch : null; resolve === null && (resolve = request.data.retry || null); } retry = resolve instanceof Function ? resolve(request.data) : resolve; if (!(retry instanceof Promise)) { _context.next = 9; break; } _context.next = 6; return retry; case 6: _context.t0 = _context.sent; _context.next = 10; break; case 9: _context.t0 = retry; case 10: return _context.abrupt("return", _context.t0); case 11: case "end": return _context.stop(); } }, _callee, this); })); function getRetry() { return _getRetry.apply(this, arguments); } return getRetry; }() }, { key: "retryChain", value: function retryChain() { this.setRetryChain(); var request = this.request; var chain = request.chain; var middleware = new this.service._middleware(this.service, request); request.chain = []; var pipe = (0, _helpers.applyCall)(middleware, chain[0].method, chain[0].args); chain.shift(); chain.forEach(function (_ref2) { var method = _ref2.method, args = _ref2.args; pipe[method] instanceof Function && (pipe = (0, _helpers.applyCall)(pipe, method, args)); }); } }, { key: "setRetryChain", value: function setRetryChain() { var request = this.request; var set = (0, _helpers.proxy)({}, null, function (state, method, args) { request.chain.push({ method: method, args: args }); return set; }); if (request.data.retryChain instanceof Function) { var chain = request.chain.slice(); request.chain = []; var _chain = request.data.retryChain({ set: set, chain: chain, data: request.data }); Array.isArray(_chain) && (request.chain = _chain); request.chain.length || (request.chain = chain); } } }, { key: "retry", value: function () { var _retry = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() { var _this = this; var request, retryMaxCount, retryCount, retry; return _regenerator["default"].wrap(function _callee2$(_context2) { while (1) switch (_context2.prev = _context2.next) { case 0: request = this.request; retryMaxCount = request.data.retryMaxCount; retryCount = request.data.retryCount; if (!(retryMaxCount && retryCount >= retryMaxCount)) { _context2.next = 5; break; } return _context2.abrupt("return", request._resolve()); case 5: _context2.next = 7; return this.getRetry(request); case 7: retry = _context2.sent; if (!(Boolean(retry) === false)) { _context2.next = 10; break; } return _context2.abrupt("return", request._resolve()); case 10: Object.assign(request.data, { repo: null, repoPath: null, repoMethod: null, statusCode: 0, retry: request.data.retry, retryOnCatch: request.data.retryOnCatch, retryCount: retryCount + 1, retryMaxCount: retryMaxCount, dataError: null, result: null }); setTimeout(function () { return _this.retryChain(); }, request.data.retryTimeout); case 12: case "end": return _context2.stop(); } }, _callee2, this); })); function retry() { return _retry.apply(this, arguments); } return retry; }() }]); return RequestRetry; }(); exports.RequestRetry = RequestRetry;