@ethlete/query 5.7.0 → 5.8.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.
@@ -26,6 +26,7 @@ export declare class Query<Response, Arguments extends BaseArguments | undefined
26
26
  get autoRefreshOnConfig(): Readonly<QueryAutoRefreshConfig>;
27
27
  get store(): Store | null;
28
28
  get canBeCached(): boolean;
29
+ get _isInMockMode(): boolean;
29
30
  constructor(_client: QueryClient,
30
31
  /**
31
32
  * @internal
@@ -55,4 +56,5 @@ export declare class Query<Response, Arguments extends BaseArguments | undefined
55
56
  private _updateEntityState;
56
57
  private _transformState;
57
58
  private _updateState;
59
+ private _mockRequest;
58
60
  }
@@ -172,13 +172,69 @@ export type AnyRestQueryConfig = RestQueryConfig<any, any, any, any, any, any>;
172
172
  export type AnyGqlQueryConfig = GqlQueryConfig<any, any, any, any, any, any>;
173
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
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;
175
+ export type BaseArguments = WithHeaders & WithVariables & WithBody & WithQueryParams & WithPathParams & WithMock<unknown>;
176
176
  export interface WithHeaders {
177
177
  /**
178
178
  * The headers to send with the query.
179
179
  */
180
180
  headers?: Record<string, string>;
181
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
+ }
182
238
  export interface QueryConfig {
183
239
  /**
184
240
  * Whether this query should be added to the internal query store.
@@ -1,8 +1,8 @@
1
1
  import { EntityStore } from '../entity';
2
2
  import { Query } from '../query/query';
3
- import { AnyQuery, BaseArguments, EmptyObject, RouteType, WithConfig, WithHeaders } from '../query/query.types';
3
+ import { AnyQuery, BaseArguments, EmptyObject, RouteType, WithConfig, WithHeaders, WithMock } 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 & WithConfig) => Query<Response, Arguments, Route, Store, Data, Id> : (args?: (Arguments extends EmptyObject ? Arguments : EmptyObject) & WithHeaders & WithConfig) => 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 & 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
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ethlete/query",
3
- "version": "5.7.0",
3
+ "version": "5.8.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "17.2.4",
6
6
  "@angular/core": "17.2.4",