@openapi-qraft/react 1.1.4 → 1.2.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 (150) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +83 -31
  3. package/dist/QraftContext.d.ts +16 -5
  4. package/dist/QraftContext.d.ts.map +1 -1
  5. package/dist/QraftContext.js.map +1 -1
  6. package/dist/RequestClient.d.ts +2 -18
  7. package/dist/RequestClient.d.ts.map +1 -1
  8. package/dist/ServiceOperation.d.ts +41 -2
  9. package/dist/ServiceOperation.d.ts.map +1 -1
  10. package/dist/callbacks/cancelQueries.d.ts +2 -2
  11. package/dist/callbacks/cancelQueries.d.ts.map +1 -1
  12. package/dist/callbacks/cancelQueries.js.map +1 -1
  13. package/dist/callbacks/getInfiniteQueryData.d.ts +2 -2
  14. package/dist/callbacks/getInfiniteQueryData.d.ts.map +1 -1
  15. package/dist/callbacks/getInfiniteQueryData.js.map +1 -1
  16. package/dist/callbacks/getInfiniteQueryKey.d.ts +2 -2
  17. package/dist/callbacks/getInfiniteQueryKey.d.ts.map +1 -1
  18. package/dist/callbacks/getInfiniteQueryKey.js.map +1 -1
  19. package/dist/callbacks/getMutationKey.d.ts +2 -2
  20. package/dist/callbacks/getMutationKey.d.ts.map +1 -1
  21. package/dist/callbacks/getMutationKey.js.map +1 -1
  22. package/dist/callbacks/getQueryData.d.ts +2 -2
  23. package/dist/callbacks/getQueryData.d.ts.map +1 -1
  24. package/dist/callbacks/getQueryData.js.map +1 -1
  25. package/dist/callbacks/getQueryKey.d.ts +2 -2
  26. package/dist/callbacks/getQueryKey.d.ts.map +1 -1
  27. package/dist/callbacks/getQueryKey.js.map +1 -1
  28. package/dist/callbacks/invalidateQueries.d.ts +2 -2
  29. package/dist/callbacks/invalidateQueries.d.ts.map +1 -1
  30. package/dist/callbacks/invalidateQueries.js.map +1 -1
  31. package/dist/callbacks/isFetching.d.ts +5 -0
  32. package/dist/callbacks/isFetching.d.ts.map +1 -0
  33. package/dist/callbacks/isFetching.js +5 -0
  34. package/dist/callbacks/isFetching.js.map +1 -0
  35. package/dist/callbacks/mutationFn.d.ts +2 -2
  36. package/dist/callbacks/mutationFn.d.ts.map +1 -1
  37. package/dist/callbacks/mutationFn.js.map +1 -1
  38. package/dist/callbacks/refetchQueries.d.ts +5 -0
  39. package/dist/callbacks/refetchQueries.d.ts.map +1 -0
  40. package/dist/callbacks/refetchQueries.js +5 -0
  41. package/dist/callbacks/refetchQueries.js.map +1 -0
  42. package/dist/callbacks/resetQueries.d.ts +2 -2
  43. package/dist/callbacks/resetQueries.d.ts.map +1 -1
  44. package/dist/callbacks/resetQueries.js.map +1 -1
  45. package/dist/callbacks/setInfiniteQueryData.d.ts +2 -2
  46. package/dist/callbacks/setInfiniteQueryData.d.ts.map +1 -1
  47. package/dist/callbacks/setInfiniteQueryData.js.map +1 -1
  48. package/dist/callbacks/setQueryData.d.ts +2 -2
  49. package/dist/callbacks/setQueryData.d.ts.map +1 -1
  50. package/dist/callbacks/setQueryData.js.map +1 -1
  51. package/dist/callbacks/useInfiniteQuery.d.ts +2 -2
  52. package/dist/callbacks/useInfiniteQuery.d.ts.map +1 -1
  53. package/dist/callbacks/useInfiniteQuery.js +7 -6
  54. package/dist/callbacks/useInfiniteQuery.js.map +1 -1
  55. package/dist/callbacks/useIsFetching.d.ts +5 -0
  56. package/dist/callbacks/useIsFetching.d.ts.map +1 -0
  57. package/dist/callbacks/useIsFetching.js +12 -0
  58. package/dist/callbacks/useIsFetching.js.map +1 -0
  59. package/dist/callbacks/useMutation.d.ts +2 -2
  60. package/dist/callbacks/useMutation.d.ts.map +1 -1
  61. package/dist/callbacks/useMutation.js +8 -7
  62. package/dist/callbacks/useMutation.js.map +1 -1
  63. package/dist/callbacks/useMutationState.d.ts +2 -2
  64. package/dist/callbacks/useMutationState.d.ts.map +1 -1
  65. package/dist/callbacks/useMutationState.js +3 -7
  66. package/dist/callbacks/useMutationState.js.map +1 -1
  67. package/dist/callbacks/useQueries.d.ts +2 -2
  68. package/dist/callbacks/useQueries.d.ts.map +1 -1
  69. package/dist/callbacks/useQueries.js +7 -6
  70. package/dist/callbacks/useQueries.js.map +1 -1
  71. package/dist/callbacks/useQuery.d.ts +3 -3
  72. package/dist/callbacks/useQuery.d.ts.map +1 -1
  73. package/dist/callbacks/useQuery.js +7 -6
  74. package/dist/callbacks/useQuery.js.map +1 -1
  75. package/dist/callbacks/useSuspenseInfiniteQuery.d.ts +2 -2
  76. package/dist/callbacks/useSuspenseInfiniteQuery.d.ts.map +1 -1
  77. package/dist/callbacks/useSuspenseInfiniteQuery.js +7 -6
  78. package/dist/callbacks/useSuspenseInfiniteQuery.js.map +1 -1
  79. package/dist/callbacks/useSuspenseQueries.d.ts +2 -2
  80. package/dist/callbacks/useSuspenseQueries.d.ts.map +1 -1
  81. package/dist/callbacks/useSuspenseQueries.js +7 -6
  82. package/dist/callbacks/useSuspenseQueries.js.map +1 -1
  83. package/dist/callbacks/useSuspenseQuery.d.ts +2 -2
  84. package/dist/callbacks/useSuspenseQuery.d.ts.map +1 -1
  85. package/dist/callbacks/useSuspenseQuery.js +7 -6
  86. package/dist/callbacks/useSuspenseQuery.js.map +1 -1
  87. package/dist/index.d.ts +3 -7
  88. package/dist/index.d.ts.map +1 -1
  89. package/dist/index.js +1 -1
  90. package/dist/index.js.map +1 -1
  91. package/dist/lib/callQueryClientMethodWithQueryFilters.d.ts +2 -2
  92. package/dist/lib/callQueryClientMethodWithQueryFilters.d.ts.map +1 -1
  93. package/dist/lib/callQueryClientMethodWithQueryFilters.js +2 -29
  94. package/dist/lib/callQueryClientMethodWithQueryFilters.js.map +1 -1
  95. package/dist/lib/composeInfiniteQueryKey.d.ts +3 -3
  96. package/dist/lib/composeInfiniteQueryKey.d.ts.map +1 -1
  97. package/dist/lib/composeMutationKey.d.ts +4 -4
  98. package/dist/lib/composeMutationKey.d.ts.map +1 -1
  99. package/dist/lib/composeQueryFilters.d.ts +11 -0
  100. package/dist/lib/composeQueryFilters.d.ts.map +1 -0
  101. package/dist/lib/composeQueryFilters.js +32 -0
  102. package/dist/lib/composeQueryFilters.js.map +1 -0
  103. package/dist/lib/composeQueryKey.d.ts +3 -3
  104. package/dist/lib/composeQueryKey.d.ts.map +1 -1
  105. package/dist/lib/composeQueryKey.js.map +1 -1
  106. package/dist/lib/request.d.ts +50 -17
  107. package/dist/lib/request.d.ts.map +1 -1
  108. package/dist/lib/request.js +42 -31
  109. package/dist/lib/request.js.map +1 -1
  110. package/dist/lib/useQueryClient.d.ts +9 -0
  111. package/dist/lib/useQueryClient.d.ts.map +1 -0
  112. package/dist/lib/useQueryClient.js +15 -0
  113. package/dist/lib/useQueryClient.js.map +1 -0
  114. package/dist/qraftAPIClient.d.ts +7 -7
  115. package/dist/qraftAPIClient.d.ts.map +1 -1
  116. package/package.json +3 -3
  117. package/src/QraftContext.ts +24 -9
  118. package/src/RequestClient.ts +10 -31
  119. package/src/ServiceOperation.ts +93 -1
  120. package/src/callbacks/cancelQueries.ts +3 -3
  121. package/src/callbacks/getInfiniteQueryData.ts +3 -3
  122. package/src/callbacks/getInfiniteQueryKey.ts +3 -3
  123. package/src/callbacks/getMutationKey.ts +3 -3
  124. package/src/callbacks/getQueryData.ts +7 -3
  125. package/src/callbacks/getQueryKey.ts +7 -3
  126. package/src/callbacks/invalidateQueries.ts +3 -3
  127. package/src/callbacks/isFetching.ts +22 -0
  128. package/src/callbacks/mutationFn.ts +3 -3
  129. package/src/callbacks/refetchQueries.ts +22 -0
  130. package/src/callbacks/resetQueries.ts +3 -3
  131. package/src/callbacks/setInfiniteQueryData.ts +4 -4
  132. package/src/callbacks/setQueryData.ts +8 -4
  133. package/src/callbacks/useInfiniteQuery.ts +17 -15
  134. package/src/callbacks/useIsFetching.ts +35 -0
  135. package/src/callbacks/useMutation.ts +23 -17
  136. package/src/callbacks/useMutationState.ts +5 -11
  137. package/src/callbacks/useQueries.ts +20 -14
  138. package/src/callbacks/useQuery.ts +22 -17
  139. package/src/callbacks/useSuspenseInfiniteQuery.ts +17 -15
  140. package/src/callbacks/useSuspenseQueries.ts +16 -14
  141. package/src/callbacks/useSuspenseQuery.ts +17 -15
  142. package/src/index.ts +12 -7
  143. package/src/lib/callQueryClientMethodWithQueryFilters.ts +4 -40
  144. package/src/lib/composeInfiniteQueryKey.ts +3 -3
  145. package/src/lib/composeMutationKey.ts +5 -5
  146. package/src/lib/composeQueryFilters.ts +44 -0
  147. package/src/lib/composeQueryKey.ts +6 -3
  148. package/src/lib/request.ts +136 -74
  149. package/src/lib/useQueryClient.ts +26 -0
  150. package/src/qraftAPIClient.ts +8 -8
