@ethlete/query 4.5.0 → 4.6.1

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/esm2022/index.mjs +2 -1
  2. package/esm2022/lib/class-validator/class-validator.types.mjs +2 -0
  3. package/esm2022/lib/class-validator/class-validator.utils.mjs +4 -0
  4. package/esm2022/lib/class-validator/index.mjs +3 -0
  5. package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +3 -3
  6. package/esm2022/lib/directives/infinity-query.directive.mjs +3 -3
  7. package/esm2022/lib/directives/query.directive.mjs +10 -7
  8. package/esm2022/lib/entity/entity-store.mjs +28 -12
  9. package/esm2022/lib/entity/entity.types.mjs +1 -1
  10. package/esm2022/lib/entity/entity.utils.mjs +26 -2
  11. package/esm2022/lib/query/query.types.mjs +1 -1
  12. package/esm2022/lib/query/query.utils.mjs +10 -1
  13. package/esm2022/lib/query-form/query-form.mjs +10 -5
  14. package/esm2022/lib/request/request.util.mjs +2 -1
  15. package/esm2022/lib/symfony/symfony.utils.mjs +4 -1
  16. package/fesm2022/ethlete-query.mjs +92 -27
  17. package/fesm2022/ethlete-query.mjs.map +1 -1
  18. package/index.d.ts +1 -0
  19. package/lib/auth/auth-provider.types.d.ts +0 -5
  20. package/lib/auth/bearer-auth-provider.d.ts +0 -4
  21. package/lib/class-validator/class-validator.types.d.ts +6 -0
  22. package/lib/class-validator/class-validator.utils.d.ts +2 -0
  23. package/lib/class-validator/index.d.ts +2 -0
  24. package/lib/directives/query.directive.d.ts +9 -5
  25. package/lib/entity/entity-store.d.ts +4 -0
  26. package/lib/entity/entity.types.d.ts +20 -0
  27. package/lib/entity/entity.utils.d.ts +10 -0
  28. package/lib/query/query.d.ts +0 -16
  29. package/lib/query/query.types.d.ts +1 -14
  30. package/lib/query/query.utils.d.ts +4 -0
  31. package/lib/symfony/symfony.utils.d.ts +2 -0
  32. package/package.json +1 -1
package/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './lib/auth';
2
+ export * from './lib/class-validator';
2
3
  export * from './lib/directives';
3
4
  export * from './lib/entity';
4
5
  export * from './lib/gql';
@@ -5,11 +5,6 @@ export interface AuthProvider {
5
5
  * This will automatically get injected into every query that has the `secure` property set to `true`.
6
6
  */
7
7
  header: Record<string, string>;
8
- /**
9
- * Cleanup function that gets called once the auth provider gets destroyed.
10
- * @internal
11
- */
12
- cleanUp(): void;
13
8
  }
14
9
  export interface AuthProviderBasicConfig {
15
10
  /**
@@ -18,8 +18,4 @@ export declare class BearerAuthProvider<T extends AnyQueryCreator> implements Au
18
18
  enableCookie(): void;
19
19
  disableCookie(): void;
20
20
  private _prepareForRefresh;
21
- /**
22
- * @internal
23
- */
24
- _refreshQuery(): import("../query").Query<any, any, any, any, any, any> | null | undefined;
25
21
  }
@@ -0,0 +1,6 @@
1
+ import { HttpStatusCode } from '../request';
2
+ export interface ClassValidatorError {
3
+ statusCode: HttpStatusCode;
4
+ message: string[];
5
+ error: string;
6
+ }
@@ -0,0 +1,2 @@
1
+ import { ClassValidatorError } from './class-validator.types';
2
+ export declare const isClassValidatorError: (error: unknown) => error is ClassValidatorError;
@@ -0,0 +1,2 @@
1
+ export * from './class-validator.types';
2
+ export * from './class-validator.utils';
@@ -1,17 +1,17 @@
1
1
  import { OnDestroy, OnInit } from '@angular/core';
2
- import { AnyQuery, AnyQueryCollection, QueryOf } from '../query';
2
+ import { AnyQuery, AnyQueryCollection, QueryCollectionKeysOf, QueryOf } from '../query';
3
3
  import { QueryDataOf } from '../query-creator';
4
4
  import { RequestError, RequestProgress } from '../request';
5
5
  import * as i0 from "@angular/core";
