@adviser/cement 0.4.59 → 0.4.60

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 (114) hide show
  1. package/cjs/future.cjs +2 -0
  2. package/cjs/future.cjs.map +1 -1
  3. package/cjs/future.d.ts +1 -0
  4. package/cjs/future.d.ts.map +1 -1
  5. package/cjs/future.test.cjs +5 -0
  6. package/cjs/future.test.cjs.map +1 -1
  7. package/cjs/poller.cjs +87 -16
  8. package/cjs/poller.cjs.map +1 -1
  9. package/cjs/poller.d.ts +20 -10
  10. package/cjs/poller.d.ts.map +1 -1
  11. package/cjs/poller.test.cjs +2 -2
  12. package/cjs/poller.test.cjs.map +1 -1
  13. package/cjs/timeouted.cjs +119 -0
  14. package/cjs/timeouted.cjs.map +1 -0
  15. package/cjs/timeouted.d.ts +45 -0
  16. package/cjs/timeouted.d.ts.map +1 -0
  17. package/cjs/timeouted.test.cjs +581 -0
  18. package/cjs/timeouted.test.cjs.map +1 -0
  19. package/cjs/timeouted.test.d.ts +2 -0
  20. package/cjs/timeouted.test.d.ts.map +1 -0
  21. package/cjs/utils/promise-sleep.cjs +27 -26
  22. package/cjs/utils/promise-sleep.cjs.map +1 -1
  23. package/cjs/utils/promise-sleep.d.ts +28 -2
  24. package/cjs/utils/promise-sleep.d.ts.map +1 -1
  25. package/cjs/utils/promise-sleep.test.cjs +13 -13
  26. package/cjs/utils/promise-sleep.test.cjs.map +1 -1
  27. package/cjs/version.cjs +1 -1
  28. package/deno.json +1 -1
  29. package/esm/future.d.ts +1 -0
  30. package/esm/future.d.ts.map +1 -1
  31. package/esm/future.js +2 -0
  32. package/esm/future.js.map +1 -1
  33. package/esm/future.test.js +5 -0
  34. package/esm/future.test.js.map +1 -1
  35. package/esm/poller.d.ts +20 -10
  36. package/esm/poller.d.ts.map +1 -1
  37. package/esm/poller.js +87 -16
  38. package/esm/poller.js.map +1 -1
  39. package/esm/poller.test.js +2 -2
  40. package/esm/poller.test.js.map +1 -1
  41. package/esm/timeouted.d.ts +45 -0
  42. package/esm/timeouted.d.ts.map +1 -0
  43. package/esm/timeouted.js +110 -0
  44. package/esm/timeouted.js.map +1 -0
  45. package/esm/timeouted.test.d.ts +2 -0
  46. package/esm/timeouted.test.d.ts.map +1 -0
  47. package/esm/timeouted.test.js +579 -0
  48. package/esm/timeouted.test.js.map +1 -0
  49. package/esm/utils/promise-sleep.d.ts +28 -2
  50. package/esm/utils/promise-sleep.d.ts.map +1 -1
  51. package/esm/utils/promise-sleep.js +27 -26
  52. package/esm/utils/promise-sleep.js.map +1 -1
  53. package/esm/utils/promise-sleep.test.js +13 -13
  54. package/esm/utils/promise-sleep.test.js.map +1 -1
  55. package/esm/version.js +1 -1
  56. package/package.json +1 -1
  57. package/src/future.ts +5 -0
  58. package/src/poller.ts +128 -29
  59. package/src/timeouted.ts +186 -0
  60. package/src/utils/promise-sleep.ts +61 -31
  61. package/ts/cjs/future.d.ts +1 -0
  62. package/ts/cjs/future.d.ts.map +1 -1
  63. package/ts/cjs/future.js +2 -0
  64. package/ts/cjs/future.js.map +1 -1
  65. package/ts/cjs/future.test.js +5 -0
  66. package/ts/cjs/future.test.js.map +1 -1
  67. package/ts/cjs/poller.d.ts +20 -10
  68. package/ts/cjs/poller.d.ts.map +1 -1
  69. package/ts/cjs/poller.js +87 -16
  70. package/ts/cjs/poller.js.map +1 -1
  71. package/ts/cjs/poller.test.js +2 -2
  72. package/ts/cjs/poller.test.js.map +1 -1
  73. package/ts/cjs/timeouted.d.ts +45 -0
  74. package/ts/cjs/timeouted.d.ts.map +1 -0
  75. package/ts/cjs/timeouted.js +119 -0
  76. package/ts/cjs/timeouted.js.map +1 -0
  77. package/ts/cjs/timeouted.test.d.ts +2 -0
  78. package/ts/cjs/timeouted.test.d.ts.map +1 -0
  79. package/ts/cjs/timeouted.test.js +581 -0
  80. package/ts/cjs/timeouted.test.js.map +1 -0
  81. package/ts/cjs/utils/promise-sleep.d.ts +28 -2
  82. package/ts/cjs/utils/promise-sleep.d.ts.map +1 -1
  83. package/ts/cjs/utils/promise-sleep.js +27 -26
  84. package/ts/cjs/utils/promise-sleep.js.map +1 -1
  85. package/ts/cjs/utils/promise-sleep.test.js +13 -13
  86. package/ts/cjs/utils/promise-sleep.test.js.map +1 -1
  87. package/ts/cjs/version.js +1 -1
  88. package/ts/esm/future.d.ts +1 -0
  89. package/ts/esm/future.d.ts.map +1 -1
  90. package/ts/esm/future.js +2 -0
  91. package/ts/esm/future.js.map +1 -1
  92. package/ts/esm/future.test.js +5 -0
  93. package/ts/esm/future.test.js.map +1 -1
  94. package/ts/esm/poller.d.ts +20 -10
  95. package/ts/esm/poller.d.ts.map +1 -1
  96. package/ts/esm/poller.js +87 -16
  97. package/ts/esm/poller.js.map +1 -1
  98. package/ts/esm/poller.test.js +2 -2
  99. package/ts/esm/poller.test.js.map +1 -1
  100. package/ts/esm/timeouted.d.ts +45 -0
  101. package/ts/esm/timeouted.d.ts.map +1 -0
  102. package/ts/esm/timeouted.js +110 -0
  103. package/ts/esm/timeouted.js.map +1 -0
  104. package/ts/esm/timeouted.test.d.ts +2 -0
  105. package/ts/esm/timeouted.test.d.ts.map +1 -0
  106. package/ts/esm/timeouted.test.js +579 -0
  107. package/ts/esm/timeouted.test.js.map +1 -0
  108. package/ts/esm/utils/promise-sleep.d.ts +28 -2
  109. package/ts/esm/utils/promise-sleep.d.ts.map +1 -1
  110. package/ts/esm/utils/promise-sleep.js +27 -26
  111. package/ts/esm/utils/promise-sleep.js.map +1 -1
  112. package/ts/esm/utils/promise-sleep.test.js +13 -13
  113. package/ts/esm/utils/promise-sleep.test.js.map +1 -1
  114. package/ts/esm/version.js +1 -1
