@ethlete/query 0.1.0-next.1 → 0.1.0-next.10

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 (30) hide show
  1. package/esm2020/lib/auth/bearer-auth-provider.mjs +4 -3
  2. package/esm2020/lib/directives/infinity-query-trigger.directive.mjs +3 -3
  3. package/esm2020/lib/directives/infinity-query.directive.mjs +37 -10
  4. package/esm2020/lib/directives/query.directive.mjs +3 -3
  5. package/esm2020/lib/infinite-query/infinity-query.types.mjs +1 -1
  6. package/esm2020/lib/query/query.mjs +6 -2
  7. package/esm2020/lib/query/query.utils.mjs +17 -2
  8. package/esm2020/lib/query-form/query-form.mjs +7 -4
  9. package/esm2020/lib/query-form/query-form.types.mjs +1 -1
  10. package/esm2020/lib/query-form/query-form.utils.mjs +21 -1
  11. package/esm2020/lib/request/request.mjs +5 -3
  12. package/esm2020/lib/request/request.types.mjs +1 -1
  13. package/esm2020/lib/request/request.util.mjs +24 -6
  14. package/esm2020/lib/utils/deep-freeze.util.mjs +5 -1
  15. package/fesm2015/ethlete-query.mjs +126 -29
  16. package/fesm2015/ethlete-query.mjs.map +1 -1
  17. package/fesm2020/ethlete-query.mjs +123 -29
  18. package/fesm2020/ethlete-query.mjs.map +1 -1
  19. package/lib/directives/infinity-query-trigger.directive.d.ts +1 -1
  20. package/lib/directives/infinity-query.directive.d.ts +8 -2
  21. package/lib/directives/query.directive.d.ts +1 -1
  22. package/lib/infinite-query/infinity-query.types.d.ts +5 -2
  23. package/lib/query/query.utils.d.ts +8 -3
  24. package/lib/query-form/query-form.d.ts +1 -1
  25. package/lib/query-form/query-form.types.d.ts +11 -1
  26. package/lib/query-form/query-form.utils.d.ts +5 -0
  27. package/lib/request/request.types.d.ts +2 -0
  28. package/lib/request/request.util.d.ts +2 -2
  29. package/lib/utils/deep-freeze.util.d.ts +1 -1
  30. package/package.json +6 -5
@@ -4,6 +4,7 @@ import { BaseArguments } from '../query';
4
4
  import { AnyQueryCreator } from '../query-client';
5
5
  import { RequestError } from '../request';
6
6
  import * as i0 from "@angular/core";
7
+ import * as i1 from "@ethlete/core";
7
8
  interface InfinityQueryContext<Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments, any, unknown[]>> {
8
9
  $implicit: Q['response']['arrayType'] | null;
9
10
  infinityQuery: Q['response']['arrayType'] | null;
@@ -18,26 +19,31 @@ interface InfinityQueryContext<Q extends InfinityQueryConfig<AnyQueryCreator, Ba
18
19
  }
19
20
  export declare const INFINITY_QUERY_TOKEN: InjectionToken<InfinityQueryDirective<any>>;
