rexfect 0.0.7 → 0.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 (51) hide show
  1. package/dist/async/abortable.d.ts +44 -0
  2. package/dist/async/abortable.d.ts.map +1 -1
  3. package/dist/async/abortable.js +44 -7
  4. package/dist/async/abortable.js.map +1 -1
  5. package/dist/async/index.d.ts +1 -1
  6. package/dist/async/index.d.ts.map +1 -1
  7. package/dist/async/index.js +1 -1
  8. package/dist/async/index.js.map +1 -1
  9. package/dist/async/wrappers.d.ts +311 -0
  10. package/dist/async/wrappers.d.ts.map +1 -0
  11. package/dist/async/wrappers.js +542 -0
  12. package/dist/async/wrappers.js.map +1 -0
  13. package/dist/async/wrappers.test.d.ts +2 -0
  14. package/dist/async/wrappers.test.d.ts.map +1 -0
  15. package/dist/async/wrappers.test.js +649 -0
  16. package/dist/async/wrappers.test.js.map +1 -0
  17. package/dist/atom.d.ts +5 -0
  18. package/dist/atom.d.ts.map +1 -1
  19. package/dist/atom.js +11 -3
  20. package/dist/atom.js.map +1 -1
  21. package/dist/batch.js +1 -1
  22. package/dist/batch.js.map +1 -1
  23. package/dist/effect.d.ts.map +1 -1
  24. package/dist/effect.js +3 -2
  25. package/dist/effect.js.map +1 -1
  26. package/dist/emitter.d.ts +2 -2
  27. package/dist/emitter.d.ts.map +1 -1
  28. package/dist/emitter.js +20 -23
  29. package/dist/emitter.js.map +1 -1
  30. package/dist/emitter.test.js +11 -11
  31. package/dist/emitter.test.js.map +1 -1
  32. package/dist/pick.js +3 -2
  33. package/dist/pick.js.map +1 -1
  34. package/dist/react/useRx.d.ts.map +1 -1
  35. package/dist/react/useRx.js +75 -43
  36. package/dist/react/useRx.js.map +1 -1
  37. package/dist/types.d.ts +1 -1
  38. package/dist/types.d.ts.map +1 -1
  39. package/package.json +1 -1
  40. package/dist/event.d.ts +0 -18
  41. package/dist/event.d.ts.map +0 -1
  42. package/dist/event.js +0 -166
  43. package/dist/event.js.map +0 -1
  44. package/dist/event.test.d.ts +0 -2
  45. package/dist/event.test.d.ts.map +0 -1
  46. package/dist/event.test.js +0 -167
  47. package/dist/event.test.js.map +0 -1
  48. package/dist/utils.d.ts +0 -7
  49. package/dist/utils.d.ts.map +0 -1
  50. package/dist/utils.js +0 -7
  51. package/dist/utils.js.map +0 -1
