@ethlete/query 5.15.0 → 5.16.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 (184) hide show
  1. package/.eslintrc.json +40 -0
  2. package/CHANGELOG.md +14 -0
  3. package/jest.config.ts +23 -0
  4. package/ng-package.json +8 -0
  5. package/package.json +6 -23
  6. package/project.json +37 -0
  7. package/{index.d.ts → src/index.ts} +2 -0
  8. package/src/lib/auth/auth-provider.types.ts +160 -0
  9. package/src/lib/auth/auth-provider.utils.ts +39 -0
  10. package/src/lib/auth/basic-auth-provider.ts +17 -0
  11. package/src/lib/auth/bearer-auth-provider.ts +243 -0
  12. package/src/lib/auth/custom-header-auth-provider.ts +13 -0
  13. package/{lib/class-validator/class-validator.types.d.ts → src/lib/class-validator/class-validator.types.ts} +4 -3
  14. package/src/lib/class-validator/class-validator.utils.ts +5 -0
  15. package/src/lib/devtools/components/query-devtools/query-devtools.component.html +402 -0
  16. package/src/lib/devtools/components/query-devtools/query-devtools.component.scss +360 -0
  17. package/src/lib/devtools/components/query-devtools/query-devtools.component.ts +427 -0
  18. package/src/lib/devtools/pipes/query-short-name.pipe.ts +24 -0
  19. package/src/lib/devtools/utils/query-client.utils.ts +25 -0
  20. package/src/lib/directives/infinity-query-trigger.directive.ts +58 -0
  21. package/src/lib/directives/infinity-query.directive.ts +208 -0
  22. package/src/lib/directives/query.directive.ts +201 -0
  23. package/src/lib/entity/entity-store.ts +180 -0
  24. package/src/lib/entity/entity.types.ts +34 -0
  25. package/src/lib/entity/entity.utils.ts +51 -0
  26. package/src/lib/gql/gql.ts +22 -0
  27. package/src/lib/infinite-query/infinity-query.ts +245 -0
  28. package/src/lib/infinite-query/infinity-query.types.ts +149 -0
  29. package/src/lib/infinite-query/infinity-query.utils.ts +14 -0
  30. package/src/lib/logger/logger.ts +30 -0
  31. package/src/lib/query/query.ts +631 -0
  32. package/src/lib/query/query.types.ts +532 -0
  33. package/src/lib/query/query.utils.spec.ts +92 -0
  34. package/src/lib/query/query.utils.ts +450 -0
  35. package/src/lib/query-client/query-client.spec.ts +77 -0
  36. package/src/lib/query-client/query-client.ts +195 -0
  37. package/src/lib/query-client/query-client.types.ts +101 -0
  38. package/src/lib/query-client/query-client.utils.spec.ts +61 -0
  39. package/src/lib/query-client/query-client.utils.ts +28 -0
  40. package/src/lib/query-creator/query-creator.ts +103 -0
  41. package/src/lib/query-creator/query-creator.types.ts +74 -0
  42. package/src/lib/query-form/query-form.ts +526 -0
  43. package/src/lib/query-form/query-form.types.ts +169 -0
  44. package/src/lib/query-form/query-form.utils.ts +116 -0
  45. package/src/lib/query-store/query-store.ts +192 -0
  46. package/src/lib/request/request.ts +253 -0
  47. package/src/lib/request/request.types.ts +164 -0
  48. package/src/lib/request/request.util.spec.ts +177 -0
  49. package/src/lib/request/request.util.ts +399 -0
  50. package/src/lib/stories/angular-example-page.mdx +85 -0
  51. package/src/lib/stories/authentication-page.mdx +35 -0
  52. package/src/lib/stories/changelog-page.mdx +9 -0
  53. package/src/lib/stories/client-page.mdx +100 -0
  54. package/src/lib/stories/queries-page.mdx +117 -0
  55. package/src/lib/symfony/symfony.types.ts +21 -0
  56. package/src/lib/symfony/symfony.utils.ts +43 -0
  57. package/src/lib/utils/data.utils.ts +280 -0
  58. package/src/lib/utils/deep-freeze.util.ts +21 -0
  59. package/{lib/utils/def.util.d.ts → src/lib/utils/def.util.ts} +1 -1
  60. package/src/test-setup.ts +1 -0
  61. package/tsconfig.json +29 -0
  62. package/tsconfig.lib.json +12 -0
  63. package/tsconfig.lib.prod.json +10 -0
  64. package/tsconfig.spec.json +11 -0
  65. package/esm2022/ethlete-query.mjs +0 -5
  66. package/esm2022/index.mjs +0 -20
  67. package/esm2022/lib/auth/auth-provider.types.mjs +0 -2
  68. package/esm2022/lib/auth/auth-provider.utils.mjs +0 -25
  69. package/esm2022/lib/auth/basic-auth-provider.mjs +0 -15
  70. package/esm2022/lib/auth/bearer-auth-provider.mjs +0 -168
  71. package/esm2022/lib/auth/custom-header-auth-provider.mjs +0 -12
  72. package/esm2022/lib/auth/index.mjs +0 -6
  73. package/esm2022/lib/class-validator/class-validator.types.mjs +0 -2
  74. package/esm2022/lib/class-validator/class-validator.utils.mjs +0 -4
  75. package/esm2022/lib/class-validator/index.mjs +0 -3
  76. package/esm2022/lib/devtools/components/query-devtools/index.mjs +0 -2
  77. package/esm2022/lib/devtools/components/query-devtools/query-devtools.component.mjs +0 -297
  78. package/esm2022/lib/devtools/pipes/index.mjs +0 -2
  79. package/esm2022/lib/devtools/pipes/query-short-name.pipe.mjs +0 -24
  80. package/esm2022/lib/devtools/utils/index.mjs +0 -2
  81. package/esm2022/lib/devtools/utils/query-client.utils.mjs +0 -13
  82. package/esm2022/lib/directives/index.mjs +0 -4
  83. package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +0 -56
  84. package/esm2022/lib/directives/infinity-query.directive.mjs +0 -147
  85. package/esm2022/lib/directives/query.directive.mjs +0 -123
  86. package/esm2022/lib/entity/entity-store.mjs +0 -127
  87. package/esm2022/lib/entity/entity.types.mjs +0 -2
  88. package/esm2022/lib/entity/entity.utils.mjs +0 -29
  89. package/esm2022/lib/entity/index.mjs +0 -4
  90. package/esm2022/lib/gql/gql.mjs +0 -23
  91. package/esm2022/lib/gql/index.mjs +0 -2
  92. package/esm2022/lib/infinite-query/index.mjs +0 -4
  93. package/esm2022/lib/infinite-query/infinity-query.mjs +0 -171
  94. package/esm2022/lib/infinite-query/infinity-query.types.mjs +0 -2
  95. package/esm2022/lib/infinite-query/infinity-query.utils.mjs +0 -3
  96. package/esm2022/lib/logger/index.mjs +0 -2
  97. package/esm2022/lib/logger/logger.mjs +0 -16
  98. package/esm2022/lib/query/index.mjs +0 -4
  99. package/esm2022/lib/query/query.mjs +0 -428
  100. package/esm2022/lib/query/query.types.mjs +0 -2
  101. package/esm2022/lib/query/query.utils.mjs +0 -253
  102. package/esm2022/lib/query-client/index.mjs +0 -4
  103. package/esm2022/lib/query-client/query-client.mjs +0 -80
  104. package/esm2022/lib/query-client/query-client.types.mjs +0 -2
  105. package/esm2022/lib/query-client/query-client.utils.mjs +0 -20
  106. package/esm2022/lib/query-creator/index.mjs +0 -3
  107. package/esm2022/lib/query-creator/query-creator.mjs +0 -55
  108. package/esm2022/lib/query-creator/query-creator.types.mjs +0 -2
  109. package/esm2022/lib/query-form/index.mjs +0 -4
  110. package/esm2022/lib/query-form/query-form.mjs +0 -368
  111. package/esm2022/lib/query-form/query-form.types.mjs +0 -2
  112. package/esm2022/lib/query-form/query-form.utils.mjs +0 -97
  113. package/esm2022/lib/query-store/index.mjs +0 -2
  114. package/esm2022/lib/query-store/query-store.mjs +0 -144
  115. package/esm2022/lib/request/index.mjs +0 -4
  116. package/esm2022/lib/request/request.mjs +0 -196
  117. package/esm2022/lib/request/request.types.mjs +0 -2
  118. package/esm2022/lib/request/request.util.mjs +0 -252
  119. package/esm2022/lib/symfony/index.mjs +0 -3
  120. package/esm2022/lib/symfony/symfony.types.mjs +0 -2
  121. package/esm2022/lib/symfony/symfony.utils.mjs +0 -31
  122. package/esm2022/lib/utils/data.utils.mjs +0 -138
  123. package/esm2022/lib/utils/deep-freeze.util.mjs +0 -17
  124. package/esm2022/lib/utils/def.util.mjs +0 -8
  125. package/esm2022/lib/utils/index.mjs +0 -4
  126. package/fesm2022/ethlete-query.mjs +0 -3276
  127. package/fesm2022/ethlete-query.mjs.map +0 -1
  128. package/lib/auth/auth-provider.types.d.ts +0 -133
  129. package/lib/auth/auth-provider.utils.d.ts +0 -9
  130. package/lib/auth/basic-auth-provider.d.ts +0 -10
  131. package/lib/auth/bearer-auth-provider.d.ts +0 -23
  132. package/lib/auth/custom-header-auth-provider.d.ts +0 -9
  133. package/lib/class-validator/class-validator.utils.d.ts +0 -2
  134. package/lib/devtools/components/query-devtools/query-devtools.component.d.ts +0 -151
  135. package/lib/devtools/pipes/query-short-name.pipe.d.ts +0 -8
  136. package/lib/devtools/utils/query-client.utils.d.ts +0 -12
  137. package/lib/directives/infinity-query-trigger.directive.d.ts +0 -15
  138. package/lib/directives/infinity-query.directive.d.ts +0 -49
  139. package/lib/directives/query.directive.d.ts +0 -63
  140. package/lib/entity/entity-store.d.ts +0 -25
  141. package/lib/entity/entity.types.d.ts +0 -25
  142. package/lib/entity/entity.utils.d.ts +0 -12
  143. package/lib/gql/gql.d.ts +0 -6
  144. package/lib/infinite-query/infinity-query.d.ts +0 -29
  145. package/lib/infinite-query/infinity-query.types.d.ts +0 -104
  146. package/lib/infinite-query/infinity-query.utils.d.ts +0 -4
  147. package/lib/logger/logger.d.ts +0 -12
  148. package/lib/query/query.d.ts +0 -60
  149. package/lib/query/query.types.d.ts +0 -388
  150. package/lib/query/query.utils.d.ts +0 -91
  151. package/lib/query-client/query-client.d.ts +0 -29
  152. package/lib/query-client/query-client.types.d.ts +0 -82
  153. package/lib/query-client/query-client.utils.d.ts +0 -4
  154. package/lib/query-creator/query-creator.d.ts +0 -20
  155. package/lib/query-creator/query-creator.types.d.ts +0 -13
  156. package/lib/query-form/query-form.d.ts +0 -89
  157. package/lib/query-form/query-form.types.d.ts +0 -138
  158. package/lib/query-form/query-form.utils.d.ts +0 -13
  159. package/lib/query-store/query-store.d.ts +0 -31
  160. package/lib/request/request.d.ts +0 -3
  161. package/lib/request/request.types.d.ts +0 -126
  162. package/lib/request/request.util.d.ts +0 -92
  163. package/lib/symfony/symfony.types.d.ts +0 -19
  164. package/lib/symfony/symfony.utils.d.ts +0 -6
  165. package/lib/utils/data.utils.d.ts +0 -59
  166. package/lib/utils/deep-freeze.util.d.ts +0 -1
  167. /package/{lib/auth/index.d.ts → src/lib/auth/index.ts} +0 -0
  168. /package/{lib/class-validator/index.d.ts → src/lib/class-validator/index.ts} +0 -0
  169. /package/{lib/devtools/components/query-devtools/index.d.ts → src/lib/devtools/components/query-devtools/index.ts} +0 -0
  170. /package/{lib/devtools/pipes/index.d.ts → src/lib/devtools/pipes/index.ts} +0 -0
  171. /package/{lib/devtools/utils/index.d.ts → src/lib/devtools/utils/index.ts} +0 -0
  172. /package/{lib/directives/index.d.ts → src/lib/directives/index.ts} +0 -0
  173. /package/{lib/entity/index.d.ts → src/lib/entity/index.ts} +0 -0
  174. /package/{lib/gql/index.d.ts → src/lib/gql/index.ts} +0 -0
  175. /package/{lib/infinite-query/index.d.ts → src/lib/infinite-query/index.ts} +0 -0
  176. /package/{lib/logger/index.d.ts → src/lib/logger/index.ts} +0 -0
  177. /package/{lib/query/index.d.ts → src/lib/query/index.ts} +0 -0
  178. /package/{lib/query-client/index.d.ts → src/lib/query-client/index.ts} +0 -0
  179. /package/{lib/query-creator/index.d.ts → src/lib/query-creator/index.ts} +0 -0
  180. /package/{lib/query-form/index.d.ts → src/lib/query-form/index.ts} +0 -0
  181. /package/{lib/query-store/index.d.ts → src/lib/query-store/index.ts} +0 -0
  182. /package/{lib/request/index.d.ts → src/lib/request/index.ts} +0 -0
  183. /package/{lib/symfony/index.d.ts → src/lib/symfony/index.ts} +0 -0
  184. /package/{lib/utils/index.d.ts → src/lib/utils/index.ts} +0 -0
