@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,29 +0,0 @@
1
- import { AuthProvider } from '../auth';
2
- import { EntityStore } from '../entity';
3
- import { BaseArguments, GqlQueryConfig, GqlQueryConfigWithoutMethod, QueryConfigWithoutMethod, RestQueryConfig, RouteType } from '../query';
4
- import { QueryCreator } from '../query-creator';
5
- import { RequestHeaders, RequestHeadersMethodMap } from '../request';
6
- import { QueryClientConfig } from './query-client.types';
7
- export declare class QueryClient {
8
- private _clientConfig;
9
- get config(): QueryClientConfig;
10
- get authProvider(): AuthProvider | null;
11
- get authProvider$(): import("rxjs").Observable<AuthProvider | null>;
12
- private readonly _authProvider$;
13
- constructor(_clientConfig: QueryClientConfig);
14
- get: <Route extends RouteType<Arguments>, Response, Id, Data = Response, Arguments extends BaseArguments | undefined = undefined, Store extends EntityStore<unknown> = EntityStore<unknown>>(queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>) => QueryCreator<Arguments, Response, Route, Store, Data, Id>;
15
- post: <Route extends RouteType<Arguments>, Response, Id, Data = Response, Arguments extends BaseArguments | undefined = undefined, Store extends EntityStore<unknown> = EntityStore<unknown>>(queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>) => QueryCreator<Arguments, Response, Route, Store, Data, Id>;
16
- put: <Route extends RouteType<Arguments>, Response, Id, Data = Response, Arguments extends BaseArguments | undefined = undefined, Store extends EntityStore<unknown> = EntityStore<unknown>>(queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>) => QueryCreator<Arguments, Response, Route, Store, Data, Id>;
17
- patch: <Route extends RouteType<Arguments>, Response, Id, Data = Response, Arguments extends BaseArguments | undefined = undefined, Store extends EntityStore<unknown> = EntityStore<unknown>>(queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>) => QueryCreator<Arguments, Response, Route, Store, Data, Id>;
18
- delete: <Route extends RouteType<Arguments>, Response, Id, Data = Response, Arguments extends BaseArguments | undefined = undefined, Store extends EntityStore<unknown> = EntityStore<unknown>>(queryConfig: QueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>) => QueryCreator<Arguments, Response, Route, Store, Data, Id>;
19
- gqlQuery: <Route extends RouteType<Arguments>, Response, Id, Data = Response, Arguments extends BaseArguments | undefined = undefined, Store extends EntityStore<unknown> = EntityStore<unknown>>(queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>) => QueryCreator<Arguments, Response, Route, Store, Data, Id>;
20
- gqlMutate: <Route extends RouteType<Arguments>, Response, Id, Data = Response, Arguments extends BaseArguments | undefined = undefined, Store extends EntityStore<unknown> = EntityStore<unknown>>(queryConfig: GqlQueryConfigWithoutMethod<Route, Response, Arguments, Store, Data, Id>) => QueryCreator<Arguments, Response, Route, Store, Data, Id>;
21
- fetch: <Route extends RouteType<Arguments>, Response, Arguments extends BaseArguments | undefined, Id, Store extends EntityStore<unknown> = EntityStore<unknown>, Data = Response>(queryConfig: RestQueryConfig<Route, Response, Arguments, Store, Data, Id> | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>) => QueryCreator<Arguments, Response, Route, Store, Data, Id>;
22
- setAuthProvider: (authProvider: AuthProvider) => void;
23
- setDefaultHeaders: (config: {
24
- headers: RequestHeaders | RequestHeadersMethodMap | null;
25
- refreshQueriesInUse?: boolean;
26
- }) => void;
27
- clearAuthProvider: () => void;
28
- _updateBaseRoute: (route: string) => void;
29
- }
@@ -1,82 +0,0 @@
1
- import { GqlTransferOption } from '../query/query.types';
2
- import { BuildQueryStringConfig, CacheAdapterFn, RequestHeaders, RequestHeadersMethodMap, RequestRetryFn } from '../request';
3
- import { QueryClient } from './query-client';
4
- export interface QueryClientConfig {
5
- /**
6
- * The api base route. Should **not** end with a trailing slash.
7
- * @example 'https://api.example.com'
8
- */
9
- baseRoute: string;
10
- /**
11
- * Logging configuration for debugging.
12
- */
13
- logging?: {
14
- /**
15
- * Log all query state changes.
16
- */
17
- queryStateChanges?: boolean;
18
- /**
19
- * Log query state garbage collector runs.
20
- */
21
- queryStateGarbageCollector?: boolean;
22
- /**
23
- * Log if subscriptions are made to queries that are in the `prepared` state.
24
- * This usually indicates that the `.execute()` method was forgotten.
25
- */
26
- preparedQuerySubscriptions?: boolean;
27
- };
28
- /**
29
- * Request options.
30
- */
31
- request?: {
32
- /**
33
- * Adapter function used for extracting the time until the response is invalid.
34
- * The default uses the `cache-control` (`max-age` & `s-maxage`), `age` and `expires` headers.
35
- * Should return a number in seconds.
36
- */
37
- cacheAdapter?: CacheAdapterFn;
38
- /**
39
- * Default headers to be sent with every request.
40
- * Will be overridden by headers passed to the query.
41
- * Do not include the `Authorization` header here. Use an `AuthProvider` instead.
42
- */
43
- headers?: RequestHeaders | RequestHeadersMethodMap;
44
- /**
45
- * Whether to automatically refresh expired queries when the window regains focus.
46
- * @default true
47
- */
48
- autoRefreshQueriesOnWindowFocus?: boolean;
49
- /**
50
- * Whether to automatically stop polling queries when the window loses focus.
51
- * Polling will resume when the window regains focus.
52
- * @default true
53
- */
54
- enableSmartPolling?: boolean;
55
- /**
56
- * A retry function to be used for all queries.
57
- * @default shouldRetryRequest()
58
- */
59
- retryFn?: RequestRetryFn;
60
- /**
61
- * Configuration options for all graphql queries.
62
- */
63
- gql?: {
64
- /**
65
- * Determines if the query should be sent via GET or POST.
66
- * - `GET`: The query will be sent via query parameters.
67
- * - `POST`: The query will be sent via the body.
68
- * @default 'POST'
69
- */
70
- transferVia?: GqlTransferOption;
71
- };
72
- /**
73
- * Configuration options for all query strings.
74
- */
75
- queryParams?: BuildQueryStringConfig;
76
- };
77
- /**
78
- * Parent query client.
79
- * Used for sharing the same auth provider.
80
- */
81
- parent?: QueryClient;
82
- }
@@ -1,4 +0,0 @@
1
- import { BaseArguments } from '../query/query.types';
2
- import { Method } from '../request';
3
- export declare const shouldCacheQuery: (method: Method) => boolean;
4
- export declare const buildQueryCacheKey: (route: string, args: BaseArguments | undefined) => string;
@@ -1,20 +0,0 @@
1
- import { BehaviorSubject } from 'rxjs';
2
- import { EntityStore } from '../entity';
3
- import { QueryClient } from '../query-client';
4
- import { QueryStore } from '../query-store';
5
- import { BaseArguments, GqlQueryConfig, RestQueryConfig, RouteType } from '../query/query.types';
6
- import { QueryContainerConfig } from '../utils';
7
- import { QueryPrepareFn } from './query-creator.types';
8
- export declare class QueryCreator<Arguments extends BaseArguments | undefined, Response, Route extends RouteType<Arguments>, Store extends EntityStore<unknown>, Data, Id> {
9
- private _queryConfig;
10
- private _client;
11
- private _store;
12
- constructor(_queryConfig: RestQueryConfig<Route, Response, Arguments, Store, Data, Id> | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>, _client: QueryClient, _store: QueryStore);
13
- prepare: QueryPrepareFn<Arguments, Response, Route, Store, Data, Id>;
14
- createSubject: (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => BehaviorSubject<ReturnType<QueryPrepareFn<Arguments, Response, Route, Store, Data, Id>> | null>;
15
- createSignal: (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => import("@angular/core").WritableSignal<ReturnType<QueryPrepareFn<Arguments, Response, Route, Store, Data, Id>> | null>;
16
- /**
17
- * @deprecated Use `myQuery.createSubject()` or `myQuery.createSignal()` instead. Will be removed in v6.
18
- */
19
- behaviorSubject: (initialValue?: ReturnType<typeof this.prepare> | null) => BehaviorSubject<ReturnType<QueryPrepareFn<Arguments, Response, Route, Store, Data, Id>> | null>;
20
- }
@@ -1,13 +0,0 @@
1
- import { EntityStore } from '../entity';
2
- import { Query } from '../query/query';
3
- import { AnyQuery, BaseArguments, EmptyObject, RouteType, WithConfig, WithHeaders, WithMock } from '../query/query.types';
4
- import { QueryCreator } from './query-creator';
5
- export type QueryPrepareFn<Arguments extends BaseArguments | undefined, Response, Route extends RouteType<Arguments>, Store extends EntityStore<unknown>, Data, Id> = Arguments extends BaseArguments ? (args: Arguments & WithHeaders & WithConfig & WithMock<Response>) => Query<Response, Arguments, Route, Store, Data, Id> : (args?: (Arguments extends EmptyObject ? Arguments : EmptyObject) & WithHeaders & WithConfig & WithMock<Response>) => Query<Response, Arguments, Route, Store, Data, Id>;
6
- export type AnyQueryCreator = QueryCreator<any, any, any, any, any, any>;
7
- export type QueryArgsOf<T extends AnyQueryCreator | AnyQuery | null> = T extends QueryCreator<infer Args, any, any, any, any, any> ? Args : T extends Query<any, infer Args, any, any, any, any> ? Args : never;
8
- export type QueryResponseOf<T extends AnyQueryCreator | AnyQuery | null> = T extends QueryCreator<any, infer Response, any, any, any, any> ? Response : T extends Query<infer Response, any, any, any, any, any> ? Response : never;
9
- export type QueryRouteOf<T extends AnyQueryCreator | AnyQuery | null> = T extends QueryCreator<any, any, infer Route, any, any, any> ? Route : T extends Query<any, any, infer Route, any, any, any> ? Route : never;
10
- export type QueryStoreOf<T extends AnyQueryCreator | AnyQuery | null> = T extends QueryCreator<any, any, any, infer Store, any, any> ? Store : T extends Query<any, any, any, infer Store, any, any> ? Store : never;
11
- export type QueryDataOf<T extends AnyQueryCreator | AnyQuery | null> = T extends QueryCreator<any, any, any, any, infer Data, any> ? Data : T extends Query<any, any, any, any, infer Data, any> ? Data : never;
12
- export type QueryStoreIdOf<T extends AnyQueryCreator | AnyQuery | null> = T extends QueryCreator<any, any, any, any, any, infer StoreId> ? StoreId : T extends Query<any, any, any, any, any, infer StoreId> ? StoreId : never;
13
- export type ConstructQuery<T extends AnyQueryCreator> = ReturnType<T['prepare']>;
@@ -1,89 +0,0 @@
1
- import { FormGroup } from '@angular/forms';
2
- import { QueryFieldOptions, QueryFormGroupControls, QueryFormObserveOptions, QueryFormValue, QueryFormValueEvent, QueryFormWriteOptions } from './query-form.types';
3
- export declare class QueryField<T> {
4
- data: QueryFieldOptions<T>;
5
- get control(): import("@angular/forms").FormControl<T | null>;
6
- constructor(data: QueryFieldOptions<T>);
7
- }
8
- export interface QueryFormOptions {
9
- /**
10
- * A prefix to use for the query parameters. This is useful when you have multiple query forms on the same page.
11
- */
12
- queryParamPrefix?: string | (() => string);
13
- }
14
- export type AnyQueryForm = QueryForm<any>;
15
- export declare class QueryForm<T extends Record<string, QueryField<any>>> {
16
- private _fields;
17
- private _options?;
18
- private readonly _destroy$;
19
- private readonly _unobserveTrigger$;
20
- private readonly _router;
21
- private readonly _activatedRoute;
22
- private readonly _defaultValues;
23
- private readonly _routerStateService;
24
- private readonly _zone;
25
- private readonly _didValueChanges$;
26
- private _isObserving;
27
- private _skipNextResets;
28
- /**
29
- * The angular form group that contains all the fields.
30
- *
31
- * **Do not** use any of the following methods on this form group:
32
- * - `setValue`: Use `QueryForm.setValue` instead.
33
- * - `patchValue`: Use `QueryForm.patchValue` instead.
34
- * - `valueChanges`: Use `QueryForm.changes$` instead.
35
- * - `value`: Use `QueryForm.value` instead.
36
- * - `controls`: Use `QueryForm.controls` instead.
37
- */
38
- readonly form: FormGroup<QueryFormGroupControls<T>>;
39
- private readonly _lastFormValue$;
40
- private readonly _currentFormValue$;
41
- private get _formValue();
42
- private get _form();
43
- private readonly _changes$;
44
- readonly changes$: import("rxjs").Observable<QueryFormValueEvent<T>>;
45
- readonly currentValue$: import("rxjs").Observable<QueryFormValue<T>>;
46
- readonly previousValue$: import("rxjs").Observable<QueryFormValue<T> | null>;
47
- readonly changes: import("@angular/core").Signal<QueryFormValueEvent<T> | undefined>;
48
- readonly currentValue: import("@angular/core").Signal<QueryFormValue<T> | undefined>;
49
- readonly previousValue: import("@angular/core").Signal<QueryFormValue<T> | null | undefined>;
50
- /**
51
- * The number of active filters.
52
- *
53
- * Excludes the following fields by default:
54
- * - `page`
55
- * - `skip`
56
- * - `take`
57
- * - `limit`
58
- * - `sort`
59
- * - `sortBy`
60
- * - `sortOrder`
61
- * - `query`
62
- * - `search`
63
- */
64
- readonly activeFilterCount$: import("rxjs").Observable<number>;
65
- get controls(): 0 extends 1 & QueryFormGroupControls<T> ? {
66
- [key: string]: import("@angular/forms").AbstractControl<any, any>;
67
- } : QueryFormGroupControls<T>;
68
- get value(): QueryFormValue<T>;
69
- get defaultFormValue(): QueryFormValue<T>;
70
- constructor(_fields: T, _options?: QueryFormOptions | undefined);
71
- observe(options?: QueryFormObserveOptions): this;
72
- private _handleQueryFormResets;
73
- unobserve(): void;
74
- setFormValueFromUrlQueryParams(options: {
75
- queryParams: Record<string, unknown>;
76
- }): boolean;
77
- setValue(value: QueryFormValue<T>, options?: QueryFormWriteOptions): void;
78
- patchValue(value: Partial<QueryFormValue<T>>, options?: QueryFormWriteOptions): void;
79
- resetFieldToDefault(key: keyof QueryFormValue<T>, options?: QueryFormWriteOptions): void;
80
- resetFieldsToDefault(keys: (keyof QueryFormValue<T>)[], options?: QueryFormWriteOptions): void;
81
- resetAllFieldsToDefault(options?: QueryFormWriteOptions): void;
82
- private _getDefaultValue;
83
- private _transformKeyToQueryParam;
84
- private _isDefaultValue;
85
- private _setupFormGroup;
86
- private _extractDefaultValues;
87
- private _syncViaUrlQueryParams;
88
- private _handleFormChange;
89
- }
@@ -1,138 +0,0 @@
1
- import { FormControl, FormGroup } from '@angular/forms';
2
- import { QueryField } from './query-form';
3
- export interface QueryFieldOptions<T = unknown> {
4
- /**
5
- * The default value of the field.
6
- * Will be set to the initial value of the form control if not specified.
7
- */
8
- defaultValue?: T | null;
9
- /**
10
- * Debounce time in milliseconds.
11
- */
12
- debounce?: number;
13
- /**
14
- * Whether the debounce should not be applied if the value is falsy.
15
- * This is useful for fields that can be cleared like a search field.
16
- *
17
- * @default false
18
- */
19
- disableDebounceIfFalsy?: boolean;
20
- /**
21
- * The form control for the field.
22
- */
23
- control: FormControl<T | null>;
24
- /**
25
- * Append the field's value to the url.
26
- *
27
- * The field wont be appended to the url if one of the following is true:
28
- * - It is the default value
29
- * - It is an empty string
30
- * - It is `null`
31
- * - It is `undefined`
32
- *
33
- * @default true
34
- */
35
- appendToUrl?: boolean;
36
- /**
37
- * Reset the field's value to the default value if one or more of the specified fields are changed.
38
- *
39
- * @example
40
- * // Given this field is a `page` field, the field will be reset if the `limit`, `query` or `search` fields are changed.
41
- * ['limit', 'query', 'search']
42
- */
43
- isResetBy?: string | string[];
44
- /**
45
- * Whether the field should change the count of current active filters.
46
- *
47
- * Will be `true` for these common fields:
48
- * - `page`
49
- * - `skip`
50
- * - `take`
51
- * - `limit`
52
- * - `sort`
53
- * - `sortBy`
54
- * - `sortOrder`
55
- * - `query`
56
- * - `search`
57
- * @default false
58
- */
59
- skipInFilterCount?: boolean;
60
- /**
61
- * A function that transforms the the value gotten from the url query params to a value required by the field.
62
- * E.g. for a number field, the value from the url query params is a string, but the field requires a number.
63
- *
64
- * The following common transformations are already implemented:
65
- * - `transformToString`
66
- * - `transformToStringArray`
67
- * - `transformToNumber`
68
- * - `transformToNumberArray`
69
- * - `transformToBoolean`
70
- * - `transformToBooleanArray`
71
- * - `transformToDate` (expects a string in the default js format)
72
- * - `transformToDateArray` (expects strings in the default js format)
73
- * - `transformToSort` (expects a string in the format `field:direction`)
74
- */
75
- queryParamToValueTransformFn?: (val: unknown) => T | null;
76
- /**
77
- * A function that transforms the value of the field to a value that can be appended to the url query params.
78
- *
79
- * The following common transformations are already implemented:
80
- * - `transformToSortQueryParam` (returns an object containing `field` and `direction` properties)
81
- */
82
- valueToQueryParamTransformFn?: (val: T | null) => unknown;
83
- }
84
- export type QueryFormGroupControls<T extends Record<string, QueryField<any>>> = {
85
- [Property in keyof T]: T[Property]['control'];
86
- };
87
- export type QueryFormValue<T extends Record<string, QueryField<any>>> = {
88
- [Property in keyof T]: T[Property]['control']['value'];
89
- };
90
- export type QueryFormOf<T extends FormGroup> = {
91
- [K in keyof T['controls']]: QueryField<T['controls'][K]['value']>;
92
- };
93
- export interface QueryFormGroup extends FormGroup {
94
- _setValue: FormGroup['setValue'];
95
- _patchValue: FormGroup['patchValue'];
96
- setValue(value: unknown, options?: QueryFormWriteOptions): void;
97
- patchValue(value: unknown, options?: QueryFormWriteOptions): void;
98
- }
99
- export interface QueryFormObserveOptions {
100
- /**
101
- * Whether the form value should be synced to the url query params.
102
- * @default true
103
- */
104
- writeToQueryParams?: boolean;
105
- /**
106
- * Whether the form value should be updated when the url query params change.
107
- * @default true
108
- */
109
- syncOnNavigation?: boolean;
110
- /**
111
- * If true, the navigation will not create a new entry in the browser's history.
112
- * @default false
113
- */
114
- replaceUrl?: boolean;
115
- }
116
- export interface QueryFormValueEvent<T extends Record<string, QueryField<any>>> {
117
- previousValue: QueryFormValue<T> | null;
118
- currentValue: QueryFormValue<T>;
119
- }
120
- export interface QueryFormWriteOptions {
121
- /**
122
- * When true, each change only affects this control, and not its parent.
123
- * @default false
124
- */
125
- onlySelf?: boolean;
126
- /**
127
- * When true or not supplied (the default), both the `statusChanges` and `valueChanges`
128
- * observables emit events with the latest status and value when the control value is updated.
129
- * When false, no events are emitted.
130
- * @default true
131
- */
132
- emitEvent?: boolean;
133
- /**
134
- * When true, the `resetBy` conditions will be ignored for this write.
135
- * @default false
136
- */
137
- skipResets?: boolean;
138
- }
@@ -1,13 +0,0 @@
1
- export declare const transformToString: (value: unknown) => string | null;
2
- export declare const transformToStringArray: (value: unknown) => string[] | null;
3
- export declare const transformToNumber: (value: unknown) => number | null;
4
- export declare const transformToNumberArray: (value: unknown) => number[] | null;
5
- export declare const transformToBoolean: (value: unknown) => boolean | null;
6
- export declare const transformToBooleanArray: (value: unknown) => boolean[] | null;
7
- export declare const transformToDate: (value: unknown) => Date | null;
8
- export declare const transformToDateArray: (value: unknown) => Date[] | null;
9
- export declare const transformToSort: (value: unknown) => {
10
- active: string;
11
- direction: "asc" | "desc";
12
- } | null;
13
- export declare const transformToSortQueryParam: (value: unknown) => string | null;
@@ -1,31 +0,0 @@
1
- import { AnyQuery } from '../query';
2
- export declare class QueryStore {
3
- private _config?;
4
- private _garbageCollector;
5
- private _isInLowResourceMode;
6
- private _lastBlurTimestamp;
7
- private _storeChange$;
8
- private _queryCreated$;
9
- readonly storeChange$: import("rxjs").Observable<string>;
10
- readonly queryCreated$: import("rxjs").Observable<AnyQuery>;
11
- constructor(_config?: {
12
- enableChangeLogging?: boolean | undefined;
13
- enableGarbageCollectorLogging?: boolean | undefined;
14
- autoRefreshQueriesOnWindowFocus?: boolean | undefined;
15
- enableSmartPolling?: boolean | undefined;
16
- } | undefined);
17
- add(id: string, query: AnyQuery): void;
18
- get<T extends AnyQuery>(id: string): T | null;
19
- remove(id: string): void;
20
- forEach(callback: (value: AnyQuery, key: string) => void): void;
21
- refreshQueriesInUse(config?: {
22
- ignoreCacheValidity?: boolean;
23
- purgeUnused?: boolean;
24
- }): void;
25
- private _initSmartQueryHandling;
26
- private _logState;
27
- private _initGarbageCollector;
28
- private _stopGarbageCollector;
29
- private _runGarbageCollector;
30
- private _logGarbageCollector;
31
- }
@@ -1,3 +0,0 @@
1
- import { Observable } from 'rxjs';
2
- import { RequestConfig, RequestEvent } from './request.types';
3
- export declare const request: <Response = unknown>(config: RequestConfig) => Observable<RequestEvent<Response>>;
@@ -1,126 +0,0 @@
1
- import { HttpStatusCode } from './request.util';
2
- export type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS' | 'TRACE' | 'CONNECT' | 'PURGE' | 'LINK' | 'UNLINK' | 'GQL_QUERY' | 'GQL_MUTATE' | 'CUSTOM';
3
- export interface RequestError<Detail = unknown> {
4
- url: string;
5
- status: HttpStatusCode;
6
- statusText: string;
7
- detail: Detail;
8
- }
9
- export type RequestHeaders = Record<string, string>;
10
- export type QueryParams = object;
11
- export type PathParams = Record<string, string | number>;
12
- export type CacheAdapterFn = (headers: RequestHeaders) => number | null;
13
- export type RequestHeadersMethodMap = {
14
- [M in Method]?: RequestHeaders;
15
- };
16
- export interface PartialXhrState {
17
- headers: RequestHeaders;
18
- status: number;
19
- statusText: string;
20
- url: string;
21
- }
22
- export interface RequestRetryFnConfig {
23
- error: RequestError;
24
- headers: RequestHeaders;
25
- currentRetryCount: number;
26
- }
27
- export interface RequestRetryFnResult {
28
- retry: boolean;
29
- delay?: number;
30
- }
31
- export type RequestRetryFn = (config: RequestRetryFnConfig) => RequestRetryFnResult;
32
- export interface RequestConfig {
33
- method: Method;
34
- urlWithParams: string;
35
- body?: unknown;
36
- reportProgress?: boolean;
37
- withCredentials?: boolean;
38
- responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
39
- headers?: RequestHeaders;
40
- cacheAdapter?: CacheAdapterFn;
41
- retryFn?: RequestRetryFn;
42
- }
43
- export type RequestProgress = {
44
- current: number;
45
- percentage?: number;
46
- total?: number;
47
- };
48
- export type RequestEvent<Response = unknown> = {
49
- type: 'start';
50
- headers: RequestHeaders;
51
- isRetry?: boolean;
52
- retryNumber?: number;
53
- retryDelay?: number;
54
- } | {
55
- type: 'delay-retry';
56
- headers: RequestHeaders;
57
- retryNumber: number;
58
- retryDelay: number;
59
- } | {
60
- type: 'download-progress';
61
- headers: RequestHeaders;
62
- progress: RequestProgress;
63
- partialText?: string;
64
- } | {
65
- type: 'upload-progress';
66
- headers: RequestHeaders;
67
- progress: RequestProgress;
68
- } | {
69
- type: 'success';
70
- headers: RequestHeaders;
71
- response: Response;
72
- expiresInTimestamp?: number;
73
- } | {
74
- type: 'failure';
75
- headers: RequestHeaders;
76
- error: RequestError;
77
- } | {
78
- type: 'cancel';
79
- headers: RequestHeaders;
80
- };
81
- export interface BuildQueryStringConfig {
82
- /**
83
- * Object notation to use for nested objects.
84
- *
85
- * @example
86
- * // dot notation
87
- * { foo: { bar: 'baz' } } => "foo.bar=baz"
88
- *
89
- * @example
90
- * // bracket notation
91
- * { foo: { bar: 'baz' } } => "foo[bar]=baz"
92
- *
93
- * @default 'bracket'
94
- */
95
- objectNotation?: 'dot' | 'bracket';
96
- /**
97
- * Whether to write array indexes in bracket notation.
98
- *
99
- * @example
100
- * // true
101
- * { foo: ['bar', 'baz'] } => "foo[0]=bar&foo[1]=baz"
102
- *
103
- * @example
104
- * // false
105
- * { foo: ['bar', 'baz'] } => "foo[]=bar&foo[]=baz"
106
- *
107
- * @default false
108
- */
109
- writeArrayIndexes?: boolean;
110
- /**
111
- * A list of values that should be ignored when building the query string.
112
- *
113
- * Also have a look at `ignoredValuesFns`.
114
- *
115
- * @default [undefined, null, Infinity, -Infinity]
116
- */
117
- ignoredValues?: Array<unknown>;
118
- /**
119
- * A list of functions that should be used to determine whether a value should be ignored when building the query string.
120
- *
121
- * Also have a look at `ignoredValues`.
122
- *
123
- * @default [isNaN, isEmptyString]
124
- */
125
- ignoredValuesFns?: Array<(value: unknown) => boolean>;
126
- }
@@ -1,92 +0,0 @@
1
- import { AnyRoute } from '../query';
2
- import { BuildQueryStringConfig, Method, PathParams, QueryParams, RequestError, RequestHeaders, RequestRetryFn } from './request.types';
3
- export declare const isNaN: (value: unknown) => boolean;
4
- export declare const isEmptyString: (value: unknown) => boolean;
5
- export declare const isRequestError: <T = unknown>(error: unknown) => error is RequestError<T>;
6
- export declare const buildRoute: (options: {
7
- base: string;
8
- route: AnyRoute | null | undefined;
9
- pathParams?: PathParams;
10
- queryParams?: QueryParams;
11
- queryParamConfig?: BuildQueryStringConfig;
12
- }) => string;
13
- export declare const buildQueryString: (params: QueryParams, config?: BuildQueryStringConfig) => string | null;
14
- export declare const extractExpiresInSeconds: (headers: RequestHeaders) => number | null;
15
- export declare const buildTimestampFromSeconds: (seconds: number | null) => number | null;
16
- export declare const serializeBody: (body: unknown) => ArrayBuffer | URLSearchParams | Blob | FormData | string | null;
17
- export declare const transformMethod: (config: {
18
- method: Method;
19
- transferVia?: 'GET' | 'POST';
20
- }) => "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "TRACE" | "CONNECT" | "PURGE" | "LINK" | "UNLINK" | "CUSTOM";
21
- export declare const detectContentTypeHeader: (body: unknown) => string | null;
22
- export declare const hasHeader: (headers: RequestHeaders, header: string) => boolean;
23
- export declare const forEachHeader: (headers: RequestHeaders, callback: (value: string, key: string) => void) => void;
24
- export declare const parseAllXhrResponseHeaders: (xhr: XMLHttpRequest) => RequestHeaders;
25
- export declare const getResponseUrl: (xhr: XMLHttpRequest) => string | null;
26
- export declare const shouldRetryRequest: RequestRetryFn;
27
- export declare const enum HttpStatusCode {
28
- Unknown = 0,
29
- Continue = 100,
30
- SwitchingProtocols = 101,
31
- Processing = 102,
32
- EarlyHints = 103,
33
- Ok = 200,
34
- Created = 201,
35
- Accepted = 202,
36
- NonAuthoritativeInformation = 203,
37
- NoContent = 204,
38
- ResetContent = 205,
39
- PartialContent = 206,
40
- MultiStatus = 207,
41
- AlreadyReported = 208,
42
- ImUsed = 226,
43
- MultipleChoices = 300,
44
- MovedPermanently = 301,
45
- Found = 302,
46
- SeeOther = 303,
47
- NotModified = 304,
48
- UseProxy = 305,
49
- Unused = 306,
50
- TemporaryRedirect = 307,
51
- PermanentRedirect = 308,
52
- BadRequest = 400,
53
- Unauthorized = 401,
54
- PaymentRequired = 402,
55
- Forbidden = 403,
56
- NotFound = 404,
57
- MethodNotAllowed = 405,
58
- NotAcceptable = 406,
59
- ProxyAuthenticationRequired = 407,
60
- RequestTimeout = 408,
61
- Conflict = 409,
62
- Gone = 410,
63
- LengthRequired = 411,
64
- PreconditionFailed = 412,
65
- PayloadTooLarge = 413,
66
- UriTooLong = 414,
67
- UnsupportedMediaType = 415,
68
- RangeNotSatisfiable = 416,
69
- ExpectationFailed = 417,
70
- ImATeapot = 418,
71
- MisdirectedRequest = 421,
72
- UnprocessableEntity = 422,
73
- Locked = 423,
74
- FailedDependency = 424,
75
- TooEarly = 425,
76
- UpgradeRequired = 426,
77
- PreconditionRequired = 428,
78
- TooManyRequests = 429,
79
- RequestHeaderFieldsTooLarge = 431,
80
- UnavailableForLegalReasons = 451,
81
- InternalServerError = 500,
82
- NotImplemented = 501,
83
- BadGateway = 502,
84
- ServiceUnavailable = 503,
85
- GatewayTimeout = 504,
86
- HttpVersionNotSupported = 505,
87
- VariantAlsoNegotiates = 506,
88
- InsufficientStorage = 507,
89
- LoopDetected = 508,
90
- NotExtended = 510,
91
- NetworkAuthenticationRequired = 511
92
- }
@@ -1,19 +0,0 @@
1
- import { HttpStatusCode } from '../request';
2
- export interface SymfonyErrorTrace {
3
- args: string[];
4
- class: string;
5
- file: string;
6
- function: string;
7
- line: number;
8
- namespace: string;
9
- short_class: string;
10
- type: string;
11
- }
12
- export interface SymfonyError {
13
- class: string;
14
- detail: string;
15
- status: HttpStatusCode;
16
- title: string;
17
- trace: SymfonyErrorTrace[];
18
- type: string;
19
- }