@@ -0,0 +1,35 @@
1
+ 'use client';
2
+
3
+ import { useIsFetching as useIsFetchingTanstack } from '@tanstack/react-query';
4
+
5
+ import { composeQueryFilters } from '../lib/composeQueryFilters.js';
6
+ import type { OperationRequestSchema } from '../lib/request.js';
7
+ import { useQueryClient } from '../lib/useQueryClient.js';
8
+ import type { QraftClientOptions } from '../qraftAPIClient.js';
9
+ import type { ServiceOperationQuery } from '../ServiceOperation.js';
10
+
11
+ export const useIsFetching: <TVariables = unknown>(
12
+ qraftOptions: QraftClientOptions | undefined,
13
+ schema: OperationRequestSchema,
14
+ args: Parameters<
15
+ ServiceOperationQuery<
16
+ OperationRequestSchema,
17
+ object | undefined,
18
+ TVariables,
19
+ unknown
20
+ >['useIsFetching']
21
+ >
22
+ ) => number = (qraftOptions, schema, args) => {
23
+ const [filters, queryClientByArg] = args;
24
+
25
+ if (filters && 'parameters' in filters && 'mutationKey' in filters) {
26
+ throw new Error(
27
+ `'useMutationState': 'parameters' and 'mutationKey' cannot be used together`
28
+ );
29
+ }
30
+
31
+ return useIsFetchingTanstack(
32
+ composeQueryFilters(schema, filters) as never,
33
+ useQueryClient(qraftOptions, queryClientByArg)
34
+ ) as never;
35
+ };
@@ -6,13 +6,13 @@ import type { DefaultError } from '@tanstack/query-core';
6
6
  import {
7
7
  useMutation as useMutationBase,
8
8
  UseMutationResult,
9
- useQueryClient,
10
9
  } from '@tanstack/react-query';
