@kubb/plugin-react-query 5.0.0-alpha.9 → 5.0.0-beta.10

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 (54) hide show
  1. package/LICENSE +17 -10
  2. package/README.md +34 -85
  3. package/dist/components-Dow6tde8.js +1459 -0
  4. package/dist/components-Dow6tde8.js.map +1 -0
  5. package/dist/components-HwdCDefj.cjs +1603 -0
  6. package/dist/components-HwdCDefj.cjs.map +1 -0
  7. package/dist/components.cjs +1 -1
  8. package/dist/components.d.ts +49 -179
  9. package/dist/components.js +1 -1
  10. package/dist/generators-CcOmnTPa.cjs +1454 -0
  11. package/dist/generators-CcOmnTPa.cjs.map +1 -0
  12. package/dist/generators-yfZr_qfT.js +1412 -0
  13. package/dist/generators-yfZr_qfT.js.map +1 -0
  14. package/dist/generators.cjs +1 -1
  15. package/dist/generators.d.ts +9 -505
  16. package/dist/generators.js +1 -1
  17. package/dist/index.cjs +197 -126
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.ts +4 -4
  20. package/dist/index.js +193 -126
  21. package/dist/index.js.map +1 -1
  22. package/dist/types-DG_OxOym.d.ts +363 -0
  23. package/extension.yaml +911 -0
  24. package/package.json +59 -64
  25. package/src/components/InfiniteQuery.tsx +79 -138
  26. package/src/components/InfiniteQueryOptions.tsx +55 -166
  27. package/src/components/Mutation.tsx +74 -111
  28. package/src/components/MutationOptions.tsx +61 -80
  29. package/src/components/Query.tsx +66 -142
  30. package/src/components/QueryOptions.tsx +56 -138
  31. package/src/components/SuspenseInfiniteQuery.tsx +79 -138
  32. package/src/components/SuspenseInfiniteQueryOptions.tsx +55 -166
  33. package/src/components/SuspenseQuery.tsx +66 -152
  34. package/src/generators/customHookOptionsFileGenerator.tsx +37 -51
  35. package/src/generators/hookOptionsGenerator.tsx +111 -174
  36. package/src/generators/infiniteQueryGenerator.tsx +158 -178
  37. package/src/generators/mutationGenerator.tsx +112 -139
  38. package/src/generators/queryGenerator.tsx +128 -142
  39. package/src/generators/suspenseInfiniteQueryGenerator.tsx +157 -156
  40. package/src/generators/suspenseQueryGenerator.tsx +126 -152
  41. package/src/index.ts +1 -1
  42. package/src/plugin.ts +134 -187
  43. package/src/resolvers/resolverReactQuery.ts +107 -0
  44. package/src/types.ts +172 -49
  45. package/src/utils.ts +10 -0
  46. package/dist/components-BHQT9ZLc.cjs +0 -1634
  47. package/dist/components-BHQT9ZLc.cjs.map +0 -1
  48. package/dist/components-CpyHYGOw.js +0 -1520
  49. package/dist/components-CpyHYGOw.js.map +0 -1
  50. package/dist/generators-DP07m3rH.cjs +0 -1469
  51. package/dist/generators-DP07m3rH.cjs.map +0 -1
  52. package/dist/generators-DkQwKTc2.js +0 -1427
  53. package/dist/generators-DkQwKTc2.js.map +0 -1
  54. package/dist/types-D5S7Ny9r.d.ts +0 -270
@@ -1,109 +1,54 @@
1
- import { isAllOptional, isOptional } from '@kubb/oas'
2
- import { Client } from '@kubb/plugin-client/components'
3
- import type { OperationSchemas } from '@kubb/plugin-oas'
4
- import { getPathParams } from '@kubb/plugin-oas/utils'
5
- import { File, Function, FunctionParams } from '@kubb/react-fabric'
6
- import type { FabricReactNode } from '@kubb/react-fabric/types'
1
+ import { ast } from '@kubb/core'
2
+ import type { ResolverTs } from '@kubb/plugin-ts'
3
+ import { functionPrinter } from '@kubb/plugin-ts'
4
+ import { File, Function } from '@kubb/renderer-jsx'
5
+ import type { KubbReactNode } from '@kubb/renderer-jsx/types'
6
+ import { buildEnabledCheck } from '@internals/tanstack-query'
7
7
  import type { PluginReactQuery } from '../types.ts'
