@geekmidas/client 0.4.0 → 1.0.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 (72) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/auth-fetcher.cjs +0 -1
  3. package/dist/auth-fetcher.cjs.map +1 -1
  4. package/dist/auth-fetcher.d.cts +1 -1
  5. package/dist/auth-fetcher.d.cts.map +1 -1
  6. package/dist/auth-fetcher.d.mts +1 -1
  7. package/dist/auth-fetcher.d.mts.map +1 -1
  8. package/dist/auth-fetcher.mjs +0 -1
  9. package/dist/auth-fetcher.mjs.map +1 -1
  10. package/dist/endpoint-hooks.cjs +10 -5
  11. package/dist/endpoint-hooks.cjs.map +1 -1
  12. package/dist/endpoint-hooks.d.cts +2 -2
  13. package/dist/endpoint-hooks.d.cts.map +1 -1
  14. package/dist/endpoint-hooks.d.mts +2 -2
  15. package/dist/endpoint-hooks.d.mts.map +1 -1
  16. package/dist/endpoint-hooks.mjs +10 -5
  17. package/dist/endpoint-hooks.mjs.map +1 -1
  18. package/dist/fetcher-5fnBE7Dk.mjs.map +1 -1
  19. package/dist/fetcher-CgLEaIAC.cjs.map +1 -1
  20. package/dist/fetcher.d.cts +1 -1
  21. package/dist/fetcher.d.cts.map +1 -1
  22. package/dist/fetcher.d.mts +1 -1
  23. package/dist/fetcher.d.mts.map +1 -1
  24. package/dist/infer.d.cts.map +1 -1
  25. package/dist/infer.d.mts.map +1 -1
  26. package/dist/openapi-hooks.cjs.map +1 -1
  27. package/dist/openapi-hooks.d.cts +2 -2
  28. package/dist/openapi-hooks.d.cts.map +1 -1
  29. package/dist/openapi-hooks.d.mts +5 -5
  30. package/dist/openapi-hooks.d.mts.map +1 -1
  31. package/dist/openapi-hooks.mjs.map +1 -1
  32. package/dist/openapi-types.d.cts.map +1 -1
  33. package/dist/openapi-types.d.mts.map +1 -1
  34. package/dist/openapi.cjs.map +1 -1
  35. package/dist/openapi.mjs.map +1 -1
  36. package/dist/react-query.cjs.map +1 -1
  37. package/dist/react-query.d.cts +1 -1
  38. package/dist/react-query.d.cts.map +1 -1
  39. package/dist/react-query.d.mts +8 -8
  40. package/dist/react-query.d.mts.map +1 -1
  41. package/dist/react-query.mjs.map +1 -1
  42. package/dist/{types-FxummKaL.d.mts → types-4K4N-Fl1.d.cts} +2 -2
  43. package/dist/types-4K4N-Fl1.d.cts.map +1 -0
  44. package/dist/{types-vutATyWv.d.cts → types-hhkZWjQn.d.mts} +2 -2
  45. package/dist/types-hhkZWjQn.d.mts.map +1 -0
  46. package/dist/types.d.cts +1 -1
  47. package/dist/types.d.mts +1 -1
  48. package/package.json +5 -5
  49. package/src/__tests__/auth-fetcher.spec.ts +476 -476
  50. package/src/__tests__/endpoint-hooks.spec.tsx +348 -348
  51. package/src/__tests__/fetcher.spec.ts +403 -403
  52. package/src/__tests__/infer.integration.spec.ts +171 -171
  53. package/src/__tests__/infer.spec.ts +182 -182
  54. package/src/__tests__/method-restrictions.spec.tsx +165 -165
  55. package/src/__tests__/openapi-hooks.spec.tsx +536 -536
  56. package/src/__tests__/react-query-infinite.spec.tsx +989 -989
  57. package/src/__tests__/react-query-invalidation.spec.tsx +223 -222
  58. package/src/__tests__/react-query.spec.tsx +567 -567
  59. package/src/__tests__/setup.ts +260 -260
  60. package/src/__tests__/types.spec.ts +127 -127
  61. package/src/__tests__/url-parsing.spec.ts +191 -191
  62. package/src/auth-fetcher.ts +160 -162
  63. package/src/endpoint-hooks.ts +151 -156
  64. package/src/fetcher.ts +163 -163
  65. package/src/infer.ts +64 -63
  66. package/src/openapi-hooks.ts +146 -146
  67. package/src/openapi-types.d.ts +428 -428
  68. package/src/openapi.json +593 -593
  69. package/src/react-query.ts +281 -281
  70. package/src/types.ts +121 -124
  71. package/dist/types-FxummKaL.d.mts.map +0 -1
  72. 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
  }