@@ -0,0 +1,579 @@
1
+ import { timeouted, isSuccess, isTimeout, isAborted, isError, unwrap, unwrapOr } from "./timeouted.js";
2
+ describe("timeoutAction - Success Cases", () => {
3
+ it("should return success for a fast promise", async () => {
4
+ const result = await timeouted(Promise.resolve("hello"), { timeout: 1000 });
5
+ expect(isSuccess(result)).toBe(true);
6
+ expect(result.state).toBe("success");
7
+ if (isSuccess(result)) {
8
+ expect(result.value).toBe("hello");
9
+ }
10
+ expect(result.duration).toBeLessThan(100);
11
+ });
12
+ it("should return success for a fast action function", async () => {
13
+ const result = await timeouted((ctrl) => {
14
+ expect(ctrl).toBeInstanceOf(AbortController);
15
+ return Promise.resolve("world");
16
+ }, { timeout: 1000 });
17
+ expect(isSuccess(result)).toBe(true);
18
+ if (isSuccess(result)) {
19
+ expect(result.value).toBe("world");
20
+ }
21
+ });
22
+ it("should return success with custom context", async () => {
23
+ const ctx = { userId: "user123", requestId: 42 };
24
+ const result = await timeouted(Promise.resolve("data"), { timeout: 1000, ctx });
25
+ expect(isSuccess(result)).toBe(true);
26
+ expect(result.ctx).toEqual(ctx);
27
+ });
28
+ it("should not call onAbortAction on success", async () => {
29
+ const onAbortAction = vi.fn();
30
+ const result = await timeouted(Promise.resolve("success"), { timeout: 1000, onAbortAction });
31
+ expect(isSuccess(result)).toBe(true);
32
+ expect(onAbortAction).not.toHaveBeenCalled();
33
+ });
34
+ it("should cleanup event listeners on success", async () => {
35
+ const controller = new AbortController();
36
+ const result = await timeouted(Promise.resolve("success"), { timeout: 1000, signal: controller.signal });
37
+ expect(isSuccess(result)).toBe(true);
38
+ controller.abort();
39
+ expect(controller.signal.aborted).toBe(true);
40
+ });
41
+ });
42
+ describe("timeoutAction - Timeout Cases", () => {
43
+ it("should timeout when action takes too long", async () => {
44
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve("too slow"), 200)), { timeout: 50 });
45
+ expect(isTimeout(result)).toBe(true);
46
+ expect(result.state).toBe("timeout");
47
+ expect(result.duration).toBeGreaterThanOrEqual(45);
48
+ expect(result.duration).toBeLessThan(100);
49
+ });
50
+ it("should call onTimeout callback on timeout", async () => {
51
+ const onTimeout = vi.fn();
52
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve("slow"), 200)), { timeout: 50, onTimeout });
53
+ expect(isTimeout(result)).toBe(true);
54
+ expect(onTimeout).toHaveBeenCalledTimes(1);
55
+ });
56
+ it("should call onAbortAction on timeout", async () => {
57
+ const onAbortAction = vi.fn();
58
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve("slow"), 200)), {
59
+ timeout: 50,
60
+ onAbortAction,
61
+ });
62
+ expect(isTimeout(result)).toBe(true);
63
+ expect(onAbortAction).toHaveBeenCalledTimes(1);
64
+ });
65
+ it("should abort the controller on timeout", async () => {
66
+ const controller = new AbortController();
67
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve("slow"), 200)), { timeout: 50, controller });
68
+ expect(isTimeout(result)).toBe(true);
69
+ expect(controller.signal.aborted).toBe(true);
70
+ });
71
+ it("should allow action to use abort signal on timeout", async () => {
72
+ let wasAborted = false;
73
+ const result = await timeouted(async (ctrl) => {
74
+ return new Promise((resolve) => {
75
+ ctrl.signal.addEventListener("abort", () => {
76
+ wasAborted = true;
77
+ });
78
+ setTimeout(() => resolve("done"), 200);
79
+ });
80
+ }, { timeout: 50 });
81
+ expect(isTimeout(result)).toBe(true);
82
+ await new Promise((resolve) => setTimeout(resolve, 10));
83
+ expect(wasAborted).toBe(true);
84
+ });
85
+ });
86
+ describe("timeoutAction - Abort Cases", () => {
87
+ it("should abort when external signal is triggered", async () => {
88
+ const controller = new AbortController();
89
+ const promise = timeouted(new Promise((resolve) => setTimeout(() => resolve("data"), 200)), {
90
+ timeout: 1000,
91
+ signal: controller.signal,
92
+ });
93
+ setTimeout(() => controller.abort("user cancelled"), 50);
94
+ const result = await promise;
95
+ expect(isAborted(result)).toBe(true);
96
+ expect(result.state).toBe("aborted");
97
+ if (isAborted(result)) {
98
+ expect(result.reason).toBe("user cancelled");
99
+ }
100
+ });
101
+ it("should call onAbort callback with reason", async () => {
102
+ const onAbort = vi.fn();
103
+ const controller = new AbortController();
104
+ const abortReason = new Error("User initiated abort");
105
+ const promise = timeouted(new Promise((resolve) => setTimeout(() => resolve("data"), 200)), {
106
+ timeout: 1000,
107
+ signal: controller.signal,
108
+ onAbort,
109
+ });
110
+ setTimeout(() => controller.abort(abortReason), 50);
111
+ const result = await promise;
112
+ expect(isAborted(result)).toBe(true);
113
+ expect(onAbort).toHaveBeenCalledTimes(1);
114
+ expect(onAbort).toHaveBeenCalledWith(abortReason);
115
+ });
116
+ it("should propagate abort to internal controller", async () => {
117
+ const externalController = new AbortController();
118
+ const internalController = new AbortController();
119
+ const promise = timeouted(async (ctrl) => {
120
+ expect(ctrl).toBe(internalController);
121
+ return new Promise((resolve) => {
122
+ setTimeout(() => resolve("data"), 200);
123
+ });
124
+ }, {
125
+ timeout: 1000,
126
+ signal: externalController.signal,
127
+ controller: internalController,
128
+ });
129
+ setTimeout(() => externalController.abort("cancelled"), 50);
130
+ const result = await promise;
131
+ expect(isAborted(result)).toBe(true);
132
+ expect(internalController.signal.aborted).toBe(true);
133
+ });
134
+ it("should cleanup event listeners on abort", async () => {
135
+ const controller = new AbortController();
136
+ const promise = timeouted(new Promise((resolve) => setTimeout(() => resolve("data"), 200)), {
137
+ timeout: 1000,
138
+ signal: controller.signal,
139
+ });
140
+ setTimeout(() => controller.abort(), 50);
141
+ const result = await promise;
142
+ expect(isAborted(result)).toBe(true);
143
+ });
144
+ it("should handle abort with undefined reason", async () => {
145
+ const controller = new AbortController();
146
+ const onAbort = vi.fn();
147
+ const promise = timeouted(new Promise((resolve) => setTimeout(() => resolve("data"), 200)), {
148
+ timeout: 1000,
149
+ signal: controller.signal,
150
+ onAbort,
151
+ });
152
+ setTimeout(() => controller.abort(), 50);
153
+ const result = await promise;
154
+ expect(isAborted(result)).toBe(true);
155
+ expect(onAbort.mock.calls[0][0].message).toContain("aborted");
156
+ });
157
+ });
158
+ describe("timeoutAction - Error Cases", () => {
159
+ it("should handle promise rejection", async () => {
160
+ const testError = new Error("Something went wrong");
161
+ const result = await timeouted(Promise.reject(testError), { timeout: 1000 });
162
+ expect(isError(result)).toBe(true);
163
+ expect(result.state).toBe("error");
164
+ if (isError(result)) {
165
+ expect(result.error).toBe(testError);
166
+ }
167
+ });
168
+ it("should handle action function throwing synchronously", async () => {
169
+ const testError = new Error("Sync error");
170
+ const result = await timeouted(() => {
171
+ throw testError;
172
+ }, { timeout: 1000 });
173
+ expect(isError(result)).toBe(true);
174
+ if (isError(result)) {
175
+ expect(result.error).toBe(testError);
176
+ }
177
+ });
178
+ it("should handle action function rejecting asynchronously", async () => {
179
+ const testError = new Error("Async error");
180
+ const result = await timeouted(() => {
181
+ throw testError;
182
+ }, { timeout: 1000 });
183
+ expect(isError(result)).toBe(true);
184
+ if (isError(result)) {
185
+ expect(result.error).toBe(testError);
186
+ }
187
+ });
188
+ it("should call onError callback on error", async () => {
189
+ const onError = vi.fn();
190
+ const testError = new Error("Test error");
191
+ const result = await timeouted(Promise.reject(testError), { timeout: 1000, onError });
192
+ expect(isError(result)).toBe(true);
193
+ expect(onError).toHaveBeenCalledTimes(1);
194
+ expect(onError).toHaveBeenCalledWith(testError);
195
+ });
196
+ it("should call onAbortAction on error", async () => {
197
+ const onAbortAction = vi.fn();
198
+ const testError = new Error("Test error");
199
+ const result = await timeouted(Promise.reject(testError), { timeout: 1000, onAbortAction });
200
+ expect(isError(result)).toBe(true);
201
+ expect(onAbortAction).toHaveBeenCalledTimes(1);
202
+ });
203
+ it("should convert non-Error rejection to Error", async () => {
204
+ const result = await timeouted(Promise.reject(new Error("string error")), { timeout: 1000 });
205
+ expect(isError(result)).toBe(true);
206
+ if (isError(result)) {
207
+ expect(result.error).toBeInstanceOf(Error);
208
+ }
209
+ });
210
+ it("should handle synchronous throw of non-Error value", async () => {
211
+ const result = await timeouted(() => {
212
+ throw new Error("string throw");
213
+ }, { timeout: 1000 });
214
+ expect(isError(result)).toBe(true);
215
+ if (isError(result)) {
216
+ expect(result.error).toBeInstanceOf(Error);
217
+ expect(result.error.message).toBe("string throw");
218
+ }
219
+ });
220
+ });
221
+ describe("Type Guards", () => {
222
+ it("isSuccess should work correctly", async () => {
223
+ const successResult = await timeouted(Promise.resolve(42), { timeout: 1000 });
224
+ const timeoutResult = await timeouted(new Promise((resolve) => setTimeout(() => resolve(42), 200)), { timeout: 50 });
225
+ expect(isSuccess(successResult)).toBe(true);
226
+ expect(isSuccess(timeoutResult)).toBe(false);
227
+ });
228
+ it("isTimeout should work correctly", async () => {
229
+ const successResult = await timeouted(Promise.resolve(42), { timeout: 1000 });
230
+ const timeoutResult = await timeouted(new Promise((resolve) => setTimeout(() => resolve(42), 200)), { timeout: 50 });
231
+ expect(isTimeout(successResult)).toBe(false);
232
+ expect(isTimeout(timeoutResult)).toBe(true);
233
+ });
234
+ it("isAborted should work correctly", async () => {
235
+ const controller = new AbortController();
236
+ const promise = timeouted(new Promise((resolve) => setTimeout(() => resolve(42), 200)), {
237
+ timeout: 1000,
238
+ signal: controller.signal,
239
+ });
240
+ setTimeout(() => controller.abort(), 50);
241
+ const abortedResult = await promise;
242
+ const successResult = await timeouted(Promise.resolve(42), { timeout: 1000 });
243
+ expect(isAborted(successResult)).toBe(false);
244
+ expect(isAborted(abortedResult)).toBe(true);
245
+ });
246
+ it("isError should work correctly", async () => {
247
+ const successResult = await timeouted(Promise.resolve(42), { timeout: 1000 });
248
+ const errorResult = await timeouted(Promise.reject(new Error("fail")), { timeout: 1000 });
249
+ expect(isError(successResult)).toBe(false);
250
+ expect(isError(errorResult)).toBe(true);
251
+ });
252
+ });
253
+ describe("Helper Functions", () => {
254
+ describe("unwrap", () => {
255
+ it("should return value on success", async () => {
256
+ const result = await timeouted(Promise.resolve(42), { timeout: 1000 });
257
+ expect(unwrap(result)).toBe(42);
258
+ });
259
+ it("should throw on timeout", async () => {
260
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve(42), 200)), { timeout: 50 });
261
+ expect(() => unwrap(result)).toThrow("TimeoutResult is not success: timeout");
262
+ });
263
+ it("should throw on abort", async () => {
264
+ const controller = new AbortController();
265
+ const promise = timeouted(new Promise((resolve) => setTimeout(() => resolve(42), 200)), {
266
+ timeout: 1000,
267
+ signal: controller.signal,
268
+ });
269
+ setTimeout(() => controller.abort(), 50);
270
+ const result = await promise;
271
+ expect(() => unwrap(result)).toThrow("TimeoutResult is not success: aborted");
272
+ });
273
+ it("should throw on error", async () => {
274
+ const result = await timeouted(Promise.reject(new Error("fail")), { timeout: 1000 });
275
+ expect(() => unwrap(result)).toThrow("TimeoutResult is not success: error");
276
+ });
277
+ });
278
+ describe("unwrapOr", () => {
279
+ it("should return value on success", async () => {
280
+ const result = await timeouted(Promise.resolve(42), { timeout: 1000 });
281
+ expect(unwrapOr(result, 0)).toBe(42);
282
+ });
283
+ it("should return default on timeout", async () => {
284
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve(42), 200)), { timeout: 50 });
285
+ expect(unwrapOr(result, 999)).toBe(999);
286
+ });
287
+ it("should return default on abort", async () => {
288
+ const controller = new AbortController();
289
+ const promise = timeouted(new Promise((resolve) => setTimeout(() => resolve(42), 200)), {
290
+ timeout: 1000,
291
+ signal: controller.signal,
292
+ });
293
+ setTimeout(() => controller.abort(), 50);
294
+ const result = await promise;
295
+ expect(unwrapOr(result, -1)).toBe(-1);
296
+ });
297
+ it("should return default on error", async () => {
298
+ const result = await timeouted(Promise.reject(new Error("fail")), { timeout: 1000 });
299
+ expect(unwrapOr(result, 100)).toBe(100);
300
+ });
301
+ });
302
+ });
303
+ describe("Edge Cases", () => {
304
+ it("should handle zero timeout", async () => {
305
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve("data"), 10)), { timeout: 0 });
306
+ expect(isSuccess(result)).toBe(true);
307
+ expect(unwrap(result)).toBe("data");
308
+ });
309
+ it("should handle very short timeout", async () => {
310
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve("data"), 100)), { timeout: 1 });
311
+ expect(isTimeout(result)).toBe(true);
312
+ });
313
+ it("should handle action that completes exactly at timeout", async () => {
314
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve("data"), 50)), { timeout: 50 });
315
+ expect(["success", "timeout"]).toContain(result.state);
316
+ });
317
+ it("should track duration accurately", async () => {
318
+ const start = Date.now();
319
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve("data"), 100)), { timeout: 1000 });
320
+ const actualDuration = Date.now() - start;
321
+ expect(isSuccess(result)).toBe(true);
322
+ expect(result.duration).toBeGreaterThanOrEqual(95);
323
+ expect(result.duration).toBeLessThan(150);
324
+ expect(Math.abs(result.duration - actualDuration)).toBeLessThan(10);
325
+ });
326
+ it("should handle default timeout value (30000ms)", async () => {
327
+ const result = await timeouted(Promise.resolve("data"));
328
+ expect(isSuccess(result)).toBe(true);
329
+ });
330
+ it("should handle undefined context", async () => {
331
+ const result = await timeouted(Promise.resolve("data"), { timeout: 1000 });
332
+ expect(result.ctx).toBeUndefined();
333
+ });
334
+ it("should pass abort controller to action function", async () => {
335
+ let receivedController = null;
336
+ const result = await timeouted((ctrl) => {
337
+ receivedController = ctrl;
338
+ return Promise.resolve("data");
339
+ }, { timeout: 1000 });
340
+ expect(isSuccess(result)).toBe(true);
341
+ expect(receivedController).toBeInstanceOf(AbortController);
342
+ });
343
+ it("should use external controller when provided", async () => {
344
+ const externalController = new AbortController();
345
+ const result = await timeouted((ctrl) => {
346
+ expect(ctrl).toBe(externalController);
347
+ return Promise.resolve("data");
348
+ }, { timeout: 1000, controller: externalController });
349
+ expect(isSuccess(result)).toBe(true);
350
+ });
351
+ it("should handle negative timeout (treated as 30000ms default)", async () => {
352
+ const result = await timeouted(Promise.resolve("data"), { timeout: -100 });
353
+ expect(isSuccess(result)).toBe(true);
354
+ });
355
+ });
356
+ describe("Callback Interactions", () => {
357
+ it("should call all appropriate callbacks on timeout", async () => {
358
+ const onTimeout = vi.fn();
359
+ const onAbort = vi.fn();
360
+ const onError = vi.fn();
361
+ const onAbortAction = vi.fn();
362
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve("slow"), 200)), {
363
+ timeout: 50,
364
+ onTimeout,
365
+ onAbort,
366
+ onError,
367
+ onAbortAction,
368
+ });
369
+ expect(isTimeout(result)).toBe(true);
370
+ expect(onTimeout).toHaveBeenCalledTimes(1);
371
+ expect(onAbort).not.toHaveBeenCalled();
372
+ expect(onError).not.toHaveBeenCalled();
373
+ expect(onAbortAction).toHaveBeenCalledTimes(1);
374
+ });
375
+ it("should call all appropriate callbacks on abort", async () => {
376
+ const onTimeout = vi.fn();
377
+ const onAbort = vi.fn();
378
+ const onError = vi.fn();
379
+ const onAbortAction = vi.fn();
380
+ const controller = new AbortController();
381
+ const promise = timeouted(new Promise((resolve) => setTimeout(() => resolve("data"), 200)), {
382
+ timeout: 1000,
383
+ signal: controller.signal,
384
+ onTimeout,
385
+ onAbort,
386
+ onError,
387
+ onAbortAction,
388
+ });
389
+ setTimeout(() => controller.abort("user action"), 50);
390
+ const result = await promise;
391
+ expect(isAborted(result)).toBe(true);
392
+ expect(onTimeout).not.toHaveBeenCalled();
393
+ expect(onAbort).toHaveBeenCalledTimes(1);
394
+ expect(onAbort).toHaveBeenCalledWith("user action");
395
+ expect(onError).not.toHaveBeenCalled();
396
+ expect(onAbortAction).toHaveBeenCalledTimes(1);
397
+ });
398
+ it("should call all appropriate callbacks on error", async () => {
399
+ const onTimeout = vi.fn();
400
+ const onAbort = vi.fn();
401
+ const onError = vi.fn();
402
+ const onAbortAction = vi.fn();
403
+ const testError = new Error("test");
404
+ const result = await timeouted(Promise.reject(testError), { timeout: 1000, onTimeout, onAbort, onError, onAbortAction });
405
+ expect(isError(result)).toBe(true);
406
+ expect(onTimeout).not.toHaveBeenCalled();
407
+ expect(onAbort).not.toHaveBeenCalled();
408
+ expect(onError).toHaveBeenCalledTimes(1);
409
+ expect(onError).toHaveBeenCalledWith(testError);
410
+ expect(onAbortAction).toHaveBeenCalledTimes(1);
411
+ });
412
+ it("should not call any error callbacks on success", async () => {
413
+ const onTimeout = vi.fn();
414
+ const onAbort = vi.fn();
415
+ const onError = vi.fn();
416
+ const onAbortAction = vi.fn();
417
+ const result = await timeouted(Promise.resolve("success"), { timeout: 1000, onTimeout, onAbort, onError, onAbortAction });
418
+ expect(isSuccess(result)).toBe(true);
419
+ expect(onTimeout).not.toHaveBeenCalled();
420
+ expect(onAbort).not.toHaveBeenCalled();
421
+ expect(onError).not.toHaveBeenCalled();
422
+ expect(onAbortAction).not.toHaveBeenCalled();
423
+ });
424
+ });
425
+ describe("Race Conditions", () => {
426
+ it("should handle success that wins race against timeout", async () => {
427
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve("fast"), 10)), { timeout: 100 });
428
+ expect(isSuccess(result)).toBe(true);
429
+ });
430
+ it("should handle timeout that wins race against slow promise", async () => {
431
+ const result = await timeouted(new Promise((resolve) => setTimeout(() => resolve("slow"), 100)), { timeout: 10 });
432
+ expect(isTimeout(result)).toBe(true);
433
+ });
434
+ it("should handle abort that wins race against slow promise", async () => {
435
+ const controller = new AbortController();
436
+ const promise = timeouted(new Promise((resolve) => setTimeout(() => resolve("slow"), 200)), {
437
+ timeout: 1000,
438
+ signal: controller.signal,
439
+ });
440
+ setTimeout(() => controller.abort(), 10);
441
+ const result = await promise;
442
+ expect(isAborted(result)).toBe(true);
443
+ });
444
+ it("should handle error that wins race against timeout", async () => {
445
+ const result = await timeouted(new Promise((_, reject) => setTimeout(() => reject(new Error("fast error")), 10)), {
446
+ timeout: 100,
447
+ });
448
+ expect(isError(result)).toBe(true);
449
+ });
450
+ it("should handle abort that wins race against timeout", async () => {
451
+ const controller = new AbortController();
452
+ const promise = timeouted(new Promise((resolve) => setTimeout(() => resolve("data"), 500)), {
453
+ timeout: 100,
454
+ signal: controller.signal,
455
+ });
456
+ setTimeout(() => controller.abort("quick abort"), 20);
457
+ const result = await promise;
458
+ expect(isAborted(result)).toBe(true);
459
+ if (isAborted(result)) {
460
+ expect(result.reason).toBe("quick abort");
461
+ }
462
+ expect(result.duration).toBeLessThan(50);
463
+ });
464
+ });
465
+ describe("Real-World Scenarios", () => {
466
+ it("should handle fetch-like operation with timeout", async () => {
467
+ const mockFetch = async (ctrl) => {
468
+ return new Promise((resolve, reject) => {
469
+ const timeoutId = setTimeout(() => resolve({ data: "response" }), 100);
470
+ ctrl.signal.addEventListener("abort", () => {
471
+ clearTimeout(timeoutId);
472
+ reject(new Error("Request aborted"));
473
+ });
474
+ });
475
+ };
476
+ const result = await timeouted(mockFetch, { timeout: 200 });
477
+ expect(isSuccess(result)).toBe(true);
478
+ if (isSuccess(result)) {
479
+ expect(result.value.data).toBe("response");
480
+ }
481
+ });
482
+ it("should handle fetch timeout scenario", async () => {
483
+ const mockSlowFetch = async () => {
484
+ await new Promise((resolve) => setTimeout(resolve, 200));
485
+ return { data: "slow response" };
486
+ };
487
+ const result = await timeouted(mockSlowFetch, { timeout: 50 });
488
+ expect(isTimeout(result)).toBe(true);
489
+ });
490
+ it("should handle user cancellation during long operation", async () => {
491
+ const controller = new AbortController();
492
+ const onAbort = vi.fn();
493
+ const promise = timeouted(async (ctrl) => {
494
+ for (let i = 0; i < 10; i++) {
495
+ if (ctrl.signal.aborted) {
496
+ throw new Error("Operation cancelled");
497
+ }
498
+ await new Promise((resolve) => setTimeout(resolve, 50));
499
+ }
500
+ return "completed";
501
+ }, { timeout: 10000, signal: controller.signal, onAbort });
502
+ setTimeout(() => controller.abort("User clicked cancel"), 100);
503
+ const result = await promise;
504
+ expect(isAborted(result)).toBe(true);
505
+ expect(onAbort).toHaveBeenCalledWith("User clicked cancel");
506
+ });
507
+ it("should track request context throughout operation", async () => {
508
+ const ctx = {
509
+ requestId: "req-123",
510
+ userId: "user-456",
511
+ startTime: Date.now(),
512
+ };
513
+ const result = await timeouted(async () => {
514
+ await new Promise((resolve) => setTimeout(resolve, 50));
515
+ return { status: "ok" };
516
+ }, { timeout: 1000, ctx });
517
+ expect(isSuccess(result)).toBe(true);
518
+ expect(result.ctx).toEqual(ctx);
519
+ expect(result.duration).toBeGreaterThan(0);
520
+ });
521
+ it("should handle retry logic pattern", async () => {
522
+ let attempts = 0;
523
+ const maxAttempts = 3;
524
+ async function attemptOperation() {
525
+ attempts++;
526
+ const result = await timeouted(async () => {
527
+ await new Promise((resolve) => setTimeout(resolve, 30));
528
+ if (attempts < maxAttempts) {
529
+ throw new Error("Temporary failure");
530
+ }
531
+ return "success";
532
+ }, { timeout: 100 });
533
+ if (isError(result) && attempts < maxAttempts) {
534
+ return attemptOperation();
535
+ }
536
+ return unwrapOr(result, "failed");
537
+ }
538
+ const finalResult = await attemptOperation();
539
+ expect(finalResult).toBe("success");
540
+ expect(attempts).toBe(3);
541
+ });
542
+ it("should handle parallel operations with different timeouts", async () => {
543
+ const results = await Promise.all([
544
+ timeouted(new Promise((resolve) => setTimeout(() => resolve("fast"), 50)), { timeout: 100 }),
545
+ timeouted(new Promise((resolve) => setTimeout(() => resolve("medium"), 150)), { timeout: 200 }),
546
+ timeouted(new Promise((resolve) => setTimeout(() => resolve("slow"), 300)), { timeout: 100 }),
547
+ ]);
548
+ expect(isSuccess(results[0])).toBe(true);
549
+ expect(isSuccess(results[1])).toBe(true);
550
+ expect(isTimeout(results[2])).toBe(true);
551
+ });
552
+ });
553
+ describe("Memory Leak Prevention", () => {
554
+ it("should not leak event listeners on success", async () => {
555
+ const controller = new AbortController();
556
+ await timeouted(Promise.resolve("data"), { timeout: 1000, signal: controller.signal });
557
+ expect(controller.signal.aborted).toBe(false);
558
+ });
559
+ it("should not leak event listeners on timeout", async () => {
560
+ const controller = new AbortController();
561
+ await timeouted(new Promise((resolve) => setTimeout(() => resolve("slow"), 200)), { timeout: 50, signal: controller.signal });
562
+ });
563
+ it("should not leak event listeners on abort", async () => {
564
+ const controller = new AbortController();
565
+ const promise = timeouted(new Promise((resolve) => setTimeout(() => resolve("data"), 200)), {
566
+ timeout: 1000,
567
+ signal: controller.signal,
568
+ });
569
+ setTimeout(() => controller.abort(), 50);
570
+ await promise;
571
+ });
572
+ it("should cleanup on multiple rapid calls", async () => {
573
+ const controller = new AbortController();
574
+ const promises = Array.from({ length: 10 }, (_, i) => timeouted(Promise.resolve(i), { timeout: 100, signal: controller.signal }));
575
+ const results = await Promise.all(promises);
576
+ expect(results.every(isSuccess)).toBe(true);
577
+ });
578
+ });
579
+ //# sourceMappingURL=timeouted.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeouted.test.js","sourceRoot":"","sources":["../../../src/timeouted.test.ts"],"names":[],"mappings":"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"}