@warp-drive-mirror/ember 5.6.0-alpha.5 → 5.6.0-beta.1

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