@ethlete/query 0.1.0-next.1 → 0.1.0-next.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.
- package/esm2020/lib/auth/auth-provider.types.mjs +1 -1
- package/esm2020/lib/auth/basic-auth-provider.mjs +5 -5
- package/esm2020/lib/auth/bearer-auth-provider.mjs +12 -9
- package/esm2020/lib/auth/custom-header-auth-provider.mjs +4 -4
- package/esm2020/lib/directives/infinity-query-trigger.directive.mjs +3 -3
- package/esm2020/lib/directives/infinity-query.directive.mjs +36 -11
- package/esm2020/lib/directives/query.directive.mjs +17 -17
- package/esm2020/lib/infinite-query/infinity-query.mjs +11 -11
- package/esm2020/lib/infinite-query/infinity-query.types.mjs +1 -1
- package/esm2020/lib/query/query.mjs +49 -23
- package/esm2020/lib/query/query.types.mjs +1 -1
- package/esm2020/lib/query/query.utils.mjs +17 -2
- package/esm2020/lib/query-client/query-client.mjs +7 -7
- package/esm2020/lib/query-client/query-client.types.mjs +1 -1
- package/esm2020/lib/query-form/query-form.mjs +10 -7
- package/esm2020/lib/query-form/query-form.types.mjs +1 -1
- package/esm2020/lib/query-form/query-form.utils.mjs +21 -1
- package/esm2020/lib/request/request.mjs +5 -3
- package/esm2020/lib/request/request.types.mjs +1 -1
- package/esm2020/lib/request/request.util.mjs +24 -6
- package/esm2020/lib/utils/deep-freeze.util.mjs +5 -1
- package/fesm2015/ethlete-query.mjs +240 -117
- package/fesm2015/ethlete-query.mjs.map +1 -1
- package/fesm2020/ethlete-query.mjs +231 -114
- package/fesm2020/ethlete-query.mjs.map +1 -1
- package/lib/auth/auth-provider.types.d.ts +11 -1
- package/lib/directives/infinity-query-trigger.directive.d.ts +1 -1
- package/lib/directives/infinity-query.directive.d.ts +7 -2
- package/lib/directives/query.directive.d.ts +1 -1
- package/lib/infinite-query/infinity-query.types.d.ts +7 -4
- package/lib/query/query.d.ts +5 -3
- package/lib/query/query.types.d.ts +17 -14
- package/lib/query/query.utils.d.ts +8 -3
- package/lib/query-client/query-client.d.ts +9 -9
- package/lib/query-client/query-client.types.d.ts +9 -9
- package/lib/query-form/query-form.d.ts +1 -1
- package/lib/query-form/query-form.types.d.ts +13 -3
- package/lib/query-form/query-form.utils.d.ts +5 -0
- package/lib/request/request.types.d.ts +12 -10
- package/lib/request/request.util.d.ts +2 -2
- package/lib/utils/deep-freeze.util.d.ts +1 -1
- package/package.json +7 -6
|
@@ -63,6 +63,16 @@ export interface BearerRefreshConfig {
|
|
|
63
63
|
* The api's refresh route method
|
|
64
64
|
*/
|
|
65
65
|
method: Method;
|
|
66
|
+
/**
|
|
67
|
+
* The way the refresh token is sent to the api
|
|
68
|
+
* @default 'body'
|
|
69
|
+
*/
|
|
70
|
+
paramLocation?: 'body' | 'query';
|
|
71
|
+
/**
|
|
72
|
+
* The time in milliseconds before the token expires when the refresh should be triggered.
|
|
73
|
+
* @default 300000 (5 minutes)
|
|
74
|
+
*/
|
|
75
|
+
refreshBuffer?: number;
|
|
66
76
|
/**
|
|
67
77
|
* The expires in property name inside the jwt body
|
|
68
78
|
* @default 'exp'
|
|
@@ -77,7 +87,7 @@ export interface BearerRefreshConfig {
|
|
|
77
87
|
* Adapter function used to build the request body for the refresh request.
|
|
78
88
|
* @default { refreshToken: "refreshToken" }
|
|
79
89
|
*/
|
|
80
|
-
|
|
90
|
+
requestAdapter?: (refreshToken: string) => Record<string, string>;
|
|
81
91
|
/**
|
|
82
92
|
* Adapter function used to extract the token and refreshToken from the response.
|
|
83
93
|
* @default { token: "token", refreshToken: "refreshToken" }
|
|
@@ -11,5 +11,5 @@ export declare class InfinityQueryTriggerDirective implements OnInit, OnDestroy
|
|
|
11
11
|
ngOnDestroy(): void;
|
|
12
12
|
private _setupIntersectionObserver;
|
|
13
13
|
static ɵfac: i0.ɵɵFactoryDeclaration<InfinityQueryTriggerDirective, never>;
|
|
14
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<InfinityQueryTriggerDirective, "[infinityQueryTrigger], infinity-query-trigger", never, { "scrollContainerSelector": "scrollContainerSelector"; }, {}, never, never, true>;
|
|
14
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<InfinityQueryTriggerDirective, "[infinityQueryTrigger], infinity-query-trigger", never, { "scrollContainerSelector": "scrollContainerSelector"; }, {}, never, never, true, never>;
|
|
15
15
|
}
|
|
@@ -18,26 +18,31 @@ interface InfinityQueryContext<Q extends InfinityQueryConfig<AnyQueryCreator, Ba
|
|
|
18
18
|
}
|
|
19
19
|
export declare const INFINITY_QUERY_TOKEN: InjectionToken<InfinityQueryDirective<any>>;
|
|
20
20
|
export declare class InfinityQueryDirective<Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments, any, unknown[]>> implements OnInit, OnDestroy {
|
|
21
|
+
private readonly _queryConfigChanged$;
|
|
21
22
|
private readonly _viewContext;
|
|
22
23
|
private _infinityQueryInstance;
|
|
23
|
-
private _destroy$;
|
|
24
|
+
private readonly _destroy$;
|
|
24
25
|
private readonly _cdr;
|
|
25
26
|
private readonly _viewContainerRef;
|
|
26
27
|
private readonly _mainTemplateRef;
|
|
27
28
|
private readonly _errorHandler;
|
|
29
|
+
private readonly _data$;
|
|
28
30
|
private _isMainViewCreated;
|
|
29
31
|
get infinityQuery(): Q;
|
|
30
32
|
set infinityQuery(v: Q);
|
|
31
33
|
private _infinityQuery;
|
|
32
34
|
get context(): InfinityQueryContext<Q>;
|
|
33
35
|
get instance(): InfinityQuery<AnyQueryCreator, import("../query").Query<any, any, any, any, any>, BaseArguments, any, unknown[]> | null;
|
|
36
|
+
get data$(): import("rxjs").Observable<Q["response"]["arrayType"]>;
|
|
37
|
+
get data(): Q["response"]["arrayType"];
|
|
34
38
|
static ngTemplateContextGuard<Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments, any, unknown[]>>(dir: InfinityQueryDirective<Q>, ctx: unknown): ctx is InfinityQueryContext<Q>;
|
|
35
39
|
ngOnInit(): void;
|
|
36
40
|
ngOnDestroy(): void;
|
|
37
41
|
private _setupInfinityQuery;
|
|
38
42
|
_loadNextPage(): void;
|
|
39
43
|
private _renderMainView;
|
|
44
|
+
private _cleanup;
|
|
40
45
|
static ɵfac: i0.ɵɵFactoryDeclaration<InfinityQueryDirective<any>, never>;
|
|
41
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<InfinityQueryDirective<any>, "[infinityQuery]",
|
|
46
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<InfinityQueryDirective<any>, "[infinityQuery]", ["infinityQuery"], { "infinityQuery": "infinityQuery"; }, {}, never, never, true, never>;
|
|
42
47
|
}
|
|
43
48
|
export {};
|
|
@@ -31,6 +31,6 @@ export declare class QueryDirective<Q extends AnyQuery | null> implements OnInit
|
|
|
31
31
|
private _updateView;
|
|
32
32
|
private _renderMainView;
|
|
33
33
|
static ɵfac: i0.ɵɵFactoryDeclaration<QueryDirective<any>, never>;
|
|
34
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<QueryDirective<any>, "[query]", never, { "query": "query"; "cache": "queryCache"; }, {}, never, never, true>;
|
|
34
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<QueryDirective<any>, "[query]", never, { "query": "query"; "cache": "queryCache"; }, {}, never, never, true, never>;
|
|
35
35
|
}
|
|
36
36
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { BaseArguments } from '../query';
|
|
2
|
-
import { AnyQueryCreator } from '../query-client';
|
|
3
|
-
export
|
|
4
|
-
export
|
|
1
|
+
import { BaseArguments, QueryStateData } from '../query';
|
|
2
|
+
import { AnyQueryCreator, QueryCreatorArgs, QueryCreatorReturnType } from '../query-client';
|
|
3
|
+
export type InfinityQueryParamLocation = 'path' | 'query' | 'body' | 'header' | 'variable';
|
|
4
|
+
export type AppendItemsLocation = 'start' | 'end';
|
|
5
5
|
export interface PageParamCalculatorOptions {
|
|
6
6
|
page: number;
|
|
7
7
|
totalPages: number | null;
|
|
@@ -89,3 +89,6 @@ export interface InfinityQueryConfig<QueryCreator extends AnyQueryCreator, Argum
|
|
|
89
89
|
totalPagesExtractor?: (data: TotalPagesExtractorOptions<QueryResponse>) => number;
|
|
90
90
|
};
|
|
91
91
|
}
|
|
92
|
+
type OmitUndefined<T> = T extends undefined ? never : T;
|
|
93
|
+
export type InfinityQueryConfigType<QueryCreator extends AnyQueryCreator, InfinityResponse extends unknown[]> = InfinityQueryConfig<QueryCreator, OmitUndefined<QueryCreatorArgs<QueryCreator>>, QueryStateData<QueryCreatorReturnType<QueryCreator>['state']>, InfinityResponse>;
|
|
94
|
+
export {};
|
package/lib/query/query.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DefaultResponseTransformer, QueryClient, ResponseTransformerType } from '../query-client';
|
|
2
2
|
import { Method as MethodType } from '../request';
|
|
3
|
-
import { BaseArguments, GqlQueryConfig, PollConfig,
|
|
4
|
-
export declare class Query<Response, Arguments extends BaseArguments | undefined, Route extends RouteType<Arguments>, Method extends MethodType, ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>> {
|
|
3
|
+
import { BaseArguments, GqlQueryConfig, PollConfig, QueryState, RestQueryConfig, RouteType, RunQueryOptions, WithUseResultIn } from './query.types';
|
|
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;
|
|
7
7
|
private _route;
|
|
@@ -9,16 +9,18 @@ export declare class Query<Response, Arguments extends BaseArguments | undefined
|
|
|
9
9
|
private _currentId;
|
|
10
10
|
private _abortController;
|
|
11
11
|
private _pollingSubscription;
|
|
12
|
+
private _onAbort$;
|
|
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;
|
|
17
|
-
constructor(_client: QueryClient, _queryConfig:
|
|
18
|
+
constructor(_client: QueryClient, _queryConfig: RestQueryConfig<Route, Response, Arguments, ResponseTransformer> | GqlQueryConfig<Route, Response, Arguments, ResponseTransformer>, _route: Route, _args: Arguments | undefined);
|
|
18
19
|
clone(): import("../query-client").QueryCreator<Arguments, Method, Response, Route, ResponseTransformer>;
|
|
19
20
|
execute<ComputedResponse extends ReturnType<ResponseTransformer>>(options?: RunQueryOptions): this;
|
|
20
21
|
abort(): this;
|
|
21
22
|
poll(config: PollConfig): this;
|
|
22
23
|
stopPolling(): this;
|
|
24
|
+
private _updateUseResultInDependencies;
|
|
23
25
|
private _handleExecuteError;
|
|
24
26
|
}
|
|
@@ -2,7 +2,7 @@ import { Observable } from 'rxjs';
|
|
|
2
2
|
import { ResponseTransformerType } from '../query-client';
|
|
3
3
|
import { Method, PathParams, QueryParams, RequestError } from '../request';
|
|
4
4
|
import { Query } from './query';
|
|
5
|
-
export interface
|
|
5
|
+
export interface RestQueryConfig<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined> {
|
|
6
6
|
/**
|
|
7
7
|
* The http method to use for the query.
|
|
8
8
|
*/
|
|
@@ -51,9 +51,9 @@ export interface GqlQueryConfig<Route extends RouteType<Arguments> | undefined,
|
|
|
51
51
|
args?: Arguments;
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
|
-
export
|
|
55
|
-
export
|
|
56
|
-
export
|
|
54
|
+
export type QueryConfigWithoutMethod<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined> = Omit<RestQueryConfig<Route, Response, Arguments, ResponseTransformer>, 'method'>;
|
|
55
|
+
export type GqlQueryConfigWithoutMethod<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined> = Omit<GqlQueryConfig<Route, Response, Arguments, ResponseTransformer>, 'method'>;
|
|
56
|
+
export type BaseArguments = WithHeaders & WithVariables & WithBody & WithQueryParams & WithPathParams;
|
|
57
57
|
export interface WithHeaders {
|
|
58
58
|
headers?: Record<string, string>;
|
|
59
59
|
}
|
|
@@ -69,14 +69,17 @@ export interface WithQueryParams {
|
|
|
69
69
|
export interface WithPathParams {
|
|
70
70
|
pathParams?: PathParams;
|
|
71
71
|
}
|
|
72
|
-
export
|
|
72
|
+
export type WithUseResultIn<Response, ResponseTransformer extends ResponseTransformerType<Response>> = {
|
|
73
|
+
useResultIn?: Query<Response, any, any, any, ResponseTransformer>[];
|
|
74
|
+
};
|
|
75
|
+
export type EmptyObject = {};
|
|
73
76
|
export interface RunQueryOptions {
|
|
74
77
|
skipCache?: boolean;
|
|
75
78
|
}
|
|
76
|
-
export
|
|
79
|
+
export type RouteType<Arguments extends BaseArguments | undefined> = Arguments extends {
|
|
77
80
|
pathParams: infer PathParams;
|
|
78
81
|
} ? (p: PathParams) => RouteString : RouteString;
|
|
79
|
-
export
|
|
82
|
+
export type RouteString = `/${string}`;
|
|
80
83
|
export interface PollConfig {
|
|
81
84
|
interval: number;
|
|
82
85
|
takeUntil: Observable<unknown>;
|
|
@@ -117,12 +120,12 @@ export interface QueryStateMeta {
|
|
|
117
120
|
export interface QueryStateSuccessMeta extends QueryStateMeta {
|
|
118
121
|
readonly expiresAt: number | null;
|
|
119
122
|
}
|
|
120
|
-
export
|
|
121
|
-
export
|
|
122
|
-
export
|
|
123
|
-
export
|
|
124
|
-
export
|
|
123
|
+
export type QueryState<Response = unknown, RawResponse = unknown> = Loading | Success<Response, RawResponse> | Failure | Cancelled | Prepared;
|
|
124
|
+
export type QueryStateData<T extends QueryState = QueryState> = T extends Success<infer Response> ? Response : never;
|
|
125
|
+
export type QueryStateRawData<T extends QueryState = QueryState> = T extends Success<infer Response, infer RawResponse> ? RawResponse : never;
|
|
126
|
+
export type AnyQuery = Query<any, any, any, any, any>;
|
|
127
|
+
export type QueryType<T extends {
|
|
125
128
|
prepare: (args: any) => AnyQuery;
|
|
126
129
|
}> = T['prepare'] extends () => infer R ? R : T['prepare'] extends (args: any) => infer R ? R : never;
|
|
127
|
-
export
|
|
128
|
-
export
|
|
130
|
+
export type QueryResponseType<Q extends AnyQuery | null> = Q extends AnyQuery ? QueryStateData<Q['state']> | null : null;
|
|
131
|
+
export type QueryRawResponseType<Q extends AnyQuery | null> = Q extends AnyQuery ? QueryStateRawData<Q['state']> | null : null;
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
2
|
import { ResponseTransformerType } from '../query-client';
|
|
3
3
|
import { RequestHeaders } from '../request';
|
|
4
|
-
import { BaseArguments, Cancelled, Failure, GqlQueryConfig, Loading, Prepared, QueryState, QueryStateData, QueryStateRawData, RouteType, Success } from './query.types';
|
|
5
|
-
|
|
6
|
-
export declare function
|
|
4
|
+
import { AnyQuery, BaseArguments, Cancelled, Failure, GqlQueryConfig, Loading, Prepared, QueryRawResponseType, QueryResponseType, QueryState, QueryStateData, QueryStateRawData, QueryStateType, RouteType, Success } from './query.types';
|
|
5
|
+
type OmitNull<T> = T extends null ? never : T;
|
|
6
|
+
export declare function filterSuccess(): <T extends QueryState<unknown, unknown> | null, Response_1 extends QueryStateData<OmitNull<T>>, RawResponse extends QueryStateRawData<OmitNull<T>>>(source: Observable<T>) => Observable<Success<Response_1, RawResponse>>;
|
|
7
|
+
export declare function filterFailure(): <T extends QueryState<unknown, unknown> | null>(source: Observable<T>) => Observable<Failure>;
|
|
8
|
+
export declare function filterQueryStates(allowedStates: QueryStateType[]): <T extends QueryState<unknown, unknown> | null>(source: Observable<T>) => Observable<T>;
|
|
7
9
|
export declare function takeUntilResponse(): <T extends QueryState<unknown, unknown>>(source: Observable<T>) => Observable<T>;
|
|
10
|
+
export declare function filterNull(): <T>(source: Observable<T>) => Observable<OmitNull<T>>;
|
|
11
|
+
export declare function switchQueryState(): <T extends AnyQuery | null, Response_1 extends QueryResponseType<OmitNull<T>>, RawResponse extends QueryRawResponseType<OmitNull<T>>>(source: Observable<T>) => Observable<QueryState<OmitNull<Response_1>, OmitNull<RawResponse>> | null>;
|
|
8
12
|
export declare const isQueryStateLoading: (state: QueryState | null | undefined) => state is Loading;
|
|
9
13
|
export declare const isQueryStateSuccess: (state: QueryState | null | undefined) => state is Success<unknown, unknown>;
|
|
10
14
|
export declare const isQueryStateFailure: (state: QueryState | null | undefined) => state is Failure;
|
|
@@ -12,3 +16,4 @@ export declare const isQueryStateCancelled: (state: QueryState | null | undefine
|
|
|
12
16
|
export declare const isQueryStatePrepared: (state: QueryState | null | undefined) => state is Prepared;
|
|
13
17
|
export declare const mergeHeaders: (...headers: Array<RequestHeaders | null | undefined>) => RequestHeaders | null | undefined;
|
|
14
18
|
export declare const isGqlQueryConfig: <Response_1, Arguments extends BaseArguments | undefined, Route extends RouteType<Arguments> | undefined, ResponseTransformer extends ResponseTransformerType<Response_1> | undefined>(config: unknown) => config is GqlQueryConfig<Route, Response_1, Arguments, ResponseTransformer>;
|
|
19
|
+
export {};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AuthProvider } from '../auth';
|
|
2
|
-
import { BaseArguments, GqlQueryConfig, GqlQueryConfigWithoutMethod,
|
|
2
|
+
import { BaseArguments, GqlQueryConfig, GqlQueryConfigWithoutMethod, QueryConfigWithoutMethod, RestQueryConfig, RouteType } from '../query';
|
|
3
3
|
import { Method as MethodType } from '../request';
|
|
4
4
|
import { DefaultResponseTransformer, QueryClientConfig, QueryCreator, ResponseTransformerType } from './query-client.types';
|
|
5
5
|
export declare class QueryClient {
|
|
@@ -9,14 +9,14 @@ export declare class QueryClient {
|
|
|
9
9
|
get config(): QueryClientConfig;
|
|
10
10
|
get authProvider(): AuthProvider | null;
|
|
11
11
|
constructor(_clientConfig: QueryClientConfig);
|
|
12
|
-
get: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "GET", Response_1, Route, ResponseTransformer>;
|
|
13
|
-
post: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "POST", Response_1, Route, ResponseTransformer>;
|
|
14
|
-
put: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "PUT", Response_1, Route, ResponseTransformer>;
|
|
15
|
-
patch: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "PATCH", Response_1, Route, ResponseTransformer>;
|
|
16
|
-
delete: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "DELETE", Response_1, Route, ResponseTransformer>;
|
|
17
|
-
gqlQuery: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: GqlQueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "GQL_QUERY", Response_1, Route, ResponseTransformer>;
|
|
18
|
-
gqlMutate: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: GqlQueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "GQL_MUTATE", Response_1, Route, ResponseTransformer>;
|
|
19
|
-
fetch: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined, Method extends MethodType, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig:
|
|
12
|
+
get: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "GET", Response_1, Route, ResponseTransformer>;
|
|
13
|
+
post: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "POST", Response_1, Route, ResponseTransformer>;
|
|
14
|
+
put: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "PUT", Response_1, Route, ResponseTransformer>;
|
|
15
|
+
patch: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "PATCH", Response_1, Route, ResponseTransformer>;
|
|
16
|
+
delete: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer>) => QueryCreator<Arguments, "DELETE", Response_1, Route, ResponseTransformer>;
|
|
17
|
+
gqlQuery: <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_QUERY", Response_1, Route, ResponseTransformer>;
|
|
18
|
+
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>;
|
|
19
|
+
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>;
|
|
20
20
|
setAuthProvider: (authProvider: AuthProvider) => void;
|
|
21
21
|
clearAuthProvider: () => void;
|
|
22
22
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { BehaviorSubject } from 'rxjs';
|
|
2
2
|
import { Query } from '../query/query';
|
|
3
|
-
import { BaseArguments, EmptyObject, RouteType, WithHeaders } from '../query/query.types';
|
|
3
|
+
import { BaseArguments, EmptyObject, RouteType, WithHeaders, WithUseResultIn } from '../query/query.types';
|
|
4
4
|
import { CacheAdapterFn, Method as MethodType } from '../request';
|
|
5
5
|
export interface QueryClientConfig {
|
|
6
6
|
/**
|
|
@@ -33,15 +33,15 @@ export interface QueryClientConfig {
|
|
|
33
33
|
cacheAdapter?: CacheAdapterFn;
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
|
-
export
|
|
37
|
-
prepare: (args: Arguments & WithHeaders) => Query<Response, Arguments, Route, Method, ResponseTransformer>;
|
|
36
|
+
export type QueryCreator<Arguments extends BaseArguments | undefined, Method extends MethodType, Response, Route extends RouteType<Arguments>, ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>> = (Arguments extends BaseArguments ? {
|
|
37
|
+
prepare: (args: Arguments & WithHeaders & WithUseResultIn<Response, ResponseTransformer>) => Query<Response, Arguments, Route, Method, ResponseTransformer>;
|
|
38
38
|
} : {
|
|
39
|
-
prepare: (args?: (Arguments extends EmptyObject ? Arguments : EmptyObject) & WithHeaders) => Query<Response, Arguments, Route, Method, ResponseTransformer>;
|
|
39
|
+
prepare: (args?: (Arguments extends EmptyObject ? Arguments : EmptyObject) & WithHeaders & WithUseResultIn<Response, ResponseTransformer>) => Query<Response, Arguments, Route, Method, ResponseTransformer>;
|
|
40
40
|
}) & {
|
|
41
41
|
behaviorSubject: <T extends Query<Response, Arguments, Route, Method, ResponseTransformer>>(initialValue?: T | null) => BehaviorSubject<T | null>;
|
|
42
42
|
};
|
|
43
|
-
export
|
|
44
|
-
export
|
|
45
|
-
export
|
|
46
|
-
export
|
|
47
|
-
export
|
|
43
|
+
export type AnyQueryCreator = QueryCreator<any, any, any, any, any>;
|
|
44
|
+
export type QueryCreatorArgs<T extends AnyQueryCreator> = Parameters<T['prepare']>[0];
|
|
45
|
+
export type ResponseTransformerType<Response> = (response: Response) => unknown;
|
|
46
|
+
export type DefaultResponseTransformer<Response> = (response: Response) => Response;
|
|
47
|
+
export type QueryCreatorReturnType<T extends AnyQueryCreator> = ReturnType<T['prepare']>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FormGroup } from '@angular/forms';
|
|
2
2
|
import { Observable } from 'rxjs';
|
|
3
|
-
import {
|
|
3
|
+
import { QueryFieldOptions, QueryFormGroup, QueryFormValue } from './query-form.types';
|
|
4
4
|
export declare class QueryField<T> {
|
|
5
5
|
data: QueryFieldOptions<T>;
|
|
6
6
|
changes$: Observable<T | null>;
|
|
@@ -26,18 +26,28 @@ export interface QueryFieldOptions<T = unknown> {
|
|
|
26
26
|
* E.g. for a number field, the value from the url query params is a string, but the field requires a number.
|
|
27
27
|
*
|
|
28
28
|
* The following common transformations are already implemented:
|
|
29
|
+
* - `transformToString`
|
|
30
|
+
* - `transformToStringArray`
|
|
29
31
|
* - `transformToNumber`
|
|
30
32
|
* - `transformToNumberArray`
|
|
31
33
|
* - `transformToBoolean`
|
|
32
34
|
* - `transformToBooleanArray`
|
|
33
35
|
* - `transformToDate` (expects a string in the default js format)
|
|
34
36
|
* - `transformToDateArray` (expects strings in the default js format)
|
|
37
|
+
* - `transformToSort` (expects a string in the format `field:direction`)
|
|
35
38
|
*/
|
|
36
|
-
|
|
39
|
+
queryParamToValueTransformFn?: (val: unknown) => T | null;
|
|
40
|
+
/**
|
|
41
|
+
* A function that transforms the value of the field to a value that can be appended to the url query params.
|
|
42
|
+
*
|
|
43
|
+
* The following common transformations are already implemented:
|
|
44
|
+
* - `transformToSortQueryParam` (returns an object containing `field` and `direction` properties)
|
|
45
|
+
*/
|
|
46
|
+
valueToQueryParamTransformFn?: (val: T | null) => unknown;
|
|
37
47
|
}
|
|
38
|
-
export
|
|
48
|
+
export type QueryFormGroup<T extends Record<string, QueryField<any>>> = {
|
|
39
49
|
[Property in keyof T]: T[Property]['control'];
|
|
40
50
|
};
|
|
41
|
-
export
|
|
51
|
+
export type QueryFormValue<T extends Record<string, QueryField<any>>> = {
|
|
42
52
|
[Property in keyof T]: T[Property]['control']['value'];
|
|
43
53
|
};
|
|
@@ -6,3 +6,8 @@ export declare const transformToBoolean: (value: unknown) => boolean | null;
|
|
|
6
6
|
export declare const transformToBooleanArray: (value: unknown) => boolean[] | null;
|
|
7
7
|
export declare const transformToDate: (value: unknown) => Date | null;
|
|
8
8
|
export declare const transformToDateArray: (value: unknown) => Date[] | null;
|
|
9
|
+
export declare const transformToSort: (value: unknown) => {
|
|
10
|
+
active: string;
|
|
11
|
+
direction: "desc" | "asc";
|
|
12
|
+
} | null;
|
|
13
|
+
export declare const transformToSortQueryParam: (value: unknown) => string | null;
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
export
|
|
1
|
+
export type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS' | 'TRACE' | 'CONNECT' | 'PURGE' | 'LINK' | 'UNLINK' | 'GQL_QUERY' | 'GQL_MUTATE' | 'CUSTOM';
|
|
2
2
|
export interface RequestError<Detail = unknown> {
|
|
3
3
|
code: number;
|
|
4
4
|
message: string;
|
|
5
5
|
detail: Detail;
|
|
6
6
|
raw: unknown;
|
|
7
|
+
route: string;
|
|
8
|
+
requestInit?: RequestInit;
|
|
7
9
|
}
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export
|
|
13
|
-
export
|
|
14
|
-
export
|
|
15
|
-
export
|
|
16
|
-
export
|
|
10
|
+
export type ParamPrimitive = string | number | boolean | null | undefined;
|
|
11
|
+
export type Params = Record<string | number | symbol, ParamPrimitive | ParamArray>;
|
|
12
|
+
export type ParamArray = Array<ParamPrimitive>;
|
|
13
|
+
export type UnfilteredParamPrimitive = string | number | boolean | null | undefined;
|
|
14
|
+
export type QueryParams = Record<string | number | symbol, UnfilteredParamPrimitive | UnfilteredParamArray>;
|
|
15
|
+
export type PathParams = Record<string, string | number>;
|
|
16
|
+
export type UnfilteredParamArray = Array<UnfilteredParamPrimitive>;
|
|
17
|
+
export type CacheAdapterFn = (headers: Headers) => number | null;
|
|
18
|
+
export type RequestHeaders = Record<string, string>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Method, ParamArray, Params, QueryParams, RequestError, UnfilteredParamPrimitive } from './request.types';
|
|
2
2
|
export declare const isRequestError: (error: unknown) => error is RequestError<unknown>;
|
|
3
3
|
export declare const isAbortRequestError: (error: unknown) => error is RequestError<unknown>;
|
|
4
4
|
export declare const buildRoute: (options: {
|
|
@@ -14,7 +14,7 @@ export declare const filterInvalidParams: (params: QueryParams) => Params;
|
|
|
14
14
|
export declare const isParamValid: (primitive: UnfilteredParamPrimitive) => boolean;
|
|
15
15
|
export declare const extractExpiresInSeconds: (headers: Headers) => number | null;
|
|
16
16
|
export declare const buildTimestampFromSeconds: (seconds: number | null) => number | null;
|
|
17
|
-
export declare const buildRequestError: <ErrorResponse = unknown>(error: unknown) => Promise<RequestError<null> | RequestError<ErrorResponse>>;
|
|
17
|
+
export declare const buildRequestError: <ErrorResponse = unknown>(error: unknown, route: string, requestInit?: RequestInit) => Promise<RequestError<null> | RequestError<ErrorResponse>>;
|
|
18
18
|
export declare const buildBody: (body: unknown) => string | FormData | null;
|
|
19
19
|
export declare const transformMethod: (method: Method) => "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "TRACE" | "CONNECT" | "PURGE" | "LINK" | "UNLINK" | "CUSTOM";
|
|
20
20
|
export declare const guessContentType: (body: unknown) => "text/plain" | "multipart/form-data" | "application/json" | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const deepFreeze: <T extends Record<string, unknown>>(object: T) =>
|
|
1
|
+
export declare const deepFreeze: <T extends Record<string, unknown>>(object: T) => T;
|
package/package.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ethlete/query",
|
|
3
|
-
"version": "0.1.0-next.
|
|
3
|
+
"version": "0.1.0-next.11",
|
|
4
4
|
"dependencies": {
|
|
5
5
|
"tslib": "^2.3.0"
|
|
6
6
|
},
|
|
7
7
|
"peerDependencies": {
|
|
8
|
-
"@angular/common": "^14.2.0",
|
|
9
|
-
"@angular/core": "^14.2.0",
|
|
10
|
-
"rxjs": "7.
|
|
11
|
-
"@
|
|
12
|
-
"@angular/
|
|
8
|
+
"@angular/common": "^14.2.0 || ^15.0.0",
|
|
9
|
+
"@angular/core": "^14.2.0 || ^15.0.0",
|
|
10
|
+
"rxjs": "7.8.0",
|
|
11
|
+
"@ethlete/core": "0.2.0-next.10",
|
|
12
|
+
"@angular/forms": "15.1.0",
|
|
13
|
+
"@angular/router": "15.1.0"
|
|
13
14
|
},
|
|
14
15
|
"module": "fesm2015/ethlete-query.mjs",
|
|
15
16
|
"es2020": "fesm2020/ethlete-query.mjs",
|