rexfect 0.0.7

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 (190) hide show
  1. package/README.md +1756 -0
  2. package/dist/abortableContext.d.ts +3 -0
  3. package/dist/abortableContext.d.ts.map +1 -0
  4. package/dist/abortableContext.js +48 -0
  5. package/dist/abortableContext.js.map +1 -0
  6. package/dist/action.d.ts +64 -0
  7. package/dist/action.d.ts.map +1 -0
  8. package/dist/action.js +208 -0
  9. package/dist/action.js.map +1 -0
  10. package/dist/action.test.d.ts +2 -0
  11. package/dist/action.test.d.ts.map +1 -0
  12. package/dist/action.test.js +189 -0
  13. package/dist/action.test.js.map +1 -0
  14. package/dist/async/abortable-guard.d.ts +25 -0
  15. package/dist/async/abortable-guard.d.ts.map +1 -0
  16. package/dist/async/abortable-guard.js +33 -0
  17. package/dist/async/abortable-guard.js.map +1 -0
  18. package/dist/async/abortable.d.ts +331 -0
  19. package/dist/async/abortable.d.ts.map +1 -0
  20. package/dist/async/abortable.js +410 -0
  21. package/dist/async/abortable.js.map +1 -0
  22. package/dist/async/abortable.test.d.ts +2 -0
  23. package/dist/async/abortable.test.d.ts.map +1 -0
  24. package/dist/async/abortable.test.js +535 -0
  25. package/dist/async/abortable.test.js.map +1 -0
  26. package/dist/async/abortable.typeCheck.d.ts +8 -0
  27. package/dist/async/abortable.typeCheck.d.ts.map +1 -0
  28. package/dist/async/abortable.typeCheck.js +138 -0
  29. package/dist/async/abortable.typeCheck.js.map +1 -0
  30. package/dist/async/async.d.ts +18 -0
  31. package/dist/async/async.d.ts.map +1 -0
  32. package/dist/async/async.js +20 -0
  33. package/dist/async/async.js.map +1 -0
  34. package/dist/async/index.d.ts +15 -0
  35. package/dist/async/index.d.ts.map +1 -0
  36. package/dist/async/index.js +13 -0
  37. package/dist/async/index.js.map +1 -0
  38. package/dist/async/loadable.d.ts +7 -0
  39. package/dist/async/loadable.d.ts.map +1 -0
  40. package/dist/async/loadable.js +52 -0
  41. package/dist/async/loadable.js.map +1 -0
  42. package/dist/async/loadable.test.d.ts +2 -0
  43. package/dist/async/loadable.test.d.ts.map +1 -0
  44. package/dist/async/loadable.test.js +322 -0
  45. package/dist/async/loadable.test.js.map +1 -0
  46. package/dist/async/promiseCache.d.ts +14 -0
  47. package/dist/async/promiseCache.d.ts.map +1 -0
  48. package/dist/async/promiseCache.js +29 -0
  49. package/dist/async/promiseCache.js.map +1 -0
  50. package/dist/async/read.d.ts +120 -0
  51. package/dist/async/read.d.ts.map +1 -0
  52. package/dist/async/read.js +286 -0
  53. package/dist/async/read.js.map +1 -0
  54. package/dist/async/read.test.d.ts +2 -0
  55. package/dist/async/read.test.d.ts.map +1 -0
  56. package/dist/async/read.test.js +419 -0
  57. package/dist/async/read.test.js.map +1 -0
  58. package/dist/async/read.typeCheck.d.ts +6 -0
  59. package/dist/async/read.typeCheck.d.ts.map +1 -0
  60. package/dist/async/read.typeCheck.js +101 -0
  61. package/dist/async/read.typeCheck.js.map +1 -0
  62. package/dist/async/safe.d.ts +230 -0
  63. package/dist/async/safe.d.ts.map +1 -0
  64. package/dist/async/safe.js +247 -0
  65. package/dist/async/safe.js.map +1 -0
  66. package/dist/async/safe.test.d.ts +2 -0
  67. package/dist/async/safe.test.d.ts.map +1 -0
  68. package/dist/async/safe.test.js +447 -0
  69. package/dist/async/safe.test.js.map +1 -0
  70. package/dist/async/utils.d.ts +17 -0
  71. package/dist/async/utils.d.ts.map +1 -0
  72. package/dist/async/utils.js +38 -0
  73. package/dist/async/utils.js.map +1 -0
  74. package/dist/async/wait.d.ts +120 -0
  75. package/dist/async/wait.d.ts.map +1 -0
  76. package/dist/async/wait.js +112 -0
  77. package/dist/async/wait.js.map +1 -0
  78. package/dist/async/wait.test.d.ts +2 -0
  79. package/dist/async/wait.test.d.ts.map +1 -0
  80. package/dist/async/wait.test.js +122 -0
  81. package/dist/async/wait.test.js.map +1 -0
  82. package/dist/async/wait.typeCheck.d.ts +6 -0
  83. package/dist/async/wait.typeCheck.d.ts.map +1 -0
  84. package/dist/async/wait.typeCheck.js +104 -0
  85. package/dist/async/wait.typeCheck.js.map +1 -0
  86. package/dist/atom.d.ts +46 -0
  87. package/dist/atom.d.ts.map +1 -0
  88. package/dist/atom.js +86 -0
  89. package/dist/atom.js.map +1 -0
  90. package/dist/atom.test.d.ts +2 -0
  91. package/dist/atom.test.d.ts.map +1 -0
  92. package/dist/atom.test.js +75 -0
  93. package/dist/atom.test.js.map +1 -0
  94. package/dist/batch.d.ts +15 -0
  95. package/dist/batch.d.ts.map +1 -0
  96. package/dist/batch.js +45 -0
  97. package/dist/batch.js.map +1 -0
  98. package/dist/defer.d.ts +56 -0
  99. package/dist/defer.d.ts.map +1 -0
  100. package/dist/defer.js +49 -0
  101. package/dist/defer.js.map +1 -0
  102. package/dist/effect.d.ts +91 -0
  103. package/dist/effect.d.ts.map +1 -0
  104. package/dist/effect.js +311 -0
  105. package/dist/effect.js.map +1 -0
  106. package/dist/effect.test.d.ts +2 -0
  107. package/dist/effect.test.d.ts.map +1 -0
  108. package/dist/effect.test.js +123 -0
  109. package/dist/effect.test.js.map +1 -0
  110. package/dist/emitter.d.ts +129 -0
  111. package/dist/emitter.d.ts.map +1 -0
  112. package/dist/emitter.js +164 -0
  113. package/dist/emitter.js.map +1 -0
  114. package/dist/emitter.test.d.ts +2 -0
  115. package/dist/emitter.test.d.ts.map +1 -0
  116. package/dist/emitter.test.js +259 -0
  117. package/dist/emitter.test.js.map +1 -0
  118. package/dist/equality.d.ts +66 -0
  119. package/dist/equality.d.ts.map +1 -0
  120. package/dist/equality.js +145 -0
  121. package/dist/equality.js.map +1 -0
  122. package/dist/event.d.ts +18 -0
  123. package/dist/event.d.ts.map +1 -0
  124. package/dist/event.js +166 -0
  125. package/dist/event.js.map +1 -0
  126. package/dist/event.test.d.ts +2 -0
  127. package/dist/event.test.d.ts.map +1 -0
  128. package/dist/event.test.js +167 -0
  129. package/dist/event.test.js.map +1 -0
  130. package/dist/hooks.d.ts +152 -0
  131. package/dist/hooks.d.ts.map +1 -0
  132. package/dist/hooks.js +122 -0
  133. package/dist/hooks.js.map +1 -0
  134. package/dist/hooks.test.d.ts +2 -0
  135. package/dist/hooks.test.d.ts.map +1 -0
  136. package/dist/hooks.test.js +99 -0
  137. package/dist/hooks.test.js.map +1 -0
  138. package/dist/index.d.ts +33 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +35 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/isPromiseLike.d.ts +10 -0
  143. package/dist/isPromiseLike.d.ts.map +1 -0
  144. package/dist/isPromiseLike.js +15 -0
  145. package/dist/isPromiseLike.js.map +1 -0
  146. package/dist/pick.d.ts +22 -0
  147. package/dist/pick.d.ts.map +1 -0
  148. package/dist/pick.js +46 -0
  149. package/dist/pick.js.map +1 -0
  150. package/dist/react/index.d.ts +8 -0
  151. package/dist/react/index.d.ts.map +1 -0
  152. package/dist/react/index.js +8 -0
  153. package/dist/react/index.js.map +1 -0
  154. package/dist/react/useRx.d.ts +14 -0
  155. package/dist/react/useRx.d.ts.map +1 -0
  156. package/dist/react/useRx.js +110 -0
  157. package/dist/react/useRx.js.map +1 -0
  158. package/dist/react/useRx.test.d.ts +2 -0
  159. package/dist/react/useRx.test.d.ts.map +1 -0
  160. package/dist/react/useRx.test.js +457 -0
  161. package/dist/react/useRx.test.js.map +1 -0
  162. package/dist/strictModeTest.d.ts +11 -0
  163. package/dist/strictModeTest.d.ts.map +1 -0
  164. package/dist/strictModeTest.js +41 -0
  165. package/dist/strictModeTest.js.map +1 -0
  166. package/dist/types.d.ts +606 -0
  167. package/dist/types.d.ts.map +1 -0
  168. package/dist/types.js +5 -0
  169. package/dist/types.js.map +1 -0
  170. package/dist/untrack.d.ts +14 -0
  171. package/dist/untrack.d.ts.map +1 -0
  172. package/dist/untrack.js +17 -0
  173. package/dist/untrack.js.map +1 -0
  174. package/dist/utils/withUse.d.ts +10 -0
  175. package/dist/utils/withUse.d.ts.map +1 -0
  176. package/dist/utils/withUse.js +21 -0
  177. package/dist/utils/withUse.js.map +1 -0
  178. package/dist/utils/withUse.test.d.ts +2 -0
  179. package/dist/utils/withUse.test.d.ts.map +1 -0
  180. package/dist/utils/withUse.test.js +233 -0
  181. package/dist/utils/withUse.test.js.map +1 -0
  182. package/dist/utils.d.ts +7 -0
  183. package/dist/utils.d.ts.map +1 -0
  184. package/dist/utils.js +7 -0
  185. package/dist/utils.js.map +1 -0
  186. package/dist/utils.test.d.ts +2 -0
  187. package/dist/utils.test.d.ts.map +1 -0
  188. package/dist/utils.test.js +119 -0
  189. package/dist/utils.test.js.map +1 -0
  190. package/package.json +64 -0