20
21
  export declare class InfinityQueryDirective<Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments, any, unknown[]>> implements OnInit, OnDestroy {
22
+ private readonly _queryConfigChanged$;
21
23
  private readonly _viewContext;
22
24
  private _infinityQueryInstance;
23
- private _destroy$;
25
+ private readonly _destroy$;
24
26
  private readonly _cdr;
25
27
  private readonly _viewContainerRef;
26
28
  private readonly _mainTemplateRef;
27
29
  private readonly _errorHandler;
30
+ private readonly _data$;
28
31
  private _isMainViewCreated;
29
32
  get infinityQuery(): Q;
30
33
  set infinityQuery(v: Q);
31
34
  private _infinityQuery;
32
35
  get context(): InfinityQueryContext<Q>;
33
36
  get instance(): InfinityQuery<AnyQueryCreator, import("../query").Query<any, any, any, any, any>, BaseArguments, any, unknown[]> | null;
37
+ get data$(): import("rxjs").Observable<Q["response"]["arrayType"]>;
38
+ get data(): Q["response"]["arrayType"];
34
39
  static ngTemplateContextGuard<Q extends InfinityQueryConfig<AnyQueryCreator, BaseArguments, any, unknown[]>>(dir: InfinityQueryDirective<Q>, ctx: unknown): ctx is InfinityQueryContext<Q>;
35
40
  ngOnInit(): void;
36
41
  ngOnDestroy(): void;
37
42
  private _setupInfinityQuery;
38
43
  _loadNextPage(): void;
39
44
  private _renderMainView;
45
+ private _cleanup;
40
46
  static ɵfac: i0.ɵɵFactoryDeclaration<InfinityQueryDirective<any>, never>;
41
- static ɵdir: i0.ɵɵDirectiveDeclaration<InfinityQueryDirective<any>, "[infinityQuery]", never, { "infinityQuery": "infinityQuery"; }, {}, never, never, true>;
47
+ static ɵdir: i0.ɵɵDirectiveDeclaration<InfinityQueryDirective<any>, "[infinityQuery]", ["infinityQuery"], { "infinityQuery": "infinityQuery"; }, {}, never, never, true, [{ directive: typeof i1.DestroyDirective; inputs: {}; outputs: {}; }]>;
42
48
  }
43
49
  export {};
@@ -31,6 +31,6 @@ export declare class QueryDirective<Q extends AnyQuery | null> implements OnInit
31
31
  private _updateView;
32
32
  private _renderMainView;
33
33
  static ɵfac: i0.ɵɵFactoryDeclaration<QueryDirective<any>, never>;
34
- static ɵdir: i0.ɵɵDirectiveDeclaration<QueryDirective<any>, "[query]", never, { "query": "query"; "cache": "queryCache"; }, {}, never, never, true>;
34
+ static ɵdir: i0.ɵɵDirectiveDeclaration<QueryDirective<any>, "[query]", never, { "query": "query"; "cache": "queryCache"; }, {}, never, never, true, never>;
35
35
  }
36
36
  export {};
@@ -1,5 +1,5 @@
1
- import { BaseArguments } from '../query';
2
- import { AnyQueryCreator } from '../query-client';
1
+ import { BaseArguments, QueryStateData } from '../query';
2
+ import { AnyQueryCreator, QueryCreatorArgs, QueryCreatorReturnType } from '../query-client';
3
3
  export declare type InfinityQueryParamLocation = 'path' | 'query' | 'body' | 'header' | 'variable';
4
4
  export declare type AppendItemsLocation = 'start' | 'end';
5
5
  export interface PageParamCalculatorOptions {
@@ -89,3 +89,6 @@ export interface InfinityQueryConfig<QueryCreator extends AnyQueryCreator, Argum
89
89
  totalPagesExtractor?: (data: TotalPagesExtractorOptions<QueryResponse>) => number;
90
90
  };
91
91
  }
92
+ declare type OmitUndefined<T> = T extends undefined ? never : T;
93
+ export declare type InfinityQueryConfigType<QueryCreator extends AnyQueryCreator, InfinityResponse extends unknown[]> = InfinityQueryConfig<QueryCreator, OmitUndefined<QueryCreatorArgs<QueryCreator>>, QueryStateData<QueryCreatorReturnType<QueryCreator>['state']>, InfinityResponse>;
94
+ export {};
@@ -1,10 +1,14 @@
1
1
  import { Observable } from 'rxjs';
2
2
  import { ResponseTransformerType } from '../query-client';
3
3
  import { RequestHeaders } from '../request';
