typescript-retry-decorator 2.5.1 → 2.5.3

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.
Files changed (52) hide show
  1. package/AGENTS.md +121 -0
  2. package/dist/{example.d.ts.map → cjs/example.d.ts.map} +1 -1
  3. package/dist/cjs/example.js.map +1 -0
  4. package/dist/cjs/index.d.ts +2 -0
  5. package/dist/{index.d.ts.map → cjs/index.d.ts.map} +1 -1
  6. package/dist/{index.js → cjs/index.js} +1 -1
  7. package/dist/cjs/index.js.map +1 -0
  8. package/dist/cjs/retry.decorator.d.ts.map +1 -0
  9. package/dist/{retry.decorator.js → cjs/retry.decorator.js} +2 -2
  10. package/dist/cjs/retry.decorator.js.map +1 -0
  11. package/dist/cjs/retry.decorator.test.d.ts.map +1 -0
  12. package/dist/cjs/retry.decorator.test.js +332 -0
  13. package/dist/cjs/retry.decorator.test.js.map +1 -0
  14. package/dist/cjs/utils.d.ts +2 -0
  15. package/dist/cjs/utils.d.ts.map +1 -0
  16. package/dist/{utils.js → cjs/utils.js} +1 -1
  17. package/dist/cjs/utils.js.map +1 -0
  18. package/dist/esm/example.js +180 -0
  19. package/dist/esm/example.js.map +1 -0
  20. package/dist/esm/index.js +2 -0
  21. package/dist/esm/index.js.map +1 -0
  22. package/dist/esm/retry.decorator.js +145 -0
  23. package/dist/esm/retry.decorator.js.map +1 -0
  24. package/dist/{retry.decorator.test.js → esm/retry.decorator.test.js} +41 -45
  25. package/dist/esm/retry.decorator.test.js.map +1 -0
  26. package/dist/esm/utils.js +3 -0
  27. package/dist/esm/utils.js.map +1 -0
  28. package/package.json +21 -12
  29. package/src/index.ts +1 -1
  30. package/src/retry.decorator.test.ts +22 -24
  31. package/src/retry.decorator.ts +1 -1
  32. package/src/utils.ts +2 -1
  33. package/ts5-decorator.md +73 -0
  34. package/tsconfig.cjs.json +9 -0
  35. package/tsconfig.esm.json +9 -0
  36. package/tsconfig.json +3 -11
  37. package/vitest.config.mts +12 -0
  38. package/dist/example.js.map +0 -1
  39. package/dist/index.d.ts +0 -2
  40. package/dist/index.js.map +0 -1
  41. package/dist/retry.decorator.d.ts.map +0 -1
  42. package/dist/retry.decorator.js.map +0 -1
  43. package/dist/retry.decorator.test.d.ts.map +0 -1
  44. package/dist/retry.decorator.test.js.map +0 -1
  45. package/dist/utils.d.ts +0 -2
  46. package/dist/utils.d.ts.map +0 -1
  47. package/dist/utils.js.map +0 -1
  48. package/jest.config.js +0 -12
  49. /package/dist/{example.d.ts → cjs/example.d.ts} +0 -0
  50. /package/dist/{example.js → cjs/example.js} +0 -0
  51. /package/dist/{retry.decorator.d.ts → cjs/retry.decorator.d.ts} +0 -0
  52. /package/dist/{retry.decorator.test.d.ts → cjs/retry.decorator.test.d.ts} +0 -0