11
10
 
12
11
  import { composeMutationKey } from '../lib/composeMutationKey.js';
12
+ import type { OperationRequestSchema } from '../lib/request.js';
13
+ import { useQueryClient } from '../lib/useQueryClient.js';
13
14
  import type { QraftClientOptions } from '../qraftAPIClient.js';
14
15
  import { QraftContext } from '../QraftContext.js';
15
- import type { RequestClientSchema } from '../RequestClient.js';
16
16
  import {
17
17
  ServiceOperationMutation,
18
18
  ServiceOperationMutationKey,
@@ -25,10 +25,10 @@ export const useMutation: <
25
25
  TContext = unknown,
26
26
  >(
27
27
  qraftOptions: QraftClientOptions | undefined,
28
- schema: RequestClientSchema,
28
+ schema: OperationRequestSchema,
29
29
  args: Parameters<
30
30
  ServiceOperationMutation<
31
- RequestClientSchema,
31
+ OperationRequestSchema,
32
32
  object | undefined,
33
33
  TVariables,
34
34
  TData
@@ -51,10 +51,8 @@ export const useMutation: <
51
51
  `'useMutation': parameters and 'options.mutationKey' cannot be used together`
52
52
  );
53
53
 
54
- const { requestClient, queryClient: queryClientByContext } =
55
- useContext(qraftOptions?.context ?? QraftContext) ?? {};
56
-
57
- if (!requestClient) throw new Error(`QraftContext.requestClient not found`);
54
+ const contextValue = useContext(qraftOptions?.context ?? QraftContext);
55
+ if (!contextValue?.request) throw new Error(`QraftContext.request not found`);
58
56
 
59
57
  const mutationKey =
60
58
  options && 'mutationKey' in options
@@ -72,22 +70,30 @@ export const useMutation: <
72
70
  options?.mutationFn ??
73
71
  (parameters
74
72
  ? function (bodyPayload) {
75
- return requestClient(schema, {
76
- parameters,
77
- body: bodyPayload as never,
78
- });
73
+ return contextValue.request(
74
+ { baseUrl: contextValue.baseUrl },
75
+ schema,
76
+ {
77
+ parameters,
78
+ body: bodyPayload as never,
79
+ }
80
+ );
79
81
  }
80
82
  : function (parametersAndBodyPayload) {
81
83
  const { body, ...parameters } = parametersAndBodyPayload as {
82
84
  body: unknown;
83
85
  };
84
86
 
85
- return requestClient(schema, {
86
- body,
87
- parameters,
88
- } as never);
87
+ return contextValue.request(
88
+ { baseUrl: contextValue.baseUrl },
89
+ schema,
90
+ {
91
+ body,
92
+ parameters,
93
+ } as never
94
+ );
89
95
  }),
90
96
  },
