storion 0.8.3 → 0.10.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.
- package/CHANGELOG.md +127 -21
- package/README.md +42 -2021
- package/dist/async/abortable.d.ts +295 -0
- package/dist/async/abortable.d.ts.map +1 -0
- package/dist/async/async.d.ts +86 -5
- package/dist/async/async.d.ts.map +1 -1
- package/dist/async/context.d.ts +15 -0
- package/dist/async/context.d.ts.map +1 -0
- package/dist/async/index.d.ts +16 -3
- package/dist/async/index.d.ts.map +1 -1
- package/dist/async/index.js +407 -137
- package/dist/async/safe.d.ts +221 -0
- package/dist/async/safe.d.ts.map +1 -0
- package/dist/async/types.d.ts +77 -29
- package/dist/async/types.d.ts.map +1 -1
- package/dist/async/wrappers.d.ts +217 -0
- package/dist/async/wrappers.d.ts.map +1 -0
- package/dist/core/effect.d.ts +34 -26
- package/dist/core/effect.d.ts.map +1 -1
- package/dist/core/equality.d.ts +25 -0
- package/dist/core/equality.d.ts.map +1 -1
- package/dist/core/focus.d.ts +20 -0
- package/dist/core/focus.d.ts.map +1 -0
- package/dist/core/focusHelpers.d.ts +258 -0
- package/dist/core/focusHelpers.d.ts.map +1 -0
- package/dist/core/middleware.d.ts +4 -4
- package/dist/core/store.d.ts.map +1 -1
- package/dist/core/storeContext.d.ts +2 -9
- package/dist/core/storeContext.d.ts.map +1 -1
- package/dist/dev.d.ts +0 -10
- package/dist/dev.d.ts.map +1 -1
- package/dist/{index-C8B6Mo8r.js → effect-BDQU8Voz.js} +1241 -583
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/network/index.d.ts +69 -0
- package/dist/network/index.d.ts.map +1 -0
- package/dist/network/retry.d.ts +53 -0
- package/dist/network/retry.d.ts.map +1 -0
- package/dist/network/services.d.ts +58 -0
- package/dist/network/services.d.ts.map +1 -0
- package/dist/network/store.d.ts +36 -0
- package/dist/network/store.d.ts.map +1 -0
- package/dist/network/utils.d.ts +9 -0
- package/dist/network/utils.d.ts.map +1 -0
- package/dist/persist/index.d.ts +1 -1
- package/dist/persist/index.d.ts.map +1 -1
- package/dist/persist/index.js +55 -31
- package/dist/persist/persist.d.ts +119 -62
- package/dist/persist/persist.d.ts.map +1 -1
- package/dist/pool.d.ts +77 -0
- package/dist/pool.d.ts.map +1 -0
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +245 -244
- package/dist/react/stable.d.ts +27 -0
- package/dist/react/stable.d.ts.map +1 -0
- package/dist/react/useStore.d.ts +38 -13
- package/dist/react/useStore.d.ts.map +1 -1
- package/dist/react/withStore.d.ts.map +1 -1
- package/dist/storion.js +911 -37
- package/dist/trigger.d.ts +12 -7
- package/dist/trigger.d.ts.map +1 -1
- package/dist/types.d.ts +133 -22
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/storeTuple.d.ts +7 -0
- package/dist/utils/storeTuple.d.ts.map +1 -0
- package/package.json +5 -1
- package/dist/collection.d.ts +0 -34
- package/dist/collection.d.ts.map +0 -1
- package/dist/core/proxy.d.ts +0 -47
- package/dist/core/proxy.d.ts.map +0 -1
- package/dist/effect-C6h0PDDI.js +0 -446
- package/dist/isPromiseLike-bFkfHAbm.js +0 -6
- package/dist/react/useLocalStore.d.ts +0 -48
- package/dist/react/useLocalStore.d.ts.map +0 -1
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import { Abortable } from './abortable';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Check if a value is a PromiseLike (has a .then method).
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* isPromiseLike(Promise.resolve(1)) // true
|
|
8
|
+
* isPromiseLike({ then: () => {} }) // true
|
|
9
|
+
* isPromiseLike(42) // false
|
|
10
|
+
*/
|
|
11
|
+
export declare function isPromiseLike(value: unknown): value is PromiseLike<unknown>;
|
|
12
|
+
/**
|
|
13
|
+
* Convert a value or parameterless function to a Promise.
|
|
14
|
+
* Handles: PromiseLike, sync values, functions returning either.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* toPromise(42) // Promise.resolve(42)
|
|
18
|
+
* toPromise(Promise.resolve(42)) // Promise.resolve(42)
|
|
19
|
+
* toPromise(() => 42) // Promise.resolve(42)
|
|
20
|
+
* toPromise(() => fetchData()) // fetchData() promise
|
|
21
|
+
* toPromise(thenable) // Promise wrapping thenable
|
|
22
|
+
*/
|
|
23
|
+
export declare function toPromise<T>(value: T | (() => T)): Promise<Awaited<T>>;
|
|
24
|
+
/**
|
|
25
|
+
* Safe input: any value or parameterless function.
|
|
26
|
+
* Functions are invoked and their return value is processed.
|
|
27
|
+
*/
|
|
28
|
+
export type SafeInput<T> = T | (() => T);
|
|
29
|
+
/**
|
|
30
|
+
* Extract the resolved type from a SafeInput.
|
|
31
|
+
*/
|
|
32
|
+
export type SafeInputResult<T> = T extends () => infer R ? Awaited<R> : Awaited<T>;
|
|
33
|
+
type SafeAllArrayResult<T extends readonly SafeInput<any>[]> = {
|
|
34
|
+
-readonly [K in keyof T]: SafeInputResult<T[K]>;
|
|
35
|
+
};
|
|
36
|
+
type SafeAllObjectResult<T extends Record<string, SafeInput<any>>> = {
|
|
37
|
+
[K in keyof T]: SafeInputResult<T[K]>;
|
|
38
|
+
};
|
|
39
|
+
export interface SafeAll {
|
|
40
|
+
/**
|
|
41
|
+
* Wait for all inputs to complete. Returns array preserving order and types.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* const [user, posts] = await safe.all([fetchUser(), () => fetchPosts()]);
|
|
45
|
+
*/
|
|
46
|
+
<T extends readonly SafeInput<any>[]>(inputs: [...T]): Promise<SafeAllArrayResult<T>>;
|
|
47
|
+
/**
|
|
48
|
+
* Wait for all inputs to complete. Returns object preserving keys.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* const { user, posts } = await safe.all({
|
|
52
|
+
* user: fetchUser(),
|
|
53
|
+
* posts: () => fetchPosts(),
|
|
54
|
+
* });
|
|
55
|
+
*/
|
|
56
|
+
<T extends Record<string, SafeInput<any>>>(inputs: T): Promise<SafeAllObjectResult<T>>;
|
|
57
|
+
}
|
|
58
|
+
type SafeRaceArrayResult<T extends readonly SafeInput<any>[]> = SafeInputResult<T[number]>;
|
|
59
|
+
type SafeRaceObjectResult<T extends Record<string, SafeInput<any>>> = {
|
|
60
|
+
[K in keyof T]: [K, SafeInputResult<T[K]>];
|
|
61
|
+
}[keyof T];
|
|
62
|
+
export interface SafeRace {
|
|
63
|
+
/**
|
|
64
|
+
* Race inputs. Returns the first value to resolve.
|
|
65
|
+
*
|
|
66
|
+
* @example
|
|
67
|
+
* const fastest = await safe.race([api1(), api2(), api3()]);
|
|
68
|
+
*/
|
|
69
|
+
<T extends readonly SafeInput<any>[]>(inputs: [...T]): Promise<SafeRaceArrayResult<T>>;
|
|
70
|
+
/**
|
|
71
|
+
* Race inputs. Returns [winnerKey, value] tuple.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* const [winner, value] = await safe.race({
|
|
75
|
+
* primary: primaryApi(),
|
|
76
|
+
* fallback: fallbackApi(),
|
|
77
|
+
* });
|
|
78
|
+
* // winner: "primary" | "fallback"
|
|
79
|
+
*/
|
|
80
|
+
<T extends Record<string, SafeInput<any>>>(inputs: T): Promise<SafeRaceObjectResult<T>>;
|
|
81
|
+
}
|
|
82
|
+
type SafeSettledArrayResult<T extends readonly SafeInput<any>[]> = {
|
|
83
|
+
-readonly [K in keyof T]: PromiseSettledResult<SafeInputResult<T[K]>>;
|
|
84
|
+
};
|
|
85
|
+
type SafeSettledObjectResult<T extends Record<string, SafeInput<any>>> = {
|
|
86
|
+
[K in keyof T]: PromiseSettledResult<SafeInputResult<T[K]>>;
|
|
87
|
+
};
|
|
88
|
+
export interface SafeSettled {
|
|
89
|
+
/**
|
|
90
|
+
* Wait for all inputs to settle (resolve or reject).
|
|
91
|
+
*
|
|
92
|
+
* @example
|
|
93
|
+
* const results = await safe.settled([api1(), api2()]);
|
|
94
|
+
* results.forEach(r => {
|
|
95
|
+
* if (r.status === "fulfilled") console.log(r.value);
|
|
96
|
+
* else console.error(r.reason);
|
|
97
|
+
* });
|
|
98
|
+
*/
|
|
99
|
+
<T extends readonly SafeInput<any>[]>(inputs: [...T]): Promise<SafeSettledArrayResult<T>>;
|
|
100
|
+
/**
|
|
101
|
+
* Wait for all inputs to settle. Returns object with PromiseSettledResult values.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* const { user, posts } = await safe.settled({
|
|
105
|
+
* user: fetchUser(),
|
|
106
|
+
* posts: fetchPosts(),
|
|
107
|
+
* });
|
|
108
|
+
* if (user.status === "fulfilled") console.log(user.value);
|
|
109
|
+
*/
|
|
110
|
+
<T extends Record<string, SafeInput<any>>>(inputs: T): Promise<SafeSettledObjectResult<T>>;
|
|
111
|
+
}
|
|
112
|
+
export interface SafeAny {
|
|
113
|
+
/**
|
|
114
|
+
* Returns the first successful result. Throws AggregateError if all fail.
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* const result = await safe.any([api1(), api2(), api3()]);
|
|
118
|
+
*/
|
|
119
|
+
<T extends readonly SafeInput<any>[]>(inputs: [...T]): Promise<SafeRaceArrayResult<T>>;
|
|
120
|
+
/**
|
|
121
|
+
* Returns [winnerKey, value] for first success. Throws AggregateError if all fail.
|
|
122
|
+
*
|
|
123
|
+
* @example
|
|
124
|
+
* const [winner, value] = await safe.any({
|
|
125
|
+
* primary: primaryApi(),
|
|
126
|
+
* fallback: fallbackApi(),
|
|
127
|
+
* });
|
|
128
|
+
*/
|
|
129
|
+
<T extends Record<string, SafeInput<any>>>(inputs: T): Promise<SafeRaceObjectResult<T>>;
|
|
130
|
+
}
|
|
131
|
+
export interface SafeCallback {
|
|
132
|
+
/**
|
|
133
|
+
* Wrap a callback to only execute if not cancelled.
|
|
134
|
+
* If cancelled, the callback is a no-op.
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* const handleClick = safe.callback((e: MouseEvent) => {
|
|
138
|
+
* state.clicked = true;
|
|
139
|
+
* });
|
|
140
|
+
* document.addEventListener('click', handleClick);
|
|
141
|
+
*/
|
|
142
|
+
<TArgs extends any[]>(callback: (...args: TArgs) => void): (...args: TArgs) => void;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Safe function type returned by createSafe.
|
|
146
|
+
*
|
|
147
|
+
* Overloads:
|
|
148
|
+
* 1. `safe(promise)` - Wrap promise, never resolve/reject if cancelled
|
|
149
|
+
* 2. `safe(normalFn, ...args)` - Call function, wrap result if promise
|
|
150
|
+
* 3. `safe(Abortable, ...args)` - Call with signal, wrap result if promise
|
|
151
|
+
*/
|
|
152
|
+
export interface SafeFn {
|
|
153
|
+
/**
|
|
154
|
+
* Wrap a promise to never resolve/reject if cancelled.
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ctx.safe(fetchData()).then(data => {
|
|
158
|
+
* // Only runs if not cancelled
|
|
159
|
+
* state.data = data;
|
|
160
|
+
* });
|
|
161
|
+
*/
|
|
162
|
+
<T>(promise: PromiseLike<T>): Promise<T>;
|
|
163
|
+
/**
|
|
164
|
+
* Call a normal function and wrap result if it's a promise.
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* const result = await ctx.safe(myAsyncFn, arg1, arg2);
|
|
168
|
+
*/
|
|
169
|
+
<TArgs extends any[], TResult>(fn: (...args: TArgs) => TResult, ...args: TArgs): TResult extends PromiseLike<infer U> ? Promise<U> : TResult;
|
|
170
|
+
/**
|
|
171
|
+
* Call an abortable function with the context's signal.
|
|
172
|
+
* Wraps result if it's a promise.
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* const user = await ctx.safe(getUser, userId);
|
|
176
|
+
*/
|
|
177
|
+
<TArgs extends any[], TResult>(fn: Abortable<TArgs, TResult>, ...args: TArgs): TResult extends PromiseLike<infer U> ? Promise<U> : TResult;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Safe function with utility methods for concurrent operations.
|
|
181
|
+
*/
|
|
182
|
+
export interface SafeFnWithUtils extends SafeFn {
|
|
183
|
+
/** Wait for all inputs to complete */
|
|
184
|
+
all: SafeAll;
|
|
185
|
+
/** Race inputs, return first to resolve */
|
|
186
|
+
race: SafeRace;
|
|
187
|
+
/** Wait for all inputs to settle (resolve or reject) */
|
|
188
|
+
settled: SafeSettled;
|
|
189
|
+
/** Return first successful result */
|
|
190
|
+
any: SafeAny;
|
|
191
|
+
/** Wrap callback to only execute if not cancelled */
|
|
192
|
+
callback: SafeCallback;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Create a safe function for a given context.
|
|
196
|
+
*
|
|
197
|
+
* @param getSignal - Function to get the current AbortSignal
|
|
198
|
+
* @param isCancelled - Function to check if the context is cancelled/stale
|
|
199
|
+
* @returns A safe function with utility methods
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```ts
|
|
203
|
+
* const safe = createSafe(
|
|
204
|
+
* () => abortController.signal,
|
|
205
|
+
* () => abortController.signal.aborted
|
|
206
|
+
* );
|
|
207
|
+
*
|
|
208
|
+
* // Wrap promise
|
|
209
|
+
* await safe(fetchData());
|
|
210
|
+
*
|
|
211
|
+
* // Call abortable function
|
|
212
|
+
* await safe(getUser, userId);
|
|
213
|
+
*
|
|
214
|
+
* // Concurrent operations
|
|
215
|
+
* const [a, b] = await safe.all([fetchA(), fetchB()]);
|
|
216
|
+
* const fastest = await safe.race([api1(), api2()]);
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
219
|
+
export declare function createSafe(getSignal: () => AbortSignal | undefined, isCancelled: () => boolean): SafeFnWithUtils;
|
|
220
|
+
export {};
|
|
221
|
+
//# sourceMappingURL=safe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../src/async/safe.ts"],"names":[],"mappings":"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"}
|
package/dist/async/types.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ActionsBase, StateBase, StoreSpec, StoreTuple } from '../types';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
* Async data mode:
|
|
3
5
|
* - "fresh": data is undefined during loading/error (only show fresh data)
|
|
@@ -116,36 +118,33 @@ export interface AsyncContext {
|
|
|
116
118
|
/** AbortSignal for cancellation */
|
|
117
119
|
signal: AbortSignal;
|
|
118
120
|
/**
|
|
119
|
-
*
|
|
120
|
-
* Useful for nested async operations that should be cancelled together.
|
|
121
|
+
* Safely execute operations that should be cancelled together.
|
|
121
122
|
*
|
|
122
|
-
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
125
|
-
*
|
|
126
|
-
* return { data1, data2 };
|
|
127
|
-
* });
|
|
128
|
-
*/
|
|
129
|
-
safe<T>(promise: Promise<T>): Promise<T>;
|
|
130
|
-
/**
|
|
131
|
-
* Wrap a callback to not run if the async operation is cancelled.
|
|
132
|
-
* Useful for event handlers and timeouts.
|
|
123
|
+
* Overloads:
|
|
124
|
+
* 1. `safe(promise)` - Wrap promise, never resolve/reject if cancelled
|
|
125
|
+
* 2. `safe(fn, ...args)` - Call function, wrap result if promise
|
|
126
|
+
* 3. `safe(Abortable, ...args)` - Call with signal, wrap result if promise
|
|
133
127
|
*
|
|
134
128
|
* @example
|
|
135
|
-
*
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
129
|
+
* ```ts
|
|
130
|
+
* // Wrap a promise
|
|
131
|
+
* const data = await ctx.safe(fetch('/api/data'));
|
|
132
|
+
*
|
|
133
|
+
* // Call a normal function
|
|
134
|
+
* const result = await ctx.safe(myAsyncFn, arg1, arg2);
|
|
135
|
+
*
|
|
136
|
+
* // Call an abortable function (auto-injects signal)
|
|
137
|
+
* const user = await ctx.safe(getUser, userId);
|
|
138
|
+
* ```
|
|
141
139
|
*/
|
|
142
|
-
safe<
|
|
140
|
+
safe<T>(promise: Promise<T>): Promise<T>;
|
|
141
|
+
safe<TArgs extends any[], TResult>(fn: (...args: TArgs) => TResult, ...args: TArgs): TResult extends Promise<infer U> ? Promise<U> : TResult;
|
|
143
142
|
/**
|
|
144
143
|
* Cancel the current async operation.
|
|
145
144
|
* Useful for implementing timeouts.
|
|
146
145
|
*
|
|
147
146
|
* @example
|
|
148
|
-
* async(focus, async (ctx) => {
|
|
147
|
+
* async.action(focus, async (ctx) => {
|
|
149
148
|
* // Timeout after 5 seconds
|
|
150
149
|
* setTimeout(ctx.cancel, 5000);
|
|
151
150
|
*
|
|
@@ -154,26 +153,75 @@ export interface AsyncContext {
|
|
|
154
153
|
* });
|
|
155
154
|
*/
|
|
156
155
|
cancel(): void;
|
|
156
|
+
/**
|
|
157
|
+
* Get another store's state and actions.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* // Array destructuring
|
|
161
|
+
* const [state, actions] = get(counterSpec);
|
|
162
|
+
*
|
|
163
|
+
* // Named properties
|
|
164
|
+
* const tuple = get(counterSpec);
|
|
165
|
+
* tuple.state.count;
|
|
166
|
+
*/
|
|
167
|
+
get<S extends StateBase, A extends ActionsBase>(spec: StoreSpec<S, A>): StoreTuple<S, A>;
|
|
168
|
+
/**
|
|
169
|
+
* Get a service or factory instance.
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* const db = get(() => new IndexedDBService());
|
|
173
|
+
* await db.users.getAll();
|
|
174
|
+
*/
|
|
175
|
+
get<T>(factory: (...args: any[]) => T): T;
|
|
157
176
|
}
|
|
158
177
|
/**
|
|
159
178
|
* Async handler function signature.
|
|
160
179
|
* Receives AsyncContext as first arg, then user-defined args.
|
|
161
180
|
*/
|
|
162
181
|
export type AsyncHandler<T, TArgs extends any[]> = (context: AsyncContext, ...args: TArgs) => T | PromiseLike<T>;
|
|
182
|
+
/**
|
|
183
|
+
* Built-in retry delay strategies.
|
|
184
|
+
*/
|
|
185
|
+
export declare const retryStrategy: {
|
|
186
|
+
/** Exponential backoff: 1s, 2s, 4s, 8s... (max 30s) */
|
|
187
|
+
readonly backoff: (attempt: number) => number;
|
|
188
|
+
/** Linear: 1s, 2s, 3s, 4s... (max 30s) */
|
|
189
|
+
readonly linear: (attempt: number) => number;
|
|
190
|
+
/** Fixed 1 second delay */
|
|
191
|
+
readonly fixed: () => number;
|
|
192
|
+
/** Fibonacci: 1s, 1s, 2s, 3s, 5s, 8s... (max 30s) */
|
|
193
|
+
readonly fibonacci: (attempt: number) => number;
|
|
194
|
+
/** Immediate retry (no delay) */
|
|
195
|
+
readonly immediate: () => number;
|
|
196
|
+
/** Add jitter (±30%) to any strategy */
|
|
197
|
+
readonly withJitter: (strategy: (n: number) => number) => (attempt: number) => number;
|
|
198
|
+
};
|
|
199
|
+
/** Built-in retry strategy names */
|
|
200
|
+
export type RetryStrategyName = Exclude<keyof typeof retryStrategy, "withJitter">;
|
|
201
|
+
export type AsyncRetryDelayFn = (attempt: number, error: Error) => number | Promise<void>;
|
|
202
|
+
export type AsyncRetryDelay = number | AsyncRetryDelayFn;
|
|
163
203
|
export interface AsyncRetryOptions {
|
|
164
204
|
/** Number of retry attempts */
|
|
165
205
|
count: number;
|
|
166
|
-
/** Delay between retries
|
|
167
|
-
delay?:
|
|
206
|
+
/** Delay between retries: ms, strategy name, or custom function */
|
|
207
|
+
delay?: AsyncRetryDelay | RetryStrategyName;
|
|
168
208
|
}
|
|
169
209
|
/**
|
|
170
|
-
* Options for async
|
|
210
|
+
* Options for async state management.
|
|
211
|
+
*
|
|
212
|
+
* For retry, error handling, and other cross-cutting concerns,
|
|
213
|
+
* use the `use()` pattern with wrapper utilities:
|
|
214
|
+
*
|
|
215
|
+
* ```ts
|
|
216
|
+
* import { retry, catchError } from "storion/async";
|
|
217
|
+
*
|
|
218
|
+
* const userQuery = async.action(
|
|
219
|
+
* focus("user"),
|
|
220
|
+
* userService.getUser.use(retry(3)).use(catchError(console.error))
|
|
221
|
+
* );
|
|
222
|
+
* ```
|
|
171
223
|
*/
|
|
172
224
|
export interface AsyncOptions {
|
|
173
|
-
/** Error callback */
|
|
174
|
-
onError?: (error: Error) => void;
|
|
175
|
-
/** Retry configuration */
|
|
176
|
-
retry?: number | AsyncRetryOptions;
|
|
177
225
|
/** Auto-cancel previous request on new dispatch (default: true) */
|
|
178
226
|
autoCancel?: boolean;
|
|
179
227
|
}
|
|
@@ -192,7 +240,7 @@ export interface AsyncLastInvocation<T, M extends AsyncMode, TArgs extends any[]
|
|
|
192
240
|
readonly state: AsyncState<T, M>;
|
|
193
241
|
}
|
|
194
242
|
/**
|
|
195
|
-
* API returned from async() mixin.
|
|
243
|
+
* API returned from async.action() or async.mixin().
|
|
196
244
|
*/
|
|
197
245
|
export interface AsyncActions<T, M extends AsyncMode, TArgs extends any[]> {
|
|
198
246
|
/** Dispatch the async operation */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/async/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/async/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { AbortableContext, AbortableWrapper, IdentityWrapper } from './abortable';
|
|
2
|
+
import { RetryStrategyName, AsyncRetryDelayFn } from './types';
|
|
3
|
+
|
|
4
|
+
/** Options for retry wrapper */
|
|
5
|
+
export interface RetryOptions {
|
|
6
|
+
/** Number of retry attempts (default: 3) */
|
|
7
|
+
retries?: number;
|
|
8
|
+
/** Delay between retries: ms, strategy name, or custom function */
|
|
9
|
+
delay?: number | RetryStrategyName | AsyncRetryDelayFn;
|
|
10
|
+
}
|
|
11
|
+
/** Options for cache wrapper */
|
|
12
|
+
export interface CacheOptions {
|
|
13
|
+
/** Time-to-live in milliseconds */
|
|
14
|
+
ttl: number;
|
|
15
|
+
/** Custom key function (default: JSON.stringify of args) */
|
|
16
|
+
key?: (...args: any[]) => string;
|
|
17
|
+
}
|
|
18
|
+
/** Options for rate limit wrapper */
|
|
19
|
+
export interface RateLimitOptions {
|
|
20
|
+
/** Maximum number of calls allowed in the window */
|
|
21
|
+
limit: number;
|
|
22
|
+
/** Time window in milliseconds */
|
|
23
|
+
window: number;
|
|
24
|
+
}
|
|
25
|
+
/** Options for circuit breaker wrapper */
|
|
26
|
+
export interface CircuitBreakerOptions {
|
|
27
|
+
/** Number of failures before opening circuit (default: 5) */
|
|
28
|
+
threshold?: number;
|
|
29
|
+
/** Time in ms before attempting to close circuit (default: 30000) */
|
|
30
|
+
resetTimeout?: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Retry on failure.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* // Retry 3 times with backoff delay
|
|
38
|
+
* fn.use(retry(3))
|
|
39
|
+
*
|
|
40
|
+
* // Retry 3 times with named strategy
|
|
41
|
+
* fn.use(retry("linear"))
|
|
42
|
+
*
|
|
43
|
+
* // Retry 5 times with linear delay
|
|
44
|
+
* fn.use(retry({ retries: 5, delay: "linear" }))
|
|
45
|
+
*
|
|
46
|
+
* // Custom delay function
|
|
47
|
+
* fn.use(retry({ retries: 3, delay: (attempt) => attempt * 1000 }))
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
export declare function retry(retries?: number): IdentityWrapper;
|
|
51
|
+
export declare function retry(strategy: RetryStrategyName): IdentityWrapper;
|
|
52
|
+
export declare function retry(options: RetryOptions): IdentityWrapper;
|
|
53
|
+
/**
|
|
54
|
+
* Catch and handle errors with a callback (without swallowing them).
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```ts
|
|
58
|
+
* fn.use(catchError((error) => {
|
|
59
|
+
* console.error("Failed:", error.message);
|
|
60
|
+
* analytics.track("error", { message: error.message });
|
|
61
|
+
* }))
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function catchError(callback: (error: Error, ctx: AbortableContext<any>, ...args: any[]) => void): IdentityWrapper;
|
|
65
|
+
/**
|
|
66
|
+
* Add timeout to abort after specified milliseconds.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* // Abort after 5 seconds
|
|
71
|
+
* fn.use(timeout(5000))
|
|
72
|
+
*
|
|
73
|
+
* // With custom error message
|
|
74
|
+
* fn.use(timeout(5000, "Request timed out"))
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function timeout(ms: number, message?: string): IdentityWrapper;
|
|
78
|
+
/**
|
|
79
|
+
* Log function calls for debugging.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```ts
|
|
83
|
+
* fn.use(logging("getUser"))
|
|
84
|
+
* // Logs: [getUser] calling with: ["123"]
|
|
85
|
+
* // Logs: [getUser] success: { id: "123", name: "John" }
|
|
86
|
+
* // Or: [getUser] error: Error: Not found
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export declare function logging(name: string, logger?: Pick<Console, "log" | "error">): IdentityWrapper;
|
|
90
|
+
/**
|
|
91
|
+
* Debounce calls - only execute after delay with no new calls.
|
|
92
|
+
*
|
|
93
|
+
* Note: This creates a shared timer, so multiple calls to the same
|
|
94
|
+
* debounced function will share the debounce state.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* // Debounce search - only execute 300ms after last keystroke
|
|
99
|
+
* const debouncedSearch = search.use(debounce(300));
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
export declare function debounce(ms: number): IdentityWrapper;
|
|
103
|
+
/**
|
|
104
|
+
* Throttle calls - only execute once per time window.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```ts
|
|
108
|
+
* // Throttle to max once per second
|
|
109
|
+
* const throttledSave = save.use(throttle(1000));
|
|
110
|
+
* ```
|
|
111
|
+
*/
|
|
112
|
+
export declare function throttle(ms: number): IdentityWrapper;
|
|
113
|
+
/**
|
|
114
|
+
* Return a fallback value on error instead of throwing.
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* // Return null on error
|
|
119
|
+
* fn.use(fallback(null))
|
|
120
|
+
*
|
|
121
|
+
* // Return empty array on error
|
|
122
|
+
* fn.use(fallback([]))
|
|
123
|
+
*
|
|
124
|
+
* // Dynamic fallback based on error
|
|
125
|
+
* fn.use(fallback((error) => ({ error: error.message })))
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export declare function fallback<T>(value: T | ((error: Error, ctx: AbortableContext, ...args: any[]) => T)): IdentityWrapper;
|
|
129
|
+
/**
|
|
130
|
+
* Cache results with TTL. Results are cached by serialized arguments.
|
|
131
|
+
*
|
|
132
|
+
* Note: This creates a shared cache, so all calls to the same
|
|
133
|
+
* cached function share the cache.
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```ts
|
|
137
|
+
* // Cache for 5 minutes
|
|
138
|
+
* fn.use(cache(5 * 60 * 1000))
|
|
139
|
+
*
|
|
140
|
+
* // Cache with custom key function
|
|
141
|
+
* fn.use(cache({ ttl: 60000, key: (id) => `user:${id}` }))
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
export declare function cache(ttlOrOptions: number | CacheOptions): IdentityWrapper;
|
|
145
|
+
/**
|
|
146
|
+
* Rate limit calls - queue excess calls beyond the limit.
|
|
147
|
+
*
|
|
148
|
+
* Note: This creates shared state, so all calls to the same
|
|
149
|
+
* rate-limited function share the rate limit.
|
|
150
|
+
*
|
|
151
|
+
* @example
|
|
152
|
+
* ```ts
|
|
153
|
+
* // Max 10 calls per second
|
|
154
|
+
* fn.use(rateLimit({ limit: 10, window: 1000 }))
|
|
155
|
+
*
|
|
156
|
+
* // Max 100 calls per minute
|
|
157
|
+
* fn.use(rateLimit({ limit: 100, window: 60000 }))
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
export declare function rateLimit(options: RateLimitOptions): IdentityWrapper;
|
|
161
|
+
/**
|
|
162
|
+
* Circuit breaker - fail fast after repeated errors.
|
|
163
|
+
*
|
|
164
|
+
* States:
|
|
165
|
+
* - closed: Normal operation, requests pass through
|
|
166
|
+
* - open: Circuit tripped, requests fail immediately
|
|
167
|
+
* - half-open: Testing if service recovered (allows one request)
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```ts
|
|
171
|
+
* // Open after 5 failures, try again after 30s
|
|
172
|
+
* fn.use(circuitBreaker())
|
|
173
|
+
*
|
|
174
|
+
* // Custom threshold and reset timeout
|
|
175
|
+
* fn.use(circuitBreaker({ threshold: 3, resetTimeout: 10000 }))
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
export declare function circuitBreaker(options?: CircuitBreakerOptions): IdentityWrapper;
|
|
179
|
+
/**
|
|
180
|
+
* Create a simplified wrapper for argument/result transformations.
|
|
181
|
+
*
|
|
182
|
+
* Unlike regular wrappers, `map()` hides the `ctx` parameter, providing
|
|
183
|
+
* a simple `next(...args)` function. Use this for transformations that
|
|
184
|
+
* don't need access to the abort signal.
|
|
185
|
+
*
|
|
186
|
+
* @example
|
|
187
|
+
* ```ts
|
|
188
|
+
* // Transform return type: User → string
|
|
189
|
+
* const getUserName = getUser.use(
|
|
190
|
+
* map(async (next, id: string) => {
|
|
191
|
+
* const user = await next(id);
|
|
192
|
+
* return user.name;
|
|
193
|
+
* })
|
|
194
|
+
* );
|
|
195
|
+
*
|
|
196
|
+
* // Change argument signature: email → id lookup
|
|
197
|
+
* const getUserByEmail = getUser.use(
|
|
198
|
+
* map(async (next, email: string) => {
|
|
199
|
+
* const id = await lookupUserId(email);
|
|
200
|
+
* return next(id);
|
|
201
|
+
* })
|
|
202
|
+
* );
|
|
203
|
+
*
|
|
204
|
+
* // Combine multiple calls
|
|
205
|
+
* const getUserWithPosts = getUser.use(
|
|
206
|
+
* map(async (next, id: string) => {
|
|
207
|
+
* const [user, posts] = await Promise.all([
|
|
208
|
+
* next(id),
|
|
209
|
+
* fetchPosts(id),
|
|
210
|
+
* ]);
|
|
211
|
+
* return { ...user, posts };
|
|
212
|
+
* })
|
|
213
|
+
* );
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
export declare function map<TArgs extends any[], TResult, TNewArgs extends any[], TNewResult>(mapper: (next: (...args: NoInfer<TArgs>) => Promise<NoInfer<TResult>>, ...newArgs: TNewArgs) => Promise<TNewResult>): AbortableWrapper<TArgs, TResult, any, TNewArgs, TNewResult, any>;
|
|
217
|
+
//# sourceMappingURL=wrappers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrappers.d.ts","sourceRoot":"","sources":["../../src/async/wrappers.ts"],"names":[],"mappings":"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"}
|