@kubb/plugin-client 5.0.0-alpha.3 → 5.0.0-alpha.30

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 (42) hide show
  1. package/dist/clients/axios.d.ts +2 -2
  2. package/dist/index.cjs +1893 -74
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.ts +480 -4
  5. package/dist/index.js +1885 -77
  6. package/dist/index.js.map +1 -1
  7. package/package.json +10 -25
  8. package/src/components/ClassClient.tsx +42 -138
  9. package/src/components/Client.tsx +85 -124
  10. package/src/components/ClientLegacy.tsx +501 -0
  11. package/src/components/Operations.tsx +8 -8
  12. package/src/components/StaticClassClient.tsx +41 -135
  13. package/src/components/Url.tsx +37 -46
  14. package/src/generators/classClientGenerator.tsx +129 -152
  15. package/src/generators/clientGenerator.tsx +93 -82
  16. package/src/generators/groupedClientGenerator.tsx +48 -51
  17. package/src/generators/operationsGenerator.tsx +9 -17
  18. package/src/generators/staticClassClientGenerator.tsx +163 -168
  19. package/src/index.ts +11 -1
  20. package/src/plugin.ts +115 -108
  21. package/src/presets.ts +25 -0
  22. package/src/resolvers/resolverClient.ts +26 -0
  23. package/src/resolvers/resolverClientLegacy.ts +26 -0
  24. package/src/types.ts +105 -40
  25. package/src/utils.ts +148 -0
  26. package/dist/StaticClassClient-By-aMAe4.cjs +0 -677
  27. package/dist/StaticClassClient-By-aMAe4.cjs.map +0 -1
  28. package/dist/StaticClassClient-CCn9g9eF.js +0 -636
  29. package/dist/StaticClassClient-CCn9g9eF.js.map +0 -1
  30. package/dist/components.cjs +0 -7
  31. package/dist/components.d.ts +0 -216
  32. package/dist/components.js +0 -2
  33. package/dist/generators-C2jT7XCH.js +0 -723
  34. package/dist/generators-C2jT7XCH.js.map +0 -1
  35. package/dist/generators-qkDW17Hf.cjs +0 -753
  36. package/dist/generators-qkDW17Hf.cjs.map +0 -1
  37. package/dist/generators.cjs +0 -7
  38. package/dist/generators.d.ts +0 -512
  39. package/dist/generators.js +0 -2
  40. package/dist/types-CdM4DK1M.d.ts +0 -169
  41. package/src/components/index.ts +0 -5
  42. package/src/generators/index.ts +0 -5
@@ -1,26 +1,27 @@
1
1
  import { buildJSDoc, URLPath } from '@internals/utils'
2
- import type { Operation } from '@kubb/oas'
3
- import type { OperationSchemas } from '@kubb/plugin-oas'
4
- import { getComments } from '@kubb/plugin-oas/utils'
5
- import { File, FunctionParams } from '@kubb/react-fabric'
2
+ import type { OperationNode } from '@kubb/ast/types'
3
+ import type { PluginTs } from '@kubb/plugin-ts'
4
+ import { functionPrinter } from '@kubb/plugin-ts'
5
+ import type { PluginZod } from '@kubb/plugin-zod'
6
+ import { File } from '@kubb/react-fabric'
6
7
  import type { FabricReactNode } from '@kubb/react-fabric/types'
7
8
  import type { PluginClient } from '../types.ts'
9
+ import { buildClassClientParams, buildFormDataLine, buildGenerics, buildHeaders, buildRequestDataLine, buildReturnStatement, getComments } from '../utils.ts'
8
10
 
9
11
  import { Client } from './Client.tsx'
10
12
 