6
- interface QueryContext<Q extends AnyQuery | null> {
6
+ interface QueryContext<Q extends AnyQuery | AnyQueryCollection | null> {
7
7
  /**
8
8
  * The queries's response data.
9
9
  */
10
- $implicit: QueryDataOf<Q> | null;
10
+ $implicit: QueryDataOf<QueryOf<Q>> | null;
11
11
  /**
12
12
  * The queries's response data.
13
13
  */
14
- etQuery: QueryDataOf<Q> | null;
14
+ etQuery: QueryDataOf<QueryOf<Q>> | null;
15
15
  /**
16
16
  * Is true when the query is triggered by user interaction.
17
17
  */
@@ -28,6 +28,10 @@ interface QueryContext<Q extends AnyQuery | null> {
28
28
  * The query's error state.
29
29
  */
30
30
  error: RequestError<unknown> | null;
31
+ /**
32
+ * The query's scope (only available when the query is a collection)
33
+ */
34
+ scope: QueryCollectionKeysOf<Q> | null;
31
35
  }
32
36
  export declare class QueryDirective<Q extends AnyQuery | AnyQueryCollection | null> implements OnInit, OnDestroy {
33
37
  private _mainTemplateRef;
@@ -43,7 +47,7 @@ export declare class QueryDirective<Q extends AnyQuery | AnyQueryCollection | nu
43
47
  get cache(): boolean;
44
48
  set cache(v: boolean);
45
49
  private _cache;
46
- static ngTemplateContextGuard<Q extends AnyQuery | AnyQueryCollection | null>(dir: QueryDirective<Q>, ctx: unknown): ctx is QueryContext<QueryOf<Q>>;
50
+ static ngTemplateContextGuard<Q extends AnyQuery | AnyQueryCollection | null>(dir: QueryDirective<Q>, ctx: unknown): ctx is QueryContext<Q>;
47
51
  ngOnInit(): void;
48
52
  ngOnDestroy(): void;
49
53
  private _subscribeToQuery;
@@ -7,17 +7,21 @@ export declare class EntityStore<T> {
7
7
  constructor(_config: EntityStoreConfig);
8
8
  select(key: EntityKey): Observable<T | null>;
9
9
  select(keys: EntityKey[]): Observable<T[]>;
10
+ select(keys: EntityKey[][]): Observable<T[]>;
10
11
  /**
11
12
  * **Note:** Prefer `select` over `selectWhere` when possible.
12
13
  */
13
14
  selectWhere(predicate: (value: T) => boolean): Observable<T[]>;
14
15
  set(key: EntityKey, value: T): void;
15
16
  set(keys: EntityKey[], values: T[]): void;
17
+ set(keys: EntityKey[][], values: T[][]): void;
16
18
  remove(key: EntityKey): void;
17
19
  remove(keys: EntityKey[]): void;
20
+ remove(keys: EntityKey[][]): void;
18
21
  logState(): void;
19
22
  private _select;
20
23
  private _selectMany;
21
24
  private _set;
22
25
  private _remove;
26
+ private _normalizeKeys;
23
27
  }
@@ -3,3 +3,23 @@ export interface EntityStoreConfig {
3
3
  name: string;
4
4
  logActions?: boolean;
5
5
  }
6
+ export interface InsertFromConfig<OriginStoreType, OriginKeys extends keyof NonNullable<OriginStoreType>, IdFn extends (value: NonNullable<OriginStoreType>) => EntityKey | EntityKey[]> {
7
+ /**
8
+ * The property key of which the value should be replaced.
9
+ */
10
+ for: OriginKeys;
11
+ /**
12
+ * A function that returns the id of the entity. Can also return an array of ids.
13
+ */
14
+ id: IdFn;
15
+ }
16
+ export interface RemoveFromConfig<T> {
17
+ /**
18
+ * The where function to select the entities to remove.
19
+ */
20
+ where: (entity: T) => boolean;
21
+ /**
22
+ * A function that returns the id of the entity.
23
+ */
24
+ id: (entity: T) => EntityKey;
25
+ }
@@ -1,2 +1,12 @@
1
1
  import { Paginated } from '@ethlete/types';
2
+ import { EntityStore } from './entity-store';
3
+ import { EntityKey, InsertFromConfig, RemoveFromConfig } from './entity.types';
2
4
  export declare function mapToPaginated<T>(response: Paginated<T>): import("rxjs").OperatorFunction<unknown, Paginated<T>>;
5
+ /**
6
+ * Use an other store to represent a property of the current entity.
7
+ */
8
+ export declare const insertFrom: <OriginStoreType, OriginKeys extends keyof NonNullable<OriginStoreType>, SubStoreType extends NonNullable<OriginStoreType>[OriginKeys] extends (infer U)[] ? U : NonNullable<OriginStoreType>[OriginKeys], IdFn extends (value: NonNullable<OriginStoreType>) => EntityKey | EntityKey[], ComputedEntityType extends ReturnType<IdFn> extends unknown[] ? OriginStoreType : Omit<OriginStoreType, OriginKeys> & { [K in OriginKeys]: SubStoreType | null; }>(store: EntityStore<SubStoreType>, { for: key, id }: InsertFromConfig<OriginStoreType, OriginKeys, IdFn>) => import("rxjs").OperatorFunction<OriginStoreType, ComputedEntityType | null>;
9
+ /**
10
+ * Remove entities from a store based on a where function.
11
+ */
12
+ export declare const removeFrom: <T>(store: EntityStore<T>, { where, id }: RemoveFromConfig<T>) => void;
@@ -12,10 +12,6 @@ export declare class Query<Response, Arguments extends BaseArguments | undefined
12
12
  private _requestSubscription;
13
13
  private _onAbort$;
14
14
  private _currentPollConfig;
15
- /**
16
- * @internal
17
- */
18
- _isPollingPaused: boolean;
19
15
  private readonly _state$;
20
16
  private get _nextId();
21
17
  get state$(): Observable<QueryState<Data>>;
@@ -30,14 +26,6 @@ export declare class Query<Response, Arguments extends BaseArguments | undefined
30
26
  get isInUse(): boolean;
31
27
  get isPolling(): boolean;
32
28
  get autoRefreshOnConfig(): Readonly<QueryAutoRefreshConfig>;
33
- /**
34
- * @internal
35
- */
36
- get _enableSmartPolling(): boolean;
37
- /**
38
- * @internal
39
- */
40
- get _arguments(): Arguments;
41
29
  get store(): Store | null;
42
30
  constructor(_client: QueryClient, _queryConfig: RestQueryConfig<Route, Response, Arguments, Store, Data, Id> | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>, _routeWithParams: Route, _args: Arguments);
43
31
  execute(options?: ExecuteQueryOptions): this;
@@ -46,10 +34,6 @@ export declare class Query<Response, Arguments extends BaseArguments | undefined
46
34
  stopPolling(): this;
47
35
  pausePolling(): this;
48
36
  resumePolling(): this;
49
- /**
50
- * @internal
51
- */
52
- _destroy(): void;
53
37
  private _getBearerAuthProvider;
54
38
  private _updateEntityState;
55
39
  private _transformState;
@@ -196,20 +196,6 @@ export interface ExecuteQueryOptions {
196
196
  * @default false
197
197
  */
198
198
  skipCache?: boolean;
199
- /**
200
- * The trigger type for this query.
201
- * - `program`: The query was triggered by the user.
202
- * - `poll`: The query was triggered by polling.
203
- * - `auto`: The query was triggered by an auto refresh event.
204
- * @default 'program'
205
- * @internal
206
- */
207
- _triggeredVia?: QueryTrigger;
208
- /**
209
- * Whether this is a retry of an unauthorized request.
210
- * @internal
211
- */
212
- _isUnauthorizedRetry?: boolean;
213
199
  }
214
200
  export type RouteType<Arguments extends BaseArguments | undefined> = Arguments extends {
215
201
  pathParams: infer PathParams;
@@ -288,6 +274,7 @@ export type AnyQueryCollection = QueryCollectionOf<AnyQueryCreatorCollection>;
288
274
  export type QueryOf<T extends AnyQueryCollection | AnyQuery | null> = T extends AnyQuery ? T : T extends AnyQueryCollection ? T['query'] : never;
289
275
  export type AnyQueryCollectionResponse<T extends AnyQueryCollection> = QueryResponseOf<T['query']>;
290
276
  export type AnyQueryCollectionData<T extends AnyQueryCollection> = QueryDataOf<T['query']>;
277
+ export type QueryCollectionKeysOf<T extends AnyQueryCollection | AnyQuery | null> = T extends AnyQueryCollection ? T['type'] : never;
291
278
  export interface ResetPageOnErrorOperatorConfig<J extends QueryForm<any>> {
292
279
  /**
293
280
  * The query form to reset the page of.
@@ -30,6 +30,10 @@ export declare const isAutoRefresh: (state: QueryState | null | undefined) => bo
30
30
  export declare const mergeHeaders: (...headers: Array<RequestHeaders | null | undefined>) => RequestHeaders | null | undefined;
31
31
  export declare const isGqlQueryConfig: <Response_1, Arguments extends BaseArguments | undefined, Route extends RouteType<Arguments> | undefined, Store extends EntityStore<unknown>, Data, Id>(config: unknown) => config is GqlQueryConfig<Route, Response_1, Arguments, Store, Data, Id>;
32
32
  export declare const isQuery: <T extends AnyQuery>(query: unknown) => query is T;
33
+ export declare const isQueryCollection: <T extends {
34
+ type: string;
35
+ query: import("@ethlete/query").Query<any, any, any, any, any, any>;
36
+ }>(query: unknown) => query is T;
33
37
  export declare const createQueryCollection: <T extends AnyQueryCreatorCollection, R extends QueryCollectionOf<T>>(queryMap: T) => BehaviorSubject<R | null>;
34
38
  export declare const extractQuery: <T extends AnyQuery | {
35
39
  type: string;
@@ -1,3 +1,5 @@
1
+ import { FormViolationListView } from '@ethlete/types';
1
2
  import { SymfonyError } from './symfony.types';
2
3
  export declare const isSymfonyError: (error: unknown) => error is SymfonyError;
3
4
  export declare const isSymfonyPagerfantaOutOfRangeError: (error: unknown) => error is SymfonyError;
5
+ export declare const isSymfonyFormViolationListError: (error: unknown) => error is FormViolationListView;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ethlete/query",
3
- "version": "4.5.0",
3
+ "version": "4.6.1",
4
4
  "dependencies": {
5
5
  "tslib": "^2.5.0"
6
6
  },