91
- useQueryClient(queryClientByArg ?? queryClientByContext)
97
+ useQueryClient(qraftOptions, queryClientByArg)
92
98
  ) as never;
93
99
  };
@@ -6,13 +6,12 @@ import type { DefaultError } from '@tanstack/query-core';
6
6
  import {
7
7
  UseMutationResult,
8
8
  useMutationState as useMutationStateTanstack,
9
- useQueryClient,
10
9
  } from '@tanstack/react-query';
11
10
 
12
11
  import { composeMutationKey } from '../lib/composeMutationKey.js';
12
+ import type { OperationRequestSchema } from '../lib/request.js';
13
+ import { useQueryClient } from '../lib/useQueryClient.js';
13
14
  import type { QraftClientOptions } from '../qraftAPIClient.js';
14
- import { QraftContext } from '../QraftContext.js';
15
- import type { RequestClientSchema } from '../RequestClient.js';
16
15
  import { ServiceOperationMutation } from '../ServiceOperation.js';
17
16
 
18
17
  export const useMutationState: <
@@ -22,10 +21,10 @@ export const useMutationState: <
22
21
  TContext = unknown,
23
22
  >(
24
23
  qraftOptions: QraftClientOptions | undefined,
25
- schema: RequestClientSchema,
24
+ schema: OperationRequestSchema,
26
25
  args: Parameters<
27
26
  ServiceOperationMutation<
28
- RequestClientSchema,
27
+ OperationRequestSchema,
29
28
  object | undefined,
30
29
  TVariables,
31
30
  TData
@@ -48,11 +47,6 @@ export const useMutationState: <
48
47
  );
49
48
  }
50
49
 
51
- const { requestClient, queryClient: queryClientByContext } =
52
- useContext(qraftOptions?.context ?? QraftContext) ?? {};
53
-
54
- if (!requestClient) throw new Error(`QraftContext.requestClient not found`);
55
-
56
50
  const filters = options?.filters;
57
51
 
58
52
  return useMutationStateTanstack(
@@ -71,6 +65,6 @@ export const useMutationState: <
71
65
  ),
72
66
  },
73
67
  } as never,
74
- useQueryClient(queryClientByArg ?? queryClientByContext)
68
+ useQueryClient(qraftOptions, queryClientByArg)
75
69
  ) as never;
76
70
  };
@@ -5,28 +5,30 @@ import { useContext } from 'react';
5
5
  import {
6
6
  QueriesResults,
7
7
  useQueries as useQueriesTanstack,
8
- useQueryClient,
9
8
  } from '@tanstack/react-query';
10
9
 
11
10
  import { composeQueryKey } from '../lib/composeQueryKey.js';
11
+ import type { OperationRequestSchema } from '../lib/request.js';
12
+ import { useQueryClient } from '../lib/useQueryClient.js';
12
13
  import type { QraftClientOptions } from '../qraftAPIClient.js';
13
14
  import { QraftContext } from '../QraftContext.js';
14
- import type { RequestClientSchema } from '../RequestClient.js';
15
15
  import { ServiceOperationQuery } from '../ServiceOperation.js';
16
16
 
17
17
  export const useQueries: (
18
18
  qraftOptions: QraftClientOptions | undefined,
19
- schema: RequestClientSchema,
19
+ schema: OperationRequestSchema,
20
20
  args: Parameters<
21
- ServiceOperationQuery<RequestClientSchema, unknown, unknown>['useQueries']
21
+ ServiceOperationQuery<
22
+ OperationRequestSchema,
23
+ unknown,
24
+ unknown
25
+ >['useQueries']
22
26
  >
23
27
  ) => QueriesResults<never> = (qraftOptions, schema, args) => {
24
28
  const [options, queryClientByArg] = args;
25
29
 
26
- const { requestClient, queryClient: queryClientByContext } =
27
- useContext(qraftOptions?.context ?? QraftContext) ?? {};
28
-
29
- if (!requestClient) throw new Error(`QraftContext.requestClient not found`);
30
+ const contextValue = useContext(qraftOptions?.context ?? QraftContext);
31
+ if (!contextValue?.request) throw new Error(`QraftContext.request not found`);
30
32
 
31
33
  return useQueriesTanstack(
32
34
  {
@@ -51,15 +53,19 @@ export const useQueries: (
51
53
  queryFn:
52
54
  optionsWithQueryKey.queryFn ??
53
55
  function ({ queryKey: [, queryParams], signal, meta }) {
54
- return requestClient(schema, {
55
- parameters: queryParams as never,
56
- signal,
57
- meta,
58
- });
56
+ return contextValue.request(
57
+ { baseUrl: contextValue.baseUrl },
58
+ schema,
59
+ {
60
+ parameters: queryParams as never,
61
+ signal,
62
+ meta,
63
+ }
64
+ );
59
65
  },
60
66
  };
61
67
  }),
62
68
  },