8
- import { QueryKey } from './QueryKey.tsx'
8
+ import { buildQueryKeyParams, resolveErrorNames } from '../utils.ts'
9
9
 
10
10
  type Props = {
11
11
  name: string
12
12
  clientName: string
13
13
  queryKeyName: string
14
- typeSchemas: OperationSchemas
14
+ node: ast.OperationNode
15
+ tsResolver: ResolverTs
15
16
  paramsCasing: PluginReactQuery['resolvedOptions']['paramsCasing']
16
17
  paramsType: PluginReactQuery['resolvedOptions']['paramsType']
17
18
  pathParamsType: PluginReactQuery['resolvedOptions']['pathParamsType']
18
19
  dataReturnType: PluginReactQuery['resolvedOptions']['client']['dataReturnType']
19
20
  }
20
21
 
21
- type GetParamsProps = {
22
- paramsCasing: PluginReactQuery['resolvedOptions']['paramsCasing']
23
- paramsType: PluginReactQuery['resolvedOptions']['paramsType']
24
- pathParamsType: PluginReactQuery['resolvedOptions']['pathParamsType']
25
- typeSchemas: OperationSchemas
26
- }
27
-
28
- function getParams({ paramsType, paramsCasing, pathParamsType, typeSchemas }: GetParamsProps) {
29
- if (paramsType === 'object') {
30
- const pathParams = getPathParams(typeSchemas.pathParams, { typed: true, casing: paramsCasing })
22
+ const declarationPrinter = functionPrinter({ mode: 'declaration' })
23
+ const callPrinter = functionPrinter({ mode: 'call' })
31
24
 
32
- const children = {
33
- ...pathParams,
34
- data: typeSchemas.request?.name
35
- ? {
36
- type: typeSchemas.request?.name,
37
- optional: isOptional(typeSchemas.request?.schema),
38
- }
39
- : undefined,
40
- params: typeSchemas.queryParams?.name
41
- ? {
42
- type: typeSchemas.queryParams?.name,
43
- optional: isOptional(typeSchemas.queryParams?.schema),
44
- }
45
- : undefined,
46
- headers: typeSchemas.headerParams?.name
47
- ? {
48
- type: typeSchemas.headerParams?.name,
49
- optional: isOptional(typeSchemas.headerParams?.schema),
50
- }
51
- : undefined,
52
- }
25
+ export function getQueryOptionsParams(
26
+ node: ast.OperationNode,
27
+ options: {
28
+ paramsType: PluginReactQuery['resolvedOptions']['paramsType']
29
+ paramsCasing: PluginReactQuery['resolvedOptions']['paramsCasing']
30
+ pathParamsType: PluginReactQuery['resolvedOptions']['pathParamsType']
31
+ resolver: ResolverTs
32
+ },
33
+ ): ast.FunctionParametersNode {
34
+ const { paramsType, paramsCasing, pathParamsType, resolver } = options
35
+ const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : undefined
53
36
 
54
- // Check if all children are optional or undefined
55
- const allChildrenAreOptional = Object.values(children).every((child) => !child || child.optional)
56
-
57
- return FunctionParams.factory({
58
- data: {
59
- mode: 'object',
60
- children,
61
- default: allChildrenAreOptional ? '{}' : undefined,
62
- },
63
- config: {
64
- type: typeSchemas.request?.name
65
- ? `Partial<RequestConfig<${typeSchemas.request?.name}>> & { client?: Client }`
66
- : 'Partial<RequestConfig> & { client?: Client }',
37
+ return ast.createOperationParams(node, {
38
+ paramsType,
39
+ pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',
40
+ paramsCasing,
41
+ resolver,
42
+ extraParams: [
43
+ ast.createFunctionParameter({
44
+ name: 'config',
45
+ type: ast.createParamsType({
46
+ variant: 'reference',
47
+ name: requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }',
48
+ }),
67
49
  default: '{}',
68
- },
69
- })
70
- }
71
-
72
- return FunctionParams.factory({
73
- pathParams: typeSchemas.pathParams?.name
74
- ? {
75
- mode: pathParamsType === 'object' ? 'object' : 'inlineSpread',
76
- children: getPathParams(typeSchemas.pathParams, {
77
- typed: true,
78
- casing: paramsCasing,
79
- }),
80
- default: isAllOptional(typeSchemas.pathParams?.schema) ? '{}' : undefined,
81
- }
82
- : undefined,
83
- data: typeSchemas.request?.name
84
- ? {
85
- type: typeSchemas.request?.name,
86
- optional: isOptional(typeSchemas.request?.schema),
87
- }
88
- : undefined,
89
- params: typeSchemas.queryParams?.name
90
- ? {
91
- type: typeSchemas.queryParams?.name,
92
- optional: isOptional(typeSchemas.queryParams?.schema),
93
- }
94
- : undefined,
95
- headers: typeSchemas.headerParams?.name
96
- ? {
97
- type: typeSchemas.headerParams?.name,
98
- optional: isOptional(typeSchemas.headerParams?.schema),
99
- }
100
- : undefined,
101
- config: {
102
- type: typeSchemas.request?.name
103
- ? `Partial<RequestConfig<${typeSchemas.request?.name}>> & { client?: Client }`
104
- : 'Partial<RequestConfig> & { client?: Client }',
105
- default: '{}',
106
- },
50
+ }),
51
+ ],
107
52
  })
108
53
  }
109
54
 
@@ -111,65 +56,40 @@ export function QueryOptions({
111
56
  name,
112
57
  clientName,
113
58
  dataReturnType,
114
- typeSchemas,
59
+ node,
60
+ tsResolver,
115
61
  paramsCasing,
116
62
  paramsType,
117
63
  pathParamsType,
118
64
  queryKeyName,
119
- }: Props): FabricReactNode {
120
- const params = getParams({
121
- paramsType,
122
- paramsCasing,
123
- pathParamsType,
124
- typeSchemas,
125
- })
126
- const TData = dataReturnType === 'data' ? typeSchemas.response.name : `ResponseConfig<${typeSchemas.response.name}>`
127
- const TError = typeSchemas.errors?.map((item) => item.name).join(' | ') || 'Error'
65
+ }: Props): KubbReactNode {
66
+ const responseName = tsResolver.resolveResponseName(node)
67
+ const errorNames = resolveErrorNames(node, tsResolver)
128
68
 
129
- const clientParams = Client.getParams({
130
- typeSchemas,
131
- paramsCasing,
132
- paramsType,
133
- pathParamsType,
134
- isConfigurable: true,
135
- })
136
- const queryKeyParams = QueryKey.getParams({
137
- pathParamsType,
138
- typeSchemas,
139
- paramsCasing,
140
- })
69
+ const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`
70
+ const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`
71
+
72
+ const paramsNode = getQueryOptionsParams(node, { paramsType, paramsCasing, pathParamsType, resolver: tsResolver })
73
+ const paramsSignature = declarationPrinter.print(paramsNode) ?? ''
74
+ const rawParamsCall = callPrinter.print(paramsNode) ?? ''
75
+ const clientCallStr = rawParamsCall.replace(/\bconfig\b(?=[^,]*$)/, '{ ...config, signal: config.signal ?? signal }')
141
76
 
142
- // Only add enabled check for required (non-optional) parameters
143
- // Optional parameters with defaults should not prevent query execution
144
- const enabled = Object.entries(queryKeyParams.flatParams)
145
- .map(([key, item]) => {
146
- // Only include if the parameter exists and is NOT optional
147
- // This ensures we only check required parameters
148
- return item && !item.optional && !item.default ? key : undefined
149
- })
150
- .filter(Boolean)
151
- .join('&& ')
77
+ const queryKeyParamsNode = buildQueryKeyParams(node, { pathParamsType, paramsCasing, resolver: tsResolver })
78
+ const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? ''
152
79
 
153
- const enabledText = enabled ? `enabled: !!(${enabled}),` : ''
80
+ const enabledSource = buildEnabledCheck(queryKeyParamsNode)
81
+ const enabledText = enabledSource ? `enabled: !!(${enabledSource}),` : ''
154
82
 
155
83
  return (
156
84
  <File.Source name={name} isExportable isIndexable>
157
- <Function name={name} export params={params.toConstructor()}>
85
+ <Function name={name} export params={paramsSignature}>
158
86
  {`
159
- const queryKey = ${queryKeyName}(${queryKeyParams.toCall()})
160
- return queryOptions<${TData}, ResponseErrorConfig<${TError}>, ${TData}, typeof queryKey>({
87
+ const queryKey = ${queryKeyName}(${queryKeyParamsCall})
88
+ return queryOptions<${TData}, ${TError}, ${TData}, typeof queryKey>({
161
89
  ${enabledText}
162
90
  queryKey,
163
91
  queryFn: async ({ signal }) => {
164
- return ${clientName}(${clientParams.toCall({
165
- transformName(name) {
166
- if (name === 'config') {
167
- return '{ ...config, signal: config.signal ?? signal }'
168
- }
169
-
170
- return name
171
- },
172
- })})
92
+ return ${clientName}(${clientCallStr})
173
93
  },
174
94
  })
175
95
  `}
@@ -177,5 +97,3 @@ export function QueryOptions({
177
97
  </File.Source>
178
98
  )
179
99
  }
180
-
181
- QueryOptions.getParams = getParams
@@ -1,22 +1,20 @@
1
- import { isAllOptional, isOptional, type Operation } from '@kubb/oas'
2
- import type { OperationSchemas } from '@kubb/plugin-oas'
3
- import { getComments, getPathParams } from '@kubb/plugin-oas/utils'
4
- import { File, Function, FunctionParams } from '@kubb/react-fabric'
5
- import type { FabricReactNode } from '@kubb/react-fabric/types'
1
+ import { getOperationParameters } from '@internals/shared'
2
+ import { ast } from '@kubb/core'
3
+ import type { ResolverTs } from '@kubb/plugin-ts'
4
+ import { functionPrinter } from '@kubb/plugin-ts'
5
+ import { File, Function } from '@kubb/renderer-jsx'
6
+ import type { KubbReactNode } from '@kubb/renderer-jsx/types'
6
7
  import type { Infinite, PluginReactQuery } from '../types.ts'
7
- import { QueryKey } from './QueryKey.tsx'
8
- import { QueryOptions } from './QueryOptions.tsx'
8
+ import { buildQueryKeyParams, getComments, resolveErrorNames } from '../utils.ts'
9
+ import { getQueryOptionsParams } from './QueryOptions.tsx'
9
10
 
10
11
  type Props = {
11
- /**
12
- * Name of the function
13
- */
14
12
  name: string
15
13
  queryOptionsName: string
16
14
  queryKeyName: string
17
15
  queryKeyTypeName: string
18
- typeSchemas: OperationSchemas
19
- operation: Operation
16
+ node: ast.OperationNode
17
+ tsResolver: ResolverTs
20
18
  paramsCasing: PluginReactQuery['resolvedOptions']['paramsCasing']
21
19
  paramsType: PluginReactQuery['resolvedOptions']['paramsType']
22
20
  pathParamsType: PluginReactQuery['resolvedOptions']['pathParamsType']
@@ -26,99 +24,41 @@ type Props = {
26
24
  queryParam?: Infinite['queryParam']
27
25
  }
28
26
 
29
- type GetParamsProps = {
30
- paramsType: PluginReactQuery['resolvedOptions']['paramsType']
31
- paramsCasing: PluginReactQuery['resolvedOptions']['paramsCasing']
32
- pathParamsType: PluginReactQuery['resolvedOptions']['pathParamsType']
33
- typeSchemas: OperationSchemas
34
- pageParamGeneric: string
35
- }
27
+ const declarationPrinter = functionPrinter({ mode: 'declaration' })
28
+ const callPrinter = functionPrinter({ mode: 'call' })
36
29
 
37
- function getParams({ paramsType, paramsCasing, pathParamsType, typeSchemas, pageParamGeneric }: GetParamsProps) {
38
- if (paramsType === 'object') {
39
- const pathParams = getPathParams(typeSchemas.pathParams, { typed: true, casing: paramsCasing })
40
-
41
- const children = {
42
- ...pathParams,
43
- data: typeSchemas.request?.name
44
- ? {
45
- type: typeSchemas.request?.name,
46
- optional: isOptional(typeSchemas.request?.schema),
47
- }
48
- : undefined,
49
- params: typeSchemas.queryParams?.name
50
- ? {
51
- type: typeSchemas.queryParams?.name,
52
- optional: isOptional(typeSchemas.queryParams?.schema),
53
- }
54
- : undefined,
55
- headers: typeSchemas.headerParams?.name
56
- ? {
57
- type: typeSchemas.headerParams?.name,
58
- optional: isOptional(typeSchemas.headerParams?.schema),
59
- }
60
- : undefined,
61
- }
62
-
63
- // Check if all children are optional or undefined
64
- const allChildrenAreOptional = Object.values(children).every((child) => !child || child.optional)
65
-
66
- return FunctionParams.factory({
67
- data: {
68
- mode: 'object',
69
- children,
70
- default: allChildrenAreOptional ? '{}' : undefined,
71
- },
72
- options: {
73
- type: `
74
- {
75
- query?: Partial<UseSuspenseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, ${pageParamGeneric}>> & { client?: QueryClient },
76
- client?: ${typeSchemas.request?.name ? `Partial<RequestConfig<${typeSchemas.request?.name}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }'}
77
- }
78
- `,
79
- default: '{}',
80
- },
81
- })
82
- }
83
-
84
- return FunctionParams.factory({
85
- pathParams: typeSchemas.pathParams?.name
86
- ? {
87
- mode: pathParamsType === 'object' ? 'object' : 'inlineSpread',
88
- children: getPathParams(typeSchemas.pathParams, {
89
- typed: true,
90
- casing: paramsCasing,
91
- }),
92
- default: isAllOptional(typeSchemas.pathParams?.schema) ? '{}' : undefined,
93
- }
94
- : undefined,
95
- data: typeSchemas.request?.name
96
- ? {
97
- type: typeSchemas.request?.name,
98
- optional: isOptional(typeSchemas.request?.schema),
99
- }
100
- : undefined,
101
- params: typeSchemas.queryParams?.name
102
- ? {
103
- type: typeSchemas.queryParams?.name,
104
- optional: isOptional(typeSchemas.queryParams?.schema),
105
- }
106
- : undefined,
107
- headers: typeSchemas.headerParams?.name
108
- ? {
109
- type: typeSchemas.headerParams?.name,
110
- optional: isOptional(typeSchemas.headerParams?.schema),
111
- }
112
- : undefined,
113
- options: {
114
- type: `
115
- {
30
+ function buildSuspenseInfiniteQueryParamsNode(
31
+ node: ast.OperationNode,
32
+ options: {
33
+ paramsType: PluginReactQuery['resolvedOptions']['paramsType']
34
+ paramsCasing: PluginReactQuery['resolvedOptions']['paramsCasing']
35
+ pathParamsType: PluginReactQuery['resolvedOptions']['pathParamsType']
36
+ dataReturnType: PluginReactQuery['resolvedOptions']['client']['dataReturnType']
37
+ resolver: ResolverTs
38
+ pageParamGeneric: string
39
+ },
40
+ ): ast.FunctionParametersNode {
41
+ const { paramsType, paramsCasing, pathParamsType, resolver, pageParamGeneric } = options
42
+ const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : undefined
43
+
44
+ const optionsParam = ast.createFunctionParameter({
45
+ name: 'options',
46
+ type: ast.createParamsType({
47
+ variant: 'reference',
48
+ name: `{
116
49
  query?: Partial<UseSuspenseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, ${pageParamGeneric}>> & { client?: QueryClient },
117
- client?: ${typeSchemas.request?.name ? `Partial<RequestConfig<${typeSchemas.request?.name}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }'}
118
- }
119
- `,
120
- default: '{}',
121
- },
50
+ client?: ${requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }'}
51
+ }`,
52
+ }),
53
+ default: '{}',
54
+ })
55
+
56
+ return ast.createOperationParams(node, {
57
+ paramsType,
58
+ pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',
59
+ paramsCasing,
60
+ resolver,
61
+ extraParams: [optionsParam],
122
62
  })
123
63
  }
124
64
 
@@ -131,14 +71,18 @@ export function SuspenseInfiniteQuery({
131
71
  paramsCasing,
132
72
  pathParamsType,
133
73
  dataReturnType,
134
- typeSchemas,
135
- operation,
74
+ node,
75
+ tsResolver,
136
76
  customOptions,
137
77
  initialPageParam,
138
78
  queryParam,
139
- }: Props): FabricReactNode {
140
- const responseType = dataReturnType === 'data' ? typeSchemas.response.name : `ResponseConfig<${typeSchemas.response.name}>`
141
- const errorType = `ResponseErrorConfig<${typeSchemas.errors?.map((item) => item.name).join(' | ') || 'Error'}>`
79
+ }: Props): KubbReactNode {
80
+ const responseName = tsResolver.resolveResponseName(node)
81
+ const errorNames = resolveErrorNames(node, tsResolver)
82
+
83
+ const responseType = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`
84
+ const errorType = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`
85
+
142
86
  const isInitialPageParamDefined = initialPageParam !== undefined && initialPageParam !== null
143
87
  const fallbackPageParamType =
144
88
  typeof initialPageParam === 'number'
@@ -153,8 +97,20 @@ export function SuspenseInfiniteQuery({
153
97
  : typeof initialPageParam === 'boolean'
154
98
  ? 'boolean'
155
99
  : 'unknown'
156
- const queryParamType = queryParam && typeSchemas.queryParams?.name ? `${typeSchemas.queryParams?.name}['${queryParam}']` : undefined
100
+
101
+ const rawQueryParams = getOperationParameters(node).query
102
+ const queryParamsTypeName =
103
+ rawQueryParams.length > 0
104
+ ? (() => {
105
+ const groupName = tsResolver.resolveQueryParamsName(node, rawQueryParams[0]!)
106
+ const individualName = tsResolver.resolveParamName(node, rawQueryParams[0]!)
107
+ return groupName !== individualName ? groupName : undefined
108
+ })()
109
+ : undefined
110
+
111
+ const queryParamType = queryParam && queryParamsTypeName ? `${queryParamsTypeName}['${queryParam}']` : undefined
157
112
  const pageParamType = queryParamType ? (isInitialPageParamDefined ? `NonNullable<${queryParamType}>` : queryParamType) : fallbackPageParamType
113
+
158
114
  const returnType = 'UseSuspenseInfiniteQueryResult<TData, TError> & { queryKey: TQueryKey }'
159
115
  const generics = [
160
116
  `TQueryFnData = ${responseType}`,
@@ -164,46 +120,33 @@ export function SuspenseInfiniteQuery({
164
120
  `TPageParam = ${pageParamType}`,
165
121
  ]
166
122
 
167
- const queryKeyParams = QueryKey.getParams({
168
- pathParamsType,
169
- typeSchemas,
170
- paramsCasing,
171
- })
172
- const queryOptionsParams = QueryOptions.getParams({
123
+ const queryKeyParamsNode = buildQueryKeyParams(node, { pathParamsType, paramsCasing, resolver: tsResolver })
124
+ const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? ''
125
+
126
+ const queryOptionsParamsNode = getQueryOptionsParams(node, { paramsType, paramsCasing, pathParamsType, resolver: tsResolver })
127
+ const queryOptionsParamsCall = callPrinter.print(queryOptionsParamsNode) ?? ''
128
+
129
+ const paramsNode = buildSuspenseInfiniteQueryParamsNode(node, {
173
130
  paramsType,
174
- pathParamsType,
175
- typeSchemas,
176
- paramsCasing,
177
- })
178
- const params = getParams({
179
131
  paramsCasing,
180
- paramsType,
181
132
  pathParamsType,
182
- typeSchemas,
133
+ dataReturnType,
134
+ resolver: tsResolver,
183
135
  pageParamGeneric: 'TPageParam',
184
136
  })
185
-
186
- const queryOptions = `${queryOptionsName}(${queryOptionsParams.toCall()})`
137
+ const paramsSignature = declarationPrinter.print(paramsNode) ?? ''
187
138
 
188
139
  return (
189
140
  <File.Source name={name} isExportable isIndexable>
190
- <Function
191
- name={name}
192
- export
193
- generics={generics.join(', ')}
194
- params={params.toConstructor()}
195
- JSDoc={{
196
- comments: getComments(operation),
197
- }}
198
- >
141
+ <Function name={name} export generics={generics.join(', ')} params={paramsSignature} returnType={undefined} JSDoc={{ comments: getComments(node) }}>
199
142
  {`
200
143
  const { query: queryConfig = {}, client: config = {} } = options ?? {}
201
144
  const { client: queryClient, ...resolvedOptions } = queryConfig
202
- const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyParams.toCall()})
203
- ${customOptions ? `const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${operation.getOperationId()}' })` : ''}
145
+ const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyParamsCall})
146
+ ${customOptions ? `const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ''}
204
147
 
205
148
  const query = useSuspenseInfiniteQuery({
206
- ...${queryOptions},${customOptions ? '\n...customOptions,' : ''}
149
+ ...${queryOptionsName}(${queryOptionsParamsCall}),${customOptions ? '\n...customOptions,' : ''}
207
150
  ...resolvedOptions,
208
151
  queryKey,
209
152
  } as unknown as UseSuspenseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient) as ${returnType}
@@ -216,5 +159,3 @@ export function SuspenseInfiniteQuery({
216
159
  </File.Source>
217
160
  )
218
161
  }
219
-
220
- SuspenseInfiniteQuery.getParams = getParams