@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.
Files changed (55) hide show
  1. package/README.md +8 -61
  2. package/dist/index.cjs +754 -1745
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.ts +170 -349
  5. package/dist/index.js +733 -1733
  6. package/dist/index.js.map +1 -1
  7. package/package.json +10 -63
  8. package/src/generators/clientGenerator.tsx +6 -132
  9. package/src/index.ts +1 -9
  10. package/src/plugin.ts +32 -122
  11. package/src/types.ts +27 -249
  12. package/dist/chunk-Bx3C2hgW.cjs +0 -38
  13. package/dist/clients/axios.cjs +0 -68
  14. package/dist/clients/axios.cjs.map +0 -1
  15. package/dist/clients/axios.d.ts +0 -49
  16. package/dist/clients/axios.js +0 -58
  17. package/dist/clients/axios.js.map +0 -1
  18. package/dist/clients/fetch.cjs +0 -128
  19. package/dist/clients/fetch.cjs.map +0 -1
  20. package/dist/clients/fetch.d.ts +0 -50
  21. package/dist/clients/fetch.js +0 -120
  22. package/dist/clients/fetch.js.map +0 -1
  23. package/dist/templates/clients/axios.source.cjs +0 -7
  24. package/dist/templates/clients/axios.source.cjs.map +0 -1
  25. package/dist/templates/clients/axios.source.d.ts +0 -7
  26. package/dist/templates/clients/axios.source.js +0 -6
  27. package/dist/templates/clients/axios.source.js.map +0 -1
  28. package/dist/templates/clients/fetch.source.cjs +0 -7
  29. package/dist/templates/clients/fetch.source.cjs.map +0 -1
  30. package/dist/templates/clients/fetch.source.d.ts +0 -7
  31. package/dist/templates/clients/fetch.source.js +0 -6
  32. package/dist/templates/clients/fetch.source.js.map +0 -1
  33. package/dist/templates/config.source.cjs +0 -7
  34. package/dist/templates/config.source.cjs.map +0 -1
  35. package/dist/templates/config.source.d.ts +0 -7
  36. package/dist/templates/config.source.js +0 -6
  37. package/dist/templates/config.source.js.map +0 -1
  38. package/src/clients/axios.ts +0 -113
  39. package/src/clients/fetch.ts +0 -201
  40. package/src/components/ClassClient.tsx +0 -161
  41. package/src/components/Client.tsx +0 -281
  42. package/src/components/StaticClassClient.tsx +0 -153
  43. package/src/components/Url.tsx +0 -90
  44. package/src/components/WrapperClient.tsx +0 -33
  45. package/src/functionParams.ts +0 -118
  46. package/src/generators/classClientGenerator.tsx +0 -261
  47. package/src/generators/groupedClientGenerator.tsx +0 -82
  48. package/src/generators/operationsGenerator.ts +0 -47
  49. package/src/generators/staticClassClientGenerator.tsx +0 -240
  50. package/src/resolvers/resolverClient.ts +0 -46
  51. package/src/templates/clients/axios.source.ts +0 -4
  52. package/src/templates/clients/fetch.source.ts +0 -4
  53. package/src/templates/config.source.ts +0 -4
  54. package/src/utils.ts +0 -259
  55. /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
- }