63
- useQueryClient(queryClientByArg ?? queryClientByContext)
69
+ useQueryClient(qraftOptions, queryClientByArg)
64
70
  ) as never;
65
71
  };
@@ -5,14 +5,14 @@ import { useContext } from 'react';
5
5
  import type { DefaultError } from '@tanstack/query-core';
6
6
  import {
7
7
  useQuery as useQueryTanstack,
8
- useQueryClient,
9
- UseQueryResult,
8
+ type UseQueryResult,
10
9
  } from '@tanstack/react-query';
11
10
 
12
11
  import { composeQueryKey } from '../lib/composeQueryKey.js';
12
+ import type { OperationRequestSchema } from '../lib/request.js';
13
+ import { useQueryClient } from '../lib/useQueryClient.js';
13
14
  import type { QraftClientOptions } from '../qraftAPIClient.js';
14
15
  import { QraftContext } from '../QraftContext.js';
15
- import type { RequestClientSchema } from '../RequestClient.js';
16
16
  import {
17
17
  ServiceOperationQuery,
18
18
  ServiceOperationQueryKey,
@@ -20,21 +20,22 @@ import {
20
20
 
21
21
  export const useQuery: <TData = unknown, TError = DefaultError>(
22
22
  qraftOptions: QraftClientOptions | undefined,
23
- schema: RequestClientSchema,
23
+ schema: OperationRequestSchema,
24
24
  args: Parameters<
25
- ServiceOperationQuery<RequestClientSchema, unknown, unknown>['useQuery']
25
+ ServiceOperationQuery<OperationRequestSchema, unknown, unknown>['useQuery']
26
26
  >
27
27
  ) => UseQueryResult<TData, TError> = (qraftOptions, schema, args) => {
28
28
  const [parameters, options, queryClientByArg] = args;
29
29
 
30
- const { requestClient, queryClient: queryClientByContext } =
31
- useContext(qraftOptions?.context ?? QraftContext) ?? {};
30
+ const contextValue = useContext(qraftOptions?.context ?? QraftContext);
31
+ if (!contextValue?.request) throw new Error(`QraftContext.request not found`);
32
32
 
33
- if (!requestClient) throw new Error(`QraftContext.requestClient not found`);
34
-
35
- const queryKey: ServiceOperationQueryKey<RequestClientSchema, unknown> =
33
+ const queryKey: ServiceOperationQueryKey<OperationRequestSchema, unknown> =
36
34
  Array.isArray(parameters)
37
- ? (parameters as ServiceOperationQueryKey<RequestClientSchema, unknown>)
35
+ ? (parameters as ServiceOperationQueryKey<
36
+ OperationRequestSchema,
37
+ unknown
38
+ >)
38
39
  : composeQueryKey(schema, parameters);
39
40
 
40
41
  return useQueryTanstack(
@@ -44,13 +45,17 @@ export const useQuery: <TData = unknown, TError = DefaultError>(
44
45
  queryFn:
45
46
  options?.queryFn ??
46
47
  function ({ queryKey: [, queryParams], signal, meta }) {
47
- return requestClient(schema, {
48
- parameters: queryParams as never,
49
- signal,
50
- meta,
51
- });
48
+ return contextValue.request(
49
+ { baseUrl: contextValue.baseUrl },
50
+ schema,
51
+ {
52
+ parameters: queryParams as never,
53
+ signal,
54
+ meta,
55
+ }
56
+ );
52
57
  },
53
58
  },
54
- useQueryClient(queryClientByArg ?? queryClientByContext)
59
+ useQueryClient(qraftOptions, queryClientByArg)
55
60
  ) as never;
56
61
  };
@@ -4,16 +4,16 @@ import { useContext } from 'react';
4
4
 
5
5
  import type { DefaultError, InfiniteData } from '@tanstack/query-core';
6
6
  import {
7
- useQueryClient,
8
7
  useSuspenseInfiniteQuery as useSuspenseInfiniteQueryTanstack,
9
8
  UseSuspenseInfiniteQueryResult,
10
9
  } from '@tanstack/react-query';
11
10
 
12
11
  import { composeInfiniteQueryKey } from '../lib/composeInfiniteQueryKey.js';
12
+ import type { OperationRequestSchema } from '../lib/request.js';
13
13
  import { shelfMerge } from '../lib/shelfMerge.js';
14
+ import { useQueryClient } from '../lib/useQueryClient.js';
14
15
  import type { QraftClientOptions } from '../qraftAPIClient.js';
15
16
  import { QraftContext } from '../QraftContext.js';
16
- import type { RequestClientSchema } from '../RequestClient.js';
17
17
  import {
18
18
  ServiceOperationInfiniteQueryKey,
19
19
  ServiceOperationQuery,
@@ -25,10 +25,10 @@ export const useSuspenseInfiniteQuery: <
25
25
  TData = InfiniteData<TQueryFnData>,
26
26
  >(
27
27
  qraftOptions: QraftClientOptions | undefined,
28
- schema: RequestClientSchema,
28
+ schema: OperationRequestSchema,
29
29
  args: Parameters<
30
30
  ServiceOperationQuery<
31
- RequestClientSchema,
31
+ OperationRequestSchema,
32
32
  unknown,
33
33
  unknown
34
34
  >['useSuspenseInfiniteQuery']
@@ -40,13 +40,11 @@ export const useSuspenseInfiniteQuery: <
40
40
  ) => {
41
41
  const [parameters, options, queryClientByArg] = args;
42
42
 
43
- const { requestClient, queryClient: queryClientByContext } =
44
- useContext(qraftOptions?.context ?? QraftContext) ?? {};
45
-
46
- if (!requestClient) throw new Error(`QraftContext.requestClient not found`);
43
+ const contextValue = useContext(qraftOptions?.context ?? QraftContext);
44
+ if (!contextValue?.request) throw new Error(`QraftContext.request not found`);
47
45
 
48
46
  const queryKey: ServiceOperationInfiniteQueryKey<
49
- RequestClientSchema,
47
+ OperationRequestSchema,
50
48
  unknown
51
49
  > = Array.isArray(parameters)
52
50
  ? (parameters as never)
@@ -59,13 +57,17 @@ export const useSuspenseInfiniteQuery: <
59
57
  queryFn:
60
58
  options?.queryFn ??
61
59
  function ({ queryKey: [, queryParams], signal, meta, pageParam }) {
62
- return requestClient(schema, {
63
- parameters: shelfMerge(2, queryParams, pageParam) as never,
64
- signal,
65
- meta,
66
- });
60
+ return contextValue.request(
61
+ { baseUrl: contextValue.baseUrl },
62
+ schema,
63
+ {
64
+ parameters: shelfMerge(2, queryParams, pageParam) as never,
65
+ signal,
66
+ meta,
67
+ }
68
+ );
67
69
  },
68
70
  },
69
- useQueryClient(queryClientByArg ?? queryClientByContext)
71
+ useQueryClient(qraftOptions, queryClientByArg)
70
72
  ) as never;
71
73
  };
@@ -4,22 +4,22 @@ import { useContext } from 'react';
4
4
 
5
5
  import {
6
6
  SuspenseQueriesResults,
7
- useQueryClient,
8
7
  useSuspenseQueries as useSuspenseQueriesTanstack,
9
8
  } from '@tanstack/react-query';
10
9
 
11
10
  import { composeQueryKey } from '../lib/composeQueryKey.js';
11
+ import type { OperationRequestSchema } from '../lib/request.js';
12
+ import { useQueryClient } from '../lib/useQueryClient.js';
12
13
  import type { QraftClientOptions } from '../qraftAPIClient.js';
13
14
  import { QraftContext } from '../QraftContext.js';
14
- import type { RequestClientSchema } from '../RequestClient.js';
15
15
  import { ServiceOperationQuery } from '../ServiceOperation.js';
16
16
 
17
17
  export const useSuspenseQueries: (
18
18
  qraftOptions: QraftClientOptions | undefined,
19
- schema: RequestClientSchema,
19
+ schema: OperationRequestSchema,
20
20
  args: Parameters<
21
21
  ServiceOperationQuery<
22
- RequestClientSchema,
22
+ OperationRequestSchema,
23
23
  unknown,
24
24
  unknown
25
25
  >['useSuspenseQueries']
@@ -27,10 +27,8 @@ export const useSuspenseQueries: (
27
27
  ) => SuspenseQueriesResults<never> = (qraftOptions, schema, args) => {
28
28
  const [options, queryClientByArg] = args;
29
29
 
30
- const { requestClient, queryClient: queryClientByContext } =
31
- useContext(qraftOptions?.context ?? QraftContext) ?? {};
32
-
33
- if (!requestClient) throw new Error(`QraftContext.requestClient not found`);
30
+ const contextValue = useContext(qraftOptions?.context ?? QraftContext);
31
+ if (!contextValue?.request) throw new Error(`QraftContext.request not found`);
34
32
 
35
33
  return useSuspenseQueriesTanstack(
36
34
  {
@@ -55,15 +53,19 @@ export const useSuspenseQueries: (
55
53
  queryFn:
56
54
  optionsWithQueryKey.queryFn ??
57
55
  function ({ queryKey: [, queryParams], signal, meta }) {
58
- return requestClient(schema, {
59
- parameters: queryParams as never,
60
- signal,
61
- meta,
62
- });
56
+ return contextValue.request(
57
+ { baseUrl: contextValue.baseUrl },
58
+ schema,
59
+ {
60
+ parameters: queryParams as never,
61
+ signal,
62
+ meta,
63
+ }
64
+ );
63
65
  },
64
66
  };
65
67
  }),
66
68
  },
67
- useQueryClient(queryClientByArg ?? queryClientByContext)
69
+ useQueryClient(qraftOptions, queryClientByArg)
68
70
  ) as never;
69
71
  };