@@ -1,104 +0,0 @@
1
- import { BaseArguments, WithHeaders } from '../query';
2
- import { AnyQueryCreator, ConstructQuery, QueryArgsOf, QueryDataOf } from '../query-creator';
3
- import { InfinityQuery } from './infinity-query';
4
- export type InfinityQueryParamLocation = 'path' | 'query' | 'body' | 'header' | 'variable';
5
- export type AppendItemsLocation = 'start' | 'end';
6
- export interface PageParamCalculatorOptions {
7
- page: number;
8
- totalPages: number | null;
9
- itemsPerPage: number;
10
- }
11
- export interface TotalPagesExtractorOptions<Arguments extends BaseArguments | undefined, QueryResponse> {
12
- response: QueryResponse;
13
- itemsPerPage: number;
14
- args: Arguments;
15
- }
16
- export interface InfinityQueryConfig<QueryCreator extends AnyQueryCreator, Arguments extends BaseArguments | undefined, QueryResponse, InfinityResponse extends unknown[]> {
17
- /**
18
- * The query creator to use for fetching pages.
19
- */
20
- queryCreator: QueryCreator;
21
- /**
22
- * The interval in milliseconds to poll on. If not provided, polling will be disabled.
23
- * @default undefined
24
- */
25
- pollingInterval?: number;
26
- /**
27
- * The args that will be merged with the page arg.
28
- */
29
- defaultArgs?: Arguments & WithHeaders;
30
- pageParam?: {
31
- /**
32
- * The location where the page param is in request.
33
- *
34
- * @default "query"
35
- */
36
- location?: InfinityQueryParamLocation;
37
- /**
38
- * Used as page param name.
39
- *
40
- * @default "page"
41
- */
42
- key?: string;
43
- /**
44
- * A function that calculates the page value for the next request.
45
- * E.g. if the pagination is done with a `skip` param, the `pageParamName` should be `skip` and this function should return the correct value.
46
- */
47
- valueCalculator?: (data: PageParamCalculatorOptions) => number;
48
- };
49
- limitParam?: {
50
- /**
51
- * The location where the limit param is in request.
52
- *
53
- * @default "query"
54
- */
55
- location?: InfinityQueryParamLocation;
56
- /**
57
- * Used as limit param name.
58
- *
59
- * @default "limit"
60
- */
61
- key?: string;
62
- /**
63
- * The value of the limit param.
64
- *
65
- * @default 10
66
- */
67
- value?: number;
68
- };
69
- response: {
70
- /**
71
- * Determines if the response should get reversed before appending to the data array.
72
- *
73
- * @default false
74
- */
75
- reverse?: boolean;
76
- /**
77
- * Determines where to put the new items in the data array.
78
- *
79
- * @default "end"
80
- */
81
- appendItemsTo?: AppendItemsLocation;
82
- /**
83
- * The type of the array that will be created by the infinite query.
84
- */
85
- arrayType: InfinityResponse;
86
- /**
87
- * A function that returns the data array from the response.
88
- * This function should return the type provided in `responseArrayType`.
89
- */
90
- valueExtractor?: (response: QueryResponse) => InfinityResponse;
91
- /**
92
- * The property in the response that contains the total page count.
93
- *
94
- * @default "totalPages"
95
- */
96
- totalPagesExtractor?: (data: TotalPagesExtractorOptions<QueryArgsOf<QueryCreator> & WithHeaders, QueryResponse>) => number;
97
- };
98
- }
99
- type OmitUndefined<T> = T extends undefined ? never : T;
100
- export type AnyInfinityQueryConfig = InfinityQueryConfig<any, any, any, any>;
101
- export type AnyInfinityQuery = InfinityQuery<any, any, any, any, any>;
102
- export type InfinityQueryConfigType<QueryCreator extends AnyQueryCreator, InfinityResponse extends unknown[]> = InfinityQueryConfig<QueryCreator, OmitUndefined<QueryArgsOf<QueryCreator>>, QueryDataOf<QueryCreator>, InfinityResponse>;
103
- export type InfinityQueryOf<Cfg extends AnyInfinityQueryConfig | null> = InfinityQuery<NonNullable<Cfg>['queryCreator'], ConstructQuery<NonNullable<Cfg>['queryCreator']>, QueryArgsOf<NonNullable<Cfg>['queryCreator']>, QueryDataOf<NonNullable<Cfg>['queryCreator']>, NonNullable<Cfg>['response']['arrayType']>;
104
- export {};
@@ -1,4 +0,0 @@
1
- import { AnyQueryCreator, QueryArgsOf, QueryDataOf } from '../query-creator';
2
- import { InfinityQueryConfig, PageParamCalculatorOptions } from './infinity-query.types';
3
- export declare const createInfinityQueryConfig: <QueryCreator extends AnyQueryCreator, Args extends QueryArgsOf<QueryCreator>, QueryResponse extends QueryDataOf<QueryCreator>, InfinityResponse extends unknown[]>(config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>) => InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>;
4
- export declare const skipPaginationPageParamCalculator: ({ page, itemsPerPage }: PageParamCalculatorOptions) => number;
@@ -1,12 +0,0 @@
1
- export declare const buildErrorMessage: (code: string, message: string) => string;
2
- export declare class QueryError extends Error {
3
- data?: unknown;
4
- constructor(code: string, message: string, data?: unknown);
5
- }
6
- export declare const invalidBaseRouteError: (data: unknown) => QueryError;
7
- export declare const invalidRouteError: (data: unknown) => QueryError;
8
- export declare const pathParamsMissingInRouteFunctionError: (data: unknown) => QueryError;
9
- export declare const queryStateAlreadyHasKeyError: (data: unknown) => QueryError;
10
- export declare const queryStateDoesNotContainKeyError: (data: unknown) => QueryError;
11
- export declare const queryStateCannotTransformError: (data: unknown) => QueryError;
12
- export declare const invalidBodyError: (data: unknown) => QueryError;
@@ -1,60 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { EntityStore } from '../entity';
3
- import { QueryClient } from '../query-client';
4
- import { RequestError } from '../request';
5
- import { BaseArguments, ExecuteQueryOptions, GqlQueryConfig, PollConfig, QueryAutoRefreshConfig, QueryState, RestQueryConfig, RouteType } from './query.types';
6
- export declare class Query<Response, Arguments extends BaseArguments | undefined, Route extends RouteType<Arguments>, Store extends EntityStore<unknown>, Data, Id> {
7
- private readonly _client;
8
- readonly _id: number;
9
- private _currentLocalId;
10
- private _pollingSubscription;
11
- private _onAbort$;
12
- private _currentPollConfig;
13
- private readonly _state$;
14
- private get _nextId();
15
- get state$(): Observable<QueryState<Data>>;
16
- /**
17
- * The current state of the query.
18
- *
19
- * **Warning!** This differs from the `state$` observable in that it does not use the query store. Thus, the response data might be outdated.
20
- * Use `state$` (or `firstValueFrom(state$)`) the most up-to-date data.
21
- */
22
- get rawState(): QueryState<Response>;
23
- get isExpired(): boolean;
24
- get isInUse(): boolean;
25
- get isPolling(): boolean;
26
- get autoRefreshOnConfig(): Readonly<QueryAutoRefreshConfig>;
27
- get store(): Store | null;
28
- get canBeCached(): boolean;
29
- get _isInMockMode(): boolean;
30
- constructor(_client: QueryClient,
31
- /**
32
- * @internal
33
- */
34
- _queryConfig: RestQueryConfig<Route, Response, Arguments, Store, Data, Id> | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>,
35
- /**
36
- * @internal
37
- */
38
- _routeWithParams: Route,
39
- /**
40
- * @internal
41
- */
42
- _arguments: Arguments,
43
- /**
44
- * @internal
45
- */
46
- _queryStoreKey: string);
47
- execute(options?: ExecuteQueryOptions): this;
48
- abort(): this;
49
- poll(config: PollConfig): this;
50
- stopPolling(): this;
51
- pausePolling(): this;
52
- resumePolling(): this;
53
- onSuccess(callback: (response: Data) => void): this;
54
- onFailure(callback: (error: RequestError<unknown>) => void): this;
55
- private _getBearerAuthProvider;
56
- private _updateEntityState;
57
- private _transformState;
58
- private _updateState;
59
- private _mockRequest;
60
- }
@@ -1,388 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { EntityStore } from '../entity';
3
- import { AnyQueryCreator, ConstructQuery, QueryDataOf, QueryResponseOf } from '../query-creator';
4
- import { QueryForm } from '../query-form';
5
- import { Method, PathParams, QueryParams, RequestError, RequestProgress } from '../request';
6
- import { Query } from './query';
7
- export interface QueryAutoRefreshConfig {
8
- /**
9
- * Refresh the query when the query client's headers change.
10
- * @default true
11
- */
12
- queryClientDefaultHeadersChange?: boolean;
13
- /**
14
- * Refresh the query when the window regains focus.
15
- *
16
- * This can only be disabled if `autoRefreshQueriesOnWindowFocus` is enabled on the query client.
17
- * @default true
18
- */
19
- windowFocus?: boolean;
20
- }
21
- export interface EntitySetParams<Store, Response, Arguments, Id> {
22
- /**
23
- * The response data.
24
- */
25
- response: Response;
26
- /**
27
- * The id(s) returned by the `id` function.
28
- */
29
- id: Id;
30
- /**
31
- * The arguments passed to the query.
32
- */
33
- args: Arguments;
34
- /**
35
- * The entity store.
36
- */
37
- store: Store;
38
- }
39
- export interface EntityGetParams<Store, Response, Arguments, Id> {
40
- /**
41
- * The response data.
42
- */
43
- response: Response;
44
- /**
45
- * The id(s) returned by the `id` function.
46
- */
47
- id: Id;
48
- /**
49
- * The arguments passed to the query.
50
- */
51
- args: Arguments;
52
- /**
53
- * The entity store.
54
- */
55
- store: Store;
56
- }
57
- export interface EntityIdParams<Response, Arguments> {
58
- /**
59
- * The response data.
60
- */
61
- response: Response;
62
- /**
63
- * The arguments passed to the query.
64
- */
65
- args: Arguments;
66
- }
67
- export interface QueryEntityConfig<Store, Data, Response, Arguments, Id> {
68
- /**
69
- * The entity store to use for the query.
70
- */
71
- store: Store;
72
- /**
73
- * A function that returns the id of the entity. Can also return an array of ids.
74
- */
75
- id: (data: EntityIdParams<Response, Arguments>) => Id;
76
- /**
77
- * A function that returns the response data (can be a subset of the response).
78
- */
79
- get?: (data: EntityGetParams<Store, Response, Arguments, Id>) => Observable<Data>;
80
- /**
81
- * A function to update the entity store every time a new response is received.
82
- */
83
- set?: (data: EntitySetParams<Store, Response, Arguments, Id>) => void;
84
- }
85
- export type QueryConfigBase<Response, Arguments extends BaseArguments | undefined, Store extends EntityStore<unknown>, Data, Id> = {
86
- /**
87
- * The http method to use for the query.
88
- */
89
- method: Method;
90
- /**
91
- * Determines if the auth provider should be used for this query.
92
- * The query **will throw** if the query client's auth provider is unset.
93
- */
94
- secure?: boolean;
95
- /**
96
- * Determines if the query should emit progress events.
97
- */
98
- reportProgress?: boolean;
99
- /**
100
- * Determines the query's response type.
101
- * @default 'json'
102
- */
103
- responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
104
- /**
105
- * Whether this request should be sent with outgoing credentials (cookies).
106
- * @default false
107
- */
108
- withCredentials?: boolean;
109
- /**
110
- * Configuration for handling auto refresh triggers.
111
- *
112
- * **Note:** This is only available for queries that can be refreshed. (`GET`, `HEAD`, `OPTIONS`, `GQL_QUERY`)
113
- */
114
- autoRefreshOn?: QueryAutoRefreshConfig;
115
- /**
116
- * Whether to automatically stop polling for this query when the window loses focus.
117
- * Polling will resume when the window regains focus.
118
- *
119
- * This can only be disabled if `enableSmartPolling` is enabled on the query client.
120
- * @default true
121
- */
122
- enableSmartPolling?: boolean;
123
- /**
124
- * Object containing the query's type information.
125
- */
126
- types?: {
127
- /**
128
- * The type of the successful response.
129
- */
130
- response?: Response;
131
- /**
132
- * Arguments for executing the query.
133
- *
134
- * - `pathParams`: The path parameters for the query. (in front of the ? in the url)
135
- * - `queryParams`: The query parameters for the query. (after the ? in the url)
136
- * - `body`: The body for the query. Unavailable for GET, HEAD and OPTIONS requests.
137
- * - `headers`: The headers for the query.
138
- * - `variables`: The variables for the query. (graphql only)
139
- */
140
- args?: Arguments;
141
- };
142
- /**
143
- * Object containing the query's entity store information.
144
- */
145
- entity?: QueryEntityConfig<Store, Data, Response, Arguments, Id>;
146
- };
147
- export type RestQueryConfig<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, Store extends EntityStore<unknown>, Data, Id> = QueryConfigBase<Response, Arguments, Store, Data, Id> & {
148
- /**
149
- * The api route to use for the query.
150
- */
151
- route: Route;
152
- };
153
- export type GqlTransferOption = 'GET' | 'POST';
154
- export interface GqlQueryConfig<Route extends RouteType<Arguments> | undefined, Response, Arguments extends BaseArguments | undefined, Store extends EntityStore<unknown>, Data, Id> extends QueryConfigBase<Response, Arguments, Store, Data, Id> {
155
- /**
156
- * The graphql query to use for the query.
157
- */
158
- query: string;
159
- /**
160
- * Determines if the query should be sent via GET or POST.
161
- * - `GET`: The query will be sent via query parameters.
162
- * - `POST`: The query will be sent via the body.
163
- * @default 'POST'
164
- */
165
- transferVia?: GqlTransferOption;
166
- /**
167
- * Subroute to use for the query.
168
- */
169
- route?: Route;
170
- }
171
- export type AnyRestQueryConfig = RestQueryConfig<any, any, any, any, any, any>;
172
- export type AnyGqlQueryConfig = GqlQueryConfig<any, any, any, any, any, any>;
173
- export type QueryConfigWithoutMethod<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, Store extends EntityStore<unknown>, Data, Id> = Omit<RestQueryConfig<Route, Response, Arguments, Store, Data, Id>, 'method'>;
174
- export type GqlQueryConfigWithoutMethod<Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, Store extends EntityStore<unknown>, Data, Id> = Omit<GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>, 'method'>;
175
- export type BaseArguments = WithHeaders & WithVariables & WithBody & WithQueryParams & WithPathParams & WithMock<unknown>;
176
- export interface WithHeaders {
177
- /**
178
- * The headers to send with the query.
179
- */
180
- headers?: Record<string, string>;
181
- }
182
- export interface QueryMockConfig<MockResponse> {
183
- /**
184
- * The mock response to use for the query.
185
- */
186
- response?: MockResponse;
187
- /**
188
- * The mock error to use for the query.
189
- */
190
- error?: RequestError;
191
- /**
192
- * The delay in milliseconds to wait before resolving the mock.
193
- * If progress is enabled, the delay will be used for each progress event.
194
- * @default 200
195
- */
196
- delay?: number;
197
- /**
198
- * Whether to report progress for the mock.
199
- * For testing e.g. file uploads.
200
- */
201
- progress?: {
202
- /**
203
- * The number of progress events to report.
204
- * @default 5
205
- */
206
- eventCount?: number;
207
- /**
208
- * The type of progress event to report.
209
- * @default 'upload'
210
- */
211
- eventType?: 'download' | 'upload';
212
- /**
213
- * The total size of the file to report progress for in bytes.
214
- * @default 1_000_000 (1MB)
215
- */
216
- fileSize?: number;
217
- /**
218
- * If true, the total size of the file will be omitted from the progress event.
219
- * Useful for testing e.g. download progress when the server does not provide a total size.
220
- */
221
- omitTotal?: boolean;
222
- /**
223
- * If true, the partial text will be omitted from the progress event.
224
- * Useful for testing e.g. download progress when the server does not provide a partial text.
225
- */
226
- omitPartialText?: boolean;
227
- };
228
- /**
229
- * This will mock the request failing and getting retried 3 times. After, the request will succeed with the provided response.
230
- * Can not be used with `progress` enabled.
231
- * @default false
232
- */
233
- retryIntoResponse?: boolean;
234
- }
235
- export interface WithMock<MockResponse> {
236
- mock?: QueryMockConfig<MockResponse>;
237
- }
238
- export interface QueryConfig {
239
- /**
240
- * Whether this query should be added to the internal query store.
241
- *
242
- * Generally this should be left on `false` unless you know what you are doing.
243
- * @default false
244
- */
245
- skipQueryStore?: boolean;
246
- /**
247
- * The cache key to use for this query.
248
- * Useful for queries that are equal but should be stored separately.
249
- * Will be generated automatically if not provided.
250
- *
251
- * Generally this should be left on `undefined` unless you know what you are doing.
252
- */
253
- queryStoreCacheKey?: string;
254
- }
255
- export interface WithConfig {
256
- /**
257
- * Additional configuration for this query.
258
- */
259
- config?: QueryConfig;
260
- }
261
- export interface WithVariables {
262
- /**
263
- * The variables for the query. (graphql only)
264
- */
265
- variables?: Record<string, unknown>;
266
- }
267
- export interface WithBody {
268
- /**
269
- * The body for the query. Unavailable for GET, HEAD and OPTIONS requests.
270
- */
271
- body?: unknown;
272
- }
273
- export interface WithQueryParams {
274
- /**
275
- * The query parameters for the query. (after the ? in the url)
276
- */
277
- queryParams?: QueryParams;
278
- }
279
- export interface WithPathParams {
280
- /**
281
- * The path parameters for the query. (in front of the ? in the url)
282
- */
283
- pathParams?: PathParams;
284
- }
285
- export type QueryTrigger = 'program' | 'poll' | 'auto';
286
- export type EmptyObject = {};
287
- export interface ExecuteQueryOptions {
288
- /**
289
- * 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.
290
- * @default false
291
- */
292
- skipCache?: boolean;
293
- /**
294
- * Whether to cancel the previous request if it is still loading.
295
- * @default false
296
- */
297
- cancelPrevious?: boolean;
298
- }
299
- export type RouteType<Arguments extends BaseArguments | undefined> = Arguments extends {
300
- pathParams: infer PathParams;
301
- } ? (p: PathParams) => RouteString : RouteString;
302
- export type RouteString = `/${string}`;
303
- export type AnyRoute = ((p: PathParams) => string) | RouteString;
304
- export interface PollConfig {
305
- /**
306
- * The interval in milliseconds to poll the query.
307
- */
308
- interval: number;
309
- /**
310
- * A observable that will stop the polling when it emits.
311
- */
312
- takeUntil: Observable<unknown>;
313
- /**
314
- * Whether to trigger the query immediately after polling starts.
315
- */
316
- triggerImmediately?: boolean;
317
- }
318
- export declare const enum QueryStateType {
319
- Prepared = "PREPARED",
320
- Loading = "LOADING",
321
- Success = "SUCCESS",
322
- Failure = "FAILURE",
323
- Cancelled = "CANCELLED"
324
- }
325
- export interface Prepared {
326
- type: QueryStateType.Prepared;
327
- meta: QueryStateMeta;
328
- }
329
- export interface Success<Response = unknown> {
330
- type: QueryStateType.Success;
331
- response: Response;
332
- meta: QueryStateSuccessMeta;
333
- }
334
- export interface Failure {
335
- type: QueryStateType.Failure;
336
- error: RequestError;
337
- meta: QueryStateMeta;
338
- }
339
- export interface Loading {
340
- type: QueryStateType.Loading;
341
- meta: QueryStateMeta;
342
- partialText?: string;
343
- progress?: RequestProgress;
344
- }
345
- export interface Cancelled {
346
- type: QueryStateType.Cancelled;
347
- meta: QueryStateMeta;
348
- }
349
- export interface QueryStateMeta {
350
- id: number;
351
- triggeredVia: QueryTrigger;
352
- isWaitingForRetry?: boolean;
353
- retryNumber?: number;
354
- retryDelay?: number;
355
- }
356
- export interface QueryStateSuccessMeta extends QueryStateMeta {
357
- expiresAt?: number;
358
- }
359
- export type QueryState<Response = unknown> = Loading | Success<Response> | Failure | Cancelled | Prepared;
360
- export type QueryStateResponseOf<T extends QueryState = QueryState> = T extends Success<infer Response> ? Response : never;
361
- export type AnyQuery = Query<any, any, any, any, any, any>;
362
- export type AnyQueryCreatorCollection = {
363
- [name: string]: AnyQueryCreator;
364
- };
365
- export type QueryCollectionOf<T extends {
366
- [name: string]: AnyQueryCreator;
367
- }> = {
368
- [K in keyof T]: {
369
- type: K;
370
- query: ConstructQuery<T[K]>;
371
- };
372
- }[keyof T];
373
- export type AnyQueryCollection = QueryCollectionOf<AnyQueryCreatorCollection>;
374
- export type QueryOf<T extends AnyQueryCollection | AnyQuery | null> = T extends AnyQuery ? T : T extends AnyQueryCollection ? T['query'] : never;
375
- export type AnyQueryCollectionResponse<T extends AnyQueryCollection> = QueryResponseOf<T['query']>;
376
- export type AnyQueryCollectionData<T extends AnyQueryCollection> = QueryDataOf<T['query']>;
377
- export type QueryCollectionKeysOf<T extends AnyQueryCollection | AnyQuery | null> = T extends AnyQueryCollection ? T['type'] : never;
378
- export interface ResetPageOnErrorOperatorConfig<J extends QueryForm<any>> {
379
- /**
380
- * The query form to reset the page of.
381
- */
382
- queryForm: J;
383
- /**
384
- * The key of the page control in the query form.
385
- * @default 'page'
386
- */
387
- pageControlKey?: string;
388
- }
@@ -1,91 +0,0 @@
1
- import { Paginated } from '@ethlete/types';
2
- import { BehaviorSubject, Observable } from 'rxjs';
3
- import { EntityStore } from '../entity';
4
- import { QueryClient } from '../query-client';
5
- import { AnyQueryCreator, QueryArgsOf, QueryCreator, QueryDataOf, QueryResponseOf, QueryStoreIdOf, QueryStoreOf } from '../query-creator';
6
- import { QueryForm } from '../query-form';
7
- import { Method, RequestHeaders, RequestHeadersMethodMap } from '../request';
8
- import { QueryContainerConfig } from '../utils';
9
- import { AnyGqlQueryConfig, AnyQuery, AnyQueryCollectionData, AnyQueryCreatorCollection, AnyRestQueryConfig, BaseArguments, Cancelled, Failure, GqlQueryConfig, Loading, Prepared, QueryCollectionOf, QueryState, QueryStateResponseOf, QueryStateType, ResetPageOnErrorOperatorConfig, RouteType, Success } from './query.types';
10
- type OmitNull<T> = T extends null ? never : T;
11
- export declare function filterSuccess(): <T extends QueryState | null, Response extends QueryStateResponseOf<OmitNull<T>>>(source: Observable<T>) => Observable<Success<Response>>;
12
- export declare function ignoreAutoRefresh(): <T extends QueryState | null>(source: Observable<T>) => Observable<T>;
13
- export declare function filterFailure(): <T extends QueryState | null>(source: Observable<T>) => Observable<Failure>;
14
- export declare function filterQueryStates(allowedStates: QueryStateType[]): <T extends QueryState | null>(source: Observable<T>) => Observable<T>;
15
- export declare function takeUntilResponse(config?: {
16
- excludeNull?: boolean;
17
- }): <T extends QueryState | null>(source: Observable<T>) => Observable<T>;
18
- export declare function filterNull(): <T>(source: Observable<T>) => Observable<OmitNull<T>>;
19
- export declare function switchQueryState(): <T extends AnyQuery | null, Data extends QueryDataOf<T>>(source: Observable<T>) => Observable<QueryState<Data> | null>;
20
- export declare function switchQueryCollectionState(): <T extends {
21
- type: string;
22
- query: import("@ethlete/query").Query<any, any, any, any, any, any>;
23
- } | null, Data extends AnyQueryCollectionData<OmitNull<T>>>(source: Observable<T>) => Observable<QueryState<Data> | null>;
24
- export declare const resetPageOnError: <T extends AnyQuery | null | undefined, J extends QueryForm<any>>(config: ResetPageOnErrorOperatorConfig<J>) => (source: Observable<T>) => Observable<QueryState<any> | T>;
25
- export declare const isQueryStateLoading: (state: QueryState | null | undefined) => state is Loading;
26
- export declare const isQueryStateSuccess: (state: QueryState | null | undefined) => state is Success<unknown>;
27
- export declare const isQueryStateFailure: (state: QueryState | null | undefined) => state is Failure;
28
- export declare const isQueryStateCancelled: (state: QueryState | null | undefined) => state is Cancelled;
29
- export declare const isQueryStatePrepared: (state: QueryState | null | undefined) => state is Prepared;
30
- export declare const isAutoRefresh: (state: QueryState | null | undefined) => boolean;
31
- export declare const mergeHeaders: (...headers: Array<RequestHeaders | null | undefined>) => RequestHeaders | null | undefined;
32
- export declare const isGqlQueryConfig: <Response, Arguments extends BaseArguments | undefined, Route extends RouteType<Arguments> | undefined, Store extends EntityStore<unknown>, Data, Id>(config: unknown) => config is GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>;
33
- export declare const isQuery: <T extends AnyQuery>(query: unknown) => query is T;
34
- export declare const isQueryCollection: <T extends {
35
- type: string;
36
- query: import("@ethlete/query").Query<any, any, any, any, any, any>;
37
- }>(query: unknown) => query is T;
38
- /**
39
- * @deprecated Use `createQueryCollectionSubject` instead. Will be removed in v6.
40
- */
41
- export declare const createQueryCollection: <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(queryMap: T) => BehaviorSubject<R | null>;
42
- export declare const createQueryCollectionSubject: <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(queryMap: T, config?: QueryContainerConfig) => BehaviorSubject<R | null>;
43
- export declare const createQueryCollectionSignal: <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(queryMap: T, config?: QueryContainerConfig) => import("@angular/core").WritableSignal<R | null>;
44
- export declare const extractQuery: <T extends AnyQuery | {
45
- type: string;
46
- query: import("@ethlete/query").Query<any, any, any, any, any, any>;
47
- } | null>(v: T) => import("@ethlete/query").Query<any, any, any, any, any, any> | null;
48
- export declare const getDefaultHeaders: (headers: RequestHeaders | RequestHeadersMethodMap | null | undefined, method: Method) => RequestHeaders;
49
- export declare const castQueryCreatorTypes: <QC extends AnyQueryCreator, Arguments extends QueryArgsOf<QC>, Response extends QueryResponseOf<QC>, Store extends QueryStoreOf<QC>, Data extends QueryDataOf<QC>, Route extends RouteType<Arguments>, Id extends QueryStoreIdOf<QC>, OverrideArguments extends BaseArguments | undefined, OverrideResponse extends Response | undefined>(config: {
50
- creator: QC;
51
- args?: OverrideArguments;
52
- response?: OverrideResponse;
53
- }) => QueryCreator<OverrideArguments, OverrideResponse, Route, Store, Data, Id>;
54
- export declare const computeQueryMethod: (config: {
55
- config: AnyRestQueryConfig | AnyGqlQueryConfig;
56
- client: QueryClient;
57
- }) => "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "TRACE" | "CONNECT" | "PURGE" | "LINK" | "UNLINK" | "CUSTOM";
58
- export declare const computeQueryBody: (config: {
59
- config: AnyRestQueryConfig | AnyGqlQueryConfig;
60
- client: QueryClient;
61
- method: Method;
62
- args?: BaseArguments;
63
- }) => unknown;
64
- export declare const computeQueryAuthHeader: (config: {
65
- config: AnyRestQueryConfig | AnyGqlQueryConfig;
66
- client: QueryClient;
67
- }) => Record<string, string> | null;
68
- export declare const computeQueryHeaders: (config: {
69
- config: AnyRestQueryConfig | AnyGqlQueryConfig;
70
- client: QueryClient;
71
- args?: BaseArguments;
72
- }) => RequestHeaders | undefined;
73
- export declare const computeQueryQueryParams: (config: {
74
- config: AnyRestQueryConfig | AnyGqlQueryConfig;
75
- client: QueryClient;
76
- args?: BaseArguments;
77
- }) => object | undefined;
78
- export declare const paginatedEntityValueUpdater: <T extends Paginated<unknown>, Args extends BaseArguments, Entity, J extends T extends Paginated<infer X> ? X : never>(findFn: (val: J, entity: Entity) => boolean) => ({ response, rawResponse, entity }: {
79
- rawResponse: T;
80
- response: T;
81
- args: Args;
82
- entity: Entity;
83
- }) => {
84
- response: T & {
85
- items: unknown[];
86
- };
87
- rawResponse: T & {
88
- items: unknown[];
89
- };
90
- } | null;
91
- export {};