@ethlete/query 1.0.1 → 2.1.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/esm2020/lib/directives/infinity-query-trigger.directive.mjs +3 -3
- package/esm2020/lib/directives/infinity-query.directive.mjs +6 -6
- package/esm2020/lib/directives/query.directive.mjs +3 -3
- package/esm2020/lib/infinite-query/infinity-query.mjs +13 -4
- package/esm2020/lib/query/query.mjs +52 -7
- package/esm2020/lib/query/query.types.mjs +1 -1
- package/esm2020/lib/query-client/query-client.mjs +12 -4
- package/esm2020/lib/query-client/query-client.types.mjs +1 -1
- package/esm2020/lib/query-store/query-store.mjs +53 -2
- package/fesm2015/ethlete-query.mjs +151 -33
- package/fesm2015/ethlete-query.mjs.map +1 -1
- package/fesm2020/ethlete-query.mjs +136 -25
- package/fesm2020/ethlete-query.mjs.map +1 -1
- package/lib/auth/auth-provider.types.d.ts +0 -5
- package/lib/infinite-query/infinity-query.d.ts +1 -1
- package/lib/query/query.d.ts +7 -1
- package/lib/query/query.types.d.ts +48 -4
- package/lib/query-client/query-client.d.ts +4 -1
- package/lib/query-client/query-client.types.d.ts +11 -0
- package/lib/query-store/query-store.d.ts +8 -0
- package/package.json +2 -2
|
@@ -6,11 +6,6 @@ export interface AuthProvider {
|
|
|
6
6
|
* This will automatically get injected into every query that has the `secure` property set to `true`.
|
|
7
7
|
*/
|
|
8
8
|
header: Record<string, string>;
|
|
9
|
-
/**
|
|
10
|
-
* Cleanup function that gets called once the auth provider gets destroyed.
|
|
11
|
-
* @internal
|
|
12
|
-
*/
|
|
13
|
-
cleanUp(): void;
|
|
14
9
|
}
|
|
15
10
|
export interface AuthProviderBasicConfig {
|
|
16
11
|
/**
|
|
@@ -25,7 +25,7 @@ export declare class InfinityQuery<QueryCreator extends AnyQueryCreator, Query e
|
|
|
25
25
|
constructor(_config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>);
|
|
26
26
|
nextPage(): void;
|
|
27
27
|
reset(newConfig?: Omit<InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>, 'queryCreator' | 'response'>): void;
|
|
28
|
-
|
|
28
|
+
_clearSubscriptions(): void;
|
|
29
29
|
private _handleNewQuery;
|
|
30
30
|
private _prepareArgs;
|
|
31
31
|
private _getPageParamLocation;
|
package/lib/query/query.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DefaultResponseTransformer, QueryClient, ResponseTransformerType } from '../query-client';
|
|
2
2
|
import { Method as MethodType } from '../request';
|
|
3
|
-
import { BaseArguments, GqlQueryConfig, PollConfig, QueryState, RestQueryConfig, RouteType, RunQueryOptions, WithUseResultIn } from './query.types';
|
|
3
|
+
import { BaseArguments, GqlQueryConfig, PollConfig, QueryAutoRefreshConfig, QueryState, RestQueryConfig, RouteType, RunQueryOptions, WithUseResultIn } from './query.types';
|
|
4
4
|
export declare class Query<Response, Arguments extends (BaseArguments & WithUseResultIn<Response, ResponseTransformer>) | undefined, Route extends RouteType<Arguments>, Method extends MethodType, ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>> {
|
|
5
5
|
private _client;
|
|
6
6
|
private _queryConfig;
|
|
@@ -9,16 +9,22 @@ export declare class Query<Response, Arguments extends (BaseArguments & WithUseR
|
|
|
9
9
|
private _currentId;
|
|
10
10
|
private _pollingSubscription;
|
|
11
11
|
private _onAbort$;
|
|
12
|
+
private _currentPollConfig;
|
|
12
13
|
private readonly _state$;
|
|
13
14
|
private get _nextId();
|
|
14
15
|
get state$(): import("rxjs").Observable<QueryState<ReturnType<ResponseTransformer>, Response>>;
|
|
15
16
|
get state(): QueryState<ReturnType<ResponseTransformer>, Response>;
|
|
16
17
|
get isExpired(): boolean;
|
|
18
|
+
get isInUse(): boolean;
|
|
19
|
+
get isPolling(): boolean;
|
|
20
|
+
get autoRefreshOnConfig(): Readonly<QueryAutoRefreshConfig>;
|
|
17
21
|
constructor(_client: QueryClient, _queryConfig: RestQueryConfig<Route, Response, Arguments, ResponseTransformer> | GqlQueryConfig<Route, Response, Arguments, ResponseTransformer>, _routeWithParams: Route, _args: Arguments | undefined);
|
|
18
22
|
clone(): import("../query-client").QueryCreator<Arguments, Method, Response, Route, ResponseTransformer>;
|
|
19
23
|
execute<ComputedResponse extends ReturnType<ResponseTransformer>>(options?: RunQueryOptions): this;
|
|
20
24
|
abort(): this;
|
|
21
25
|
poll(config: PollConfig): this;
|
|
22
26
|
stopPolling(): this;
|
|
27
|
+
pausePolling(): this;
|
|
28
|
+
resumePolling(): this;
|
|
23
29
|
private _updateUseResultInDependencies;
|
|
24
30
|
}
|
|
@@ -2,7 +2,21 @@ import { Observable } from 'rxjs';
|
|
|
2
2
|
import { AnyQueryCreator, QueryCreatorReturnType, ResponseTransformerType } from '../query-client';
|
|
3
3
|
import { Method, PathParams, QueryParams, RequestError, RequestProgress } from '../request';
|
|
4
4
|
import { Query } from './query';
|
|
5
|
-
export interface
|
|
5
|
+
export interface QueryAutoRefreshConfig {
|
|
6
|
+
/**
|
|
7
|
+
* Refresh the query when the query client's headers change.
|
|
8
|
+
* @default true
|
|
9
|
+
*/
|
|
10
|
+
queryClientDefaultHeadersChange?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Refresh the query when the window regains focus.
|
|
13
|
+
*
|
|
14
|
+
* This can only be disabled if `autoRefreshQueriesOnWindowFocus` is enabled on the query client.
|
|
15
|
+
* @default true
|
|
16
|
+
*/
|
|
17
|
+
windowFocus?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export type QueryConfigBase<Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined> = {
|
|
6
20
|
/**
|
|
7
21
|
* The http method to use for the query.
|
|
8
22
|
*/
|
|
@@ -31,6 +45,20 @@ export interface QueryConfigBase<Response, Arguments extends BaseArguments | und
|
|
|
31
45
|
* @default false
|
|
32
46
|
*/
|
|
33
47
|
withCredentials?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Configuration for handling auto refresh triggers.
|
|
50
|
+
*
|
|
51
|
+
* **Note:** This is only available for queries that can be refreshed. (`GET`, `HEAD`, `OPTIONS`, `GQL_QUERY`)
|
|
52
|
+
*/
|
|
53
|
+
autoRefreshOn?: QueryAutoRefreshConfig;
|
|
54
|
+
/**
|
|
55
|
+
* Whether to automatically stop polling for this query when the window loses focus.
|
|
56
|
+
* Polling will resume when the window regains focus.
|
|
57
|
+
*
|
|
58
|
+
* This can only be disabled if `enableSmartPolling` is enabled on the query client.
|
|
59
|
+
* @default true
|
|
60
|
+
*/
|
|
61
|
+
enableSmartPolling?: boolean;
|
|
34
62
|
/**
|
|
35
63
|
* Object containing the query's type information.
|
|
36
64
|
*/
|
|
@@ -50,13 +78,13 @@ export interface QueryConfigBase<Response, Arguments extends BaseArguments | und
|
|
|
50
78
|
*/
|
|
51
79
|
args?: Arguments;
|
|
52
80
|
};
|
|
53
|
-
}
|
|
54
|
-
export
|
|
81
|
+
};
|
|
82
|
+
export type RestQueryConfig<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined> = QueryConfigBase<Response, Arguments, ResponseTransformer> & {
|
|
55
83
|
/**
|
|
56
84
|
* The api route to use for the query.
|
|
57
85
|
*/
|
|
58
86
|
route: Route;
|
|
59
|
-
}
|
|
87
|
+
};
|
|
60
88
|
export interface GqlQueryConfig<Route extends RouteType<Arguments> | undefined, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined> extends QueryConfigBase<Response, Arguments, ResponseTransformer> {
|
|
61
89
|
/**
|
|
62
90
|
* The graphql query to use for the query.
|
|
@@ -88,8 +116,13 @@ export interface WithPathParams {
|
|
|
88
116
|
export type WithUseResultIn<Response, ResponseTransformer extends ResponseTransformerType<Response>> = {
|
|
89
117
|
useResultIn?: Query<Response, any, any, any, ResponseTransformer>[];
|
|
90
118
|
};
|
|
119
|
+
export type QueryTrigger = 'program' | 'poll' | 'auto';
|
|
91
120
|
export type EmptyObject = {};
|
|
92
121
|
export interface RunQueryOptions {
|
|
122
|
+
/**
|
|
123
|
+
* Whether to skip the cache for this query. This will force the query to be executed. It might still be caught by the native browser cache.
|
|
124
|
+
* @default false
|
|
125
|
+
*/
|
|
93
126
|
skipCache?: boolean;
|
|
94
127
|
}
|
|
95
128
|
export type RouteType<Arguments extends BaseArguments | undefined> = Arguments extends {
|
|
@@ -97,8 +130,18 @@ export type RouteType<Arguments extends BaseArguments | undefined> = Arguments e
|
|
|
97
130
|
} ? (p: PathParams) => RouteString : RouteString;
|
|
98
131
|
export type RouteString = `/${string}`;
|
|
99
132
|
export interface PollConfig {
|
|
133
|
+
/**
|
|
134
|
+
* The interval in milliseconds to poll the query.
|
|
135
|
+
*/
|
|
100
136
|
interval: number;
|
|
137
|
+
/**
|
|
138
|
+
* A observable that will stop the polling when it emits.
|
|
139
|
+
*/
|
|
101
140
|
takeUntil: Observable<unknown>;
|
|
141
|
+
/**
|
|
142
|
+
* Whether to trigger the query immediately after polling starts.
|
|
143
|
+
*/
|
|
144
|
+
triggerImmediately?: boolean;
|
|
102
145
|
}
|
|
103
146
|
export declare const enum QueryStateType {
|
|
104
147
|
Prepared = "PREPARED",
|
|
@@ -134,6 +177,7 @@ export interface Cancelled {
|
|
|
134
177
|
}
|
|
135
178
|
export interface QueryStateMeta {
|
|
136
179
|
id: number;
|
|
180
|
+
triggeredVia: QueryTrigger;
|
|
137
181
|
}
|
|
138
182
|
export interface QueryStateSuccessMeta extends QueryStateMeta {
|
|
139
183
|
expiresAt?: number;
|
|
@@ -19,6 +19,9 @@ export declare class QueryClient {
|
|
|
19
19
|
gqlMutate: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: GqlQueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "GQL_MUTATE", Response_1, Route, ResponseTransformer>;
|
|
20
20
|
fetch: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined, Method extends MethodType, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: RestQueryConfig<Route, Response_1, Arguments, ResponseTransformer> | GqlQueryConfig<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, Method, Response_1, Route, ResponseTransformer>;
|
|
21
21
|
setAuthProvider: (authProvider: AuthProvider) => void;
|
|
22
|
-
setDefaultHeaders: (
|
|
22
|
+
setDefaultHeaders: (config: {
|
|
23
|
+
headers: RequestHeaders | RequestHeadersMethodMap | null;
|
|
24
|
+
refreshQueriesInUse?: boolean;
|
|
25
|
+
}) => void;
|
|
23
26
|
clearAuthProvider: () => void;
|
|
24
27
|
}
|
|
@@ -38,6 +38,17 @@ export interface QueryClientConfig {
|
|
|
38
38
|
* Do not include the `Authorization` header here. Use an `AuthProvider` instead.
|
|
39
39
|
*/
|
|
40
40
|
headers?: RequestHeaders | RequestHeadersMethodMap;
|
|
41
|
+
/**
|
|
42
|
+
* Whether to automatically refresh expired queries when the window regains focus.
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
autoRefreshQueriesOnWindowFocus?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Whether to automatically stop polling queries when the window loses focus.
|
|
48
|
+
* Polling will resume when the window regains focus.
|
|
49
|
+
* @default true
|
|
50
|
+
*/
|
|
51
|
+
enableSmartPolling?: boolean;
|
|
41
52
|
};
|
|
42
53
|
/**
|
|
43
54
|
* Parent query client.
|
|
@@ -6,10 +6,18 @@ export declare class QueryStore {
|
|
|
6
6
|
constructor(_config?: {
|
|
7
7
|
enableChangeLogging?: boolean | undefined;
|
|
8
8
|
enableGarbageCollectorLogging?: boolean | undefined;
|
|
9
|
+
autoRefreshQueriesOnWindowFocus?: boolean | undefined;
|
|
10
|
+
enableSmartPolling?: boolean | undefined;
|
|
9
11
|
} | undefined);
|
|
10
12
|
add(id: string, query: AnyQuery): void;
|
|
11
13
|
get(id: string): AnyQuery | null;
|
|
12
14
|
remove(id: string): void;
|
|
15
|
+
forEach(callback: (value: AnyQuery, key: string) => void): void;
|
|
16
|
+
refreshQueriesInUse(config?: {
|
|
17
|
+
ignoreCacheValidity?: boolean;
|
|
18
|
+
purgeUnused?: boolean;
|
|
19
|
+
}): void;
|
|
20
|
+
private _initSmartQueryHandling;
|
|
13
21
|
private _logState;
|
|
14
22
|
private _initGarbageCollector;
|
|
15
23
|
private _stopGarbageCollector;
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ethlete/query",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "2.1.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.1
|
|
10
|
+
"@ethlete/core": "1.4.1"
|
|
11
11
|
},
|
|
12
12
|
"module": "fesm2015/ethlete-query.mjs",
|
|
13
13
|
"es2020": "fesm2020/ethlete-query.mjs",
|