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

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 (53) hide show
  1. package/LICENSE +17 -10
  2. package/README.md +1 -3
  3. package/dist/components-DTGLu4UV.js +1451 -0
  4. package/dist/components-DTGLu4UV.js.map +1 -0
  5. package/dist/components-dAKJEn9b.cjs +1571 -0
  6. package/dist/components-dAKJEn9b.cjs.map +1 -0
  7. package/dist/components.cjs +1 -1
  8. package/dist/components.d.ts +105 -161
  9. package/dist/components.js +1 -1
  10. package/dist/generators-CWEQsdO9.cjs +1502 -0
  11. package/dist/generators-CWEQsdO9.cjs.map +1 -0
  12. package/dist/generators-C_fbcjpG.js +1460 -0
  13. package/dist/generators-C_fbcjpG.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 +114 -126
  18. package/dist/index.cjs.map +1 -1
  19. package/dist/index.d.ts +4 -4
  20. package/dist/index.js +110 -126
  21. package/dist/index.js.map +1 -1
  22. package/dist/{types-D5S7Ny9r.d.ts → types-DfaFRSBf.d.ts} +100 -86
  23. package/extension.yaml +938 -0
  24. package/package.json +59 -62
  25. package/src/components/InfiniteQuery.tsx +75 -139
  26. package/src/components/InfiniteQueryOptions.tsx +62 -164
  27. package/src/components/Mutation.tsx +58 -113
  28. package/src/components/MutationOptions.tsx +61 -80
  29. package/src/components/Query.tsx +67 -140
  30. package/src/components/QueryOptions.tsx +75 -135
  31. package/src/components/SuspenseInfiniteQuery.tsx +75 -139
  32. package/src/components/SuspenseInfiniteQueryOptions.tsx +62 -164
  33. package/src/components/SuspenseQuery.tsx +67 -150
  34. package/src/generators/customHookOptionsFileGenerator.tsx +33 -45
  35. package/src/generators/hookOptionsGenerator.tsx +115 -175
  36. package/src/generators/infiniteQueryGenerator.tsx +183 -176
  37. package/src/generators/mutationGenerator.tsx +127 -138
  38. package/src/generators/queryGenerator.tsx +141 -141
  39. package/src/generators/suspenseInfiniteQueryGenerator.tsx +175 -155
  40. package/src/generators/suspenseQueryGenerator.tsx +149 -148
  41. package/src/index.ts +1 -1
  42. package/src/plugin.ts +133 -183
  43. package/src/resolvers/resolverReactQuery.ts +22 -0
  44. package/src/types.ts +67 -45
  45. package/src/utils.ts +40 -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
