@kubb/plugin-client 5.0.0-beta.56 → 5.5.2
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.
- package/README.md +8 -61
- package/dist/index.cjs +754 -1745
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +170 -349
- package/dist/index.js +733 -1733
- package/dist/index.js.map +1 -1
- package/package.json +10 -63
- package/src/generators/clientGenerator.tsx +6 -132
- package/src/index.ts +1 -9
- package/src/plugin.ts +32 -122
- package/src/types.ts +27 -249
- package/dist/chunk-Bx3C2hgW.cjs +0 -38
- package/dist/clients/axios.cjs +0 -68
- package/dist/clients/axios.cjs.map +0 -1
- package/dist/clients/axios.d.ts +0 -49
- package/dist/clients/axios.js +0 -58
- package/dist/clients/axios.js.map +0 -1
- package/dist/clients/fetch.cjs +0 -128
- package/dist/clients/fetch.cjs.map +0 -1
- package/dist/clients/fetch.d.ts +0 -50
- package/dist/clients/fetch.js +0 -120
- package/dist/clients/fetch.js.map +0 -1
- package/dist/templates/clients/axios.source.cjs +0 -7
- package/dist/templates/clients/axios.source.cjs.map +0 -1
- package/dist/templates/clients/axios.source.d.ts +0 -7
- package/dist/templates/clients/axios.source.js +0 -6
- package/dist/templates/clients/axios.source.js.map +0 -1
- package/dist/templates/clients/fetch.source.cjs +0 -7
- package/dist/templates/clients/fetch.source.cjs.map +0 -1
- package/dist/templates/clients/fetch.source.d.ts +0 -7
- package/dist/templates/clients/fetch.source.js +0 -6
- package/dist/templates/clients/fetch.source.js.map +0 -1
- package/dist/templates/config.source.cjs +0 -7
- package/dist/templates/config.source.cjs.map +0 -1
- package/dist/templates/config.source.d.ts +0 -7
- package/dist/templates/config.source.js +0 -6
- package/dist/templates/config.source.js.map +0 -1
- package/src/clients/axios.ts +0 -113
- package/src/clients/fetch.ts +0 -201
- package/src/components/ClassClient.tsx +0 -161
- package/src/components/Client.tsx +0 -281
- package/src/components/StaticClassClient.tsx +0 -153
- package/src/components/Url.tsx +0 -90
- package/src/components/WrapperClient.tsx +0 -33
- package/src/functionParams.ts +0 -118
- package/src/generators/classClientGenerator.tsx +0 -261
- package/src/generators/groupedClientGenerator.tsx +0 -82
- package/src/generators/operationsGenerator.ts +0 -47
- package/src/generators/staticClassClientGenerator.tsx +0 -240
- package/src/resolvers/resolverClient.ts +0 -46
- package/src/templates/clients/axios.source.ts +0 -4
- package/src/templates/clients/fetch.source.ts +0 -4
- package/src/templates/config.source.ts +0 -4
- package/src/utils.ts +0 -259
- /package/dist/{chunk-C0LytTxp.js → rolldown-runtime-C0LytTxp.js} +0 -0
package/src/utils.ts
DELETED
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
import { buildStatusUnionType, getOperationParameters, getResponseType, resolveSuccessNames } from '@internals/shared'
|
|
2
|
-
import { ast } from '@kubb/core'
|
|
3
|
-
import type { ResolverTs } from '@kubb/plugin-ts'
|
|
4
|
-
import type { ResolverZod } from '@kubb/plugin-zod'
|
|
5
|
-
import { createFunctionParams } from './functionParams.ts'
|
|
6
|
-
import type { PluginClient } from './types.ts'
|
|
7
|
-
|
|
8
|
-
type ParserOption = PluginClient['resolvedOptions']['parser']
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Returns `true` when any direction of the parser uses Zod (used for dependency checks).
|
|
12
|
-
*/
|
|
13
|
-
export function isParserEnabled(parser: ParserOption | undefined | false): boolean {
|
|
14
|
-
if (!parser) return false
|
|
15
|
-
if (parser === 'zod') return true
|
|
16
|
-
return !!(parser.request || parser.response)
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Returns `'zod'` when request body parsing is enabled, `null` otherwise.
|
|
21
|
-
* The string shorthand `'zod'` also enables request body parsing (existing behavior).
|
|
22
|
-
*/
|
|
23
|
-
export function resolveRequestParser(parser: ParserOption | undefined | false): 'zod' | null {
|
|
24
|
-
if (!parser) return null
|
|
25
|
-
if (parser === 'zod') return 'zod'
|
|
26
|
-
return parser.request ?? null
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Returns `'zod'` when query-parameters parsing is enabled, `null` otherwise.
|
|
31
|
-
* Only the object form `{ request: 'zod' }` enables query-params parsing.
|
|
32
|
-
* The string shorthand `'zod'` does not, preserving its existing behavior.
|
|
33
|
-
*/
|
|
34
|
-
export function resolveQueryParamsParser(parser: ParserOption | undefined | false): 'zod' | null {
|
|
35
|
-
if (!parser || parser === 'zod') return null
|
|
36
|
-
return parser.request ?? null
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Returns `'zod'` when response-direction parsing is enabled, `null` otherwise.
|
|
41
|
-
* `parser: 'zod'` (string shorthand) maps to response parsing and returns `'zod'`.
|
|
42
|
-
*/
|
|
43
|
-
export function resolveResponseParser(parser: ParserOption | undefined | false): 'zod' | null {
|
|
44
|
-
if (!parser) return null
|
|
45
|
-
if (parser === 'zod') return 'zod'
|
|
46
|
-
return parser.response ?? null
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export { buildStatusUnionType }
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Builds HTTP headers array for a client request.
|
|
53
|
-
* Includes Content-Type (if not default) and spreads header parameters if present.
|
|
54
|
-
*/
|
|
55
|
-
export function buildHeaders(contentType: string, hasHeaderParams: boolean): Array<string> {
|
|
56
|
-
return [
|
|
57
|
-
contentType !== 'application/json' && contentType !== 'multipart/form-data' ? `'Content-Type': '${contentType}'` : null,
|
|
58
|
-
hasHeaderParams ? '...headers' : null,
|
|
59
|
-
].filter(Boolean) as Array<string>
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Returns the generic type arguments — response, error, and request body — for a generated
|
|
64
|
-
* client call.
|
|
65
|
-
*
|
|
66
|
-
* When `dataReturnType` is `'full'`, the response generic widens to a union of all documented
|
|
67
|
-
* status types. When `parser` is `'zod'` and a request body schema exists, the request type
|
|
68
|
-
* uses `z.output<typeof schema>` to reflect post-transform types (e.g. date coercion).
|
|
69
|
-
*/
|
|
70
|
-
export function buildGenerics(
|
|
71
|
-
node: ast.OperationNode,
|
|
72
|
-
tsResolver: ResolverTs,
|
|
73
|
-
options: {
|
|
74
|
-
dataReturnType?: PluginClient['resolvedOptions']['dataReturnType']
|
|
75
|
-
zodResolver?: ResolverZod | null
|
|
76
|
-
parser?: PluginClient['resolvedOptions']['parser']
|
|
77
|
-
} = {},
|
|
78
|
-
): Array<string> {
|
|
79
|
-
const allStatusNames = node.responses.map((r) => tsResolver.resolveResponseStatusName(node, r.statusCode))
|
|
80
|
-
const successNames = resolveSuccessNames(node, tsResolver)
|
|
81
|
-
const responseName =
|
|
82
|
-
options.dataReturnType === 'full'
|
|
83
|
-
? allStatusNames.length > 0
|
|
84
|
-
? allStatusNames.join(' | ')
|
|
85
|
-
: tsResolver.resolveResponseName(node)
|
|
86
|
-
: successNames.length > 0
|
|
87
|
-
? successNames.join(' | ')
|
|
88
|
-
: tsResolver.resolveResponseName(node)
|
|
89
|
-
const requestName = node.requestBody?.content?.[0]?.schema ? tsResolver.resolveDataName(node) : null
|
|
90
|
-
const errorNames = node.responses.filter((r) => Number.parseInt(r.statusCode, 10) >= 400).map((r) => tsResolver.resolveResponseStatusName(node, r.statusCode))
|
|
91
|
-
const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`
|
|
92
|
-
|
|
93
|
-
const zodRequestName =
|
|
94
|
-
options.parser === 'zod' && options.zodResolver && node.requestBody?.content?.[0]?.schema ? (options.zodResolver.resolveDataName?.(node) ?? null) : null
|
|
95
|
-
|
|
96
|
-
const requestGenericType = zodRequestName ? `z.output<typeof ${zodRequestName}>` : requestName || 'unknown'
|
|
97
|
-
|
|
98
|
-
return [responseName, TError, requestGenericType].filter(Boolean)
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Builds the parameters object for a class-based client method.
|
|
103
|
-
* Includes URL, method, base URL, headers, and request/response data.
|
|
104
|
-
*/
|
|
105
|
-
export function buildClassClientParams({
|
|
106
|
-
node,
|
|
107
|
-
url,
|
|
108
|
-
baseURL,
|
|
109
|
-
tsResolver,
|
|
110
|
-
isFormData,
|
|
111
|
-
isMultipleContentTypes,
|
|
112
|
-
hasFormData,
|
|
113
|
-
headers,
|
|
114
|
-
zodQueryParamsName,
|
|
115
|
-
}: {
|
|
116
|
-
node: ast.OperationNode
|
|
117
|
-
url: string
|
|
118
|
-
baseURL: string | null | undefined
|
|
119
|
-
tsResolver: ResolverTs
|
|
120
|
-
isFormData: boolean
|
|
121
|
-
isMultipleContentTypes: boolean
|
|
122
|
-
hasFormData: boolean
|
|
123
|
-
headers: Array<string>
|
|
124
|
-
zodQueryParamsName?: string | null
|
|
125
|
-
}) {
|
|
126
|
-
const { query: queryParams } = getOperationParameters(node)
|
|
127
|
-
const queryParamsName = queryParams.length > 0 ? tsResolver.resolveQueryParamsName(node, queryParams[0]!) : null
|
|
128
|
-
const requestName = node.requestBody?.content?.[0]?.schema ? tsResolver.resolveDataName(node) : null
|
|
129
|
-
const responseType = getResponseType(node)
|
|
130
|
-
|
|
131
|
-
return createFunctionParams({
|
|
132
|
-
config: {
|
|
133
|
-
mode: 'object',
|
|
134
|
-
children: {
|
|
135
|
-
requestConfig: {
|
|
136
|
-
mode: 'inlineSpread',
|
|
137
|
-
},
|
|
138
|
-
method: {
|
|
139
|
-
value: JSON.stringify(ast.isHttpOperationNode(node) ? node.method.toUpperCase() : ''),
|
|
140
|
-
},
|
|
141
|
-
url: {
|
|
142
|
-
value: url,
|
|
143
|
-
},
|
|
144
|
-
baseURL: baseURL
|
|
145
|
-
? {
|
|
146
|
-
value: JSON.stringify(baseURL),
|
|
147
|
-
}
|
|
148
|
-
: null,
|
|
149
|
-
params: queryParamsName ? (zodQueryParamsName ? { value: 'requestParams' } : {}) : null,
|
|
150
|
-
data: requestName
|
|
151
|
-
? {
|
|
152
|
-
value:
|
|
153
|
-
isMultipleContentTypes && hasFormData
|
|
154
|
-
? "contentType === 'multipart/form-data' ? formData as FormData : requestData"
|
|
155
|
-
: isFormData
|
|
156
|
-
? 'formData as FormData'
|
|
157
|
-
: 'requestData',
|
|
158
|
-
}
|
|
159
|
-
: null,
|
|
160
|
-
contentType: isMultipleContentTypes ? {} : null,
|
|
161
|
-
responseType: responseType ? { value: JSON.stringify(responseType) } : null,
|
|
162
|
-
headers: headers.length
|
|
163
|
-
? {
|
|
164
|
-
value: `{ ${headers.join(', ')}, ...requestConfig.headers }`,
|
|
165
|
-
}
|
|
166
|
-
: null,
|
|
167
|
-
},
|
|
168
|
-
},
|
|
169
|
-
})
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Builds the request data parsing line for client methods.
|
|
174
|
-
* Applies Zod validation when `parser.request === 'zod'`, otherwise assigns data directly.
|
|
175
|
-
*/
|
|
176
|
-
export function buildRequestDataLine({
|
|
177
|
-
parser,
|
|
178
|
-
node,
|
|
179
|
-
zodResolver,
|
|
180
|
-
}: {
|
|
181
|
-
parser: PluginClient['resolvedOptions']['parser'] | undefined
|
|
182
|
-
node: ast.OperationNode
|
|
183
|
-
zodResolver?: ResolverZod | null
|
|
184
|
-
}): string {
|
|
185
|
-
const requestParser = resolveRequestParser(parser)
|
|
186
|
-
const zodRequestName = zodResolver && requestParser === 'zod' && node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : null
|
|
187
|
-
if (requestParser === 'zod' && zodRequestName) {
|
|
188
|
-
return `const requestData = ${zodRequestName}.parse(data)`
|
|
189
|
-
}
|
|
190
|
-
if (node.requestBody?.content?.[0]?.schema) {
|
|
191
|
-
return 'const requestData = data'
|
|
192
|
-
}
|
|
193
|
-
return ''
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* Builds the query parameters parsing line for client methods.
|
|
198
|
-
* Returns an empty string when no query params exist or query-params parsing is not enabled.
|
|
199
|
-
* Only the object form `parser: { request: 'zod' }` triggers this. `parser: 'zod'` does not.
|
|
200
|
-
*/
|
|
201
|
-
export function buildQueryParamsLine({
|
|
202
|
-
parser,
|
|
203
|
-
node,
|
|
204
|
-
zodResolver,
|
|
205
|
-
}: {
|
|
206
|
-
parser: PluginClient['resolvedOptions']['parser'] | undefined
|
|
207
|
-
node: ast.OperationNode
|
|
208
|
-
zodResolver?: ResolverZod | null
|
|
209
|
-
}): string {
|
|
210
|
-
if (resolveQueryParamsParser(parser) !== 'zod' || !zodResolver) return ''
|
|
211
|
-
const { query: queryParams } = getOperationParameters(node)
|
|
212
|
-
if (queryParams.length === 0) return ''
|
|
213
|
-
const zodQueryParamsName = zodResolver.resolveQueryParamsName?.(node, queryParams[0]!)
|
|
214
|
-
if (!zodQueryParamsName) return ''
|
|
215
|
-
return `const requestParams = ${zodQueryParamsName}.parse(params)`
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/**
|
|
219
|
-
* Builds the form data conversion line for file upload requests.
|
|
220
|
-
* Returns empty string if not applicable.
|
|
221
|
-
*/
|
|
222
|
-
export function buildFormDataLine(isFormData: boolean, hasRequest: boolean): string {
|
|
223
|
-
return isFormData && hasRequest ? 'const formData = buildFormData(requestData)' : ''
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Builds the return statement for a client method.
|
|
228
|
-
* When `dataReturnType` is `'full'`, casts the response to the status-discriminated union type.
|
|
229
|
-
* When `parser.response` is `'zod'`, pipes the response body through the Zod schema before returning.
|
|
230
|
-
*/
|
|
231
|
-
export function buildReturnStatement({
|
|
232
|
-
dataReturnType,
|
|
233
|
-
parser,
|
|
234
|
-
node,
|
|
235
|
-
zodResolver,
|
|
236
|
-
tsResolver,
|
|
237
|
-
}: {
|
|
238
|
-
dataReturnType: PluginClient['resolvedOptions']['dataReturnType']
|
|
239
|
-
parser: PluginClient['resolvedOptions']['parser'] | undefined
|
|
240
|
-
node: ast.OperationNode
|
|
241
|
-
zodResolver?: ResolverZod | null
|
|
242
|
-
tsResolver?: ResolverTs | null
|
|
243
|
-
}): string {
|
|
244
|
-
const responseParser = resolveResponseParser(parser)
|
|
245
|
-
const zodResponseName = zodResolver && responseParser === 'zod' ? zodResolver.resolveResponseName?.(node) : null
|
|
246
|
-
|
|
247
|
-
if (dataReturnType === 'full' && tsResolver) {
|
|
248
|
-
const unionType = buildStatusUnionType(node, tsResolver)
|
|
249
|
-
if (responseParser === 'zod' && zodResponseName) {
|
|
250
|
-
return `return {...res, data: ${zodResponseName}.parse(res.data)} as ${unionType}`
|
|
251
|
-
}
|
|
252
|
-
return `return res as ${unionType}`
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
if (dataReturnType === 'data' && responseParser === 'zod' && zodResponseName) {
|
|
256
|
-
return `return ${zodResponseName}.parse(res.data)`
|
|
257
|
-
}
|
|
258
|
-
return 'return res.data'
|
|
259
|
-
}
|
|
File without changes
|