@openapi-qraft/react 1.2.0 → 1.4.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 (214) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +118 -38
  3. package/dist/QraftContext.d.ts +8 -10
  4. package/dist/QraftContext.d.ts.map +1 -1
  5. package/dist/QraftContext.js.map +1 -1
  6. package/dist/ServiceOperation.d.ts +152 -5
  7. package/dist/ServiceOperation.d.ts.map +1 -1
  8. package/dist/callbacks/cancelQueries.d.ts +2 -2
  9. package/dist/callbacks/cancelQueries.d.ts.map +1 -1
  10. package/dist/callbacks/cancelQueries.js.map +1 -1
  11. package/dist/callbacks/fetchInfiniteQuery.d.ts +7 -0
  12. package/dist/callbacks/fetchInfiniteQuery.d.ts.map +1 -0
  13. package/dist/callbacks/fetchInfiniteQuery.js +5 -0
  14. package/dist/callbacks/fetchInfiniteQuery.js.map +1 -0
  15. package/dist/callbacks/fetchQuery.d.ts +7 -0
  16. package/dist/callbacks/fetchQuery.d.ts.map +1 -0
  17. package/dist/callbacks/fetchQuery.js +5 -0
  18. package/dist/callbacks/fetchQuery.js.map +1 -0
  19. package/dist/callbacks/getInfiniteQueryData.d.ts +4 -4
  20. package/dist/callbacks/getInfiniteQueryData.d.ts.map +1 -1
  21. package/dist/callbacks/getInfiniteQueryData.js +3 -6
  22. package/dist/callbacks/getInfiniteQueryData.js.map +1 -1
  23. package/dist/callbacks/getInfiniteQueryKey.d.ts +2 -2
  24. package/dist/callbacks/getInfiniteQueryKey.d.ts.map +1 -1
  25. package/dist/callbacks/getInfiniteQueryKey.js.map +1 -1
  26. package/dist/callbacks/getMutationKey.d.ts +2 -2
  27. package/dist/callbacks/getMutationKey.d.ts.map +1 -1
  28. package/dist/callbacks/getMutationKey.js.map +1 -1
  29. package/dist/callbacks/getQueryData.d.ts +3 -3
  30. package/dist/callbacks/getQueryData.d.ts.map +1 -1
  31. package/dist/callbacks/getQueryData.js +3 -4
  32. package/dist/callbacks/getQueryData.js.map +1 -1
  33. package/dist/callbacks/getQueryKey.d.ts +2 -2
  34. package/dist/callbacks/getQueryKey.d.ts.map +1 -1
  35. package/dist/callbacks/getQueryKey.js.map +1 -1
  36. package/dist/callbacks/invalidateQueries.d.ts +2 -2
  37. package/dist/callbacks/invalidateQueries.d.ts.map +1 -1
  38. package/dist/callbacks/invalidateQueries.js.map +1 -1
  39. package/dist/callbacks/isFetching.d.ts +2 -2
  40. package/dist/callbacks/isFetching.d.ts.map +1 -1
  41. package/dist/callbacks/isFetching.js.map +1 -1
  42. package/dist/callbacks/isMutating.d.ts +5 -0
  43. package/dist/callbacks/isMutating.d.ts.map +1 -0
  44. package/dist/callbacks/isMutating.js +5 -0
  45. package/dist/callbacks/isMutating.js.map +1 -0
  46. package/dist/callbacks/mutationFn.d.ts +2 -2
  47. package/dist/callbacks/mutationFn.d.ts.map +1 -1
  48. package/dist/callbacks/mutationFn.js.map +1 -1
  49. package/dist/callbacks/prefetchInfiniteQuery.d.ts +7 -0
  50. package/dist/callbacks/prefetchInfiniteQuery.d.ts.map +1 -0
  51. package/dist/callbacks/prefetchInfiniteQuery.js +5 -0
  52. package/dist/callbacks/prefetchInfiniteQuery.js.map +1 -0
  53. package/dist/callbacks/prefetchQuery.d.ts +7 -0
  54. package/dist/callbacks/prefetchQuery.d.ts.map +1 -0
  55. package/dist/callbacks/prefetchQuery.js +5 -0
  56. package/dist/callbacks/prefetchQuery.js.map +1 -0
  57. package/dist/callbacks/queryFn.js.map +1 -1
  58. package/dist/callbacks/refetchQueries.d.ts +2 -2
  59. package/dist/callbacks/refetchQueries.d.ts.map +1 -1
  60. package/dist/callbacks/refetchQueries.js.map +1 -1
  61. package/dist/callbacks/removeQueries.d.ts +5 -0
  62. package/dist/callbacks/removeQueries.d.ts.map +1 -0
  63. package/dist/callbacks/removeQueries.js +5 -0
  64. package/dist/callbacks/removeQueries.js.map +1 -0
  65. package/dist/callbacks/resetQueries.d.ts +2 -2
  66. package/dist/callbacks/resetQueries.d.ts.map +1 -1
  67. package/dist/callbacks/resetQueries.js.map +1 -1
  68. package/dist/callbacks/setInfiniteQueryData.d.ts +2 -2
  69. package/dist/callbacks/setInfiniteQueryData.d.ts.map +1 -1
  70. package/dist/callbacks/setInfiniteQueryData.js +2 -6
  71. package/dist/callbacks/setInfiniteQueryData.js.map +1 -1
  72. package/dist/callbacks/setQueryData.d.ts +3 -3
  73. package/dist/callbacks/setQueryData.d.ts.map +1 -1
  74. package/dist/callbacks/setQueryData.js +3 -7
  75. package/dist/callbacks/setQueryData.js.map +1 -1
  76. package/dist/callbacks/useInfiniteQuery.d.ts +4 -4
  77. package/dist/callbacks/useInfiniteQuery.d.ts.map +1 -1
  78. package/dist/callbacks/useInfiniteQuery.js +4 -24
  79. package/dist/callbacks/useInfiniteQuery.js.map +1 -1
  80. package/dist/callbacks/useIsFetching.d.ts +2 -2
  81. package/dist/callbacks/useIsFetching.d.ts.map +1 -1
  82. package/dist/callbacks/useIsFetching.js +0 -3
  83. package/dist/callbacks/useIsFetching.js.map +1 -1
  84. package/dist/callbacks/useIsMutating.d.ts +7 -0
  85. package/dist/callbacks/useIsMutating.d.ts.map +1 -0
  86. package/dist/callbacks/useIsMutating.js +9 -0
  87. package/dist/callbacks/useIsMutating.js.map +1 -0
  88. package/dist/callbacks/useMutation.d.ts +2 -2
  89. package/dist/callbacks/useMutation.d.ts.map +1 -1
  90. package/dist/callbacks/useMutation.js +6 -4
  91. package/dist/callbacks/useMutation.js.map +1 -1
  92. package/dist/callbacks/useMutationState.d.ts +2 -2
  93. package/dist/callbacks/useMutationState.d.ts.map +1 -1
  94. package/dist/callbacks/useMutationState.js +2 -15
  95. package/dist/callbacks/useMutationState.js.map +1 -1
  96. package/dist/callbacks/useQueries.d.ts +2 -2
  97. package/dist/callbacks/useQueries.d.ts.map +1 -1
  98. package/dist/callbacks/useQueries.js +5 -3
  99. package/dist/callbacks/useQueries.js.map +1 -1
  100. package/dist/callbacks/useQuery.d.ts +3 -3
  101. package/dist/callbacks/useQuery.d.ts.map +1 -1
  102. package/dist/callbacks/useQuery.js +4 -23
  103. package/dist/callbacks/useQuery.js.map +1 -1
  104. package/dist/callbacks/useSuspenseInfiniteQuery.d.ts +4 -4
  105. package/dist/callbacks/useSuspenseInfiniteQuery.d.ts.map +1 -1
  106. package/dist/callbacks/useSuspenseInfiniteQuery.js +4 -24
  107. package/dist/callbacks/useSuspenseInfiniteQuery.js.map +1 -1
  108. package/dist/callbacks/useSuspenseQueries.d.ts +2 -2
  109. package/dist/callbacks/useSuspenseQueries.d.ts.map +1 -1
  110. package/dist/callbacks/useSuspenseQueries.js +5 -3
  111. package/dist/callbacks/useSuspenseQueries.js.map +1 -1
  112. package/dist/callbacks/useSuspenseQuery.d.ts +4 -4
  113. package/dist/callbacks/useSuspenseQuery.d.ts.map +1 -1
  114. package/dist/callbacks/useSuspenseQuery.js +4 -23
  115. package/dist/callbacks/useSuspenseQuery.js.map +1 -1
  116. package/dist/index.d.ts +1 -1
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +1 -1
  119. package/dist/index.js.map +1 -1
  120. package/dist/lib/callQueryClientFetchMethod.d.ts +20 -0
  121. package/dist/lib/callQueryClientFetchMethod.d.ts.map +1 -0
  122. package/dist/lib/callQueryClientFetchMethod.js +48 -0
  123. package/dist/lib/callQueryClientFetchMethod.js.map +1 -0
  124. package/dist/lib/callQueryClientMethodWithMutationFilters.d.ts +11 -0
  125. package/dist/lib/callQueryClientMethodWithMutationFilters.d.ts.map +1 -0
  126. package/dist/lib/callQueryClientMethodWithMutationFilters.js +18 -0
  127. package/dist/lib/callQueryClientMethodWithMutationFilters.js.map +1 -0
  128. package/dist/lib/callQueryClientMethodWithQueryFilters.d.ts +2 -2
  129. package/dist/lib/callQueryClientMethodWithQueryFilters.d.ts.map +1 -1
  130. package/dist/lib/callQueryClientMethodWithQueryFilters.js +5 -13
  131. package/dist/lib/callQueryClientMethodWithQueryFilters.js.map +1 -1
  132. package/dist/lib/callQueryClientMethodWithQueryKey.d.ts +11 -0
  133. package/dist/lib/callQueryClientMethodWithQueryKey.d.ts.map +1 -0
  134. package/dist/lib/callQueryClientMethodWithQueryKey.js +22 -0
  135. package/dist/lib/callQueryClientMethodWithQueryKey.js.map +1 -0
  136. package/dist/lib/composeInfiniteQueryKey.d.ts +2 -2
  137. package/dist/lib/composeInfiniteQueryKey.d.ts.map +1 -1
  138. package/dist/lib/composeMutationFilters.d.ts +11 -0
  139. package/dist/lib/composeMutationFilters.d.ts.map +1 -0
  140. package/dist/lib/composeMutationFilters.js +32 -0
  141. package/dist/lib/composeMutationFilters.js.map +1 -0
  142. package/dist/lib/composeMutationKey.d.ts +3 -3
  143. package/dist/lib/composeMutationKey.d.ts.map +1 -1
  144. package/dist/lib/composeMutationKey.js +1 -1
  145. package/dist/lib/composeMutationKey.js.map +1 -1
  146. package/dist/lib/composeQueryFilters.d.ts +3 -3
  147. package/dist/lib/composeQueryFilters.d.ts.map +1 -1
  148. package/dist/lib/composeQueryFilters.js.map +1 -1
  149. package/dist/lib/composeQueryKey.d.ts +2 -2
  150. package/dist/lib/composeQueryKey.d.ts.map +1 -1
  151. package/dist/lib/composeQueryKey.js.map +1 -1
  152. package/dist/lib/{request.d.ts → requestFn.d.ts} +28 -18
  153. package/dist/lib/requestFn.d.ts.map +1 -0
  154. package/dist/lib/{request.js → requestFn.js} +16 -21
  155. package/dist/lib/requestFn.js.map +1 -0
  156. package/dist/lib/useComposeUseQueryOptions.d.ts +16 -0
  157. package/dist/lib/useComposeUseQueryOptions.d.ts.map +1 -0
  158. package/dist/lib/useComposeUseQueryOptions.js +40 -0
  159. package/dist/lib/useComposeUseQueryOptions.js.map +1 -0
  160. package/dist/qraftAPIClient.d.ts +3 -3
  161. package/dist/qraftAPIClient.d.ts.map +1 -1
  162. package/package.json +3 -2
  163. package/src/QraftContext.ts +13 -16
  164. package/src/ServiceOperation.ts +360 -6
  165. package/src/callbacks/cancelQueries.ts +3 -3
  166. package/src/callbacks/fetchInfiniteQuery.ts +22 -0
  167. package/src/callbacks/fetchQuery.ts +20 -0
  168. package/src/callbacks/getInfiniteQueryData.ts +13 -16
  169. package/src/callbacks/getInfiniteQueryKey.ts +3 -3
  170. package/src/callbacks/getMutationKey.ts +3 -3
  171. package/src/callbacks/getQueryData.ts +12 -14
  172. package/src/callbacks/getQueryKey.ts +3 -7
  173. package/src/callbacks/invalidateQueries.ts +3 -3
  174. package/src/callbacks/isFetching.ts +3 -3
  175. package/src/callbacks/isMutating.ts +22 -0
  176. package/src/callbacks/mutationFn.ts +3 -3
  177. package/src/callbacks/prefetchInfiniteQuery.ts +22 -0
  178. package/src/callbacks/prefetchQuery.ts +22 -0
  179. package/src/callbacks/queryFn.ts +2 -2
  180. package/src/callbacks/refetchQueries.ts +3 -3
  181. package/src/callbacks/removeQueries.ts +22 -0
  182. package/src/callbacks/resetQueries.ts +3 -3
  183. package/src/callbacks/setInfiniteQueryData.ts +11 -18
  184. package/src/callbacks/setQueryData.ts +13 -18
  185. package/src/callbacks/useInfiniteQuery.ts +8 -48
  186. package/src/callbacks/useIsFetching.ts +3 -9
  187. package/src/callbacks/useIsMutating.ts +42 -0
  188. package/src/callbacks/useMutation.ts +15 -20
  189. package/src/callbacks/useMutationState.ts +5 -30
  190. package/src/callbacks/useQueries.ts +12 -17
  191. package/src/callbacks/useQuery.ts +7 -43
  192. package/src/callbacks/useSuspenseInfiniteQuery.ts +8 -44
  193. package/src/callbacks/useSuspenseQueries.ts +12 -13
  194. package/src/callbacks/useSuspenseQuery.ts +8 -45
  195. package/src/index.ts +6 -6
  196. package/src/lib/callQueryClientFetchMethod.ts +90 -0
  197. package/src/lib/callQueryClientMethodWithMutationFilters.ts +37 -0
  198. package/src/lib/callQueryClientMethodWithQueryFilters.ts +10 -23
  199. package/src/lib/callQueryClientMethodWithQueryKey.ts +46 -0
  200. package/src/lib/composeInfiniteQueryKey.ts +2 -2
  201. package/src/lib/composeMutationFilters.ts +44 -0
  202. package/src/lib/composeMutationKey.ts +5 -8
  203. package/src/lib/composeQueryFilters.ts +2 -2
  204. package/src/lib/composeQueryKey.ts +2 -5
  205. package/src/lib/{request.ts → requestFn.ts} +61 -59
  206. package/src/lib/useComposeUseQueryOptions.ts +64 -0
  207. package/src/qraftAPIClient.ts +4 -4
  208. package/dist/RequestClient.d.ts +0 -3
  209. package/dist/RequestClient.d.ts.map +0 -1
  210. package/dist/RequestClient.js +0 -2
  211. package/dist/RequestClient.js.map +0 -1
  212. package/dist/lib/request.d.ts.map +0 -1
  213. package/dist/lib/request.js.map +0 -1
  214. package/src/RequestClient.ts +0 -11