@@ -4,15 +4,15 @@ import { useContext } from 'react';
4
4
 
5
5
  import type { DefaultError } from '@tanstack/query-core';
6
6
  import {
7
- useQueryClient,
8
7
  UseQueryResult,
9
8
  useSuspenseQuery as useSuspenseQueryTanstack,
10
9
  } from '@tanstack/react-query';
11
10
 
12
11
  import { composeQueryKey } from '../lib/composeQueryKey.js';
12
+ import type { OperationRequestSchema } from '../lib/request.js';
13
+ import { useQueryClient } from '../lib/useQueryClient.js';
13
14
  import type { QraftClientOptions } from '../qraftAPIClient.js';
14
15
  import { QraftContext } from '../QraftContext.js';
15
- import type { RequestClientSchema } from '../RequestClient.js';
16
16
  import {
17
17
  ServiceOperationQuery,
18
18
  ServiceOperationQueryKey,
@@ -24,10 +24,10 @@ export const useSuspenseQuery: <
24
24
  TData = TQueryFnData,
25
25
  >(
26
26
  qraftOptions: QraftClientOptions | undefined,
27
- schema: RequestClientSchema,
27
+ schema: OperationRequestSchema,
28
28
  args: Parameters<
29
29
  ServiceOperationQuery<
30
- RequestClientSchema,
30
+ OperationRequestSchema,
31
31
  unknown,
32
32
  unknown
33
33
  >['useSuspenseQuery']
@@ -35,12 +35,10 @@ export const useSuspenseQuery: <
35
35
  ) => UseQueryResult<TData, TError> = (qraftOptions, schema, args) => {
36
36
  const [parameters, options, queryClientByArg] = args;
37
37
 
38
- const { requestClient, queryClient: queryClientByContext } =
39
- useContext(qraftOptions?.context ?? QraftContext) ?? {};
38
+ const contextValue = useContext(qraftOptions?.context ?? QraftContext);
39
+ if (!contextValue?.request) throw new Error(`QraftContext.request not found`);
40
40
 
41
- if (!requestClient) throw new Error(`QraftContext.requestClient not found`);
42
-
43
- const queryKey: ServiceOperationQueryKey<RequestClientSchema, unknown> =
41
+ const queryKey: ServiceOperationQueryKey<OperationRequestSchema, unknown> =
44
42
  Array.isArray(parameters)
45
43
  ? (parameters as never)
46
44
  : composeQueryKey(schema, parameters);
@@ -52,13 +50,17 @@ export const useSuspenseQuery: <
52
50
  queryFn:
53
51
  options?.queryFn ??
54
52
  function ({ queryKey: [, queryParams], signal, meta }) {
55
- return requestClient(schema, {
56
- parameters: queryParams as never,
57
- signal,
58
- meta,
59
- });
53
+ return contextValue.request(
54
+ { baseUrl: contextValue.baseUrl },
55
+ schema,
56
+ {
57
+ parameters: queryParams as never,
58
+ signal,
59
+ meta,
60
+ }
61
+ );
60
62
  },
61
63
  },
62
- useQueryClient(queryClientByArg ?? queryClientByContext)
64
+ useQueryClient(qraftOptions, queryClientByArg)
63
65
  ) as never;
