@kubb/plugin-vue-query 5.0.0-beta.4 → 5.0.0-beta.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +39 -22
  2. package/dist/{components-qfOFRSoM.cjs → components-BwFPMwK7.cjs} +367 -381
  3. package/dist/components-BwFPMwK7.cjs.map +1 -0
  4. package/dist/{components-D1UhYFgY.js → components-Bxe1EuWf.js} +337 -381
  5. package/dist/components-Bxe1EuWf.js.map +1 -0
  6. package/dist/components.cjs +1 -1
  7. package/dist/components.d.ts +4 -68
  8. package/dist/components.js +1 -1
  9. package/dist/{generators-C4gs_P1i.cjs → generators-BSN6A0ED.cjs} +163 -206
  10. package/dist/generators-BSN6A0ED.cjs.map +1 -0
  11. package/dist/{generators-CbnIVBgY.js → generators-D9TUvYRN.js} +165 -208
  12. package/dist/generators-D9TUvYRN.js.map +1 -0
  13. package/dist/generators.cjs +1 -1
  14. package/dist/generators.d.ts +21 -6
  15. package/dist/generators.js +1 -1
  16. package/dist/index.cjs +133 -23
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.ts +31 -4
  19. package/dist/index.js +134 -24
  20. package/dist/index.js.map +1 -1
  21. package/dist/types-HHnnlEhK.d.ts +270 -0
  22. package/extension.yaml +782 -327
  23. package/package.json +15 -17
  24. package/src/components/InfiniteQuery.tsx +16 -48
  25. package/src/components/InfiniteQueryOptions.tsx +43 -58
  26. package/src/components/Mutation.tsx +33 -42
  27. package/src/components/Query.tsx +16 -49
  28. package/src/components/QueryKey.tsx +9 -61
  29. package/src/components/QueryOptions.tsx +20 -76
  30. package/src/generators/infiniteQueryGenerator.tsx +57 -65
  31. package/src/generators/mutationGenerator.tsx +52 -63
  32. package/src/generators/queryGenerator.tsx +54 -63
  33. package/src/plugin.ts +46 -30
  34. package/src/resolvers/resolverVueQuery.ts +61 -4
  35. package/src/types.ts +129 -53
  36. package/src/utils.ts +44 -25
  37. package/dist/components-D1UhYFgY.js.map +0 -1
  38. package/dist/components-qfOFRSoM.cjs.map +0 -1
  39. package/dist/generators-C4gs_P1i.cjs.map +0 -1
  40. package/dist/generators-CbnIVBgY.js.map +0 -1
  41. package/dist/types-nVDTfuS1.d.ts +0 -194
  42. /package/dist/{chunk--u3MIqq1.js → chunk-C0LytTxp.js} +0 -0
@@ -1,122 +1,108 @@
1
- import "./chunk--u3MIqq1.js";
2
- import { a as QueryOptions, c as MutationKey, i as InfiniteQuery, n as Mutation, o as QueryKey, r as InfiniteQueryOptions, s as transformName, t as Query } from "./components-D1UhYFgY.js";
1
+ import "./chunk-C0LytTxp.js";
2
+ import { a as QueryOptions, c as resolveZodSchemaNames, d as getOperationParameters, f as operationFileEntry, i as InfiniteQuery, l as MutationKey, n as Mutation, o as QueryKey, p as resolveOperationTypeNames, r as InfiniteQueryOptions, t as Query } from "./components-Bxe1EuWf.js";
3
3
  import path from "node:path";
4
4
  import { ast, defineGenerator } from "@kubb/core";
5
5
  import { Client, pluginClientName } from "@kubb/plugin-client";
6
6
  import { pluginTsName } from "@kubb/plugin-ts";
7
7
  import { pluginZodName } from "@kubb/plugin-zod";
8
- import { File, jsxRenderer } from "@kubb/renderer-jsx";
8
+ import { File, jsxRendererSync } from "@kubb/renderer-jsx";
9
9
  import { Fragment, jsx, jsxs } from "@kubb/renderer-jsx/jsx-runtime";
10
- import { difference } from "remeda";
11
10
  //#region src/generators/infiniteQueryGenerator.tsx
