apollo-link-retry
Advanced tools
| (function (global, factory) { | ||
| typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : | ||
| typeof define === 'function' && define.amd ? define(['exports'], factory) : | ||
| (factory((global.retryLink = {}))); | ||
| }(this, (function (exports) { 'use strict'; | ||
| var __extends = (undefined && undefined.__extends) || (function () { | ||
| var extendStatics = Object.setPrototypeOf || | ||
| ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || | ||
| function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; | ||
| return function (d, b) { | ||
| extendStatics(d, b); | ||
| function __() { this.constructor = d; } | ||
| d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | ||
| }; | ||
| })(); | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| var apollo_link_core_1 = require("apollo-link-core"); | ||
| var RetryLink = (function (_super) { | ||
| __extends(RetryLink, _super); | ||
| function RetryLink(params) { | ||
| var _this = _super.call(this) || this; | ||
| _this.count = 0; | ||
| _this.defaultInterval = function (delay) { return delay; }; | ||
| _this.max = (params && params.max) || 10; | ||
| _this.delay = (params && params.delay) || 300; | ||
| _this.interval = (params && params.interval) || _this.defaultInterval; | ||
| return _this; | ||
| } | ||
| RetryLink.prototype.request = function (operation, forward) { | ||
| var _this = this; | ||
| return new apollo_link_core_1.Observable(function (observer) { | ||
| var subscriber = { | ||
| next: function (data) { | ||
| _this.count = 0; | ||
| observer.next(data); | ||
| }, | ||
| error: function (error) { | ||
| _this.count++; | ||
| if (_this.count < _this.max) { | ||
| _this.timer = setTimeout(function () { | ||
| var observable = forward(operation); | ||
| _this.subscription = observable.subscribe(subscriber); | ||
| }, _this.interval(_this.delay, _this.count)); | ||
| } | ||
| else { | ||
| observer.error(error); | ||
| } | ||
| }, | ||
| complete: observer.complete.bind(observer), | ||
| }; | ||
| _this.subscription = forward(operation).subscribe(subscriber); | ||
| return function () { | ||
| _this.subscription.unsubscribe(); | ||
| if (_this.timer) { | ||
| clearTimeout(_this.timer); | ||
| } | ||
| }; | ||
| }); | ||
| }; | ||
| return RetryLink; | ||
| }(apollo_link_core_1.ApolloLink)); | ||
| exports.default = RetryLink; | ||
| Object.defineProperty(exports, '__esModule', { value: true }); | ||
| }))); | ||
| //# sourceMappingURL=bundle.umd.js.map |
| {"version":3,"file":"bundle.umd.js","sources":["retryLink.js"],"sourcesContent":["\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar apollo_link_core_1 = require(\"apollo-link-core\");\nvar RetryLink = (function (_super) {\n __extends(RetryLink, _super);\n function RetryLink(params) {\n var _this = _super.call(this) || this;\n _this.count = 0;\n _this.defaultInterval = function (delay) { return delay; };\n _this.max = (params && params.max) || 10;\n _this.delay = (params && params.delay) || 300;\n _this.interval = (params && params.interval) || _this.defaultInterval;\n return _this;\n }\n RetryLink.prototype.request = function (operation, forward) {\n var _this = this;\n return new apollo_link_core_1.Observable(function (observer) {\n var subscriber = {\n next: function (data) {\n _this.count = 0;\n observer.next(data);\n },\n error: function (error) {\n _this.count++;\n if (_this.count < _this.max) {\n _this.timer = setTimeout(function () {\n var observable = forward(operation);\n _this.subscription = observable.subscribe(subscriber);\n }, _this.interval(_this.delay, _this.count));\n }\n else {\n observer.error(error);\n }\n },\n complete: observer.complete.bind(observer),\n };\n _this.subscription = forward(operation).subscribe(subscriber);\n return function () {\n _this.subscription.unsubscribe();\n if (_this.timer) {\n clearTimeout(_this.timer);\n }\n };\n });\n };\n return RetryLink;\n}(apollo_link_core_1.ApolloLink));\nexports.default = RetryLink;\n//# sourceMappingURL=retryLink.js.map"],"names":["this"],"mappings":"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"} |
| import { ApolloLink, Observable, Operation, NextLink, FetchResult } from 'apollo-link-core'; | ||
| export default class RetryLink extends ApolloLink { | ||
| private count; | ||
| private delay; | ||
| private max; | ||
| private interval; | ||
| private subscription; | ||
| private timer; | ||
| constructor(params?: { | ||
| max?: number; | ||
| delay?: number; | ||
| interval?: (delay: number, count: number) => number; | ||
| }); | ||
| request(operation: Operation, forward: NextLink): Observable<FetchResult>; | ||
| private defaultInterval; | ||
| } |
| "use strict"; | ||
| var __extends = (this && this.__extends) || (function () { | ||
| var extendStatics = Object.setPrototypeOf || | ||
| ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || | ||
| function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; | ||
| return function (d, b) { | ||
| extendStatics(d, b); | ||
| function __() { this.constructor = d; } | ||
| d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | ||
| }; | ||
| })(); | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| var apollo_link_core_1 = require("apollo-link-core"); | ||
| var RetryLink = (function (_super) { | ||
| __extends(RetryLink, _super); | ||
| function RetryLink(params) { | ||
| var _this = _super.call(this) || this; | ||
| _this.count = 0; | ||
| _this.defaultInterval = function (delay) { return delay; }; | ||
| _this.max = (params && params.max) || 10; | ||
| _this.delay = (params && params.delay) || 300; | ||
| _this.interval = (params && params.interval) || _this.defaultInterval; | ||
| return _this; | ||
| } | ||
| RetryLink.prototype.request = function (operation, forward) { | ||
| var _this = this; | ||
| return new apollo_link_core_1.Observable(function (observer) { | ||
| var subscriber = { | ||
| next: function (data) { | ||
| _this.count = 0; | ||
| observer.next(data); | ||
| }, | ||
| error: function (error) { | ||
| _this.count++; | ||
| if (_this.count < _this.max) { | ||
| _this.timer = setTimeout(function () { | ||
| var observable = forward(operation); | ||
| _this.subscription = observable.subscribe(subscriber); | ||
| }, _this.interval(_this.delay, _this.count)); | ||
| } | ||
| else { | ||
| observer.error(error); | ||
| } | ||
| }, | ||
| complete: observer.complete.bind(observer), | ||
| }; | ||
| _this.subscription = forward(operation).subscribe(subscriber); | ||
| return function () { | ||
| _this.subscription.unsubscribe(); | ||
| if (_this.timer) { | ||
| clearTimeout(_this.timer); | ||
| } | ||
| }; | ||
| }); | ||
| }; | ||
| return RetryLink; | ||
| }(apollo_link_core_1.ApolloLink)); | ||
| exports.default = RetryLink; | ||
| //# sourceMappingURL=retryLink.js.map |
| {"version":3,"file":"retryLink.js","sourceRoot":"","sources":["../../src/retryLink.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAO0B;AAE1B;IAAuC,6BAAU;IAQ/C,mBAAY,MAIX;QAJD,YAKE,iBAAO,SAIR;QAhBO,WAAK,GAAW,CAAC,CAAC;QAqDlB,qBAAe,GAAG,UAAA,KAAK,IAAI,OAAA,KAAK,EAAL,CAAK,CAAC;QAxCvC,KAAI,CAAC,GAAG,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACxC,KAAI,CAAC,KAAK,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;QAC7C,KAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,KAAI,CAAC,eAAe,CAAC;;IACtE,CAAC;IAEM,2BAAO,GAAd,UACE,SAAoB,EACpB,OAAiB;QAFnB,iBAiCC;QA7BC,MAAM,CAAC,IAAI,6BAAU,CAAC,UAAA,QAAQ;YAC5B,IAAM,UAAU,GAAG;gBACjB,IAAI,EAAE,UAAA,IAAI;oBACR,KAAI,CAAC,KAAK,GAAG,CAAC,CAAC;oBACf,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;gBACD,KAAK,EAAE,UAAA,KAAK;oBACV,KAAI,CAAC,KAAK,EAAE,CAAC;oBACb,EAAE,CAAC,CAAC,KAAI,CAAC,KAAK,GAAG,KAAI,CAAC,GAAG,CAAC,CAAC,CAAC;wBAC1B,KAAI,CAAC,KAAK,GAAG,UAAU,CAAC;4BACtB,IAAM,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;4BACtC,KAAI,CAAC,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;wBACvD,CAAC,EAAE,KAAI,CAAC,QAAQ,CAAC,KAAI,CAAC,KAAK,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC5C,CAAC;oBAAC,IAAI,CAAC,CAAC;wBACN,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;gBACD,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;aAC3C,CAAC;YAEF,KAAI,CAAC,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAE7D,MAAM,CAAC;gBACL,KAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;gBAChC,EAAE,CAAC,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBACf,YAAY,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAGH,gBAAC;AAAD,CAAC,AAvDD,CAAuC,6BAAU,GAuDhD"} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| var chai_1 = require("chai"); | ||
| var sinon = require("sinon"); | ||
| var graphql_tag_1 = require("graphql-tag"); | ||
| var apollo_link_core_1 = require("apollo-link-core"); | ||
| var retryLink_1 = require("../src/retryLink"); | ||
| var query = (_a = ["\n {\n sample {\n id\n }\n }\n"], _a.raw = ["\n {\n sample {\n id\n }\n }\n"], graphql_tag_1.default(_a)); | ||
| describe('RetryLink', function () { | ||
| it('can be initialized', function () { return chai_1.assert(true); }); | ||
| it('should fail with unreachable endpoint', function (done) { | ||
| var max = 10; | ||
| var retry = new retryLink_1.default({ delay: 1, max: max }); | ||
| var error = new Error('I never work'); | ||
| var stub = sinon.stub().callsFake(function () { | ||
| return new apollo_link_core_1.Observable(function (observer) { return observer.error(error); }); | ||
| }); | ||
| var link = apollo_link_core_1.ApolloLink.from([retry, stub]); | ||
| apollo_link_core_1.execute(link, { query: query }).subscribe(chai_1.expect.fail, function (actualError) { | ||
| chai_1.assert.deepEqual(stub.callCount, max); | ||
| chai_1.assert.deepEqual(error, actualError); | ||
| done(); | ||
| }, chai_1.expect.fail); | ||
| }); | ||
| it('should return data from the underlying link on a successful operation', function (done) { | ||
| var retry = new retryLink_1.default(); | ||
| var data = { | ||
| data: { | ||
| hello: 'world', | ||
| }, | ||
| }; | ||
| var stub = sinon.stub(); | ||
| stub.returns(apollo_link_core_1.Observable.of(data)); | ||
| var link = apollo_link_core_1.ApolloLink.from([retry, stub]); | ||
| apollo_link_core_1.execute(link, { query: query }).subscribe(function (actualData) { | ||
| chai_1.assert(stub.calledOnce); | ||
| chai_1.assert.deepEqual(data, actualData); | ||
| }, chai_1.expect.fail, done); | ||
| }); | ||
| it('should return data from the underlying link on a successful retry', function (done) { | ||
| var retry = new retryLink_1.default({ delay: 1, max: 2 }); | ||
| var error = new Error('I never work'); | ||
| var data = { | ||
| data: { | ||
| hello: 'world', | ||
| }, | ||
| }; | ||
| var stub = sinon.stub(); | ||
| stub | ||
| .onFirstCall() | ||
| .returns(new apollo_link_core_1.Observable(function (observer) { return observer.error(error); })); | ||
| stub.onSecondCall().returns(apollo_link_core_1.Observable.of(data)); | ||
| var link = apollo_link_core_1.ApolloLink.from([retry, stub]); | ||
| apollo_link_core_1.execute(link, { query: query }).subscribe(function (actualData) { | ||
| chai_1.assert.deepEqual(stub.callCount, 2); | ||
| chai_1.assert.deepEqual(data, actualData); | ||
| }, chai_1.expect.fail, done); | ||
| }); | ||
| }); | ||
| var _a; | ||
| //# sourceMappingURL=retryLink.js.map |
| {"version":3,"file":"retryLink.js","sourceRoot":"","sources":["../../tests/retryLink.ts"],"names":[],"mappings":"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"} |
| import './retryLink'; |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| require("./retryLink"); | ||
| //# sourceMappingURL=tests.js.map |
| {"version":3,"file":"tests.js","sourceRoot":"","sources":["../../tests/tests.ts"],"names":[],"mappings":";;AAAA,uBAAqB"} |
+4
-0
@@ -0,4 +1,8 @@ | ||
| # Change log | ||
| ### vNext | ||
| ### 2.0.2 | ||
| - ApolloLink upgrade | ||
| ### 2.0.1 | ||
@@ -5,0 +9,0 @@ - ApolloLink upgrade |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"bundle.umd.js","sources":["delayFunction.js","retryFunction.js","retryLink.js"],"sourcesContent":["export function buildDelayFunction(_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.initial, initial = _c === void 0 ? 300 : _c, _d = _b.max, max = _d === void 0 ? Infinity : _d, _e = _b.jitter, jitter = _e === void 0 ? true : _e;\n var baseDelay;\n if (jitter) {\n baseDelay = initial;\n }\n else {\n baseDelay = initial / 2;\n }\n return function delayFunction(count) {\n var delay = Math.min(max, baseDelay * Math.pow(2, count));\n if (jitter) {\n delay = Math.random() * delay;\n }\n return delay;\n };\n}\n//# sourceMappingURL=delayFunction.js.map","export function buildRetryFunction(_a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.max, max = _c === void 0 ? 5 : _c, retryIf = _b.retryIf;\n return function retryFunction(count, operation, error) {\n if (count >= max)\n return false;\n return retryIf ? retryIf(error, operation) : !!error;\n };\n}\n//# sourceMappingURL=retryFunction.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ApolloLink, Observable, } from 'apollo-link';\nimport { buildDelayFunction, } from './delayFunction';\nimport { buildRetryFunction, } from './retryFunction';\nvar RetryableOperation = (function () {\n function RetryableOperation(operation, nextLink, delayFor, retryIf) {\n var _this = this;\n this.operation = operation;\n this.nextLink = nextLink;\n this.delayFor = delayFor;\n this.retryIf = retryIf;\n this.retryCount = 0;\n this.values = [];\n this.complete = false;\n this.canceled = false;\n this.observers = [];\n this.currentSubscription = null;\n this.onNext = function (value) {\n _this.values.push(value);\n for (var _i = 0, _a = _this.observers; _i < _a.length; _i++) {\n var observer = _a[_i];\n observer.next(value);\n }\n };\n this.onComplete = function () {\n _this.complete = true;\n for (var _i = 0, _a = _this.observers; _i < _a.length; _i++) {\n var observer = _a[_i];\n observer.complete();\n }\n };\n this.onError = function (error) {\n _this.retryCount += 1;\n if (_this.retryIf(_this.retryCount, _this.operation, error)) {\n _this.scheduleRetry(_this.delayFor(_this.retryCount, _this.operation, error));\n return;\n }\n _this.error = error;\n for (var _i = 0, _a = _this.observers; _i < _a.length; _i++) {\n var observer = _a[_i];\n observer.error(error);\n }\n };\n }\n RetryableOperation.prototype.subscribe = function (observer) {\n if (this.canceled) {\n throw new Error(\"Subscribing to a retryable link that was canceled is not supported\");\n }\n this.observers.push(observer);\n for (var _i = 0, _a = this.values; _i < _a.length; _i++) {\n var value = _a[_i];\n observer.next(value);\n }\n if (this.complete) {\n observer.complete();\n }\n else if (this.error) {\n observer.error(this.error);\n }\n };\n RetryableOperation.prototype.unsubscribe = function (observer) {\n var index = this.observers.indexOf(observer);\n if (index < 0) {\n throw new Error(\"RetryLink BUG! Attempting to unsubscribe unknown observer!\");\n }\n this.observers[index] = null;\n if (this.observers.every(function (o) { return o === null; })) {\n this.cancel();\n }\n };\n RetryableOperation.prototype.start = function () {\n if (this.currentSubscription)\n return;\n this.try();\n };\n RetryableOperation.prototype.cancel = function () {\n if (this.currentSubscription) {\n this.currentSubscription.unsubscribe();\n }\n clearTimeout(this.timerId);\n this.timerId = null;\n this.currentSubscription = null;\n this.canceled = true;\n };\n RetryableOperation.prototype.try = function () {\n this.currentSubscription = this.nextLink(this.operation).subscribe({\n next: this.onNext,\n error: this.onError,\n complete: this.onComplete,\n });\n };\n RetryableOperation.prototype.scheduleRetry = function (delay) {\n var _this = this;\n if (this.timerId) {\n throw new Error(\"RetryLink BUG! Encountered overlapping retries\");\n }\n this.timerId = setTimeout(function () {\n _this.timerId = null;\n _this.try();\n }, delay);\n };\n return RetryableOperation;\n}());\nvar RetryLink = (function (_super) {\n __extends(RetryLink, _super);\n function RetryLink(_a) {\n var _b = _a === void 0 ? {} : _a, delay = _b.delay, attempts = _b.attempts;\n var _this = _super.call(this) || this;\n _this.delayFor =\n typeof delay === 'function' ? delay : buildDelayFunction(delay);\n _this.retryIf =\n typeof attempts === 'function' ? attempts : buildRetryFunction(attempts);\n return _this;\n }\n RetryLink.prototype.request = function (operation, nextLink) {\n var retryable = new RetryableOperation(operation, nextLink, this.delayFor, this.retryIf);\n retryable.start();\n return new Observable(function (observer) {\n retryable.subscribe(observer);\n return function () {\n retryable.unsubscribe(observer);\n };\n });\n };\n return RetryLink;\n}(ApolloLink));\nexport { RetryLink };\n//# sourceMappingURL=retryLink.js.map"],"names":["this","Observable","ApolloLink"],"mappings":"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"} | ||
| {"version":3,"file":"bundle.umd.js","sources":["../src/delayFunction.ts","../src/retryFunction.ts","../src/retryLink.ts"],"sourcesContent":["import { Operation } from 'apollo-link';\n\n/**\n * Advanced mode: a function that implements the strategy for calculating delays\n * for particular responses.\n */\nexport interface DelayFunction {\n (count: number, operation: Operation, error: any): number;\n}\n\nexport interface DelayFunctionOptions {\n /**\n * The number of milliseconds to wait before attempting the first retry.\n *\n * Delays will increase exponentially for each attempt. E.g. if this is\n * set to 100, subsequent retries will be delayed by 200, 400, 800, etc,\n * until they reach maxDelay.\n *\n * Note that if jittering is enabled, this is the _average_ delay.\n *\n * Defaults to 300.\n */\n initial?: number;\n\n /**\n * The maximum number of milliseconds that the link should wait for any\n * retry.\n *\n * Defaults to Infinity.\n */\n max?: number;\n\n /**\n * Whether delays between attempts should be randomized.\n *\n * This helps avoid thundering herd type situations by better distributing\n * load during major outages.\n *\n * Defaults to true.\n */\n jitter?: boolean;\n}\n\nexport function buildDelayFunction({\n initial = 300,\n max = Infinity,\n jitter = true,\n}: DelayFunctionOptions = {}): DelayFunction {\n let baseDelay;\n if (jitter) {\n // If we're jittering, baseDelay is half of the maximum delay for that\n // attempt (and is, on average, the delay we will encounter).\n baseDelay = initial;\n } else {\n // If we're not jittering, adjust baseDelay so that the first attempt\n // lines up with initialDelay, for everyone's sanity.\n baseDelay = initial / 2;\n }\n\n return function delayFunction(count: number) {\n let delay = Math.min(max, baseDelay * 2 ** count);\n if (jitter) {\n // We opt for a full jitter approach for a mostly uniform distribution,\n // but bound it within initialDelay and delay for everyone's sanity.\n delay = Math.random() * delay;\n }\n\n return delay;\n };\n}\n","import { Operation } from 'apollo-link';\n\n/**\n * Advanced mode: a function that determines both whether a particular\n * response should be retried.\n */\nexport interface RetryFunction {\n (count: number, operation: Operation, error: any): boolean;\n}\n\nexport interface RetryFunctionOptions {\n /**\n * The max number of times to try a single operation before giving up.\n *\n * Note that this INCLUDES the initial request as part of the count.\n * E.g. maxTries of 1 indicates no retrying should occur.\n *\n * Defaults to 5. Pass Infinity for infinite retries.\n */\n max?: number;\n\n /**\n * Predicate function that determines whether a particular error should\n * trigger a retry.\n *\n * For example, you may want to not retry 4xx class HTTP errors.\n *\n * By default, all errors are retried.\n */\n retryIf?: (error: any, operation: Operation) => boolean;\n}\n\nexport function buildRetryFunction({\n max = 5,\n retryIf,\n}: RetryFunctionOptions = {}): RetryFunction {\n return function retryFunction(count, operation, error) {\n if (count >= max) return false;\n return retryIf ? retryIf(error, operation) : !!error;\n };\n}\n","import {\n ApolloLink,\n Observable,\n Operation,\n NextLink,\n FetchResult,\n} from 'apollo-link';\n\nimport {\n DelayFunction,\n DelayFunctionOptions,\n buildDelayFunction,\n} from './delayFunction';\nimport {\n RetryFunction,\n RetryFunctionOptions,\n buildRetryFunction,\n} from './retryFunction';\n\nexport namespace RetryLink {\n export interface Options {\n /**\n * Configuration for the delay strategy to use, or a custom delay strategy.\n */\n delay?: DelayFunctionOptions | DelayFunction;\n\n /**\n * Configuration for the retry strategy to use, or a custom retry strategy.\n */\n attempts?: RetryFunctionOptions | RetryFunction;\n }\n}\n\n/**\n * Tracking and management of operations that may be (or currently are) retried.\n */\nclass RetryableOperation<TValue = any> {\n private retryCount: number = 0;\n private values: any[] = [];\n private error: any;\n private complete = false;\n private canceled = false;\n private observers: ZenObservable.Observer<TValue>[] = [];\n private currentSubscription: ZenObservable.Subscription = null;\n private timerId: number;\n\n constructor(\n private operation: Operation,\n private nextLink: NextLink,\n private delayFor: DelayFunction,\n private retryIf: RetryFunction,\n ) {}\n\n /**\n * Register a new observer for this operation.\n *\n * If the operation has previously emitted other events, they will be\n * immediately triggered for the observer.\n */\n subscribe(observer: ZenObservable.Observer<TValue>) {\n if (this.canceled) {\n throw new Error(\n `Subscribing to a retryable link that was canceled is not supported`,\n );\n }\n this.observers.push(observer);\n\n // If we've already begun, catch this observer up.\n for (const value of this.values) {\n observer.next(value);\n }\n\n if (this.complete) {\n observer.complete();\n } else if (this.error) {\n observer.error(this.error);\n }\n }\n\n /**\n * Remove a previously registered observer from this operation.\n *\n * If no observers remain, the operation will stop retrying, and unsubscribe\n * from its downstream link.\n */\n unsubscribe(observer: ZenObservable.Observer<TValue>) {\n const index = this.observers.indexOf(observer);\n if (index < 0) {\n throw new Error(\n `RetryLink BUG! Attempting to unsubscribe unknown observer!`,\n );\n }\n // Note that we are careful not to change the order of length of the array,\n // as we are often mid-iteration when calling this method.\n this.observers[index] = null;\n\n // If this is the last observer, we're done.\n if (this.observers.every(o => o === null)) {\n this.cancel();\n }\n }\n\n /**\n * Start the initial request.\n */\n start() {\n if (this.currentSubscription) return; // Already started.\n\n this.try();\n }\n\n /**\n * Stop retrying for the operation, and cancel any in-progress requests.\n */\n cancel() {\n if (this.currentSubscription) {\n this.currentSubscription.unsubscribe();\n }\n clearTimeout(this.timerId);\n this.timerId = null;\n this.currentSubscription = null;\n this.canceled = true;\n }\n\n private try() {\n this.currentSubscription = this.nextLink(this.operation).subscribe({\n next: this.onNext,\n error: this.onError,\n complete: this.onComplete,\n });\n }\n\n private onNext = (value: any) => {\n this.values.push(value);\n for (const observer of this.observers) {\n observer.next(value);\n }\n };\n\n private onComplete = () => {\n this.complete = true;\n for (const observer of this.observers) {\n observer.complete();\n }\n };\n\n private onError = error => {\n this.retryCount += 1;\n\n // Should we retry?\n if (this.retryIf(this.retryCount, this.operation, error)) {\n this.scheduleRetry(this.delayFor(this.retryCount, this.operation, error));\n return;\n }\n\n this.error = error;\n for (const observer of this.observers) {\n observer.error(error);\n }\n };\n\n private scheduleRetry(delay) {\n if (this.timerId) {\n throw new Error(`RetryLink BUG! Encountered overlapping retries`);\n }\n\n this.timerId = setTimeout(() => {\n this.timerId = null;\n this.try();\n }, delay);\n }\n}\n\nexport class RetryLink extends ApolloLink {\n private delayFor: DelayFunction;\n private retryIf: RetryFunction;\n\n constructor({ delay, attempts }: RetryLink.Options = {}) {\n super();\n this.delayFor =\n typeof delay === 'function' ? delay : buildDelayFunction(delay);\n this.retryIf =\n typeof attempts === 'function' ? attempts : buildRetryFunction(attempts);\n }\n\n public request(\n operation: Operation,\n nextLink: NextLink,\n ): Observable<FetchResult> {\n const retryable = new RetryableOperation(\n operation,\n nextLink,\n this.delayFor,\n this.retryIf,\n );\n retryable.start();\n\n return new Observable(observer => {\n retryable.subscribe(observer);\n return () => {\n retryable.unsubscribe(observer);\n };\n });\n }\n}\n"],"names":["Observable","ApolloLink"],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"delayFunction.js","sourceRoot":"","sources":["../src/delayFunction.ts"],"names":[],"mappings":"AA2CA,MAAM,6BACJ,EAA2E;QAA3E,4BAA2E,EAAzE,eAAa,EAAb,kCAAa,EAAE,WAAc,EAAd,mCAAc,EAAE,cAAa,EAAb,kCAAa;IAE9C,IAAI,SAAS,CAAC;IACd,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAGX,SAAS,GAAG,OAAO,CAAC;IACtB,CAAC;IAAC,IAAI,CAAC,CAAC;QAGN,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,uBAAuB,KAAa;QACzC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,SAAA,CAAC,EAAI,KAAK,CAAA,CAAC,CAAC;QAClD,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAGX,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC;QAChC,CAAC;QAED,MAAM,CAAC,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"} | ||
| {"version":3,"file":"delayFunction.js","sourceRoot":"","sources":["../src/delayFunction.ts"],"names":[],"mappings":"AA2CA,MAAM,6BAA6B,EAIP;QAJO,4BAIP,EAH1B,eAAa,EAAb,kCAAa,EACb,WAAc,EAAd,mCAAc,EACd,cAAa,EAAb,kCAAa;IAEb,IAAI,SAAS,CAAC;IACd,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAGX,SAAS,GAAG,OAAO,CAAC;IACtB,CAAC;IAAC,IAAI,CAAC,CAAC;QAGN,SAAS,GAAG,OAAO,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,uBAAuB,KAAa;QACzC,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,SAAA,CAAC,EAAI,KAAK,CAAA,CAAC,CAAC;QAClD,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAGX,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC;QAChC,CAAC;QAED,MAAM,CAAC,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"retryFunction.js","sourceRoot":"","sources":["../src/retryFunction.ts"],"names":[],"mappings":"AAgCA,MAAM,6BACJ,EAA+C;QAA/C,4BAA+C,EAA7C,WAAO,EAAP,4BAAO,EAAE,oBAAO;IAElB,MAAM,CAAC,uBAAuB,KAAK,EAAE,SAAS,EAAE,KAAK;QACnD,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,CAAC,CAAC;AACJ,CAAC"} | ||
| {"version":3,"file":"retryFunction.js","sourceRoot":"","sources":["../src/retryFunction.ts"],"names":[],"mappings":"AAgCA,MAAM,6BAA6B,EAGP;QAHO,4BAGP,EAF1B,WAAO,EAAP,4BAAO,EACP,oBAAO;IAEP,MAAM,CAAC,uBAAuB,KAAK,EAAE,SAAS,EAAE,KAAK;QACnD,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC;YAAC,MAAM,CAAC,KAAK,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,CAAC,CAAC;AACJ,CAAC"} |
@@ -1,2 +0,1 @@ | ||
| /// <reference types="zen-observable" /> | ||
| import { ApolloLink, Observable, Operation, NextLink, FetchResult } from 'apollo-link'; | ||
@@ -3,0 +2,0 @@ import { DelayFunction, DelayFunctionOptions } from './delayFunction'; |
+18
-15
| { | ||
| "name": "apollo-link-retry", | ||
| "version": "2.1.2", | ||
| "version": "2.1.3", | ||
| "description": "Retry Apollo Link for GraphQL Network Stack", | ||
@@ -26,4 +26,3 @@ "author": "Evans Hauser <evanshauser@gmail.com>", | ||
| "scripts": { | ||
| "build:browser": | ||
| "browserify ./lib/bundle.umd.js -o=./lib/bundle.js --i apollo-link && npm run minify:browser", | ||
| "build:browser": "browserify ./lib/bundle.umd.js -o=./lib/bundle.js --i apollo-link && npm run minify:browser", | ||
| "build": "tsc -p .", | ||
@@ -34,6 +33,4 @@ "bundle": "rollup -c", | ||
| "filesize": "npm run build && npm run build:browser", | ||
| "lint": | ||
| "tslint --type-check -p tsconfig.json -c ../../tslint.json src/*.ts", | ||
| "minify:browser": | ||
| "uglifyjs -c -m -o ./lib/bundle.min.js -- ./lib/bundle.js", | ||
| "lint": "tslint --type-check -p tsconfig.json -c ../../tslint.json src/*.ts", | ||
| "minify:browser": "uglifyjs -c -m -o ./lib/bundle.min.js -- ./lib/bundle.js", | ||
| "postbuild": "npm run bundle", | ||
@@ -47,17 +44,17 @@ "prebuild": "npm run clean", | ||
| "@types/zen-observable": "0.5.3", | ||
| "apollo-link": "^1.1.0" | ||
| "apollo-link": "^1.2.0" | ||
| }, | ||
| "devDependencies": { | ||
| "@types/graphql": "0.12.3", | ||
| "@types/graphql": "0.12.4", | ||
| "@types/jest": "21.1.10", | ||
| "browserify": "14.5.0", | ||
| "graphql": "0.13.0", | ||
| "browserify": "16.1.0", | ||
| "graphql": "0.13.1", | ||
| "graphql-tag": "2.7.3", | ||
| "jest": "21.2.1", | ||
| "rimraf": "2.6.1", | ||
| "rollup": "0.55.3", | ||
| "rollup": "0.56.2", | ||
| "ts-jest": "21.2.4", | ||
| "tslint": "5.9.1", | ||
| "typescript": "2.7.1", | ||
| "uglify-js": "3.3.9", | ||
| "typescript": "2.7.2", | ||
| "uglify-js": "3.3.11", | ||
| "wait-for-observables": "1.0.3" | ||
@@ -70,4 +67,10 @@ }, | ||
| "testRegex": "(/__tests__/.*|\\.(test|spec))\\.(ts|tsx|js)$", | ||
| "moduleFileExtensions": ["ts", "tsx", "js", "json"] | ||
| "moduleFileExtensions": [ | ||
| "ts", | ||
| "tsx", | ||
| "js", | ||
| "json" | ||
| ], | ||
| "mapCoverage": true | ||
| } | ||
| } |
| import gql from 'graphql-tag'; | ||
| import { execute, ApolloLink, Observable, FetchResult } from 'apollo-link'; | ||
| import { | ||
| execute, | ||
| ApolloLink, | ||
| Observable, | ||
| FetchResult, | ||
| fromError, | ||
| } from 'apollo-link'; | ||
| import waitFor from 'wait-for-observables'; | ||
@@ -21,3 +27,3 @@ | ||
| const retry = new RetryLink({ delay: { initial: 1 }, attempts: { max } }); | ||
| const stub = jest.fn(() => new Observable(o => o.error(standardError))); | ||
| const stub = jest.fn(() => fromError(standardError)); | ||
| const link = ApolloLink.from([retry, stub]); | ||
@@ -48,3 +54,3 @@ | ||
| const stub = jest.fn(); | ||
| stub.mockReturnValueOnce(new Observable(o => o.error(standardError))); | ||
| stub.mockReturnValueOnce(fromError(standardError)); | ||
| stub.mockReturnValueOnce(Observable.of(data)); | ||
@@ -66,3 +72,3 @@ const link = ApolloLink.from([retry, stub]); | ||
| const firstTry = new Observable(o => o.error(standardError)); | ||
| const firstTry = fromError(standardError); | ||
| // Hold the test hostage until we're hit | ||
@@ -102,4 +108,4 @@ let secondTry; | ||
| const stub = jest.fn(); | ||
| stub.mockReturnValueOnce(new Observable(o => o.error(standardError))); | ||
| stub.mockReturnValueOnce(new Observable(o => o.error(standardError))); | ||
| stub.mockReturnValueOnce(fromError(standardError)); | ||
| stub.mockReturnValueOnce(fromError(standardError)); | ||
| stub.mockReturnValueOnce(Observable.of(data)); | ||
@@ -121,3 +127,3 @@ const link = ApolloLink.from([retry, stub]); | ||
| const data = { data: { hello: 'world' } }; | ||
| const stub = jest.fn(() => new Observable(o => o.error(standardError))); | ||
| const stub = jest.fn(() => fromError(standardError)); | ||
| const link = ApolloLink.from([retry, stub]); | ||
@@ -137,3 +143,3 @@ | ||
| const retry = new RetryLink({ delay: delayStub, attempts: { max: 3 } }); | ||
| const linkStub = jest.fn(() => new Observable(o => o.error(standardError))); | ||
| const linkStub = jest.fn(() => fromError(standardError)); | ||
| const link = ApolloLink.from([retry, linkStub]); | ||
@@ -160,3 +166,3 @@ const [{ error }] = await waitFor(execute(link, { query })); | ||
| }); | ||
| const linkStub = jest.fn(() => new Observable(o => o.error(standardError))); | ||
| const linkStub = jest.fn(() => fromError(standardError)); | ||
| const link = ApolloLink.from([retry, linkStub]); | ||
@@ -163,0 +169,0 @@ const [{ error }] = await waitFor(execute(link, { query })); |
@@ -44,5 +44,7 @@ import { Operation } from 'apollo-link'; | ||
| export function buildDelayFunction( | ||
| { initial = 300, max = Infinity, jitter = true }: DelayFunctionOptions = {}, | ||
| ): DelayFunction { | ||
| export function buildDelayFunction({ | ||
| initial = 300, | ||
| max = Infinity, | ||
| jitter = true, | ||
| }: DelayFunctionOptions = {}): DelayFunction { | ||
| let baseDelay; | ||
@@ -49,0 +51,0 @@ if (jitter) { |
@@ -33,5 +33,6 @@ import { Operation } from 'apollo-link'; | ||
| export function buildRetryFunction( | ||
| { max = 5, retryIf }: RetryFunctionOptions = {}, | ||
| ): RetryFunction { | ||
| export function buildRetryFunction({ | ||
| max = 5, | ||
| retryIf, | ||
| }: RetryFunctionOptions = {}): RetryFunction { | ||
| return function retryFunction(count, operation, error) { | ||
@@ -38,0 +39,0 @@ if (count >= max) return false; |
73443
32.53%37
42.31%1106
23.58%Updated