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,331 @@
1
+ /**
2
+ * Abortable function utilities.
3
+ *
4
+ * Creates async functions with full lifecycle control:
5
+ * - Pause/Resume execution
6
+ * - Abort with cleanup
7
+ * - External event injection (take/send)
8
+ * - Status tracking
9
+ *
10
+ * Similar to saga pattern but uses async/await instead of suspense.
11
+ */
12
+ import { type SafeFnWithUtils } from "./safe";
13
+ import { abortableSymbol, isAbortable } from "./abortable-guard";
14
+ export { abortableSymbol, isAbortable };
15
+ export type AbortableStatus = "running" | "success" | "error" | "paused" | "waiting" | "aborted";
16
+ /**
17
+ * Send function type.
18
+ * - When TYield is void: `() => void` (checkpoint/nudge pattern)
19
+ * - When TYield is object: `<K>(key: K, value: TYield[K]) => void`
20
+ */
21
+ export type AbortableSend<TYield extends void | object = void> = void extends TYield ? () => void : <TKey extends keyof TYield>(key: TKey, value: TYield[TKey]) => void;
22
+ /**
23
+ * Take function type.
24
+ * Returns a Promise that resolves when the event arrives.
25
+ * - When TYield is void: `() => Promise<void>` (checkpoint pattern)
26
+ * - When TYield is object: `<K>(key: K) => Promise<TYield[K]>`
27
+ */
28
+ export type AbortableTake<TYield extends void | object = void> = void extends TYield ? () => Promise<void> : <TKey extends keyof TYield>(key: TKey) => Promise<TYield[TKey]>;
29
+ /**
30
+ * Join function type for coordinating multiple abortable results.
31
+ * When the parent abortable is aborted, all joined results are also aborted.
32
+ */
33
+ export type AbortableJoin = {
34
+ /** Join a single abortable result */
35
+ <TResult>(result: AbortableResult<TResult, any>): Promise<TResult>;
36
+ /** Join multiple abortable results (like Promise.all with abort propagation) */
37
+ <const T extends readonly AbortableResult<any, any>[]>(results: T): Promise<{
38
+ -readonly [K in keyof T]: Awaited<T[K]>;
39
+ }>;
40
+ };
41
+ /**
42
+ * Result returned when invoking an abortable function.
43
+ * Extends Promise for async consumption while providing control methods.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * const result = myAbortable(args);
48
+ *
49
+ * // Promise-like usage
50
+ * const value = await result;
51
+ *
52
+ * // Control methods
53
+ * result.pause();
54
+ * result.resume();
55
+ * result.abort();
56
+ *
57
+ * // Status checks
58
+ * result.running(); // boolean
59
+ * result.status(); // "running" | "success" | ...
60
+ *
61
+ * // Event sending
62
+ * result.send("eventKey", eventValue);
63
+ * ```
64
+ */
65
+ export type AbortableResult<TResult, TYield extends void | object = void> = Promise<TResult> & {
66
+ /** Send an event to the abortable */
67
+ send: AbortableSend<TYield>;
68
+ /** Check if abortable has failed */
69
+ failed(): boolean;
70
+ /** Check if abortable has completed (success, error, or aborted) */
71
+ completed(): boolean;
72
+ /** Check if abortable is currently running */
73
+ running(): boolean;
74
+ /** Check if abortable succeeded */
75
+ succeeded(): boolean;
76
+ /** Check if abortable is paused */
77
+ paused(): boolean;
78
+ /** Check if abortable is waiting for async operation or event */
79
+ waiting(): boolean;
80
+ /** Check if abortable was aborted */
81
+ aborted(): boolean;
82
+ /** Get current status */
83
+ status(): AbortableStatus;
84
+ /** Get result if succeeded, undefined otherwise */
85
+ result(): Awaited<TResult> | undefined;
86
+ /** Get error if failed, undefined otherwise */
87
+ error(): Error | undefined;
88
+ /**
89
+ * Pause execution at current await point.
90
+ * @returns false if already paused or completed
91
+ */
92
+ pause(): boolean;
93
+ /**
94
+ * Resume execution from paused state.
95
+ * @returns false if not paused
96
+ */
97
+ resume(): boolean;
98
+ /**
99
+ * Abort execution.
100
+ * Does NOT affect parent signal - only this abortable's internal signal.
101
+ * @returns false if already aborted or completed
102
+ */
103
+ abort(): boolean;
104
+ };
105
+ /**
106
+ * Context passed to abortable function handlers.
107
+ *
108
+ * @example
109
+ * ```ts
110
+ * const myFn = abortable<[string], Result, { confirm: boolean }>(
111
+ * async ({ signal, safe, take, aborted, abort }, id) => {
112
+ * const data = await safe(fetchData, id);
113
+ *
114
+ * if (aborted()) return null;
115
+ *
116
+ * const confirmed = await take("confirm");
117
+ * if (!confirmed) {
118
+ * abort();
119
+ * return null;
120
+ * }
121
+ *
122
+ * return processData(data);
123
+ * }
124
+ * );
125
+ * ```
126
+ */
127
+ export interface AbortableContext<TYield extends void | object = void> {
128
+ /**
129
+ * AbortSignal for this abortable instance.
130
+ * This is the abortable's OWN signal, not the parent's.
131
+ * Use this for fetch, timers, etc.
132
+ */
133
+ signal: AbortSignal;
134
+ /**
135
+ * Safe execution utility.
136
+ * Wraps async operations to handle abort gracefully.
137
+ *
138
+ * Includes utilities: `.all()`, `.race()`, `.any()`, `.settled()`, `.callback()`
139
+ */
140
+ safe: SafeFnWithUtils;
141
+ /**
142
+ * Wait for an external event.
143
+ * Returns a Promise that resolves when `send(key, value)` is called.
144
+ *
145
+ * @example
146
+ * ```ts
147
+ * // With typed events
148
+ * const confirmed = await take("confirm");
149
+ *
150
+ * // Checkpoint pattern (TYield = void)
151
+ * await take(); // Waits for send()
152
+ * ```
153
+ */
154
+ take: AbortableTake<TYield>;
155
+ /**
156
+ * Check if this abortable has been aborted.
157
+ */
158
+ aborted(): boolean;
159
+ /**
160
+ * Abort this abortable from inside.
161
+ * Does NOT affect parent signal.
162
+ * @returns false if already aborted
163
+ */
164
+ abort(): boolean;
165
+ /**
166
+ * Check for pause point.
167
+ * Call this between async operations to allow pause/resume.
168
+ * Throws AbortableAbortedError if aborted.
169
+ *
170
+ * @example
171
+ * ```ts
172
+ * const myFn = abortable(async (ctx) => {
173
+ * const data = await fetchData();
174
+ * await ctx.checkpoint(); // Allow pause here
175
+ * const processed = await process(data);
176
+ * await ctx.checkpoint(); // Allow pause here
177
+ * return processed;
178
+ * });
179
+ * ```
180
+ */
181
+ checkpoint(): Promise<void>;
182
+ /**
183
+ * Join one or more abortable results.
184
+ * When this abortable is aborted, all joined results are also aborted.
185
+ *
186
+ * @example
187
+ * ```ts
188
+ * // Single result
189
+ * const user = await ctx.join(fetchUser(id));
190
+ *
191
+ * // Multiple results (like Promise.all)
192
+ * const [user, posts, comments] = await ctx.join([
193
+ * fetchUser(id),
194
+ * fetchPosts(id),
195
+ * fetchComments(id),
196
+ * ]);
197
+ * ```
198
+ */
199
+ join: AbortableJoin;
200
+ /**
201
+ * Abort the previous invocation of this abortable function.
202
+ * Useful for "latest only" patterns where rapid calls should cancel in-flight operations.
203
+ *
204
+ * @param message - Optional abort message
205
+ *
206
+ * @example
207
+ * ```ts
208
+ * const search = abortable(async ({ signal, abortPrev }, query: string) => {
209
+ * abortPrev(); // Cancel previous search
210
+ * const res = await fetch(`/search?q=${query}`, { signal });
211
+ * return res.json();
212
+ * });
213
+ *
214
+ * search("h");
215
+ * search("he");
216
+ * const results = await search("hello"); // Only this completes
217
+ * ```
218
+ */
219
+ abortPrev(message?: string): void;
220
+ /**
221
+ * Create a child context that aborts when this context aborts.
222
+ * Useful for sub-operations that should cancel with parent.
223
+ */
224
+ fork(): AbortableContext<TYield>;
225
+ /**
226
+ * Create an independent context that doesn't abort with parent.
227
+ * Useful for background operations that should continue.
228
+ */
229
+ spawn(): AbortableContext<TYield>;
230
+ }
231
+ /**
232
+ * Handler function signature for abortable.
233
+ */
234
+ export type AbortableFn<TArgs extends any[], TResult, TYield extends void | object = void> = (ctx: AbortableContext<TYield>, ...args: TArgs) => Promise<TResult>;
235
+ /**
236
+ * Wrapper type for use() method.
237
+ */
238
+ export type AbortableWrapper<TArgs extends any[], TResult, TYield extends void | object, TNewArgs extends any[] = TArgs, TNewResult = TResult, TNewYield extends void | object = TYield> = (next: AbortableFn<TArgs, TResult, TYield>) => AbortableFn<TNewArgs, TNewResult, TNewYield>;
239
+ /**
240
+ * Identity wrapper that preserves all input types including TYield.
241
+ */
242
+ export type IdentityWrapper = <TArgs extends any[], TResult, TYield extends void | object = void>(next: AbortableFn<TArgs, TResult, TYield>) => AbortableFn<TArgs, TResult, TYield>;
243
+ /**
244
+ * An abortable function with full lifecycle control.
245
+ *
246
+ * - Direct call: `fn(...args)` - creates new AbortController
247
+ * - With signal: `fn.withSignal(signal, ...args)` - links to parent signal
248
+ * - Chainable: `fn.use(wrapper)` - returns new Abortable with wrapper applied
249
+ *
250
+ * Signal relationship:
251
+ * - Abortable creates its own internal AbortController
252
+ * - When `withSignal(parentSignal)` is called:
253
+ * - If parent aborts → this abortable aborts
254
+ * - If this abortable aborts → parent NOT affected
255
+ */
256
+ export interface Abortable<TArgs extends any[], TResult, TYield extends void | object = void> {
257
+ /** Call without signal (creates new AbortController) */
258
+ (...args: TArgs): AbortableResult<TResult, TYield>;
259
+ /**
260
+ * Call with parent signal.
261
+ * Parent abort → this aborts. This abort → parent unaffected.
262
+ */
263
+ withSignal(signal: AbortSignal | undefined, ...args: TArgs): AbortableResult<TResult, TYield>;
264
+ /**
265
+ * Apply a wrapper and return a new Abortable.
266
+ *
267
+ * @example
268
+ * ```ts
269
+ * const fetchUserWithRetry = fetchUser.use(withRetry(3));
270
+ * ```
271
+ */
272
+ use<TNewArgs extends any[] = TArgs, TNewResult = TResult, TNewYield extends void | object = TYield>(wrapper: AbortableWrapper<TArgs, TResult, TYield, TNewArgs, TNewResult, TNewYield>): Abortable<TNewArgs, TNewResult, TNewYield>;
273
+ /**
274
+ * Type assertion for return type.
275
+ */
276
+ as<TNewResult, TNewArgs extends any[] = TArgs, TNewYield extends void | object = TYield>(): Abortable<TNewArgs, TNewResult, TNewYield>;
277
+ /** Type brand for discrimination */
278
+ readonly [abortableSymbol]: true;
279
+ }
280
+ /**
281
+ * Error thrown when abortable is aborted.
282
+ */
283
+ export declare class AbortableAbortedError extends Error {
284
+ readonly name = "AbortableAbortedError";
285
+ constructor(message?: string);
286
+ }
287
+ /**
288
+ * Create an abortable function with full lifecycle control.
289
+ *
290
+ * Features:
291
+ * - Pause/Resume execution
292
+ * - Abort with cleanup
293
+ * - External event injection (take/send)
294
+ * - Status tracking
295
+ * - Parent signal linkage (parent abort → this aborts, not vice versa)
296
+ *
297
+ * @example
298
+ * ```ts
299
+ * // Simple abortable
300
+ * const fetchUser = abortable(async ({ signal, safe }, id: string) => {
301
+ * const res = await fetch(`/api/users/${id}`, { signal });
302
+ * return res.json();
303
+ * });
304
+ *
305
+ * // With events
306
+ * const checkout = abortable<[Cart], Receipt, { confirm: boolean }>(
307
+ * async ({ signal, safe, take }, cart) => {
308
+ * const validated = await safe(validateCart, cart);
309
+ *
310
+ * const confirmed = await take("confirm");
311
+ * if (!confirmed) throw new Error("Cancelled");
312
+ *
313
+ * return await safe(processPayment, validated);
314
+ * }
315
+ * );
316
+ *
317
+ * // Usage
318
+ * const result = checkout(cart);
319
+ * result.send("confirm", true);
320
+ * const receipt = await result;
321
+ *
322
+ * // With pause/resume
323
+ * result.pause();
324
+ * result.resume();
325
+ *
326
+ * // With abort
327
+ * result.abort();
328
+ * ```
329
+ */
330
+ export declare function abortable<const TArgs extends any[], TResult, TYield extends void | object = void>(fn: AbortableFn<TArgs, TResult, TYield>): Abortable<TArgs, TResult, TYield>;
331
+ //# sourceMappingURL=abortable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abortable.d.ts","sourceRoot":"","sources":["../../src/async/abortable.ts"],"names":[],"mappings":"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"}