@ethlete/query 2.5.3 → 2.6.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.
Files changed (32) hide show
  1. package/esm2020/index.mjs +2 -1
  2. package/esm2020/lib/auth/bearer-auth-provider.mjs +2 -2
  3. package/esm2020/lib/directives/infinity-query-trigger.directive.mjs +3 -3
  4. package/esm2020/lib/directives/infinity-query.directive.mjs +3 -3
  5. package/esm2020/lib/directives/query.directive.mjs +3 -3
  6. package/esm2020/lib/entity/entity-store.mjs +141 -0
  7. package/esm2020/lib/entity/entity.types.mjs +2 -0
  8. package/esm2020/lib/entity/index.mjs +3 -0
  9. package/esm2020/lib/infinite-query/infinity-query.mjs +17 -3
  10. package/esm2020/lib/query/query.mjs +76 -1
  11. package/esm2020/lib/query/query.types.mjs +1 -1
  12. package/esm2020/lib/query/query.utils.mjs +1 -1
  13. package/esm2020/lib/query-client/query-client.mjs +2 -2
  14. package/esm2020/lib/query-client/query-client.types.mjs +1 -1
  15. package/esm2020/lib/query-client/query-client.utils.mjs +2 -4
  16. package/esm2020/lib/query-store/query-store.mjs +2 -1
  17. package/fesm2015/ethlete-query.mjs +241 -20
  18. package/fesm2015/ethlete-query.mjs.map +1 -1
  19. package/fesm2020/ethlete-query.mjs +245 -17
  20. package/fesm2020/ethlete-query.mjs.map +1 -1
  21. package/index.d.ts +1 -0
  22. package/lib/entity/entity-store.d.ts +33 -0
  23. package/lib/entity/entity.types.d.ts +10 -0
  24. package/lib/entity/index.d.ts +2 -0
  25. package/lib/infinite-query/infinity-query.d.ts +8 -6
  26. package/lib/query/query.d.ts +11 -5
  27. package/lib/query/query.types.d.ts +24 -9
  28. package/lib/query/query.utils.d.ts +7 -7
  29. package/lib/query-client/query-client.d.ts +8 -8
  30. package/lib/query-client/query-client.types.d.ts +12 -10
  31. package/lib/query-client/query-client.utils.d.ts +2 -2
  32. package/package.json +2 -2
package/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './lib/auth';
2
2
  export * from './lib/directives';
3
+ export * from './lib/entity';
3
4
  export * from './lib/gql';
4
5
  export * from './lib/infinite-query';
5
6
  export * from './lib/logger';
@@ -0,0 +1,33 @@
1
+ import { EntityKey, EntityStoreActionResult, EntityStoreConfig } from './entity.types';
2
+ export declare class EntityStore<T> {
3
+ private readonly _config;
4
+ private readonly _dictionary;
5
+ private readonly _keys;
6
+ private readonly _events$;
7
+ get events$(): import("rxjs").Observable<EntityStoreActionResult>;
8
+ get keys(): EntityKey[];
9
+ get values(): T[];
10
+ get size(): number;
11
+ get isEmpty(): boolean;
12
+ get config(): EntityStoreConfig;
13
+ get idKey(): string;
14
+ readonly entities$: import("rxjs").Observable<{
15
+ keys: EntityKey[];
16
+ values: T[];
17
+ }>;
18
+ constructor(_config: EntityStoreConfig);
19
+ getOne(key: EntityKey): NonNullable<T> | null;
20
+ getMany(keys: EntityKey[]): (NonNullable<T> | null)[];
21
+ addOne(value: T): EntityStoreActionResult | null;
22
+ addMany(values: T[]): (EntityStoreActionResult | null)[];
23
+ updateOne(value: T): EntityStoreActionResult | null;
24
+ updateMany(values: T[]): (EntityStoreActionResult | null)[];
25
+ setOne(value: T): EntityStoreActionResult;
26
+ setMany(values: T[]): EntityStoreActionResult[];
27
+ removeOne(key: EntityKey): EntityStoreActionResult | null;
28
+ removeMany(keys: EntityKey[]): (EntityStoreActionResult | null)[];
29
+ has(key: EntityKey): boolean;
30
+ clear(): void;
31
+ getKey(value: T): string | number;
32
+ logState(): void;
33
+ }
@@ -0,0 +1,10 @@
1
+ export type EntityKey = string | number;
2
+ export type EntityStoreActionResult = {
3
+ type: 'add' | 'update' | 'set' | 'remove';
4
+ key: EntityKey;
5
+ };
6
+ export interface EntityStoreConfig {
7
+ name: string;
8
+ idKey?: string;
9
+ logActions?: boolean;
10
+ }
@@ -0,0 +1,2 @@
1
+ export * from './entity-store';
2
+ export * from './entity.types';
@@ -1,3 +1,4 @@
1
+ import { Observable } from 'rxjs';
1
2
  import { AnyQueryCreator, QueryCreatorArgs, QueryCreatorResponse, QueryCreatorReturnType } from '../query-client';
