@warp-drive-mirror/ember 5.6.0-alpha.0 → 5.6.0-alpha.11

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.
@@ -1,502 +0,0 @@
1
- declare module '@warp-drive-mirror/ember/-private/request' {
2
- /**
3
- * @module @warp-drive-mirror/ember
4
- */
5
- import type Owner from '@ember/owner';
6
- import Component from '@glimmer/component';
7
- import type { Future, StructuredErrorDocument } from '@ember-data-mirror/request';
8
- import type { StoreRequestInput } from '@ember-data-mirror/store';
9
- import type Store from '@ember-data-mirror/store';
10
- import type { RequestLoadingState, RequestState } from '@ember-data-mirror/store/-private';
11
- type AutorefreshBehaviorType = 'online' | 'interval' | 'invalid';
12
- type AutorefreshBehaviorCombos = boolean | AutorefreshBehaviorType | `${AutorefreshBehaviorType},${AutorefreshBehaviorType}` | `${AutorefreshBehaviorType},${AutorefreshBehaviorType},${AutorefreshBehaviorType}`;
13
- type ContentFeatures<RT> = {
14
- isOnline: boolean;
15
- isHidden: boolean;
16
- isRefreshing: boolean;
17
- refresh: () => Promise<void>;
18
- reload: () => Promise<void>;
19
- abort?: () => void;
20
- latestRequest?: Future<RT>;
21
- };
22
- interface RequestSignature<T, RT, E> {
23
- Args: {
24
- /**
25
- * The request to monitor. This should be a `Future` instance returned
26
- * by either the `store.request` or `store.requestManager.request` methods.
27
- *
28
- * @typedoc
29
- */
30
- request?: Future<RT>;
31
- /**
32
- * A query to use for the request. This should be an object that can be
33
- * passed to `store.request`. Use this in place of `@request` if you would
34
- * like the component to also initiate the request.
35
- *
36
- * @typedoc
37
- */
38
- query?: StoreRequestInput<T, RT>;
39
- /**
40
- * The store instance to use for making requests. If contexts are available,
41
- * the component will default to using the `store` on the context.
42
- *
43
- * This is required if the store is not available via context or should be
44
- * different from the store provided via context.
45
- *
46
- * @typedoc
47
- */
48
- store?: Store;
49
- /**
50
- * The autorefresh behavior for the request. This can be a boolean, or any
51
- * combination of the following values: `'online'`, `'interval'`, `'invalid'`.
52
- *
53
- * - `'online'`: Refresh the request when the browser comes back online
54
- * - `'interval'`: Refresh the request at a specified interval
55
- * - `'invalid'`: Refresh the request when the store emits an invalidation
56
- *
57
- * If `true`, this is equivalent to `'online,invalid'`.
58
- *
59
- * Defaults to `false`.
60
- *
61
- * @typedoc
62
- */
63
- autorefresh?: AutorefreshBehaviorCombos;
64
- /**
65
- * The number of milliseconds to wait before refreshing the request when the
66
- * browser comes back online or the network becomes available.
67
- *
68
- * This also controls the interval at which the request will be refreshed if
69
- * the `interval` autorefresh type is enabled.
70
- *
71
- * Defaults to `30_000` (30 seconds).
72
- *
73
- * @typedoc
74
- */
75
- autorefreshThreshold?: number;
76
- /**
77
- * The behavior of the request initiated by autorefresh. This can be one of
78
- * the following values:
79
- *
80
- * - `'refresh'`: Refresh the request in the background
81
- * - `'reload'`: Force a reload of the request
82
- * - `'policy'` (**default**): Let the store's configured CachePolicy decide whether to
83
- * reload, refresh, or do nothing.
84
- *
85
- * Defaults to `'policy'`.
86
- *
87
- * @typedoc
88
- */
89
- autorefreshBehavior?: 'refresh' | 'reload' | 'policy';
90
- };
91
- Blocks: {
92
- /**
93
- * The block to render when the component is idle and waiting to be given a request.
94
- *
95
- * @typedoc
96
- */
97
- idle: [];
98
- /**
99
- * The block to render when the request is loading.
100
- *
101
- * @typedoc
102
- */
103
- loading: [state: RequestLoadingState];
104
- /**
105
- * The block to render when the request was cancelled.
106
- *
107
- * @typedoc
108
- */
109
- cancelled: [
110
- error: StructuredErrorDocument<E>,
111
- features: {
112
- isOnline: boolean;
113
- isHidden: boolean;
114
- retry: () => Promise<void>;
115
- }
116
- ];
117
- /**
118
- * The block to render when the request failed. If this block is not provided,
119
- * the error will be rethrown.
120
- *
121
- * Thus it is required to provide an error block and proper error handling if
122
- * you do not want the error to crash the application.
123
- *
124
- * @typedoc
125
- */
126
- error: [
127
- error: StructuredErrorDocument<E>,
128
- features: {
129
- isOnline: boolean;
130
- isHidden: boolean;
131
- retry: () => Promise<void>;
132
- }
133
- ];
134
- /**
135
- * The block to render when the request succeeded.
136
- *
137
- * @typedoc
138
- */
139
- content: [value: RT, features: ContentFeatures<RT>];
140
- always: [state: RequestState<T, RT, StructuredErrorDocument<E>>];
141
- };
142
- }
143
- /**
144
- * The `<Request />` component is a powerful tool for managing data fetching and
145
- * state in your Ember application. It provides a declarative approach to reactive
146
- * control-flow for managing requests and state in your application.
147
- *
148
- * The `<Request />` component is ideal for handling "boundaries", outside which some
149
- * state is still allowed to be unresolved and within which it MUST be resolved.
150
- *
151
- * ## Request States
152
- *
153
- * `<Request />` has five states, only one of which will be active and rendered at a time.
154
- *
155
- * - `idle`: The component is waiting to be given a request to monitor
156
- * - `loading`: The request is in progress
157
- * - `error`: The request failed
158
- * - `content`: The request succeeded
159
- * - `cancelled`: The request was cancelled
160
- *
161
- * Additionally, the `content` state has a `refresh` method that can be used to
162
- * refresh the request in the background, which is available as a sub-state of
163
- * the `content` state.
164
- *
165
- * As with the `<Await />` component, if no error block is provided and the request
166
- * rejects, the error will be thrown. Cancellation errors are swallowed instead of
167
- * rethrown if no error block or cancellation block is present.
168
- *
169
- * ```gts
170
- * import { Request } from '@warp-drive-mirror/ember';
171
- *
172
- * <template>
173
- * <Request @request={{@request}}>
174
- * <:loading as |state|>
175
- * <Spinner @percentDone={{state.completedRatio}} />
176
- * <button {{on "click" state.abort}}>Cancel</button>
177
- * </:loading>
178
- *
179
- * <:error as |error state|>
180
- * <ErrorForm @error={{error}} />
181
- * <button {{on "click" state.retry}}>Retry</button>
182
- * </:error>
183
- *
184
- * <:content as |data state|>
185
- * <h1>{{data.title}}</h1>
186
- * {{#if state.isBackgroundReloading}}
187
- * <SmallSpinner />
188
- * <button {{on "click" state.abort}}>Cancel</button>
189
- * {{else}}
190
- * <button {{on "click" state.refresh}}>Refresh</button>
191
- * {{/if}}
192
- * </:content>
193
- *
194
- * <:cancelled as |error state|>
195
- * <h2>The Request was cancelled</h2>
196
- * <button {{on "click" state.retry}}>Retry</button>
197
- * </:cancelled>
198
- *
199
- * <:idle>
200
- * <button {{on "click" @kickOffRequest}}>Load Preview?</button>
201
- * </:idle>
202
- *
203
- * </Request>
204
- * </template>
205
- * ```
206
- *
207
- * ## Streaming Data
208
- *
209
- * The loading state exposes the download `ReadableStream` instance for consumption
210
- *
211
- * ```gjs
212
- * import { Request } from '@warp-drive-mirror/ember';
213
- *
214
- * <template>
215
- * <Request @request={{@request}}>
216
- * <:loading as |state|>
217
- * <Video @stream={{state.stream}} />
218
- * </:loading>
219
- *
220
- * <:error as |error|>
221
- * <ErrorForm @error={{error}} />
222
- * </:error>
223
- * </Request>
224
- * </template>
225
- * ```
226
- *
227
- * ## Retry
228
- *
229
- * Cancelled and error'd requests may be retried by calling the `retry` method.
230
- *
231
- * Retry will restart the state progression, using the loading, error, cancelled,
232
- * and content blocks as appropriate.
233
- *
234
- * ## Reloading
235
- *
236
- * The `reload` method will force the request to be fully re-executed, bypassing
237
- * cache and restarting the state progression through the loading, error, and
238
- * content blocks as appropriate.
239
- *
240
- * Background reload (refresh) is a special substate of the content state that
241
- * allows you to refresh the request in the background. This is useful for when
242
- * you want to update the data in the background without blocking the UI.
243
- *
244
- * Reload and refresh are available as methods on the `content` state.
245
- *
246
- * ```gjs
247
- * import { Request } from '@warp-drive-mirror/ember';
248
- *
249
- * <template>
250
- * <Request @request={{@request}}>
251
- * <:content as |data state|>
252
- * <h1>{{data.title}}</h1>
253
- * {{#if state.isBackgroundReloading}}
254
- * <SmallSpinner />
255
- * <button {{on "click" state.abort}}>Cancel</button>
256
- * {{/if}}
257
- *
258
- * <button {{on "click" state.refresh}}>Refresh</button>
259
- * <button {{on "click" state.reload}}>Reload</button>
260
- * </:content>
261
- * </Request>
262
- * </template>
263
- * ```
264
- *
265
- * ## Advanced Reloading
266
- *
267
- * We can nest our usage of `<Request />` to handle more advanced
268
- * reloading scenarios.
269
- *
270
- * ```gjs
271
- * import { Request } from '@warp-drive-mirror/ember';
272
- *
273
- * <template>
274
- * <Request @request={{@request}}>
275
- * <:cancelled>
276
- * <h2>The Request Cancelled</h2>
277
- * </:cancelled>
278
- *
279
- * <:error as |error|>
280
- * <ErrorForm @error={{error}} />
281
- * </:error>
282
- *
283
- * <:content as |result state|>
284
- * <Request @request={{state.latestRequest}}>
285
- * <!-- Handle Background Request -->
286
- * </Request>
287
- *
288
- * <h1>{{result.title}}</h1>
289
- *
290
- * <button {{on "click" state.refresh}}>Refresh</button>
291
- * </:content>
292
- * </Request>
293
- * </template>
294
- * ```
295
- *
296
- * ## Autorefresh
297
- *
298
- * `<Request />` supports automatic refresh and reload under certain conditions.
299
- *
300
- * - `online`: This occurs when a browser window or tab comes back to the foreground
301
- * after being backgrounded or when the network reports as being online after
302
- * having been offline.
303
- * - `interval`: This occurs when a specified amount of time has passed.
304
- * - `invalid`: This occurs when the store emits a notification that the request
305
- * has become invalid.
306
- *
307
- * You can specify when autorefresh should occur by setting the `autorefresh` arg
308
- * to `true` or a comma-separated list of the above values.
309
- *
310
- * A value of `true` is equivalent to `'online,invalid'`.
311
- *
312
- * By default, an autorefresh will only occur if the browser was backgrounded or
313
- * offline for more than 30s before coming back available. This amount of time can
314
- * be tweaked by setting the number of milliseconds via `@autorefreshThreshold`.
315
- *
316
- * This arg also controls the interval at which the request will be refreshed
317
- * if the `interval` autorefresh type is enabled.
318
- *
319
- * Finally, the behavior of the request initiated by autorefresh can be adjusted
320
- * by setting the `autorefreshBehavior` arg to `'refresh'`, `'reload'`, or `'policy'`.
321
- *
322
- * - `'refresh'`: Refresh the request in the background
323
- * - `'reload'`: Force a reload of the request
324
- * - `'policy'` (**default**): Let the store's configured CachePolicy decide whether to
325
- * reload, refresh, or do nothing.
326
- *
327
- * More advanced refresh and reload behaviors can be created by passing the reload and
328
- * refresh actions into another component. For instance, refresh could be set up on a
329
- * timer or on a websocket subscription.
330
- *
331
- *
332
- * ```gjs
333
- * import { Request } from '@warp-drive-mirror/ember';
334
- *
335
- * <template>
336
- * <Request @request={{@request}}>
337
- * <:content as |result state|>
338
- * <h1>{{result.title}}</h1>
339
- *
340
- * <Interval @period={{30_000}} @fn={{state.refresh}} />
341
- * <Subscribe @channel={{@someValue}} @fn={{state.refresh}} />
342
- * </:content>
343
- * </Request>
344
- * </template>
345
- * ```
346
- *
347
- * If a matching request is refreshed or reloaded by any other component,
348
- * the `Request` component will react accordingly.
349
- *
350
- * ## Deduping
351
- *
352
- * The store dedupes requests by identity. If a request is made for the same identity
353
- * from multiple `<Request />` components, even if the request is not referentially the
354
- * same, only one actual request will be made.
355
- *
356
- *
357
- * @class <Request />
358
- * @public
359
- */
360
- export class Request<T, RT, E> extends Component<RequestSignature<T, RT, E>> {
361
- /**
362
- * The store instance to use for making requests. If contexts are available, this
363
- * will be the `store` on the context, else it will be the store service.
364
- *
365
- * @internal
366
- */
367
- _store: Store;
368
- /**
369
- * Whether the browser reports that the network is online.
370
- *
371
- * @internal
372
- */
373
- isOnline: boolean;
374
- /**
375
- * Whether the browser reports that the tab is hidden.
376
- *
377
- * @internal
378
- */
379
- isHidden: boolean;
380
- /**
381
- * Whether the component is currently refreshing the request.
382
- *
383
- * @internal
384
- */
385
- isRefreshing: boolean;
386
- /**
387
- * The most recent blocking request that was made, typically
388
- * the result of a reload.
389
- *
390
- * This will never be the original request passed as an arg to
391
- * the component.
392
- *
393
- * @internal
394
- */
395
- _localRequest: Future<RT> | undefined;
396
- /**
397
- * The most recent request that was made, typically due to either a
398
- * reload or a refresh.
399
- *
400
- * This will never be the original request passed as an arg to
401
- * the component.
402
- *
403
- * @internal
404
- */
405
- _latestRequest: Future<RT> | undefined;
406
- /**
407
- * The time at which the network was reported as offline.
408
- *
409
- * @internal
410
- */
411
- unavailableStart: number | null;
412
- intervalStart: number | null;
413
- nextInterval: number | null;
414
- invalidated: boolean;
415
- isUpdating: boolean;
416
- /**
417
- * The event listener for network status changes,
418
- * cached to use the reference for removal.
419
- *
420
- * @internal
421
- */
422
- onlineChanged: (event: Event) => void;
423
- /**
424
- * The event listener for visibility status changes,
425
- * cached to use the reference for removal.
426
- *
427
- * @internal
428
- */
429
- backgroundChanged: (event: Event) => void;
430
- /**
431
- * The last request passed as an arg to the component,
432
- * cached for comparison.
433
- *
434
- * @internal
435
- */
436
- _originalRequest: Future<RT> | undefined;
437
- /**
438
- * The last query passed as an arg to the component,
439
- * cached for comparison.
440
- *
441
- * @internal
442
- */
443
- _originalQuery: StoreRequestInput<T, RT> | undefined;
444
- _subscription: object | null;
445
- _subscribedTo: object | null;
446
- constructor(owner: Owner, args: RequestSignature<T, RT, E>['Args']);
447
- beginPolling(): Promise<void>;
448
- get isIdle(): boolean;
449
- get autorefreshTypes(): Set<AutorefreshBehaviorType>;
450
- scheduleInterval(): Promise<void>;
451
- clearInterval(): void;
452
- updateSubscriptions(): void;
453
- removeSubscriptions(): void;
454
- /**
455
- * Install the event listeners for network and visibility changes.
456
- * This is only done in browser environments with a global `window`.
457
- *
458
- * @internal
459
- */
460
- installListeners(): void;
461
- /**
462
- * If the network is online and the tab is visible, either reload or refresh the request
463
- * based on the component's configuration and the requested update mode.
464
- *
465
- * Valid modes are:
466
- *
467
- * - `'reload'`: Force a reload of the request.
468
- * - `'refresh'`: Refresh the request in the background.
469
- * - `'policy'`: Make the request, letting the store's configured CachePolicy decide whether to reload, refresh, or do nothing.
470
- * - `undefined`: Make the request using the component's autorefreshBehavior setting if the autorefreshThreshold has passed.
471
- *
472
- * @internal
473
- */
474
- maybeUpdate(mode?: 'reload' | 'refresh' | 'policy' | 'invalidated', silent?: boolean): void;
475
- /**
476
- * Retry the request, reloading it from the server.
477
- *
478
- * @internal
479
- */
480
- retry: () => Promise<void>;
481
- /**
482
- * Refresh the request, updating it in the background.
483
- *
484
- * @internal
485
- */
486
- refresh: () => Promise<void>;
487
- get errorFeatures(): {
488
- isHidden: boolean;
489
- isOnline: boolean;
490
- retry: () => Promise<void>;
491
- };
492
- get contentFeatures(): ContentFeatures<RT>;
493
- willDestroy(): void;
494
- get _request(): Future<RT>;
495
- get request(): Future<RT>;
496
- get store(): Store;
497
- get reqState(): Readonly<RequestState<T, RT, StructuredErrorDocument<E>>>;
498
- get result(): RT;
499
- }
500
- export {};
501
- }
502
- //# sourceMappingURL=request.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/-private/request.ts"],"names":[],"mappings":"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"}