@anishhs/retryq 1.0.0 → 1.2.0

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 (47) hide show
  1. package/README.md +856 -167
  2. package/dist/cjs/index.d.ts +9 -0
  3. package/dist/cjs/index.d.ts.map +1 -0
  4. package/dist/cjs/index.js +13 -0
  5. package/dist/cjs/index.js.map +1 -0
  6. package/dist/cjs/manager.d.ts +139 -0
  7. package/dist/cjs/manager.d.ts.map +1 -0
  8. package/dist/cjs/manager.js +431 -0
  9. package/dist/cjs/manager.js.map +1 -0
  10. package/dist/cjs/package.json +3 -0
  11. package/dist/cjs/types.d.ts +237 -0
  12. package/dist/cjs/types.d.ts.map +1 -0
  13. package/dist/cjs/types.js +3 -0
  14. package/dist/cjs/types.js.map +1 -0
  15. package/dist/cjs/utils.d.ts +43 -0
  16. package/dist/cjs/utils.d.ts.map +1 -0
  17. package/dist/cjs/utils.js +71 -0
  18. package/dist/cjs/utils.js.map +1 -0
  19. package/dist/cjs/validation.d.ts +37 -0
  20. package/dist/cjs/validation.d.ts.map +1 -0
  21. package/dist/cjs/validation.js +69 -0
  22. package/dist/cjs/validation.js.map +1 -0
  23. package/dist/esm/index.d.ts +9 -0
  24. package/dist/esm/index.d.ts.map +1 -0
  25. package/dist/esm/index.js +8 -0
  26. package/dist/esm/index.js.map +1 -0
  27. package/dist/esm/manager.d.ts +139 -0
  28. package/dist/esm/manager.d.ts.map +1 -0
  29. package/dist/esm/manager.js +427 -0
  30. package/dist/esm/manager.js.map +1 -0
  31. package/dist/esm/package.json +3 -0
  32. package/dist/esm/types.d.ts +237 -0
  33. package/dist/esm/types.d.ts.map +1 -0
  34. package/dist/esm/types.js +2 -0
  35. package/dist/esm/types.js.map +1 -0
  36. package/dist/esm/utils.d.ts +43 -0
  37. package/dist/esm/utils.d.ts.map +1 -0
  38. package/dist/esm/utils.js +64 -0
  39. package/dist/esm/utils.js.map +1 -0
  40. package/dist/esm/validation.d.ts +37 -0
  41. package/dist/esm/validation.d.ts.map +1 -0
  42. package/dist/esm/validation.js +65 -0
  43. package/dist/esm/validation.js.map +1 -0
  44. package/package.json +29 -8
  45. package/dist/index.d.ts +0 -76
  46. package/dist/index.js +0 -165
  47. package/dist/index.js.map +0 -1