64
66
  };
package/src/index.ts CHANGED
@@ -1,11 +1,16 @@
1
- export { qraftAPIClient } from './qraftAPIClient.js';
2
- export type { QraftClientOptions } from './qraftAPIClient.js';
3
- export { QraftContext } from './QraftContext.js';
4
- export type { QraftContextValue } from './QraftContext.js';
5
- export { request, urlSerializer, bodySerializer } from './lib/request.js';
6
- export type { APIRequestInit, HeadersOptions } from './lib/request.js';
1
+ export { qraftAPIClient, type QraftClientOptions } from './qraftAPIClient.js';
2
+ export { QraftContext, type QraftContextValue } from './QraftContext.js';
3
+ export {
4
+ request,
5
+ baseRequest,
6
+ urlSerializer,
7
+ bodySerializer,
8
+ type OperationRequestInfo,
9
+ type OperationRequestSchema,
10
+ type RequestOptions,
11
+ type HeadersOptions,
12
+ } from './lib/request.js';
7
13
  export type {
8
14
  ServiceOperationQuery,
9
15
  ServiceOperationMutation,
10
16
  } from './ServiceOperation.js';
11
- export type { RequestClient } from './RequestClient.js';
@@ -1,7 +1,7 @@
1
1
  import type { QueryClient } from '@tanstack/query-core';
