@ethlete/query 2.1.1 → 2.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.
@@ -178,6 +178,9 @@ export interface Cancelled {
178
178
  export interface QueryStateMeta {
179
179
  id: number;
180
180
  triggeredVia: QueryTrigger;
181
+ isWaitingForRetry?: boolean;
182
+ retryNumber?: number;
183
+ retryDelay?: number;
181
184
  }
182
185
  export interface QueryStateSuccessMeta extends QueryStateMeta {
183
186
  expiresAt?: number;
@@ -1,7 +1,7 @@
1
1
  import { BehaviorSubject } from 'rxjs';
2
2
  import { Query } from '../query/query';
3
3
  import { BaseArguments, EmptyObject, RouteType, WithHeaders, WithUseResultIn } from '../query/query.types';
4
- import { CacheAdapterFn, Method as MethodType, RequestHeaders, RequestHeadersMethodMap } from '../request';
4
+ import { CacheAdapterFn, Method as MethodType, RequestHeaders, RequestHeadersMethodMap, RequestRetryFn } from '../request';
5
5
  import { QueryClient } from './query-client';
6
6
  export interface QueryClientConfig {
7
7
  /**
@@ -49,6 +49,11 @@ export interface QueryClientConfig {
49
49
  * @default true
50
50
  */
51
51
  enableSmartPolling?: boolean;
52
+ /**
53
+ * A retry function to be used for all queries.
54
+ * @default shouldRetryRequest()
55
+ */
56
+ retryFn?: RequestRetryFn;
52
57
  };
53
58
  /**
54
59
  * Parent query client.
@@ -24,6 +24,16 @@ export interface PartialXhrState {
24
24
  statusText: string;
25
25
  url: string;
26
26
  }
27
+ export interface RequestRetryFnConfig {
28
+ error: RequestError;
29
+ headers: RequestHeaders;
30
+ currentRetryCount: number;
31
+ }
32
+ export interface RequestRetryFnResult {
33
+ retry: boolean;
34
+ delay?: number;
35
+ }
36
+ export type RequestRetryFn = (config: RequestRetryFnConfig) => RequestRetryFnResult;
27
37
  export interface RequestConfig {
28
38
  method: Method;
29
39
  urlWithParams: string;
@@ -33,6 +43,7 @@ export interface RequestConfig {
33
43
  responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
34
44
  headers?: RequestHeaders;
35
45
  cacheAdapter?: CacheAdapterFn;
46
+ retryFn?: RequestRetryFn;
36
47
  }
37
48
  export type RequestProgress = {
38
49
  current: number;
@@ -42,6 +53,14 @@ export type RequestProgress = {
42
53
  export type RequestEvent<Response = unknown> = {
43
54
  type: 'start';
44
55
  headers: RequestHeaders;
56
+ isRetry?: boolean;
57
+ retryNumber?: number;
58
+ retryDelay?: number;
59
+ } | {
60
+ type: 'delay-retry';
61
+ headers: RequestHeaders;
62
+ retryNumber: number;
63
+ retryDelay: number;
45
64
  } | {
46
65
  type: 'download-progress';
47
66
  headers: RequestHeaders;
@@ -1,4 +1,4 @@
1
- import { Method, ParamArray, Params, QueryParams, RequestError, RequestHeaders, UnfilteredParamPrimitive } from './request.types';
1
+ import { Method, ParamArray, Params, QueryParams, RequestError, RequestHeaders, RequestRetryFn, UnfilteredParamPrimitive } from './request.types';
2
2
  export declare const isRequestError: <T = unknown>(error: unknown) => error is RequestError<T>;
3
3
  export declare const buildRoute: (options: {
4
4
  base: string;
@@ -20,7 +20,9 @@ export declare const hasHeader: (headers: RequestHeaders, header: string) => boo
20
20
  export declare const forEachHeader: (headers: RequestHeaders, callback: (value: string, key: string) => void) => void;
21
21
  export declare const parseAllXhrResponseHeaders: (xhr: XMLHttpRequest) => RequestHeaders;
22
22
  export declare const getResponseUrl: (xhr: XMLHttpRequest) => string | null;
23
+ export declare const shouldRetryRequest: RequestRetryFn;
23
24
  export declare const enum HttpStatusCode {
25
+ Unknown = 0,
24
26
  Continue = 100,
25
27
  SwitchingProtocols = 101,
26
28
  Processing = 102,
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@ethlete/query",
3
- "version": "2.1.1",
3
+ "version": "2.2.0",
4
4
  "dependencies": {
5
5
  "tslib": "^2.3.0"
6
6
  },
7
7
  "peerDependencies": {
8
8
  "@angular/common": "^14.2.0 || ^15.0.0",
9
9
  "@angular/core": "^14.2.0 || ^15.0.0",
10
- "@ethlete/core": "1.4.2"
10
+ "@ethlete/core": "1.4.3"
11
11
  },
12
12
  "module": "fesm2015/ethlete-query.mjs",
13
13
  "es2020": "fesm2020/ethlete-query.mjs",