@@ -0,0 +1,535 @@
1
+ import { describe, it, expect, vi } from "vitest";
2
+ import { abortable, isAbortable, AbortableAbortedError, } from "./abortable";
3
+ import { async } from "./async";
4
+ describe("abortable", () => {
5
+ describe("abortable()", () => {
6
+ it("should create an abortable function", () => {
7
+ const fn = abortable(({}, x) => Promise.resolve(x * 2));
8
+ expect(typeof fn).toBe("function");
9
+ expect(typeof fn.withSignal).toBe("function");
10
+ expect(typeof fn.use).toBe("function");
11
+ expect(isAbortable(fn)).toBe(true);
12
+ });
13
+ it("should create AbortController when called directly", async () => {
14
+ const handler = vi.fn(({ signal }, x) => {
15
+ expect(signal).toBeDefined();
16
+ expect(signal).toBeInstanceOf(AbortSignal);
17
+ void signal; // Use signal to avoid unused warning
18
+ return Promise.resolve(x * 2);
19
+ });
20
+ const fn = abortable(handler);
21
+ const result = await fn(5);
22
+ expect(result).toBe(10);
23
+ expect(handler).toHaveBeenCalled();
24
+ });
25
+ it("should create own signal when using withSignal() - linked to parent", async () => {
26
+ const controller = new AbortController();
27
+ const handler = vi.fn(({ signal }, x, y) => {
28
+ // Signal is NOT the same as parent - abortable owns its own signal
29
+ expect(signal).toBeDefined();
30
+ expect(signal).toBeInstanceOf(AbortSignal);
31
+ expect(signal).not.toBe(controller.signal);
32
+ void signal; // Use signal to avoid unused warning
33
+ return Promise.resolve(`${x}-${y}`);
34
+ });
35
+ const fn = abortable(handler);
36
+ const result = await fn.withSignal(controller.signal, 42, "hello");
37
+ expect(result).toBe("42-hello");
38
+ expect(handler).toHaveBeenCalled();
39
+ });
40
+ it("should work with async functions", async () => {
41
+ const fn = abortable(async ({}, delay) => {
42
+ await new Promise((r) => setTimeout(r, delay));
43
+ return "done";
44
+ });
45
+ const result = await fn(10);
46
+ expect(result).toBe("done");
47
+ });
48
+ it("should abort when parent signal aborts", async () => {
49
+ const controller = new AbortController();
50
+ const fn = abortable(async ({ signal }, url) => {
51
+ // Wait a bit to allow abort to propagate
52
+ await new Promise((r) => setTimeout(r, 10));
53
+ if (signal.aborted) {
54
+ throw new AbortableAbortedError();
55
+ }
56
+ return `fetched: ${url}`;
57
+ });
58
+ controller.abort();
59
+ await expect(fn.withSignal(controller.signal, "/api")).rejects.toThrow(AbortableAbortedError);
60
+ });
61
+ it("should provide safe() in context", async () => {
62
+ const innerFn = abortable(async ({ signal: _signal }, value) => {
63
+ return `inner-${value}`;
64
+ });
65
+ const outerFn = abortable(async ({ safe }, value) => {
66
+ // Use safe to call another abortable function
67
+ const innerResult = await safe(innerFn, "test");
68
+ return `outer-${value}-${innerResult}`;
69
+ });
70
+ const result = await outerFn("hello");
71
+ expect(result).toBe("outer-hello-inner-test");
72
+ });
73
+ it("should create new AbortController when withSignal() receives undefined", async () => {
74
+ const handler = vi.fn(({ signal }) => {
75
+ expect(signal).toBeDefined();
76
+ void signal; // Use signal to avoid unused warning
77
+ expect(signal).toBeInstanceOf(AbortSignal);
78
+ return Promise.resolve("ok");
79
+ });
80
+ const fn = abortable(handler);
81
+ await fn.withSignal(undefined);
82
+ expect(handler).toHaveBeenCalled();
83
+ });
84
+ });
85
+ describe("AbortableResult control methods", () => {
86
+ it("should return AbortableResult with status methods", async () => {
87
+ const fn = abortable(async () => {
88
+ await new Promise((r) => setTimeout(r, 10));
89
+ return "done";
90
+ });
91
+ const result = fn();
92
+ expect(typeof result.status).toBe("function");
93
+ expect(typeof result.running).toBe("function");
94
+ expect(typeof result.succeeded).toBe("function");
95
+ expect(typeof result.failed).toBe("function");
96
+ expect(typeof result.aborted).toBe("function");
97
+ expect(typeof result.paused).toBe("function");
98
+ expect(typeof result.waiting).toBe("function");
99
+ expect(typeof result.completed).toBe("function");
100
+ await result;
101
+ expect(result.succeeded()).toBe(true);
102
+ expect(result.status()).toBe("success");
103
+ });
104
+ it("should support abort() method", async () => {
105
+ const fn = abortable(async ({ signal }) => {
106
+ await new Promise((r) => setTimeout(r, 100));
107
+ if (signal.aborted) {
108
+ throw new AbortableAbortedError();
109
+ }
110
+ return "done";
111
+ });
112
+ const result = fn();
113
+ expect(result.abort()).toBe(true);
114
+ expect(result.abort()).toBe(false); // Already aborted
115
+ await expect(result).rejects.toThrow(AbortableAbortedError);
116
+ expect(result.aborted()).toBe(true);
117
+ expect(result.status()).toBe("aborted");
118
+ });
119
+ it("should support pause() and resume() methods", async () => {
120
+ let step = 0;
121
+ let checkpointReached = false;
122
+ // Pause works at checkpoint() - a manual suspension point
123
+ const fn = abortable(async (ctx) => {
124
+ step = 1;
125
+ // This simulates waiting for something
126
+ await new Promise((r) => setTimeout(r, 20));
127
+ // Then hitting a checkpoint where pause is checked
128
+ await ctx.checkpoint();
129
+ checkpointReached = true;
130
+ step = 2;
131
+ return "done";
132
+ });
133
+ const result = fn();
134
+ // Immediately pause before checkpoint is reached
135
+ result.pause();
136
+ expect(result.paused()).toBe(true);
137
+ // Wait long enough for the setTimeout to complete
138
+ // but checkpoint should block because paused
139
+ await new Promise((r) => setTimeout(r, 50));
140
+ expect(checkpointReached).toBe(false);
141
+ expect(step).toBe(1);
142
+ // Resume - now checkpoint will pass
143
+ result.resume();
144
+ await result;
145
+ expect(checkpointReached).toBe(true);
146
+ expect(step).toBe(2);
147
+ expect(result.succeeded()).toBe(true);
148
+ });
149
+ it("should support send() for events", async () => {
150
+ const fn = abortable(async (ctx) => {
151
+ const confirmed = await ctx.take("confirm");
152
+ return confirmed ? "yes" : "no";
153
+ });
154
+ const result = fn();
155
+ // Should be waiting
156
+ await new Promise((r) => setTimeout(r, 10));
157
+ expect(result.waiting()).toBe(true);
158
+ // Send event
159
+ result.send("confirm", true);
160
+ const value = await result;
161
+ expect(value).toBe("yes");
162
+ });
163
+ it("should support checkpoint pattern (TYield = void)", async () => {
164
+ const steps = [];
165
+ const fn = abortable(async (ctx) => {
166
+ steps.push("step1");
167
+ await ctx.take();
168
+ steps.push("step2");
169
+ await ctx.take();
170
+ steps.push("step3");
171
+ return "done";
172
+ });
173
+ const result = fn();
174
+ await new Promise((r) => setTimeout(r, 10));
175
+ expect(steps).toEqual(["step1"]);
176
+ result.send();
177
+ await new Promise((r) => setTimeout(r, 10));
178
+ expect(steps).toEqual(["step1", "step2"]);
179
+ result.send();
180
+ await result;
181
+ expect(steps).toEqual(["step1", "step2", "step3"]);
182
+ });
183
+ it("should provide result() and error() accessors", async () => {
184
+ const successFn = abortable(async () => "success");
185
+ const errorFn = abortable(async () => {
186
+ throw new Error("test error");
187
+ });
188
+ const successResult = successFn();
189
+ await successResult;
190
+ expect(successResult.result()).toBe("success");
191
+ expect(successResult.error()).toBeUndefined();
192
+ const errorResult = errorFn();
193
+ await expect(errorResult).rejects.toThrow("test error");
194
+ expect(errorResult.result()).toBeUndefined();
195
+ expect(errorResult.error()).toBeInstanceOf(Error);
196
+ });
197
+ });
198
+ describe("use() - chainable wrappers", () => {
199
+ it("should apply a wrapper and return new Abortable", async () => {
200
+ const baseFn = abortable(async ({ signal: _signal }, x) => {
201
+ return x * 2;
202
+ });
203
+ // Create a wrapper that adds 10 to the result
204
+ const wrappedFn = baseFn.use((next) => async (ctx, x) => {
205
+ const result = await next(ctx, x);
206
+ return result + 10;
207
+ });
208
+ expect(isAbortable(wrappedFn)).toBe(true);
209
+ const result = await wrappedFn(5);
210
+ expect(result).toBe(20); // (5 * 2) + 10
211
+ });
212
+ it("should support chaining multiple wrappers", async () => {
213
+ const baseFn = abortable(async ({ signal: _signal }, x) => {
214
+ return x;
215
+ });
216
+ const wrappedFn = baseFn
217
+ .use((next) => async (ctx, x) => {
218
+ const result = await next(ctx, x);
219
+ return result * 2;
220
+ })
221
+ .use((next) => async (ctx, x) => {
222
+ const result = await next(ctx, x);
223
+ return result + 10;
224
+ });
225
+ // Order: base(5) = 5, then *2 = 10, then +10 = 20
226
+ const result = await wrappedFn(5);
227
+ expect(result).toBe(20);
228
+ });
229
+ it("should provide consistent context through wrappers", async () => {
230
+ const signalCaptures = [];
231
+ const baseFn = abortable(async ({ signal }, x) => {
232
+ signalCaptures.push(signal);
233
+ return x;
234
+ });
235
+ const wrappedFn = baseFn.use((next) => async (ctx, x) => {
236
+ signalCaptures.push(ctx.signal);
237
+ return next(ctx, x);
238
+ });
239
+ await wrappedFn(5);
240
+ // Both wrapper and base should see signals (may be different due to wrapping)
241
+ expect(signalCaptures).toHaveLength(2);
242
+ expect(signalCaptures[0]).toBeInstanceOf(AbortSignal);
243
+ expect(signalCaptures[1]).toBeInstanceOf(AbortSignal);
244
+ });
245
+ it("should allow transforming arguments", async () => {
246
+ // Base function takes a number
247
+ const baseFn = abortable(async ({}, x) => {
248
+ return x * 2;
249
+ });
250
+ // Wrapper transforms string to number
251
+ const wrappedFn = baseFn.use((next) => async (ctx, str) => {
252
+ const num = parseInt(str, 10);
253
+ return next(ctx, num);
254
+ });
255
+ const result = await wrappedFn("42");
256
+ expect(result).toBe(84);
257
+ });
258
+ it("should allow retry wrapper pattern", async () => {
259
+ let callCount = 0;
260
+ const flaky = abortable(async ({}) => {
261
+ callCount++;
262
+ if (callCount < 3) {
263
+ throw new Error("Flaky error");
264
+ }
265
+ return "success";
266
+ });
267
+ // Simple retry wrapper
268
+ const withRetry = flaky.use((next) => async (ctx) => {
269
+ let lastError;
270
+ for (let i = 0; i < 3; i++) {
271
+ try {
272
+ return await next(ctx);
273
+ }
274
+ catch (e) {
275
+ lastError = e;
276
+ }
277
+ }
278
+ throw lastError;
279
+ });
280
+ const result = await withRetry();
281
+ expect(result).toBe("success");
282
+ expect(callCount).toBe(3);
283
+ });
284
+ });
285
+ describe("isAbortable()", () => {
286
+ it("should return true for abortable functions", () => {
287
+ const fn = abortable(({ signal: _signal }, x) => Promise.resolve(x));
288
+ expect(isAbortable(fn)).toBe(true);
289
+ });
290
+ it("should return false for regular functions", () => {
291
+ const fn = (x) => x;
292
+ expect(isAbortable(fn)).toBe(false);
293
+ });
294
+ it("should return false for objects", () => {
295
+ expect(isAbortable({})).toBe(false);
296
+ expect(isAbortable({ with: () => { } })).toBe(false);
297
+ });
298
+ it("should return false for null/undefined", () => {
299
+ expect(isAbortable(null)).toBe(false);
300
+ expect(isAbortable(undefined)).toBe(false);
301
+ });
302
+ });
303
+ describe("type safety", () => {
304
+ it("should preserve function argument types", async () => {
305
+ const fn = abortable(({ signal: _signal }, a, b) => {
306
+ return Promise.resolve(`${a}-${b}`);
307
+ });
308
+ // Direct call
309
+ const r1 = await fn(1, "test");
310
+ expect(r1).toBe("1-test");
311
+ // With signal
312
+ const r2 = await fn.withSignal(undefined, 2, "hello");
313
+ expect(r2).toBe("2-hello");
314
+ });
315
+ it("should preserve async return types", async () => {
316
+ const fn = abortable(async ({ signal: _signal }, x) => {
317
+ return `result-${x}`;
318
+ });
319
+ const result = fn(42);
320
+ expect(await result).toBe("result-42");
321
+ });
322
+ });
323
+ describe("AbortableContext", () => {
324
+ it("should provide aborted() method", async () => {
325
+ let wasAborted = false;
326
+ // Use take() to create a suspension point where we can abort
327
+ const fn = abortable(async (ctx) => {
328
+ await ctx.take("continue");
329
+ wasAborted = ctx.aborted();
330
+ if (wasAborted) {
331
+ throw new AbortableAbortedError();
332
+ }
333
+ return "done";
334
+ });
335
+ const result = fn();
336
+ // Wait for take to be reached
337
+ await new Promise((r) => setTimeout(r, 10));
338
+ expect(result.waiting()).toBe(true);
339
+ // Abort while waiting
340
+ result.abort();
341
+ expect(result.aborted()).toBe(true);
342
+ // The promise should reject
343
+ await expect(result).rejects.toThrow(AbortableAbortedError);
344
+ });
345
+ it("should provide abort() method from inside", async () => {
346
+ const fn = abortable(async (ctx) => {
347
+ ctx.abort();
348
+ // Try to take - should see we're aborted
349
+ try {
350
+ await ctx.take("continue");
351
+ }
352
+ catch (e) {
353
+ if (ctx.aborted()) {
354
+ throw new AbortableAbortedError();
355
+ }
356
+ throw e;
357
+ }
358
+ return "done";
359
+ });
360
+ const result = fn();
361
+ await expect(result).rejects.toThrow(AbortableAbortedError);
362
+ expect(result.aborted()).toBe(true);
363
+ });
364
+ it("should provide checkpoint() that checks abort status", async () => {
365
+ let checkpointPassed = false;
366
+ const fn = abortable(async (ctx) => {
367
+ // Abort immediately
368
+ ctx.abort();
369
+ // Checkpoint should throw because aborted
370
+ await ctx.checkpoint();
371
+ checkpointPassed = true;
372
+ return "done";
373
+ });
374
+ const result = fn();
375
+ await expect(result).rejects.toThrow(AbortableAbortedError);
376
+ expect(checkpointPassed).toBe(false);
377
+ });
378
+ });
379
+ describe("join()", () => {
380
+ it("should join a single abortable result", async () => {
381
+ const innerFn = abortable(async () => {
382
+ await async.delay(10);
383
+ return "inner-result";
384
+ });
385
+ const outerFn = abortable(async (ctx) => {
386
+ const result = await ctx.join(innerFn());
387
+ return `outer-${result}`;
388
+ });
389
+ const result = await outerFn();
390
+ expect(result).toBe("outer-inner-result");
391
+ });
392
+ it("should join multiple abortable results", async () => {
393
+ const fn1 = abortable(async () => {
394
+ await async.delay(10);
395
+ return "a";
396
+ });
397
+ const fn2 = abortable(async () => {
398
+ await async.delay(20);
399
+ return "b";
400
+ });
401
+ const fn3 = abortable(async () => {
402
+ await async.delay(5);
403
+ return "c";
404
+ });
405
+ const outerFn = abortable(async (ctx) => {
406
+ const [r1, r2, r3] = await ctx.join([fn1(), fn2(), fn3()]);
407
+ return `${r1}-${r2}-${r3}`;
408
+ });
409
+ const result = await outerFn();
410
+ expect(result).toBe("a-b-c");
411
+ });
412
+ it("should abort joined results when parent aborts", async () => {
413
+ const abortedResults = [];
414
+ const innerFn = abortable(async (ctx, id) => {
415
+ await async.delay(100);
416
+ if (ctx.aborted()) {
417
+ abortedResults.push(id);
418
+ throw new AbortableAbortedError();
419
+ }
420
+ return id;
421
+ });
422
+ const outerFn = abortable(async (ctx) => {
423
+ const [r1, r2] = await ctx.join([innerFn("a"), innerFn("b")]);
424
+ return `${r1}-${r2}`;
425
+ });
426
+ const result = outerFn();
427
+ // Abort after a short delay
428
+ await async.delay(20);
429
+ result.abort();
430
+ await expect(result).rejects.toThrow(AbortableAbortedError);
431
+ });
432
+ it("should abort remaining joined results if one fails", async () => {
433
+ const innerFn1 = abortable(async () => {
434
+ await async.delay(50);
435
+ return "success";
436
+ });
437
+ const innerFn2 = abortable(async () => {
438
+ await async.delay(10);
439
+ throw new Error("inner error");
440
+ });
441
+ const outerFn = abortable(async (ctx) => {
442
+ const [r1, r2] = await ctx.join([innerFn1(), innerFn2()]);
443
+ return `${r1}-${r2}`;
444
+ });
445
+ await expect(outerFn()).rejects.toThrow("inner error");
446
+ });
447
+ it("should respect pause/checkpoint after join completes", async () => {
448
+ const innerFn = abortable(async () => {
449
+ await async.delay(10);
450
+ return "inner";
451
+ });
452
+ let pauseChecked = false;
453
+ const outerFn = abortable(async (ctx) => {
454
+ const r = await ctx.join(innerFn());
455
+ pauseChecked = true;
456
+ return r;
457
+ });
458
+ const result = outerFn();
459
+ const value = await result;
460
+ expect(value).toBe("inner");
461
+ expect(pauseChecked).toBe(true);
462
+ });
463
+ it("should throw AbortableAbortedError if already aborted before join", async () => {
464
+ const innerFn = abortable(async () => "inner");
465
+ const outerFn = abortable(async (ctx) => {
466
+ ctx.abort();
467
+ const r = await ctx.join(innerFn());
468
+ return r;
469
+ });
470
+ await expect(outerFn()).rejects.toThrow(AbortableAbortedError);
471
+ });
472
+ });
473
+ describe("safe() with abortable", () => {
474
+ it("should automatically join abortable when passed to safe()", async () => {
475
+ const innerFn = abortable(async () => {
476
+ await async.delay(10);
477
+ return "inner-result";
478
+ });
479
+ const outerFn = abortable(async (ctx) => {
480
+ const result = await ctx.safe(innerFn);
481
+ return `outer-${result}`;
482
+ });
483
+ const result = outerFn();
484
+ const value = await result;
485
+ expect(value).toBe("outer-inner-result");
486
+ });
487
+ it("should abort child abortable when parent is aborted via safe()", async () => {
488
+ let childAborted = false;
489
+ const innerFn = abortable(async (ctx) => {
490
+ await async.delay(100);
491
+ if (ctx.aborted()) {
492
+ childAborted = true;
493
+ }
494
+ return "inner";
495
+ });
496
+ const outerFn = abortable(async (ctx) => {
497
+ const result = await ctx.safe(innerFn);
498
+ return result;
499
+ });
500
+ const result = outerFn();
501
+ // Abort the parent after a short delay
502
+ await async.delay(10);
503
+ result.abort();
504
+ await expect(result).rejects.toThrow(AbortableAbortedError);
505
+ // Give time for child to detect abort
506
+ await async.delay(10);
507
+ expect(childAborted).toBe(true);
508
+ });
509
+ it("should pass arguments to abortable via safe()", async () => {
510
+ const innerFn = abortable(async (_ctx, a, b) => {
511
+ return `${a}-${b}`;
512
+ });
513
+ const outerFn = abortable(async (ctx) => {
514
+ const result = await ctx.safe(innerFn, 42, "hello");
515
+ return result;
516
+ });
517
+ const value = await outerFn();
518
+ expect(value).toBe("42-hello");
519
+ });
520
+ it("should propagate signal to child abortable via safe()", async () => {
521
+ let receivedSignal = null;
522
+ const innerFn = abortable(async (ctx) => {
523
+ receivedSignal = ctx.signal;
524
+ return "done";
525
+ });
526
+ const outerFn = abortable(async (ctx) => {
527
+ return await ctx.safe(innerFn);
528
+ });
529
+ await outerFn();
530
+ expect(receivedSignal).not.toBeNull();
531
+ expect(receivedSignal.aborted).toBe(false);
532
+ });
533
+ });
534
+ });
535
+ //# sourceMappingURL=abortable.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abortable.test.js","sourceRoot":"","sources":["../../src/async/abortable.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Type check file for abortable functions and wrapper chaining.
3
+ * This file should compile without errors - no runtime tests needed.
4
+ *
5
+ * Run: npx tsc --noEmit src/async/abortable.typeCheck.ts
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=abortable.typeCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abortable.typeCheck.d.ts","sourceRoot":"","sources":["../../src/async/abortable.typeCheck.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}