@ethlete/query 4.14.0 → 4.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.
@@ -28,6 +28,7 @@ export declare class QueryDevtoolsComponent {
28
28
  private readonly _queries$;
29
29
  protected readonly queries: import("@angular/core").Signal<AnyQuery[] | undefined>;
30
30
  protected readonly selectedQuery: import("@angular/core").Signal<AnyQuery | null>;
31
+ protected readonly selectedQuery$: import("rxjs").Observable<AnyQuery | null>;
31
32
  protected selectedQueryEntityStore: import("@angular/core").Signal<EntityStore<unknown> | null>;
32
33
  protected readonly selectedQueryEntityStore$: import("rxjs").Observable<EntityStore<unknown> | null>;
33
34
  protected readonly selectedQueryEntityStoreValue$: import("rxjs").Observable<Record<string, unknown> | null>;
@@ -18,7 +18,7 @@ export declare class InfinityQuery<QueryCreator extends AnyQueryCreator, Query e
18
18
  get itemsPerPage$(): import("rxjs").Observable<number>;
19
19
  get itemsPerPage(): number;
20
20
  get data$(): import("rxjs").Observable<InfinityResponse>;
21
- get currentQuery$(): import("rxjs").Observable<Query>;
21
+ get currentQuery$(): import("rxjs").Observable<Query | null>;
22
22
  constructor(_config: InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>);
23
23
  nextPage(): void;
24
24
  reset(newConfig?: Omit<InfinityQueryConfig<QueryCreator, Args, QueryResponse, InfinityResponse>, 'queryCreator' | 'response'>): void;
@@ -174,18 +174,56 @@ export type QueryConfigWithoutMethod<Route extends RouteType<Arguments>, Respons
174
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
175
  export type BaseArguments = WithHeaders & WithVariables & WithBody & WithQueryParams & WithPathParams;
176
176
  export interface WithHeaders {
177
+ /**
178
+ * The headers to send with the query.
179
+ */
177
180
  headers?: Record<string, string>;
178
181
  }
182
+ export interface QueryConfig {
183
+ /**
184
+ * Whether this query should be added to the internal query store.
185
+ *
186
+ * Generally this should be left on `false` unless you know what you are doing.
187
+ * @default false
188
+ */
189
+ skipQueryStore?: boolean;
190
+ /**
191
+ * The cache key to use for this query.
192
+ * Useful for queries that are equal but should be stored separately.
193
+ * Will be generated automatically if not provided.
194
+ *
195
+ * Generally this should be left on `undefined` unless you know what you are doing.
196
+ */
197
+ queryStoreCacheKey?: string;
198
+ }
199
+ export interface WithConfig {
200
+ /**
201
+ * Additional configuration for this query.
202
+ */
203
+ config?: QueryConfig;
204
+ }
179
205
  export interface WithVariables {
206
+ /**
207
+ * The variables for the query. (graphql only)
208
+ */
180
209
  variables?: Record<string, unknown>;
181
210
  }
182
211
  export interface WithBody {
212
+ /**
213
+ * The body for the query. Unavailable for GET, HEAD and OPTIONS requests.
214
+ */
183
215
  body?: unknown;
184
216
  }
185
217
  export interface WithQueryParams {
218
+ /**
219
+ * The query parameters for the query. (after the ? in the url)
220
+ */
186
221
  queryParams?: QueryParams;
187
222
  }
188
223
  export interface WithPathParams {
224
+ /**
225
+ * The path parameters for the query. (in front of the ? in the url)
226
+ */
189
227
  pathParams?: PathParams;
190
228
  }
191
229
  export type QueryTrigger = 'program' | 'poll' | 'auto';
@@ -1,8 +1,9 @@
1
+ import { BehaviorSubject } from 'rxjs';
1
2
  import { EntityStore } from '../entity';
2
3
  import { QueryClient } from '../query-client';
3
4
  import { QueryStore } from '../query-store';
4
5
  import { BaseArguments, GqlQueryConfig, RestQueryConfig, RouteType } from '../query/query.types';
5
- import { QueryContainerConfig, QuerySubject } from '../utils';
6
+ import { QueryContainerConfig } from '../utils';
6
7
  import { QueryPrepareFn } from './query-creator.types';
7
8
  export declare class QueryCreator<Arguments extends BaseArguments | undefined, Response, Route extends RouteType<Arguments>, Store extends EntityStore<unknown>, Data, Id> {
8
9
  private _queryConfig;
@@ -10,10 +11,10 @@ export declare class QueryCreator<Arguments extends BaseArguments | undefined, R
10
11
  private _store;
11
12
  constructor(_queryConfig: RestQueryConfig<Route, Response, Arguments, Store, Data, Id> | GqlQueryConfig<Route, Response, Arguments, Store, Data, Id>, _client: QueryClient, _store: QueryStore);
12
13
  prepare: QueryPrepareFn<Arguments, Response, Route, Store, Data, Id>;
13
- createSubject: (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => QuerySubject<ReturnType<QueryPrepareFn<Arguments, Response, Route, Store, Data, Id>> | null>;
14
+ createSubject: (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => BehaviorSubject<ReturnType<QueryPrepareFn<Arguments, Response, Route, Store, Data, Id>> | null>;
14
15
  createSignal: (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => import("@angular/core").WritableSignal<ReturnType<QueryPrepareFn<Arguments, Response, Route, Store, Data, Id>> | null>;
15
16
  /**
16
17
  * @deprecated Use `myQuery.createSubject()` or `myQuery.createSignal()` instead. Will be removed in v5.
17
18
  */
18
- behaviorSubject: (initialValue?: ReturnType<typeof this.prepare> | null, config?: QueryContainerConfig) => QuerySubject<ReturnType<QueryPrepareFn<Arguments, Response, Route, Store, Data, Id>> | null>;
19
+ behaviorSubject: (initialValue?: ReturnType<typeof this.prepare> | null) => BehaviorSubject<ReturnType<QueryPrepareFn<Arguments, Response, Route, Store, Data, Id>> | null>;
19
20
  }
@@ -1,8 +1,8 @@
1
1
  import { EntityStore } from '../entity';
2
2
  import { Query } from '../query/query';
3
- import { AnyQuery, BaseArguments, EmptyObject, RouteType, WithHeaders } from '../query/query.types';
3
+ import { AnyQuery, BaseArguments, EmptyObject, RouteType, WithConfig, WithHeaders } from '../query/query.types';
4
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) => Query<Response, Arguments, Route, Store, Data, Id> : (args?: (Arguments extends EmptyObject ? Arguments : EmptyObject) & WithHeaders) => Query<Response, Arguments, Route, Store, Data, Id>;
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) => Query<Response, Arguments, Route, Store, Data, Id> : (args?: (Arguments extends EmptyObject ? Arguments : EmptyObject) & WithHeaders & WithConfig) => Query<Response, Arguments, Route, Store, Data, Id>;
6
6
  export type AnyQueryCreator = QueryCreator<any, any, any, any, any, any>;
7
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
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;
@@ -1,15 +1,29 @@
1
- import { BehaviorSubject } from 'rxjs';
1
+ import { Signal } from '@angular/core';
2
+ import { ToObservableOptions, ToSignalOptions } from '@angular/core/rxjs-interop';
3
+ import { Observable, Subscribable } from 'rxjs';
2
4
  import { AnyQuery } from '../query';
3
5
  export interface QueryContainerConfig {
4
6
  /**
5
7
  * If `true`, the previous query will be aborted when a new query is pushed into the container.
6
- * @default false
8
+ * @default true // Only if the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.
7
9
  */
8
10
  abortPrevious?: boolean;
11
+ /**
12
+ * If `true`, the query will be aborted when the container is destroyed.
13
+ * @default true // Only if the request can be cached (GET, OPTIONS, HEAD and GQL_QUERY). Otherwise false.
14
+ */
15
+ abortOnDestroy?: boolean;
9
16
  }
10
- export declare class QuerySubject<T extends AnyQuery | null> extends BehaviorSubject<T> {
11
- private _config?;
12
- constructor(initialValue?: T, _config?: QueryContainerConfig | undefined);
13
- next(value: T): void;
14
- }
15
- export declare const querySignal: <T extends AnyQuery | null>(initialValue?: T, config?: QueryContainerConfig) => import("@angular/core").WritableSignal<T>;
17
+ export declare const addQueryContainerHandling: (obs: Observable<AnyQuery | null>, valueFn: () => AnyQuery | null | undefined, config?: QueryContainerConfig) => void;
18
+ export declare function toQuerySignal<T extends AnyQuery | null>(source: Observable<T> | Subscribable<T>): Signal<T | undefined>;
19
+ export declare function toQuerySignal<T extends AnyQuery | null>(source: Observable<T> | Subscribable<T>, options?: ToSignalOptions<undefined> & {
20
+ requireSync?: false;
21
+ } & QueryContainerConfig): Signal<T | undefined>;
22
+ export declare function toQuerySignal<T extends AnyQuery | null, U extends T | null | undefined>(source: Observable<T> | Subscribable<T>, options: ToSignalOptions<U> & {
23
+ initialValue: U;
24
+ requireSync?: false;
25
+ } & QueryContainerConfig): Signal<T | U>;
26
+ export declare function toQuerySignal<T extends AnyQuery | null>(source: Observable<T> | Subscribable<T>, options: ToSignalOptions<undefined> & {
27
+ requireSync: true;
28
+ } & QueryContainerConfig): Signal<T>;
29
+ export declare function toQuerySubject<T extends AnyQuery | null>(source: Signal<T>, options?: ToObservableOptions & QueryContainerConfig): Observable<T>;
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@ethlete/query",
3
- "version": "4.14.0",
3
+ "version": "4.16.0",
4
4
  "dependencies": {
5
5
  "tslib": "^2.5.0"
6
6
  },
7
7
  "peerDependencies": {
8
8
  "@angular/common": "^15.2.1 || ^16.0.0",
9
9
  "@angular/core": "^15.2.1 || ^16.0.0",
10
- "@ethlete/core": "3.7.0"
10
+ "@ethlete/core": "3.8.0"
11
11
  },
12
12
  "module": "fesm2022/ethlete-query.mjs",
13
13
  "typings": "index.d.ts",