4
- import { BaseArguments, Cancelled, Failure, GqlQueryConfig, Loading, Prepared, QueryState, QueryStateData, QueryStateRawData, RouteType, Success } from './query.types';
5
- export declare function filterSuccess(): <T extends QueryState<unknown, unknown>, Response_1 extends QueryStateData<T>, RawResponse extends QueryStateRawData<T>>(source: Observable<T>) => Observable<Success<Response_1, RawResponse>>;
6
- export declare function filterFailure(): <T extends QueryState<unknown, unknown>>(source: Observable<T>) => Observable<Failure>;
4
+ import { AnyQuery, BaseArguments, Cancelled, Failure, GqlQueryConfig, Loading, Prepared, QueryRawResponseType, QueryResponseType, QueryState, QueryStateData, QueryStateRawData, QueryStateType, RouteType, Success } from './query.types';
5
+ declare type OmitNull<T> = T extends null ? never : T;
6
+ export declare function filterSuccess(): <T extends QueryState<unknown, unknown> | null, Response_1 extends QueryStateData<OmitNull<T>>, RawResponse extends QueryStateRawData<OmitNull<T>>>(source: Observable<T>) => Observable<Success<Response_1, RawResponse>>;
7
+ export declare function filterFailure(): <T extends QueryState<unknown, unknown> | null>(source: Observable<T>) => Observable<Failure>;
8
+ export declare function filterQueryStates(allowedStates: QueryStateType[]): <T extends QueryState<unknown, unknown> | null>(source: Observable<T>) => Observable<T>;
7
9
  export declare function takeUntilResponse(): <T extends QueryState<unknown, unknown>>(source: Observable<T>) => Observable<T>;
10
+ export declare function filterNull(): <T>(source: Observable<T>) => Observable<OmitNull<T>>;
11
+ export declare function switchQueryState(): <T extends AnyQuery | null, Response_1 extends QueryResponseType<OmitNull<T>>, RawResponse extends QueryRawResponseType<OmitNull<T>>>(source: Observable<T>) => Observable<QueryState<OmitNull<Response_1>, OmitNull<RawResponse>> | null>;
8
12
  export declare const isQueryStateLoading: (state: QueryState | null | undefined) => state is Loading;
9
13
  export declare const isQueryStateSuccess: (state: QueryState | null | undefined) => state is Success<unknown, unknown>;
10
14
  export declare const isQueryStateFailure: (state: QueryState | null | undefined) => state is Failure;