2
3
  import { InfinityQueryConfig } from './infinity-query.types';
3
4
  export declare class InfinityQuery<QueryCreator extends AnyQueryCreator, Query extends QueryCreatorReturnType<QueryCreator>, Args extends QueryCreatorArgs<QueryCreator>, QueryResponse extends QueryCreatorResponse<QueryCreator>, InfinityResponse extends unknown[]> {
@@ -9,17 +10,18 @@ export declare class InfinityQuery<QueryCreator extends AnyQueryCreator, Query e
9
10
  private readonly _currentQuery$;
10
11
  private readonly _data$;
11
12
  private _subscriptions;
12
- get currentPage$(): import("rxjs").Observable<number | null>;
13
+ private _responsiveDataSubscription;
14
+ get currentPage$(): Observable<number | null>;
13
15
  get currentPage(): number | null;
14
- get currentCalculatedPage$(): import("rxjs").Observable<number | null>;
16
+ get currentCalculatedPage$(): Observable<number | null>;
15
17
  get currentCalculatedPage(): number | null;
16
- get totalPages$(): import("rxjs").Observable<number | null>;
18
+ get totalPages$(): Observable<number | null>;
17
19
  get totalPages(): number | null;
18
- get itemsPerPage$(): import("rxjs").Observable<number>;
20
+ get itemsPerPage$(): Observable<number>;
19
21
  get itemsPerPage(): number;
20
- get currentQuery$(): import("rxjs").Observable<Query | null>;
22
+ get currentQuery$(): Observable<Query | null>;
21
23
  get currentQuery(): Query | null;
22
- get data$(): import("rxjs").Observable<InfinityResponse>;
24
+ get data$(): Observable<InfinityResponse>;
23
25
  get data(): InfinityResponse;
24
26
  constructor(_config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>);
25
27
  nextPage(): void;
@@ -1,13 +1,14 @@
1
- import { DefaultResponseTransformer, QueryClient, ResponseTransformerType } from '../query-client';
1
+ import { QueryClient, ResponseTransformerType } from '../query-client';
2
2
  import { Method as MethodType } from '../request';
3
3
  import { BaseArguments, GqlQueryConfig, PollConfig, QueryAutoRefreshConfig, 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>> {
4
+ export declare class Query<Response, Arguments extends (BaseArguments & WithUseResultIn<Response, ResponseTransformer>) | undefined, Route extends RouteType<Arguments>, Method extends MethodType, ResponseTransformer extends ResponseTransformerType<Response>, Entity> {
5
5
  private _client;
6
6
  private _queryConfig;
7
7
  private _routeWithParams;
8
8
  private _args;
9
9
  private _currentId;
10
10
  private _pollingSubscription;
11
+ private _entitySubscription;
11
12
  private _onAbort$;
12
13
  private _currentPollConfig;
13
14
  /**
@@ -26,13 +27,18 @@ export declare class Query<Response, Arguments extends (BaseArguments & WithUseR
26
27
  * @internal
27
28
  */
28
29
  get _enableSmartPolling(): boolean;
29
- constructor(_client: QueryClient, _queryConfig: RestQueryConfig<Route, Response, Arguments, ResponseTransformer> | GqlQueryConfig<Route, Response, Arguments, ResponseTransformer>, _routeWithParams: Route, _args: Arguments | undefined);
30
- clone(): import("../query-client").QueryCreator<Arguments, Method, Response, Route, ResponseTransformer>;
31
- execute<ComputedResponse extends ReturnType<ResponseTransformer>>(options?: RunQueryOptions): this;
30
+ get store(): import("@ethlete/query").EntityStore<Entity> | null;
31
+ constructor(_client: QueryClient, _queryConfig: RestQueryConfig<Route, Response, Arguments, ResponseTransformer, Entity> | GqlQueryConfig<Route, Response, Arguments, ResponseTransformer, Entity>, _routeWithParams: Route, _args: Arguments);
32
+ clone(): import("../query-client").QueryCreator<Arguments, Method, Response, Route, ResponseTransformer, Entity>;
33
+ execute<ComputedResponse extends ReturnType<ResponseTransformer>, EntityResponse extends ResponseTransformer extends (response: Response) => infer R ? R : Response>(options?: RunQueryOptions): this;
32
34
  abort(): this;
33
35
  poll(config: PollConfig): this;
34
36
  stopPolling(): this;
35
37
  pausePolling(): this;
36
38
  resumePolling(): this;
37
39
  private _updateUseResultInDependencies;
40
+ /**
41
+ * @internal
42
+ */
43
+ _destroy(): void;
38
44
  }
@@ -1,4 +1,5 @@
1
1
  import { Observable } from 'rxjs';
2
+ import { EntityStore, EntityStoreActionResult } from '../entity';
2
3
  import { AnyQueryCreator, QueryCreatorReturnType, ResponseTransformerType } from '../query-client';
3
4
  import { Method, PathParams, QueryParams, RequestError, RequestProgress } from '../request';
4
5
  import { Query } from './query';
@@ -16,7 +17,7 @@ export interface QueryAutoRefreshConfig {
16
17
  */
17
18
  windowFocus?: boolean;
18
19
  }
19
- export type QueryConfigBase<Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined> = {
20
+ export type QueryConfigBase<Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined, Entity> = {
20
21
  /**
21
22
  * The http method to use for the query.
22
23
  */
@@ -78,15 +79,29 @@ export type QueryConfigBase<Response, Arguments extends BaseArguments | undefine
78
79
  */
79
80
  args?: Arguments;
80
81
  };
82
+ entity?: {
83
+ store: EntityStore<Entity>;
84
+ successAction: (data: {
85
+ rawResponse: Response;
86
+ response: ResponseTransformer extends (response: Response) => infer R ? R : Response;
87
+ args: Arguments;
88
+ store: EntityStore<Entity>;
89
+ }) => EntityStoreActionResult | null | Array<EntityStoreActionResult | null>;
90
+ valueSelector: (data: {
91
+ rawResponse: Response;
92
+ response: ResponseTransformer extends (response: Response) => infer R ? R : Response;
93
+ args: Arguments;
94
+ }) => Entity | Entity[];
95
+ };
81
96
  };
82
- export type RestQueryConfig<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined> = QueryConfigBase<Response, Arguments, ResponseTransformer> & {
97
+ export type RestQueryConfig<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined, Entity> = QueryConfigBase<Response, Arguments, ResponseTransformer, Entity> & {
83
98
  /**
84
99
  * The api route to use for the query.
85
100
  */
86
101
  route: Route;
87
102
  };
88
103
  export type GqlTransferOption = 'GET' | 'POST';
89
- export interface GqlQueryConfig<Route extends RouteType<Arguments> | undefined, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined> extends QueryConfigBase<Response, Arguments, ResponseTransformer> {
104
+ export interface GqlQueryConfig<Route extends RouteType<Arguments> | undefined, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined, Entity> extends QueryConfigBase<Response, Arguments, ResponseTransformer, Entity> {
90
105
  /**
91
106
  * The graphql query to use for the query.
92
107
  */
@@ -103,10 +118,10 @@ export interface GqlQueryConfig<Route extends RouteType<Arguments> | undefined,
103
118
  */
104
119
  route?: Route;
105
120
  }
106
- export type AnyRestQueryConfig = RestQueryConfig<any, any, any, any>;
107
- export type AnyGqlQueryConfig = GqlQueryConfig<any, any, any, any>;
108
- export type QueryConfigWithoutMethod<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined> = Omit<RestQueryConfig<Route, Response, Arguments, ResponseTransformer>, 'method'>;
109
- export type GqlQueryConfigWithoutMethod<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined> = Omit<GqlQueryConfig<Route, Response, Arguments, ResponseTransformer>, 'method'>;
121
+ export type AnyRestQueryConfig = RestQueryConfig<any, any, any, any, any>;
122
+ export type AnyGqlQueryConfig = GqlQueryConfig<any, any, any, any, any>;
123
+ export type QueryConfigWithoutMethod<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined, Entity> = Omit<RestQueryConfig<Route, Response, Arguments, ResponseTransformer, Entity>, 'method'>;
124
+ export type GqlQueryConfigWithoutMethod<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, ResponseTransformer extends ResponseTransformerType<Response> | undefined, Entity> = Omit<GqlQueryConfig<Route, Response, Arguments, ResponseTransformer, Entity>, 'method'>;
110
125
  export type BaseArguments = WithHeaders & WithVariables & WithBody & WithQueryParams & WithPathParams;
111
126
  export interface WithHeaders {
112
127
  headers?: Record<string, string>;
@@ -124,7 +139,7 @@ export interface WithPathParams {
124
139
  pathParams?: PathParams;
125
140
  }
126
141
  export type WithUseResultIn<Response, ResponseTransformer extends ResponseTransformerType<Response>> = {
127
- useResultIn?: Query<Response, any, any, any, ResponseTransformer>[];
142
+ useResultIn?: Query<Response, any, any, any, ResponseTransformer, any>[];
128
143
  };
129
144
  export type QueryTrigger = 'program' | 'poll' | 'auto';
130
145
  export type EmptyObject = {};
@@ -207,7 +222,7 @@ export interface QueryStateSuccessMeta extends QueryStateMeta {
207
222
  export type QueryState<Response = unknown, RawResponse = unknown> = Loading | Success<Response, RawResponse> | Failure | Cancelled | Prepared;
208
223
  export type QueryStateData<T extends QueryState = QueryState> = T extends Success<infer Response> ? Response : never;
209
224
  export type QueryStateRawData<T extends QueryState = QueryState> = T extends Success<infer Response, infer RawResponse> ? RawResponse : never;
210
- export type AnyQuery = Query<any, any, any, any, any>;
225
+ export type AnyQuery = Query<any, any, any, any, any, any>;
211
226
  export type QueryType<T extends {
212
227
  prepare: (args: any) => AnyQuery;
213
228
  }> = T['prepare'] extends () => infer R ? R : T['prepare'] extends (args: any) => infer R ? R : never;
@@ -1,5 +1,5 @@
1
1
  import { BehaviorSubject, Observable } from 'rxjs';
2
- import { AnyQueryCreator, QueryClient, QueryCreator, QueryCreatorArgs, QueryCreatorMethod, QueryCreatorResponse, QueryCreatorResponseTransformer, ResponseTransformerType } from '../query-client';
2
+ import { AnyQueryCreator, QueryClient, QueryCreator, QueryCreatorArgs, QueryCreatorEntity, QueryCreatorMethod, QueryCreatorResponse, QueryCreatorResponseTransformer, ResponseTransformerType } from '../query-client';
3
3
  import { Method, RequestHeaders, RequestHeadersMethodMap } from '../request';
4
4
  import { AnyGqlQueryConfig, AnyQuery, AnyQueryCreatorCollection, AnyQueryOfCreatorCollection, AnyRestQueryConfig, BaseArguments, Cancelled, Failure, GqlQueryConfig, Loading, Prepared, QueryRawResponseType, QueryResponseType, QueryState, QueryStateData, QueryStateRawData, QueryStateType, RouteType, Success } from './query.types';
5
5
  type OmitNull<T> = T extends null ? never : T;
@@ -14,7 +14,7 @@ export declare function filterNull(): <T>(source: Observable<T>) => Observable<O
14
14
  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>;
15
15
  export declare function switchQueryCollectionState(): <T extends {
16
16
  type: string;
17
- query: import("@ethlete/query").Query<any, any, any, any, any>;
17
+ query: import("@ethlete/query").Query<any, any, any, any, any, any>;
18
18
  } | null, Response_1 extends QueryResponseType<OmitNull<T>["query"]>, RawResponse extends QueryRawResponseType<OmitNull<T>["query"]>>(source: Observable<T>) => Observable<QueryState<OmitNull<Response_1>, OmitNull<RawResponse>> | null>;
19
19
  export declare const isQueryStateLoading: (state: QueryState | null | undefined) => state is Loading;
20
20
  export declare const isQueryStateSuccess: (state: QueryState | null | undefined) => state is Success<unknown, unknown>;
@@ -23,19 +23,19 @@ export declare const isQueryStateCancelled: (state: QueryState | null | undefine
23
23
  export declare const isQueryStatePrepared: (state: QueryState | null | undefined) => state is Prepared;
24
24
  export declare const isAutoRefresh: (state: QueryState | null | undefined) => boolean;
25
25
  export declare const mergeHeaders: (...headers: Array<RequestHeaders | null | undefined>) => RequestHeaders | null | undefined;
26
- 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>;
26
+ export declare const isGqlQueryConfig: <Response_1, Arguments extends BaseArguments | undefined, Route extends RouteType<Arguments> | undefined, ResponseTransformer extends ResponseTransformerType<Response_1> | undefined, Entity = unknown>(config: unknown) => config is GqlQueryConfig<Route, Response_1, Arguments, ResponseTransformer, Entity>;
27
27
  export declare const isQuery: <T extends AnyQuery>(query: unknown) => query is T;
28
28
  export declare const createQueryCollection: <T extends AnyQueryCreatorCollection, R extends AnyQueryOfCreatorCollection<T>>(queryMap: T) => BehaviorSubject<R | null>;
29
29
  export declare const extractQuery: <T extends AnyQuery | {
30
30
  type: string;
31
- query: import("@ethlete/query").Query<any, any, any, any, any>;
32
- } | null>(v: T) => import("@ethlete/query").Query<any, any, any, any, any> | null;
31
+ query: import("@ethlete/query").Query<any, any, any, any, any, any>;
32
+ } | null>(v: T) => import("@ethlete/query").Query<any, any, any, any, any, any> | null;
33
33
  export declare const getDefaultHeaders: (headers: RequestHeaders | RequestHeadersMethodMap | null | undefined, method: Method) => RequestHeaders;
34
- export declare const castQueryCreatorTypes: <QC extends AnyQueryCreator, Arguments extends QueryCreatorArgs<QC>, Method_1 extends QueryCreatorMethod<QC>, Response_1 extends QueryCreatorResponse<QC>, Route extends RouteType<Arguments>, ResponseTransformer extends QueryCreatorResponseTransformer<QC>, OverrideArguments extends BaseArguments | undefined, OverrideResponse extends Response_1 | undefined>(config: {
34
+ export declare const castQueryCreatorTypes: <QC extends AnyQueryCreator, Arguments extends QueryCreatorArgs<QC>, Method_1 extends QueryCreatorMethod<QC>, Response_1 extends QueryCreatorResponse<QC>, Route extends RouteType<Arguments>, ResponseTransformer extends QueryCreatorResponseTransformer<QC>, Entity extends QueryCreatorEntity<QC>, OverrideArguments extends BaseArguments | undefined, OverrideResponse extends Response_1 | undefined>(config: {
35
35
  creator: QC;
36
36
  args?: OverrideArguments | undefined;
37
37
  response?: OverrideResponse | undefined;
38
- }) => QueryCreator<OverrideArguments, Method_1, OverrideResponse, Route, ResponseTransformer>;
38
+ }) => QueryCreator<OverrideArguments, Method_1, OverrideResponse, Route, ResponseTransformer, Entity>;
39
39
  export declare const computeQueryMethod: (config: {
40
40
  config: AnyRestQueryConfig | AnyGqlQueryConfig;
41
41
  client: QueryClient;
@@ -10,14 +10,14 @@ export declare class QueryClient {
10
10
  get authProvider$(): import("rxjs").Observable<AuthProvider | null>;
11
11
  private readonly _authProvider$;
12
12
  constructor(_clientConfig: QueryClientConfig);
13
- 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>;
14
- 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>;
15
- 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>;
16
- 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>;
17
- 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>;
18
- 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>;
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
- 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>;
13
+ get: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>, Entity = unknown>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer, Entity>) => QueryCreator<Arguments, "GET", Response_1, Route, ResponseTransformer, Entity>;
14
+ post: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>, Entity = unknown>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer, Entity>) => QueryCreator<Arguments, "POST", Response_1, Route, ResponseTransformer, Entity>;
15
+ put: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>, Entity = unknown>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer, Entity>) => QueryCreator<Arguments, "PUT", Response_1, Route, ResponseTransformer, Entity>;
16
+ patch: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>, Entity = unknown>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer, Entity>) => QueryCreator<Arguments, "PATCH", Response_1, Route, ResponseTransformer, Entity>;
17
+ delete: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>, Entity = unknown>(queryConfig: QueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer, Entity>) => QueryCreator<Arguments, "DELETE", Response_1, Route, ResponseTransformer, Entity>;
18
+ gqlQuery: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>, Entity = unknown>(queryConfig: GqlQueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer, Entity>) => QueryCreator<Arguments, "GQL_QUERY", Response_1, Route, ResponseTransformer, Entity>;
19
+ gqlMutate: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined = undefined, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>, Entity = unknown>(queryConfig: GqlQueryConfigWithoutMethod<Route, Response_1, Arguments, ResponseTransformer, Entity>) => QueryCreator<Arguments, "GQL_MUTATE", Response_1, Route, ResponseTransformer, Entity>;
20
+ fetch: <Route extends RouteType<Arguments>, Response_1, Arguments extends BaseArguments | undefined, Method extends MethodType, ResponseTransformer extends ResponseTransformerType<Response_1> = DefaultResponseTransformer<Response_1>, Entity = unknown>(queryConfig: RestQueryConfig<Route, Response_1, Arguments, ResponseTransformer, Entity> | GqlQueryConfig<Route, Response_1, Arguments, ResponseTransformer, Entity>) => QueryCreator<Arguments, Method, Response_1, Route, ResponseTransformer, Entity>;
21
21
  setAuthProvider: (authProvider: AuthProvider) => void;
22
22
  setDefaultHeaders: (config: {
23
23
  headers: RequestHeaders | RequestHeadersMethodMap | null;
@@ -73,19 +73,21 @@ export interface QueryClientConfig {
73
73
  */
74
74
  parent?: QueryClient;
75
75
  }
76
- export type QueryCreator<Arguments extends BaseArguments | undefined, Method extends MethodType, Response, Route extends RouteType<Arguments>, ResponseTransformer extends ResponseTransformerType<Response> = DefaultResponseTransformer<Response>> = (Arguments extends BaseArguments ? {
77
- prepare: (args: Arguments & WithHeaders & WithUseResultIn<Response, ResponseTransformer>) => Query<Response, Arguments, Route, Method, ResponseTransformer>;
76
+ export type QueryCreator<Arguments extends BaseArguments | undefined, Method extends MethodType, Response, Route extends RouteType<Arguments>, ResponseTransformer extends ResponseTransformerType<Response>, Entity> = (Arguments extends BaseArguments ? {
77
+ prepare: (args: Arguments & WithHeaders & WithUseResultIn<Response, ResponseTransformer>) => Query<Response, Arguments, Route, Method, ResponseTransformer, Entity>;
78
78
  } : {
79
- prepare: (args?: (Arguments extends EmptyObject ? Arguments : EmptyObject) & WithHeaders & WithUseResultIn<Response, ResponseTransformer>) => Query<Response, Arguments, Route, Method, ResponseTransformer>;
79
+ prepare: (args?: (Arguments extends EmptyObject ? Arguments : EmptyObject) & WithHeaders & WithUseResultIn<Response, ResponseTransformer>) => Query<Response, Arguments, Route, Method, ResponseTransformer, Entity>;
80
80
  }) & {
81
- behaviorSubject: <T extends Query<Response, Arguments, Route, Method, ResponseTransformer>>(initialValue?: T | null) => BehaviorSubject<T | null>;
81
+ behaviorSubject: <T extends Query<Response, Arguments, Route, Method, ResponseTransformer, Entity>>(initialValue?: T | null) => BehaviorSubject<T | null>;
82
82
  };
83
- export type AnyQueryCreator = QueryCreator<any, any, any, any, any>;
84
- export type QueryCreatorArgs<T extends AnyQueryCreator> = T extends QueryCreator<infer Args, any, any, any, any> ? Args : never;
85
- export type QueryCreatorMethod<Q extends AnyQueryCreator> = Q extends QueryCreator<any, infer Method, any, any, any> ? Method : never;
86
- export type QueryCreatorResponse<T extends AnyQueryCreator> = T extends QueryCreator<any, any, infer Response, any, any> ? Response : never;
87
- export type QueryCreatorRoute<Q extends AnyQueryCreator> = Q extends QueryCreator<infer Args, any, any, any, any> ? RouteType<Args> : never;
88
- export type QueryCreatorResponseTransformer<Q extends AnyQueryCreator> = Q extends QueryCreator<any, any, any, any, infer ResponseTransformer> ? ResponseTransformer : never;
83
+ export type AnyQueryCreator = QueryCreator<any, any, any, any, any, any>;
84
+ export type QueryCreatorArgs<T extends AnyQueryCreator> = T extends QueryCreator<infer Args, any, any, any, any, any> ? Args : never;
85
+ export type QueryCreatorMethod<Q extends AnyQueryCreator> = Q extends QueryCreator<any, infer Method, any, any, any, any> ? Method : never;
86
+ export type QueryCreatorResponse<T extends AnyQueryCreator> = T extends QueryCreator<any, any, infer Response, any, any, any> ? Response : never;
87
+ export type QueryCreatorRoute<Q extends AnyQueryCreator> = Q extends QueryCreator<infer Args, any, any, any, any, any> ? RouteType<Args> : never;
88
+ export type QueryCreatorResponseTransformer<Q extends AnyQueryCreator> = Q extends QueryCreator<any, any, any, any, infer ResponseTransformer, any> ? ResponseTransformer : never;
89
+ export type QueryCreatorEntity<Q extends AnyQueryCreator> = Q extends QueryCreator<any, any, any, any, any, infer Entity> ? Entity : never;
89
90
  export type ResponseTransformerType<Response> = (response: Response) => unknown;
90
91
  export type DefaultResponseTransformer<Response> = (response: Response) => Response;
92
+ export type ResponseTransformerReturnType<T, J> = T extends (response: Response) => infer R ? R : J;
91
93
  export type QueryCreatorReturnType<T extends AnyQueryCreator> = ReturnType<T['prepare']>;
@@ -1,4 +1,4 @@
1
- import { BaseArguments, GqlQueryConfig } from '../query/query.types';
1
+ import { AnyGqlQueryConfig, BaseArguments } from '../query/query.types';
2
2
  import { Method } from '../request';
3
3
  export declare const shouldCacheQuery: (method: Method) => boolean;
4
- export declare const buildGqlCacheKey: (config: GqlQueryConfig<any, any, any, any>, args: BaseArguments | undefined) => string;
4
+ export declare const buildGqlCacheKey: (config: AnyGqlQueryConfig, args: BaseArguments | undefined) => string;
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@ethlete/query",
3
- "version": "2.5.3",
3
+ "version": "2.6.0",
4
4
  "dependencies": {
5
5
  "tslib": "^2.5.0"
6
6
  },
7
7
  "peerDependencies": {
8
8
  "@angular/common": "^15.2.1",
9
9
  "@angular/core": "^15.2.1",
10
- "@ethlete/core": "1.7.0"
10
+ "@ethlete/core": "1.8.0"
11
11
  },
12
12
  "module": "fesm2015/ethlete-query.mjs",
13
13
  "es2020": "fesm2020/ethlete-query.mjs",