@geekmidas/client 0.4.0 → 0.5.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 (71) hide show
  1. package/dist/auth-fetcher.cjs +0 -1
  2. package/dist/auth-fetcher.cjs.map +1 -1
  3. package/dist/auth-fetcher.d.cts +1 -1
  4. package/dist/auth-fetcher.d.cts.map +1 -1
  5. package/dist/auth-fetcher.d.mts +1 -1
  6. package/dist/auth-fetcher.d.mts.map +1 -1
  7. package/dist/auth-fetcher.mjs +0 -1
  8. package/dist/auth-fetcher.mjs.map +1 -1
  9. package/dist/endpoint-hooks.cjs +10 -5
  10. package/dist/endpoint-hooks.cjs.map +1 -1
  11. package/dist/endpoint-hooks.d.cts +2 -2
  12. package/dist/endpoint-hooks.d.cts.map +1 -1
  13. package/dist/endpoint-hooks.d.mts +2 -2
  14. package/dist/endpoint-hooks.d.mts.map +1 -1
  15. package/dist/endpoint-hooks.mjs +10 -5
  16. package/dist/endpoint-hooks.mjs.map +1 -1
  17. package/dist/fetcher-5fnBE7Dk.mjs.map +1 -1
  18. package/dist/fetcher-CgLEaIAC.cjs.map +1 -1
  19. package/dist/fetcher.d.cts +1 -1
  20. package/dist/fetcher.d.cts.map +1 -1
  21. package/dist/fetcher.d.mts +1 -1
  22. package/dist/fetcher.d.mts.map +1 -1
  23. package/dist/infer.d.cts.map +1 -1
  24. package/dist/infer.d.mts.map +1 -1
  25. package/dist/openapi-hooks.cjs.map +1 -1
  26. package/dist/openapi-hooks.d.cts +2 -2
  27. package/dist/openapi-hooks.d.cts.map +1 -1
  28. package/dist/openapi-hooks.d.mts +2 -2
  29. package/dist/openapi-hooks.d.mts.map +1 -1
  30. package/dist/openapi-hooks.mjs.map +1 -1
  31. package/dist/openapi-types.d.cts.map +1 -1
  32. package/dist/openapi-types.d.mts.map +1 -1
  33. package/dist/openapi.cjs.map +1 -1
  34. package/dist/openapi.mjs.map +1 -1
  35. package/dist/react-query.cjs.map +1 -1
  36. package/dist/react-query.d.cts +1 -1
  37. package/dist/react-query.d.cts.map +1 -1
  38. package/dist/react-query.d.mts +1 -1
  39. package/dist/react-query.d.mts.map +1 -1
  40. package/dist/react-query.mjs.map +1 -1
  41. package/dist/{types-FxummKaL.d.mts → types-4K4N-Fl1.d.cts} +2 -2
  42. package/dist/types-4K4N-Fl1.d.cts.map +1 -0
  43. package/dist/{types-vutATyWv.d.cts → types-hhkZWjQn.d.mts} +2 -2
  44. package/dist/types-hhkZWjQn.d.mts.map +1 -0
  45. package/dist/types.d.cts +1 -1
  46. package/dist/types.d.mts +1 -1
  47. package/package.json +3 -3
  48. package/src/__tests__/auth-fetcher.spec.ts +476 -476
  49. package/src/__tests__/endpoint-hooks.spec.tsx +348 -348
  50. package/src/__tests__/fetcher.spec.ts +403 -403
  51. package/src/__tests__/infer.integration.spec.ts +171 -171
  52. package/src/__tests__/infer.spec.ts +182 -182
  53. package/src/__tests__/method-restrictions.spec.tsx +165 -165
  54. package/src/__tests__/openapi-hooks.spec.tsx +536 -536
  55. package/src/__tests__/react-query-infinite.spec.tsx +989 -989
  56. package/src/__tests__/react-query-invalidation.spec.tsx +223 -222
  57. package/src/__tests__/react-query.spec.tsx +567 -567
  58. package/src/__tests__/setup.ts +260 -260
  59. package/src/__tests__/types.spec.ts +127 -127
  60. package/src/__tests__/url-parsing.spec.ts +191 -191
  61. package/src/auth-fetcher.ts +160 -162
  62. package/src/endpoint-hooks.ts +151 -156
  63. package/src/fetcher.ts +163 -163
  64. package/src/infer.ts +64 -63
  65. package/src/openapi-hooks.ts +146 -146
  66. package/src/openapi-types.d.ts +428 -428
  67. package/src/openapi.json +593 -593
  68. package/src/react-query.ts +281 -281
  69. package/src/types.ts +121 -124
  70. package/dist/types-FxummKaL.d.mts.map +0 -1
  71. package/dist/types-vutATyWv.d.cts.map +0 -1