13
+ type OperationData = {
14
+ node: OperationNode
15
+ name: string
16
+ tsResolver: PluginTs['resolver']
17
+ zodResolver?: PluginZod['resolver']
18
+ }
19
+
11
20
  type Props = {
12
- /**
13
- * Name of the class
14
- */
15
21
  name: string
16
22
  isExportable?: boolean
17
23
  isIndexable?: boolean
18
- operations: Array<{
19
- operation: Operation
20
- name: string
21
- typeSchemas: OperationSchemas
22
- zodSchemas: OperationSchemas | undefined
23
- }>
24
+ operations: Array<OperationData>
24
25
  baseURL: string | undefined
25
26
  dataReturnType: PluginClient['resolvedOptions']['dataReturnType']
26
27
  paramsCasing: PluginClient['resolvedOptions']['paramsCasing']
@@ -31,10 +32,10 @@ type Props = {
31
32
  }
32
33
 
33
34
  type GenerateMethodProps = {
34
- operation: Operation
35
+ node: OperationNode
35
36
  name: string
36
- typeSchemas: OperationSchemas
37
- zodSchemas: OperationSchemas | undefined
37
+ tsResolver: PluginTs['resolver']
38
+ zodResolver?: PluginZod['resolver']
38
39
  baseURL: string | undefined
39
40
  dataReturnType: PluginClient['resolvedOptions']['dataReturnType']
40
41
  parser: PluginClient['resolvedOptions']['parser'] | undefined
@@ -43,115 +44,13 @@ type GenerateMethodProps = {
43
44
  pathParamsType: PluginClient['resolvedOptions']['pathParamsType']
44
45
  }
45
46
 
46
- function buildHeaders(contentType: string, hasHeaderParams: boolean): Array<string> {
47
- return [
48
- contentType !== 'application/json' && contentType !== 'multipart/form-data' ? `'Content-Type': '${contentType}'` : undefined,
49
- hasHeaderParams ? '...headers' : undefined,
50
- ].filter(Boolean) as Array<string>
51
- }
52
-
53
- function buildGenerics(typeSchemas: OperationSchemas): Array<string> {
54
- const TError = `ResponseErrorConfig<${typeSchemas.errors?.map((item) => item.name).join(' | ') || 'Error'}>`
55
- return [typeSchemas.response.name, TError, typeSchemas.request?.name || 'unknown'].filter(Boolean)
56
- }
57
-
58
- function buildClientParams({
59
- operation,
60
- path,
61
- baseURL,
62
- typeSchemas,
63
- isFormData,
64
- headers,
65
- }: {
66
- operation: Operation
67
- path: URLPath
68
- baseURL: string | undefined
69
- typeSchemas: OperationSchemas
70
- isFormData: boolean
71
- headers: Array<string>
72
- }) {
73
- return FunctionParams.factory({
74
- config: {
75
- mode: 'object',
76
- children: {
77
- requestConfig: {
78
- mode: 'inlineSpread',
79
- },
80
- method: {
81
- value: JSON.stringify(operation.method.toUpperCase()),
82
- },
83
- url: {
84
- value: path.template,
85
- },
86
- baseURL: baseURL
87
- ? {
88
- value: JSON.stringify(baseURL),
89
- }
90
- : undefined,
91
- params: typeSchemas.queryParams?.name ? {} : undefined,
92
- data: typeSchemas.request?.name
93
- ? {
94
- value: isFormData ? 'formData as FormData' : 'requestData',
95
- }
96
- : undefined,
97
- headers: headers.length
98
- ? {
99
- value: `{ ${headers.join(', ')}, ...requestConfig.headers }`,
100
- }
101
- : undefined,
102
- },
103
- },
104
- })
105
- }
106
-
107
- function buildRequestDataLine({
108
- parser,
109
- zodSchemas,
110
- typeSchemas,
111
- }: {
112
- parser: PluginClient['resolvedOptions']['parser'] | undefined
113
- zodSchemas: OperationSchemas | undefined
114
- typeSchemas: OperationSchemas
115
- }): string {
116
- if (parser === 'zod' && zodSchemas?.request?.name) {
117
- return `const requestData = ${zodSchemas.request.name}.parse(data)`
118
- }
119
- if (typeSchemas?.request?.name) {
120
- return 'const requestData = data'
121
- }
122
- return ''
123
- }
124
-
125
- function buildFormDataLine(isFormData: boolean, hasRequest: boolean): string {
126
- return isFormData && hasRequest ? 'const formData = buildFormData(requestData)' : ''
127
- }
128
-
129
- function buildReturnStatement({
130
- dataReturnType,
131
- parser,
132
- zodSchemas,
133
- }: {
134
- dataReturnType: PluginClient['resolvedOptions']['dataReturnType']
135
- parser: PluginClient['resolvedOptions']['parser'] | undefined
136
- zodSchemas: OperationSchemas | undefined
137
- }): string {
138
- if (dataReturnType === 'full' && parser === 'zod' && zodSchemas) {
139
- return `return {...res, data: ${zodSchemas.response.name}.parse(res.data)}`
140
- }
141
- if (dataReturnType === 'data' && parser === 'zod' && zodSchemas) {
142
- return `return ${zodSchemas.response.name}.parse(res.data)`
143
- }
144
- if (dataReturnType === 'full' && parser === 'client') {
145
- return 'return res'
146
- }
147
- return 'return res.data'
148
- }
47
+ const declarationPrinter = functionPrinter({ mode: 'declaration' })
149
48
 
150
49
  function generateMethod({
151
- operation,
50
+ node,
152
51
  name,
153
- typeSchemas,
154
- zodSchemas,
52
+ tsResolver,
53
+ zodResolver,
155
54
  baseURL,
156
55
  dataReturnType,
157
56
  parser,
@@ -159,18 +58,23 @@ function generateMethod({
159
58
  paramsCasing,
160
59
  pathParamsType,
161
60
  }: GenerateMethodProps): string {
162
- const path = new URLPath(operation.path, { casing: paramsCasing })
163
- const contentType = operation.getContentType()
61
+ const path = new URLPath(node.path, { casing: paramsCasing })
62
+ const contentType = node.requestBody?.contentType ?? 'application/json'
164
63
  const isFormData = contentType === 'multipart/form-data'
165
- const headers = buildHeaders(contentType, !!typeSchemas.headerParams?.name)
166
- const generics = buildGenerics(typeSchemas)
167
- const params = ClassClient.getParams({ paramsType, paramsCasing, pathParamsType, typeSchemas, isConfigurable: true })
168
- const clientParams = buildClientParams({ operation, path, baseURL, typeSchemas, isFormData, headers })
169
- const jsdoc = buildJSDoc(getComments(operation))
170
-
171
- const requestDataLine = buildRequestDataLine({ parser, zodSchemas, typeSchemas })
172
- const formDataLine = buildFormDataLine(isFormData, !!typeSchemas?.request?.name)
173
- const returnStatement = buildReturnStatement({ dataReturnType, parser, zodSchemas })
64
+ const headerParamsName =
65
+ node.parameters.filter((p) => p.in === 'header').length > 0
66
+ ? tsResolver.resolveHeaderParamsName(node, node.parameters.filter((p) => p.in === 'header')[0]!)
67
+ : undefined
68
+ const headers = buildHeaders(contentType, !!headerParamsName)
69
+ const generics = buildGenerics(node, tsResolver)
70
+ const paramsNode = ClassClient.getParams({ paramsType, paramsCasing, pathParamsType, node, tsResolver, isConfigurable: true })
71
+ const paramsSignature = declarationPrinter.print(paramsNode) ?? ''
72
+ const clientParams = buildClassClientParams({ node, path, baseURL, tsResolver, isFormData, headers })
73
+ const jsdoc = buildJSDoc(getComments(node))
74
+
75
+ const requestDataLine = buildRequestDataLine({ parser, node, zodResolver })
76
+ const formDataLine = buildFormDataLine(isFormData, !!node.requestBody?.schema)
77
+ const returnStatement = buildReturnStatement({ dataReturnType, parser, node, zodResolver })
174
78
 
175
79
  const methodBody = [
176
80
  'const { client: request = fetch, ...requestConfig } = mergeConfig(this.#config, config)',
@@ -184,7 +88,7 @@ function generateMethod({
184
88
  .map((line) => ` ${line}`)
185
89
  .join('\n')
186
90
 
187
- return `${jsdoc}async ${name}(${params.toConstructor()}) {\n${methodBody}\n }`
91
+ return `${jsdoc}async ${name}(${paramsSignature}) {\n${methodBody}\n }`
188
92
  }
189
93
 
190
94
  export function ClassClient({
@@ -200,12 +104,12 @@ export function ClassClient({
200
104
  pathParamsType,
201
105
  children,
202
106
  }: Props): FabricReactNode {
203
- const methods = operations.map(({ operation, name: methodName, typeSchemas, zodSchemas }) =>
107
+ const methods = operations.map(({ node, name: methodName, tsResolver, zodResolver }) =>
204
108
  generateMethod({
205
- operation,
109
+ node,
206
110
  name: methodName,
207
- typeSchemas,
208
- zodSchemas,
111
+ tsResolver,
112
+ zodResolver,
209
113
  baseURL,
210
114
  dataReturnType,
211
115
  parser,
@@ -1,16 +1,16 @@
1
1
  import { isValidVarName, URLPath } from '@internals/utils'
2
- import { getDefaultValue, isOptional, type Operation } from '@kubb/oas'
3
- import type { OperationSchemas } from '@kubb/plugin-oas'
4
- import { getComments, getParamsMapping, getPathParams } from '@kubb/plugin-oas/utils'
2
+ import { caseParams, createFunctionParameter, createOperationParams, createTypeNode } from '@kubb/ast'
3
+ import type { FunctionParametersNode, OperationNode } from '@kubb/ast/types'
4
+ import type { PluginTs } from '@kubb/plugin-ts'
5
+ import { functionPrinter } from '@kubb/plugin-ts'
6
+ import type { PluginZod } from '@kubb/plugin-zod'
5
7
  import { File, Function, FunctionParams } from '@kubb/react-fabric'
6
8
  import type { FabricReactNode } from '@kubb/react-fabric/types'
7
9
  import type { PluginClient } from '../types.ts'
10
+ import { buildParamsMapping, getComments } from '../utils.ts'
8
11
  import { Url } from './Url.tsx'
9
12
 
10
13
  type Props = {
11
- /**
12
- * Name of the function
13
- */
14
14
  name: string
15
15
  urlName?: string
16
16
  isExportable?: boolean
@@ -24,9 +24,9 @@ type Props = {
24
24
  paramsType: PluginClient['resolvedOptions']['pathParamsType']
25
25
  pathParamsType: PluginClient['resolvedOptions']['pathParamsType']
26
26
  parser: PluginClient['resolvedOptions']['parser'] | undefined
27
- typeSchemas: OperationSchemas
28
- zodSchemas: OperationSchemas | undefined
29
- operation: Operation
27
+ node: OperationNode
28
+ tsResolver: PluginTs['resolver']
29
+ zodResolver?: PluginZod['resolver']
30
30
  children?: FabricReactNode
31
31
  }
32
32
 
@@ -34,96 +34,33 @@ type GetParamsProps = {
34
34
  paramsCasing: PluginClient['resolvedOptions']['paramsCasing']
35
35
  paramsType: PluginClient['resolvedOptions']['paramsType']
36
36
  pathParamsType: PluginClient['resolvedOptions']['pathParamsType']
37
- typeSchemas: OperationSchemas
37
+ node: OperationNode
38
+ tsResolver: PluginTs['resolver']
38
39
  isConfigurable: boolean
39
40
  }
40
41
 
41
- function getParams({ paramsType, paramsCasing, pathParamsType, typeSchemas, isConfigurable }: GetParamsProps) {
42
- if (paramsType === 'object') {
43
- const pathParams = getPathParams(typeSchemas.pathParams, {
44
- typed: true,
45
- casing: paramsCasing,
46
- })
47
-
48
- const children = {
49
- ...pathParams,
50
- data: typeSchemas.request?.name
51
- ? {
52
- type: typeSchemas.request?.name,
53
- optional: isOptional(typeSchemas.request?.schema),
54
- }
55
- : undefined,
56
- params: typeSchemas.queryParams?.name
57
- ? {
58
- type: typeSchemas.queryParams?.name,
59
- optional: isOptional(typeSchemas.queryParams?.schema),
60
- }
61
- : undefined,
62
- headers: typeSchemas.headerParams?.name
63
- ? {
64
- type: typeSchemas.headerParams?.name,
65
- optional: isOptional(typeSchemas.headerParams?.schema),
66
- }
67
- : undefined,
68
- }
42
+ const declarationPrinter = functionPrinter({ mode: 'declaration' })
69
43
 
70
- // Check if all children are optional or undefined
71
- const allChildrenAreOptional = Object.values(children).every((child) => !child || child.optional)
44
+ function getParams({ paramsType, paramsCasing, pathParamsType, node, tsResolver, isConfigurable }: GetParamsProps): FunctionParametersNode {
45
+ const requestName = node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined
72
46
 
73
- return FunctionParams.factory({
74
- data: {
75
- mode: 'object',
76
- children,
77
- default: allChildrenAreOptional ? '{}' : undefined,
78
- },
79
- config: isConfigurable
80
- ? {
81
- type: typeSchemas.request?.name
82
- ? `Partial<RequestConfig<${typeSchemas.request?.name}>> & { client?: Client }`
83
- : 'Partial<RequestConfig> & { client?: Client }',
47
+ return createOperationParams(node, {
48
+ paramsType,
49
+ pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',
50
+ paramsCasing,
51
+ resolver: tsResolver,
52
+ extraParams: isConfigurable
53
+ ? [
54
+ createFunctionParameter({
55
+ name: 'config',
56
+ type: createTypeNode({
57
+ variant: 'reference',
58
+ name: requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }',
59
+ }),
84
60
  default: '{}',
85
- }
86
- : undefined,
87
- })
88
- }
89
-
90
- return FunctionParams.factory({
91
- pathParams: typeSchemas.pathParams?.name
92
- ? {
93
- mode: pathParamsType === 'object' ? 'object' : 'inlineSpread',
94
- children: getPathParams(typeSchemas.pathParams, {
95
- typed: true,
96
- casing: paramsCasing,
97
61
  }),
98
- default: getDefaultValue(typeSchemas.pathParams?.schema),
99
- }
100
- : undefined,
101
- data: typeSchemas.request?.name
102
- ? {
103
- type: typeSchemas.request?.name,
104
- optional: isOptional(typeSchemas.request?.schema),
105
- }
106
- : undefined,
107
- params: typeSchemas.queryParams?.name
108
- ? {
109
- type: typeSchemas.queryParams?.name,
110
- optional: isOptional(typeSchemas.queryParams?.schema),
111
- }
112
- : undefined,
113
- headers: typeSchemas.headerParams?.name
114
- ? {
115
- type: typeSchemas.headerParams?.name,
116
- optional: isOptional(typeSchemas.headerParams?.schema),
117
- }
118
- : undefined,
119
- config: isConfigurable
120
- ? {
121
- type: typeSchemas.request?.name
122
- ? `Partial<RequestConfig<${typeSchemas.request?.name}>> & { client?: Client }`
123
- : 'Partial<RequestConfig> & { client?: Client }',
124
- default: '{}',
125
- }
126
- : undefined,
62
+ ]
63
+ : [],
127
64
  })
128
65
  }
129
66
 
@@ -132,60 +69,86 @@ export function Client({
132
69
  isExportable = true,
133
70
  isIndexable = true,
134
71
  returnType,
135
- typeSchemas,
136
72
  baseURL,
137
73
  dataReturnType,
138
74
  parser,
139
- zodSchemas,
140
75
  paramsType,
141
76
  paramsCasing,
142
77
  pathParamsType,
143
- operation,
78
+ node,
79
+ tsResolver,
80
+ zodResolver,
144
81
  urlName,
145
82
  children,
146
83
  isConfigurable = true,
147
84
  }: Props): FabricReactNode {
148
- const path = new URLPath(operation.path)
149
- const contentType = operation.getContentType()
85
+ const path = new URLPath(node.path)
86
+ const contentType = node.requestBody?.contentType ?? 'application/json'
150
87
  const isFormData = contentType === 'multipart/form-data'
151
88
 
152
- // Generate parameter mappings when paramsCasing is used
153
- // Apply to pathParams, queryParams and headerParams
154
- const pathParamsMapping = paramsCasing ? getParamsMapping(typeSchemas.pathParams, { casing: paramsCasing }) : undefined
155
- const queryParamsMapping = paramsCasing ? getParamsMapping(typeSchemas.queryParams, { casing: paramsCasing }) : undefined
156
- const headerParamsMapping = paramsCasing ? getParamsMapping(typeSchemas.headerParams, { casing: paramsCasing }) : undefined
89
+ const originalPathParams = node.parameters.filter((p) => p.in === 'path')
90
+ const casedPathParams = caseParams(originalPathParams, paramsCasing)
91
+ const originalQueryParams = node.parameters.filter((p) => p.in === 'query')
92
+ const casedQueryParams = caseParams(originalQueryParams, paramsCasing)
93
+ const originalHeaderParams = node.parameters.filter((p) => p.in === 'header')
94
+ const casedHeaderParams = caseParams(originalHeaderParams, paramsCasing)
95
+
96
+ const pathParamsMapping = paramsCasing && !urlName ? buildParamsMapping(originalPathParams, casedPathParams) : undefined
97
+ const queryParamsMapping = paramsCasing ? buildParamsMapping(originalQueryParams, casedQueryParams) : undefined
98
+ const headerParamsMapping = paramsCasing ? buildParamsMapping(originalHeaderParams, casedHeaderParams) : undefined
99
+
100
+ const requestName = node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined
101
+ const responseName = tsResolver.resolveResponseName(node)
102
+ const queryParamsName = originalQueryParams.length > 0 ? tsResolver.resolveQueryParamsName(node, originalQueryParams[0]!) : undefined
103
+ const headerParamsName = originalHeaderParams.length > 0 ? tsResolver.resolveHeaderParamsName(node, originalHeaderParams[0]!) : undefined
104
+
105
+ const zodResponseName = zodResolver && parser === 'zod' ? zodResolver.resolveResponseName?.(node) : undefined
106
+ const zodRequestName = zodResolver && parser === 'zod' && node.requestBody?.schema ? zodResolver.resolveDataName?.(node) : undefined
107
+
108
+ const errorNames = node.responses
109
+ .filter((r) => {
110
+ const code = Number.parseInt(r.statusCode, 10)
111
+ return code >= 400
112
+ })
113
+ .map((r) => tsResolver.resolveResponseStatusName(node, r.statusCode))
157
114
 
158
115
  const headers = [
159
116
  contentType !== 'application/json' && contentType !== 'multipart/form-data' ? `'Content-Type': '${contentType}'` : undefined,
160
- typeSchemas.headerParams?.name ? (headerParamsMapping ? '...mappedHeaders' : '...headers') : undefined,
117
+ headerParamsName ? (headerParamsMapping ? '...mappedHeaders' : '...headers') : undefined,
161
118
  ].filter(Boolean)
162
119
 
163
- const TError = `ResponseErrorConfig<${typeSchemas.errors?.map((item) => item.name).join(' | ') || 'Error'}>`
120
+ const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`
164
121
 
165
- const generics = [typeSchemas.response.name, TError, typeSchemas.request?.name || 'unknown'].filter(Boolean)
166
- const params = getParams({
122
+ const generics = [responseName, TError, requestName || 'unknown'].filter(Boolean)
123
+ const paramsNode = getParams({
167
124
  paramsType,
168
125
  paramsCasing,
169
126
  pathParamsType,
170
- typeSchemas,
127
+ node,
128
+ tsResolver,
171
129
  isConfigurable,
172
130
  })
173
- const urlParams = Url.getParams({
131
+ const paramsSignature = declarationPrinter.print(paramsNode) ?? ''
132
+
133
+ const urlParamsNode = Url.getParams({
174
134
  paramsType,
175
135
  paramsCasing,
176
136
  pathParamsType,
177
- typeSchemas,
137
+ node,
138
+ tsResolver,
178
139
  })
140
+ const callPrinter = functionPrinter({ mode: 'call' })
141
+ const urlParamsCall = callPrinter.print(urlParamsNode) ?? ''
179
142
 
180
143
  const clientParams = FunctionParams.factory({
181
144
  config: {
182
145
  mode: 'object',
183
146
  children: {
184
147
  method: {
185
- value: JSON.stringify(operation.method.toUpperCase()),
148
+ value: JSON.stringify(node.method.toUpperCase()),
186
149
  },
187
150
  url: {
188
- value: urlName ? `${urlName}(${urlParams.toCall()}).url.toString()` : path.template,
151
+ value: urlName ? `${urlName}(${urlParamsCall}).url.toString()` : path.template,
189
152
  },
190
153
  baseURL:
191
154
  baseURL && !urlName
@@ -193,8 +156,8 @@ export function Client({
193
156
  value: `\`${baseURL}\``,
194
157
  }
195
158
  : undefined,
196
- params: typeSchemas.queryParams?.name ? (queryParamsMapping ? { value: 'mappedParams' } : {}) : undefined,
197
- data: typeSchemas.request?.name
159
+ params: queryParamsName ? (queryParamsMapping ? { value: 'mappedParams' } : {}) : undefined,
160
+ data: requestName
198
161
  ? {
199
162
  value: isFormData ? 'formData as FormData' : 'requestData',
200
163
  }
@@ -217,8 +180,8 @@ export function Client({
217
180
  children
218
181
  ) : (
219
182
  <>
220
- {dataReturnType === 'full' && parser === 'zod' && zodSchemas && `return {...res, data: ${zodSchemas.response.name}.parse(res.data)}`}
221
- {dataReturnType === 'data' && parser === 'zod' && zodSchemas && `return ${zodSchemas.response.name}.parse(res.data)`}
183
+ {dataReturnType === 'full' && parser === 'zod' && zodResponseName && `return {...res, data: ${zodResponseName}.parse(res.data)}`}
184
+ {dataReturnType === 'data' && parser === 'zod' && zodResponseName && `return ${zodResponseName}.parse(res.data)`}
222
185
  {dataReturnType === 'full' && parser === 'client' && 'return res'}
223
186
  {dataReturnType === 'data' && parser === 'client' && 'return res.data'}
224
187
  </>
@@ -233,9 +196,9 @@ export function Client({
233
196
  name={name}
234
197
  async
235
198
  export={isExportable}
236
- params={params.toConstructor()}
199
+ params={paramsSignature}
237
200
  JSDoc={{
238
- comments: getComments(operation),
201
+ comments: getComments(node),
239
202
  }}
240
203
  returnType={returnType}
241
204
  >
@@ -244,7 +207,7 @@ export function Client({
244
207
  <br />
245
208
  {pathParamsMapping &&
246
209
  Object.entries(pathParamsMapping)
247
- .filter(([originalName, camelCaseName]) => originalName !== camelCaseName && isValidVarName(originalName))
210
+ .filter(([originalName, camelCaseName]) => isValidVarName(originalName) && originalName !== camelCaseName)
248
211
  .map(([originalName, camelCaseName]) => `const ${originalName} = ${camelCaseName}`)
249
212
  .join('\n')}
250
213
  {pathParamsMapping && (
@@ -253,7 +216,7 @@ export function Client({
253
216
  <br />
254
217
  </>
255
218
  )}
256
- {queryParamsMapping && typeSchemas.queryParams?.name && (
219
+ {queryParamsMapping && queryParamsName && (
257
220
  <>
258
221
  {`const mappedParams = params ? { ${Object.entries(queryParamsMapping)
259
222
  .map(([originalName, camelCaseName]) => `"${originalName}": params.${camelCaseName}`)
@@ -262,7 +225,7 @@ export function Client({
262
225
  <br />
263
226
  </>
264
227
  )}
265
- {headerParamsMapping && typeSchemas.headerParams?.name && (
228
+ {headerParamsMapping && headerParamsName && (
266
229
  <>
267
230
  {`const mappedHeaders = headers ? { ${Object.entries(headerParamsMapping)
268
231
  .map(([originalName, camelCaseName]) => `"${originalName}": headers.${camelCaseName}`)
@@ -271,11 +234,9 @@ export function Client({
271
234
  <br />
272
235
  </>
273
236
  )}
274
- {parser === 'zod' && zodSchemas?.request?.name
275
- ? `const requestData = ${zodSchemas.request.name}.parse(data)`
276
- : typeSchemas?.request?.name && 'const requestData = data'}
237
+ {parser === 'zod' && zodRequestName ? `const requestData = ${zodRequestName}.parse(data)` : requestName && 'const requestData = data'}
277
238
  <br />
278
- {isFormData && typeSchemas?.request?.name && 'const formData = buildFormData(requestData)'}
239
+ {isFormData && requestName && 'const formData = buildFormData(requestData)'}
279
240
  <br />
280
241
  {isConfigurable
281
242
  ? `const res = await request<${generics.join(', ')}>(${clientParams.toCall()})`