typescript-retry-decorator 2.0.2 → 2.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +1 -0
- package/.github/workflows/ci.yml +1 -1
- package/.github/workflows/npm-publish.yml +1 -1
- package/dist/example.d.ts +1 -0
- package/dist/example.d.ts.map +1 -0
- package/dist/example.js +6 -6
- package/dist/example.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -4
- package/dist/index.js.map +1 -1
- package/dist/retry.decorator.d.ts +3 -1
- package/dist/retry.decorator.d.ts.map +1 -0
- package/dist/retry.decorator.js +7 -2
- package/dist/retry.decorator.js.map +1 -1
- package/dist/retry.decorator.test.d.ts +1 -0
- package/dist/retry.decorator.test.d.ts.map +1 -0
- package/dist/retry.decorator.test.js +22 -5
- package/dist/retry.decorator.test.js.map +1 -1
- package/dist/utils.d.ts +2 -1
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +2 -1
- package/dist/utils.js.map +1 -1
- package/jest.config.js +1 -0
- package/package.json +11 -11
- package/src/index.ts +1 -1
- package/src/retry.decorator.test.ts +21 -0
- package/src/retry.decorator.ts +13 -5
- package/src/utils.ts +1 -1
- package/tsconfig.json +2 -1
package/.eslintrc.js
CHANGED
package/.github/workflows/ci.yml
CHANGED
package/dist/example.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../src/example.ts"],"names":[],"mappings":""}
|
package/dist/example.js
CHANGED
|
@@ -59,19 +59,19 @@ class RetryExample {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
__decorate([
|
|
62
|
-
retry_decorator_1.Retryable({ maxAttempts: 3 }),
|
|
62
|
+
(0, retry_decorator_1.Retryable)({ maxAttempts: 3 }),
|
|
63
63
|
__metadata("design:type", Function),
|
|
64
64
|
__metadata("design:paramtypes", []),
|
|
65
65
|
__metadata("design:returntype", Promise)
|
|
66
66
|
], RetryExample, "noDelayRetry", null);
|
|
67
67
|
__decorate([
|
|
68
|
-
retry_decorator_1.Retryable({ maxAttempts: 3, value: [SyntaxError, ReferenceError] }),
|
|
68
|
+
(0, retry_decorator_1.Retryable)({ maxAttempts: 3, value: [SyntaxError, ReferenceError] }),
|
|
69
69
|
__metadata("design:type", Function),
|
|
70
70
|
__metadata("design:paramtypes", []),
|
|
71
71
|
__metadata("design:returntype", Promise)
|
|
72
72
|
], RetryExample, "noDelaySpecificRetry", null);
|
|
73
73
|
__decorate([
|
|
74
|
-
retry_decorator_1.Retryable({
|
|
74
|
+
(0, retry_decorator_1.Retryable)({
|
|
75
75
|
maxAttempts: 3,
|
|
76
76
|
backOff: 1000,
|
|
77
77
|
doRetry: (e) => {
|
|
@@ -83,7 +83,7 @@ __decorate([
|
|
|
83
83
|
__metadata("design:returntype", Promise)
|
|
84
84
|
], RetryExample, "doRetry", null);
|
|
85
85
|
__decorate([
|
|
86
|
-
retry_decorator_1.Retryable({
|
|
86
|
+
(0, retry_decorator_1.Retryable)({
|
|
87
87
|
maxAttempts: 3,
|
|
88
88
|
backOff: 1000,
|
|
89
89
|
doRetry: (e) => {
|
|
@@ -95,7 +95,7 @@ __decorate([
|
|
|
95
95
|
__metadata("design:returntype", Promise)
|
|
96
96
|
], RetryExample, "doNotRetry", null);
|
|
97
97
|
__decorate([
|
|
98
|
-
retry_decorator_1.Retryable({
|
|
98
|
+
(0, retry_decorator_1.Retryable)({
|
|
99
99
|
maxAttempts: 3,
|
|
100
100
|
backOffPolicy: retry_decorator_1.BackOffPolicy.FixedBackOffPolicy,
|
|
101
101
|
backOff: 1000,
|
|
@@ -105,7 +105,7 @@ __decorate([
|
|
|
105
105
|
__metadata("design:returntype", Promise)
|
|
106
106
|
], RetryExample, "fixedBackOffRetry", null);
|
|
107
107
|
__decorate([
|
|
108
|
-
retry_decorator_1.Retryable({
|
|
108
|
+
(0, retry_decorator_1.Retryable)({
|
|
109
109
|
maxAttempts: 3,
|
|
110
110
|
backOffPolicy: retry_decorator_1.BackOffPolicy.ExponentialBackOffPolicy,
|
|
111
111
|
backOff: 1000,
|
package/dist/example.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"example.js","sourceRoot":"","sources":["../src/example.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,uDAA6D;AAE7D,IAAI,KAAK,GAAG,CAAC,CAAC;AAEd,MAAM,YAAY;IAEhB,MAAM,CAAO,YAAY;;YACvB,OAAO,CAAC,IAAI,CAAC,gCAAgC,KAAK,EAAE,YAAY,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;KAAA;IAGD,MAAM,CAAO,oBAAoB;;YAC/B,OAAO,CAAC,IAAI,CAAC,gCAAgC,KAAK,EAAE,YAAY,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YACnG,MAAM,IAAI,WAAW,CAAC,4BAA4B,CAAC,CAAC;QACtD,CAAC;KAAA;IASD,MAAM,CAAO,OAAO;;YAClB,OAAO,CAAC,IAAI,CAAC,2BAA2B,KAAK,EAAE,YAAY,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YAC9F,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;KAAA;IASD,MAAM,CAAO,UAAU;;YACrB,OAAO,CAAC,IAAI,CAAC,8BAA8B,KAAK,EAAE,YAAY,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YACjG,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;KAAA;IAOD,MAAM,CAAO,iBAAiB;;YAC5B,OAAO,CAAC,IAAI,CAAC,wCAAwC,KAAK,EAAE,YAAY,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YAC3G,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;KAAA;IAQD,MAAM,CAAO,uBAAuB;;YAClC,OAAO,CAAC,IAAI,CAAC,oEAAoE,KAAK,EAAE,YAAY,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YACvI,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/B,CAAC;KAAA;CACF;AAvDC;IADC,2BAAS,
|
|
1
|
+
{"version":3,"file":"example.js","sourceRoot":"","sources":["../src/example.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export
|
|
1
|
+
export * from './retry.decorator';
|
|
2
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
2
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
var retry_decorator_1 = require("./retry.decorator");
|
|
5
|
-
Object.defineProperty(exports, "Retryable", { enumerable: true, get: function () { return retry_decorator_1.Retryable; } });
|
|
6
|
-
Object.defineProperty(exports, "BackOffPolicy", { enumerable: true, get: function () { return retry_decorator_1.BackOffPolicy; } });
|
|
17
|
+
__exportStar(require("./retry.decorator"), exports);
|
|
7
18
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,oDAAkC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @param options the 'RetryOptions'
|
|
5
5
|
*/
|
|
6
|
-
export declare function Retryable(options: RetryOptions):
|
|
6
|
+
export declare function Retryable(options: RetryOptions): DecoratorFunction;
|
|
7
7
|
export declare class MaxAttemptsError extends Error {
|
|
8
8
|
code: string;
|
|
9
9
|
}
|
|
@@ -22,3 +22,5 @@ export declare enum BackOffPolicy {
|
|
|
22
22
|
FixedBackOffPolicy = "FixedBackOffPolicy",
|
|
23
23
|
ExponentialBackOffPolicy = "ExponentialBackOffPolicy"
|
|
24
24
|
}
|
|
25
|
+
export declare type DecoratorFunction = (target: Record<string, any>, propertyKey: string, descriptor: TypedPropertyDescriptor<any>) => TypedPropertyDescriptor<any>;
|
|
26
|
+
//# sourceMappingURL=retry.decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.decorator.d.ts","sourceRoot":"","sources":["../src/retry.decorator.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,iBAAiB,CAyElE;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,IAAI,SAAS;CAMd;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CACjE;AAED,oBAAY,aAAa;IACvB,kBAAkB,uBAAuB;IACzC,wBAAwB,6BAA6B;CACtD;AAED,oBAAY,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,uBAAuB,CAAC,GAAG,CAAC,KAAK,uBAAuB,CAAC,GAAG,CAAC,CAAC"}
|
package/dist/retry.decorator.js
CHANGED
|
@@ -56,12 +56,17 @@ function Retryable(options) {
|
|
|
56
56
|
catch (e) {
|
|
57
57
|
if (--maxAttempts < 0) {
|
|
58
58
|
(e === null || e === void 0 ? void 0 : e.message) && console.error(e.message);
|
|
59
|
-
|
|
59
|
+
const maxAttemptsErrorInstance = new MaxAttemptsError(e === null || e === void 0 ? void 0 : e.message);
|
|
60
|
+
// Add the existing error stack if present
|
|
61
|
+
if (e === null || e === void 0 ? void 0 : e.stack) {
|
|
62
|
+
maxAttemptsErrorInstance.stack = e.stack;
|
|
63
|
+
}
|
|
64
|
+
throw maxAttemptsErrorInstance;
|
|
60
65
|
}
|
|
61
66
|
if (!canRetry(e)) {
|
|
62
67
|
throw e;
|
|
63
68
|
}
|
|
64
|
-
backOff && (yield utils_1.sleep(backOff));
|
|
69
|
+
backOff && (yield (0, utils_1.sleep)(backOff));
|
|
65
70
|
if (options.backOffPolicy === BackOffPolicy.ExponentialBackOffPolicy) {
|
|
66
71
|
const newBackOff = backOff * options.exponentialOption.multiplier;
|
|
67
72
|
backOff = newBackOff > options.exponentialOption.maxInterval ? options.exponentialOption.maxInterval : newBackOff;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.decorator.js","sourceRoot":"","sources":["../src/retry.decorator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mCAAgC;AAEhC;;;;GAIG;AACH,SAAgB,SAAS,CAAC,OAAqB;IAC7C;;;;;;;;OAQG;IACH,OAAO,UAAS,MAA2B,EAAE,WAAmB,EAAE,UAAwC;QACxG,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"retry.decorator.js","sourceRoot":"","sources":["../src/retry.decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.decorator.test.d.ts","sourceRoot":"","sources":["../src/retry.decorator.test.ts"],"names":[],"mappings":""}
|
|
@@ -60,19 +60,19 @@ class TestClass {
|
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
__decorate([
|
|
63
|
-
retry_decorator_1.Retryable({ maxAttempts: 2 }),
|
|
63
|
+
(0, retry_decorator_1.Retryable)({ maxAttempts: 2 }),
|
|
64
64
|
__metadata("design:type", Function),
|
|
65
65
|
__metadata("design:paramtypes", []),
|
|
66
66
|
__metadata("design:returntype", Promise)
|
|
67
67
|
], TestClass.prototype, "testMethod", null);
|
|
68
68
|
__decorate([
|
|
69
|
-
retry_decorator_1.Retryable({ maxAttempts: 2, value: [SyntaxError, ReferenceError] }),
|
|
69
|
+
(0, retry_decorator_1.Retryable)({ maxAttempts: 2, value: [SyntaxError, ReferenceError] }),
|
|
70
70
|
__metadata("design:type", Function),
|
|
71
71
|
__metadata("design:paramtypes", []),
|
|
72
72
|
__metadata("design:returntype", Promise)
|
|
73
73
|
], TestClass.prototype, "testMethodWithException", null);
|
|
74
74
|
__decorate([
|
|
75
|
-
retry_decorator_1.Retryable({
|
|
75
|
+
(0, retry_decorator_1.Retryable)({
|
|
76
76
|
maxAttempts: 3,
|
|
77
77
|
doRetry: (e) => {
|
|
78
78
|
return e.message === 'Error: 429';
|
|
@@ -83,7 +83,7 @@ __decorate([
|
|
|
83
83
|
__metadata("design:returntype", Promise)
|
|
84
84
|
], TestClass.prototype, "testDoRetry", null);
|
|
85
85
|
__decorate([
|
|
86
|
-
retry_decorator_1.Retryable({
|
|
86
|
+
(0, retry_decorator_1.Retryable)({
|
|
87
87
|
maxAttempts: 3,
|
|
88
88
|
backOffPolicy: retry_decorator_1.BackOffPolicy.FixedBackOffPolicy,
|
|
89
89
|
backOff: 1000,
|
|
@@ -93,7 +93,7 @@ __decorate([
|
|
|
93
93
|
__metadata("design:returntype", Promise)
|
|
94
94
|
], TestClass.prototype, "fixedBackOffRetry", null);
|
|
95
95
|
__decorate([
|
|
96
|
-
retry_decorator_1.Retryable({
|
|
96
|
+
(0, retry_decorator_1.Retryable)({
|
|
97
97
|
maxAttempts: 3,
|
|
98
98
|
backOffPolicy: retry_decorator_1.BackOffPolicy.ExponentialBackOffPolicy,
|
|
99
99
|
exponentialOption: { maxInterval: 4000, multiplier: 3 },
|
|
@@ -102,6 +102,23 @@ __decorate([
|
|
|
102
102
|
__metadata("design:paramtypes", []),
|
|
103
103
|
__metadata("design:returntype", Promise)
|
|
104
104
|
], TestClass.prototype, "exponentialBackOffRetry", null);
|
|
105
|
+
describe('Capture original error data Test', () => {
|
|
106
|
+
test('exceed max retry', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
107
|
+
const testClass = new TestClass();
|
|
108
|
+
const originalStackTrace = 'foo';
|
|
109
|
+
const errorMsg = 'rejected';
|
|
110
|
+
const unexpectedError = new Error(errorMsg);
|
|
111
|
+
unexpectedError.stack = originalStackTrace;
|
|
112
|
+
const calledSpy = jest.spyOn(testClass, 'called');
|
|
113
|
+
calledSpy.mockRejectedValue(unexpectedError);
|
|
114
|
+
try {
|
|
115
|
+
yield testClass.testMethod();
|
|
116
|
+
}
|
|
117
|
+
catch (e) {
|
|
118
|
+
expect(e.stack).toEqual(originalStackTrace);
|
|
119
|
+
}
|
|
120
|
+
}));
|
|
121
|
+
});
|
|
105
122
|
describe('Retry Test', () => {
|
|
106
123
|
let testClass;
|
|
107
124
|
beforeEach(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.decorator.test.js","sourceRoot":"","sources":["../src/retry.decorator.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,uDAA6D;AAE7D,MAAM,SAAS;IAEb;QACE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAEK,UAAU;;YACd,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC;YAC9D,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;KAAA;IAGK,uBAAuB;;YAC3B,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC;YAC9D,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;KAAA;IAQK,WAAW;;YACf,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,YAAY,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YACnG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;KAAA;IAOK,iBAAiB;;YACrB,OAAO,CAAC,IAAI,CAAC,wCAAwC,EAAE,IAAI,CAAC,KAAK,YAAY,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YAChH,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;KAAA;IAOK,uBAAuB;;YAC3B,OAAO,CAAC,IAAI,CAAC,oEAAoE,EAAE,IAAI,CAAC,KAAK,YAAY,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;YAC5I,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;KAAA;IAEK,MAAM;;YACV,OAAO,0BAA0B,CAAC;QACpC,CAAC;KAAA;CACF;AA7CC;IADC,2BAAS,
|
|
1
|
+
{"version":3,"file":"retry.decorator.test.js","sourceRoot":"","sources":["../src/retry.decorator.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export declare const sleep:
|
|
1
|
+
export declare const sleep: (ms?: number) => void;
|
|
2
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,IAAuE,CAAC"}
|
package/dist/utils.js
CHANGED
|
@@ -2,5 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sleep = void 0;
|
|
4
4
|
// wrap the native setTimeout with Promise so it can be used with `await`.
|
|
5
|
-
|
|
5
|
+
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
|
|
6
|
+
exports.sleep = sleep;
|
|
6
7
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,0EAA0E;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAAA,0EAA0E;AACnE,MAAM,KAAK,GAA0B,CAAC,EAAW,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAAhG,QAAA,KAAK,SAA2F"}
|
package/jest.config.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typescript-retry-decorator",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.6",
|
|
4
4
|
"description": "A simple retry decorator for typescript with no dependency.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"test": "jest",
|
|
10
10
|
"example": "ts-node src/example.ts",
|
|
11
11
|
"lint": "eslint --ext .ts src/",
|
|
12
|
-
"build": "tsc
|
|
12
|
+
"build": "tsc --declaration --project ."
|
|
13
13
|
},
|
|
14
14
|
"repository": {
|
|
15
15
|
"type": "git",
|
|
@@ -27,15 +27,15 @@
|
|
|
27
27
|
},
|
|
28
28
|
"homepage": "https://github.com/vcfvct/typescript-retry-decorator#readme",
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@types/jest": "^
|
|
31
|
-
"@types/node": "^
|
|
32
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
33
|
-
"@typescript-eslint/parser": "^
|
|
34
|
-
"eslint": "^
|
|
30
|
+
"@types/jest": "^28.1.1",
|
|
31
|
+
"@types/node": "^17.0.41",
|
|
32
|
+
"@typescript-eslint/eslint-plugin": "^5.27.1",
|
|
33
|
+
"@typescript-eslint/parser": "^5.27.1",
|
|
34
|
+
"eslint": "^8.17.0",
|
|
35
35
|
"eslint-config-ts-vcfvct": "^1.0.0",
|
|
36
|
-
"jest": "^
|
|
37
|
-
"ts-jest": "^
|
|
38
|
-
"ts-node": "^
|
|
39
|
-
"typescript": "^4.
|
|
36
|
+
"jest": "^28.1.1",
|
|
37
|
+
"ts-jest": "^28.0.4",
|
|
38
|
+
"ts-node": "^10.8.1",
|
|
39
|
+
"typescript": "^4.7.3"
|
|
40
40
|
}
|
|
41
41
|
}
|
package/src/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export * from './retry.decorator';
|
|
@@ -53,6 +53,27 @@ class TestClass {
|
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
+
describe('Capture original error data Test', () => {
|
|
57
|
+
test('exceed max retry', async () => {
|
|
58
|
+
const testClass = new TestClass();
|
|
59
|
+
|
|
60
|
+
const originalStackTrace = 'foo';
|
|
61
|
+
const errorMsg = 'rejected';
|
|
62
|
+
|
|
63
|
+
const unexpectedError = new Error(errorMsg);
|
|
64
|
+
unexpectedError.stack = originalStackTrace;
|
|
65
|
+
|
|
66
|
+
const calledSpy = jest.spyOn(testClass, 'called');
|
|
67
|
+
|
|
68
|
+
calledSpy.mockRejectedValue(unexpectedError);
|
|
69
|
+
try {
|
|
70
|
+
await testClass.testMethod();
|
|
71
|
+
} catch (e) {
|
|
72
|
+
expect(e.stack).toEqual(originalStackTrace);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
56
77
|
|
|
57
78
|
describe('Retry Test', () => {
|
|
58
79
|
let testClass: TestClass;
|
package/src/retry.decorator.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { sleep } from './utils';
|
|
|
5
5
|
*
|
|
6
6
|
* @param options the 'RetryOptions'
|
|
7
7
|
*/
|
|
8
|
-
export function Retryable(options: RetryOptions):
|
|
8
|
+
export function Retryable(options: RetryOptions): DecoratorFunction {
|
|
9
9
|
/**
|
|
10
10
|
* target: The prototype of the class (Object)
|
|
11
11
|
* propertyKey: The name of the method (string | symbol).
|
|
@@ -16,7 +16,7 @@ export function Retryable(options: RetryOptions): Function {
|
|
|
16
16
|
*
|
|
17
17
|
*/
|
|
18
18
|
return function(target: Record<string, any>, propertyKey: string, descriptor: TypedPropertyDescriptor<any>) {
|
|
19
|
-
const originalFn
|
|
19
|
+
const originalFn = descriptor.value;
|
|
20
20
|
// set default value for ExponentialBackOffPolicy
|
|
21
21
|
if (options.backOffPolicy === BackOffPolicy.ExponentialBackOffPolicy) {
|
|
22
22
|
setExponentialBackOffPolicyDefault();
|
|
@@ -35,13 +35,19 @@ export function Retryable(options: RetryOptions): Function {
|
|
|
35
35
|
return descriptor;
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
-
async function retryAsync(fn:
|
|
38
|
+
async function retryAsync(fn: () => any, args: any[], maxAttempts: number, backOff?: number): Promise<any> {
|
|
39
39
|
try {
|
|
40
40
|
return await fn.apply(this, args);
|
|
41
41
|
} catch (e) {
|
|
42
42
|
if (--maxAttempts < 0) {
|
|
43
43
|
e?.message && console.error(e.message);
|
|
44
|
-
|
|
44
|
+
const maxAttemptsErrorInstance = new MaxAttemptsError(e?.message);
|
|
45
|
+
// Add the existing error stack if present
|
|
46
|
+
if(e?.stack) {
|
|
47
|
+
maxAttemptsErrorInstance.stack = e.stack;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
throw maxAttemptsErrorInstance;
|
|
45
51
|
}
|
|
46
52
|
if (!canRetry(e)) {
|
|
47
53
|
throw e;
|
|
@@ -75,7 +81,7 @@ export function Retryable(options: RetryOptions): Function {
|
|
|
75
81
|
}
|
|
76
82
|
|
|
77
83
|
export class MaxAttemptsError extends Error {
|
|
78
|
-
code = '429'
|
|
84
|
+
code = '429';
|
|
79
85
|
/* if target is ES5, need the 'new.target.prototype'
|
|
80
86
|
constructor(msg?: string) {
|
|
81
87
|
super(msg)
|
|
@@ -97,3 +103,5 @@ export enum BackOffPolicy {
|
|
|
97
103
|
ExponentialBackOffPolicy = 'ExponentialBackOffPolicy'
|
|
98
104
|
}
|
|
99
105
|
|
|
106
|
+
export type DecoratorFunction = (target: Record<string, any>, propertyKey: string, descriptor: TypedPropertyDescriptor<any>) => TypedPropertyDescriptor<any>;
|
|
107
|
+
|
package/src/utils.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// wrap the native setTimeout with Promise so it can be used with `await`.
|
|
2
|
-
export const sleep:
|
|
2
|
+
export const sleep: (ms?: number) => void = (ms?: number) => new Promise(resolve => setTimeout(resolve, ms));
|
package/tsconfig.json
CHANGED