@@ -1,110 +1,110 @@
1
1
  import type {
2
- QueryClient,
3
- UseMutationOptions,
4
- UseQueryOptions,
2
+ QueryClient,
3
+ UseMutationOptions,
4
+ UseQueryOptions,
5
5
  } from '@tanstack/react-query';
6
6
  import { useMutation, useQuery } from '@tanstack/react-query';
7
7
  import { useMemo } from 'react';
8
8
  import type {
9
- ExtractEndpointResponse,
10
- FilteredRequestConfig,
11
- IsConfigRequired,
12
- MutationEndpoint,
13
- QueryEndpoint,
14
- TypedApiFunction,
9
+ ExtractEndpointResponse,
10
+ FilteredRequestConfig,
11
+ IsConfigRequired,
12
+ MutationEndpoint,
13
+ QueryEndpoint,
14
+ TypedApiFunction,
15
15
  } from './types';
16
16
 
17
17
  /**
18
18
  * Build query key from endpoint and config
19
19
  */
20
20
  function buildQueryKey<Paths, T extends QueryEndpoint<Paths>>(
21
- endpoint: T,
22
- config?: FilteredRequestConfig<Paths, T>,
21
+ endpoint: T,
22
+ config?: FilteredRequestConfig<Paths, T>,
23
23
  ): unknown[] {
24
- const key: unknown[] = [endpoint];
24
+ const key: unknown[] = [endpoint];
25
25
 
26
- if (config && 'params' in config && config.params) {
27
- key.push({ params: config.params });
28
- }
26
+ if (config && 'params' in config && config.params) {
27
+ key.push({ params: config.params });
28
+ }
29
29
 
30
- if (config && 'query' in config && config.query) {
31
- key.push({ query: config.query });
32
- }
30
+ if (config && 'query' in config && config.query) {
31
+ key.push({ query: config.query });
32
+ }
33
33
 
34
- return key;
34
+ return key;
35
35
  }
36
36
 
37
37
  /**
38
38
  * Options for creating endpoint-based hooks
39
39
  */
40
40
  export interface CreateEndpointHooksOptions {
41
- queryClient?: QueryClient;
41
+ queryClient?: QueryClient;
42
42
  }
43
43
 
44
44
  /**
45
45
  * Hook options type that conditionally requires config
46
46
  */
47
47
  type UseQueryArgs<Paths, T extends QueryEndpoint<Paths>> = IsConfigRequired<
48
- Paths,
49
- T
48
+ Paths,
49
+ T
50
50
  > extends true
51
- ? [
52
- config: FilteredRequestConfig<Paths, T>,
53
- options?: Omit<
54
- UseQueryOptions<ExtractEndpointResponse<Paths, T>, Error>,
55
- 'queryKey' | 'queryFn'
56
- >,
57
- ]
58
- : [
59
- config?: FilteredRequestConfig<Paths, T>,
60
- options?: Omit<
61
- UseQueryOptions<ExtractEndpointResponse<Paths, T>, Error>,
62
- 'queryKey' | 'queryFn'
63
- >,
64
- ];
51
+ ? [
52
+ config: FilteredRequestConfig<Paths, T>,
53
+ options?: Omit<
54
+ UseQueryOptions<ExtractEndpointResponse<Paths, T>, Error>,
55
+ 'queryKey' | 'queryFn'
56
+ >,
57
+ ]
58
+ : [
59
+ config?: FilteredRequestConfig<Paths, T>,
60
+ options?: Omit<
61
+ UseQueryOptions<ExtractEndpointResponse<Paths, T>, Error>,
62
+ 'queryKey' | 'queryFn'
63
+ >,
64
+ ];
65
65
 
66
66
  /**
67
67
  * Endpoint-based React Query hooks
68
68
  */
