Skip to content

Commit df56e9c

Browse files
authored
Merge pull request #60 from dev-five-git/refactor
Fix refactor
2 parents 35cf197 + 1c441ed commit df56e9c

File tree

11 files changed

+1440
-247
lines changed

11 files changed

+1440
-247
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"changes":{"packages/zod/package.json":"Patch","packages/core/package.json":"Patch","packages/react-query/package.json":"Patch","packages/hookform/package.json":"Patch","packages/generator/package.json":"Patch","packages/fetch/package.json":"Patch"},"note":"Impl pregen, Fix wrong path issue","date":"2026-03-25T12:54:53.475679Z"}

examples/next/app/page.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ export default function Home() {
3939
const _object2: DevupObject<'response', 'openapi2.json'>['User'] | undefined =
4040
data?.[0]
4141

42+
const _results = queryClient.useQueries([
43+
['GET', 'getUsers', { query: { name: 'John Doe' } }],
44+
['GET', '/users/{id}', { params: { id: 1 }, query: { name: 'John Doe' } }],
45+
])
46+
4247
console.info(data, isLoading, error)
4348

4449
const {

packages/core/src/additional.ts

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,10 @@ export type Additional<
66
Target extends object,
77
> = T extends keyof Target ? Target[T] & object : object
88

9-
export type RequiredOptions<T extends object> = keyof T extends undefined
9+
export type RequiredOptions<T extends object> = ('params' | 'query' | 'body') &
10+
keyof T extends never
1011
? never
11-
: 'params' extends keyof T
12-
? T
13-
: 'query' extends keyof T
14-
? T
15-
: 'body' extends keyof T
16-
? T
17-
: never
12+
: T
1813
export type IsCold = keyof DevupApiServers extends never ? true : false
1914
export type DevupApiRequestInit = Omit<RequestInit, 'body'> & {
2015
body?: object | RequestInit['body']
@@ -40,9 +35,10 @@ export type ExtractValue<T, V extends string, F = any> = V extends keyof T
4035

4136
export type BoildApiOption<O> = Omit<DevupApiRequestInit, 'params'> &
4237
Omit<O, 'response' | 'error'>
43-
export type ConditionalApiOption<O> = IsCold extends true
44-
? DevupApiRequestInit
45-
: BoildApiOption<O>
38+
export type ConditionalApiOption<
39+
O,
40+
_Cold extends boolean = IsCold,
41+
> = _Cold extends true ? DevupApiRequestInit : BoildApiOption<O>
4642

4743
export type ApiOption<O extends object, R extends unknown[] = []> = [
4844
RequiredOptions<O>,

packages/core/src/api-struct.ts

Lines changed: 43 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,24 @@ export interface DevupResponseComponentStruct {}
2828
// biome-ignore lint/suspicious/noEmptyInterface: empty interface
2929
export interface DevupErrorComponentStruct {}
3030

31+
// biome-ignore lint/suspicious/noEmptyInterface: empty interface for augmentation by generator
32+
export interface DevupPrecomputedMethodKeys {}
33+
34+
// biome-ignore lint/suspicious/noEmptyInterface: empty interface for augmentation by generator
35+
export interface DevupPrecomputedScopes {}
36+
37+
type LowercaseMethod = 'get' | 'post' | 'put' | 'delete' | 'patch'
38+
3139
export type DevupObject<
3240
R extends 'response' | 'request' | 'error' = 'response',
3341
T extends keyof DevupApiServers | (string & {}) = 'openapi.json',
34-
> = ExtractValue<
35-
{
36-
response: ExtractValue<DevupResponseComponentStruct, T>
37-
request: ExtractValue<DevupRequestComponentStruct, T>
38-
error: ExtractValue<DevupErrorComponentStruct, T>
39-
},
40-
R
41-
>
42+
> = R extends 'response'
43+
? ExtractValue<DevupResponseComponentStruct, T>
44+
: R extends 'request'
45+
? ExtractValue<DevupRequestComponentStruct, T>
46+
: R extends 'error'
47+
? ExtractValue<DevupErrorComponentStruct, T>
48+
: never
4249

4350
export type DevupGetApiStructScope<O extends string> = ConditionalScope<
4451
DevupGetApiStruct,
@@ -91,25 +98,38 @@ export type DevupApiMethodKeys =
9198
export type DevupApiMethodScope<
9299
S extends string,
93100
M extends DevupApiMethodKeys,
94-
> = {
95-
get: DevupGetApiStructScope<S>
96-
post: DevupPostApiStructScope<S>
97-
put: DevupPutApiStructScope<S>
98-
delete: DevupDeleteApiStructScope<S>
99-
patch: DevupPatchApiStructScope<S>
100-
GET: DevupGetApiStructScope<S>
101-
POST: DevupPostApiStructScope<S>
102-
PUT: DevupPutApiStructScope<S>
103-
DELETE: DevupDeleteApiStructScope<S>
104-
PATCH: DevupPatchApiStructScope<S>
105-
}[M]
101+
> = M extends 'get' | 'GET'
102+
? DevupGetApiStructScope<S>
103+
: M extends 'post' | 'POST'
104+
? DevupPostApiStructScope<S>
105+
: M extends 'put' | 'PUT'
106+
? DevupPutApiStructScope<S>
107+
: M extends 'delete' | 'DELETE'
108+
? DevupDeleteApiStructScope<S>
109+
: M extends 'patch' | 'PATCH'
110+
? DevupPatchApiStructScope<S>
111+
: never
112+
113+
export type DevupApiMethodKey<
114+
S extends string,
115+
M extends DevupApiMethodKeys,
116+
> = S extends keyof DevupPrecomputedMethodKeys
117+
? ExtractValue<
118+
ExtractValue<DevupPrecomputedMethodKeys, S>,
119+
Lowercase<M> & LowercaseMethod,
120+
never
121+
>
122+
: ConditionalKeys<DevupApiMethodScope<S, M>>
106123

107124
export type DevupApiStructScope<O extends string> = DevupGetApiStructScope<O> &
108125
DevupPostApiStructScope<O> &
109126
DevupPutApiStructScope<O> &
110127
DevupDeleteApiStructScope<O> &
111128
DevupPatchApiStructScope<O>
112129

113-
export type DevupApiStructKey<O extends string> = ConditionalKeys<
114-
DevupApiStructScope<O>
115-
>
130+
export type DevupApiStructKey<O extends string> =
131+
| DevupGetApiStructKey<O>
132+
| DevupPostApiStructKey<O>
133+
| DevupPutApiStructKey<O>
134+
| DevupDeleteApiStructKey<O>
135+
| DevupPatchApiStructKey<O>

packages/core/src/utils.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { ExtractValue } from './additional'
2+
import type { DevupApiServers } from './api-struct'
23

3-
export type ConditionalKeys<T, F = string> = keyof T extends undefined
4+
export type ConditionalKeys<T, F = string> = keyof DevupApiServers extends never
45
? F
56
: keyof T & string
67
export type ConditionalScope<T, K extends string> = ExtractValue<T, K, object>

packages/fetch/src/api.ts

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,15 @@ import type {
33
ApiOption,
44
BoildApiOption,
55
ConditionalKeys,
6+
DevupApiMethodKey,
67
DevupApiRequestInit,
78
DevupApiServers,
89
DevupApiStructKey,
910
DevupApiStructScope,
10-
DevupDeleteApiStructKey,
1111
DevupDeleteApiStructScope,
12-
DevupGetApiStructKey,
1312
DevupGetApiStructScope,
14-
DevupPatchApiStructKey,
1513
DevupPatchApiStructScope,
16-
DevupPostApiStructKey,
1714
DevupPostApiStructScope,
18-
DevupPutApiStructKey,
1915
DevupPutApiStructScope,
2016
ExtractValue,
2117
Middleware,
@@ -65,7 +61,7 @@ export class DevupApi<S extends ConditionalKeys<DevupApiServers>> {
6561
}
6662

6763
get<
68-
T extends DevupGetApiStructKey<S>,
64+
T extends DevupApiMethodKey<S, 'get'>,
6965
O extends Additional<T, DevupGetApiStructScope<S>>,
7066
>(
7167
path: T,
@@ -80,7 +76,7 @@ export class DevupApi<S extends ConditionalKeys<DevupApiServers>> {
8076
}
8177

8278
GET<
83-
T extends DevupGetApiStructKey<S>,
79+
T extends DevupApiMethodKey<S, 'get'>,
8480
O extends Additional<T, DevupGetApiStructScope<S>>,
8581
>(
8682
path: T,
@@ -95,7 +91,7 @@ export class DevupApi<S extends ConditionalKeys<DevupApiServers>> {
9591
}
9692

9793
post<
98-
T extends DevupPostApiStructKey<S>,
94+
T extends DevupApiMethodKey<S, 'post'>,
9995
O extends Additional<T, DevupPostApiStructScope<S>>,
10096
>(
10197
path: T,
@@ -110,7 +106,7 @@ export class DevupApi<S extends ConditionalKeys<DevupApiServers>> {
110106
}
111107

112108
POST<
113-
T extends DevupPostApiStructKey<S>,
109+
T extends DevupApiMethodKey<S, 'post'>,
114110
O extends Additional<T, DevupPostApiStructScope<S>>,
115111
>(
116112
path: T,
@@ -125,7 +121,7 @@ export class DevupApi<S extends ConditionalKeys<DevupApiServers>> {
125121
}
126122

127123
put<
128-
T extends DevupPutApiStructKey<S>,
124+
T extends DevupApiMethodKey<S, 'put'>,
129125
O extends Additional<T, DevupPutApiStructScope<S>>,
130126
>(
131127
path: T,
@@ -140,7 +136,7 @@ export class DevupApi<S extends ConditionalKeys<DevupApiServers>> {
140136
}
141137

142138
PUT<
143-
T extends DevupPutApiStructKey<S>,
139+
T extends DevupApiMethodKey<S, 'put'>,
144140
O extends Additional<T, DevupPutApiStructScope<S>>,
145141
>(
146142
path: T,
@@ -155,7 +151,7 @@ export class DevupApi<S extends ConditionalKeys<DevupApiServers>> {
155151
}
156152

157153
delete<
158-
T extends DevupDeleteApiStructKey<S>,
154+
T extends DevupApiMethodKey<S, 'delete'>,
159155
O extends Additional<T, DevupDeleteApiStructScope<S>>,
160156
>(
161157
path: T,
@@ -170,7 +166,7 @@ export class DevupApi<S extends ConditionalKeys<DevupApiServers>> {
170166
}
171167

172168
DELETE<
173-
T extends DevupDeleteApiStructKey<S>,
169+
T extends DevupApiMethodKey<S, 'delete'>,
174170
O extends Additional<T, DevupDeleteApiStructScope<S>>,
175171
>(
176172
path: T,
@@ -185,7 +181,7 @@ export class DevupApi<S extends ConditionalKeys<DevupApiServers>> {
185181
}
186182

187183
patch<
188-
T extends DevupPatchApiStructKey<S>,
184+
T extends DevupApiMethodKey<S, 'patch'>,
189185
O extends Additional<T, DevupPatchApiStructScope<S>>,
190186
>(
191187
path: T,
@@ -200,7 +196,7 @@ export class DevupApi<S extends ConditionalKeys<DevupApiServers>> {
200196
}
201197

202198
PATCH<
203-
T extends DevupPatchApiStructKey<S>,
199+
T extends DevupApiMethodKey<S, 'patch'>,
204200
O extends Additional<T, DevupPatchApiStructScope<S>>,
205201
>(
206202
path: T,

0 commit comments

Comments
 (0)