storion 0.9.0 → 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 +62 -4
- 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 +11 -9
- package/dist/persist/persist.d.ts +14 -14
- 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,295 @@
|
|
|
1
|
+
import { SafeFnWithUtils } from './safe';
|
|
2
|
+
|
|
3
|
+
declare const abortableSymbol: unique symbol;
|
|
4
|
+
export type AbortableStatus = "running" | "success" | "error" | "paused" | "waiting" | "aborted";
|
|
5
|
+
/**
|
|
6
|
+
* Send function type.
|
|
7
|
+
* - When TYield is void: `() => void` (checkpoint/nudge pattern)
|
|
8
|
+
* - When TYield is object: `<K>(key: K, value: TYield[K]) => void`
|
|
9
|
+
*/
|
|
10
|
+
export type AbortableSend<TYield extends void | object = void> = void extends TYield ? () => void : <TKey extends keyof TYield>(key: TKey, value: TYield[TKey]) => void;
|
|
11
|
+
/**
|
|
12
|
+
* Take function type.
|
|
13
|
+
* Returns a Promise that resolves when the event arrives.
|
|
14
|
+
* - When TYield is void: `() => Promise<void>` (checkpoint pattern)
|
|
15
|
+
* - When TYield is object: `<K>(key: K) => Promise<TYield[K]>`
|
|
16
|
+
*/
|
|
17
|
+
export type AbortableTake<TYield extends void | object = void> = void extends TYield ? () => Promise<void> : <TKey extends keyof TYield>(key: TKey) => Promise<TYield[TKey]>;
|
|
18
|
+
/**
|
|
19
|
+
* Join function type for coordinating multiple abortable results.
|
|
20
|
+
* When the parent abortable is aborted, all joined results are also aborted.
|
|
21
|
+
*/
|
|
22
|
+
export type AbortableJoin = {
|
|
23
|
+
/** Join a single abortable result */
|
|
24
|
+
<TResult>(result: AbortableResult<TResult, any>): Promise<TResult>;
|
|
25
|
+
/** Join multiple abortable results (like Promise.all with abort propagation) */
|
|
26
|
+
<const T extends readonly AbortableResult<any, any>[]>(results: T): Promise<{
|
|
27
|
+
-readonly [K in keyof T]: Awaited<T[K]>;
|
|
28
|
+
}>;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Result returned when invoking an abortable function.
|
|
32
|
+
* Extends Promise for async consumption while providing control methods.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* const result = myAbortable(args);
|
|
37
|
+
*
|
|
38
|
+
* // Promise-like usage
|
|
39
|
+
* const value = await result;
|
|
40
|
+
*
|
|
41
|
+
* // Control methods
|
|
42
|
+
* result.pause();
|
|
43
|
+
* result.resume();
|
|
44
|
+
* result.abort();
|
|
45
|
+
*
|
|
46
|
+
* // Status checks
|
|
47
|
+
* result.running(); // boolean
|
|
48
|
+
* result.status(); // "running" | "success" | ...
|
|
49
|
+
*
|
|
50
|
+
* // Event sending
|
|
51
|
+
* result.send("eventKey", eventValue);
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export type AbortableResult<TResult, TYield extends void | object = void> = Promise<TResult> & {
|
|
55
|
+
/** Send an event to the abortable */
|
|
56
|
+
send: AbortableSend<TYield>;
|
|
57
|
+
/** Check if abortable has failed */
|
|
58
|
+
failed(): boolean;
|
|
59
|
+
/** Check if abortable has completed (success, error, or aborted) */
|
|
60
|
+
completed(): boolean;
|
|
61
|
+
/** Check if abortable is currently running */
|
|
62
|
+
running(): boolean;
|
|
63
|
+
/** Check if abortable succeeded */
|
|
64
|
+
succeeded(): boolean;
|
|
65
|
+
/** Check if abortable is paused */
|
|
66
|
+
paused(): boolean;
|
|
67
|
+
/** Check if abortable is waiting for async operation or event */
|
|
68
|
+
waiting(): boolean;
|
|
69
|
+
/** Check if abortable was aborted */
|
|
70
|
+
aborted(): boolean;
|
|
71
|
+
/** Get current status */
|
|
72
|
+
status(): AbortableStatus;
|
|
73
|
+
/** Get result if succeeded, undefined otherwise */
|
|
74
|
+
result(): Awaited<TResult> | undefined;
|
|
75
|
+
/** Get error if failed, undefined otherwise */
|
|
76
|
+
error(): Error | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* Pause execution at current await point.
|
|
79
|
+
* @returns false if already paused or completed
|
|
80
|
+
*/
|
|
81
|
+
pause(): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Resume execution from paused state.
|
|
84
|
+
* @returns false if not paused
|
|
85
|
+
*/
|
|
86
|
+
resume(): boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Abort execution.
|
|
89
|
+
* Does NOT affect parent signal - only this abortable's internal signal.
|
|
90
|
+
* @returns false if already aborted or completed
|
|
91
|
+
*/
|
|
92
|
+
abort(): boolean;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Context passed to abortable function handlers.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```ts
|
|
99
|
+
* const myFn = abortable<[string], Result, { confirm: boolean }>(
|
|
100
|
+
* async ({ signal, safe, take, aborted, abort }, id) => {
|
|
101
|
+
* const data = await safe(fetchData, id);
|
|
102
|
+
*
|
|
103
|
+
* if (aborted()) return null;
|
|
104
|
+
*
|
|
105
|
+
* const confirmed = await take("confirm");
|
|
106
|
+
* if (!confirmed) {
|
|
107
|
+
* abort();
|
|
108
|
+
* return null;
|
|
109
|
+
* }
|
|
110
|
+
*
|
|
111
|
+
* return processData(data);
|
|
112
|
+
* }
|
|
113
|
+
* );
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export interface AbortableContext<TYield extends void | object = void> {
|
|
117
|
+
/**
|
|
118
|
+
* AbortSignal for this abortable instance.
|
|
119
|
+
* This is the abortable's OWN signal, not the parent's.
|
|
120
|
+
* Use this for fetch, timers, etc.
|
|
121
|
+
*/
|
|
122
|
+
signal: AbortSignal;
|
|
123
|
+
/**
|
|
124
|
+
* Safe execution utility.
|
|
125
|
+
* Wraps async operations to handle abort gracefully.
|
|
126
|
+
*
|
|
127
|
+
* Includes utilities: `.all()`, `.race()`, `.any()`, `.settled()`, `.callback()`
|
|
128
|
+
*/
|
|
129
|
+
safe: SafeFnWithUtils;
|
|
130
|
+
/**
|
|
131
|
+
* Wait for an external event.
|
|
132
|
+
* Returns a Promise that resolves when `send(key, value)` is called.
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```ts
|
|
136
|
+
* // With typed events
|
|
137
|
+
* const confirmed = await take("confirm");
|
|
138
|
+
*
|
|
139
|
+
* // Checkpoint pattern (TYield = void)
|
|
140
|
+
* await take(); // Waits for send()
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
take: AbortableTake<TYield>;
|
|
144
|
+
/**
|
|
145
|
+
* Check if this abortable has been aborted.
|
|
146
|
+
*/
|
|
147
|
+
aborted(): boolean;
|
|
148
|
+
/**
|
|
149
|
+
* Abort this abortable from inside.
|
|
150
|
+
* Does NOT affect parent signal.
|
|
151
|
+
* @returns false if already aborted
|
|
152
|
+
*/
|
|
153
|
+
abort(): boolean;
|
|
154
|
+
/**
|
|
155
|
+
* Check for pause point.
|
|
156
|
+
* Call this between async operations to allow pause/resume.
|
|
157
|
+
* Throws AbortableAbortedError if aborted.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```ts
|
|
161
|
+
* const myFn = abortable(async (ctx) => {
|
|
162
|
+
* const data = await fetchData();
|
|
163
|
+
* await ctx.checkpoint(); // Allow pause here
|
|
164
|
+
* const processed = await process(data);
|
|
165
|
+
* await ctx.checkpoint(); // Allow pause here
|
|
166
|
+
* return processed;
|
|
167
|
+
* });
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
checkpoint(): Promise<void>;
|
|
171
|
+
/**
|
|
172
|
+
* Join one or more abortable results.
|
|
173
|
+
* When this abortable is aborted, all joined results are also aborted.
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```ts
|
|
177
|
+
* // Single result
|
|
178
|
+
* const user = await ctx.join(fetchUser(id));
|
|
179
|
+
*
|
|
180
|
+
* // Multiple results (like Promise.all)
|
|
181
|
+
* const [user, posts, comments] = await ctx.join([
|
|
182
|
+
* fetchUser(id),
|
|
183
|
+
* fetchPosts(id),
|
|
184
|
+
* fetchComments(id),
|
|
185
|
+
* ]);
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
188
|
+
join: AbortableJoin;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Handler function signature for abortable.
|
|
192
|
+
*/
|
|
193
|
+
export type AbortableFn<TArgs extends any[], TResult, TYield extends void | object = void> = (ctx: AbortableContext<TYield>, ...args: TArgs) => Promise<TResult>;
|
|
194
|
+
/**
|
|
195
|
+
* Wrapper type for use() method.
|
|
196
|
+
*/
|
|
197
|
+
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>;
|
|
198
|
+
/**
|
|
199
|
+
* Identity wrapper that preserves all input types including TYield.
|
|
200
|
+
*/
|
|
201
|
+
export type IdentityWrapper = <TArgs extends any[], TResult, TYield extends void | object = void>(next: AbortableFn<TArgs, TResult, TYield>) => AbortableFn<TArgs, TResult, TYield>;
|
|
202
|
+
/**
|
|
203
|
+
* An abortable function with full lifecycle control.
|
|
204
|
+
*
|
|
205
|
+
* - Direct call: `fn(...args)` - creates new AbortController
|
|
206
|
+
* - With signal: `fn.withSignal(signal, ...args)` - links to parent signal
|
|
207
|
+
* - Chainable: `fn.use(wrapper)` - returns new Abortable with wrapper applied
|
|
208
|
+
*
|
|
209
|
+
* Signal relationship:
|
|
210
|
+
* - Abortable creates its own internal AbortController
|
|
211
|
+
* - When `withSignal(parentSignal)` is called:
|
|
212
|
+
* - If parent aborts → this abortable aborts
|
|
213
|
+
* - If this abortable aborts → parent NOT affected
|
|
214
|
+
*/
|
|
215
|
+
export interface Abortable<TArgs extends any[], TResult, TYield extends void | object = void> {
|
|
216
|
+
/** Call without signal (creates new AbortController) */
|
|
217
|
+
(...args: TArgs): AbortableResult<TResult, TYield>;
|
|
218
|
+
/**
|
|
219
|
+
* Call with parent signal.
|
|
220
|
+
* Parent abort → this aborts. This abort → parent unaffected.
|
|
221
|
+
*/
|
|
222
|
+
withSignal(signal: AbortSignal | undefined, ...args: TArgs): AbortableResult<TResult, TYield>;
|
|
223
|
+
/**
|
|
224
|
+
* Apply a wrapper and return a new Abortable.
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* ```ts
|
|
228
|
+
* const fetchUserWithRetry = fetchUser.use(withRetry(3));
|
|
229
|
+
* ```
|
|
230
|
+
*/
|
|
231
|
+
use<TNewArgs extends any[] = TArgs, TNewResult = TResult, TNewYield extends void | object = TYield>(wrapper: AbortableWrapper<TArgs, TResult, TYield, TNewArgs, TNewResult, TNewYield>): Abortable<TNewArgs, TNewResult, TNewYield>;
|
|
232
|
+
/**
|
|
233
|
+
* Type assertion for return type.
|
|
234
|
+
*/
|
|
235
|
+
as<TNewResult, TNewArgs extends any[] = TArgs, TNewYield extends void | object = TYield>(): Abortable<TNewArgs, TNewResult, TNewYield>;
|
|
236
|
+
/** Type brand for discrimination */
|
|
237
|
+
readonly [abortableSymbol]: true;
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Check if a value is an Abortable.
|
|
241
|
+
*/
|
|
242
|
+
export declare function isAbortable<TArgs extends any[], TResult, TYield extends void | object = void>(fn: unknown): fn is Abortable<TArgs, TResult, TYield>;
|
|
243
|
+
/**
|
|
244
|
+
* Error thrown when abortable is aborted.
|
|
245
|
+
*/
|
|
246
|
+
export declare class AbortableAbortedError extends Error {
|
|
247
|
+
readonly name = "AbortableAbortedError";
|
|
248
|
+
constructor(message?: string);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Create an abortable function with full lifecycle control.
|
|
252
|
+
*
|
|
253
|
+
* Features:
|
|
254
|
+
* - Pause/Resume execution
|
|
255
|
+
* - Abort with cleanup
|
|
256
|
+
* - External event injection (take/send)
|
|
257
|
+
* - Status tracking
|
|
258
|
+
* - Parent signal linkage (parent abort → this aborts, not vice versa)
|
|
259
|
+
*
|
|
260
|
+
* @example
|
|
261
|
+
* ```ts
|
|
262
|
+
* // Simple abortable
|
|
263
|
+
* const fetchUser = abortable(async ({ signal, safe }, id: string) => {
|
|
264
|
+
* const res = await fetch(`/api/users/${id}`, { signal });
|
|
265
|
+
* return res.json();
|
|
266
|
+
* });
|
|
267
|
+
*
|
|
268
|
+
* // With events
|
|
269
|
+
* const checkout = abortable<[Cart], Receipt, { confirm: boolean }>(
|
|
270
|
+
* async ({ signal, safe, take }, cart) => {
|
|
271
|
+
* const validated = await safe(validateCart, cart);
|
|
272
|
+
*
|
|
273
|
+
* const confirmed = await take("confirm");
|
|
274
|
+
* if (!confirmed) throw new Error("Cancelled");
|
|
275
|
+
*
|
|
276
|
+
* return await safe(processPayment, validated);
|
|
277
|
+
* }
|
|
278
|
+
* );
|
|
279
|
+
*
|
|
280
|
+
* // Usage
|
|
281
|
+
* const result = checkout(cart);
|
|
282
|
+
* result.send("confirm", true);
|
|
283
|
+
* const receipt = await result;
|
|
284
|
+
*
|
|
285
|
+
* // With pause/resume
|
|
286
|
+
* result.pause();
|
|
287
|
+
* result.resume();
|
|
288
|
+
*
|
|
289
|
+
* // With abort
|
|
290
|
+
* result.abort();
|
|
291
|
+
* ```
|
|
292
|
+
*/
|
|
293
|
+
export declare function abortable<const TArgs extends any[], TResult, TYield extends void | object = void>(fn: AbortableFn<TArgs, TResult, TYield>): Abortable<TArgs, TResult, TYield>;
|
|
294
|
+
export {};
|
|
295
|
+
//# 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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"}
|
package/dist/async/async.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { Focus } from '../types';
|
|
1
|
+
import { Focus, MetaEntry, SelectorMixin } from '../types';
|
|
2
2
|
import { AsyncState, AsyncMode, AsyncHandler, AsyncOptions, AsyncActions, CancellablePromise, InferAsyncData, MapAsyncData, MapSettledResult, RaceResult, AsyncKey, AsyncRequestId } from './types';
|
|
3
|
+
import { Abortable } from './abortable';
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Get the pending promise for an async state (for Suspense).
|
|
@@ -11,7 +12,30 @@ export declare function getPendingPromise<T>(state: AsyncState<T, any>): Promise
|
|
|
11
12
|
* Ensures async execution even for synchronous functions.
|
|
12
13
|
*/
|
|
13
14
|
declare function promiseTry<T>(fn: () => T | PromiseLike<T>): Promise<Awaited<T>>;
|
|
14
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Options for creating an async selector mixin.
|
|
17
|
+
*/
|
|
18
|
+
export interface AsyncMixinOptions<T, M extends AsyncMode = "fresh"> extends AsyncOptions {
|
|
19
|
+
/**
|
|
20
|
+
* Initial async state. Defaults to `async.fresh<T>()`.
|
|
21
|
+
*/
|
|
22
|
+
initial?: AsyncState<T, M>;
|
|
23
|
+
/**
|
|
24
|
+
* Name of store for the async state. Defaults to `async:${handler.name || "anonymous"}`.
|
|
25
|
+
*/
|
|
26
|
+
name?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Metadata for the async state. Defaults to empty array.
|
|
29
|
+
*/
|
|
30
|
+
meta?: MetaEntry<"result"> | MetaEntry<"result">[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Result tuple from async selector mixin: [state, actions]
|
|
34
|
+
*/
|
|
35
|
+
export type AsyncMixinResult<T, M extends AsyncMode, TArgs extends any[]> = [
|
|
36
|
+
AsyncState<T, M>,
|
|
37
|
+
AsyncActions<T, M, TArgs>
|
|
38
|
+
];
|
|
15
39
|
/**
|
|
16
40
|
* Extra properties that can be added to async state.
|
|
17
41
|
* @internal
|
|
@@ -66,15 +90,72 @@ export declare function asyncStateFrom<T, M extends AsyncMode>(prev: AsyncState<
|
|
|
66
90
|
export declare namespace async {
|
|
67
91
|
/**
|
|
68
92
|
* Create a fresh mode async state (data undefined during loading/error).
|
|
69
|
-
* @deprecated Use `asyncState("fresh", "idle")` for explicit state creation
|
|
70
93
|
*/
|
|
71
94
|
function fresh<T = unknown>(): AsyncState<T, "fresh">;
|
|
72
95
|
/**
|
|
73
96
|
* Create a stale mode async state with initial data.
|
|
74
97
|
* Data is preserved during loading and error states.
|
|
75
|
-
* @deprecated Use `asyncState("stale", "idle", initialData)` for explicit state creation
|
|
76
98
|
*/
|
|
77
|
-
function stale<T>(
|
|
99
|
+
function stale<T>(): AsyncState<T | undefined, "stale">;
|
|
100
|
+
function stale<T>(initialData: T | undefined | null): AsyncState<T, "stale">;
|
|
101
|
+
/**
|
|
102
|
+
* Create async actions bound to a focus (lens) for async state management.
|
|
103
|
+
* Use *Query naming for read operations, *Mutation for write operations.
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* const userStore = store({
|
|
107
|
+
* name: 'user',
|
|
108
|
+
* state: { user: async.fresh<User>() },
|
|
109
|
+
* setup({ focus }) {
|
|
110
|
+
* const userQuery = async.action(focus('user'), async (ctx, id: string) => {
|
|
111
|
+
* const res = await fetch(`/api/users/${id}`, { signal: ctx.signal });
|
|
112
|
+
* return res.json();
|
|
113
|
+
* });
|
|
114
|
+
* return { fetchUser: userQuery.dispatch };
|
|
115
|
+
* },
|
|
116
|
+
* });
|
|
117
|
+
*/
|
|
118
|
+
function action<T, M extends AsyncMode, TArgs extends any[]>(focus: Focus<AsyncState<T, M>>, handler: AsyncHandler<T, TArgs>, options?: AsyncOptions): AsyncActions<T, M, TArgs>;
|
|
119
|
+
/**
|
|
120
|
+
* Create async actions with an Abortable (signal auto-injected).
|
|
121
|
+
*/
|
|
122
|
+
function action<T, M extends AsyncMode, TArgs extends any[]>(focus: Focus<AsyncState<T, M>>, abortableFn: Abortable<TArgs, T>, options?: AsyncOptions): AsyncActions<T, M, TArgs>;
|
|
123
|
+
/**
|
|
124
|
+
* Create an async selector mixin for component-local async state.
|
|
125
|
+
* Uses `scoped()` internally, so state is isolated per component and auto-disposed.
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* const submitMutation = async.mixin(async (ctx, data: FormData) => {
|
|
129
|
+
* const res = await fetch('/api/submit', {
|
|
130
|
+
* method: 'POST',
|
|
131
|
+
* body: JSON.stringify(data),
|
|
132
|
+
* signal: ctx.signal,
|
|
133
|
+
* });
|
|
134
|
+
* return res.json();
|
|
135
|
+
* });
|
|
136
|
+
*
|
|
137
|
+
* function ContactForm() {
|
|
138
|
+
* const [state, { dispatch }] = useStore(({ mixin }) => mixin(submitMutation));
|
|
139
|
+
* return <button onClick={() => dispatch(formData)}>Submit</button>;
|
|
140
|
+
* }
|
|
141
|
+
*/
|
|
142
|
+
function mixin<T, TArgs extends any[]>(handler: AsyncHandler<T, TArgs>, options?: AsyncMixinOptions<T, "fresh">): SelectorMixin<AsyncMixinResult<T, "fresh", TArgs>>;
|
|
143
|
+
/**
|
|
144
|
+
* Create an async selector mixin with stale mode.
|
|
145
|
+
*/
|
|
146
|
+
function mixin<T, TArgs extends any[]>(handler: AsyncHandler<T, TArgs>, options: AsyncMixinOptions<T, "stale"> & {
|
|
147
|
+
initial: AsyncState<T, "stale">;
|
|
148
|
+
}): SelectorMixin<AsyncMixinResult<T, "stale", TArgs>>;
|
|
149
|
+
/**
|
|
150
|
+
* Create an async selector mixin with an Abortable (signal auto-injected).
|
|
151
|
+
*/
|
|
152
|
+
function mixin<T, TArgs extends any[]>(abortableFn: Abortable<TArgs, T>, options?: AsyncMixinOptions<T, "fresh">): SelectorMixin<AsyncMixinResult<T, "fresh", TArgs>>;
|
|
153
|
+
/**
|
|
154
|
+
* Create an async selector mixin with an Abortable and stale mode.
|
|
155
|
+
*/
|
|
156
|
+
function mixin<T, TArgs extends any[]>(abortableFn: Abortable<TArgs, T>, options: AsyncMixinOptions<T, "stale"> & {
|
|
157
|
+
initial: AsyncState<T, "stale">;
|
|
158
|
+
}): SelectorMixin<AsyncMixinResult<T, "stale", TArgs>>;
|
|
78
159
|
function delay<T = void>(ms: number, resolved?: T): CancellablePromise<T>;
|
|
79
160
|
/**
|
|
80
161
|
* Wraps a synchronous or async function to always return a Promise.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../src/async/async.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../../src/async/async.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { AsyncContext } from './types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Create an AsyncContext for use in async handlers.
|
|
5
|
+
*
|
|
6
|
+
* @param abortController - The AbortController for cancellation
|
|
7
|
+
* @param isCancelledOrAborted - Function to check if cancelled
|
|
8
|
+
* @param cancel - Function to cancel the operation
|
|
9
|
+
* @param resolver - Resolver for getting stores/services
|
|
10
|
+
* @returns AsyncContext
|
|
11
|
+
*/
|
|
12
|
+
export declare function createAsyncContext(abortController: AbortController, isCancelledOrAborted: () => boolean, cancel: () => void, resolver: {
|
|
13
|
+
get: (specOrFactory: any) => any;
|
|
14
|
+
}): AsyncContext;
|
|
15
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/async/context.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAK5C;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,eAAe,EAChC,oBAAoB,EAAE,MAAM,OAAO,EACnC,MAAM,EAAE,MAAM,IAAI,EAClB,QAAQ,EAAE;IAAE,GAAG,EAAE,CAAC,aAAa,EAAE,GAAG,KAAK,GAAG,CAAA;CAAE,GAC7C,YAAY,CAuBd"}
|
package/dist/async/index.d.ts
CHANGED
|
@@ -2,12 +2,25 @@
|
|
|
2
2
|
* Async module for Storion
|
|
3
3
|
*
|
|
4
4
|
* Provides utilities for handling async operations (queries/mutations)
|
|
5
|
-
* with built-in cancellation
|
|
5
|
+
* with built-in cancellation and state management.
|
|
6
6
|
*
|
|
7
7
|
* Two modes:
|
|
8
8
|
* - fresh: data is undefined during loading/error (only show fresh data)
|
|
9
9
|
* - stale: data is preserved during loading/error (stale-while-revalidate)
|
|
10
|
+
*
|
|
11
|
+
* Use wrappers for cross-cutting concerns:
|
|
12
|
+
* ```ts
|
|
13
|
+
* import { retry, catchError, timeout } from "storion/async";
|
|
14
|
+
*
|
|
15
|
+
* const getUser = userService.getUser
|
|
16
|
+
* .use(retry(3))
|
|
17
|
+
* .use(catchError(console.error))
|
|
18
|
+
* .use(timeout(5000));
|
|
19
|
+
* ```
|
|
10
20
|
*/
|
|
11
|
-
export { async,
|
|
12
|
-
export {
|
|
21
|
+
export { async, type AsyncMixinOptions, type AsyncMixinResult } from './async';
|
|
22
|
+
export { abortable, isAbortable, type Abortable, type AbortableContext, type AbortableResult, type AbortableWrapper, type IdentityWrapper, } from './abortable';
|
|
23
|
+
export { createSafe, type SafeFn } from './safe';
|
|
24
|
+
export { retry, catchError, timeout, logging, debounce, throttle, fallback, cache, rateLimit, circuitBreaker, map, type RetryOptions, type CacheOptions, type RateLimitOptions, type CircuitBreakerOptions, } from './wrappers';
|
|
25
|
+
export { AsyncNotReadyError, AsyncAggregateError, retryStrategy, type RetryStrategyName, type AsyncMode, type AsyncState, type AsyncIdleState, type AsyncIdleStateFresh, type AsyncIdleStateStale, type AsyncPendingState, type AsyncPendingStateFresh, type AsyncPendingStateStale, type AsyncSuccessState, type AsyncErrorState, type AsyncErrorStateFresh, type AsyncErrorStateStale, type AsyncStatus, type AsyncContext, type AsyncHandler, type AsyncOptions, type AsyncActions, type AsyncLastInvocation, type CancellablePromise, type InferAsyncData, type InferAsyncMode, type SettledResult, type MapAsyncData, type MapSettledResult, type RaceResult, type AsyncKey, type SerializedAsyncState, } from './types';
|
|
13
26
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/async/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/async/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,iBAAiB,EAAE,KAAK,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC/E,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGjD,OAAO,EACL,KAAK,EACL,UAAU,EACV,OAAO,EACP,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,SAAS,EACT,cAAc,EACd,GAAG,EACH,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,oBAAoB,GAC1B,MAAM,SAAS,CAAC"}
|