69
69
  export interface EndpointHooks<Paths> {
70
- /**
71
- * Use query hook for GET endpoints.
72
- * Config is required when endpoint has path params.
73
- */
74
- useQuery: <T extends QueryEndpoint<Paths>>(
75
- endpoint: T,
76
- ...args: UseQueryArgs<Paths, T>
77
- ) => ReturnType<typeof useQuery<ExtractEndpointResponse<Paths, T>, Error>>;
78
-
79
- /**
80
- * Use mutation hook for POST, PUT, PATCH, DELETE endpoints.
81
- * Config with params/body is passed to mutate().
82
- */
83
- useMutation: <T extends MutationEndpoint<Paths>>(
84
- endpoint: T,
85
- options?: Omit<
86
- UseMutationOptions<
87
- ExtractEndpointResponse<Paths, T>,
88
- Error,
89
- FilteredRequestConfig<Paths, T>
90
- >,
91
- 'mutationFn'
92
- >,
93
- ) => ReturnType<
94
- typeof useMutation<
95
- ExtractEndpointResponse<Paths, T>,
96
- Error,
97
- FilteredRequestConfig<Paths, T>
98
- >
99
- >;
100
-
101
- /**
102
- * Build a query key for manual cache operations
103
- */
104
- buildQueryKey: <T extends QueryEndpoint<Paths>>(
105
- endpoint: T,
106
- config?: FilteredRequestConfig<Paths, T>,
107
- ) => unknown[];
70
+ /**
71
+ * Use query hook for GET endpoints.
72
+ * Config is required when endpoint has path params.
73
+ */
74
+ useQuery: <T extends QueryEndpoint<Paths>>(
75
+ endpoint: T,
76
+ ...args: UseQueryArgs<Paths, T>
77
+ ) => ReturnType<typeof useQuery<ExtractEndpointResponse<Paths, T>, Error>>;
78
+
79
+ /**
80
+ * Use mutation hook for POST, PUT, PATCH, DELETE endpoints.
81
+ * Config with params/body is passed to mutate().
82
+ */
83
+ useMutation: <T extends MutationEndpoint<Paths>>(
84
+ endpoint: T,
85
+ options?: Omit<
86
+ UseMutationOptions<
87
+ ExtractEndpointResponse<Paths, T>,
88
+ Error,
89
+ FilteredRequestConfig<Paths, T>
90
+ >,
91
+ 'mutationFn'
92
+ >,
93
+ ) => ReturnType<
94
+ typeof useMutation<
95
+ ExtractEndpointResponse<Paths, T>,
96
+ Error,
97
+ FilteredRequestConfig<Paths, T>
98
+ >
99
+ >;
100
+
101
+ /**
102
+ * Build a query key for manual cache operations
103
+ */
104
+ buildQueryKey: <T extends QueryEndpoint<Paths>>(
105
+ endpoint: T,
106
+ config?: FilteredRequestConfig<Paths, T>,
107
+ ) => unknown[];
108
108
  }
109
109
 
110
110
  /**
@@ -123,87 +123,82 @@ export interface EndpointHooks<Paths> {
123
123
  * ```
124
124
  */
