@kubb/plugin-react-query 5.0.0-beta.3 → 5.0.0-beta.31
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 +34 -83
- package/dist/{components-DTGLu4UV.js → components-BVmVgpLX.js} +379 -279
- package/dist/components-BVmVgpLX.js.map +1 -0
- package/dist/{components-dAKJEn9b.cjs → components-DLUeLMsz.cjs} +409 -279
- package/dist/components-DLUeLMsz.cjs.map +1 -0
- package/dist/components.cjs +1 -1
- package/dist/components.d.ts +4 -76
- package/dist/components.js +1 -1
- package/dist/{generators-CWEQsdO9.cjs → generators--AcF4Y4n.cjs} +332 -410
- package/dist/generators--AcF4Y4n.cjs.map +1 -0
- package/dist/{generators-C_fbcjpG.js → generators-BFn9CLBS.js} +333 -411
- package/dist/generators-BFn9CLBS.js.map +1 -0
- package/dist/generators.cjs +1 -1
- package/dist/generators.d.ts +41 -1
- package/dist/generators.js +1 -1
- package/dist/index.cjs +179 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +30 -1
- package/dist/index.js +179 -26
- package/dist/index.js.map +1 -1
- package/dist/types-DiZPLTXl.d.ts +400 -0
- package/extension.yaml +1507 -0
- package/package.json +16 -18
- package/src/components/InfiniteQuery.tsx +24 -13
- package/src/components/InfiniteQueryOptions.tsx +37 -55
- package/src/components/Mutation.tsx +35 -15
- package/src/components/MutationOptions.tsx +14 -13
- package/src/components/Query.tsx +14 -10
- package/src/components/QueryOptions.tsx +17 -34
- package/src/components/SuspenseInfiniteQuery.tsx +19 -13
- package/src/components/SuspenseInfiniteQueryOptions.tsx +28 -52
- package/src/components/SuspenseQuery.tsx +9 -10
- package/src/generators/customHookOptionsFileGenerator.tsx +18 -14
- package/src/generators/hookOptionsGenerator.tsx +42 -49
- package/src/generators/infiniteQueryGenerator.tsx +55 -76
- package/src/generators/mutationGenerator.tsx +51 -62
- package/src/generators/queryGenerator.tsx +52 -61
- package/src/generators/suspenseInfiniteQueryGenerator.tsx +50 -63
- package/src/generators/suspenseQueryGenerator.tsx +54 -74
- package/src/plugin.ts +45 -31
- package/src/resolvers/resolverReactQuery.ts +102 -6
- package/src/types.ts +199 -61
- package/src/utils.ts +10 -33
- package/dist/components-DTGLu4UV.js.map +0 -1
- package/dist/components-dAKJEn9b.cjs.map +0 -1
- package/dist/generators-CWEQsdO9.cjs.map +0 -1
- package/dist/generators-C_fbcjpG.js.map +0 -1
- package/dist/types-DfaFRSBf.d.ts +0 -284
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_components = require("./components-
|
|
1
|
+
const require_components = require("./components-DLUeLMsz.cjs");
|
|
2
2
|
let node_path = require("node:path");
|
|
3
3
|
node_path = require_components.__toESM(node_path);
|
|
4
4
|
let _kubb_core = require("@kubb/core");
|
|
@@ -11,21 +11,28 @@ let node_fs = require("node:fs");
|
|
|
11
11
|
node_fs = require_components.__toESM(node_fs);
|
|
12
12
|
let remeda = require("remeda");
|
|
13
13
|
//#region src/generators/customHookOptionsFileGenerator.tsx
|
|
14
|
+
/**
|
|
15
|
+
* Scaffolds the user-editable `useCustomHookOptions` file when
|
|
16
|
+
* `pluginReactQuery({ customOptions: { ... } })` is configured. The file is
|
|
17
|
+
* only created when it does not already exist, so user edits persist across
|
|
18
|
+
* regeneration.
|
|
19
|
+
*/
|
|
14
20
|
const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
|
|
15
21
|
name: "react-query-custom-hook-options-file",
|
|
16
|
-
renderer: _kubb_renderer_jsx.
|
|
22
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
17
23
|
operations(nodes, ctx) {
|
|
18
24
|
const { resolver, config, root } = ctx;
|
|
19
|
-
const { output, customOptions, query, group
|
|
25
|
+
const { output, customOptions, query, group } = ctx.options;
|
|
20
26
|
if (!customOptions) return null;
|
|
21
27
|
const override = output.override ?? config.output.override ?? false;
|
|
22
28
|
const { importPath, name } = customOptions;
|
|
29
|
+
const hookOptionsName = resolver.resolveHookOptionsName();
|
|
30
|
+
const customHookOptionsName = resolver.resolveCustomHookOptionsName();
|
|
23
31
|
const reactQueryImportPath = query ? query.importPath : "@tanstack/react-query";
|
|
24
|
-
const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
|
|
25
32
|
let hookFilePath;
|
|
26
33
|
const firstNode = nodes[0];
|
|
27
34
|
if (firstNode) {
|
|
28
|
-
const hookName =
|
|
35
|
+
const hookName = resolver.resolveQueryName(firstNode);
|
|
29
36
|
hookFilePath = resolver.resolveFile({
|
|
30
37
|
name: hookName,
|
|
31
38
|
extname: ".ts",
|
|
@@ -34,7 +41,7 @@ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
34
41
|
}, {
|
|
35
42
|
root,
|
|
36
43
|
output,
|
|
37
|
-
group
|
|
44
|
+
group: group ?? void 0
|
|
38
45
|
}).path;
|
|
39
46
|
} else hookFilePath = node_path.default.resolve(root, "index.ts");
|
|
40
47
|
const ensureExtension = (filePath, extname) => {
|
|
@@ -63,7 +70,7 @@ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
63
70
|
path: reactQueryImportPath
|
|
64
71
|
}),
|
|
65
72
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
66
|
-
name: [
|
|
73
|
+
name: [hookOptionsName],
|
|
67
74
|
root: file.path,
|
|
68
75
|
path: node_path.default.resolve(root, "./index.ts")
|
|
69
76
|
}),
|
|
@@ -72,9 +79,9 @@ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
72
79
|
isExportable: true,
|
|
73
80
|
isIndexable: true,
|
|
74
81
|
children: [/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.Function, {
|
|
75
|
-
name:
|
|
82
|
+
name: customHookOptionsName,
|
|
76
83
|
params: "{ queryClient }: { queryClient: QueryClient }",
|
|
77
|
-
returnType:
|
|
84
|
+
returnType: `Partial<${hookOptionsName}>`,
|
|
78
85
|
children: `return {
|
|
79
86
|
// TODO: Define custom hook options here
|
|
80
87
|
// Example:
|
|
@@ -86,12 +93,12 @@ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
86
93
|
}`
|
|
87
94
|
}), /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.Function, {
|
|
88
95
|
name,
|
|
89
|
-
generics:
|
|
96
|
+
generics: `T extends keyof ${hookOptionsName}`,
|
|
90
97
|
params: "{ hookName, operationId }: { hookName: T, operationId: string }",
|
|
91
|
-
returnType:
|
|
98
|
+
returnType: `${hookOptionsName}[T]`,
|
|
92
99
|
export: true,
|
|
93
100
|
children: `const queryClient = useQueryClient()
|
|
94
|
-
const customOptions =
|
|
101
|
+
const customOptions = ${customHookOptionsName}({ queryClient })
|
|
95
102
|
return customOptions[hookName] ?? {}`
|
|
96
103
|
})]
|
|
97
104
|
})
|
|
@@ -101,52 +108,53 @@ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
101
108
|
});
|
|
102
109
|
//#endregion
|
|
103
110
|
//#region src/generators/hookOptionsGenerator.tsx
|
|
111
|
+
/**
|
|
112
|
+
* Emits the `HookOptions` type used by `customOptions`. Enabled when
|
|
113
|
+
* `pluginReactQuery({ customOptions: { ... } })`. The generated type lists
|
|
114
|
+
* every hook keyed by name so user-supplied options stay in sync with the
|
|
115
|
+
* generated hooks at compile time.
|
|
116
|
+
*/
|
|
104
117
|
const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
105
118
|
name: "react-query-hook-options",
|
|
106
|
-
renderer: _kubb_renderer_jsx.
|
|
119
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
107
120
|
operations(nodes, ctx) {
|
|
108
|
-
const { resolver, config, root
|
|
109
|
-
const { output, customOptions, query, mutation, suspense, infinite, group,
|
|
121
|
+
const { resolver, config, root } = ctx;
|
|
122
|
+
const { output, customOptions, query, mutation, suspense, infinite, group, override } = ctx.options;
|
|
110
123
|
if (!customOptions) return null;
|
|
124
|
+
const name = resolver.resolveHookOptionsName();
|
|
111
125
|
const resolvedFile = resolver.resolveFile({
|
|
112
|
-
name
|
|
126
|
+
name,
|
|
113
127
|
extname: ".ts"
|
|
114
128
|
}, {
|
|
115
129
|
root,
|
|
116
130
|
output,
|
|
117
|
-
group
|
|
131
|
+
group: group ?? void 0
|
|
118
132
|
});
|
|
119
133
|
const hookOptionsFile = {
|
|
120
134
|
...resolvedFile,
|
|
121
|
-
baseName:
|
|
122
|
-
path: resolvedFile.path.replace(/
|
|
135
|
+
baseName: `${name}.ts`,
|
|
136
|
+
path: resolvedFile.path.replace(/[^/\\]+\.ts$/, `${name}.ts`)
|
|
123
137
|
};
|
|
124
|
-
const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
|
|
125
138
|
const imports = [];
|
|
126
139
|
const hookOptions = {};
|
|
127
140
|
for (const node of nodes) {
|
|
128
|
-
|
|
141
|
+
if (!_kubb_core.ast.isHttpOperationNode(node)) continue;
|
|
129
142
|
const opOverrides = require_components.resolveOperationOverrides(node, override);
|
|
130
143
|
const nodeQuery = "query" in opOverrides ? opOverrides.query : query;
|
|
131
144
|
const nodeMutation = "mutation" in opOverrides ? opOverrides.mutation : mutation;
|
|
132
145
|
const nodeInfinite = "infinite" in opOverrides ? opOverrides.infinite : infinite;
|
|
133
|
-
const nodeInfiniteOptions = nodeInfinite && typeof nodeInfinite === "object" ? nodeInfinite :
|
|
146
|
+
const nodeInfiniteOptions = nodeInfinite && typeof nodeInfinite === "object" ? nodeInfinite : null;
|
|
134
147
|
const isQueryOp = nodeQuery === false ? !!query && query.methods.some((m) => node.method.toLowerCase() === m.toLowerCase()) : !!nodeQuery && nodeQuery.methods.some((m) => node.method.toLowerCase() === m.toLowerCase());
|
|
135
148
|
const isMutationOp = nodeMutation !== false && !isQueryOp && (0, remeda.difference)(nodeMutation ? nodeMutation.methods : [], nodeQuery ? nodeQuery.methods : []).some((m) => node.method.toLowerCase() === m.toLowerCase());
|
|
136
149
|
const isSuspenseOp = !!suspense;
|
|
137
150
|
const isInfiniteOp = !!nodeInfiniteOptions;
|
|
138
151
|
if (isQueryOp) {
|
|
139
|
-
const queryOptionsName =
|
|
140
|
-
const queryHookName =
|
|
141
|
-
const queryHookFile = resolver.resolveFile({
|
|
142
|
-
name: queryHookName,
|
|
143
|
-
extname: ".ts",
|
|
144
|
-
tag: node.tags[0] ?? "default",
|
|
145
|
-
path: node.path
|
|
146
|
-
}, {
|
|
152
|
+
const queryOptionsName = resolver.resolveQueryOptionsName(node);
|
|
153
|
+
const queryHookName = resolver.resolveQueryName(node);
|
|
154
|
+
const queryHookFile = resolver.resolveFile(require_components.operationFileEntry(node, queryHookName), {
|
|
147
155
|
root,
|
|
148
156
|
output,
|
|
149
|
-
group
|
|
157
|
+
group: group ?? void 0
|
|
150
158
|
});
|
|
151
159
|
imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
152
160
|
name: [queryOptionsName],
|
|
@@ -155,17 +163,12 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
155
163
|
}));
|
|
156
164
|
hookOptions[queryHookName] = `Partial<ReturnType<typeof ${queryOptionsName}>>`;
|
|
157
165
|
if (isSuspenseOp) {
|
|
158
|
-
const suspenseOptionsName =
|
|
159
|
-
const suspenseHookName =
|
|
160
|
-
const suspenseHookFile = resolver.resolveFile({
|
|
161
|
-
name: suspenseHookName,
|
|
162
|
-
extname: ".ts",
|
|
163
|
-
tag: node.tags[0] ?? "default",
|
|
164
|
-
path: node.path
|
|
165
|
-
}, {
|
|
166
|
+
const suspenseOptionsName = resolver.resolveSuspenseQueryOptionsName(node);
|
|
167
|
+
const suspenseHookName = resolver.resolveSuspenseQueryName(node);
|
|
168
|
+
const suspenseHookFile = resolver.resolveFile(require_components.operationFileEntry(node, suspenseHookName), {
|
|
166
169
|
root,
|
|
167
170
|
output,
|
|
168
|
-
group
|
|
171
|
+
group: group ?? void 0
|
|
169
172
|
});
|
|
170
173
|
imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
171
174
|
name: [suspenseOptionsName],
|
|
@@ -176,19 +179,14 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
176
179
|
}
|
|
177
180
|
if (isInfiniteOp) {
|
|
178
181
|
const normalizeKey = (key) => key.replace(/\?$/, "");
|
|
179
|
-
const queryParamKeys =
|
|
182
|
+
const queryParamKeys = require_components.getOperationParameters(node).query.map((p) => p.name);
|
|
180
183
|
if (nodeInfiniteOptions.queryParam ? queryParamKeys.some((k) => normalizeKey(k) === nodeInfiniteOptions.queryParam) : false) {
|
|
181
|
-
const infiniteOptionsName =
|
|
182
|
-
const infiniteHookName =
|
|
183
|
-
const infiniteHookFile = resolver.resolveFile({
|
|
184
|
-
name: infiniteHookName,
|
|
185
|
-
extname: ".ts",
|
|
186
|
-
tag: node.tags[0] ?? "default",
|
|
187
|
-
path: node.path
|
|
188
|
-
}, {
|
|
184
|
+
const infiniteOptionsName = resolver.resolveInfiniteQueryOptionsName(node);
|
|
185
|
+
const infiniteHookName = resolver.resolveInfiniteQueryName(node);
|
|
186
|
+
const infiniteHookFile = resolver.resolveFile(require_components.operationFileEntry(node, infiniteHookName), {
|
|
189
187
|
root,
|
|
190
188
|
output,
|
|
191
|
-
group
|
|
189
|
+
group: group ?? void 0
|
|
192
190
|
});
|
|
193
191
|
imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
194
192
|
name: [infiniteOptionsName],
|
|
@@ -197,17 +195,12 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
197
195
|
}));
|
|
198
196
|
hookOptions[infiniteHookName] = `Partial<ReturnType<typeof ${infiniteOptionsName}>>`;
|
|
199
197
|
if (isSuspenseOp) {
|
|
200
|
-
const suspenseInfiniteOptionsName =
|
|
201
|
-
const suspenseInfiniteHookName =
|
|
202
|
-
const suspenseInfiniteHookFile = resolver.resolveFile({
|
|
203
|
-
name: suspenseInfiniteHookName,
|
|
204
|
-
extname: ".ts",
|
|
205
|
-
tag: node.tags[0] ?? "default",
|
|
206
|
-
path: node.path
|
|
207
|
-
}, {
|
|
198
|
+
const suspenseInfiniteOptionsName = resolver.resolveSuspenseInfiniteQueryOptionsName(node);
|
|
199
|
+
const suspenseInfiniteHookName = resolver.resolveSuspenseInfiniteQueryName(node);
|
|
200
|
+
const suspenseInfiniteHookFile = resolver.resolveFile(require_components.operationFileEntry(node, suspenseInfiniteHookName), {
|
|
208
201
|
root,
|
|
209
202
|
output,
|
|
210
|
-
group
|
|
203
|
+
group: group ?? void 0
|
|
211
204
|
});
|
|
212
205
|
imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
213
206
|
name: [suspenseInfiniteOptionsName],
|
|
@@ -220,17 +213,12 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
220
213
|
}
|
|
221
214
|
}
|
|
222
215
|
if (isMutationOp) {
|
|
223
|
-
const mutationOptionsName =
|
|
224
|
-
const mutationHookName =
|
|
225
|
-
const mutationHookFile = resolver.resolveFile({
|
|
226
|
-
name: mutationHookName,
|
|
227
|
-
extname: ".ts",
|
|
228
|
-
tag: node.tags[0] ?? "default",
|
|
229
|
-
path: node.path
|
|
230
|
-
}, {
|
|
216
|
+
const mutationOptionsName = resolver.resolveMutationOptionsName(node);
|
|
217
|
+
const mutationHookName = resolver.resolveMutationName(node);
|
|
218
|
+
const mutationHookFile = resolver.resolveFile(require_components.operationFileEntry(node, mutationHookName), {
|
|
231
219
|
root,
|
|
232
220
|
output,
|
|
233
|
-
group
|
|
221
|
+
group: group ?? void 0
|
|
234
222
|
});
|
|
235
223
|
imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
236
224
|
name: [mutationOptionsName],
|
|
@@ -240,18 +228,25 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
240
228
|
hookOptions[mutationHookName] = `Partial<ReturnType<typeof ${mutationOptionsName}>>`;
|
|
241
229
|
}
|
|
242
230
|
}
|
|
243
|
-
const name = "HookOptions";
|
|
244
231
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
245
232
|
baseName: hookOptionsFile.baseName,
|
|
246
233
|
path: hookOptionsFile.path,
|
|
247
234
|
meta: hookOptionsFile.meta,
|
|
248
|
-
banner: resolver.resolveBanner(
|
|
235
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
249
236
|
output,
|
|
250
|
-
config
|
|
237
|
+
config,
|
|
238
|
+
file: {
|
|
239
|
+
path: hookOptionsFile.path,
|
|
240
|
+
baseName: hookOptionsFile.baseName
|
|
241
|
+
}
|
|
251
242
|
}),
|
|
252
|
-
footer: resolver.resolveFooter(
|
|
243
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
253
244
|
output,
|
|
254
|
-
config
|
|
245
|
+
config,
|
|
246
|
+
file: {
|
|
247
|
+
path: hookOptionsFile.path,
|
|
248
|
+
baseName: hookOptionsFile.baseName
|
|
249
|
+
}
|
|
255
250
|
}),
|
|
256
251
|
children: [imports, /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
|
|
257
252
|
name,
|
|
@@ -269,114 +264,100 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
269
264
|
});
|
|
270
265
|
//#endregion
|
|
271
266
|
//#region src/generators/infiniteQueryGenerator.tsx
|
|
267
|
+
/**
|
|
268
|
+
* Built-in generator for `useInfiniteQuery` hooks. Enabled when
|
|
269
|
+
* `pluginReactQuery({ infinite: { ... } })`. Emits one `useFooInfiniteQuery`
|
|
270
|
+
* hook per query operation, wiring the configured `nextParam` /
|
|
271
|
+
* `previousParam` paths into TanStack Query's cursor-based pagination.
|
|
272
|
+
*/
|
|
272
273
|
const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
273
274
|
name: "react-infinite-query",
|
|
274
|
-
renderer: _kubb_renderer_jsx.
|
|
275
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
275
276
|
operation(node, ctx) {
|
|
276
|
-
|
|
277
|
-
const {
|
|
277
|
+
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
278
|
+
const { config, driver, resolver, root } = ctx;
|
|
279
|
+
const { output, query, mutation, infinite, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options;
|
|
278
280
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
279
281
|
if (!pluginTs) return null;
|
|
280
282
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
281
283
|
const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
|
|
282
284
|
const isMutation = mutation !== false && !isQuery && (0, remeda.difference)(mutation ? mutation.methods : [], query ? query.methods : []).some((method) => node.method.toLowerCase() === method.toLowerCase());
|
|
283
|
-
const infiniteOptions = infinite && typeof infinite === "object" ? infinite :
|
|
285
|
+
const infiniteOptions = infinite && typeof infinite === "object" ? infinite : null;
|
|
284
286
|
if (!isQuery || isMutation || !infiniteOptions) return null;
|
|
285
287
|
const normalizeKey = (key) => key.replace(/\?$/, "");
|
|
286
|
-
const queryParamKeys =
|
|
288
|
+
const queryParamKeys = require_components.getOperationParameters(node).query.map((p) => p.name);
|
|
287
289
|
const hasQueryParam = infiniteOptions.queryParam ? queryParamKeys.some((k) => normalizeKey(k) === infiniteOptions.queryParam) : false;
|
|
288
290
|
const hasCursorParam = !infiniteOptions.cursorParam || true;
|
|
289
291
|
if (!hasQueryParam || !hasCursorParam) return null;
|
|
290
292
|
const importPath = query ? query.importPath : "@tanstack/react-query";
|
|
291
|
-
const
|
|
292
|
-
const
|
|
293
|
-
const
|
|
294
|
-
const
|
|
295
|
-
const
|
|
296
|
-
const queryKeyTypeName = require_components.transformName(`${capitalize(baseName)}InfiniteQueryKey`, "type", transformers);
|
|
297
|
-
const clientBaseName = require_components.transformName(`${baseName}Infinite`, "function", transformers);
|
|
293
|
+
const queryName = resolver.resolveInfiniteQueryName(node);
|
|
294
|
+
const queryOptionsName = resolver.resolveInfiniteQueryOptionsName(node);
|
|
295
|
+
const queryKeyName = resolver.resolveInfiniteQueryKeyName(node);
|
|
296
|
+
const queryKeyTypeName = resolver.resolveInfiniteQueryKeyTypeName(node);
|
|
297
|
+
const clientBaseName = resolver.resolveInfiniteClientName(node);
|
|
298
298
|
const meta = {
|
|
299
|
-
file: resolver.resolveFile({
|
|
300
|
-
name: queryName,
|
|
301
|
-
extname: ".ts",
|
|
302
|
-
tag: node.tags[0] ?? "default",
|
|
303
|
-
path: node.path
|
|
304
|
-
}, {
|
|
299
|
+
file: resolver.resolveFile(require_components.operationFileEntry(node, queryName), {
|
|
305
300
|
root,
|
|
306
301
|
output,
|
|
307
|
-
group
|
|
302
|
+
group: group ?? void 0
|
|
308
303
|
}),
|
|
309
|
-
fileTs: tsResolver.resolveFile({
|
|
310
|
-
name: node.operationId,
|
|
311
|
-
extname: ".ts",
|
|
312
|
-
tag: node.tags[0] ?? "default",
|
|
313
|
-
path: node.path
|
|
314
|
-
}, {
|
|
304
|
+
fileTs: tsResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
315
305
|
root,
|
|
316
306
|
output: pluginTs.options?.output ?? output,
|
|
317
|
-
group: pluginTs.options?.group
|
|
307
|
+
group: pluginTs.options?.group ?? void 0
|
|
318
308
|
})
|
|
319
309
|
};
|
|
320
|
-
const
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
|
|
329
|
-
...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
|
|
330
|
-
...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
|
|
331
|
-
].filter((name) => !!name && name !== queryKeyTypeName);
|
|
332
|
-
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
333
|
-
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
334
|
-
const fileZod = zodResolver ? zodResolver.resolveFile({
|
|
335
|
-
name: node.operationId,
|
|
336
|
-
extname: ".ts",
|
|
337
|
-
tag: node.tags[0] ?? "default",
|
|
338
|
-
path: node.path
|
|
339
|
-
}, {
|
|
310
|
+
const importedTypeNames = require_components.resolveOperationTypeNames(node, tsResolver, {
|
|
311
|
+
paramsCasing,
|
|
312
|
+
exclude: [queryKeyTypeName],
|
|
313
|
+
order: "body-response-first"
|
|
314
|
+
});
|
|
315
|
+
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
316
|
+
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
317
|
+
const fileZod = zodResolver ? zodResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
340
318
|
root,
|
|
341
319
|
output: pluginZod?.options?.output ?? output,
|
|
342
|
-
group: pluginZod?.options?.group
|
|
343
|
-
}) :
|
|
344
|
-
const zodSchemaNames =
|
|
320
|
+
group: pluginZod?.options?.group ?? void 0
|
|
321
|
+
}) : null;
|
|
322
|
+
const zodSchemaNames = require_components.resolveZodSchemaNames(node, zodResolver);
|
|
345
323
|
const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
|
|
346
324
|
const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
|
|
347
|
-
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) :
|
|
348
|
-
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
|
|
349
|
-
name: node.operationId,
|
|
350
|
-
extname: ".ts",
|
|
351
|
-
tag: node.tags[0] ?? "default",
|
|
352
|
-
path: node.path
|
|
353
|
-
}, {
|
|
325
|
+
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : null;
|
|
326
|
+
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
354
327
|
root,
|
|
355
328
|
output: clientPlugin?.options?.output ?? output,
|
|
356
|
-
group: clientPlugin?.options?.group
|
|
357
|
-
}) :
|
|
329
|
+
group: clientPlugin?.options?.group ?? void 0
|
|
330
|
+
}) : null;
|
|
358
331
|
const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientBaseName : clientBaseName;
|
|
359
332
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
360
333
|
baseName: meta.file.baseName,
|
|
361
334
|
path: meta.file.path,
|
|
362
335
|
meta: meta.file.meta,
|
|
363
|
-
banner: resolver.resolveBanner(
|
|
336
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
364
337
|
output,
|
|
365
|
-
config
|
|
338
|
+
config,
|
|
339
|
+
file: {
|
|
340
|
+
path: meta.file.path,
|
|
341
|
+
baseName: meta.file.baseName
|
|
342
|
+
}
|
|
366
343
|
}),
|
|
367
|
-
footer: resolver.resolveFooter(
|
|
344
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
368
345
|
output,
|
|
369
|
-
config
|
|
346
|
+
config,
|
|
347
|
+
file: {
|
|
348
|
+
path: meta.file.path,
|
|
349
|
+
baseName: meta.file.baseName
|
|
350
|
+
}
|
|
370
351
|
}),
|
|
371
352
|
children: [
|
|
372
|
-
|
|
353
|
+
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
373
354
|
name: zodSchemaNames,
|
|
374
355
|
root: meta.file.path,
|
|
375
356
|
path: fileZod.path
|
|
376
357
|
}),
|
|
377
358
|
clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
378
359
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
379
|
-
name: "
|
|
360
|
+
name: "client",
|
|
380
361
|
path: clientOptions.importPath
|
|
381
362
|
}),
|
|
382
363
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
@@ -395,9 +376,9 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
395
376
|
})
|
|
396
377
|
] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
397
378
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
398
|
-
name: ["
|
|
379
|
+
name: ["client"],
|
|
399
380
|
root: meta.file.path,
|
|
400
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
381
|
+
path: node_path.default.resolve(root, ".kubb/client.ts")
|
|
401
382
|
}),
|
|
402
383
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
403
384
|
name: [
|
|
@@ -406,13 +387,13 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
406
387
|
"ResponseErrorConfig"
|
|
407
388
|
],
|
|
408
389
|
root: meta.file.path,
|
|
409
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
390
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
410
391
|
isTypeOnly: true
|
|
411
392
|
}),
|
|
412
393
|
clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
413
394
|
name: ["ResponseConfig"],
|
|
414
395
|
root: meta.file.path,
|
|
415
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
396
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
416
397
|
isTypeOnly: true
|
|
417
398
|
})
|
|
418
399
|
] }),
|
|
@@ -517,107 +498,91 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
517
498
|
});
|
|
518
499
|
//#endregion
|
|
519
500
|
//#region src/generators/mutationGenerator.tsx
|
|
501
|
+
/**
|
|
502
|
+
* Built-in generator for `useMutation` hooks. Emits one `useFooMutation` hook
|
|
503
|
+
* per POST/PUT/DELETE operation (configurable via `mutation.methods`) plus
|
|
504
|
+
* the matching `fooMutationKey` / `fooMutationOptions` helpers.
|
|
505
|
+
*/
|
|
520
506
|
const mutationGenerator = (0, _kubb_core.defineGenerator)({
|
|
521
507
|
name: "react-query-mutation",
|
|
522
|
-
renderer: _kubb_renderer_jsx.
|
|
508
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
523
509
|
operation(node, ctx) {
|
|
524
|
-
|
|
525
|
-
const {
|
|
510
|
+
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
511
|
+
const { config, driver, resolver, root } = ctx;
|
|
512
|
+
const { output, query, mutation, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options;
|
|
526
513
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
527
514
|
if (!pluginTs) return null;
|
|
528
515
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
529
516
|
const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
|
|
530
517
|
if (!(mutation !== false && !isQuery && (0, remeda.difference)(mutation ? mutation.methods : [], query ? query.methods : []).some((method) => node.method.toLowerCase() === method.toLowerCase()))) return null;
|
|
531
518
|
const importPath = mutation ? mutation.importPath : "@tanstack/react-query";
|
|
532
|
-
const
|
|
533
|
-
const
|
|
534
|
-
const
|
|
535
|
-
const
|
|
536
|
-
const
|
|
537
|
-
const mutationKeyName = require_components.transformName(`${baseName}MutationKey`, "const", transformers);
|
|
538
|
-
const clientName = require_components.transformName(baseName, "function", transformers);
|
|
519
|
+
const mutationHookName = resolver.resolveMutationName(node);
|
|
520
|
+
const mutationTypeName = resolver.resolveMutationTypeName(node);
|
|
521
|
+
const mutationOptionsName = resolver.resolveMutationOptionsName(node);
|
|
522
|
+
const mutationKeyName = resolver.resolveMutationKeyName(node);
|
|
523
|
+
const clientName = resolver.resolveClientName(node);
|
|
539
524
|
const meta = {
|
|
540
|
-
file: resolver.resolveFile({
|
|
541
|
-
name: mutationHookName,
|
|
542
|
-
extname: ".ts",
|
|
543
|
-
tag: node.tags[0] ?? "default",
|
|
544
|
-
path: node.path
|
|
545
|
-
}, {
|
|
525
|
+
file: resolver.resolveFile(require_components.operationFileEntry(node, mutationHookName), {
|
|
546
526
|
root,
|
|
547
527
|
output,
|
|
548
|
-
group
|
|
528
|
+
group: group ?? void 0
|
|
549
529
|
}),
|
|
550
|
-
fileTs: tsResolver.resolveFile({
|
|
551
|
-
name: node.operationId,
|
|
552
|
-
extname: ".ts",
|
|
553
|
-
tag: node.tags[0] ?? "default",
|
|
554
|
-
path: node.path
|
|
555
|
-
}, {
|
|
530
|
+
fileTs: tsResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
556
531
|
root,
|
|
557
532
|
output: pluginTs.options?.output ?? output,
|
|
558
|
-
group: pluginTs.options?.group
|
|
533
|
+
group: pluginTs.options?.group ?? void 0
|
|
559
534
|
})
|
|
560
535
|
};
|
|
561
|
-
const
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
const
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
...pathParams.map((p) => tsResolver.resolvePathParamsName(node, p)),
|
|
569
|
-
...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
|
|
570
|
-
...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
|
|
571
|
-
...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
|
|
572
|
-
].filter((name) => !!name);
|
|
573
|
-
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
574
|
-
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
575
|
-
const fileZod = zodResolver ? zodResolver.resolveFile({
|
|
576
|
-
name: node.operationId,
|
|
577
|
-
extname: ".ts",
|
|
578
|
-
tag: node.tags[0] ?? "default",
|
|
579
|
-
path: node.path
|
|
580
|
-
}, {
|
|
536
|
+
const importedTypeNames = require_components.resolveOperationTypeNames(node, tsResolver, {
|
|
537
|
+
paramsCasing,
|
|
538
|
+
order: "body-response-first"
|
|
539
|
+
});
|
|
540
|
+
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
541
|
+
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
542
|
+
const fileZod = zodResolver ? zodResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
581
543
|
root,
|
|
582
544
|
output: pluginZod?.options?.output ?? output,
|
|
583
|
-
group: pluginZod?.options?.group
|
|
584
|
-
}) :
|
|
585
|
-
const zodSchemaNames =
|
|
545
|
+
group: pluginZod?.options?.group ?? void 0
|
|
546
|
+
}) : null;
|
|
547
|
+
const zodSchemaNames = require_components.resolveZodSchemaNames(node, zodResolver);
|
|
586
548
|
const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
|
|
587
549
|
const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
|
|
588
|
-
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) :
|
|
589
|
-
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
|
|
590
|
-
name: node.operationId,
|
|
591
|
-
extname: ".ts",
|
|
592
|
-
tag: node.tags[0] ?? "default",
|
|
593
|
-
path: node.path
|
|
594
|
-
}, {
|
|
550
|
+
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : null;
|
|
551
|
+
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
595
552
|
root,
|
|
596
553
|
output: clientPlugin?.options?.output ?? output,
|
|
597
|
-
group: clientPlugin?.options?.group
|
|
598
|
-
}) :
|
|
554
|
+
group: clientPlugin?.options?.group ?? void 0
|
|
555
|
+
}) : null;
|
|
599
556
|
const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientName : clientName;
|
|
600
557
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
601
558
|
baseName: meta.file.baseName,
|
|
602
559
|
path: meta.file.path,
|
|
603
560
|
meta: meta.file.meta,
|
|
604
|
-
banner: resolver.resolveBanner(
|
|
561
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
605
562
|
output,
|
|
606
|
-
config
|
|
563
|
+
config,
|
|
564
|
+
file: {
|
|
565
|
+
path: meta.file.path,
|
|
566
|
+
baseName: meta.file.baseName
|
|
567
|
+
}
|
|
607
568
|
}),
|
|
608
|
-
footer: resolver.resolveFooter(
|
|
569
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
609
570
|
output,
|
|
610
|
-
config
|
|
571
|
+
config,
|
|
572
|
+
file: {
|
|
573
|
+
path: meta.file.path,
|
|
574
|
+
baseName: meta.file.baseName
|
|
575
|
+
}
|
|
611
576
|
}),
|
|
612
577
|
children: [
|
|
613
|
-
|
|
578
|
+
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
614
579
|
name: zodSchemaNames,
|
|
615
580
|
root: meta.file.path,
|
|
616
581
|
path: fileZod.path
|
|
617
582
|
}),
|
|
618
583
|
clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
619
584
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
620
|
-
name: "
|
|
585
|
+
name: "client",
|
|
621
586
|
path: clientOptions.importPath
|
|
622
587
|
}),
|
|
623
588
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
@@ -636,9 +601,9 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
636
601
|
})
|
|
637
602
|
] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
638
603
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
639
|
-
name: ["
|
|
604
|
+
name: ["client"],
|
|
640
605
|
root: meta.file.path,
|
|
641
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
606
|
+
path: node_path.default.resolve(root, ".kubb/client.ts")
|
|
642
607
|
}),
|
|
643
608
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
644
609
|
name: [
|
|
@@ -647,13 +612,13 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
647
612
|
"ResponseErrorConfig"
|
|
648
613
|
],
|
|
649
614
|
root: meta.file.path,
|
|
650
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
615
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
651
616
|
isTypeOnly: true
|
|
652
617
|
}),
|
|
653
618
|
clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
654
619
|
name: ["ResponseConfig"],
|
|
655
620
|
root: meta.file.path,
|
|
656
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
621
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
657
622
|
isTypeOnly: true
|
|
658
623
|
})
|
|
659
624
|
] }),
|
|
@@ -662,7 +627,7 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
662
627
|
root: meta.file.path,
|
|
663
628
|
path: clientFile.path
|
|
664
629
|
}),
|
|
665
|
-
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
630
|
+
!shouldUseClientPlugin && node.requestBody?.content?.some((e) => e.contentType === "multipart/form-data") && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
666
631
|
name: ["buildFormData"],
|
|
667
632
|
root: meta.file.path,
|
|
668
633
|
path: node_path.default.resolve(root, ".kubb/config.ts")
|
|
@@ -744,12 +709,18 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
744
709
|
});
|
|
745
710
|
//#endregion
|
|
746
711
|
//#region src/generators/queryGenerator.tsx
|
|
712
|
+
/**
|
|
713
|
+
* Built-in generator for `useQuery` hooks. Emits one `useFooQuery` hook per
|
|
714
|
+
* GET operation (configurable via `query.methods`) plus the matching
|
|
715
|
+
* `fooQueryKey` / `fooQueryOptions` helpers.
|
|
716
|
+
*/
|
|
747
717
|
const queryGenerator = (0, _kubb_core.defineGenerator)({
|
|
748
718
|
name: "react-query",
|
|
749
|
-
renderer: _kubb_renderer_jsx.
|
|
719
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
750
720
|
operation(node, ctx) {
|
|
751
|
-
|
|
752
|
-
const {
|
|
721
|
+
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
722
|
+
const { config, driver, resolver, root } = ctx;
|
|
723
|
+
const { output, query, mutation, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options;
|
|
753
724
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
754
725
|
if (!pluginTs) return null;
|
|
755
726
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
@@ -757,95 +728,74 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
757
728
|
const isMutation = mutation !== false && !isQuery && (0, remeda.difference)(mutation ? mutation.methods : [], query ? query.methods : []).some((method) => node.method.toLowerCase() === method.toLowerCase());
|
|
758
729
|
if (!isQuery || isMutation) return null;
|
|
759
730
|
const importPath = query ? query.importPath : "@tanstack/react-query";
|
|
760
|
-
const
|
|
761
|
-
const
|
|
762
|
-
const
|
|
763
|
-
const
|
|
764
|
-
const
|
|
765
|
-
const queryKeyTypeName = require_components.transformName(`${capitalize(baseName)}QueryKey`, "type", transformers);
|
|
766
|
-
const clientName = require_components.transformName(baseName, "function", transformers);
|
|
731
|
+
const queryName = resolver.resolveQueryName(node);
|
|
732
|
+
const queryOptionsName = resolver.resolveQueryOptionsName(node);
|
|
733
|
+
const queryKeyName = resolver.resolveQueryKeyName(node);
|
|
734
|
+
const queryKeyTypeName = resolver.resolveQueryKeyTypeName(node);
|
|
735
|
+
const clientName = resolver.resolveClientName(node);
|
|
767
736
|
const meta = {
|
|
768
|
-
file: resolver.resolveFile({
|
|
769
|
-
name: queryName,
|
|
770
|
-
extname: ".ts",
|
|
771
|
-
tag: node.tags[0] ?? "default",
|
|
772
|
-
path: node.path
|
|
773
|
-
}, {
|
|
737
|
+
file: resolver.resolveFile(require_components.operationFileEntry(node, queryName), {
|
|
774
738
|
root,
|
|
775
739
|
output,
|
|
776
|
-
group
|
|
740
|
+
group: group ?? void 0
|
|
777
741
|
}),
|
|
778
|
-
fileTs: tsResolver.resolveFile({
|
|
779
|
-
name: node.operationId,
|
|
780
|
-
extname: ".ts",
|
|
781
|
-
tag: node.tags[0] ?? "default",
|
|
782
|
-
path: node.path
|
|
783
|
-
}, {
|
|
742
|
+
fileTs: tsResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
784
743
|
root,
|
|
785
744
|
output: pluginTs.options?.output ?? output,
|
|
786
|
-
group: pluginTs.options?.group
|
|
745
|
+
group: pluginTs.options?.group ?? void 0
|
|
787
746
|
})
|
|
788
747
|
};
|
|
789
|
-
const
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
|
|
798
|
-
...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
|
|
799
|
-
...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
|
|
800
|
-
].filter((name) => !!name && name !== queryKeyTypeName);
|
|
801
|
-
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
802
|
-
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
803
|
-
const fileZod = zodResolver ? zodResolver.resolveFile({
|
|
804
|
-
name: node.operationId,
|
|
805
|
-
extname: ".ts",
|
|
806
|
-
tag: node.tags[0] ?? "default",
|
|
807
|
-
path: node.path
|
|
808
|
-
}, {
|
|
748
|
+
const importedTypeNames = require_components.resolveOperationTypeNames(node, tsResolver, {
|
|
749
|
+
paramsCasing,
|
|
750
|
+
exclude: [queryKeyTypeName],
|
|
751
|
+
order: "body-response-first"
|
|
752
|
+
});
|
|
753
|
+
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
754
|
+
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
755
|
+
const fileZod = zodResolver ? zodResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
809
756
|
root,
|
|
810
757
|
output: pluginZod?.options?.output ?? output,
|
|
811
|
-
group: pluginZod?.options?.group
|
|
812
|
-
}) :
|
|
813
|
-
const zodSchemaNames =
|
|
758
|
+
group: pluginZod?.options?.group ?? void 0
|
|
759
|
+
}) : null;
|
|
760
|
+
const zodSchemaNames = require_components.resolveZodSchemaNames(node, zodResolver);
|
|
814
761
|
const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
|
|
815
762
|
const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
|
|
816
|
-
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) :
|
|
817
|
-
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
|
|
818
|
-
name: node.operationId,
|
|
819
|
-
extname: ".ts",
|
|
820
|
-
tag: node.tags[0] ?? "default",
|
|
821
|
-
path: node.path
|
|
822
|
-
}, {
|
|
763
|
+
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : null;
|
|
764
|
+
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
823
765
|
root,
|
|
824
766
|
output: clientPlugin?.options?.output ?? output,
|
|
825
|
-
group: clientPlugin?.options?.group
|
|
826
|
-
}) :
|
|
767
|
+
group: clientPlugin?.options?.group ?? void 0
|
|
768
|
+
}) : null;
|
|
827
769
|
const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientName : clientName;
|
|
828
770
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
829
771
|
baseName: meta.file.baseName,
|
|
830
772
|
path: meta.file.path,
|
|
831
773
|
meta: meta.file.meta,
|
|
832
|
-
banner: resolver.resolveBanner(
|
|
774
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
833
775
|
output,
|
|
834
|
-
config
|
|
776
|
+
config,
|
|
777
|
+
file: {
|
|
778
|
+
path: meta.file.path,
|
|
779
|
+
baseName: meta.file.baseName
|
|
780
|
+
}
|
|
835
781
|
}),
|
|
836
|
-
footer: resolver.resolveFooter(
|
|
782
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
837
783
|
output,
|
|
838
|
-
config
|
|
784
|
+
config,
|
|
785
|
+
file: {
|
|
786
|
+
path: meta.file.path,
|
|
787
|
+
baseName: meta.file.baseName
|
|
788
|
+
}
|
|
839
789
|
}),
|
|
840
790
|
children: [
|
|
841
|
-
|
|
791
|
+
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
842
792
|
name: zodSchemaNames,
|
|
843
793
|
root: meta.file.path,
|
|
844
794
|
path: fileZod.path
|
|
845
795
|
}),
|
|
846
796
|
clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
847
797
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
848
|
-
name: "
|
|
798
|
+
name: "client",
|
|
849
799
|
path: clientOptions.importPath
|
|
850
800
|
}),
|
|
851
801
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
@@ -864,9 +814,9 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
864
814
|
})
|
|
865
815
|
] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
866
816
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
867
|
-
name: ["
|
|
817
|
+
name: ["client"],
|
|
868
818
|
root: meta.file.path,
|
|
869
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
819
|
+
path: node_path.default.resolve(root, ".kubb/client.ts")
|
|
870
820
|
}),
|
|
871
821
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
872
822
|
name: [
|
|
@@ -875,13 +825,13 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
875
825
|
"ResponseErrorConfig"
|
|
876
826
|
],
|
|
877
827
|
root: meta.file.path,
|
|
878
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
828
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
879
829
|
isTypeOnly: true
|
|
880
830
|
}),
|
|
881
831
|
clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
882
832
|
name: ["ResponseConfig"],
|
|
883
833
|
root: meta.file.path,
|
|
884
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
834
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
885
835
|
isTypeOnly: true
|
|
886
836
|
})
|
|
887
837
|
] }),
|
|
@@ -976,115 +926,100 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
976
926
|
});
|
|
977
927
|
//#endregion
|
|
978
928
|
//#region src/generators/suspenseInfiniteQueryGenerator.tsx
|
|
929
|
+
/**
|
|
930
|
+
* Built-in generator for `useSuspenseInfiniteQuery` hooks. Enabled when both
|
|
931
|
+
* `suspense` and `infinite` are configured. Combines suspense semantics with
|
|
932
|
+
* cursor-based pagination — handlers throw promises while loading and pull
|
|
933
|
+
* additional pages on demand.
|
|
934
|
+
*/
|
|
979
935
|
const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
980
936
|
name: "react-suspense-infinite-query",
|
|
981
|
-
renderer: _kubb_renderer_jsx.
|
|
937
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
982
938
|
operation(node, ctx) {
|
|
983
|
-
|
|
984
|
-
const {
|
|
939
|
+
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
940
|
+
const { config, driver, resolver, root } = ctx;
|
|
941
|
+
const { output, query, mutation, infinite, suspense, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options;
|
|
985
942
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
986
943
|
if (!pluginTs) return null;
|
|
987
944
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
988
945
|
const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
|
|
989
946
|
const isMutation = mutation !== false && !isQuery && (0, remeda.difference)(mutation ? mutation.methods : [], query ? query.methods : []).some((method) => node.method.toLowerCase() === method.toLowerCase());
|
|
990
947
|
const isSuspense = !!suspense;
|
|
991
|
-
const infiniteOptions = infinite && typeof infinite === "object" ? infinite :
|
|
948
|
+
const infiniteOptions = infinite && typeof infinite === "object" ? infinite : null;
|
|
992
949
|
if (!isQuery || isMutation || !isSuspense || !infiniteOptions) return null;
|
|
993
950
|
const normalizeKey = (key) => key.replace(/\?$/, "");
|
|
994
|
-
const queryParamKeys =
|
|
951
|
+
const queryParamKeys = require_components.getOperationParameters(node).query.map((p) => p.name);
|
|
995
952
|
const hasQueryParam = infiniteOptions.queryParam ? queryParamKeys.some((k) => normalizeKey(k) === infiniteOptions.queryParam) : false;
|
|
996
953
|
const hasCursorParam = !infiniteOptions.cursorParam || true;
|
|
997
954
|
if (!hasQueryParam || !hasCursorParam) return null;
|
|
998
955
|
const importPath = query ? query.importPath : "@tanstack/react-query";
|
|
999
|
-
const
|
|
1000
|
-
const
|
|
1001
|
-
const
|
|
1002
|
-
const
|
|
1003
|
-
const
|
|
1004
|
-
const queryKeyTypeName = require_components.transformName(`${capitalize(baseName)}SuspenseInfiniteQueryKey`, "type", transformers);
|
|
1005
|
-
const clientBaseName = require_components.transformName(`${baseName}SuspenseInfinite`, "function", transformers);
|
|
956
|
+
const queryName = resolver.resolveSuspenseInfiniteQueryName(node);
|
|
957
|
+
const queryOptionsName = resolver.resolveSuspenseInfiniteQueryOptionsName(node);
|
|
958
|
+
const queryKeyName = resolver.resolveSuspenseInfiniteQueryKeyName(node);
|
|
959
|
+
const queryKeyTypeName = resolver.resolveSuspenseInfiniteQueryKeyTypeName(node);
|
|
960
|
+
const clientBaseName = resolver.resolveSuspenseInfiniteClientName(node);
|
|
1006
961
|
const meta = {
|
|
1007
|
-
file: resolver.resolveFile({
|
|
1008
|
-
name: queryName,
|
|
1009
|
-
extname: ".ts",
|
|
1010
|
-
tag: node.tags[0] ?? "default",
|
|
1011
|
-
path: node.path
|
|
1012
|
-
}, {
|
|
962
|
+
file: resolver.resolveFile(require_components.operationFileEntry(node, queryName), {
|
|
1013
963
|
root,
|
|
1014
964
|
output,
|
|
1015
|
-
group
|
|
965
|
+
group: group ?? void 0
|
|
1016
966
|
}),
|
|
1017
|
-
fileTs: tsResolver.resolveFile({
|
|
1018
|
-
name: node.operationId,
|
|
1019
|
-
extname: ".ts",
|
|
1020
|
-
tag: node.tags[0] ?? "default",
|
|
1021
|
-
path: node.path
|
|
1022
|
-
}, {
|
|
967
|
+
fileTs: tsResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
1023
968
|
root,
|
|
1024
969
|
output: pluginTs.options?.output ?? output,
|
|
1025
|
-
group: pluginTs.options?.group
|
|
970
|
+
group: pluginTs.options?.group ?? void 0
|
|
1026
971
|
})
|
|
1027
972
|
};
|
|
1028
|
-
const
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
const
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
...pathParams.map((p) => tsResolver.resolvePathParamsName(node, p)),
|
|
1036
|
-
...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
|
|
1037
|
-
...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
|
|
1038
|
-
...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
|
|
1039
|
-
].filter(Boolean);
|
|
1040
|
-
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
1041
|
-
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
1042
|
-
const fileZod = zodResolver ? zodResolver.resolveFile({
|
|
1043
|
-
name: node.operationId,
|
|
1044
|
-
extname: ".ts",
|
|
1045
|
-
tag: node.tags[0] ?? "default",
|
|
1046
|
-
path: node.path
|
|
1047
|
-
}, {
|
|
973
|
+
const importedTypeNames = require_components.resolveOperationTypeNames(node, tsResolver, {
|
|
974
|
+
paramsCasing,
|
|
975
|
+
order: "body-response-first"
|
|
976
|
+
});
|
|
977
|
+
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
978
|
+
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
979
|
+
const fileZod = zodResolver ? zodResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
1048
980
|
root,
|
|
1049
981
|
output: pluginZod?.options?.output ?? output,
|
|
1050
|
-
group: pluginZod?.options?.group
|
|
1051
|
-
}) :
|
|
1052
|
-
const zodSchemaNames =
|
|
982
|
+
group: pluginZod?.options?.group ?? void 0
|
|
983
|
+
}) : null;
|
|
984
|
+
const zodSchemaNames = require_components.resolveZodSchemaNames(node, zodResolver);
|
|
1053
985
|
const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
|
|
1054
986
|
const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
|
|
1055
|
-
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) :
|
|
1056
|
-
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
|
|
1057
|
-
name: node.operationId,
|
|
1058
|
-
extname: ".ts",
|
|
1059
|
-
tag: node.tags[0] ?? "default",
|
|
1060
|
-
path: node.path
|
|
1061
|
-
}, {
|
|
987
|
+
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : null;
|
|
988
|
+
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
1062
989
|
root,
|
|
1063
990
|
output: clientPlugin?.options?.output ?? output,
|
|
1064
|
-
group: clientPlugin?.options?.group
|
|
1065
|
-
}) :
|
|
991
|
+
group: clientPlugin?.options?.group ?? void 0
|
|
992
|
+
}) : null;
|
|
1066
993
|
const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientBaseName : clientBaseName;
|
|
1067
994
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
1068
995
|
baseName: meta.file.baseName,
|
|
1069
996
|
path: meta.file.path,
|
|
1070
997
|
meta: meta.file.meta,
|
|
1071
|
-
banner: resolver.resolveBanner(
|
|
998
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
1072
999
|
output,
|
|
1073
|
-
config
|
|
1000
|
+
config,
|
|
1001
|
+
file: {
|
|
1002
|
+
path: meta.file.path,
|
|
1003
|
+
baseName: meta.file.baseName
|
|
1004
|
+
}
|
|
1074
1005
|
}),
|
|
1075
|
-
footer: resolver.resolveFooter(
|
|
1006
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
1076
1007
|
output,
|
|
1077
|
-
config
|
|
1008
|
+
config,
|
|
1009
|
+
file: {
|
|
1010
|
+
path: meta.file.path,
|
|
1011
|
+
baseName: meta.file.baseName
|
|
1012
|
+
}
|
|
1078
1013
|
}),
|
|
1079
1014
|
children: [
|
|
1080
|
-
|
|
1015
|
+
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1081
1016
|
name: zodSchemaNames,
|
|
1082
1017
|
root: meta.file.path,
|
|
1083
1018
|
path: fileZod.path
|
|
1084
1019
|
}),
|
|
1085
1020
|
clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
1086
1021
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1087
|
-
name: "
|
|
1022
|
+
name: "client",
|
|
1088
1023
|
path: clientOptions.importPath
|
|
1089
1024
|
}),
|
|
1090
1025
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
@@ -1103,9 +1038,9 @@ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1103
1038
|
})
|
|
1104
1039
|
] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
1105
1040
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1106
|
-
name: ["
|
|
1041
|
+
name: ["client"],
|
|
1107
1042
|
root: meta.file.path,
|
|
1108
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
1043
|
+
path: node_path.default.resolve(root, ".kubb/client.ts")
|
|
1109
1044
|
}),
|
|
1110
1045
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1111
1046
|
name: [
|
|
@@ -1114,13 +1049,13 @@ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1114
1049
|
"ResponseErrorConfig"
|
|
1115
1050
|
],
|
|
1116
1051
|
root: meta.file.path,
|
|
1117
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
1052
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
1118
1053
|
isTypeOnly: true
|
|
1119
1054
|
}),
|
|
1120
1055
|
clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1121
1056
|
name: ["ResponseConfig"],
|
|
1122
1057
|
root: meta.file.path,
|
|
1123
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
1058
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
1124
1059
|
isTypeOnly: true
|
|
1125
1060
|
})
|
|
1126
1061
|
] }),
|
|
@@ -1225,12 +1160,19 @@ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1225
1160
|
});
|
|
1226
1161
|
//#endregion
|
|
1227
1162
|
//#region src/generators/suspenseQueryGenerator.tsx
|
|
1163
|
+
/**
|
|
1164
|
+
* Built-in generator for `useSuspenseQuery` hooks. Enabled when
|
|
1165
|
+
* `pluginReactQuery({ suspense: {} })`. Emits one `useFooSuspenseQuery` hook
|
|
1166
|
+
* per query operation. Suspense queries throw promises while loading and
|
|
1167
|
+
* require a `<Suspense>` boundary in the React tree. TanStack Query v5+ only.
|
|
1168
|
+
*/
|
|
1228
1169
|
const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
1229
1170
|
name: "react-suspense-query",
|
|
1230
|
-
renderer: _kubb_renderer_jsx.
|
|
1171
|
+
renderer: _kubb_renderer_jsx.jsxRendererSync,
|
|
1231
1172
|
operation(node, ctx) {
|
|
1232
|
-
|
|
1233
|
-
const {
|
|
1173
|
+
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
1174
|
+
const { config, driver, resolver, root } = ctx;
|
|
1175
|
+
const { output, query, mutation, suspense, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, customOptions } = ctx.options;
|
|
1234
1176
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
1235
1177
|
if (!pluginTs) return null;
|
|
1236
1178
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
@@ -1238,95 +1180,74 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1238
1180
|
const isMutation = mutation !== false && !isQuery && (0, remeda.difference)(mutation ? mutation.methods : [], query ? query.methods : []).some((method) => node.method.toLowerCase() === method.toLowerCase());
|
|
1239
1181
|
if (!isQuery || isMutation || !!!suspense) return null;
|
|
1240
1182
|
const importPath = query ? query.importPath : "@tanstack/react-query";
|
|
1241
|
-
const
|
|
1242
|
-
const
|
|
1243
|
-
const
|
|
1244
|
-
const
|
|
1245
|
-
const
|
|
1246
|
-
const queryKeyTypeName = require_components.transformName(`${capitalize(baseName)}SuspenseQueryKey`, "type", transformers);
|
|
1247
|
-
const clientName = require_components.transformName(`${baseName}Suspense`, "function", transformers);
|
|
1183
|
+
const queryName = resolver.resolveSuspenseQueryName(node);
|
|
1184
|
+
const queryOptionsName = resolver.resolveSuspenseQueryOptionsName(node);
|
|
1185
|
+
const queryKeyName = resolver.resolveSuspenseQueryKeyName(node);
|
|
1186
|
+
const queryKeyTypeName = resolver.resolveSuspenseQueryKeyTypeName(node);
|
|
1187
|
+
const clientName = resolver.resolveSuspenseClientName(node);
|
|
1248
1188
|
const meta = {
|
|
1249
|
-
file: resolver.resolveFile({
|
|
1250
|
-
name: queryName,
|
|
1251
|
-
extname: ".ts",
|
|
1252
|
-
tag: node.tags[0] ?? "default",
|
|
1253
|
-
path: node.path
|
|
1254
|
-
}, {
|
|
1189
|
+
file: resolver.resolveFile(require_components.operationFileEntry(node, queryName), {
|
|
1255
1190
|
root,
|
|
1256
1191
|
output,
|
|
1257
|
-
group
|
|
1192
|
+
group: group ?? void 0
|
|
1258
1193
|
}),
|
|
1259
|
-
fileTs: tsResolver.resolveFile({
|
|
1260
|
-
name: node.operationId,
|
|
1261
|
-
extname: ".ts",
|
|
1262
|
-
tag: node.tags[0] ?? "default",
|
|
1263
|
-
path: node.path
|
|
1264
|
-
}, {
|
|
1194
|
+
fileTs: tsResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
1265
1195
|
root,
|
|
1266
1196
|
output: pluginTs.options?.output ?? output,
|
|
1267
|
-
group: pluginTs.options?.group
|
|
1197
|
+
group: pluginTs.options?.group ?? void 0
|
|
1268
1198
|
})
|
|
1269
1199
|
};
|
|
1270
|
-
const
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
|
|
1279
|
-
...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
|
|
1280
|
-
...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
|
|
1281
|
-
].filter((name) => !!name && name !== queryKeyTypeName);
|
|
1282
|
-
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
1283
|
-
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : void 0;
|
|
1284
|
-
const fileZod = zodResolver ? zodResolver.resolveFile({
|
|
1285
|
-
name: node.operationId,
|
|
1286
|
-
extname: ".ts",
|
|
1287
|
-
tag: node.tags[0] ?? "default",
|
|
1288
|
-
path: node.path
|
|
1289
|
-
}, {
|
|
1200
|
+
const importedTypeNames = require_components.resolveOperationTypeNames(node, tsResolver, {
|
|
1201
|
+
paramsCasing,
|
|
1202
|
+
exclude: [queryKeyTypeName],
|
|
1203
|
+
order: "body-response-first"
|
|
1204
|
+
});
|
|
1205
|
+
const pluginZod = parser === "zod" ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
1206
|
+
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
1207
|
+
const fileZod = zodResolver ? zodResolver.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
1290
1208
|
root,
|
|
1291
1209
|
output: pluginZod?.options?.output ?? output,
|
|
1292
|
-
group: pluginZod?.options?.group
|
|
1293
|
-
}) :
|
|
1294
|
-
const zodSchemaNames =
|
|
1210
|
+
group: pluginZod?.options?.group ?? void 0
|
|
1211
|
+
}) : null;
|
|
1212
|
+
const zodSchemaNames = require_components.resolveZodSchemaNames(node, zodResolver);
|
|
1295
1213
|
const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
|
|
1296
1214
|
const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
|
|
1297
|
-
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) :
|
|
1298
|
-
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
|
|
1299
|
-
name: node.operationId,
|
|
1300
|
-
extname: ".ts",
|
|
1301
|
-
tag: node.tags[0] ?? "default",
|
|
1302
|
-
path: node.path
|
|
1303
|
-
}, {
|
|
1215
|
+
const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : null;
|
|
1216
|
+
const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(require_components.operationFileEntry(node, node.operationId), {
|
|
1304
1217
|
root,
|
|
1305
1218
|
output: clientPlugin?.options?.output ?? output,
|
|
1306
|
-
group: clientPlugin?.options?.group
|
|
1307
|
-
}) :
|
|
1219
|
+
group: clientPlugin?.options?.group ?? void 0
|
|
1220
|
+
}) : null;
|
|
1308
1221
|
const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientName : clientName;
|
|
1309
1222
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
1310
1223
|
baseName: meta.file.baseName,
|
|
1311
1224
|
path: meta.file.path,
|
|
1312
1225
|
meta: meta.file.meta,
|
|
1313
|
-
banner: resolver.resolveBanner(
|
|
1226
|
+
banner: resolver.resolveBanner(ctx.meta, {
|
|
1314
1227
|
output,
|
|
1315
|
-
config
|
|
1228
|
+
config,
|
|
1229
|
+
file: {
|
|
1230
|
+
path: meta.file.path,
|
|
1231
|
+
baseName: meta.file.baseName
|
|
1232
|
+
}
|
|
1316
1233
|
}),
|
|
1317
|
-
footer: resolver.resolveFooter(
|
|
1234
|
+
footer: resolver.resolveFooter(ctx.meta, {
|
|
1318
1235
|
output,
|
|
1319
|
-
config
|
|
1236
|
+
config,
|
|
1237
|
+
file: {
|
|
1238
|
+
path: meta.file.path,
|
|
1239
|
+
baseName: meta.file.baseName
|
|
1240
|
+
}
|
|
1320
1241
|
}),
|
|
1321
1242
|
children: [
|
|
1322
|
-
|
|
1243
|
+
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1323
1244
|
name: zodSchemaNames,
|
|
1324
1245
|
root: meta.file.path,
|
|
1325
1246
|
path: fileZod.path
|
|
1326
1247
|
}),
|
|
1327
1248
|
clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
1328
1249
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1329
|
-
name: "
|
|
1250
|
+
name: "client",
|
|
1330
1251
|
path: clientOptions.importPath
|
|
1331
1252
|
}),
|
|
1332
1253
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
@@ -1345,9 +1266,9 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1345
1266
|
})
|
|
1346
1267
|
] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
1347
1268
|
!shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1348
|
-
name: ["
|
|
1269
|
+
name: ["client"],
|
|
1349
1270
|
root: meta.file.path,
|
|
1350
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
1271
|
+
path: node_path.default.resolve(root, ".kubb/client.ts")
|
|
1351
1272
|
}),
|
|
1352
1273
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1353
1274
|
name: [
|
|
@@ -1356,13 +1277,13 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1356
1277
|
"ResponseErrorConfig"
|
|
1357
1278
|
],
|
|
1358
1279
|
root: meta.file.path,
|
|
1359
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
1280
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
1360
1281
|
isTypeOnly: true
|
|
1361
1282
|
}),
|
|
1362
1283
|
clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
1363
1284
|
name: ["ResponseConfig"],
|
|
1364
1285
|
root: meta.file.path,
|
|
1365
|
-
path: node_path.default.resolve(root, ".kubb/
|
|
1286
|
+
path: node_path.default.resolve(root, ".kubb/client.ts"),
|
|
1366
1287
|
isTypeOnly: true
|
|
1367
1288
|
})
|
|
1368
1289
|
] }),
|
|
@@ -1420,7 +1341,8 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1420
1341
|
paramsCasing,
|
|
1421
1342
|
paramsType,
|
|
1422
1343
|
pathParamsType,
|
|
1423
|
-
dataReturnType: clientOptions.dataReturnType || "data"
|
|
1344
|
+
dataReturnType: clientOptions.dataReturnType || "data",
|
|
1345
|
+
suspense: true
|
|
1424
1346
|
}),
|
|
1425
1347
|
suspense && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
|
|
1426
1348
|
/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
|
|
@@ -1499,4 +1421,4 @@ Object.defineProperty(exports, "suspenseQueryGenerator", {
|
|
|
1499
1421
|
}
|
|
1500
1422
|
});
|
|
1501
1423
|
|
|
1502
|
-
//# sourceMappingURL=generators
|
|
1424
|
+
//# sourceMappingURL=generators--AcF4Y4n.cjs.map
|