11
+ /**
12
+ * Built-in generator for `useInfiniteQuery` composables. Enabled when
13
+ * `pluginVueQuery({ infinite: { ... } })`. Emits one `useFooInfiniteQuery`
14
+ * composable per query operation, wiring the configured cursor path into
15
+ * TanStack Query's cursor-based pagination.
16
+ */
12
17
  const infiniteQueryGenerator = defineGenerator({
13
18
  name: "vue-query-infinite",
14
- renderer: jsxRenderer,
19
+ renderer: jsxRendererSync,
15
20
  operation(node, ctx) {
16
- const { adapter, config, driver, resolver, root } = ctx;
17
- const { output, query, mutation, infinite, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, transformers } = ctx.options;
21
+ if (!ast.isHttpOperationNode(node)) return null;
22
+ const { config, driver, resolver, root } = ctx;
23
+ const { output, query, mutation, infinite, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group } = ctx.options;
18
24
  const pluginTs = driver.getPlugin(pluginTsName);
19
25
  if (!pluginTs) return null;
20
26
  const tsResolver = driver.getResolver(pluginTsName);
21
27
  const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
22
- const isMutation = mutation !== false && !isQuery && difference(mutation ? mutation.methods : [], query ? query.methods : []).some((method) => node.method.toLowerCase() === method.toLowerCase());
23
- const infiniteOptions = infinite && typeof infinite === "object" ? infinite : void 0;
28
+ const queryMethods = new Set(query ? query.methods : []);
29
+ const isMutation = mutation !== false && !isQuery && (mutation ? mutation.methods : []).some((method) => !queryMethods.has(method) && node.method.toLowerCase() === method.toLowerCase());
30
+ const infiniteOptions = infinite && typeof infinite === "object" ? infinite : null;
24
31
  if (!isQuery || isMutation || !infiniteOptions) return null;
25
32
  const normalizeKey = (key) => key.replace(/\?$/, "");
26
- const queryParamKeys = node.parameters.filter((p) => p.in === "query").map((p) => p.name);
33
+ const queryParamKeys = getOperationParameters(node).query.map((p) => p.name);
27
34
  const hasQueryParam = infiniteOptions.queryParam ? queryParamKeys.some((k) => normalizeKey(k) === infiniteOptions.queryParam) : false;
28
35
  const hasCursorParam = !infiniteOptions.cursorParam || true;
29
36
  if (!hasQueryParam || !hasCursorParam) return null;
30
37
  const importPath = query ? query.importPath : "@tanstack/vue-query";
31
- const baseName = resolver.resolveName(node.operationId);
32
- const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
33
- const queryName = transformName(`use${capitalize(baseName)}Infinite`, "function", transformers);
34
- const queryOptionsName = transformName(`${baseName}InfiniteQueryOptions`, "function", transformers);
35
- const queryKeyName = transformName(`${baseName}InfiniteQueryKey`, "const", transformers);
36
- const queryKeyTypeName = transformName(`${capitalize(baseName)}InfiniteQueryKey`, "type", transformers);
37
- const clientBaseName = transformName(`${baseName}Infinite`, "function", transformers);
38
+ const queryName = resolver.resolveInfiniteQueryName(node);
39
+ const queryOptionsName = resolver.resolveInfiniteQueryOptionsName(node);
40
+ const queryKeyName = resolver.resolveInfiniteQueryKeyName(node);
41
+ const queryKeyTypeName = resolver.resolveInfiniteQueryKeyTypeName(node);
42
+ const clientBaseName = resolver.resolveInfiniteClientName(node);
38
43
  const meta = {
39
- file: resolver.resolveFile({
40
- name: queryName,
41
- extname: ".ts",
42
- tag: node.tags[0] ?? "default",
43
- path: node.path
44
- }, {
44
+ file: resolver.resolveFile(operationFileEntry(node, queryName), {
45
45
  root,
46
46
  output,
47
- group
47
+ group: group ?? void 0
48
48
  }),
49
- fileTs: tsResolver.resolveFile({
50
- name: node.operationId,
51
- extname: ".ts",
52
- tag: node.tags[0] ?? "default",
53
- path: node.path
54
- }, {
49
+ fileTs: tsResolver.resolveFile(operationFileEntry(node, node.operationId), {
55
50
  root,
56
51
  output: pluginTs.options?.output ?? output,
57
- group: pluginTs.options?.group
52
+ group: pluginTs.options?.group ?? void 0
58
53
  })
59
54
  };
60
- const casedParams = ast.caseParams(node.parameters, paramsCasing);
61
- const pathParams = casedParams.filter((p) => p.in === "path");
62
- const queryParams = casedParams.filter((p) => p.in === "query");
63
- const headerParams = casedParams.filter((p) => p.in === "header");
64
- const importedTypeNames = [
65
- node.requestBody?.content?.[0]?.schema ? tsResolver.resolveDataName(node) : void 0,
66
- tsResolver.resolveResponseName(node),
67
- ...pathParams.map((p) => tsResolver.resolvePathParamsName(node, p)),
68
- ...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
69
- ...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
70
- ...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
71
- ].filter((name) => !!name && name !== queryKeyTypeName);
72
- const pluginZod = parser === "zod" ? driver.getPlugin(pluginZodName) : void 0;
73
- const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : void 0;
74
- const fileZod = zodResolver ? zodResolver.resolveFile({
75
- name: node.operationId,
76
- extname: ".ts",
77
- tag: node.tags[0] ?? "default",
78
- path: node.path
79
- }, {
55
+ const importedTypeNames = resolveOperationTypeNames(node, tsResolver, {
56
+ paramsCasing,
57
+ exclude: [queryKeyTypeName],
58
+ order: "body-response-first"
59
+ });
60
+ const pluginZod = parser === "zod" ? driver.getPlugin(pluginZodName) : null;
61
+ const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
62
+ const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
80
63
  root,
81
64
  output: pluginZod?.options?.output ?? output,
82
- group: pluginZod?.options?.group
83
- }) : void 0;
84
- const zodSchemaNames = zodResolver && parser === "zod" ? [zodResolver.resolveResponseName?.(node), node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : void 0].filter(Boolean) : [];
65
+ group: pluginZod?.options?.group ?? void 0
66
+ }) : null;
67
+ const zodSchemaNames = resolveZodSchemaNames(node, zodResolver);
85
68
  const clientPlugin = driver.getPlugin(pluginClientName);
86
69
  const shouldUseClientPlugin = clientPlugin?.name === pluginClientName && clientOptions.clientType !== "class";
87
- const clientResolver = shouldUseClientPlugin ? driver.getResolver(pluginClientName) : void 0;
88
- const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
89
- name: node.operationId,
90
- extname: ".ts",
91
- tag: node.tags[0] ?? "default",
92
- path: node.path
93
- }, {
70
+ const clientResolver = shouldUseClientPlugin ? driver.getResolver(pluginClientName) : null;
71
+ const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(operationFileEntry(node, node.operationId), {
94
72
  root,
95
73
  output: clientPlugin?.options?.output ?? output,
96
- group: clientPlugin?.options?.group
97
- }) : void 0;
74
+ group: clientPlugin?.options?.group ?? void 0
75
+ }) : null;
98
76
  const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientBaseName : clientBaseName;
99
77
  return /* @__PURE__ */ jsxs(File, {
100
78
  baseName: meta.file.baseName,
101
79
  path: meta.file.path,
102
80
  meta: meta.file.meta,
103
- banner: resolver.resolveBanner(adapter.inputNode, {
81
+ banner: resolver.resolveBanner(ctx.meta, {
104
82
  output,
105
- config
83
+ config,
84
+ file: {
85
+ path: meta.file.path,
86
+ baseName: meta.file.baseName
87
+ }
106
88
  }),
107
- footer: resolver.resolveFooter(adapter.inputNode, {
89
+ footer: resolver.resolveFooter(ctx.meta, {
108
90
  output,
109
- config
91
+ config,
92
+ file: {
93
+ path: meta.file.path,
94
+ baseName: meta.file.baseName
95
+ }
110
96
  }),
111
97
  children: [
112
- parser === "zod" && fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ jsx(File.Import, {
98
+ fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ jsx(File.Import, {
113
99
  name: zodSchemaNames,
114
100
  root: meta.file.path,
115
101
  path: fileZod.path
116
102
  }),
117
103
  clientOptions.importPath ? /* @__PURE__ */ jsxs(Fragment, { children: [
118
104
  !shouldUseClientPlugin && /* @__PURE__ */ jsx(File.Import, {
119
- name: "fetch",
105
+ name: "client",
120
106
  path: clientOptions.importPath
121
107
  }),
122
108
  /* @__PURE__ */ jsx(File.Import, {
@@ -135,9 +121,9 @@ const infiniteQueryGenerator = defineGenerator({
135
121
  })
136
122
  ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
137
123
  !shouldUseClientPlugin && /* @__PURE__ */ jsx(File.Import, {
138
- name: ["fetch"],
124
+ name: ["client"],
139
125
  root: meta.file.path,
140
- path: path.resolve(root, ".kubb/fetch.ts")
126
+ path: path.resolve(root, ".kubb/client.ts")
141
127
  }),
142
128
  /* @__PURE__ */ jsx(File.Import, {
143
129
  name: [
@@ -146,13 +132,13 @@ const infiniteQueryGenerator = defineGenerator({
146
132
  "ResponseErrorConfig"
147
133
  ],
148
134
  root: meta.file.path,
149
- path: path.resolve(root, ".kubb/fetch.ts"),
135
+ path: path.resolve(root, ".kubb/client.ts"),
150
136
  isTypeOnly: true
151
137
  }),
152
138
  clientOptions.dataReturnType === "full" && /* @__PURE__ */ jsx(File.Import, {
153
139
  name: ["ResponseConfig"],
154
140
  root: meta.file.path,
155
- path: path.resolve(root, ".kubb/fetch.ts"),
141
+ path: path.resolve(root, ".kubb/client.ts"),
156
142
  isTypeOnly: true
157
143
  })
158
144
  ] }),
@@ -261,106 +247,91 @@ const infiniteQueryGenerator = defineGenerator({
261
247
  });
262
248
  //#endregion
263
249
  //#region src/generators/mutationGenerator.tsx
250
+ /**
251
+ * Built-in generator for `useMutation` composables. Emits one
252
+ * `useFooMutation` composable per POST/PUT/DELETE operation (configurable
253
+ * via `mutation.methods`) plus the matching `fooMutationKey` helper.
254
+ */
264
255
  const mutationGenerator = defineGenerator({
265
256
  name: "vue-query-mutation",
266
- renderer: jsxRenderer,
257
+ renderer: jsxRendererSync,
267
258
  operation(node, ctx) {
268
- const { adapter, config, driver, resolver, root } = ctx;
269
- const { output, query, mutation, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, transformers } = ctx.options;
259
+ if (!ast.isHttpOperationNode(node)) return null;
260
+ const { config, driver, resolver, root } = ctx;
261
+ const { output, query, mutation, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group } = ctx.options;
270
262
  const pluginTs = driver.getPlugin(pluginTsName);
271
263
  if (!pluginTs) return null;
272
264
  const tsResolver = driver.getResolver(pluginTsName);
273
265
  const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
274
- if (!(mutation !== false && !isQuery && difference(mutation ? mutation.methods : [], query ? query.methods : []).some((method) => node.method.toLowerCase() === method.toLowerCase()))) return null;
266
+ const queryMethods = new Set(query ? query.methods : []);
267
+ if (!(mutation !== false && !isQuery && (mutation ? mutation.methods : []).some((method) => !queryMethods.has(method) && node.method.toLowerCase() === method.toLowerCase()))) return null;
275
268
  const importPath = mutation ? mutation.importPath : "@tanstack/vue-query";
276
- const baseName = resolver.resolveName(node.operationId);
277
- const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
278
- const mutationHookName = transformName(`use${capitalize(baseName)}`, "function", transformers);
279
- const mutationTypeName = transformName(`${capitalize(baseName)}`, "type", transformers);
280
- const mutationKeyName = transformName(`${baseName}MutationKey`, "const", transformers);
281
- const clientName = transformName(baseName, "function", transformers);
269
+ const mutationHookName = resolver.resolveMutationName(node);
270
+ const mutationTypeName = resolver.resolveMutationTypeName(node);
271
+ const mutationKeyName = resolver.resolveMutationKeyName(node);
272
+ const clientName = resolver.resolveClientName(node);
282
273
  const meta = {
283
- file: resolver.resolveFile({
284
- name: mutationHookName,
285
- extname: ".ts",
286
- tag: node.tags[0] ?? "default",
287
- path: node.path
288
- }, {
274
+ file: resolver.resolveFile(operationFileEntry(node, mutationHookName), {
289
275
  root,
290
276
  output,
291
- group
277
+ group: group ?? void 0
292
278
  }),
293
- fileTs: tsResolver.resolveFile({
294
- name: node.operationId,
295
- extname: ".ts",
296
- tag: node.tags[0] ?? "default",
297
- path: node.path
298
- }, {
279
+ fileTs: tsResolver.resolveFile(operationFileEntry(node, node.operationId), {
299
280
  root,
300
281
  output: pluginTs.options?.output ?? output,
301
- group: pluginTs.options?.group
282
+ group: pluginTs.options?.group ?? void 0
302
283
  })
303
284
  };
304
- const casedParams = ast.caseParams(node.parameters, paramsCasing);
305
- const pathParams = casedParams.filter((p) => p.in === "path");
306
- const queryParams = casedParams.filter((p) => p.in === "query");
307
- const headerParams = casedParams.filter((p) => p.in === "header");
308
- const importedTypeNames = [
309
- node.requestBody?.content?.[0]?.schema ? tsResolver.resolveDataName(node) : void 0,
310
- tsResolver.resolveResponseName(node),
311
- ...pathParams.map((p) => tsResolver.resolvePathParamsName(node, p)),
312
- ...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
313
- ...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
314
- ...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
315
- ].filter((name) => !!name);
316
- const pluginZod = parser === "zod" ? driver.getPlugin(pluginZodName) : void 0;
317
- const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : void 0;
318
- const fileZod = zodResolver ? zodResolver.resolveFile({
319
- name: node.operationId,
320
- extname: ".ts",
321
- tag: node.tags[0] ?? "default",
322
- path: node.path
323
- }, {
285
+ const importedTypeNames = resolveOperationTypeNames(node, tsResolver, {
286
+ paramsCasing,
287
+ order: "body-response-first"
288
+ });
289
+ const pluginZod = parser === "zod" ? driver.getPlugin(pluginZodName) : null;
290
+ const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
291
+ const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
324
292
  root,
325
293
  output: pluginZod?.options?.output ?? output,
326
- group: pluginZod?.options?.group
327
- }) : void 0;
328
- const zodSchemaNames = zodResolver && parser === "zod" ? [zodResolver.resolveResponseName?.(node), node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : void 0].filter(Boolean) : [];
294
+ group: pluginZod?.options?.group ?? void 0
295
+ }) : null;
296
+ const zodSchemaNames = resolveZodSchemaNames(node, zodResolver);
329
297
  const clientPlugin = driver.getPlugin(pluginClientName);
330
298
  const shouldUseClientPlugin = clientPlugin?.name === pluginClientName && clientOptions.clientType !== "class";
331
- const clientResolver = shouldUseClientPlugin ? driver.getResolver(pluginClientName) : void 0;
332
- const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
333
- name: node.operationId,
334
- extname: ".ts",
335
- tag: node.tags[0] ?? "default",
336
- path: node.path
337
- }, {
299
+ const clientResolver = shouldUseClientPlugin ? driver.getResolver(pluginClientName) : null;
300
+ const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(operationFileEntry(node, node.operationId), {
338
301
  root,
339
302
  output: clientPlugin?.options?.output ?? output,
340
- group: clientPlugin?.options?.group
341
- }) : void 0;
303
+ group: clientPlugin?.options?.group ?? void 0
304
+ }) : null;
342
305
  const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientName : clientName;
343
306
  return /* @__PURE__ */ jsxs(File, {
344
307
  baseName: meta.file.baseName,
345
308
  path: meta.file.path,
346
309
  meta: meta.file.meta,
347
- banner: resolver.resolveBanner(adapter.inputNode, {
310
+ banner: resolver.resolveBanner(ctx.meta, {
348
311
  output,
349
- config
312
+ config,
313
+ file: {
314
+ path: meta.file.path,
315
+ baseName: meta.file.baseName
316
+ }
350
317
  }),
351
- footer: resolver.resolveFooter(adapter.inputNode, {
318
+ footer: resolver.resolveFooter(ctx.meta, {
352
319
  output,
353
- config
320
+ config,
321
+ file: {
322
+ path: meta.file.path,
323
+ baseName: meta.file.baseName
324
+ }
354
325
  }),
355
326
  children: [
356
- parser === "zod" && fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ jsx(File.Import, {
327
+ fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ jsx(File.Import, {
357
328
  name: zodSchemaNames,
358
329
  root: meta.file.path,
359
330
  path: fileZod.path
360
331
  }),
361
332
  clientOptions.importPath ? /* @__PURE__ */ jsxs(Fragment, { children: [
362
333
  !shouldUseClientPlugin && /* @__PURE__ */ jsx(File.Import, {
363
- name: "fetch",
334
+ name: "client",
364
335
  path: clientOptions.importPath
365
336
  }),
366
337
  /* @__PURE__ */ jsx(File.Import, {
@@ -379,9 +350,9 @@ const mutationGenerator = defineGenerator({
379
350
  })
380
351
  ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
381
352
  !shouldUseClientPlugin && /* @__PURE__ */ jsx(File.Import, {
382
- name: ["fetch"],
353
+ name: ["client"],
383
354
  root: meta.file.path,
384
- path: path.resolve(root, ".kubb/fetch.ts")
355
+ path: path.resolve(root, ".kubb/client.ts")
385
356
  }),
386
357
  /* @__PURE__ */ jsx(File.Import, {
387
358
  name: [
@@ -390,13 +361,13 @@ const mutationGenerator = defineGenerator({
390
361
  "ResponseErrorConfig"
391
362
  ],
392
363
  root: meta.file.path,
393
- path: path.resolve(root, ".kubb/fetch.ts"),
364
+ path: path.resolve(root, ".kubb/client.ts"),
394
365
  isTypeOnly: true
395
366
  }),
396
367
  clientOptions.dataReturnType === "full" && /* @__PURE__ */ jsx(File.Import, {
397
368
  name: ["ResponseConfig"],
398
369
  root: meta.file.path,
399
- path: path.resolve(root, ".kubb/fetch.ts"),
370
+ path: path.resolve(root, ".kubb/client.ts"),
400
371
  isTypeOnly: true
401
372
  })
402
373
  ] }),
@@ -410,7 +381,7 @@ const mutationGenerator = defineGenerator({
410
381
  root: meta.file.path,
411
382
  path: clientFile.path
412
383
  }),
413
- !shouldUseClientPlugin && /* @__PURE__ */ jsx(File.Import, {
384
+ !shouldUseClientPlugin && node.requestBody?.content?.some((e) => e.contentType === "multipart/form-data") && /* @__PURE__ */ jsx(File.Import, {
414
385
  name: ["buildFormData"],
415
386
  root: meta.file.path,
416
387
  path: path.resolve(root, ".kubb/config.ts")
@@ -469,108 +440,94 @@ const mutationGenerator = defineGenerator({
469
440
  });
470
441
  //#endregion
471
442
  //#region src/generators/queryGenerator.tsx
443
+ /**
444
+ * Built-in generator for `useQuery` composables. Emits one `useFooQuery`
445
+ * composable per GET operation (configurable via `query.methods`) plus the
446
+ * matching `fooQueryKey` / `fooQueryOptions` helpers.
447
+ */
472
448
  const queryGenerator = defineGenerator({
473
449
  name: "vue-query",
474
- renderer: jsxRenderer,
450
+ renderer: jsxRendererSync,
475
451
  operation(node, ctx) {
476
- const { adapter, config, driver, resolver, root } = ctx;
477
- const { output, query, mutation, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group, transformers } = ctx.options;
452
+ if (!ast.isHttpOperationNode(node)) return null;
453
+ const { config, driver, resolver, root } = ctx;
454
+ const { output, query, mutation, paramsCasing, paramsType, pathParamsType, parser, client: clientOptions, group } = ctx.options;
478
455
  const pluginTs = driver.getPlugin(pluginTsName);
479
456
  if (!pluginTs) return null;
480
457
  const tsResolver = driver.getResolver(pluginTsName);
481
458
  const isQuery = query === false || !!query && query.methods.some((method) => node.method.toLowerCase() === method.toLowerCase());
482
- const isMutation = mutation !== false && !isQuery && difference(mutation ? mutation.methods : [], query ? query.methods : []).some((method) => node.method.toLowerCase() === method.toLowerCase());
459
+ const queryMethods = new Set(query ? query.methods : []);
460
+ const isMutation = mutation !== false && !isQuery && (mutation ? mutation.methods : []).some((method) => !queryMethods.has(method) && node.method.toLowerCase() === method.toLowerCase());
483
461
  if (!isQuery || isMutation) return null;
484
462
  const importPath = query ? query.importPath : "@tanstack/vue-query";
485
- const baseName = resolver.resolveName(node.operationId);
486
- const capitalize = (s) => s.charAt(0).toUpperCase() + s.slice(1);
487
- const queryName = transformName(`use${capitalize(baseName)}`, "function", transformers);
488
- const queryOptionsName = transformName(`${baseName}QueryOptions`, "function", transformers);
489
- const queryKeyName = transformName(`${baseName}QueryKey`, "const", transformers);
490
- const queryKeyTypeName = transformName(`${capitalize(baseName)}QueryKey`, "type", transformers);
491
- const clientName = transformName(baseName, "function", transformers);
463
+ const queryName = resolver.resolveQueryName(node);
464
+ const queryOptionsName = resolver.resolveQueryOptionsName(node);
465
+ const queryKeyName = resolver.resolveQueryKeyName(node);
466
+ const queryKeyTypeName = resolver.resolveQueryKeyTypeName(node);
467
+ const clientName = resolver.resolveClientName(node);
492
468
  const meta = {
493
- file: resolver.resolveFile({
494
- name: queryName,
495
- extname: ".ts",
496
- tag: node.tags[0] ?? "default",
497
- path: node.path
498
- }, {
469
+ file: resolver.resolveFile(operationFileEntry(node, queryName), {
499
470
  root,
500
471
  output,
501
- group
472
+ group: group ?? void 0
502
473
  }),
503
- fileTs: tsResolver.resolveFile({
504
- name: node.operationId,
505
- extname: ".ts",
506
- tag: node.tags[0] ?? "default",
507
- path: node.path
508
- }, {
474
+ fileTs: tsResolver.resolveFile(operationFileEntry(node, node.operationId), {
509
475
  root,
510
476
  output: pluginTs.options?.output ?? output,
511
- group: pluginTs.options?.group
477
+ group: pluginTs.options?.group ?? void 0
512
478
  })
513
479
  };
514
- const casedParams = ast.caseParams(node.parameters, paramsCasing);
515
- const pathParams = casedParams.filter((p) => p.in === "path");
516
- const queryParams = casedParams.filter((p) => p.in === "query");
517
- const headerParams = casedParams.filter((p) => p.in === "header");
518
- const importedTypeNames = [
519
- node.requestBody?.content?.[0]?.schema ? tsResolver.resolveDataName(node) : void 0,
520
- tsResolver.resolveResponseName(node),
521
- ...pathParams.map((p) => tsResolver.resolvePathParamsName(node, p)),
522
- ...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),
523
- ...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),
524
- ...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode))
525
- ].filter((name) => !!name && name !== queryKeyTypeName);
526
- const pluginZod = parser === "zod" ? driver.getPlugin(pluginZodName) : void 0;
527
- const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : void 0;
528
- const fileZod = zodResolver ? zodResolver.resolveFile({
529
- name: node.operationId,
530
- extname: ".ts",
531
- tag: node.tags[0] ?? "default",
532
- path: node.path
533
- }, {
480
+ const importedTypeNames = resolveOperationTypeNames(node, tsResolver, {
481
+ paramsCasing,
482
+ exclude: [queryKeyTypeName],
483
+ order: "body-response-first"
484
+ });
485
+ const pluginZod = parser === "zod" ? driver.getPlugin(pluginZodName) : null;
486
+ const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
487
+ const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
534
488
  root,
535
489
  output: pluginZod?.options?.output ?? output,
536
- group: pluginZod?.options?.group
537
- }) : void 0;
538
- const zodSchemaNames = zodResolver && parser === "zod" ? [zodResolver.resolveResponseName?.(node), node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : void 0].filter(Boolean) : [];
490
+ group: pluginZod?.options?.group ?? void 0
491
+ }) : null;
492
+ const zodSchemaNames = resolveZodSchemaNames(node, zodResolver);
539
493
  const clientPlugin = driver.getPlugin(pluginClientName);
540
494
  const shouldUseClientPlugin = clientPlugin?.name === pluginClientName && clientOptions.clientType !== "class";
541
- const clientResolver = shouldUseClientPlugin ? driver.getResolver(pluginClientName) : void 0;
542
- const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile({
543
- name: node.operationId,
544
- extname: ".ts",
545
- tag: node.tags[0] ?? "default",
546
- path: node.path
547
- }, {
495
+ const clientResolver = shouldUseClientPlugin ? driver.getResolver(pluginClientName) : null;
496
+ const clientFile = shouldUseClientPlugin ? clientResolver?.resolveFile(operationFileEntry(node, node.operationId), {
548
497
  root,
549
498
  output: clientPlugin?.options?.output ?? output,
550
- group: clientPlugin?.options?.group
551
- }) : void 0;
499
+ group: clientPlugin?.options?.group ?? void 0
500
+ }) : null;
552
501
  const resolvedClientName = shouldUseClientPlugin ? clientResolver?.resolveName(node.operationId) ?? clientName : clientName;
553
502
  return /* @__PURE__ */ jsxs(File, {
554
503
  baseName: meta.file.baseName,
555
504
  path: meta.file.path,
556
505
  meta: meta.file.meta,
557
- banner: resolver.resolveBanner(adapter.inputNode, {
506
+ banner: resolver.resolveBanner(ctx.meta, {
558
507
  output,
559
- config
508
+ config,
509
+ file: {
510
+ path: meta.file.path,
511
+ baseName: meta.file.baseName
512
+ }
560
513
  }),
561
- footer: resolver.resolveFooter(adapter.inputNode, {
514
+ footer: resolver.resolveFooter(ctx.meta, {
562
515
  output,
563
- config
516
+ config,
517
+ file: {
518
+ path: meta.file.path,
519
+ baseName: meta.file.baseName
520
+ }
564
521
  }),
565
522
  children: [
566
- parser === "zod" && fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ jsx(File.Import, {
523
+ fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ jsx(File.Import, {
567
524
  name: zodSchemaNames,
568
525
  root: meta.file.path,
569
526
  path: fileZod.path
570
527
  }),
571
528
  clientOptions.importPath ? /* @__PURE__ */ jsxs(Fragment, { children: [
572
529
  !shouldUseClientPlugin && /* @__PURE__ */ jsx(File.Import, {
573
- name: "fetch",
530
+ name: "client",
574
531
  path: clientOptions.importPath
575
532
  }),
576
533
  /* @__PURE__ */ jsx(File.Import, {
@@ -589,9 +546,9 @@ const queryGenerator = defineGenerator({
589
546
  })
590
547
  ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
591
548
  !shouldUseClientPlugin && /* @__PURE__ */ jsx(File.Import, {
592
- name: ["fetch"],
549
+ name: ["client"],
593
550
  root: meta.file.path,
594
- path: path.resolve(root, ".kubb/fetch.ts")
551
+ path: path.resolve(root, ".kubb/client.ts")
595
552
  }),
596
553
  /* @__PURE__ */ jsx(File.Import, {
597
554
  name: [
@@ -600,13 +557,13 @@ const queryGenerator = defineGenerator({
600
557
  "ResponseErrorConfig"
601
558
  ],
602
559
  root: meta.file.path,
603
- path: path.resolve(root, ".kubb/fetch.ts"),
560
+ path: path.resolve(root, ".kubb/client.ts"),
604
561
  isTypeOnly: true
605
562
  }),
606
563
  clientOptions.dataReturnType === "full" && /* @__PURE__ */ jsx(File.Import, {
607
564
  name: ["ResponseConfig"],
608
565
  root: meta.file.path,
609
- path: path.resolve(root, ".kubb/fetch.ts"),
566
+ path: path.resolve(root, ".kubb/client.ts"),
610
567
  isTypeOnly: true
611
568
  })
612
569
  ] }),
@@ -706,4 +663,4 @@ const queryGenerator = defineGenerator({
706
663
  //#endregion
707
664
  export { mutationGenerator as n, infiniteQueryGenerator as r, queryGenerator as t };
708
665
 
709
- //# sourceMappingURL=generators-CbnIVBgY.js.map
666
+ //# sourceMappingURL=generators-D9TUvYRN.js.map