125
125
  export function createEndpointHooks<Paths>(
126
- fetcher: TypedApiFunction<Paths>,
127
- options: CreateEndpointHooksOptions = {},
126
+ fetcher: TypedApiFunction<Paths>,
127
+ _options: CreateEndpointHooksOptions = {},
128
128
  ): EndpointHooks<Paths> {
129
- return {
130
- useQuery: <T extends QueryEndpoint<Paths>>(
131
- endpoint: T,
132
- ...args: UseQueryArgs<Paths, T>
133
- ) => {
134
- // Parse args - config is first, options is second
135
- const [config, queryOptions] = args as [
136
- FilteredRequestConfig<Paths, T> | undefined,
137
- (
138
- | Omit<
139
- UseQueryOptions<ExtractEndpointResponse<Paths, T>, Error>,
140
- 'queryKey' | 'queryFn'
141
- >
142
- | undefined
143
- ),
144
- ];
145
-
146
- const queryKey = buildQueryKey(endpoint, config);
147
-
148
- const memoizedOptions = useMemo(
149
- () => ({
150
- queryKey,
151
- queryFn: () =>
152
- // Type assertion needed due to complex conditional types
153
- (
154
- fetcher as (
155
- endpoint: T,
156
- config?: unknown,
157
- ) => Promise<ExtractEndpointResponse<Paths, T>>
158
- )(endpoint, config),
159
- ...queryOptions,
160
- }),
161
- [
162
- queryKey.join(','),
163
- endpoint,
164
- JSON.stringify(config),
165
- JSON.stringify(queryOptions),
166
- ],
167
- );
168
-
169
- return useQuery<ExtractEndpointResponse<Paths, T>, Error>(
170
- memoizedOptions,
171
- );
172
- },
173
-
174
- useMutation: <T extends MutationEndpoint<Paths>>(
175
- endpoint: T,
176
- mutationOptions?: Omit<
177
- UseMutationOptions<
178
- ExtractEndpointResponse<Paths, T>,
179
- Error,
180
- FilteredRequestConfig<Paths, T>
181
- >,
182
- 'mutationFn'
183
- >,
184
- ) => {
185
- const memoizedOptions = useMemo(
186
- () => ({
187
- mutationFn: (config: FilteredRequestConfig<Paths, T>) =>
188
- // Type assertion needed due to complex conditional types
189
- (
190
- fetcher as (
191
- endpoint: T,
192
- config?: unknown,
193
- ) => Promise<ExtractEndpointResponse<Paths, T>>
194
- )(endpoint, config),
195
- ...mutationOptions,
196
- }),
197
- [endpoint, JSON.stringify(mutationOptions)],
198
- );
199
-
200
- return useMutation<
201
- ExtractEndpointResponse<Paths, T>,
202
- Error,
203
- FilteredRequestConfig<Paths, T>
204
- >(memoizedOptions);
205
- },
206
-
207
- buildQueryKey,
208
- };
129
+ return {
130
+ useQuery: <T extends QueryEndpoint<Paths>>(
131
+ endpoint: T,
132
+ ...args: UseQueryArgs<Paths, T>
133
+ ) => {
134
+ // Parse args - config is first, options is second
135
+ const [config, queryOptions] = args as [
136
+ FilteredRequestConfig<Paths, T> | undefined,
137
+ (
138
+ | Omit<
139
+ UseQueryOptions<ExtractEndpointResponse<Paths, T>, Error>,
140
+ 'queryKey' | 'queryFn'
141
+ >
142
+ | undefined
143
+ ),
144
+ ];
145
+
146
+ const queryKey = buildQueryKey(endpoint, config);
147
+
148
+ const memoizedOptions = useMemo(
149
+ () => ({
150
+ queryKey,
151
+ queryFn: () =>
152
+ // Type assertion needed due to complex conditional types
153
+ (
154
+ fetcher as (
155
+ endpoint: T,
156
+ config?: unknown,
157
+ ) => Promise<ExtractEndpointResponse<Paths, T>>
158
+ )(endpoint, config),
159
+ ...queryOptions,
160
+ }),
161
+ [endpoint, config, fetcher, queryKey, queryOptions],
162
+ );
163
+
164
+ return useQuery<ExtractEndpointResponse<Paths, T>, Error>(
165
+ memoizedOptions,
166
+ );
167
+ },
168
+
169
+ useMutation: <T extends MutationEndpoint<Paths>>(
170
+ endpoint: T,
171
+ mutationOptions?: Omit<
172
+ UseMutationOptions<
173
+ ExtractEndpointResponse<Paths, T>,
174
+ Error,
175
+ FilteredRequestConfig<Paths, T>
176
+ >,
177
+ 'mutationFn'
178
+ >,
179
+ ) => {
180
+ const memoizedOptions = useMemo(
181
+ () => ({
182
+ mutationFn: (config: FilteredRequestConfig<Paths, T>) =>
183
+ // Type assertion needed due to complex conditional types
184
+ (
185
+ fetcher as (
186
+ endpoint: T,
187
+ config?: unknown,
188
+ ) => Promise<ExtractEndpointResponse<Paths, T>>
189
+ )(endpoint, config),
190
+ ...mutationOptions,
191
+ }),
192
+ [endpoint, fetcher, mutationOptions],
193
+ );
194
+
195
+ return useMutation<
196
+ ExtractEndpointResponse<Paths, T>,
197
+ Error,
198
+ FilteredRequestConfig<Paths, T>
199
+ >(memoizedOptions);
200
+ },
201
+
202
+ buildQueryKey,
203
+ };
209
204
  }