@kubb/plugin-react-query 5.0.0-alpha.8 → 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.
- package/LICENSE +17 -10
- package/README.md +34 -85
- package/dist/components-Dow6tde8.js +1459 -0
- package/dist/components-Dow6tde8.js.map +1 -0
- package/dist/components-HwdCDefj.cjs +1603 -0
- package/dist/components-HwdCDefj.cjs.map +1 -0
- package/dist/components.cjs +1 -1
- package/dist/components.d.ts +49 -179
- package/dist/components.js +1 -1
- package/dist/generators-CcOmnTPa.cjs +1454 -0
- package/dist/generators-CcOmnTPa.cjs.map +1 -0
- package/dist/generators-yfZr_qfT.js +1412 -0
- package/dist/generators-yfZr_qfT.js.map +1 -0
- package/dist/generators.cjs +1 -1
- package/dist/generators.d.ts +9 -476
- package/dist/generators.js +1 -1
- package/dist/index.cjs +197 -126
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +193 -126
- package/dist/index.js.map +1 -1
- package/dist/types-DG_OxOym.d.ts +363 -0
- package/extension.yaml +911 -0
- package/package.json +59 -64
- package/src/components/InfiniteQuery.tsx +79 -138
- package/src/components/InfiniteQueryOptions.tsx +55 -166
- package/src/components/Mutation.tsx +74 -111
- package/src/components/MutationOptions.tsx +61 -80
- package/src/components/Query.tsx +66 -142
- package/src/components/QueryOptions.tsx +56 -138
- package/src/components/SuspenseInfiniteQuery.tsx +79 -138
- package/src/components/SuspenseInfiniteQueryOptions.tsx +55 -166
- package/src/components/SuspenseQuery.tsx +66 -152
- package/src/generators/customHookOptionsFileGenerator.tsx +37 -51
- package/src/generators/hookOptionsGenerator.tsx +111 -174
- package/src/generators/infiniteQueryGenerator.tsx +158 -178
- package/src/generators/mutationGenerator.tsx +112 -139
- package/src/generators/queryGenerator.tsx +128 -142
- package/src/generators/suspenseInfiniteQueryGenerator.tsx +157 -156
- package/src/generators/suspenseQueryGenerator.tsx +126 -152
- package/src/index.ts +1 -1
- package/src/plugin.ts +134 -187
- package/src/resolvers/resolverReactQuery.ts +107 -0
- package/src/types.ts +172 -49
- package/src/utils.ts +10 -0
- package/dist/components-BHQT9ZLc.cjs +0 -1634
- package/dist/components-BHQT9ZLc.cjs.map +0 -1
- package/dist/components-CpyHYGOw.js +0 -1520
- package/dist/components-CpyHYGOw.js.map +0 -1
- package/dist/generators-DP07m3rH.cjs +0 -1469
- package/dist/generators-DP07m3rH.cjs.map +0 -1
- package/dist/generators-DkQwKTc2.js +0 -1427
- package/dist/generators-DkQwKTc2.js.map +0 -1
- package/dist/types-D5S7Ny9r.d.ts +0 -270
|
@@ -1,109 +1,54 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
22
|
-
|
|
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
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
59
|
+
node,
|
|
60
|
+
tsResolver,
|
|
115
61
|
paramsCasing,
|
|
116
62
|
paramsType,
|
|
117
63
|
pathParamsType,
|
|
118
64
|
queryKeyName,
|
|
119
|
-
}: Props):
|
|
120
|
-
const
|
|
121
|
-
|
|
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
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
-
|
|
143
|
-
|
|
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
|
|
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={
|
|
85
|
+
<Function name={name} export params={paramsSignature}>
|
|
158
86
|
{`
|
|
159
|
-
const queryKey = ${queryKeyName}(${
|
|
160
|
-
return queryOptions<${TData},
|
|
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}(${
|
|
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 {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
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 {
|
|
8
|
-
import {
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
30
|
-
|
|
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
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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?: ${
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
135
|
-
|
|
74
|
+
node,
|
|
75
|
+
tsResolver,
|
|
136
76
|
customOptions,
|
|
137
77
|
initialPageParam,
|
|
138
78
|
queryParam,
|
|
139
|
-
}: Props):
|
|
140
|
-
const
|
|
141
|
-
const
|
|
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
|
-
|
|
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
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
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
|
-
|
|
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}(${
|
|
203
|
-
${customOptions ? `const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${
|
|
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
|
-
...${
|
|
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
|