2
2
 
3
- import type { RequestClientSchema } from '../RequestClient.js';
4
- import { composeQueryKey } from './composeQueryKey.js';
3
+ import { composeQueryFilters } from './composeQueryFilters.js';
4
+ import type { OperationRequestSchema } from './request.js';
5
5
 
6
6
  /**
7
7
  * Calls a query client method with query filters and options,
@@ -11,7 +11,7 @@ export function callQueryClientMethodWithQueryFilters<
11
11
  QFMethod extends QueryFilterMethods,
12
12
  >(
13
13
  queryFilterMethod: QFMethod,
14
- schema: RequestClientSchema,
14
+ schema: OperationRequestSchema,
15
15
  args: [QueryClient, ...Parameters<(typeof QueryClient.prototype)[QFMethod]>]
16
16
  ): ReturnType<(typeof QueryClient.prototype)[QFMethod]> {
17
17
  const queryClient = (
@@ -24,7 +24,7 @@ export function callQueryClientMethodWithQueryFilters<
24
24
  : undefined
25
25
  ) as QueryClient | undefined;
26
26
 
27
- const filters = composeFilters(
27
+ const filters = composeQueryFilters(
28
28
  schema,
29
29
  args.length === 1 ? undefined : args[0]
30
30
  );
@@ -44,42 +44,6 @@ export function callQueryClientMethodWithQueryFilters<
44
44
  return queryClient[queryFilterMethod](filters);
45
45
  }
46
46
 
47
- /**
48
- * Replaces the `parameters` field in the filters with a `queryKey` field based on the schema.
49
- * If no filters are provided, a `queryKey` will be composed schema's base query key.
50
- * @param schema
51
- * @param filters
52
- */
53
- function composeFilters<Filters extends object>(
54
- schema: RequestClientSchema,
55
- filters: Filters | undefined
56
- ) {
57
- if (!filters) {
58
- return {
59
- queryKey: composeQueryKey(schema, undefined),
60
- };
61
- }
62
-
63
- if ('queryKey' in filters) {
64
- return filters;
65
- }
66
-
67
- if ('parameters' in filters) {
68
- const { parameters, ...filtersWithoutParameters } = filters;
69
-
70
- Object.assign(filtersWithoutParameters, {
71
- queryKey: composeQueryKey(schema, parameters),
72
- });
73
-
74
- return filtersWithoutParameters;
75
- }
76
-
77
- return {
78
- ...filters,
79
- queryKey: composeQueryKey(schema, undefined),
80
- };
81
- }
82
-
83
47
  type QueryFiltersMethod<QFMethod extends keyof typeof QueryClient.prototype> =
84
48
  QFMethod;
85
49
 
@@ -1,8 +1,8 @@
1
- import type { RequestClientSchema } from '../RequestClient.js';
2
- import { ServiceOperationInfiniteQueryKey } from '../ServiceOperation.js';
1
+ import type { ServiceOperationInfiniteQueryKey } from '../ServiceOperation.js';
2
+ import type { OperationRequestSchema } from './request.js';
3
3
 
4
4
  export function composeInfiniteQueryKey<
5
- TSchema extends RequestClientSchema,
5
+ TSchema extends OperationRequestSchema,
6
6
  TParams,
7
7
  >(
8
8
  schema: TSchema,
@@ -1,26 +1,26 @@
1
- import type { RequestClientSchema } from '../RequestClient.js';
2
- import { ServiceOperationMutationKey } from '../ServiceOperation.js';
1
+ import type { ServiceOperationMutationKey } from '../ServiceOperation.js';
2
+ import type { OperationRequestSchema } from './request.js';
3
3
 
4
4
  /**
5
5
  * Omit `body` or `requestBody` from mutation parameters if exists
6
6
  * and return the rest of the parameters
7
7
  */
8
8
  export function composeMutationKey<
9
- TSchema extends RequestClientSchema,
9
+ TSchema extends OperationRequestSchema,
10
10
  TParams = undefined,
11
11
  >(
12
12
  schema: TSchema,
13
13
  parameters: undefined
14
14
  ): ServiceOperationMutationKey<TSchema, undefined>;
15
15
  export function composeMutationKey<
16
- TSchema extends RequestClientSchema,
16
+ TSchema extends OperationRequestSchema,
17
17
  TParams,
18
18
  >(
19
19
  schema: TSchema,
20
20
  parameters: TParams
21
21
  ): ServiceOperationMutationKey<TSchema, TParams>;
22
22
  export function composeMutationKey<
23
- TSchema extends RequestClientSchema,
23
+ TSchema extends OperationRequestSchema,
24
24
  TParams = unknown,
25
25
  >(schema: TSchema, parameters: TParams | undefined) {
26
26
  return parameters === undefined