@@ -0,0 +1,542 @@
1
+ /**
2
+ * Built-in wrapper utilities for abortable functions.
3
+ *
4
+ * Use with the `.use()` method to compose behavior:
5
+ *
6
+ * ```ts
7
+ * import { retry, catchError, timeout, logging } from "storion/async";
8
+ *
9
+ * const getUser = userService.getUser
10
+ * .use(retry(3))
11
+ * .use(catchError(console.error))
12
+ * .use(timeout(5000))
13
+ * .use(logging("getUser"));
14
+ * ```
15
+ */
16
+ // =============================================================================
17
+ // Types
18
+ // =============================================================================
19
+ /**
20
+ * Built-in retry delay strategies.
21
+ */
22
+ export const retryStrategy = {
23
+ /** Exponential backoff: 1s, 2s, 4s, 8s... (max 30s) */
24
+ backoff: (attempt) => Math.min(1000 * 2 ** attempt, 30000),
25
+ /** Linear: 1s, 2s, 3s, 4s... (max 30s) */
26
+ linear: (attempt) => Math.min(1000 * (attempt + 1), 30000),
27
+ /** Fixed 1 second delay */
28
+ fixed: () => 1000,
29
+ /** Fibonacci: 1s, 1s, 2s, 3s, 5s, 8s... (max 30s) */
30
+ fibonacci: (attempt) => {
31
+ const fib = [1, 1, 2, 3, 5, 8, 13, 21, 30];
32
+ return Math.min(fib[attempt] ?? 30, 30) * 1000;
33
+ },
34
+ /** Immediate retry (no delay) */
35
+ immediate: () => 0,
36
+ /** Add jitter (±30%) to any strategy */
37
+ withJitter: (strategy) => (attempt) => {
38
+ const base = strategy(attempt);
39
+ const jitter = base * 0.3 * (Math.random() * 2 - 1); // ±30%
40
+ return Math.max(0, Math.round(base + jitter));
41
+ },
42
+ };
43
+ export function retry(retriesOrStrategyOrOptions) {
44
+ const options = typeof retriesOrStrategyOrOptions === "number"
45
+ ? { retries: retriesOrStrategyOrOptions }
46
+ : typeof retriesOrStrategyOrOptions === "string"
47
+ ? { delay: retriesOrStrategyOrOptions }
48
+ : retriesOrStrategyOrOptions ?? {};
49
+ const retries = options.retries ?? 3;
50
+ const delayOption = options.delay ?? "backoff";
51
+ // Get delay function
52
+ const getDelay = typeof delayOption === "function"
53
+ ? delayOption
54
+ : typeof delayOption === "number"
55
+ ? () => delayOption
56
+ : retryStrategy[delayOption];
57
+ return (next) => async (ctx, ...args) => {
58
+ let lastError;
59
+ for (let attempt = 0; attempt < retries; attempt++) {
60
+ try {
61
+ return await next(ctx, ...args);
62
+ }
63
+ catch (error) {
64
+ lastError = error;
65
+ // Don't retry if cancelled
66
+ if (ctx.signal.aborted) {
67
+ throw error;
68
+ }
69
+ // Don't delay on last attempt
70
+ if (attempt < retries - 1) {
71
+ const delayResult = getDelay(attempt, lastError);
72
+ if (typeof delayResult === "number") {
73
+ // Abort-aware delay
74
+ await new Promise((resolve, reject) => {
75
+ const timer = setTimeout(resolve, delayResult);
76
+ const onAbort = () => {
77
+ clearTimeout(timer);
78
+ reject(ctx.signal.reason ?? new Error("Aborted"));
79
+ };
80
+ if (ctx.signal.aborted) {
81
+ onAbort();
82
+ }
83
+ else {
84
+ ctx.signal.addEventListener("abort", onAbort, { once: true });
85
+ }
86
+ });
87
+ }
88
+ else {
89
+ // Promise<void> - wait for it (e.g., wait for network)
90
+ await delayResult;
91
+ }
92
+ }
93
+ }
94
+ }
95
+ throw lastError;
96
+ };
97
+ }
98
+ /**
99
+ * Catch and handle errors with a callback (without swallowing them).
100
+ *
101
+ * @example
102
+ * ```ts
103
+ * fn.use(catchError((error) => {
104
+ * console.error("Failed:", error.message);
105
+ * analytics.track("error", { message: error.message });
106
+ * }))
107
+ * ```
108
+ */
109
+ export function catchError(callback) {
110
+ return (next) => async (ctx, ...args) => {
111
+ try {
112
+ return await next(ctx, ...args);
113
+ }
114
+ catch (error) {
115
+ callback(error, ctx, ...args);
116
+ throw error;
117
+ }
118
+ };
119
+ }
120
+ /**
121
+ * Add timeout to abort after specified milliseconds.
122
+ *
123
+ * @example
124
+ * ```ts
125
+ * // Abort after 5 seconds
126
+ * fn.use(timeout(5000))
127
+ *
128
+ * // With custom error message
129
+ * fn.use(timeout(5000, "Request timed out"))
130
+ * ```
131
+ */
132
+ export function timeout(ms, message = "Operation timed out") {
133
+ return (next) => async (ctx, ...args) => {
134
+ // Create timeout promise
135
+ const timeoutPromise = new Promise((_, reject) => {
136
+ const timer = setTimeout(() => {
137
+ reject(new Error(message));
138
+ }, ms);
139
+ // Clear timeout if signal is aborted
140
+ ctx.signal.addEventListener("abort", () => clearTimeout(timer));
141
+ });
142
+ // Race between operation and timeout (cancellation-aware)
143
+ return ctx.safe.race([next(ctx, ...args), timeoutPromise]);
144
+ };
145
+ }
146
+ /**
147
+ * Debounce calls - only execute after delay with no new calls.
148
+ *
149
+ * Note: This creates a shared timer, so multiple calls to the same
150
+ * debounced function will share the debounce state.
151
+ *
152
+ * @example
153
+ * ```ts
154
+ * // Debounce search - only execute 300ms after last keystroke
155
+ * const debouncedSearch = search.use(debounce(300));
156
+ * ```
157
+ */
158
+ export function debounce(ms) {
159
+ let timeoutId;
160
+ return (next) => async (ctx, ...args) => {
161
+ // Clear previous timeout
162
+ if (timeoutId) {
163
+ clearTimeout(timeoutId);
164
+ }
165
+ // Return a promise that will be resolved when the debounce completes
166
+ return new Promise((resolve, reject) => {
167
+ timeoutId = setTimeout(async () => {
168
+ try {
169
+ const result = await next(ctx, ...args);
170
+ resolve(result);
171
+ }
172
+ catch (error) {
173
+ reject(error);
174
+ }
175
+ }, ms);
176
+ // Cancel on abort
177
+ ctx.signal.addEventListener("abort", () => {
178
+ if (timeoutId) {
179
+ clearTimeout(timeoutId);
180
+ reject(new Error("Debounced operation cancelled"));
181
+ }
182
+ });
183
+ });
184
+ };
185
+ }
186
+ /**
187
+ * Throttle calls - only execute once per time window.
188
+ *
189
+ * @example
190
+ * ```ts
191
+ * // Throttle to max once per second
192
+ * const throttledSave = save.use(throttle(1000));
193
+ * ```
194
+ */
195
+ export function throttle(ms) {
196
+ let lastCall = 0;
197
+ let lastResult;
198
+ let pending;
199
+ return (next) => async (ctx, ...args) => {
200
+ const now = Date.now();
201
+ // If within throttle window, return last result or wait for pending
202
+ if (now - lastCall < ms) {
203
+ if (pending) {
204
+ return pending;
205
+ }
206
+ if (lastResult !== undefined) {
207
+ return lastResult;
208
+ }
209
+ }
210
+ lastCall = now;
211
+ pending = next(ctx, ...args);
212
+ try {
213
+ lastResult = await pending;
214
+ return lastResult;
215
+ }
216
+ finally {
217
+ pending = undefined;
218
+ }
219
+ };
220
+ }
221
+ /**
222
+ * Return a fallback value on error instead of throwing.
223
+ *
224
+ * @example
225
+ * ```ts
226
+ * // Return null on error
227
+ * fn.use(fallback(null))
228
+ *
229
+ * // Return empty array on error
230
+ * fn.use(fallback([]))
231
+ *
232
+ * // Dynamic fallback based on error
233
+ * fn.use(fallback((error) => ({ error: error.message })))
234
+ * ```
235
+ */
236
+ export function fallback(value) {
237
+ return (next) => async (ctx, ...args) => {
238
+ try {
239
+ return await next(ctx, ...args);
240
+ }
241
+ catch (error) {
242
+ // Don't fallback on abort - propagate cancellation
243
+ if (ctx.signal.aborted) {
244
+ throw error;
245
+ }
246
+ return typeof value === "function"
247
+ ? value(error, ctx, ...args)
248
+ : value;
249
+ }
250
+ };
251
+ }
252
+ /**
253
+ * Cache results with TTL. Results are cached by serialized arguments.
254
+ *
255
+ * Note: This creates a shared cache, so all calls to the same
256
+ * cached function share the cache.
257
+ *
258
+ * @example
259
+ * ```ts
260
+ * // Cache for 5 minutes
261
+ * fn.use(cache(5 * 60 * 1000))
262
+ *
263
+ * // Cache with custom key function
264
+ * fn.use(cache({ ttl: 60000, key: (id) => `user:${id}` }))
265
+ * ```
266
+ */
267
+ export function cache(ttlOrOptions) {
268
+ const options = typeof ttlOrOptions === "number" ? { ttl: ttlOrOptions } : ttlOrOptions;
269
+ const { ttl, key: keyFn = (...args) => JSON.stringify(args) } = options;
270
+ const cacheMap = new Map();
271
+ return (next) => async (ctx, ...args) => {
272
+ const cacheKey = keyFn(...args);
273
+ const now = Date.now();
274
+ // Check cache
275
+ const cached = cacheMap.get(cacheKey);
276
+ if (cached && cached.expires > now) {
277
+ return cached.value;
278
+ }
279
+ // Execute and cache
280
+ const result = await next(ctx, ...args);
281
+ cacheMap.set(cacheKey, { value: result, expires: now + ttl });
282
+ return result;
283
+ };
284
+ }
285
+ /**
286
+ * Rate limit calls - queue excess calls beyond the limit.
287
+ *
288
+ * Note: This creates shared state, so all calls to the same
289
+ * rate-limited function share the rate limit.
290
+ *
291
+ * @example
292
+ * ```ts
293
+ * // Max 10 calls per second
294
+ * fn.use(rateLimit({ limit: 10, window: 1000 }))
295
+ *
296
+ * // Max 100 calls per minute
297
+ * fn.use(rateLimit({ limit: 100, window: 60000 }))
298
+ * ```
299
+ */
300
+ export function rateLimit(options) {
301
+ const { limit, window } = options;
302
+ const timestamps = [];
303
+ const queue = [];
304
+ let processing = false;
305
+ const processQueue = async () => {
306
+ if (processing || queue.length === 0)
307
+ return;
308
+ processing = true;
309
+ while (queue.length > 0) {
310
+ const now = Date.now();
311
+ // Remove expired timestamps
312
+ while (timestamps.length > 0 && timestamps[0] <= now - window) {
313
+ timestamps.shift();
314
+ }
315
+ // Check if we can process
316
+ if (timestamps.length < limit) {
317
+ const item = queue.shift();
318
+ // Skip if already aborted
319
+ if (item.ctx.signal.aborted) {
320
+ item.reject(item.ctx.signal.reason ?? new Error("Aborted"));
321
+ continue;
322
+ }
323
+ timestamps.push(now);
324
+ try {
325
+ const result = await item.next(item.ctx, ...item.args);
326
+ item.resolve(result);
327
+ }
328
+ catch (error) {
329
+ item.reject(error);
330
+ }
331
+ }
332
+ else {
333
+ // Wait until oldest timestamp expires
334
+ const waitTime = timestamps[0] + window - now;
335
+ await new Promise((r) => setTimeout(r, waitTime));
336
+ }
337
+ }
338
+ processing = false;
339
+ };
340
+ return (next) => async (ctx, ...args) => {
341
+ const now = Date.now();
342
+ // Remove expired timestamps
343
+ while (timestamps.length > 0 && timestamps[0] <= now - window) {
344
+ timestamps.shift();
345
+ }
346
+ // If under limit, execute immediately
347
+ if (timestamps.length < limit) {
348
+ timestamps.push(now);
349
+ return next(ctx, ...args);
350
+ }
351
+ // Queue the request
352
+ return new Promise((resolve, reject) => {
353
+ queue.push({ resolve, reject, ctx, args, next });
354
+ // Handle abort
355
+ ctx.signal.addEventListener("abort", () => {
356
+ const index = queue.findIndex((item) => item.ctx === ctx);
357
+ if (index !== -1) {
358
+ queue.splice(index, 1);
359
+ reject(ctx.signal.reason ?? new Error("Aborted"));
360
+ }
361
+ }, { once: true });
362
+ processQueue();
363
+ });
364
+ };
365
+ }
366
+ /**
367
+ * Circuit breaker - fail fast after repeated errors.
368
+ *
369
+ * States:
370
+ * - closed: Normal operation, requests pass through
371
+ * - open: Circuit tripped, requests fail immediately
372
+ * - half-open: Testing if service recovered (allows one request)
373
+ *
374
+ * @example
375
+ * ```ts
376
+ * // Open after 5 failures, try again after 30s
377
+ * fn.use(circuitBreaker())
378
+ *
379
+ * // Custom threshold and reset timeout
380
+ * fn.use(circuitBreaker({ threshold: 3, resetTimeout: 10000 }))
381
+ * ```
382
+ */
383
+ export function circuitBreaker(options = {}) {
384
+ const { threshold = 5, resetTimeout = 30000 } = options;
385
+ let state = "closed";
386
+ let failures = 0;
387
+ let lastFailure = 0;
388
+ return (next) => async (ctx, ...args) => {
389
+ const now = Date.now();
390
+ // Check if we should transition from open to half-open
391
+ if (state === "open" && now - lastFailure >= resetTimeout) {
392
+ state = "half-open";
393
+ }
394
+ // Fail fast if circuit is open
395
+ if (state === "open") {
396
+ throw new Error(`Circuit breaker is open. Retry after ${Math.ceil((lastFailure + resetTimeout - now) / 1000)}s`);
397
+ }
398
+ try {
399
+ const result = await next(ctx, ...args);
400
+ // Success - reset on half-open or decrement failures
401
+ if (state === "half-open") {
402
+ state = "closed";
403
+ failures = 0;
404
+ }
405
+ else if (failures > 0) {
406
+ failures--;
407
+ }
408
+ return result;
409
+ }
410
+ catch (error) {
411
+ // Don't count aborts as failures
412
+ if (ctx.signal.aborted) {
413
+ throw error;
414
+ }
415
+ failures++;
416
+ lastFailure = now;
417
+ // Trip the circuit if threshold reached
418
+ if (failures >= threshold) {
419
+ state = "open";
420
+ }
421
+ throw error;
422
+ }
423
+ };
424
+ }
425
+ /**
426
+ * Create a simplified wrapper for argument/result transformations.
427
+ *
428
+ * Unlike regular wrappers, `map()` hides the `ctx` parameter, providing
429
+ * a simple `next(...args)` function. Use this for transformations that
430
+ * don't need access to the abort signal.
431
+ *
432
+ * @example
433
+ * ```ts
434
+ * // Transform return type: User → string
435
+ * const getUserName = getUser.use(
436
+ * map(async (next, id: string) => {
437
+ * const user = await next(id);
438
+ * return user.name;
439
+ * })
440
+ * );
441
+ *
442
+ * // Change argument signature: email → id lookup
443
+ * const getUserByEmail = getUser.use(
444
+ * map(async (next, email: string) => {
445
+ * const id = await lookupUserId(email);
446
+ * return next(id);
447
+ * })
448
+ * );
449
+ *
450
+ * // Combine multiple calls
451
+ * const getUserWithPosts = getUser.use(
452
+ * map(async (next, id: string) => {
453
+ * const [user, posts] = await Promise.all([
454
+ * next(id),
455
+ * fetchPosts(id),
456
+ * ]);
457
+ * return { ...user, posts };
458
+ * })
459
+ * );
460
+ * ```
461
+ */
462
+ export function map(mapper) {
463
+ return (next) => async (ctx, ...newArgs) => {
464
+ return mapper((...args) => next(ctx, ...args), ...newArgs);
465
+ };
466
+ }
467
+ /**
468
+ * Observe lifecycle events of an abortable function.
469
+ * Useful for logging, analytics, loading indicators, or cleanup on abort.
470
+ *
471
+ * The `onStart` callback is invoked when the function starts. It can optionally
472
+ * return an object with lifecycle callbacks:
473
+ * - `onAbort` - Called when the function is aborted
474
+ * - `onSuccess` - Called when the function completes successfully (receives result)
475
+ * - `onError` - Called when the function throws (error is re-thrown after)
476
+ * - `onDone` - Called after completion, regardless of outcome (like finally)
477
+ *
478
+ * @param onStart - Called when the function starts. Can return lifecycle callbacks.
479
+ *
480
+ * @example Simple logging (no callbacks returned)
481
+ * ```ts
482
+ * const fetchUser = abortable(async (ctx, id: string) => { ... })
483
+ * .use(observe((ctx, id) => {
484
+ * console.log(`Fetching user ${id}`);
485
+ * }));
486
+ * ```
487
+ *
488
+ * @example Abort handling
489
+ * ```ts
490
+ * const fetchUser = abortable(async (ctx, id: string) => { ... })
491
+ * .use(observe((ctx, id) => ({
492
+ * onAbort: () => console.log(`Fetch ${id} aborted`),
493
+ * })));
494
+ * ```
495
+ *
496
+ * @example Loading indicator with cleanup
497
+ * ```ts
498
+ * const fetchData = abortable(async () => { ... })
499
+ * .use(observe(() => {
500
+ * showLoading();
501
+ * return { onDone: hideLoading };
502
+ * }));
503
+ * ```
504
+ *
505
+ * @example Full lifecycle
506
+ * ```ts
507
+ * const fetchUser = abortable(async (ctx, id: string) => { ... })
508
+ * .use(observe((ctx, id) => ({
509
+ * onAbort: () => console.log(`Aborted: ${id}`),
510
+ * onSuccess: (user) => console.log(`Fetched: ${user.name}`),
511
+ * onError: (err) => console.error(`Failed: ${err}`),
512
+ * onDone: () => console.log('Completed'),
513
+ * })));
514
+ * ```
515
+ */
516
+ export function observe(onStart) {
517
+ return (next) => async (ctx, ...args) => {
518
+ // Call onStart and capture returned cleanup
519
+ const onStartResult = onStart(ctx, ...args);
520
+ if (!onStartResult) {
521
+ return next(ctx, ...args);
522
+ }
523
+ const { onAbort, onSuccess, onError, onDone } = onStartResult ?? {};
524
+ // Register abort handlers if any cleanup is needed
525
+ if (onAbort) {
526
+ ctx.signal.addEventListener("abort", onAbort, { once: true });
527
+ }
528
+ try {
529
+ const result = await next(ctx, ...args);
530
+ onSuccess?.(result);
531
+ return result;
532
+ }
533
+ catch (error) {
534
+ onError?.(error);
535
+ throw error;
536
+ }
537
+ finally {
538
+ onDone?.();
539
+ }
540
+ };
541
+ }
542
+ //# sourceMappingURL=wrappers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappers.js","sourceRoot":"","sources":["../../src/async/wrappers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wrappers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrappers.test.d.ts","sourceRoot":"","sources":["../../src/async/wrappers.test.ts"],"names":[],"mappings":""}