@@ -12,3 +16,4 @@ export declare const isQueryStateCancelled: (state: QueryState | null | undefine
12
16
  export declare const isQueryStatePrepared: (state: QueryState | null | undefined) => state is Prepared;
13
17
  export declare const mergeHeaders: (...headers: Array<RequestHeaders | null | undefined>) => RequestHeaders | null | undefined;
14
18
  export declare const isGqlQueryConfig: <Response_1, Arguments extends BaseArguments | undefined, Route extends RouteType<Arguments> | undefined, ResponseTransformer extends ResponseTransformerType<Response_1> | undefined>(config: unknown) => config is GqlQueryConfig<Route, Response_1, Arguments, ResponseTransformer>;
19
+ export {};
@@ -1,6 +1,6 @@
1
1
  import { FormGroup } from '@angular/forms';
2
2
  import { Observable } from 'rxjs';
3
- import { QueryFormGroup, QueryFieldOptions, QueryFormValue } from './query-form.types';
3
+ import { QueryFieldOptions, QueryFormGroup, QueryFormValue } from './query-form.types';
4
4
  export declare class QueryField<T> {
5
5
  data: QueryFieldOptions<T>;
6
6
  changes$: Observable<T | null>;
@@ -26,14 +26,24 @@ export interface QueryFieldOptions<T = unknown> {
26
26
  * E.g. for a number field, the value from the url query params is a string, but the field requires a number.
27
27
  *
28
28
  * The following common transformations are already implemented:
29
+ * - `transformToString`
30
+ * - `transformToStringArray`
29
31
  * - `transformToNumber`
30
32
  * - `transformToNumberArray`
31
33
  * - `transformToBoolean`
32
34
  * - `transformToBooleanArray`
33
35
  * - `transformToDate` (expects a string in the default js format)
34
36
  * - `transformToDateArray` (expects strings in the default js format)
37
+ * - `transformToSort` (expects a string in the format `field:direction`)
35
38
  */
36
- queryParamTransformFn?: (val: unknown) => T | null;
39
+ queryParamToValueTransformFn?: (val: unknown) => T | null;
40
+ /**
41
+ * A function that transforms the value of the field to a value that can be appended to the url query params.
42
+ *
43
+ * The following common transformations are already implemented:
44
+ * - `transformToSortQueryParam` (returns an object containing `field` and `direction` properties)
45
+ */
46
+ valueToQueryParamTransformFn?: (val: T | null) => unknown;
37
47
  }
38
48
  export declare type QueryFormGroup<T extends Record<string, QueryField<any>>> = {
39
49
  [Property in keyof T]: T[Property]['control'];
@@ -6,3 +6,8 @@ export declare const transformToBoolean: (value: unknown) => boolean | null;
6
6
  export declare const transformToBooleanArray: (value: unknown) => boolean[] | null;
7
7
  export declare const transformToDate: (value: unknown) => Date | null;
8
8
  export declare const transformToDateArray: (value: unknown) => Date[] | null;
9
+ export declare const transformToSort: (value: unknown) => {
10
+ active: string;
11
+ direction: "desc" | "asc";
12
+ } | null;
13
+ export declare const transformToSortQueryParam: (value: unknown) => string | null;
@@ -4,6 +4,8 @@ export interface RequestError<Detail = unknown> {
4
4
  message: string;
5
5
  detail: Detail;
6
6
  raw: unknown;
7
+ route: string;
8
+ requestInit?: RequestInit;
7
9
  }
8
10
  export declare type ParamPrimitive = string | number | boolean | null | undefined;
9
11
  export declare type Params = Record<string | number | symbol, ParamPrimitive | ParamArray>;
@@ -1,4 +1,4 @@
1
- import { QueryParams, Params, RequestError, ParamArray, UnfilteredParamPrimitive, Method } from './request.types';
1
+ import { Method, ParamArray, Params, QueryParams, RequestError, UnfilteredParamPrimitive } from './request.types';
2
2
  export declare const isRequestError: (error: unknown) => error is RequestError<unknown>;
3
3
  export declare const isAbortRequestError: (error: unknown) => error is RequestError<unknown>;
4
4
  export declare const buildRoute: (options: {
@@ -14,7 +14,7 @@ export declare const filterInvalidParams: (params: QueryParams) => Params;
14
14
  export declare const isParamValid: (primitive: UnfilteredParamPrimitive) => boolean;
15
15
  export declare const extractExpiresInSeconds: (headers: Headers) => number | null;
16
16
  export declare const buildTimestampFromSeconds: (seconds: number | null) => number | null;
17
- export declare const buildRequestError: <ErrorResponse = unknown>(error: unknown) => Promise<RequestError<null> | RequestError<ErrorResponse>>;
17
+ export declare const buildRequestError: <ErrorResponse = unknown>(error: unknown, route: string, requestInit?: RequestInit) => Promise<RequestError<null> | RequestError<ErrorResponse>>;
18
18
  export declare const buildBody: (body: unknown) => string | FormData | null;
19
19
  export declare const transformMethod: (method: Method) => "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS" | "TRACE" | "CONNECT" | "PURGE" | "LINK" | "UNLINK" | "CUSTOM";
20
20
  export declare const guessContentType: (body: unknown) => "text/plain" | "multipart/form-data" | "application/json" | null;
@@ -1 +1 @@
1
- export declare const deepFreeze: <T extends Record<string, unknown>>(object: T) => Readonly<T>;
1
+ export declare const deepFreeze: <T extends Record<string, unknown>>(object: T) => T;
package/package.json CHANGED
@@ -1,15 +1,16 @@
1
1
  {
2
2
  "name": "@ethlete/query",
3
- "version": "0.1.0-next.1",
3
+ "version": "0.1.0-next.10",
4
4
  "dependencies": {
5
5
  "tslib": "^2.3.0"
6
6
  },
7
7
  "peerDependencies": {
8
- "@angular/common": "^14.2.0",
9
- "@angular/core": "^14.2.0",
8
+ "@angular/common": "^14.2.0 || ^15.0.0",
9
+ "@angular/core": "^14.2.0 || ^15.0.0",
10
10
  "rxjs": "7.5.7",
11
- "@angular/forms": "14.2.9",
12
- "@angular/router": "14.2.9"
11
+ "@ethlete/core": "0.2.0-next.8",
12
+ "@angular/forms": "15.0.2",
13
+ "@angular/router": "15.0.2"
13
14
  },
14
15
  "module": "fesm2015/ethlete-query.mjs",
15
16
  "es2020": "fesm2020/ethlete-query.mjs",