@@ -0,0 +1,1502 @@
1
+ const require_components = require("./components-dAKJEn9b.cjs");
2
+ let node_path = require("node:path");
3
+ node_path = require_components.__toESM(node_path);
4
+ let _kubb_core = require("@kubb/core");
5
+ let _kubb_plugin_client = require("@kubb/plugin-client");
6
+ let _kubb_plugin_ts = require("@kubb/plugin-ts");
7
+ let _kubb_plugin_zod = require("@kubb/plugin-zod");
8
+ let _kubb_renderer_jsx = require("@kubb/renderer-jsx");
9
+ let _kubb_renderer_jsx_jsx_runtime = require("@kubb/renderer-jsx/jsx-runtime");
10
+ let node_fs = require("node:fs");
11
+ node_fs = require_components.__toESM(node_fs);
12
+ let remeda = require("remeda");
13
+ //#region src/generators/customHookOptionsFileGenerator.tsx
14
+ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
15
+ name: "react-query-custom-hook-options-file",
16
+ renderer: _kubb_renderer_jsx.jsxRenderer,
17
+ operations(nodes, ctx) {
18
+ const { resolver, config, root } = ctx;
19
+ const { output, customOptions, query, group, transformers } = ctx.options;
20
+ if (!customOptions) return null;
21
+ const override = output.override ?? config.output.override ?? false;
22
+ const { importPath, name } = customOptions;
23
+ const reactQueryImportPath = query ? query.importPath : "@tanstack/react-query";
24
+ const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
25
+ let hookFilePath;
26
+ const firstNode = nodes[0];
27
+ if (firstNode) {
28
+ const hookName = require_components.transformName(`use${capitalize(resolver.resolveName(firstNode.operationId))}`, "function", transformers);
29
+ hookFilePath = resolver.resolveFile({
30
+ name: hookName,
31
+ extname: ".ts",
32
+ tag: firstNode.tags[0] ?? "default",
33
+ path: firstNode.path
34
+ }, {
35
+ root,
36
+ output,
37
+ group
38
+ }).path;
39
+ } else hookFilePath = node_path.default.resolve(root, "index.ts");
40
+ const ensureExtension = (filePath, extname) => {
41
+ if (node_path.default.extname(filePath) === "") return filePath + extname;
42
+ return filePath;
43
+ };
44
+ const basePath = node_path.default.dirname(hookFilePath);
45
+ const actualFilePath = ensureExtension(importPath, ".ts");
46
+ const file = {
47
+ baseName: node_path.default.basename(actualFilePath),
48
+ name: node_path.default.basename(actualFilePath, node_path.default.extname(actualFilePath)),
49
+ path: node_path.default.resolve(basePath, actualFilePath)
50
+ };
51
+ if (node_fs.default.existsSync(file.path) && !override) return null;
52
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
53
+ baseName: file.baseName,
54
+ path: file.path,
55
+ children: [
56
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
57
+ name: ["QueryClient"],
58
+ path: reactQueryImportPath,
59
+ isTypeOnly: true
60
+ }),
61
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
62
+ name: ["useQueryClient"],
63
+ path: reactQueryImportPath
64
+ }),
65
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
66
+ name: ["HookOptions"],
67
+ root: file.path,
68
+ path: node_path.default.resolve(root, "./index.ts")
69
+ }),
70
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File.Source, {
71
+ name: file.name,
72
+ isExportable: true,
73
+ isIndexable: true,
74
+ children: [/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.Function, {
75
+ name: "getCustomHookOptions",
76
+ params: "{ queryClient }: { queryClient: QueryClient }",
77
+ returnType: "Partial<HookOptions>",
78
+ children: `return {
79
+ // TODO: Define custom hook options here
80
+ // Example:
81
+ // useUpdatePetHook: {
82
+ // onSuccess: () => {
83
+ // void queryClient.invalidateQueries({ queryKey: ['pet'] })
84
+ // }
85
+ // }
86
+ }`
87
+ }), /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.Function, {
88
+ name,
89
+ generics: "T extends keyof HookOptions",
90
+ params: "{ hookName, operationId }: { hookName: T, operationId: string }",
91
+ returnType: "HookOptions[T]",
92
+ export: true,
93
+ children: `const queryClient = useQueryClient()
94
+ const customOptions = getCustomHookOptions({ queryClient })
95
+ return customOptions[hookName] ?? {}`
96
+ })]
97
+ })
98
+ ]
99
+ });
100
+ }
101
+ });
102
+ //#endregion
103
+ //#region src/generators/hookOptionsGenerator.tsx
104
+ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
105
+ name: "react-query-hook-options",
106
+ renderer: _kubb_renderer_jsx.jsxRenderer,
107
+ operations(nodes, ctx) {
108
+ const { resolver, config, root, adapter } = ctx;
109
+ const { output, customOptions, query, mutation, suspense, infinite, group, transformers, override } = ctx.options;
110
+ if (!customOptions) return null;
111
+ const resolvedFile = resolver.resolveFile({
112
+ name: "HookOptions",
113
+ extname: ".ts"
114
+ }, {
115
+ root,
116
+ output,
117
+ group
118
+ });
119
+ const hookOptionsFile = {
120
+ ...resolvedFile,
121
+ baseName: "HookOptions.ts",
122
+ path: resolvedFile.path.replace(/hookOptions\.ts$/, "HookOptions.ts")
123
+ };
124
+ const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
125
+ const imports = [];
126
+ const hookOptions = {};
127
+ for (const node of nodes) {
128
+ const baseName = resolver.resolveName(node.operationId);
129
+ const opOverrides = require_components.resolveOperationOverrides(node, override);
130
+ const nodeQuery = "query" in opOverrides ? opOverrides.query : query;
131
+ const nodeMutation = "mutation" in opOverrides ? opOverrides.mutation : mutation;
132
+ const nodeInfinite = "infinite" in opOverrides ? opOverrides.infinite : infinite;
133
+ const nodeInfiniteOptions = nodeInfinite && typeof nodeInfinite === "object" ? nodeInfinite : void 0;
134
+ 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
+ const isMutationOp = nodeMutation !== false && !isQueryOp && (0, remeda.difference)(nodeMutation ? nodeMutation.methods : [], nodeQuery ? nodeQuery.methods : []).some((m) => node.method.toLowerCase() === m.toLowerCase());
136
+ const isSuspenseOp = !!suspense;
137
+ const isInfiniteOp = !!nodeInfiniteOptions;
138
+ if (isQueryOp) {
139
+ const queryOptionsName = require_components.transformName(`${baseName}QueryOptions`, "function", transformers);
140
+ const queryHookName = require_components.transformName(`use${capitalize(baseName)}`, "function", transformers);
141
+ const queryHookFile = resolver.resolveFile({
142
+ name: queryHookName,
143
+ extname: ".ts",
144
+ tag: node.tags[0] ?? "default",
145
+ path: node.path
146
+ }, {
147
+ root,
148
+ output,
149
+ group
150
+ });
151
+ imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
152
+ name: [queryOptionsName],
153
+ root: hookOptionsFile.path,
154
+ path: queryHookFile.path
155
+ }));
156
+ hookOptions[queryHookName] = `Partial<ReturnType<typeof ${queryOptionsName}>>`;
157
+ if (isSuspenseOp) {
158
+ const suspenseOptionsName = require_components.transformName(`${baseName}SuspenseQueryOptions`, "function", transformers);
159
+ const suspenseHookName = require_components.transformName(`use${capitalize(baseName)}Suspense`, "function", transformers);
160
+ const suspenseHookFile = resolver.resolveFile({
161
+ name: suspenseHookName,
162
+ extname: ".ts",
163
+ tag: node.tags[0] ?? "default",
164
+ path: node.path
165
+ }, {
166
+ root,
167
+ output,
168
+ group
169
+ });
170
+ imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
171
+ name: [suspenseOptionsName],
172
+ root: hookOptionsFile.path,
173
+ path: suspenseHookFile.path
174
+ }));
175
+ hookOptions[suspenseHookName] = `Partial<ReturnType<typeof ${suspenseOptionsName}>>`;
176
+ }
177
+ if (isInfiniteOp) {
178
+ const normalizeKey = (key) => key.replace(/\?$/, "");
179
+ const queryParamKeys = node.parameters.filter((p) => p.in === "query").map((p) => p.name);
180
+ if (nodeInfiniteOptions.queryParam ? queryParamKeys.some((k) => normalizeKey(k) === nodeInfiniteOptions.queryParam) : false) {
181
+ const infiniteOptionsName = require_components.transformName(`${baseName}InfiniteQueryOptions`, "function", transformers);
182
+ const infiniteHookName = require_components.transformName(`use${capitalize(baseName)}Infinite`, "function", transformers);
183
+ const infiniteHookFile = resolver.resolveFile({
184
+ name: infiniteHookName,
185
+ extname: ".ts",
186
+ tag: node.tags[0] ?? "default",
187
+ path: node.path
188
+ }, {
189
+ root,
190
+ output,
191
+ group
192
+ });
193
+ imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
194
+ name: [infiniteOptionsName],
195
+ root: hookOptionsFile.path,
196
+ path: infiniteHookFile.path
197
+ }));
198
+ hookOptions[infiniteHookName] = `Partial<ReturnType<typeof ${infiniteOptionsName}>>`;
199
+ if (isSuspenseOp) {
200
+ const suspenseInfiniteOptionsName = require_components.transformName(`${baseName}SuspenseInfiniteQueryOptions`, "function", transformers);
201
+ const suspenseInfiniteHookName = require_components.transformName(`use${capitalize(baseName)}SuspenseInfinite`, "function", transformers);
202
+ const suspenseInfiniteHookFile = resolver.resolveFile({
203
+ name: suspenseInfiniteHookName,
204
+ extname: ".ts",
205
+ tag: node.tags[0] ?? "default",
206
+ path: node.path
207
+ }, {
208
+ root,
209
+ output,
210
+ group
211
+ });
212
+ imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
213
+ name: [suspenseInfiniteOptionsName],
214
+ root: hookOptionsFile.path,
215
+ path: suspenseInfiniteHookFile.path
216
+ }));
217
+ hookOptions[suspenseInfiniteHookName] = `Partial<ReturnType<typeof ${suspenseInfiniteOptionsName}>>`;
218
+ }
219
+ }
220
+ }
221
+ }
222
+ if (isMutationOp) {
223
+ const mutationOptionsName = require_components.transformName(`${baseName}MutationOptions`, "function", transformers);
224
+ const mutationHookName = require_components.transformName(`use${capitalize(baseName)}`, "function", transformers);
225
+ const mutationHookFile = resolver.resolveFile({
226
+ name: mutationHookName,
227
+ extname: ".ts",
228
+ tag: node.tags[0] ?? "default",
229
+ path: node.path
230
+ }, {
231
+ root,
232
+ output,
233
+ group
234
+ });
235
+ imports.push(/* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
236
+ name: [mutationOptionsName],
237
+ root: hookOptionsFile.path,
238
+ path: mutationHookFile.path
239
+ }));
240
+ hookOptions[mutationHookName] = `Partial<ReturnType<typeof ${mutationOptionsName}>>`;
241
+ }
242
+ }
243
+ const name = "HookOptions";
244
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
245
+ baseName: hookOptionsFile.baseName,
246
+ path: hookOptionsFile.path,
247
+ meta: hookOptionsFile.meta,
248
+ banner: resolver.resolveBanner(adapter.inputNode, {
249
+ output,
250
+ config
251
+ }),
252
+ footer: resolver.resolveFooter(adapter.inputNode, {
253
+ output,
254
+ config
255
+ }),
256
+ children: [imports, /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
257
+ name,
258
+ isExportable: true,
259
+ isIndexable: true,
260
+ isTypeOnly: true,
261
+ children: /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.Type, {
262
+ export: true,
263
+ name,
264
+ children: `{ ${Object.keys(hookOptions).map((key) => `${JSON.stringify(key)}: ${hookOptions[key]}`).join(", ")} }`
265
+ })
266
+ })]
267
+ });
268
+ }
269
+ });
270
+ //#endregion
271
+ //#region src/generators/infiniteQueryGenerator.tsx
272
+ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
273
+ name: "react-infinite-query",
274
+ renderer: _kubb_renderer_jsx.jsxRenderer,
275
+ operation(node, ctx) {
276
+ const { adapter, config, driver, resolver, root } = ctx;
277
+ const { output, query, mutation, infinite, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, transformers, customOptions } = ctx.options;
278
+ const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
279
+ if (!pluginTs) return null;
280
+ const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
281
+ const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
282
+ 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 : void 0;
284
+ if (!isQuery || isMutation || !infiniteOptions) return null;
285
+ const normalizeKey = (key) => key.replace(/\?$/, "");
286
+ const queryParamKeys = node.parameters.filter((p) => p.in === "query").map((p) => p.name);
287
+ const hasQueryParam = infiniteOptions.queryParam ? queryParamKeys.some((k) => normalizeKey(k) === infiniteOptions.queryParam) : false;
288
+ const hasCursorParam = !infiniteOptions.cursorParam || true;
289
+ if (!hasQueryParam || !hasCursorParam) return null;
290
+ const importPath = query ? query.importPath : "@tanstack/react-query";
291
+ const baseName = resolver.resolveName(node.operationId);
292
+ const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
293
+ const queryName = require_components.transformName(`use${capitalize(baseName)}Infinite`, "function", transformers);
294
+ const queryOptionsName = require_components.transformName(`${baseName}InfiniteQueryOptions`, "function", transformers);
295
+ const queryKeyName = require_components.transformName(`${baseName}InfiniteQueryKey`, "const", transformers);
296
+ const queryKeyTypeName = require_components.transformName(`${capitalize(baseName)}InfiniteQueryKey`, "type", transformers);
297
+ const clientBaseName = require_components.transformName(`${baseName}Infinite`, "function", transformers);
298
+ const meta = {
299
+ file: resolver.resolveFile({
300
+ name: queryName,
301
+ extname: ".ts",
302
+ tag: node.tags[0] ?? "default",
303
+ path: node.path
304
+ }, {
305
+ root,
306
+ output,
307
+ group
308
+ }),
309
+ fileTs: tsResolver.resolveFile({
310
+ name: node.operationId,
311
+ extname: ".ts",
312
+ tag: node.tags[0] ?? "default",
313
+ path: node.path
314
+ }, {
315
+ root,
316
+ output: pluginTs.options?.output ?? output,
317
+ group: pluginTs.options?.group
318
+ })
319
+ };
320
+ const casedParams = _kubb_core.ast.caseParams(node.parameters, paramsCasing);
321
+ const pathParams = casedParams.filter((p) => p.in === "path");
322
+ const queryParams = casedParams.filter((p) => p.in === "query");
323
+ const headerParams = casedParams.filter((p) => p.in === "header");
324
+ const importedTypeNames = [
325
+ node.requestBody?.content?.[0]?.schema ? tsResolver.resolveDataName(node) : void 0,
326
+ tsResolver.resolveResponseName(node),
327
+ ...pathParams.map((p) => tsResolver.resolvePathParamsName(node, p)),
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
+ }, {
340
+ root,
341
+ output: pluginZod?.options?.output ?? output,
342
+ group: pluginZod?.options?.group
343
+ }) : void 0;
344
+ const zodSchemaNames = zodResolver && parser === "zod" ? [zodResolver.resolveResponseName?.(node), node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : void 0].filter(Boolean) : [];
345
+ const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
346
+ const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
347
+ const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : void 0;
348
+ const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
349
+ name: node.operationId,
350
+ extname: ".ts",
351
+ tag: node.tags[0] ?? "default",
352
+ path: node.path
353
+ }, {
354
+ root,
355
+ output: clientPlugin?.options?.output ?? output,
356
+ group: clientPlugin?.options?.group
357
+ }) : void 0;
358
+ const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientBaseName : clientBaseName;
359
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
360
+ baseName: meta.file.baseName,
361
+ path: meta.file.path,
362
+ meta: meta.file.meta,
363
+ banner: resolver.resolveBanner(adapter.inputNode, {
364
+ output,
365
+ config
366
+ }),
367
+ footer: resolver.resolveFooter(adapter.inputNode, {
368
+ output,
369
+ config
370
+ }),
371
+ children: [
372
+ parser === "zod" && fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
373
+ name: zodSchemaNames,
374
+ root: meta.file.path,
375
+ path: fileZod.path
376
+ }),
377
+ clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
378
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
379
+ name: "fetch",
380
+ path: clientOptions.importPath
381
+ }),
382
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
383
+ name: [
384
+ "Client",
385
+ "RequestConfig",
386
+ "ResponseErrorConfig"
387
+ ],
388
+ path: clientOptions.importPath,
389
+ isTypeOnly: true
390
+ }),
391
+ clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
392
+ name: ["ResponseConfig"],
393
+ path: clientOptions.importPath,
394
+ isTypeOnly: true
395
+ })
396
+ ] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
397
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
398
+ name: ["fetch"],
399
+ root: meta.file.path,
400
+ path: node_path.default.resolve(root, ".kubb/fetch.ts")
401
+ }),
402
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
403
+ name: [
404
+ "Client",
405
+ "RequestConfig",
406
+ "ResponseErrorConfig"
407
+ ],
408
+ root: meta.file.path,
409
+ path: node_path.default.resolve(root, ".kubb/fetch.ts"),
410
+ isTypeOnly: true
411
+ }),
412
+ clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
413
+ name: ["ResponseConfig"],
414
+ root: meta.file.path,
415
+ path: node_path.default.resolve(root, ".kubb/fetch.ts"),
416
+ isTypeOnly: true
417
+ })
418
+ ] }),
419
+ shouldUseClientPlugin && clientFile && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
420
+ name: [resolvedClientName],
421
+ root: meta.file.path,
422
+ path: clientFile.path
423
+ }),
424
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
425
+ name: ["buildFormData"],
426
+ root: meta.file.path,
427
+ path: node_path.default.resolve(root, ".kubb/config.ts")
428
+ }),
429
+ customOptions && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
430
+ name: [customOptions.name],
431
+ path: customOptions.importPath
432
+ }),
433
+ meta.fileTs && importedTypeNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
434
+ name: Array.from(new Set(importedTypeNames)),
435
+ root: meta.file.path,
436
+ path: meta.fileTs.path,
437
+ isTypeOnly: true
438
+ }),
439
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.QueryKey, {
440
+ name: queryKeyName,
441
+ typeName: queryKeyTypeName,
442
+ node,
443
+ tsResolver,
444
+ pathParamsType,
445
+ paramsCasing,
446
+ transformer: ctx.options.queryKey
447
+ }),
448
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_plugin_client.Client, {
449
+ name: resolvedClientName,
450
+ baseURL: clientOptions.baseURL,
451
+ dataReturnType: clientOptions.dataReturnType || "data",
452
+ paramsCasing: clientOptions.paramsCasing || paramsCasing,
453
+ paramsType,
454
+ pathParamsType,
455
+ parser,
456
+ node,
457
+ tsResolver,
458
+ zodResolver
459
+ }),
460
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
461
+ name: ["InfiniteData"],
462
+ isTypeOnly: true,
463
+ path: importPath
464
+ }),
465
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
466
+ name: ["infiniteQueryOptions"],
467
+ path: importPath
468
+ }),
469
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.InfiniteQueryOptions, {
470
+ name: queryOptionsName,
471
+ clientName: resolvedClientName,
472
+ queryKeyName,
473
+ node,
474
+ tsResolver,
475
+ paramsCasing,
476
+ paramsType,
477
+ pathParamsType,
478
+ dataReturnType: clientOptions.dataReturnType || "data",
479
+ cursorParam: infiniteOptions.cursorParam,
480
+ nextParam: infiniteOptions.nextParam,
481
+ previousParam: infiniteOptions.previousParam,
482
+ initialPageParam: infiniteOptions.initialPageParam,
483
+ queryParam: infiniteOptions.queryParam
484
+ }),
485
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
486
+ name: ["useInfiniteQuery"],
487
+ path: importPath
488
+ }),
489
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
490
+ name: [
491
+ "QueryKey",
492
+ "QueryClient",
493
+ "InfiniteQueryObserverOptions",
494
+ "UseInfiniteQueryResult"
495
+ ],
496
+ path: importPath,
497
+ isTypeOnly: true
498
+ }),
499
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.InfiniteQuery, {
500
+ name: queryName,
501
+ queryOptionsName,
502
+ queryKeyName,
503
+ queryKeyTypeName,
504
+ node,
505
+ tsResolver,
506
+ paramsCasing,
507
+ paramsType,
508
+ pathParamsType,
509
+ dataReturnType: clientOptions.dataReturnType || "data",
510
+ initialPageParam: infiniteOptions.initialPageParam,
511
+ queryParam: infiniteOptions.queryParam,
512
+ customOptions
513
+ })
514
+ ]
515
+ });
516
+ }
517
+ });
518
+ //#endregion
519
+ //#region src/generators/mutationGenerator.tsx
520
+ const mutationGenerator = (0, _kubb_core.defineGenerator)({
521
+ name: "react-query-mutation",
522
+ renderer: _kubb_renderer_jsx.jsxRenderer,
523
+ operation(node, ctx) {
524
+ const { adapter, config, driver, resolver, root } = ctx;
525
+ const { output, query, mutation, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, transformers, customOptions } = ctx.options;
526
+ const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
527
+ if (!pluginTs) return null;
528
+ const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
529
+ const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
530
+ if (!(mutation !== false && !isQuery && (0, remeda.difference)(mutation ? mutation.methods : [], query ? query.methods : []).some((method) => node.method.toLowerCase() === method.toLowerCase()))) return null;
531
+ const importPath = mutation ? mutation.importPath : "@tanstack/react-query";
532
+ const baseName = resolver.resolveName(node.operationId);
533
+ const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
534
+ const mutationHookName = require_components.transformName(`use${capitalize(baseName)}`, "function", transformers);
535
+ const mutationTypeName = require_components.transformName(`${capitalize(baseName)}`, "type", transformers);
536
+ const mutationOptionsName = require_components.transformName(`${baseName}MutationOptions`, "function", transformers);
537
+ const mutationKeyName = require_components.transformName(`${baseName}MutationKey`, "const", transformers);
538
+ const clientName = require_components.transformName(baseName, "function", transformers);
539
+ const meta = {
540
+ file: resolver.resolveFile({
541
+ name: mutationHookName,
542
+ extname: ".ts",
543
+ tag: node.tags[0] ?? "default",
544
+ path: node.path
545
+ }, {
546
+ root,
547
+ output,
548
+ group
549
+ }),
550
+ fileTs: tsResolver.resolveFile({
551
+ name: node.operationId,
552
+ extname: ".ts",
553
+ tag: node.tags[0] ?? "default",
554
+ path: node.path
555
+ }, {
556
+ root,
557
+ output: pluginTs.options?.output ?? output,
558
+ group: pluginTs.options?.group
559
+ })
560
+ };
561
+ const casedParams = _kubb_core.ast.caseParams(node.parameters, paramsCasing);
562
+ const pathParams = casedParams.filter((p) => p.in === "path");
563
+ const queryParams = casedParams.filter((p) => p.in === "query");
564
+ const headerParams = casedParams.filter((p) => p.in === "header");
565
+ const importedTypeNames = [
566
+ node.requestBody?.content?.[0]?.schema ? tsResolver.resolveDataName(node) : void 0,
567
+ tsResolver.resolveResponseName(node),
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
+ }, {
581
+ root,
582
+ output: pluginZod?.options?.output ?? output,
583
+ group: pluginZod?.options?.group
584
+ }) : void 0;
585
+ const zodSchemaNames = zodResolver && parser === "zod" ? [zodResolver.resolveResponseName?.(node), node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : void 0].filter(Boolean) : [];
586
+ const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
587
+ const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
588
+ const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : void 0;
589
+ const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
590
+ name: node.operationId,
591
+ extname: ".ts",
592
+ tag: node.tags[0] ?? "default",
593
+ path: node.path
594
+ }, {
595
+ root,
596
+ output: clientPlugin?.options?.output ?? output,
597
+ group: clientPlugin?.options?.group
598
+ }) : void 0;
599
+ const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientName : clientName;
600
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
601
+ baseName: meta.file.baseName,
602
+ path: meta.file.path,
603
+ meta: meta.file.meta,
604
+ banner: resolver.resolveBanner(adapter.inputNode, {
605
+ output,
606
+ config
607
+ }),
608
+ footer: resolver.resolveFooter(adapter.inputNode, {
609
+ output,
610
+ config
611
+ }),
612
+ children: [
613
+ parser === "zod" && fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
614
+ name: zodSchemaNames,
615
+ root: meta.file.path,
616
+ path: fileZod.path
617
+ }),
618
+ clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
619
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
620
+ name: "fetch",
621
+ path: clientOptions.importPath
622
+ }),
623
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
624
+ name: [
625
+ "Client",
626
+ "RequestConfig",
627
+ "ResponseErrorConfig"
628
+ ],
629
+ path: clientOptions.importPath,
630
+ isTypeOnly: true
631
+ }),
632
+ clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
633
+ name: ["ResponseConfig"],
634
+ path: clientOptions.importPath,
635
+ isTypeOnly: true
636
+ })
637
+ ] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
638
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
639
+ name: ["fetch"],
640
+ root: meta.file.path,
641
+ path: node_path.default.resolve(root, ".kubb/fetch.ts")
642
+ }),
643
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
644
+ name: [
645
+ "Client",
646
+ "RequestConfig",
647
+ "ResponseErrorConfig"
648
+ ],
649
+ root: meta.file.path,
650
+ path: node_path.default.resolve(root, ".kubb/fetch.ts"),
651
+ isTypeOnly: true
652
+ }),
653
+ clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
654
+ name: ["ResponseConfig"],
655
+ root: meta.file.path,
656
+ path: node_path.default.resolve(root, ".kubb/fetch.ts"),
657
+ isTypeOnly: true
658
+ })
659
+ ] }),
660
+ shouldUseClientPlugin && clientFile && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
661
+ name: [resolvedClientName],
662
+ root: meta.file.path,
663
+ path: clientFile.path
664
+ }),
665
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
666
+ name: ["buildFormData"],
667
+ root: meta.file.path,
668
+ path: node_path.default.resolve(root, ".kubb/config.ts")
669
+ }),
670
+ customOptions && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
671
+ name: [customOptions.name],
672
+ path: customOptions.importPath
673
+ }),
674
+ meta.fileTs && importedTypeNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
675
+ name: Array.from(new Set(importedTypeNames)),
676
+ root: meta.file.path,
677
+ path: meta.fileTs.path,
678
+ isTypeOnly: true
679
+ }),
680
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.MutationKey, {
681
+ name: mutationKeyName,
682
+ node,
683
+ pathParamsType,
684
+ paramsCasing,
685
+ transformer: ctx.options.mutationKey
686
+ }),
687
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_plugin_client.Client, {
688
+ name: resolvedClientName,
689
+ baseURL: clientOptions.baseURL,
690
+ dataReturnType: clientOptions.dataReturnType || "data",
691
+ paramsCasing: clientOptions.paramsCasing || paramsCasing,
692
+ paramsType,
693
+ pathParamsType,
694
+ parser,
695
+ node,
696
+ tsResolver,
697
+ zodResolver
698
+ }),
699
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
700
+ name: ["mutationOptions"],
701
+ path: importPath
702
+ }),
703
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.MutationOptions, {
704
+ name: mutationOptionsName,
705
+ clientName: resolvedClientName,
706
+ mutationKeyName,
707
+ node,
708
+ tsResolver,
709
+ paramsCasing,
710
+ paramsType,
711
+ pathParamsType,
712
+ dataReturnType: clientOptions.dataReturnType || "data"
713
+ }),
714
+ mutation && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
715
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
716
+ name: ["useMutation"],
717
+ path: importPath
718
+ }),
719
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
720
+ name: [
721
+ "UseMutationOptions",
722
+ "UseMutationResult",
723
+ "QueryClient"
724
+ ],
725
+ path: importPath,
726
+ isTypeOnly: true
727
+ }),
728
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.Mutation, {
729
+ name: mutationHookName,
730
+ typeName: mutationTypeName,
731
+ mutationOptionsName,
732
+ mutationKeyName,
733
+ node,
734
+ tsResolver,
735
+ dataReturnType: clientOptions.dataReturnType || "data",
736
+ paramsCasing,
737
+ pathParamsType,
738
+ customOptions
739
+ })
740
+ ] })
741
+ ]
742
+ });
743
+ }
744
+ });
745
+ //#endregion
746
+ //#region src/generators/queryGenerator.tsx
747
+ const queryGenerator = (0, _kubb_core.defineGenerator)({
748
+ name: "react-query",
749
+ renderer: _kubb_renderer_jsx.jsxRenderer,
750
+ operation(node, ctx) {
751
+ const { adapter, config, driver, resolver, root } = ctx;
752
+ const { output, query, mutation, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, transformers, customOptions } = ctx.options;
753
+ const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
754
+ if (!pluginTs) return null;
755
+ const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
756
+ const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
757
+ const isMutation = mutation !== false && !isQuery && (0, remeda.difference)(mutation ? mutation.methods : [], query ? query.methods : []).some((method) => node.method.toLowerCase() === method.toLowerCase());
758
+ if (!isQuery || isMutation) return null;
759
+ const importPath = query ? query.importPath : "@tanstack/react-query";
760
+ const baseName = resolver.resolveName(node.operationId);
761
+ const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
762
+ const queryName = require_components.transformName(`use${capitalize(baseName)}`, "function", transformers);
763
+ const queryOptionsName = require_components.transformName(`${baseName}QueryOptions`, "function", transformers);
764
+ const queryKeyName = require_components.transformName(`${baseName}QueryKey`, "const", transformers);
765
+ const queryKeyTypeName = require_components.transformName(`${capitalize(baseName)}QueryKey`, "type", transformers);
766
+ const clientName = require_components.transformName(baseName, "function", transformers);
767
+ const meta = {
768
+ file: resolver.resolveFile({
769
+ name: queryName,
770
+ extname: ".ts",
771
+ tag: node.tags[0] ?? "default",
772
+ path: node.path
773
+ }, {
774
+ root,
775
+ output,
776
+ group
777
+ }),
778
+ fileTs: tsResolver.resolveFile({
779
+ name: node.operationId,
780
+ extname: ".ts",
781
+ tag: node.tags[0] ?? "default",
782
+ path: node.path
783
+ }, {
784
+ root,
785
+ output: pluginTs.options?.output ?? output,
786
+ group: pluginTs.options?.group
787
+ })
788
+ };
789
+ const casedParams = _kubb_core.ast.caseParams(node.parameters, paramsCasing);
790
+ const pathParams = casedParams.filter((p) => p.in === "path");
791
+ const queryParams = casedParams.filter((p) => p.in === "query");
792
+ const headerParams = casedParams.filter((p) => p.in === "header");
793
+ const importedTypeNames = [
794
+ node.requestBody?.content?.[0]?.schema ? tsResolver.resolveDataName(node) : void 0,
795
+ tsResolver.resolveResponseName(node),
796
+ ...pathParams.map((p) => tsResolver.resolvePathParamsName(node, p)),
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
+ }, {
809
+ root,
810
+ output: pluginZod?.options?.output ?? output,
811
+ group: pluginZod?.options?.group
812
+ }) : void 0;
813
+ const zodSchemaNames = zodResolver && parser === "zod" ? [zodResolver.resolveResponseName?.(node), node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : void 0].filter(Boolean) : [];
814
+ const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
815
+ const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
816
+ const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : void 0;
817
+ const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
818
+ name: node.operationId,
819
+ extname: ".ts",
820
+ tag: node.tags[0] ?? "default",
821
+ path: node.path
822
+ }, {
823
+ root,
824
+ output: clientPlugin?.options?.output ?? output,
825
+ group: clientPlugin?.options?.group
826
+ }) : void 0;
827
+ const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientName : clientName;
828
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
829
+ baseName: meta.file.baseName,
830
+ path: meta.file.path,
831
+ meta: meta.file.meta,
832
+ banner: resolver.resolveBanner(adapter.inputNode, {
833
+ output,
834
+ config
835
+ }),
836
+ footer: resolver.resolveFooter(adapter.inputNode, {
837
+ output,
838
+ config
839
+ }),
840
+ children: [
841
+ parser === "zod" && fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
842
+ name: zodSchemaNames,
843
+ root: meta.file.path,
844
+ path: fileZod.path
845
+ }),
846
+ clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
847
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
848
+ name: "fetch",
849
+ path: clientOptions.importPath
850
+ }),
851
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
852
+ name: [
853
+ "Client",
854
+ "RequestConfig",
855
+ "ResponseErrorConfig"
856
+ ],
857
+ path: clientOptions.importPath,
858
+ isTypeOnly: true
859
+ }),
860
+ clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
861
+ name: ["ResponseConfig"],
862
+ path: clientOptions.importPath,
863
+ isTypeOnly: true
864
+ })
865
+ ] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
866
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
867
+ name: ["fetch"],
868
+ root: meta.file.path,
869
+ path: node_path.default.resolve(root, ".kubb/fetch.ts")
870
+ }),
871
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
872
+ name: [
873
+ "Client",
874
+ "RequestConfig",
875
+ "ResponseErrorConfig"
876
+ ],
877
+ root: meta.file.path,
878
+ path: node_path.default.resolve(root, ".kubb/fetch.ts"),
879
+ isTypeOnly: true
880
+ }),
881
+ clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
882
+ name: ["ResponseConfig"],
883
+ root: meta.file.path,
884
+ path: node_path.default.resolve(root, ".kubb/fetch.ts"),
885
+ isTypeOnly: true
886
+ })
887
+ ] }),
888
+ shouldUseClientPlugin && clientFile && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
889
+ name: [resolvedClientName],
890
+ root: meta.file.path,
891
+ path: clientFile.path
892
+ }),
893
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
894
+ name: ["buildFormData"],
895
+ root: meta.file.path,
896
+ path: node_path.default.resolve(root, ".kubb/config.ts")
897
+ }),
898
+ customOptions && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
899
+ name: [customOptions.name],
900
+ path: customOptions.importPath
901
+ }),
902
+ meta.fileTs && importedTypeNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
903
+ name: Array.from(new Set(importedTypeNames)),
904
+ root: meta.file.path,
905
+ path: meta.fileTs.path,
906
+ isTypeOnly: true
907
+ }),
908
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.QueryKey, {
909
+ name: queryKeyName,
910
+ typeName: queryKeyTypeName,
911
+ node,
912
+ tsResolver,
913
+ pathParamsType,
914
+ paramsCasing,
915
+ transformer: ctx.options.queryKey
916
+ }),
917
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_plugin_client.Client, {
918
+ name: resolvedClientName,
919
+ baseURL: clientOptions.baseURL,
920
+ dataReturnType: clientOptions.dataReturnType || "data",
921
+ paramsCasing: clientOptions.paramsCasing || paramsCasing,
922
+ paramsType,
923
+ pathParamsType,
924
+ parser,
925
+ node,
926
+ tsResolver,
927
+ zodResolver
928
+ }),
929
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
930
+ name: ["queryOptions"],
931
+ path: importPath
932
+ }),
933
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.QueryOptions, {
934
+ name: queryOptionsName,
935
+ clientName: resolvedClientName,
936
+ queryKeyName,
937
+ node,
938
+ tsResolver,
939
+ paramsCasing,
940
+ paramsType,
941
+ pathParamsType,
942
+ dataReturnType: clientOptions.dataReturnType || "data"
943
+ }),
944
+ query && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
945
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
946
+ name: ["useQuery"],
947
+ path: importPath
948
+ }),
949
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
950
+ name: [
951
+ "QueryKey",
952
+ "QueryClient",
953
+ "QueryObserverOptions",
954
+ "UseQueryResult"
955
+ ],
956
+ path: importPath,
957
+ isTypeOnly: true
958
+ }),
959
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.Query, {
960
+ name: queryName,
961
+ queryOptionsName,
962
+ queryKeyName,
963
+ queryKeyTypeName,
964
+ node,
965
+ tsResolver,
966
+ paramsCasing,
967
+ paramsType,
968
+ pathParamsType,
969
+ dataReturnType: clientOptions.dataReturnType || "data",
970
+ customOptions
971
+ })
972
+ ] })
973
+ ]
974
+ });
975
+ }
976
+ });
977
+ //#endregion
978
+ //#region src/generators/suspenseInfiniteQueryGenerator.tsx
979
+ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
980
+ name: "react-suspense-infinite-query",
981
+ renderer: _kubb_renderer_jsx.jsxRenderer,
982
+ operation(node, ctx) {
983
+ const { adapter, config, driver, resolver, root } = ctx;
984
+ const { output, query, mutation, infinite, suspense, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, transformers, customOptions } = ctx.options;
985
+ const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
986
+ if (!pluginTs) return null;
987
+ const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
988
+ const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
989
+ const isMutation = mutation !== false && !isQuery && (0, remeda.difference)(mutation ? mutation.methods : [], query ? query.methods : []).some((method) => node.method.toLowerCase() === method.toLowerCase());
990
+ const isSuspense = !!suspense;
991
+ const infiniteOptions = infinite && typeof infinite === "object" ? infinite : void 0;
992
+ if (!isQuery || isMutation || !isSuspense || !infiniteOptions) return null;
993
+ const normalizeKey = (key) => key.replace(/\?$/, "");
994
+ const queryParamKeys = node.parameters.filter((p) => p.in === "query").map((p) => p.name);
995
+ const hasQueryParam = infiniteOptions.queryParam ? queryParamKeys.some((k) => normalizeKey(k) === infiniteOptions.queryParam) : false;
996
+ const hasCursorParam = !infiniteOptions.cursorParam || true;
997
+ if (!hasQueryParam || !hasCursorParam) return null;
998
+ const importPath = query ? query.importPath : "@tanstack/react-query";
999
+ const baseName = resolver.resolveName(node.operationId);
1000
+ const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
1001
+ const queryName = require_components.transformName(`use${capitalize(baseName)}SuspenseInfinite`, "function", transformers);
1002
+ const queryOptionsName = require_components.transformName(`${baseName}SuspenseInfiniteQueryOptions`, "function", transformers);
1003
+ const queryKeyName = require_components.transformName(`${baseName}SuspenseInfiniteQueryKey`, "const", transformers);
1004
+ const queryKeyTypeName = require_components.transformName(`${capitalize(baseName)}SuspenseInfiniteQueryKey`, "type", transformers);
1005
+ const clientBaseName = require_components.transformName(`${baseName}SuspenseInfinite`, "function", transformers);
1006
+ const meta = {
1007
+ file: resolver.resolveFile({
1008
+ name: queryName,
1009
+ extname: ".ts",
1010
+ tag: node.tags[0] ?? "default",
1011
+ path: node.path
1012
+ }, {
1013
+ root,
1014
+ output,
1015
+ group
1016
+ }),
1017
+ fileTs: tsResolver.resolveFile({
1018
+ name: node.operationId,
1019
+ extname: ".ts",
1020
+ tag: node.tags[0] ?? "default",
1021
+ path: node.path
1022
+ }, {
1023
+ root,
1024
+ output: pluginTs.options?.output ?? output,
1025
+ group: pluginTs.options?.group
1026
+ })
1027
+ };
1028
+ const casedParams = _kubb_core.ast.caseParams(node.parameters, paramsCasing);
1029
+ const pathParams = casedParams.filter((p) => p.in === "path");
1030
+ const queryParams = casedParams.filter((p) => p.in === "query");
1031
+ const headerParams = casedParams.filter((p) => p.in === "header");
1032
+ const importedTypeNames = [
1033
+ node.requestBody?.content?.[0]?.schema ? tsResolver.resolveDataName(node) : void 0,
1034
+ tsResolver.resolveResponseName(node),
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
+ }, {
1048
+ root,
1049
+ output: pluginZod?.options?.output ?? output,
1050
+ group: pluginZod?.options?.group
1051
+ }) : void 0;
1052
+ const zodSchemaNames = zodResolver && parser === "zod" ? [zodResolver.resolveResponseName?.(node), node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : void 0].filter(Boolean) : [];
1053
+ const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
1054
+ const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
1055
+ const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : void 0;
1056
+ const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
1057
+ name: node.operationId,
1058
+ extname: ".ts",
1059
+ tag: node.tags[0] ?? "default",
1060
+ path: node.path
1061
+ }, {
1062
+ root,
1063
+ output: clientPlugin?.options?.output ?? output,
1064
+ group: clientPlugin?.options?.group
1065
+ }) : void 0;
1066
+ const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientBaseName : clientBaseName;
1067
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
1068
+ baseName: meta.file.baseName,
1069
+ path: meta.file.path,
1070
+ meta: meta.file.meta,
1071
+ banner: resolver.resolveBanner(adapter.inputNode, {
1072
+ output,
1073
+ config
1074
+ }),
1075
+ footer: resolver.resolveFooter(adapter.inputNode, {
1076
+ output,
1077
+ config
1078
+ }),
1079
+ children: [
1080
+ parser === "zod" && fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1081
+ name: zodSchemaNames,
1082
+ root: meta.file.path,
1083
+ path: fileZod.path
1084
+ }),
1085
+ clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
1086
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1087
+ name: "fetch",
1088
+ path: clientOptions.importPath
1089
+ }),
1090
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1091
+ name: [
1092
+ "Client",
1093
+ "RequestConfig",
1094
+ "ResponseErrorConfig"
1095
+ ],
1096
+ path: clientOptions.importPath,
1097
+ isTypeOnly: true
1098
+ }),
1099
+ clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1100
+ name: ["ResponseConfig"],
1101
+ path: clientOptions.importPath,
1102
+ isTypeOnly: true
1103
+ })
1104
+ ] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
1105
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1106
+ name: ["fetch"],
1107
+ root: meta.file.path,
1108
+ path: node_path.default.resolve(root, ".kubb/fetch.ts")
1109
+ }),
1110
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1111
+ name: [
1112
+ "Client",
1113
+ "RequestConfig",
1114
+ "ResponseErrorConfig"
1115
+ ],
1116
+ root: meta.file.path,
1117
+ path: node_path.default.resolve(root, ".kubb/fetch.ts"),
1118
+ isTypeOnly: true
1119
+ }),
1120
+ clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1121
+ name: ["ResponseConfig"],
1122
+ root: meta.file.path,
1123
+ path: node_path.default.resolve(root, ".kubb/fetch.ts"),
1124
+ isTypeOnly: true
1125
+ })
1126
+ ] }),
1127
+ shouldUseClientPlugin && clientFile && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1128
+ name: [resolvedClientName],
1129
+ root: meta.file.path,
1130
+ path: clientFile.path
1131
+ }),
1132
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1133
+ name: ["buildFormData"],
1134
+ root: meta.file.path,
1135
+ path: node_path.default.resolve(root, ".kubb/config.ts")
1136
+ }),
1137
+ customOptions && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1138
+ name: [customOptions.name],
1139
+ path: customOptions.importPath
1140
+ }),
1141
+ meta.fileTs && importedTypeNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1142
+ name: Array.from(new Set(importedTypeNames)),
1143
+ root: meta.file.path,
1144
+ path: meta.fileTs.path,
1145
+ isTypeOnly: true
1146
+ }),
1147
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.QueryKey, {
1148
+ name: queryKeyName,
1149
+ typeName: queryKeyTypeName,
1150
+ node,
1151
+ tsResolver,
1152
+ pathParamsType,
1153
+ paramsCasing,
1154
+ transformer: ctx.options.queryKey
1155
+ }),
1156
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_plugin_client.Client, {
1157
+ name: resolvedClientName,
1158
+ baseURL: clientOptions.baseURL,
1159
+ dataReturnType: clientOptions.dataReturnType || "data",
1160
+ paramsCasing: clientOptions.paramsCasing || paramsCasing,
1161
+ paramsType,
1162
+ pathParamsType,
1163
+ parser,
1164
+ node,
1165
+ tsResolver,
1166
+ zodResolver
1167
+ }),
1168
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1169
+ name: ["InfiniteData"],
1170
+ isTypeOnly: true,
1171
+ path: importPath
1172
+ }),
1173
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1174
+ name: ["infiniteQueryOptions"],
1175
+ path: importPath
1176
+ }),
1177
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.SuspenseInfiniteQueryOptions, {
1178
+ name: queryOptionsName,
1179
+ clientName: resolvedClientName,
1180
+ queryKeyName,
1181
+ node,
1182
+ tsResolver,
1183
+ paramsCasing,
1184
+ paramsType,
1185
+ pathParamsType,
1186
+ dataReturnType: clientOptions.dataReturnType || "data",
1187
+ cursorParam: infiniteOptions.cursorParam,
1188
+ nextParam: infiniteOptions.nextParam,
1189
+ previousParam: infiniteOptions.previousParam,
1190
+ initialPageParam: infiniteOptions.initialPageParam,
1191
+ queryParam: infiniteOptions.queryParam
1192
+ }),
1193
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1194
+ name: ["useSuspenseInfiniteQuery"],
1195
+ path: importPath
1196
+ }),
1197
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1198
+ name: [
1199
+ "QueryKey",
1200
+ "QueryClient",
1201
+ "UseSuspenseInfiniteQueryOptions",
1202
+ "UseSuspenseInfiniteQueryResult"
1203
+ ],
1204
+ path: importPath,
1205
+ isTypeOnly: true
1206
+ }),
1207
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.SuspenseInfiniteQuery, {
1208
+ name: queryName,
1209
+ queryOptionsName,
1210
+ queryKeyName,
1211
+ queryKeyTypeName,
1212
+ node,
1213
+ tsResolver,
1214
+ paramsCasing,
1215
+ paramsType,
1216
+ pathParamsType,
1217
+ dataReturnType: clientOptions.dataReturnType || "data",
1218
+ initialPageParam: infiniteOptions.initialPageParam,
1219
+ queryParam: infiniteOptions.queryParam,
1220
+ customOptions
1221
+ })
1222
+ ]
1223
+ });
1224
+ }
1225
+ });
1226
+ //#endregion
1227
+ //#region src/generators/suspenseQueryGenerator.tsx
1228
+ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
1229
+ name: "react-suspense-query",
1230
+ renderer: _kubb_renderer_jsx.jsxRenderer,
1231
+ operation(node, ctx) {
1232
+ const { adapter, config, driver, resolver, root } = ctx;
1233
+ const { output, query, mutation, suspense, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, transformers, customOptions } = ctx.options;
1234
+ const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
1235
+ if (!pluginTs) return null;
1236
+ const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
1237
+ const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
1238
+ const isMutation = mutation !== false && !isQuery && (0, remeda.difference)(mutation ? mutation.methods : [], query ? query.methods : []).some((method) => node.method.toLowerCase() === method.toLowerCase());
1239
+ if (!isQuery || isMutation || !!!suspense) return null;
1240
+ const importPath = query ? query.importPath : "@tanstack/react-query";
1241
+ const baseName = resolver.resolveName(node.operationId);
1242
+ const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
1243
+ const queryName = require_components.transformName(`use${capitalize(baseName)}Suspense`, "function", transformers);
1244
+ const queryOptionsName = require_components.transformName(`${baseName}SuspenseQueryOptions`, "function", transformers);
1245
+ const queryKeyName = require_components.transformName(`${baseName}SuspenseQueryKey`, "const", transformers);
1246
+ const queryKeyTypeName = require_components.transformName(`${capitalize(baseName)}SuspenseQueryKey`, "type", transformers);
1247
+ const clientName = require_components.transformName(`${baseName}Suspense`, "function", transformers);
1248
+ const meta = {
1249
+ file: resolver.resolveFile({
1250
+ name: queryName,
1251
+ extname: ".ts",
1252
+ tag: node.tags[0] ?? "default",
1253
+ path: node.path
1254
+ }, {
1255
+ root,
1256
+ output,
1257
+ group
1258
+ }),
1259
+ fileTs: tsResolver.resolveFile({
1260
+ name: node.operationId,
1261
+ extname: ".ts",
1262
+ tag: node.tags[0] ?? "default",
1263
+ path: node.path
1264
+ }, {
1265
+ root,
1266
+ output: pluginTs.options?.output ?? output,
1267
+ group: pluginTs.options?.group
1268
+ })
1269
+ };
1270
+ const casedParams = _kubb_core.ast.caseParams(node.parameters, paramsCasing);
1271
+ const pathParams = casedParams.filter((p) => p.in === "path");
1272
+ const queryParams = casedParams.filter((p) => p.in === "query");
1273
+ const headerParams = casedParams.filter((p) => p.in === "header");
1274
+ const importedTypeNames = [
1275
+ node.requestBody?.content?.[0]?.schema ? tsResolver.resolveDataName(node) : void 0,
1276
+ tsResolver.resolveResponseName(node),
1277
+ ...pathParams.map((p) => tsResolver.resolvePathParamsName(node, p)),
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
+ }, {
1290
+ root,
1291
+ output: pluginZod?.options?.output ?? output,
1292
+ group: pluginZod?.options?.group
1293
+ }) : void 0;
1294
+ const zodSchemaNames = zodResolver && parser === "zod" ? [zodResolver.resolveResponseName?.(node), node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : void 0].filter(Boolean) : [];
1295
+ const clientPlugin = driver.getPlugin(_kubb_plugin_client.pluginClientName);
1296
+ const shouldUseClientPlugin = clientPlugin?.name === _kubb_plugin_client.pluginClientName && clientOptions.clientType !== "class";
1297
+ const clientResolver = shouldUseClientPlugin ? driver.getResolver(_kubb_plugin_client.pluginClientName) : void 0;
1298
+ const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
1299
+ name: node.operationId,
1300
+ extname: ".ts",
1301
+ tag: node.tags[0] ?? "default",
1302
+ path: node.path
1303
+ }, {
1304
+ root,
1305
+ output: clientPlugin?.options?.output ?? output,
1306
+ group: clientPlugin?.options?.group
1307
+ }) : void 0;
1308
+ const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientName : clientName;
1309
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
1310
+ baseName: meta.file.baseName,
1311
+ path: meta.file.path,
1312
+ meta: meta.file.meta,
1313
+ banner: resolver.resolveBanner(adapter.inputNode, {
1314
+ output,
1315
+ config
1316
+ }),
1317
+ footer: resolver.resolveFooter(adapter.inputNode, {
1318
+ output,
1319
+ config
1320
+ }),
1321
+ children: [
1322
+ parser === "zod" && fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1323
+ name: zodSchemaNames,
1324
+ root: meta.file.path,
1325
+ path: fileZod.path
1326
+ }),
1327
+ clientOptions.importPath ? /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
1328
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1329
+ name: "fetch",
1330
+ path: clientOptions.importPath
1331
+ }),
1332
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1333
+ name: [
1334
+ "Client",
1335
+ "RequestConfig",
1336
+ "ResponseErrorConfig"
1337
+ ],
1338
+ path: clientOptions.importPath,
1339
+ isTypeOnly: true
1340
+ }),
1341
+ clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1342
+ name: ["ResponseConfig"],
1343
+ path: clientOptions.importPath,
1344
+ isTypeOnly: true
1345
+ })
1346
+ ] }) : /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
1347
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1348
+ name: ["fetch"],
1349
+ root: meta.file.path,
1350
+ path: node_path.default.resolve(root, ".kubb/fetch.ts")
1351
+ }),
1352
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1353
+ name: [
1354
+ "Client",
1355
+ "RequestConfig",
1356
+ "ResponseErrorConfig"
1357
+ ],
1358
+ root: meta.file.path,
1359
+ path: node_path.default.resolve(root, ".kubb/fetch.ts"),
1360
+ isTypeOnly: true
1361
+ }),
1362
+ clientOptions.dataReturnType === "full" && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1363
+ name: ["ResponseConfig"],
1364
+ root: meta.file.path,
1365
+ path: node_path.default.resolve(root, ".kubb/fetch.ts"),
1366
+ isTypeOnly: true
1367
+ })
1368
+ ] }),
1369
+ shouldUseClientPlugin && clientFile && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1370
+ name: [resolvedClientName],
1371
+ root: meta.file.path,
1372
+ path: clientFile.path
1373
+ }),
1374
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1375
+ name: ["buildFormData"],
1376
+ root: meta.file.path,
1377
+ path: node_path.default.resolve(root, ".kubb/config.ts")
1378
+ }),
1379
+ customOptions && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1380
+ name: [customOptions.name],
1381
+ path: customOptions.importPath
1382
+ }),
1383
+ meta.fileTs && importedTypeNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1384
+ name: Array.from(new Set(importedTypeNames)),
1385
+ root: meta.file.path,
1386
+ path: meta.fileTs.path,
1387
+ isTypeOnly: true
1388
+ }),
1389
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.QueryKey, {
1390
+ name: queryKeyName,
1391
+ typeName: queryKeyTypeName,
1392
+ node,
1393
+ tsResolver,
1394
+ pathParamsType,
1395
+ paramsCasing,
1396
+ transformer: ctx.options.queryKey
1397
+ }),
1398
+ !shouldUseClientPlugin && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_plugin_client.Client, {
1399
+ name: resolvedClientName,
1400
+ baseURL: clientOptions.baseURL,
1401
+ dataReturnType: clientOptions.dataReturnType || "data",
1402
+ paramsCasing: clientOptions.paramsCasing || paramsCasing,
1403
+ paramsType,
1404
+ pathParamsType,
1405
+ parser,
1406
+ node,
1407
+ tsResolver,
1408
+ zodResolver
1409
+ }),
1410
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1411
+ name: ["queryOptions"],
1412
+ path: importPath
1413
+ }),
1414
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.QueryOptions, {
1415
+ name: queryOptionsName,
1416
+ clientName: resolvedClientName,
1417
+ queryKeyName,
1418
+ node,
1419
+ tsResolver,
1420
+ paramsCasing,
1421
+ paramsType,
1422
+ pathParamsType,
1423
+ dataReturnType: clientOptions.dataReturnType || "data"
1424
+ }),
1425
+ suspense && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
1426
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1427
+ name: ["useSuspenseQuery"],
1428
+ path: importPath
1429
+ }),
1430
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1431
+ name: [
1432
+ "QueryKey",
1433
+ "QueryClient",
1434
+ "UseSuspenseQueryOptions",
1435
+ "UseSuspenseQueryResult"
1436
+ ],
1437
+ path: importPath,
1438
+ isTypeOnly: true
1439
+ }),
1440
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(require_components.SuspenseQuery, {
1441
+ name: queryName,
1442
+ queryOptionsName,
1443
+ queryKeyName,
1444
+ queryKeyTypeName,
1445
+ node,
1446
+ tsResolver,
1447
+ paramsCasing,
1448
+ paramsType,
1449
+ pathParamsType,
1450
+ dataReturnType: clientOptions.dataReturnType || "data",
1451
+ customOptions
1452
+ })
1453
+ ] })
1454
+ ]
1455
+ });
1456
+ }
1457
+ });
1458
+ //#endregion
1459
+ Object.defineProperty(exports, "customHookOptionsFileGenerator", {
1460
+ enumerable: true,
1461
+ get: function() {
1462
+ return customHookOptionsFileGenerator;
1463
+ }
1464
+ });
1465
+ Object.defineProperty(exports, "hookOptionsGenerator", {
1466
+ enumerable: true,
1467
+ get: function() {
1468
+ return hookOptionsGenerator;
1469
+ }
1470
+ });
1471
+ Object.defineProperty(exports, "infiniteQueryGenerator", {
1472
+ enumerable: true,
1473
+ get: function() {
1474
+ return infiniteQueryGenerator;
1475
+ }
1476
+ });
1477
+ Object.defineProperty(exports, "mutationGenerator", {
1478
+ enumerable: true,
1479
+ get: function() {
1480
+ return mutationGenerator;
1481
+ }
1482
+ });
1483
+ Object.defineProperty(exports, "queryGenerator", {
1484
+ enumerable: true,
1485
+ get: function() {
1486
+ return queryGenerator;
1487
+ }
1488
+ });
1489
+ Object.defineProperty(exports, "suspenseInfiniteQueryGenerator", {
1490
+ enumerable: true,
1491
+ get: function() {
1492
+ return suspenseInfiniteQueryGenerator;
1493
+ }
1494
+ });
1495
+ Object.defineProperty(exports, "suspenseQueryGenerator", {
1496
+ enumerable: true,
1497
+ get: function() {
1498
+ return suspenseQueryGenerator;
1499
+ }
1500
+ });
1501
+
1502
+ //# sourceMappingURL=generators-CWEQsdO9.cjs.map