package/dist/index.js DELETED
@@ -1,165 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.RetryQManager = void 0;
13
- // Custom ID generator using timestamp + larger random suffix
14
- function randomId() {
15
- return `job-${Date.now()}-${Math.random().toString(36).slice(2, 12)}`;
16
- }
17
- function sleep(ms, cancelFn) {
18
- return new Promise((resolve, reject) => {
19
- const timer = setTimeout(() => resolve(), ms);
20
- if (cancelFn) {
21
- cancelFn.cancelSleep = () => {
22
- clearTimeout(timer);
23
- reject(new Error("RetryQ job cancelled"));
24
- };
25
- }
26
- });
27
- }
28
- class RetryQManager {
29
- constructor(maxConcurrent = Infinity) {
30
- this.pendingQueue = [];
31
- this.runningJobs = new Map();
32
- this.failedJobs = new Map();
33
- this.completedJobs = new Map();
34
- this.registry = new Map();
35
- this.maxConcurrent = maxConcurrent;
36
- }
37
- createJob(fn, options = {}) {
38
- var _a, _b;
39
- const id = randomId();
40
- const job = {
41
- id,
42
- label: options.label || id,
43
- state: "pending",
44
- priority: (_a = options.priority) !== null && _a !== void 0 ? _a : 1,
45
- retriesLeft: (_b = options.retries) !== null && _b !== void 0 ? _b : 3,
46
- promise: Promise.resolve(), // placeholder
47
- cancel: () => this.cancelJob(id),
48
- fn,
49
- options,
50
- createdAt: Date.now(),
51
- };
52
- job.promise = this._runJob(job);
53
- this.pendingQueue.push(job);
54
- this._sortQueue();
55
- this._processQueue();
56
- return job;
57
- }
58
- _sortQueue() {
59
- this.pendingQueue.sort((a, b) => b.priority - a.priority);
60
- }
61
- _processQueue() {
62
- return __awaiter(this, void 0, void 0, function* () {
63
- while (this.runningJobs.size < this.maxConcurrent &&
64
- this.pendingQueue.length > 0) {
65
- const job = this.pendingQueue.shift();
66
- // job.promise already set in createJob
67
- this.runningJobs.set(job.id, job);
68
- }
69
- });
70
- }
71
- _runJob(job) {
72
- return __awaiter(this, void 0, void 0, function* () {
73
- var _a;
74
- job.state = "running";
75
- job.startedAt = Date.now();
76
- const cancelFn = () => { };
77
- this.registry.set(job.id, cancelFn);
78
- const { delay = 1000, backoff = 2, maxTime = 5000, jitter = 0.1, } = job.options;
79
- let currentDelay = delay;
80
- while (job.retriesLeft > 0) {
81
- const elapsed = Date.now() - ((_a = job.startedAt) !== null && _a !== void 0 ? _a : Date.now());
82
- if (elapsed >= maxTime)
83
- break;
84
- try {
85
- const result = yield job.fn();
86
- job.state = "completed";
87
- job.finishedAt = Date.now();
88
- this.completedJobs.set(job.id, job);
89
- this.runningJobs.delete(job.id);
90
- this._processQueue();
91
- return result; // returns actual value
92
- }
93
- catch (err) {
94
- job.retriesLeft--;
95
- job.error = err;
96
- if (job.retriesLeft <= 0)
97
- break;
98
- // jitter
99
- const jitterAmount = currentDelay * jitter;
100
- let adjustedDelay = currentDelay + (Math.random() * 2 - 1) * jitterAmount;
101
- adjustedDelay = Math.min(adjustedDelay, maxTime - elapsed);
102
- if (adjustedDelay > 0)
103
- yield sleep(adjustedDelay, cancelFn);
104
- currentDelay *= backoff;
105
- }
106
- }
107
- if (!["cancelled", "failed"].includes(job.state))
108
- job.state = "failed";
109
- job.finishedAt = Date.now();
110
- this.runningJobs.delete(job.id);
111
- this.failedJobs.set(job.id, job);
112
- this._processQueue();
113
- throw job.error || new Error("Job failed");
114
- });
115
- }
116
- cancelJob(id) {
117
- const job = this.runningJobs.get(id) || this.pendingQueue.find((j) => j.id === id);
118
- if (!job)
119
- return;
120
- job.state = "cancelled";
121
- job.error = new Error("Job cancelled");
122
- job.finishedAt = Date.now();
123
- this.runningJobs.delete(id);
124
- this.pendingQueue = this.pendingQueue.filter((j) => j.id !== id);
125
- this.failedJobs.set(id, job);
126
- const cancelFn = this.registry.get(id);
127
- if (cancelFn === null || cancelFn === void 0 ? void 0 : cancelFn.cancelSleep)
128
- cancelFn.cancelSleep();
129
- }
130
- listJobs() {
131
- return {
132
- pending: this.pendingQueue.map((j) => this._jobSummary(j)),
133
- running: Array.from(this.runningJobs.values()).map((j) => this._jobSummary(j)),
134
- failed: Array.from(this.failedJobs.values()).map((j) => this._jobSummary(j)),
135
- completed: Array.from(this.completedJobs.values()).map((j) => this._jobSummary(j)),
136
- };
137
- }
138
- findJobById(id) {
139
- return (this.runningJobs.get(id) ||
140
- this.pendingQueue.find((j) => j.id === id) ||
141
- this.failedJobs.get(id) ||
142
- this.completedJobs.get(id) ||
143
- null);
144
- }
145
- findJobsByLabel(label) {
146
- const all = [
147
- ...Array.from(this.runningJobs.values()),
148
- ...this.pendingQueue,
149
- ...Array.from(this.failedJobs.values()),
150
- ...Array.from(this.completedJobs.values()),
151
- ];
152
- return all.filter((j) => j.label === label);
153
- }
154
- _jobSummary(job) {
155
- return {
156
- id: job.id,
157
- label: job.label,
158
- state: job.state,
159
- retriesLeft: job.retriesLeft,
160
- priority: job.priority,
161
- };
162
- }
163
- }
164
- exports.RetryQManager = RetryQManager;
165
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}