package/AGENTS.md ADDED
@@ -0,0 +1,121 @@
1
+ # AGENTS.md
2
+
3
+ This repository is `typescript-retry-decorator`: a small TypeScript library that provides a `@Retryable` decorator (supports both legacy `experimentalDecorators` and TS5 “standard decorators” runtime signature).
4
+
5
+ ## Scope & Goals
6
+
7
+ - Keep changes small and focused; avoid refactors not required by the task.
8
+ - Preserve public API behavior (exports from `src/index.ts` → `dist/`).
9
+ - Prefer correctness + tests over cleverness.
10
+ - Maintain "0 dependency" philosophy for runtime code.
11
+
12
+ ## Repo Layout
13
+
14
+ - `src/`: library source + tests
15
+ - `src/retry.decorator.ts`: main implementation
16
+ - `src/utils.ts`: helpers (e.g. `sleep`)
17
+ - `src/*.test.ts`: Vitest tests (e.g. `src/retry.decorator.test.ts`)
18
+ - `dist/`: TypeScript build output (generated) - contains `cjs` and `esm` folders.
19
+ - Config: `tsconfig.json` (base), `tsconfig.cjs.json`, `tsconfig.esm.json`, `.eslintrc.js`, `vitest.config.mts`.
20
+
21
+ ## Package Manager
22
+
23
+ - Use `pnpm` only.
24
+ - Install deps: `pnpm install`
25
+
26
+ ## Build / Lint / Test
27
+
28
+ ### Build
29
+
30
+ - Build TypeScript (emits to `dist/cjs` and `dist/esm`): `pnpm build`
31
+ - Scripts: `pnpm run build:cjs` and `pnpm run build:esm`
32
+
33
+ ### Lint
34
+
35
+ - Lint source: `pnpm lint`
36
+ - Script: `eslint --ext .ts src/`
37
+
38
+ ### Test
39
+
40
+ - **Runner**: Vitest (replaced Jest)
41
+ - Run all tests: `pnpm test`
42
+ - Watch mode: `pnpm test:watch`
43
+
44
+ #### Run a single test file
45
+
46
+ - `pnpm test -- src/retry.decorator.test.ts`
47
+
48
+ #### Run a single test by name
49
+
50
+ - Substring/regex match by `-t`:
51
+ - `pnpm test -- -t "exceed max retry"`
52
+ - `pnpm test -- -t "standard decorators signature"`
53
+
54
+ #### Run a single test by file + name
55
+
56
+ - `pnpm test -- src/retry.decorator.test.ts -t "standard decorators signature works"`
57
+
58
+ ## TypeScript & Build Configuration
59
+
60
+ - **Dual Build**: CommonJS (`dist/cjs`) and ESM (`dist/esm`).
61
+ - **Decorators**:
62
+ - Legacy `experimentalDecorators: true` enabled.
63
+ - Supports TS5 standard decorators (stage 3) via runtime detection.
64
+ - **Strictness**: `noImplicitAny`, `strictNullChecks` are enabled.
65
+
66
+ ## Code Style (Enforced by ESLint)
67
+
68
+ See `.eslintrc.js` for rules.
69
+
70
+ ### Formatting & Syntax
71
+ - **Indentation**: 2 spaces.
72
+ - **Quotes**: Single quotes (`'`), template strings allowed.
73
+ - **Semicolons**: Required (`always`).
74
+ - **Trailing Spaces**: Disallowed.
75
+ - **Async**: Always use `async/await` over raw promises where possible.
76
+ - **Functions**:
77
+ - Prefer arrow functions for callbacks.
78
+ - Prefer named functions for top-level exports if hoisting is beneficial (though `const` exports are common here).
79
+
80
+ ### Imports
81
+ - Prefer relative imports within `src/` (e.g., `import { sleep } from './utils';`).
82
+ - **NO** absolute imports or path aliases (keep it simple for library portability).
83
+ - Keep external and internal imports grouped separately.
84
+
85
+ ### Naming Conventions
86
+ - **Classes/Types**: `PascalCase` (e.g., `RetryOptions`).
87
+ - **Functions/Vars**: `camelCase` (e.g., `applyBackoffStrategy`).
88
+ - **Files**: Dot-separated (e.g., `retry.decorator.ts`). Match existing patterns.
89
+ - **Tests**: `describe` blocks with clear subject names; `it` or `test` with behavioral descriptions.
90
+
91
+ ## Error Handling & Logging
92
+
93
+ - **Errors**: Throw `Error` or custom subclasses.
94
+ - **Stack Traces**: Preserve stack traces when wrapping errors (e.g., `MaxAttemptsError`).
95
+ - **Logging**: Do NOT use `console.log` directly in library code. Use the provided `useConsoleLogger` option or a custom logger interface if strictly necessary.
96
+
97
+ ## Decorator Compatibility
98
+
99
+ The `Retryable` decorator must support two distinct call signatures:
100
+ 1. **Legacy**: `(target, propertyKey, descriptor)`
101
+ 2. **Standard (TS5)**: `(value, context)`
102
+
103
+ **Critical**: When modifying the decorator, ensure `this` context is preserved using `fn.apply(this, args)` or `fn.call(this, ...args)`.
104
+
105
+ ## Testing Guidance
106
+
107
+ - **Mocking**: Use `vi` (Vitest) for mocking, not `jest`.
108
+ - Example: `vi.fn()`, `vi.spyOn()`.
109
+ - **Timers**: Use fake timers for backoff testing to avoid slow tests.
110
+ - `vi.useFakeTimers()`, `vi.advanceTimersByTime(...)`.
111
+ - **Determinism**: Ensure tests do not rely on real wall-clock time if possible.
112
+
113
+ ## Generated Artifacts
114
+
115
+ - Do NOT edit files in `dist/`.
116
+ - `dist/` structure is managed by the build scripts (`build:cjs`, `build:esm`).
117
+
118
+ ## Cursor / Copilot Rules
119
+
120
+ - No specific rules files found (`.cursorrules`, `.github/copilot-instructions.md`).
121
+ - Follow the guidelines in this file as the source of truth.
@@ -1 +1 @@
1
- {"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../src/example.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../src/example.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/example.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './retry.decorator.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
@@ -14,5 +14,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./retry.decorator"), exports);
17
+ __exportStar(require("./retry.decorator.js"), exports);
18
18
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.decorator.d.ts","sourceRoot":"","sources":["../../src/retry.decorator.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,uBAAuB,GAAG,CACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,WAAW,EAAE,MAAM,GAAG,MAAM,EAC5B,UAAU,EAAE,uBAAuB,CAAC,GAAG,CAAC,KACrC,uBAAuB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAEzC,MAAM,MAAM,uBAAuB,GAAG,CACpC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAC9B,OAAO,EAAE,wBAAwB,KAC9B,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC;AAEtC,MAAM,MAAM,kBAAkB,GAAG,uBAAuB,GAAG,uBAAuB,CAAC;AAGnF,MAAM,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAExD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,kBAAkB,CAuGnE;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,IAAI,SAAS;CAMd;AAED,UAAU,kBAAkB;IAC1B,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;IAC9B,iBAAiB,CAAC,EAAE;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB;;;WAGG;QACH,eAAe,CAAC,EAAE,0BAA0B,CAAC;KAC9C,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,oBAAY,aAAa;IACvB,kBAAkB,uBAAuB;IACzC,wBAAwB,6BAA6B;CACtD;AAED;;;GAGG;AACH,oBAAY,0BAA0B;IACpC;;OAEG;IACH,UAAU,eAAe;IACzB;;OAEG;IACH,WAAW,gBAAgB;CAC5B"}
@@ -10,7 +10,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ExponentialBackoffStrategy = exports.BackOffPolicy = exports.MaxAttemptsError = exports.Retryable = void 0;
13
- const utils_1 = require("./utils");
13
+ const utils_js_1 = require("./utils.js");
14
14
  /**
15
15
  * Retry decorator (legacy + TypeScript 5 standard decorators).
16
16
  *
@@ -71,7 +71,7 @@ function Retryable(options) {
71
71
  throw e;
72
72
  }
73
73
  if (backOff) {
74
- yield (0, utils_1.sleep)(applyBackoffStrategy(backOff));
74
+ yield (0, utils_js_1.sleep)(applyBackoffStrategy(backOff));
75
75
  if (options.exponentialOption && options.backOffPolicy === BackOffPolicy.ExponentialBackOffPolicy) {
76
76
  backOff = Math.min(backOff * options.exponentialOption.multiplier, options.exponentialOption.maxInterval);
77
77
  }
@@ -0,0 +1 @@
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":""}
@@ -0,0 +1,332 @@
1
+ "use strict";
2
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
3
+ var useValue = arguments.length > 2;
4
+ for (var i = 0; i < initializers.length; i++) {
5
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
6
+ }
7
+ return useValue ? value : void 0;
8
+ };
9
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
10
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
11
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
12
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
13
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
14
+ var _, done = false;
15
+ for (var i = decorators.length - 1; i >= 0; i--) {
16
+ var context = {};
17
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
18
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
19
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
20
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
21
+ if (kind === "accessor") {
22
+ if (result === void 0) continue;
23
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
24
+ if (_ = accept(result.get)) descriptor.get = _;
25
+ if (_ = accept(result.set)) descriptor.set = _;
26
+ if (_ = accept(result.init)) initializers.unshift(_);
27
+ }
28
+ else if (_ = accept(result)) {
29
+ if (kind === "field") initializers.unshift(_);
30
+ else descriptor[key] = _;
31
+ }
32
+ }
33
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
34
+ done = true;
35
+ };
36
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
37
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38
+ return new (P || (P = Promise))(function (resolve, reject) {
39
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
40
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
41
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
42
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
43
+ });
44
+ };
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ const vitest_1 = require("vitest");
47
+ const retry_decorator_1 = require("./retry.decorator");
48
+ const utils_1 = require("./utils");
49
+ /**
50
+ * Legacy decorator mode toggle
51
+ *
52
+ * This test suite covers both call shapes:
53
+ * - Legacy/"experimental" decorators (target, propertyKey, descriptor)
54
+ * - TypeScript 5+ standard decorators (value, context)
55
+ *
56
+ * To compile/run these tests in legacy mode, enable these in tsconfig.json:
57
+ * "experimentalDecorators": true,
58
+ * "emitDecoratorMetadata": true
59
+ *
60
+ * To compile/run in TS5 standard decorators mode, disable/remove them.
61
+ */
62
+ vitest_1.vi.mock('./utils', () => ({
63
+ sleep: vitest_1.vi.fn(),
64
+ }));
65
+ // CustomError for testing.
66
+ class CustomError extends Error {
67
+ constructor(message) {
68
+ // Call the parent class constructor with the provided message
69
+ super(message);
70
+ // Set the prototype and name properties
71
+ Object.setPrototypeOf(this, CustomError.prototype);
72
+ this.name = 'CustomError';
73
+ }
74
+ }
75
+ let TestClass = (() => {
76
+ var _a;
77
+ let _instanceExtraInitializers = [];
78
+ let _testMethodWithoutBackOff_decorators;
79
+ let _testMethodWithException_decorators;
80
+ let _testDoRetry_decorators;
81
+ let _fixedBackOffRetry_decorators;
82
+ let _exponentialBackOffRetry_decorators;
83
+ let _exponentialBackOffWithJitterRetry_decorators;
84
+ let _noLog_decorators;
85
+ let _useOriginalError_decorators;
86
+ return _a = class TestClass {
87
+ constructor() {
88
+ this.count = __runInitializers(this, _instanceExtraInitializers);
89
+ this.count = 0;
90
+ }
91
+ testMethodWithoutBackOff() {
92
+ return __awaiter(this, void 0, void 0, function* () {
93
+ console.log(`test method is called for ${++this.count} time`);
94
+ yield this.called();
95
+ });
96
+ }
97
+ testMethodWithException() {
98
+ return __awaiter(this, void 0, void 0, function* () {
99
+ console.log(`test method is called for ${++this.count} time`);
100
+ yield this.called();
101
+ });
102
+ }
103
+ testDoRetry() {
104
+ return __awaiter(this, void 0, void 0, function* () {
105
+ console.info(`Calling doRetry for the ${++this.count} time at ${new Date().toLocaleTimeString()}`);
106
+ yield this.called();
107
+ });
108
+ }
109
+ fixedBackOffRetry() {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ console.info(`Calling fixedBackOffRetry 1s for the ${++this.count} time at ${new Date().toLocaleTimeString()}`);
112
+ yield this.called();
113
+ });
114
+ }
115
+ exponentialBackOffRetry() {
116
+ return __awaiter(this, void 0, void 0, function* () {
117
+ console.info(`Calling ExponentialBackOffRetry backOff 1s, multiplier=3 for the ${++this.count} time at ${new Date().toLocaleTimeString()}`);
118
+ yield this.called();
119
+ });
120
+ }
121
+ exponentialBackOffWithJitterRetry() {
122
+ return __awaiter(this, void 0, void 0, function* () {
123
+ console.info(`Calling ExponentialBackOffRetry backOff 1s, multiplier=2 for the ${++this.count} time at ${new Date().toLocaleTimeString()}`);
124
+ yield this.called();
125
+ });
126
+ }
127
+ noLog() {
128
+ return __awaiter(this, void 0, void 0, function* () {
129
+ console.log(`test method is called for ${++this.count} time`);
130
+ yield this.called();
131
+ });
132
+ }
133
+ useOriginalError() {
134
+ return __awaiter(this, void 0, void 0, function* () {
135
+ yield this.called();
136
+ });
137
+ }
138
+ called() {
139
+ return __awaiter(this, void 0, void 0, function* () {
140
+ return 'from real implementation';
141
+ });
142
+ }
143
+ },
144
+ (() => {
145
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
146
+ _testMethodWithoutBackOff_decorators = [(0, retry_decorator_1.Retryable)({ maxAttempts: 2 })];
147
+ _testMethodWithException_decorators = [(0, retry_decorator_1.Retryable)({ maxAttempts: 3, value: [SyntaxError, ReferenceError, CustomError] })];
148
+ _testDoRetry_decorators = [(0, retry_decorator_1.Retryable)({
149
+ maxAttempts: 3,
150
+ doRetry: (e) => {
151
+ return e.message === 'Error: 429';
152
+ },
153
+ })];
154
+ _fixedBackOffRetry_decorators = [(0, retry_decorator_1.Retryable)({
155
+ maxAttempts: 3,
156
+ backOffPolicy: retry_decorator_1.BackOffPolicy.FixedBackOffPolicy,
157
+ backOff: 1000,
158
+ })];
159
+ _exponentialBackOffRetry_decorators = [(0, retry_decorator_1.Retryable)({
160
+ maxAttempts: 3,
161
+ backOffPolicy: retry_decorator_1.BackOffPolicy.ExponentialBackOffPolicy,
162
+ exponentialOption: { maxInterval: 4000, multiplier: 3 },
163
+ })];
164
+ _exponentialBackOffWithJitterRetry_decorators = [(0, retry_decorator_1.Retryable)({
165
+ maxAttempts: 3,
166
+ backOffPolicy: retry_decorator_1.BackOffPolicy.ExponentialBackOffPolicy,
167
+ exponentialOption: { maxInterval: 4000, multiplier: 2, backoffStrategy: retry_decorator_1.ExponentialBackoffStrategy.FullJitter },
168
+ })];
169
+ _noLog_decorators = [(0, retry_decorator_1.Retryable)({ maxAttempts: 2, useConsoleLogger: false })];
170
+ _useOriginalError_decorators = [(0, retry_decorator_1.Retryable)({ maxAttempts: 2, useOriginalError: true })];
171
+ __esDecorate(_a, null, _testMethodWithoutBackOff_decorators, { kind: "method", name: "testMethodWithoutBackOff", static: false, private: false, access: { has: obj => "testMethodWithoutBackOff" in obj, get: obj => obj.testMethodWithoutBackOff }, metadata: _metadata }, null, _instanceExtraInitializers);
172
+ __esDecorate(_a, null, _testMethodWithException_decorators, { kind: "method", name: "testMethodWithException", static: false, private: false, access: { has: obj => "testMethodWithException" in obj, get: obj => obj.testMethodWithException }, metadata: _metadata }, null, _instanceExtraInitializers);
173
+ __esDecorate(_a, null, _testDoRetry_decorators, { kind: "method", name: "testDoRetry", static: false, private: false, access: { has: obj => "testDoRetry" in obj, get: obj => obj.testDoRetry }, metadata: _metadata }, null, _instanceExtraInitializers);
174
+ __esDecorate(_a, null, _fixedBackOffRetry_decorators, { kind: "method", name: "fixedBackOffRetry", static: false, private: false, access: { has: obj => "fixedBackOffRetry" in obj, get: obj => obj.fixedBackOffRetry }, metadata: _metadata }, null, _instanceExtraInitializers);
175
+ __esDecorate(_a, null, _exponentialBackOffRetry_decorators, { kind: "method", name: "exponentialBackOffRetry", static: false, private: false, access: { has: obj => "exponentialBackOffRetry" in obj, get: obj => obj.exponentialBackOffRetry }, metadata: _metadata }, null, _instanceExtraInitializers);
176
+ __esDecorate(_a, null, _exponentialBackOffWithJitterRetry_decorators, { kind: "method", name: "exponentialBackOffWithJitterRetry", static: false, private: false, access: { has: obj => "exponentialBackOffWithJitterRetry" in obj, get: obj => obj.exponentialBackOffWithJitterRetry }, metadata: _metadata }, null, _instanceExtraInitializers);
177
+ __esDecorate(_a, null, _noLog_decorators, { kind: "method", name: "noLog", static: false, private: false, access: { has: obj => "noLog" in obj, get: obj => obj.noLog }, metadata: _metadata }, null, _instanceExtraInitializers);
178
+ __esDecorate(_a, null, _useOriginalError_decorators, { kind: "method", name: "useOriginalError", static: false, private: false, access: { has: obj => "useOriginalError" in obj, get: obj => obj.useOriginalError }, metadata: _metadata }, null, _instanceExtraInitializers);
179
+ if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
180
+ })(),
181
+ _a;
182
+ })();
183
+ (0, vitest_1.describe)('Capture original error data Test', () => {
184
+ (0, vitest_1.test)('exceed max retry', () => __awaiter(void 0, void 0, void 0, function* () {
185
+ const testClass = new TestClass();
186
+ const originalStackTrace = 'foo';
187
+ const errorMsg = 'rejected';
188
+ const unexpectedError = new Error(errorMsg);
189
+ unexpectedError.stack = originalStackTrace;
190
+ const calledSpy = vitest_1.vi.spyOn(testClass, 'called');
191
+ calledSpy.mockRejectedValue(unexpectedError);
192
+ try {
193
+ yield testClass.testMethodWithoutBackOff();
194
+ }
195
+ catch (e) {
196
+ (0, vitest_1.expect)(e.stack).toEqual(originalStackTrace);
197
+ }
198
+ }));
199
+ });
200
+ (0, vitest_1.describe)('Retry Test', () => {
201
+ let testClass;
202
+ (0, vitest_1.beforeEach)(() => {
203
+ vitest_1.vi.clearAllMocks();
204
+ testClass = new TestClass();
205
+ });
206
+ (0, vitest_1.test)('normal retry without backoff', () => __awaiter(void 0, void 0, void 0, function* () {
207
+ const calledSpy = vitest_1.vi.spyOn(testClass, 'called');
208
+ calledSpy.mockRejectedValueOnce(new Error('rejected'));
209
+ calledSpy.mockResolvedValueOnce('fulfilled');
210
+ yield testClass.testMethodWithoutBackOff();
211
+ (0, vitest_1.expect)(calledSpy).toHaveBeenCalledTimes(2);
212
+ (0, vitest_1.expect)(utils_1.sleep).toHaveBeenCalledTimes(0);
213
+ }));
214
+ (0, vitest_1.test)('exceed max retry', () => __awaiter(void 0, void 0, void 0, function* () {
215
+ const calledSpy = vitest_1.vi.spyOn(testClass, 'called');
216
+ const errorMsg = 'rejected';
217
+ calledSpy.mockRejectedValue(new Error(errorMsg));
218
+ try {
219
+ yield testClass.testMethodWithoutBackOff();
220
+ }
221
+ catch (e) {
222
+ (0, vitest_1.expect)(e).toBeInstanceOf(retry_decorator_1.MaxAttemptsError);
223
+ (0, vitest_1.expect)(e.message.includes(errorMsg));
224
+ }
225
+ (0, vitest_1.expect)(calledSpy).toHaveBeenCalledTimes(3);
226
+ }));
227
+ (0, vitest_1.test)('retry with specific error', () => __awaiter(void 0, void 0, void 0, function* () {
228
+ const calledSpy = vitest_1.vi.spyOn(testClass, 'called');
229
+ calledSpy.mockImplementationOnce(() => { throw new CustomError('I failed!'); });
230
+ yield testClass.testMethodWithException();
231
+ (0, vitest_1.expect)(calledSpy).toHaveBeenCalledTimes(2);
232
+ }));
233
+ (0, vitest_1.test)('retry with specific error not match', () => __awaiter(void 0, void 0, void 0, function* () {
234
+ const calledSpy = vitest_1.vi.spyOn(testClass, 'called');
235
+ calledSpy.mockImplementationOnce(() => { throw new Error('I failed!'); });
236
+ try {
237
+ yield testClass.testMethodWithException();
238
+ }
239
+ catch (_a) {
240
+ // ignore
241
+ }
242
+ (0, vitest_1.expect)(calledSpy).toHaveBeenCalledTimes(1);
243
+ }));
244
+ (0, vitest_1.test)('do retry when high order function retry true', () => __awaiter(void 0, void 0, void 0, function* () {
245
+ const calledSpy = vitest_1.vi.spyOn(testClass, 'called');
246
+ calledSpy.mockImplementationOnce(() => { throw new Error('Error: 429'); });
247
+ yield testClass.testDoRetry();
248
+ (0, vitest_1.expect)(calledSpy).toHaveBeenCalledTimes(2);
249
+ }));
250
+ (0, vitest_1.test)('do NOT retry when high order function retry false', () => __awaiter(void 0, void 0, void 0, function* () {
251
+ const calledSpy = vitest_1.vi.spyOn(testClass, 'called');
252
+ calledSpy.mockImplementationOnce(() => { throw new Error('Error: 500'); });
253
+ try {
254
+ yield testClass.testDoRetry();
255
+ }
256
+ catch (_b) {
257
+ // ignore
258
+ }
259
+ (0, vitest_1.expect)(calledSpy).toHaveBeenCalledTimes(1);
260
+ }));
261
+ (0, vitest_1.test)('fix backOff policy', () => __awaiter(void 0, void 0, void 0, function* () {
262
+ const calledSpy = vitest_1.vi.spyOn(testClass, 'called');
263
+ calledSpy.mockImplementation(() => { throw new Error('Error: 500'); });
264
+ try {
265
+ yield testClass.fixedBackOffRetry();
266
+ }
267
+ catch (_c) {
268
+ // ignore
269
+ }
270
+ (0, vitest_1.expect)(calledSpy).toHaveBeenCalledTimes(4);
271
+ }));
272
+ (0, vitest_1.test)('exponential backOff policy', () => __awaiter(void 0, void 0, void 0, function* () {
273
+ const calledSpy = vitest_1.vi.spyOn(testClass, 'called');
274
+ calledSpy.mockImplementation(() => { throw new Error(); });
275
+ try {
276
+ yield testClass.exponentialBackOffRetry();
277
+ }
278
+ catch (_d) {
279
+ // ignore
280
+ }
281
+ (0, vitest_1.expect)(calledSpy).toHaveBeenCalledTimes(4);
282
+ }), 60000);
283
+ (0, vitest_1.test)('exponential backOff policy with jitter', () => __awaiter(void 0, void 0, void 0, function* () {
284
+ const calledSpy = vitest_1.vi.spyOn(testClass, 'called');
285
+ calledSpy.mockImplementation(() => { throw new Error(); });
286
+ try {
287
+ yield testClass.exponentialBackOffWithJitterRetry();
288
+ }
289
+ catch (_e) {
290
+ // ignore
291
+ }
292
+ (0, vitest_1.expect)(calledSpy).toHaveBeenCalledTimes(4);
293
+ }), 60000);
294
+ (0, vitest_1.test)('no log', () => __awaiter(void 0, void 0, void 0, function* () {
295
+ const calledSpy = vitest_1.vi.spyOn(testClass, 'called');
296
+ const errorSpy = vitest_1.vi.spyOn(console, 'error');
297
+ calledSpy.mockRejectedValueOnce(new Error('rejected'));
298
+ calledSpy.mockResolvedValueOnce('fulfilled');
299
+ yield testClass.testMethodWithoutBackOff();
300
+ (0, vitest_1.expect)(calledSpy).toHaveBeenCalledTimes(2);
301
+ (0, vitest_1.expect)(errorSpy).not.toHaveBeenCalled();
302
+ }));
303
+ (0, vitest_1.test)('throw original error', () => __awaiter(void 0, void 0, void 0, function* () {
304
+ const calledSpy = vitest_1.vi.spyOn(testClass, 'called');
305
+ calledSpy.mockImplementation(() => { throw new CustomError(); });
306
+ try {
307
+ yield testClass.useOriginalError();
308
+ }
309
+ catch (e) {
310
+ (0, vitest_1.expect)(e).toBeInstanceOf(CustomError);
311
+ }
312
+ }), 60000);
313
+ (0, vitest_1.test)('standard decorators signature works (value, context)', () => __awaiter(void 0, void 0, void 0, function* () {
314
+ const fn = vitest_1.vi.fn();
315
+ fn.mockRejectedValueOnce(new Error('rejected'));
316
+ fn.mockResolvedValueOnce('fulfilled');
317
+ const wrapped = (0, retry_decorator_1.Retryable)({ maxAttempts: 2 })(fn, { kind: 'method', name: 'myMethod' });
318
+ yield (0, vitest_1.expect)(wrapped()).resolves.toEqual('fulfilled');
319
+ (0, vitest_1.expect)(fn).toHaveBeenCalledTimes(2);
320
+ (0, vitest_1.expect)(utils_1.sleep).toHaveBeenCalledTimes(0);
321
+ }));
322
+ (0, vitest_1.test)('standard decorators signature fails with MaxAttemptsError message', () => __awaiter(void 0, void 0, void 0, function* () {
323
+ const errorMsg = 'rejected';
324
+ const fn = vitest_1.vi.fn(() => __awaiter(void 0, void 0, void 0, function* () {
325
+ throw new Error(errorMsg);
326
+ }));
327
+ const wrapped = (0, retry_decorator_1.Retryable)({ maxAttempts: 2 })(fn, { kind: 'method', name: 'myMethod' });
328
+ yield (0, vitest_1.expect)(wrapped()).rejects.toThrow('Failed for \'myMethod\' for 2 times.');
329
+ (0, vitest_1.expect)(fn).toHaveBeenCalledTimes(3);
330
+ }));
331
+ });
332
+ //# sourceMappingURL=retry.decorator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.decorator.test.js","sourceRoot":"","sources":["../../src/retry.decorator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const sleep: (ms?: number) => Promise<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,QAAS,MAAM,KAAG,QAAQ,IAAI,CACG,CAAC"}
@@ -2,6 +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
- const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
5
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
6
6
  exports.sleep = sleep;
7
7
  //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;AAAA,0EAA0E;AACnE,MAAM,KAAK,GAAG,CAAC,EAAW,EAAiB,EAAE,CAClD,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AADvC,QAAA,KAAK,SACkC"}