@@ -1,55 +1,41 @@
1
1
  /**
2
2
  * @throws {error: object|string, response: Response} if the request fails
3
3
  */
4
- export async function request<T>(
5
- options: RequestOptions,
6
- schema: OperationRequestSchema,
7
- requestInfo: OperationRequestInfo
4
+ export async function requestFn<T>(
5
+ schema: OperationSchema,
6
+ requestInfo: RequestFnInfo,
7
+ options?: RequestFnOptions
8
8
  ): Promise<T> {
9
- return baseRequest(
10
- isRequiredRequestOptions(options)
11
- ? options
12
- : {
13
- urlSerializer,
14
- bodySerializer,
15
- ...options,
16
- },
17
- schema,
18
- requestInfo
19
- );
20
- }
21
-
22
- export interface RequestOptions {
23
- baseUrl: string;
24
- urlSerializer?: URLSerializer;
25
- bodySerializer?: BodySerializer;
9
+ return baseRequestFn(schema, requestInfo, {
10
+ urlSerializer,
11
+ bodySerializer,
12
+ ...options,
13
+ });
26
14
  }
27
15
 
28
- type URLSerializer = typeof urlSerializer;
29
- type BodySerializer = typeof bodySerializer;
30
-
31
16
  /**
32
17
  * @throws {error: object|string, response: Response} if the request fails
33
18
  */
34
- export async function baseRequest<T>(
35
- options: Required<RequestOptions>,
36
- schema: OperationRequestSchema,
37
- requestInfo: OperationRequestInfo,
38
- customFetch = fetch
19
+ export async function baseRequestFn<T>(
20
+ requestSchema: OperationSchema,
21
+ requestInfo: RequestFnInfo,
22
+ options: WithRequired<RequestFnOptions, 'urlSerializer' | 'bodySerializer'>
39
23
  ): Promise<T> {
40
24
  const { parameters, headers, body, ...requestInfoRest } = requestInfo;
41
25
 
42
- const requestBody = options.bodySerializer(schema, requestInfo);
26
+ const requestBody = options.bodySerializer(requestSchema, requestInfo);
43
27
 
44
- const response = await customFetch(
45
- options.urlSerializer(options.baseUrl, schema, requestInfo),
28
+ const baseFetch = options.fetch ?? fetch;
29
+
30
+ const response = await baseFetch(
31
+ options.urlSerializer(requestSchema, requestInfo),
46
32
  {
47
- method: schema.method.toUpperCase(),
33
+ method: requestSchema.method.toUpperCase(),
48
34
  body: requestBody,
49
35
  headers: mergeHeaders(
50
36
  {
51
37
  Accept: 'application/json',
52
- 'Content-Type': schema.mediaType ?? getBodyContentType(body),
38
+ 'Content-Type': requestSchema.mediaType ?? getBodyContentType(body),
53
39
  },
54
40
  headers,
55
41
  parameters?.header,
@@ -73,9 +59,8 @@ export async function baseRequest<T>(
73
59
  }
74
60
 
75
61
  export function urlSerializer(
76
- baseUrl: string,
77
- schema: OperationRequestSchema,
78
- info: OperationRequestInfo
62
+ schema: OperationSchema,
63
+ info: RequestFnPayload
79
64
  ): string {
80
65
  const path = schema.url.replace(
81
66
  /{(.*?)}/g,
@@ -87,6 +72,8 @@ export function urlSerializer(
87
72
  }
88
73
  );
89
74
 
75
+ const baseUrl = info.baseUrl ?? '';
76
+
90
77
  if (info.parameters?.query) {
91
78
  return `${baseUrl}${path}${getQueryString(info.parameters.query)}`;
92
79
  }
@@ -154,8 +141,8 @@ function mergeHeaders(...allHeaders: (HeadersOptions | undefined)[]) {
154
141
  }
155
142
 
156
143
  export function bodySerializer(
157
- schema: OperationRequestSchema,
158
- info: OperationRequestInfo
144
+ schema: OperationSchema,
145
+ info: RequestFnPayload
159
146
  ) {
160
147
  if (info.body === undefined) return;
161
148
 
@@ -183,7 +170,7 @@ export function bodySerializer(
183
170
 
184
171
  function getRequestBodyFormData({
185
172
  body,
186
- }: Pick<OperationRequestInfo, 'body'>): FormData | undefined {
173
+ }: Pick<RequestFnPayload, 'body'>): FormData | undefined {
187
174
  if (body instanceof FormData) return body;
188
175
  if (body === null) return;
189
176
 
@@ -222,7 +209,7 @@ function getRequestBodyFormData({
222
209
  return formData;
223
210
  }
224
211
 
225
- function getBodyContentType(body: OperationRequestInfo['body']) {
212
+ function getBodyContentType(body: RequestFnPayload['body']) {
226
213
  if (!body) return;
227
214
  if (body instanceof Blob) return body.type || 'application/octet-stream';
228
215
  if (typeof body === 'string') return 'text/plain';
@@ -244,11 +231,7 @@ async function getResponseBody<T>(response: Response): Promise<T | undefined> {
244
231
  const errorFallbackResponse = response.clone(); // clone to allow multiple reads
245
232
 
246
233
  return response.json().catch(() => {
247
- if (
248
- typeof process !== 'undefined' &&
249
- typeof process.env !== 'undefined' &&
250
- process.env.NODE_ENV === 'development'
251
- ) {
234
+ if (process.env.NODE_ENV === 'development') {
252
235
  console.warn(
253
236
  'Failed to parse response body as JSON. Falling back to .text()'
254
237
  );
@@ -261,18 +244,12 @@ async function getResponseBody<T>(response: Response): Promise<T | undefined> {
261
244
  return response.text() as Promise<T>;
262
245
  }
263
246
 
264
- function isRequiredRequestOptions<T extends RequestOptions>(
265
- options: RequestOptions
266
- ): options is Required<RequestOptions> {
267
- return Boolean(options.urlSerializer && options.bodySerializer);
268
- }
269
-
270
247
  // To have definitely typed headers without a conversion to stings
271
248
  export type HeadersOptions =
272
249
  | HeadersInit
273
250
  | Record<string, string | number | boolean | null | undefined>;
274
251
 
275
- export interface OperationRequestSchema {
252
+ export interface OperationSchema {
276
253
  /**
277
254
  * Operation path
278
255
  * @example /user/{id}
@@ -299,8 +276,12 @@ export interface OperationRequestSchema {
299
276
  readonly mediaType?: string;
300
277
  }
301
278
 
302
- export interface OperationRequestInfo
303
- extends Omit<RequestInit, 'headers' | 'method' | 'body'> {
279
+ export interface RequestFnPayload {
280
+ /**
281
+ * Base URL to use for the request
282
+ */
283
+ baseUrl: string | undefined;
284
+
304
285
  /**
305
286
  * OpenAPI parameters
306
287
  * @example
@@ -314,19 +295,40 @@ export interface OperationRequestInfo
314
295
  readonly header?: Record<string, any>;
315
296
  readonly query?: Record<string, any>;
316
297
  };
298
+
317
299
  /**
318
300
  * Request body
319
301
  * @example { name: 'John' }
320
302
  */
321
303
  readonly body?: BodyInit | Record<string, unknown> | null;
304
+
305
+ /**
306
+ * Tanstack Query Meta
307
+ */
308
+ meta?: Record<string, unknown>;
309
+
310
+ /** An AbortSignal to set request's signal. */
311
+ signal?: AbortSignal | null;
312
+ }
313
+
314
+ interface RequestFnInfo
315
+ extends RequestFnPayload,
316
+ Omit<RequestInit, 'headers' | 'method' | 'body' | 'signal'> {
322
317
  /**
323
318
  * Request headers
324
319
  * @example { 'X-Auth': '123' }
325
320
  */
326
321
  readonly headers?: HeadersOptions;
322
+ }
327
323
 
328
- /**
329
- * Tanstack Query Meta
330
- */
331
- meta?: Record<string, unknown>;
324
+ export interface RequestFnOptions {
325
+ urlSerializer?: typeof urlSerializer;
326
+ bodySerializer?: typeof bodySerializer;
327
+ fetch?: typeof fetch;
332
328
  }
329
+
330
+ export type RequestFn<T> = typeof requestFn<T>;
331
+
332
+ type WithRequired<T, K extends keyof T> = T & {
333
+ [_ in K]: {};
334
+ };
@@ -0,0 +1,64 @@
1
+ 'use client';
2
+
3
+ import { useContext } from 'react';
4
+
5
+ import type { QueryClient } from '@tanstack/query-core';
6
+ import type { UseQueryOptions } from '@tanstack/react-query';
7
+
8
+ import type { QraftClientOptions } from '../qraftAPIClient.js';
9
+ import { QraftContext } from '../QraftContext.js';
10
+ import type { ServiceOperationQueryKey } from '../ServiceOperation.js';
11
+ import { composeInfiniteQueryKey } from './composeInfiniteQueryKey.js';
12
+ import { composeQueryKey } from './composeQueryKey.js';
13
+ import type { OperationSchema } from './requestFn.js';
14
+ import { shelfMerge } from './shelfMerge.js';
15
+ import { useQueryClient } from './useQueryClient.js';
16
+
17
+ /**
18
+ * Composes the options for useQuery, useInfiniteQuery, useSuspenseQuery, and useSuspenseQueries.
19
+ * @internal
20
+ */
21
+ export function useComposeUseQueryOptions(
22
+ qraftOptions: QraftClientOptions | undefined,
23
+ schema: OperationSchema,
24
+ args: UseQueryOptionsArgs,
25
+ infinite: boolean
26
+ ): never {
27
+ const [parameters, options, queryClient] = args;
28
+
29
+ const contextValue = useContext(qraftOptions?.context ?? QraftContext);
30
+ if (!contextValue?.requestFn)
31
+ throw new Error(`QraftContext.requestFn not found`);
32
+
33
+ const queryFn =
34
+ options?.queryFn ??
35
+ // @ts-expect-error
36
+ function ({ queryKey: [, queryParams], signal, meta, pageParam }) {
37
+ return contextValue.requestFn(schema, {
38
+ // @ts-expect-error
39
+ parameters: infinite
40
+ ? (shelfMerge(2, queryParams, pageParam) as never)
41
+ : queryParams,
42
+ baseUrl: contextValue.baseUrl,
43
+ signal,
44
+ meta,
45
+ });
46
+ };
47
+
48
+ const queryKey = Array.isArray(parameters)
49
+ ? (parameters as ServiceOperationQueryKey<OperationSchema, unknown>)
50
+ : infinite
51
+ ? composeInfiniteQueryKey(schema, parameters)
52
+ : composeQueryKey(schema, parameters);
53
+
54
+ return [
55
+ { ...options, queryFn, queryKey },
56
+ useQueryClient(qraftOptions, queryClient),
57
+ ] as never;
58
+ }
59
+
60
+ type UseQueryOptionsArgs = [
61
+ parameters: unknown,
62
+ options?: UseQueryOptions,
63
+ queryClient?: QueryClient,
64
+ ];
@@ -1,7 +1,7 @@
1
1
  import type { Context } from 'react';
2
2
 
3
3
  import { createRecursiveProxy } from './lib/createRecursiveProxy.js';
4
- import type { OperationRequestSchema } from './lib/request.js';
4
+ import type { OperationSchema } from './lib/requestFn.js';
5
5
  import type { QraftContextValue } from './QraftContext.js';
6
6
 
7
7
  export interface QraftClientOptions {
@@ -50,7 +50,7 @@ export const qraftAPIClient = <
50
50
 
51
51
  function isServiceOperation(
52
52
  input: unknown
53
- ): input is { schema: OperationRequestSchema } {
53
+ ): input is { schema: OperationSchema } {
54
54
  return input !== null && typeof input === 'object' && 'schema' in input;
55
55
  }
56
56
 
@@ -63,7 +63,7 @@ function getByPath(obj: Record<string, unknown>, path: string[]) {
63
63
 
64
64
  type ServicesOutput<Services> = {
65
65
  [service in keyof Services]: {
66
- [method in keyof Services[service]]: { schema: OperationRequestSchema };
66
+ [method in keyof Services[service]]: { schema: OperationSchema };
67
67
  };
68
68
  };
69
69
 
@@ -82,7 +82,7 @@ type ServicesCallbacksFilter<
82
82
  Callbacks,
83
83
  > = Services extends {
84
84
  [serviceName in keyof Services]: {
85
- [method in keyof Services[serviceName]]: { schema: OperationRequestSchema };
85
+ [method in keyof Services[serviceName]]: { schema: OperationSchema };
86
86
  };
87
87
  }
88
88
  ? {
@@ -1,3 +0,0 @@
1
- import type { OperationRequestInfo, OperationRequestSchema, RequestOptions } from './lib/request.js';
2
- export type RequestClient<T> = (options: RequestOptions, requestSchema: OperationRequestSchema, requestInfo: OperationRequestInfo) => Promise<T>;
3
- //# sourceMappingURL=RequestClient.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RequestClient.d.ts","sourceRoot":"","sources":["../src/RequestClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,cAAc,EACf,MAAM,kBAAkB,CAAC;AAE1B,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAC7B,OAAO,EAAE,cAAc,EACvB,aAAa,EAAE,sBAAsB,EACrC,WAAW,EAAE,oBAAoB,KAC9B,OAAO,CAAC,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=RequestClient.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RequestClient.js","sourceRoot":"","sources":["../src/RequestClient.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/lib/request.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAsB,OAAO,CAAC,CAAC,EAC7B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,sBAAsB,EAC9B,WAAW,EAAE,oBAAoB,GAChC,OAAO,CAAC,CAAC,CAAC,CAYZ;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,KAAK,aAAa,GAAG,OAAO,aAAa,CAAC;AAC1C,KAAK,cAAc,GAAG,OAAO,cAAc,CAAC;AAE5C;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,EACjC,MAAM,EAAE,sBAAsB,EAC9B,WAAW,EAAE,oBAAoB,EACjC,WAAW,eAAQ,GAClB,OAAO,CAAC,CAAC,CAAC,CAkCZ;AAED,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,oBAAoB,GACzB,MAAM,CAgBR;AA6DD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,sBAAsB,EAC9B,IAAI,EAAE,oBAAoB,wCAwB3B;AAyFD,MAAM,MAAM,cAAc,GACtB,WAAW,GACX,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAEjE,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,MAAM,EACX,KAAK,GACL,KAAK,GACL,MAAM,GACN,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,OAAO,CAAC;IAEZ;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,oBACf,SAAQ,IAAI,CAAC,WAAW,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IACxD;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KACtC,CAAC;IACF;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC1D;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;IAElC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/lib/request.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import type {
2
- OperationRequestInfo,
3
- OperationRequestSchema,
4
- RequestOptions,
5
- } from './lib/request.js';
6
-
7
- export type RequestClient<T> = (
8
- options: RequestOptions,
9
- requestSchema: OperationRequestSchema,
10
- requestInfo: OperationRequestInfo
11
- ) => Promise<T>;