@kubb/plugin-vue-query 5.0.0-beta.22 → 5.0.0-beta.27

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 (39) hide show
  1. package/dist/{components-CARlYXLX.js → components-B4IlVmNa.js} +58 -43
  2. package/dist/components-B4IlVmNa.js.map +1 -0
  3. package/dist/{components-DycYiYNM.cjs → components-CIedagno.cjs} +58 -43
  4. package/dist/components-CIedagno.cjs.map +1 -0
  5. package/dist/components.cjs +1 -1
  6. package/dist/components.d.ts +3 -3
  7. package/dist/components.js +1 -1
  8. package/dist/{generators-BuDRi6qN.js → generators-Bgcwdua5.js} +46 -30
  9. package/dist/generators-Bgcwdua5.js.map +1 -0
  10. package/dist/{generators-DX8VWz4a.cjs → generators-CuDw35Wp.cjs} +46 -30
  11. package/dist/generators-CuDw35Wp.cjs.map +1 -0
  12. package/dist/generators.cjs +1 -1
  13. package/dist/generators.d.ts +17 -1
  14. package/dist/generators.js +1 -1
  15. package/dist/index.cjs +47 -8
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.ts +29 -1
  18. package/dist/index.js +47 -8
  19. package/dist/index.js.map +1 -1
  20. package/dist/{types-Bkm7bWT3.d.ts → types-D-LjzI_Q.d.ts} +73 -46
  21. package/extension.yaml +779 -255
  22. package/package.json +7 -7
  23. package/src/components/InfiniteQuery.tsx +6 -4
  24. package/src/components/InfiniteQueryOptions.tsx +11 -10
  25. package/src/components/Mutation.tsx +7 -5
  26. package/src/components/Query.tsx +6 -4
  27. package/src/components/QueryKey.tsx +3 -3
  28. package/src/components/QueryOptions.tsx +4 -3
  29. package/src/generators/infiniteQueryGenerator.tsx +19 -10
  30. package/src/generators/mutationGenerator.tsx +17 -9
  31. package/src/generators/queryGenerator.tsx +17 -9
  32. package/src/plugin.ts +32 -4
  33. package/src/resolvers/resolverVueQuery.ts +13 -2
  34. package/src/types.ts +72 -45
  35. package/src/utils.ts +8 -1
  36. package/dist/components-CARlYXLX.js.map +0 -1
  37. package/dist/components-DycYiYNM.cjs.map +0 -1
  38. package/dist/generators-BuDRi6qN.js.map +0 -1
  39. package/dist/generators-DX8VWz4a.cjs.map +0 -1
package/src/types.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import type { ast, Exclude, Generator, Group, Include, Output, Override, PluginFactoryOptions, Resolver } from '@kubb/core'
2
2
  import type { ClientImportPath, PluginClient } from '@kubb/plugin-client'
3
3
 
4
- export type Transformer = (props: { node: ast.OperationNode; casing: 'camelcase' | undefined }) => unknown[]
4
+ export type Transformer = (props: { node: ast.OperationNode; casing: 'camelcase' | undefined }) => Array<unknown>
5
5
 
6
6
  /**
7
7
  * Resolver for Vue Query that provides naming methods for hook functions.
@@ -70,27 +70,32 @@ export type ResolverVueQuery = Resolver & {
70
70
  }
71
71
 
72
72
  /**
73
- * Customize the queryKey.
73
+ * Builds the `queryKey` used by each generated query composable.
74
+ *
75
+ * @note String values are inlined verbatim into generated code. Wrap literal
76
+ * strings in `JSON.stringify(...)`.
74
77
  */
75
78
  type QueryKey = Transformer
76
79
 
77
80
  /**
78
- * Customize the mutationKey.
81
+ * Builds the `mutationKey` used by each generated mutation composable.
82
+ *
83
+ * @note String values are inlined verbatim into generated code. Wrap literal
84
+ * strings in `JSON.stringify(...)`.
79
85
  */
80
86
  type MutationKey = Transformer
81
87
 
82
88
  type Query = {
83
89
  /**
84
- * HTTP methods to use for queries.
90
+ * HTTP methods treated as queries.
85
91
  *
86
92
  * @default ['get']
87
93
  */
88
94
  methods?: Array<string>
89
95
  /**
90
- * Path to the useQuery hook for useQuery functionality.
91
- * Used as `import { useQuery } from '${importPath}'`.
92
- * Accepts relative and absolute paths.
93
- * Path is used as-is; relative paths are based on the generated file location.
96
+ * Module specifier used in the `import { useQuery } from '...'` statement at
97
+ * the top of every generated composable file.
98
+ *
94
99
  * @default '@tanstack/vue-query'
95
100
  */
96
101
  importPath?: string
@@ -98,16 +103,15 @@ type Query = {
98
103
 
99
104
  type Mutation = {
100
105
  /**
101
- * HTTP methods to use for mutations.
106
+ * HTTP methods treated as mutations.
102
107
  *
103
108
  * @default ['post', 'put', 'delete']
104
109
  */
105
110
  methods?: Array<string>
106
111
  /**
107
- * Path to the useMutation hook for useMutation functionality.
108
- * Used as `import { useMutation } from '${importPath}'`.
109
- * Accepts relative and absolute paths.
110
- * Path is used as-is; relative paths are based on the generated file location.
112
+ * Module specifier used in the `import { useMutation } from '...'` statement
113
+ * at the top of every generated composable file.
114
+ *
111
115
  * @default '@tanstack/vue-query'
112
116
  */
113
117
  importPath?: string
@@ -115,106 +119,129 @@ type Mutation = {
115
119
 
116
120
  export type Infinite = {
117
121
  /**
118
- * Specify the params key used for `pageParam`.
122
+ * Name of the query parameter that holds the page cursor.
123
+ *
119
124
  * @default 'id'
120
125
  */
121
- queryParam: string
126
+ queryParam?: string
122
127
  /**
123
- * Which field of the data is used, set it to undefined when no cursor is known.
124
- * @deprecated Use `nextParam` and `previousParam` instead for more flexible pagination handling.
128
+ * Path to the cursor field on the response. Leave undefined when the cursor
129
+ * is not known.
130
+ *
131
+ * @deprecated Use `nextParam` and `previousParam` for richer pagination control.
125
132
  */
126
- cursorParam?: string | undefined
133
+ cursorParam?: string | null
127
134
  /**
128
- * Which field of the data is used to get the cursor for the next page.
129
- * Supports dot notation (e.g. 'pagination.next.id') or array path (e.g. ['pagination', 'next', 'id']) to access nested fields.
135
+ * Path to the next-page cursor on the response. Supports dot notation
136
+ * (`'pagination.next.id'`) or array form.
130
137
  */
131
- nextParam?: string | string[] | undefined
138
+ nextParam?: string | Array<string> | null
132
139
  /**
133
- * Which field of the data is used to get the cursor for the previous page.
134
- * Supports dot notation (e.g. 'pagination.prev.id') or array path (e.g. ['pagination', 'prev', 'id']) to access nested fields.
140
+ * Path to the previous-page cursor on the response. Supports dot notation
141
+ * or array form.
135
142
  */
136
- previousParam?: string | string[] | undefined
143
+ previousParam?: string | Array<string> | null
137
144
  /**
138
- * The initial value, the value of the first page.
145
+ * Initial value for `pageParam` on the first fetch.
146
+ *
139
147
  * @default 0
140
148
  */
141
- initialPageParam: unknown
149
+ initialPageParam?: unknown
142
150
  }
143
151
 
144
152
  export type Options = {
145
153
  /**
146
- * Specify the export location for the files and define the behavior of the output
147
- * @default { path: 'hooks', barrelType: 'named' }
154
+ * Where the generated composables are written and how they are exported.
155
+ *
156
+ * @default { path: 'hooks', barrel: { type: 'named' } }
148
157
  */
149
158
  output?: Output
150
159
  /**
151
- * Group the @tanstack/query hooks based on the provided name.
160
+ * Split generated files into subfolders based on the operation's tag.
152
161
  */
153
162
  group?: Group
163
+ /**
164
+ * HTTP client used inside every generated composable. Mirrors a subset of
165
+ * `pluginClient` options.
166
+ */
154
167
  client?: ClientImportPath & Pick<PluginClient['options'], 'clientType' | 'dataReturnType' | 'baseURL' | 'bundle' | 'paramsCasing'>
155
168
  /**
156
- * Tags, operations, or paths to exclude from generation.
169
+ * Skip operations matching at least one entry in the list.
157
170
  */
158
171
  exclude?: Array<Exclude>
159
172
  /**
160
- * Tags, operations, or paths to include in generation.
173
+ * Restrict generation to operations matching at least one entry in the list.
161
174
  */
162
175
  include?: Array<Include>
163
176
  /**
164
- * Override options for specific tags, operations, or paths.
177
+ * Apply a different options object to operations matching a pattern.
165
178
  */
166
179
  override?: Array<Override<ResolvedOptions>>
167
180
  /**
168
- * Apply casing to parameter names.
181
+ * Rename parameter properties in the generated composables.
182
+ *
183
+ * @note Must match the value of `paramsCasing` on `@kubb/plugin-ts`.
169
184
  */
170
185
  paramsCasing?: 'camelcase'
171
186
  /**
172
- * How parameters are passed: grouped in an object or spread inline.
187
+ * How operation parameters appear in the generated composable signature.
173
188
  *
174
189
  * @default 'inline'
175
190
  */
176
191
  paramsType?: 'object' | 'inline'
177
192
  /**
178
- * How path parameters are passed: grouped in an object or spread inline.
193
+ * How URL path parameters are arranged inside the inline argument list.
179
194
  *
180
195
  * @default 'inline'
181
196
  */
182
197
  pathParamsType?: PluginClient['options']['pathParamsType']
183
198
  /**
184
- * Add infinite query hooks.
199
+ * Enables `useInfiniteQuery` composables for cursor- or page-based pagination.
200
+ * Pass an object to configure how the cursor is read; pass `false` to skip.
201
+ *
202
+ * @default false
185
203
  */
186
204
  infinite?: Partial<Infinite> | false
205
+ /**
206
+ * Custom `queryKey` builder.
207
+ */
187
208
  queryKey?: QueryKey
188
209
  /**
189
- * Configure useQuery behavior.
210
+ * Configures query composables. Set to `false` to skip composable generation
211
+ * and emit only `queryOptions(...)` helpers.
190
212
  */
191
213
  query?: Partial<Query> | false
214
+ /**
215
+ * Custom `mutationKey` builder.
216
+ */
192
217
  mutationKey?: MutationKey
193
218
  /**
194
- * Configure useMutation behavior.
219
+ * Configures mutation composables. Set to `false` to skip mutation generation.
195
220
  */
196
221
  mutation?: Partial<Mutation> | false
197
222
  /**
198
- * Parser to use for validating response data.
223
+ * Validator applied to response bodies before they reach the caller.
224
+ * - `'client'` — no validation.
225
+ * - `'zod'` — pipes responses through schemas from `@kubb/plugin-zod`.
199
226
  */
200
227
  parser?: PluginClient['options']['parser']
201
228
  /**
202
- * Override naming conventions for function names and types.
229
+ * Override how composable names and file paths are built.
203
230
  */
204
231
  resolver?: Partial<ResolverVueQuery> & ThisType<ResolverVueQuery>
205
232
  /**
206
- * AST visitor to transform generated nodes.
233
+ * AST visitor applied to each operation node before printing.
207
234
  */
208
235
  transformer?: ast.Visitor
209
236
  /**
210
- * Additional generators alongside the default generators.
237
+ * Custom generators that run alongside the built-in Vue Query generators.
211
238
  */
212
239
  generators?: Array<Generator<PluginVueQuery>>
213
240
  }
214
241
 
215
242
  type ResolvedOptions = {
216
243
  output: Output
217
- group: Group | undefined
244
+ group: Group | null
218
245
  exclude: NonNullable<Options['exclude']>
219
246
  include: Options['include']
220
247
  override: NonNullable<Options['override']>
@@ -227,9 +254,9 @@ type ResolvedOptions = {
227
254
  * Only used for infinite
228
255
  */
229
256
  infinite: NonNullable<Infinite> | false
230
- queryKey: QueryKey | undefined
257
+ queryKey: QueryKey | null
231
258
  query: NonNullable<Required<Query>> | false
232
- mutationKey: MutationKey | undefined
259
+ mutationKey: MutationKey | null
233
260
  mutation: NonNullable<Required<Mutation>> | false
234
261
  resolver: ResolverVueQuery
235
262
  }
package/src/utils.ts CHANGED
@@ -7,7 +7,14 @@ export {
7
7
  resolveQueryGroupType,
8
8
  resolveZodSchemaNames,
9
9
  } from '@internals/tanstack-query'
10
- export { buildOperationComments as getComments, buildRequestConfigType, getContentTypeInfo, resolveErrorNames, resolveStatusCodeNames } from '@internals/shared'
10
+ export {
11
+ buildOperationComments as getComments,
12
+ buildRequestConfigType,
13
+ getContentTypeInfo,
14
+ resolveErrorNames,
15
+ resolveStatusCodeNames,
16
+ resolveSuccessNames,
17
+ } from '@internals/shared'
11
18
 
12
19
  import { ast } from '@kubb/core'
13
20
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"components-CARlYXLX.js","names":["#options","#transformParam","#eachParam","declarationPrinter","declarationPrinter","declarationPrinter","declarationPrinter","callPrinter","addToValueCalls","declarationPrinter","callPrinter","getComments","declarationPrinter","callPrinter","declarationPrinter","callPrinter","getComments","getComments"],"sources":["../../../internals/utils/src/casing.ts","../../../internals/utils/src/object.ts","../../../internals/utils/src/reserved.ts","../../../internals/utils/src/urlPath.ts","../../../internals/tanstack-query/src/components/MutationKey.tsx","../../../internals/shared/src/operation.ts","../../../internals/tanstack-query/src/utils.ts","../../../internals/tanstack-query/src/components/QueryKey.tsx","../src/utils.ts","../src/components/QueryKey.tsx","../src/components/QueryOptions.tsx","../src/components/InfiniteQuery.tsx","../src/components/InfiniteQueryOptions.tsx","../src/components/Mutation.tsx","../src/components/Query.tsx"],"sourcesContent":["type Options = {\n /**\n * When `true`, dot-separated segments are split on `.` and joined with `/` after casing.\n */\n isFile?: boolean\n /**\n * Text prepended before casing is applied.\n */\n prefix?: string\n /**\n * Text appended before casing is applied.\n */\n suffix?: string\n}\n\n/**\n * Shared implementation for camelCase and PascalCase conversion.\n * Splits on common word boundaries (spaces, hyphens, underscores, dots, slashes, colons)\n * and capitalizes each word according to `pascal`.\n *\n * When `pascal` is `true` the first word is also capitalized (PascalCase), otherwise only subsequent words are.\n */\nfunction toCamelOrPascal(text: string, pascal: boolean): string {\n const normalized = text\n .trim()\n .replace(/([a-z\\d])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/(\\d)([a-z])/g, '$1 $2')\n\n const words = normalized.split(/[\\s\\-_./\\\\:]+/).filter(Boolean)\n\n return words\n .map((word, i) => {\n const allUpper = word.length > 1 && word === word.toUpperCase()\n if (allUpper) return word\n if (i === 0 && !pascal) return word.charAt(0).toLowerCase() + word.slice(1)\n return word.charAt(0).toUpperCase() + word.slice(1)\n })\n .join('')\n .replace(/[^a-zA-Z0-9]/g, '')\n}\n\n/**\n * Splits `text` on `.` and applies `transformPart` to each segment.\n * The last segment receives `isLast = true`, all earlier segments receive `false`.\n * Segments are joined with `/` to form a file path.\n *\n * Only splits on dots followed by a letter so that version numbers\n * embedded in operationIds (e.g. `v2025.0`) are kept intact.\n */\nfunction applyToFileParts(text: string, transformPart: (part: string, isLast: boolean) => string): string {\n const parts = text.split(/\\.(?=[a-zA-Z])/)\n return parts.map((part, i) => transformPart(part, i === parts.length - 1)).join('/')\n}\n\n/**\n * Converts `text` to camelCase.\n * When `isFile` is `true`, dot-separated segments are each cased independently and joined with `/`.\n *\n * @example\n * camelCase('hello-world') // 'helloWorld'\n * camelCase('pet.petId', { isFile: true }) // 'pet/petId'\n */\nexport function camelCase(text: string, { isFile, prefix = '', suffix = '' }: Options = {}): string {\n if (isFile) {\n return applyToFileParts(text, (part, isLast) => camelCase(part, isLast ? { prefix, suffix } : {}))\n }\n\n return toCamelOrPascal(`${prefix} ${text} ${suffix}`, false)\n}\n\n/**\n * Converts `text` to PascalCase.\n * When `isFile` is `true`, the last dot-separated segment is PascalCased and earlier segments are camelCased.\n *\n * @example\n * pascalCase('hello-world') // 'HelloWorld'\n * pascalCase('pet.petId', { isFile: true }) // 'pet/PetId'\n */\nexport function pascalCase(text: string, { isFile, prefix = '', suffix = '' }: Options = {}): string {\n if (isFile) {\n return applyToFileParts(text, (part, isLast) => (isLast ? pascalCase(part, { prefix, suffix }) : camelCase(part)))\n }\n\n return toCamelOrPascal(`${prefix} ${text} ${suffix}`, true)\n}\n\n/**\n * Converts `text` to snake_case.\n *\n * @example\n * snakeCase('helloWorld') // 'hello_world'\n * snakeCase('Hello-World') // 'hello_world'\n */\nexport function snakeCase(text: string, { prefix = '', suffix = '' }: Omit<Options, 'isFile'> = {}): string {\n const processed = `${prefix} ${text} ${suffix}`.trim()\n return processed\n .replace(/([a-z])([A-Z])/g, '$1_$2')\n .replace(/[\\s\\-.]+/g, '_')\n .replace(/[^a-zA-Z0-9_]/g, '')\n .toLowerCase()\n .split('_')\n .filter(Boolean)\n .join('_')\n}\n\n/**\n * Converts `text` to SCREAMING_SNAKE_CASE.\n *\n * @example\n * screamingSnakeCase('helloWorld') // 'HELLO_WORLD'\n */\nexport function screamingSnakeCase(text: string, { prefix = '', suffix = '' }: Omit<Options, 'isFile'> = {}): string {\n return snakeCase(text, { prefix, suffix }).toUpperCase()\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.\n *\n * @example\n * stringify('hello') // '\"hello\"'\n * stringify('\"hello\"') // '\"hello\"'\n */\nexport function stringify(value: string | number | boolean | undefined): string {\n if (value === undefined || value === null) return '\"\"'\n return JSON.stringify(trimQuotes(value.toString()))\n}\n\n/**\n * Converts a plain object into a multiline key-value string suitable for embedding in generated code.\n * Nested objects are recursively stringified with indentation.\n *\n * @example\n * stringifyObject({ foo: 'bar', nested: { a: 1 } })\n * // 'foo: bar,\\nnested: {\\n a: 1\\n }'\n */\nexport function stringifyObject(value: Record<string, unknown>): string {\n const items = Object.entries(value)\n .map(([key, val]) => {\n if (val !== null && typeof val === 'object') {\n return `${key}: {\\n ${stringifyObject(val as Record<string, unknown>)}\\n }`\n }\n return `${key}: ${val}`\n })\n .filter(Boolean)\n return items.join(',\\n')\n}\n\n/**\n * Converts a dot-notation path or string array into an optional-chaining accessor expression.\n *\n * @example\n * getNestedAccessor('pagination.next.id', 'lastPage')\n * // → \"lastPage?.['pagination']?.['next']?.['id']\"\n */\nexport function getNestedAccessor(param: string | string[], accessor: string): string | null {\n const parts = Array.isArray(param) ? param : param.split('.')\n if (parts.length === 0 || (parts.length === 1 && parts[0] === '')) return null\n return `${accessor}?.['${`${parts.join(\"']?.['\")}']`}`\n}\n","/**\n * JavaScript and Java reserved words.\n * @link https://github.com/jonschlinkert/reserved/blob/master/index.js\n */\nconst reservedWords = new Set([\n 'abstract',\n 'arguments',\n 'boolean',\n 'break',\n 'byte',\n 'case',\n 'catch',\n 'char',\n 'class',\n 'const',\n 'continue',\n 'debugger',\n 'default',\n 'delete',\n 'do',\n 'double',\n 'else',\n 'enum',\n 'eval',\n 'export',\n 'extends',\n 'false',\n 'final',\n 'finally',\n 'float',\n 'for',\n 'function',\n 'goto',\n 'if',\n 'implements',\n 'import',\n 'in',\n 'instanceof',\n 'int',\n 'interface',\n 'let',\n 'long',\n 'native',\n 'new',\n 'null',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'return',\n 'short',\n 'static',\n 'super',\n 'switch',\n 'synchronized',\n 'this',\n 'throw',\n 'throws',\n 'transient',\n 'true',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'volatile',\n 'while',\n 'with',\n 'yield',\n 'Array',\n 'Date',\n 'hasOwnProperty',\n 'Infinity',\n 'isFinite',\n 'isNaN',\n 'isPrototypeOf',\n 'length',\n 'Math',\n 'name',\n 'NaN',\n 'Number',\n 'Object',\n 'prototype',\n 'String',\n 'toString',\n 'undefined',\n 'valueOf',\n] as const)\n\n/**\n * Returns `true` when `name` is a syntactically valid JavaScript variable name.\n *\n * @example\n * ```ts\n * isValidVarName('status') // true\n * isValidVarName('class') // false (reserved word)\n * isValidVarName('42foo') // false (starts with digit)\n * ```\n */\nexport function isValidVarName(name: string): boolean {\n if (!name || reservedWords.has(name as 'valueOf')) {\n return false\n }\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name)\n}\n","import { camelCase } from './casing.ts'\nimport { isValidVarName } from './reserved.ts'\n\nexport type URLObject = {\n /**\n * The resolved URL string (Express-style or template literal, depending on context).\n */\n url: string\n /**\n * Extracted path parameters as a key-value map, or `undefined` when the path has none.\n */\n params?: Record<string, string>\n}\n\ntype ObjectOptions = {\n /**\n * Controls whether the `url` is rendered as an Express path or a template literal.\n * @default 'path'\n */\n type?: 'path' | 'template'\n /**\n * Optional transform applied to each extracted parameter name.\n */\n replacer?: (pathParam: string) => string\n /**\n * When `true`, the result is serialized to a string expression instead of a plain object.\n */\n stringify?: boolean\n}\n\n/**\n * Supported identifier casing strategies for path parameters.\n */\ntype PathCasing = 'camelcase'\n\ntype Options = {\n /**\n * Casing strategy applied to path parameter names.\n * @default undefined (original identifier preserved)\n */\n casing?: PathCasing\n}\n\n/**\n * Parses and transforms an OpenAPI/Swagger path string into various URL formats.\n *\n * @example\n * const p = new URLPath('/pet/{petId}')\n * p.URL // '/pet/:petId'\n * p.template // '`/pet/${petId}`'\n */\nexport class URLPath {\n /**\n * The raw OpenAPI/Swagger path string, e.g. `/pet/{petId}`.\n */\n path: string\n\n #options: Options\n\n constructor(path: string, options: Options = {}) {\n this.path = path\n this.#options = options\n }\n\n /** Converts the OpenAPI path to Express-style colon syntax, e.g. `/pet/{petId}` → `/pet/:petId`.\n *\n * @example\n * ```ts\n * new URLPath('/pet/{petId}').URL // '/pet/:petId'\n * ```\n */\n get URL(): string {\n return this.toURLPath()\n }\n\n /** Returns `true` when `path` is a fully-qualified URL (e.g. starts with `https://`).\n *\n * @example\n * ```ts\n * new URLPath('https://petstore.swagger.io/v2/pet').isURL // true\n * new URLPath('/pet/{petId}').isURL // false\n * ```\n */\n get isURL(): boolean {\n try {\n return !!new URL(this.path).href\n } catch {\n return false\n }\n }\n\n /**\n * Converts the OpenAPI path to a TypeScript template literal string.\n *\n * @example\n * new URLPath('/pet/{petId}').template // '`/pet/${petId}`'\n * new URLPath('/account/monetary-accountID').template // '`/account/${monetaryAccountId}`'\n */\n get template(): string {\n return this.toTemplateString()\n }\n\n /** Returns the path and its extracted params as a structured `URLObject`, or as a stringified expression when `stringify` is set.\n *\n * @example\n * ```ts\n * new URLPath('/pet/{petId}').object\n * // { url: '/pet/:petId', params: { petId: 'petId' } }\n * ```\n */\n get object(): URLObject | string {\n return this.toObject()\n }\n\n /** Returns a map of path parameter names, or `undefined` when the path has no parameters.\n *\n * @example\n * ```ts\n * new URLPath('/pet/{petId}').params // { petId: 'petId' }\n * new URLPath('/pet').params // undefined\n * ```\n */\n get params(): Record<string, string> | undefined {\n return this.toParamsObject()\n }\n\n #transformParam(raw: string): string {\n const param = isValidVarName(raw) ? raw : camelCase(raw)\n return this.#options.casing === 'camelcase' ? camelCase(param) : param\n }\n\n /**\n * Iterates over every `{param}` token in `path`, calling `fn` with the raw token and transformed name.\n */\n #eachParam(fn: (raw: string, param: string) => void): void {\n for (const match of this.path.matchAll(/\\{([^}]+)\\}/g)) {\n const raw = match[1]!\n fn(raw, this.#transformParam(raw))\n }\n }\n\n toObject({ type = 'path', replacer, stringify }: ObjectOptions = {}): URLObject | string {\n const object = {\n url: type === 'path' ? this.toURLPath() : this.toTemplateString({ replacer }),\n params: this.toParamsObject(),\n }\n\n if (stringify) {\n if (type === 'template') {\n return JSON.stringify(object).replaceAll(\"'\", '').replaceAll(`\"`, '')\n }\n\n if (object.params) {\n return `{ url: '${object.url}', params: ${JSON.stringify(object.params).replaceAll(\"'\", '').replaceAll(`\"`, '')} }`\n }\n\n return `{ url: '${object.url}' }`\n }\n\n return object\n }\n\n /**\n * Converts the OpenAPI path to a TypeScript template literal string.\n * An optional `replacer` can transform each extracted parameter name before interpolation.\n *\n * @example\n * new URLPath('/pet/{petId}').toTemplateString() // '`/pet/${petId}`'\n */\n toTemplateString({ prefix, replacer }: { prefix?: string | null; replacer?: (pathParam: string) => string } = {}): string {\n const parts = this.path.split(/\\{([^}]+)\\}/)\n const result = parts\n .map((part, i) => {\n if (i % 2 === 0) return part\n const param = this.#transformParam(part)\n return `\\${${replacer ? replacer(param) : param}}`\n })\n .join('')\n\n return `\\`${prefix ?? ''}${result}\\``\n }\n\n /**\n * Extracts all `{param}` segments from the path and returns them as a key-value map.\n * An optional `replacer` transforms each parameter name in both key and value positions.\n * Returns `undefined` when no path parameters are found.\n *\n * @example\n * ```ts\n * new URLPath('/pet/{petId}/tag/{tagId}').toParamsObject()\n * // { petId: 'petId', tagId: 'tagId' }\n * ```\n */\n toParamsObject(replacer?: (pathParam: string) => string): Record<string, string> | undefined {\n const params: Record<string, string> = {}\n\n this.#eachParam((_raw, param) => {\n const key = replacer ? replacer(param) : param\n params[key] = key\n })\n\n return Object.keys(params).length > 0 ? params : undefined\n }\n\n /** Converts the OpenAPI path to Express-style colon syntax.\n *\n * @example\n * ```ts\n * new URLPath('/pet/{petId}').toURLPath() // '/pet/:petId'\n * ```\n */\n toURLPath(): string {\n return this.path.replace(/\\{([^}]+)\\}/g, ':$1')\n }\n}\n","import { URLPath } from '@internals/utils'\nimport { ast } from '@kubb/core'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { Transformer } from '../types.ts'\n\ntype Props = {\n name: string\n node: ast.OperationNode\n paramsCasing: 'camelcase' | undefined\n pathParamsType: 'object' | 'inline'\n transformer: Transformer | undefined\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nexport const mutationKeyTransformer: Transformer = ({ node, casing }) => {\n const path = new URLPath(node.path, { casing })\n return [`{ url: '${path.toURLPath()}' }`]\n}\n\nexport function MutationKey({ name, paramsCasing, node, transformer = mutationKeyTransformer }: Props): KubbReactNode {\n const paramsNode = ast.createFunctionParameters({ params: [] })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const keys = transformer({ node, casing: paramsCasing })\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function.Arrow name={name} export params={paramsSignature} singleLine>\n {`[${keys.join(', ')}] as const`}\n </Function.Arrow>\n </File.Source>\n )\n}\n","import { URLPath } from '@internals/utils'\nimport { ast } from '@kubb/core'\n\nexport type ContentTypeInfo = {\n contentTypes: string[]\n isMultipleContentTypes: boolean\n contentTypeUnion: string\n defaultContentType: string\n hasFormData: boolean\n}\n\nexport type RequestConfigResolver = {\n resolveDataName(node: ast.OperationNode): string\n}\n\nexport type ResponseStatusNameResolver = {\n resolveResponseStatusName(node: ast.OperationNode, statusCode: ast.StatusCode): string\n}\n\nexport type ResponseNameResolver = ResponseStatusNameResolver & {\n resolveResponseName(node: ast.OperationNode): string\n}\n\nexport type OperationTypeNameResolver = RequestConfigResolver &\n ResponseNameResolver & {\n resolvePathParamsName(node: ast.OperationNode, param: ast.ParameterNode): string\n resolveQueryParamsName(node: ast.OperationNode, param: ast.ParameterNode): string\n resolveHeaderParamsName(node: ast.OperationNode, param: ast.ParameterNode): string\n }\n\nexport type OperationCommentLink = 'pathTemplate' | 'urlPath' | false | ((node: ast.OperationNode) => string | undefined)\n\nexport type BuildOperationCommentsOptions = {\n link?: OperationCommentLink\n linkPosition?: 'beforeDeprecated' | 'afterDeprecated'\n splitLines?: boolean\n}\n\ntype ResponseLike = {\n statusCode: ast.StatusCode | number | string\n}\n\nexport type OperationParameterGroups = Record<ast.ParameterNode['in'], Array<ast.ParameterNode>>\n\nexport type ResolveOperationTypeNameOptions = {\n paramsCasing?: 'camelcase'\n responseStatusNames?: boolean | 'error'\n exclude?: ReadonlyArray<string | undefined>\n order?: 'params-first' | 'body-response-first'\n}\n\nfunction getOperationLink(node: ast.OperationNode, link: OperationCommentLink): string | undefined {\n if (!link) {\n return undefined\n }\n\n if (typeof link === 'function') {\n return link(node)\n }\n\n if (link === 'urlPath') {\n return node.path ? `{@link ${new URLPath(node.path).URL}}` : undefined\n }\n\n return `{@link ${node.path.replaceAll('{', ':').replaceAll('}', '')}}`\n}\n\nexport function getContentTypeInfo(node: ast.OperationNode): ContentTypeInfo {\n const contentTypes = node.requestBody?.content?.map((e) => e.contentType) ?? []\n const isMultipleContentTypes = contentTypes.length > 1\n\n return {\n contentTypes,\n isMultipleContentTypes,\n contentTypeUnion: isMultipleContentTypes ? contentTypes.map((ct) => JSON.stringify(ct)).join(' | ') : '',\n defaultContentType: contentTypes[0] ?? 'application/json',\n hasFormData: contentTypes.some((ct) => ct === 'multipart/form-data'),\n }\n}\n\nexport function buildRequestConfigType(node: ast.OperationNode, resolver: RequestConfigResolver): string {\n const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : undefined\n const { isMultipleContentTypes, contentTypeUnion } = getContentTypeInfo(node)\n const configType = requestName ? `Partial<RequestConfig<${requestName}>>` : 'Partial<RequestConfig>'\n const configProps = ['client?: Client', isMultipleContentTypes ? `contentType?: ${contentTypeUnion}` : undefined].filter(Boolean).join('; ')\n\n return `${configType} & { ${configProps} }`\n}\n\nexport function buildOperationComments(node: ast.OperationNode, options: BuildOperationCommentsOptions = {}): Array<string> {\n const { link = 'pathTemplate', linkPosition = 'afterDeprecated', splitLines = false } = options\n const linkComment = getOperationLink(node, link)\n const comments =\n linkPosition === 'beforeDeprecated'\n ? [node.description && `@description ${node.description}`, node.summary && `@summary ${node.summary}`, linkComment, node.deprecated && '@deprecated']\n : [node.description && `@description ${node.description}`, node.summary && `@summary ${node.summary}`, node.deprecated && '@deprecated', linkComment]\n\n const filteredComments = comments.filter((comment): comment is string => Boolean(comment))\n\n if (!splitLines) {\n return filteredComments\n }\n\n return filteredComments.flatMap((text) => text.split(/\\r?\\n/).map((line) => line.trim())).filter((comment): comment is string => Boolean(comment))\n}\n\nexport function getOperationParameters(node: ast.OperationNode, options: { paramsCasing?: 'camelcase' } = {}): OperationParameterGroups {\n const params = ast.caseParams(node.parameters, options.paramsCasing)\n\n return {\n path: params.filter((param) => param.in === 'path'),\n query: params.filter((param) => param.in === 'query'),\n header: params.filter((param) => param.in === 'header'),\n cookie: params.filter((param) => param.in === 'cookie'),\n }\n}\n\nexport function getStatusCodeNumber(statusCode: ast.StatusCode | number | string): number | undefined {\n const code = Number(statusCode)\n\n return Number.isNaN(code) ? undefined : code\n}\n\nexport function isSuccessStatusCode(statusCode: ast.StatusCode | number | string): boolean {\n const code = getStatusCodeNumber(statusCode)\n\n return code !== undefined && code >= 200 && code < 300\n}\n\nexport function isErrorStatusCode(statusCode: ast.StatusCode | number | string): boolean {\n const code = getStatusCodeNumber(statusCode)\n\n return code !== undefined && code >= 400\n}\n\nexport function getSuccessResponses<TResponse extends ResponseLike>(responses: ReadonlyArray<TResponse>): Array<TResponse> {\n return responses.filter((response) => isSuccessStatusCode(response.statusCode))\n}\n\nexport function getOperationSuccessResponses(node: ast.OperationNode): Array<ast.ResponseNode> {\n return getSuccessResponses(node.responses)\n}\n\nexport function getPrimarySuccessResponse(node: ast.OperationNode): ast.ResponseNode | undefined {\n return getOperationSuccessResponses(node)[0]\n}\n\nexport function resolveErrorNames(node: ast.OperationNode, resolver: ResponseStatusNameResolver): string[] {\n return node.responses\n .filter((response) => isErrorStatusCode(response.statusCode))\n .map((response) => resolver.resolveResponseStatusName(node, response.statusCode))\n}\n\nexport function resolveStatusCodeNames(node: ast.OperationNode, resolver: ResponseStatusNameResolver): string[] {\n return node.responses.map((response) => resolver.resolveResponseStatusName(node, response.statusCode))\n}\n\nconst typeNamesByResolver = new WeakMap<OperationTypeNameResolver, Map<string, string[]>>()\n\nexport function resolveOperationTypeNames(\n node: ast.OperationNode,\n resolver: OperationTypeNameResolver,\n options: ResolveOperationTypeNameOptions = {},\n): string[] {\n const cacheKey = `${node.operationId}\\0${options.paramsCasing ?? ''}\\0${options.order ?? ''}\\0${options.responseStatusNames ?? ''}\\0${(options.exclude ?? []).join(',')}`\n let byResolver = typeNamesByResolver.get(resolver)\n if (byResolver) {\n const cached = byResolver.get(cacheKey)\n if (cached) return cached\n } else {\n byResolver = new Map()\n typeNamesByResolver.set(resolver, byResolver)\n }\n\n const { path, query, header } = getOperationParameters(node, { paramsCasing: options.paramsCasing })\n const responseStatusNames =\n options.responseStatusNames === 'error'\n ? resolveErrorNames(node, resolver)\n : options.responseStatusNames === false\n ? []\n : resolveStatusCodeNames(node, resolver)\n const exclude = new Set(options.exclude ?? [])\n const paramNames = [\n ...path.map((param) => resolver.resolvePathParamsName(node, param)),\n ...query.map((param) => resolver.resolveQueryParamsName(node, param)),\n ...header.map((param) => resolver.resolveHeaderParamsName(node, param)),\n ]\n const bodyAndResponseNames = [node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : undefined, resolver.resolveResponseName(node)]\n const names =\n options.order === 'body-response-first'\n ? [...bodyAndResponseNames, ...paramNames, ...responseStatusNames]\n : [...paramNames, ...bodyAndResponseNames, ...responseStatusNames]\n\n const result = names.filter((name): name is string => Boolean(name) && !exclude.has(name))\n byResolver.set(cacheKey, result)\n return result\n}\n\nexport function resolveResponseTypes(node: ast.OperationNode, resolver: ResponseNameResolver): Array<[statusCode: number | 'default', typeName: string]> {\n const types: Array<[number | 'default', string]> = []\n\n for (const response of node.responses) {\n if (response.statusCode === 'default') {\n types.push(['default', resolver.resolveResponseName(node)])\n continue\n }\n\n const code = getStatusCodeNumber(response.statusCode)\n if (code === undefined) {\n continue\n }\n\n types.push([code, isSuccessStatusCode(code) ? resolver.resolveResponseName(node) : resolver.resolveResponseStatusName(node, response.statusCode)])\n }\n\n return types\n}\n\nexport function findSuccessStatusCode(responses: Array<{ statusCode: ast.StatusCode | number | string }>): ast.StatusCode | undefined {\n for (const response of responses) {\n if (isSuccessStatusCode(response.statusCode)) {\n return response.statusCode as ast.StatusCode\n }\n }\n\n return undefined\n}\n","import { ast } from '@kubb/core'\nimport type { PluginTs } from '@kubb/plugin-ts'\n\nexport function transformName(name: string, type: string, transformers?: { name?: (name: string, type?: string) => string }): string {\n return transformers?.name?.(name, type) || name\n}\n\ntype OverrideEntry<TOptions> = {\n type: string\n pattern: string | RegExp\n options?: Partial<TOptions>\n}\n\nfunction matchesPattern(node: ast.OperationNode, ov: { type: string; pattern: string | RegExp }): boolean {\n const { type, pattern } = ov\n const matches = (value: string) => (typeof pattern === 'string' ? value === pattern : pattern.test(value))\n if (type === 'operationId') return matches(node.operationId)\n if (type === 'tag') return node.tags.some((t) => matches(t))\n if (type === 'path') return matches(node.path)\n if (type === 'method') return matches(node.method)\n return false\n}\n\n/**\n * Resolves per-operation overrides (first matching override wins).\n *\n * @example\n * ```ts\n * const opts = resolveOperationOverrides(node, override)\n * const queryOpts = 'query' in opts ? opts.query : defaultQuery\n * ```\n */\nexport function resolveOperationOverrides<TOptions>(node: ast.OperationNode, override?: ReadonlyArray<OverrideEntry<TOptions>>): Partial<TOptions> {\n if (!override) return {}\n const match = override.find((ov) => matchesPattern(node, ov))\n return match?.options ?? {}\n}\n\ntype ZodSchemaNameResolverLike = {\n resolveResponseName?: (node: ast.OperationNode) => string | undefined\n resolveDataName?: (node: ast.OperationNode) => string | undefined\n}\n\n/**\n * Collects the Zod schema import names for an operation (response + request body).\n *\n * Returns an empty array when no resolver is provided or the operation has no request body schema.\n */\nexport function resolveZodSchemaNames(node: ast.OperationNode, zodResolver: ZodSchemaNameResolverLike | undefined): string[] {\n if (!zodResolver) return []\n return [zodResolver.resolveResponseName?.(node), node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : undefined].filter(\n (n): n is string => Boolean(n),\n )\n}\n\n/**\n * Resolve the type for a single path parameter.\n *\n * - When the resolver's group name differs from the individual param name\n * (e.g. kubbV4) → `GroupName['paramName']` (member access).\n * - When they match (v5 default) → `TypeName` (direct reference).\n */\nexport function resolvePathParamType(node: ast.OperationNode, param: ast.ParameterNode, resolver: PluginTs['resolver']): ast.ParamsTypeNode {\n const individualName = resolver.resolveParamName(node, param)\n const groupName = resolver.resolvePathParamsName(node, param)\n\n if (groupName !== individualName) {\n return ast.createParamsType({ variant: 'member', base: groupName, key: param.name })\n }\n return ast.createParamsType({ variant: 'reference', name: individualName })\n}\n\ntype QueryGroupResult = { type: ast.ParamsTypeNode; optional: boolean } | undefined\n\n/**\n * Derive a query-params group type from the resolver.\n * Returns `undefined` when no query params exist or when the group name\n * equals the individual param name (no real group).\n */\nexport function resolveQueryGroupType(node: ast.OperationNode, params: ast.ParameterNode[], resolver: PluginTs['resolver']): QueryGroupResult {\n if (!params.length) return undefined\n const firstParam = params[0]!\n const groupName = resolver.resolveQueryParamsName(node, firstParam)\n if (groupName === resolver.resolveParamName(node, firstParam)) return undefined\n return { type: ast.createParamsType({ variant: 'reference', name: groupName }), optional: params.every((p) => !p.required) }\n}\n\n/**\n * Derive a header-params group type from the resolver.\n */\nexport function resolveHeaderGroupType(node: ast.OperationNode, params: ast.ParameterNode[], resolver: PluginTs['resolver']): QueryGroupResult {\n if (!params.length) return undefined\n const firstParam = params[0]!\n const groupName = resolver.resolveHeaderParamsName(node, firstParam)\n if (groupName === resolver.resolveParamName(node, firstParam)) return undefined\n return { type: ast.createParamsType({ variant: 'reference', name: groupName }), optional: params.every((p) => !p.required) }\n}\n\n/**\n * Build a single `FunctionParameterNode` for a query or header group.\n */\nexport function buildGroupParam(\n name: string,\n node: ast.OperationNode,\n params: ast.ParameterNode[],\n groupType: QueryGroupResult,\n resolver: PluginTs['resolver'],\n): ast.FunctionParameterNode[] {\n if (groupType) {\n return [ast.createFunctionParameter({ name, type: groupType.type, optional: groupType.optional })]\n }\n if (params.length) {\n const structProps = params.map((p) => ({\n name: p.name,\n type: ast.createParamsType({ variant: 'reference', name: resolver.resolveParamName(node, p) }),\n optional: !p.required,\n }))\n return [\n ast.createFunctionParameter({\n name,\n type: ast.createParamsType({ variant: 'struct', properties: structProps }),\n optional: params.every((p) => !p.required),\n }),\n ]\n }\n return []\n}\n\n/**\n * Build QueryKey params: pathParams + data + queryParams (NO headers, NO config).\n */\nexport function buildQueryKeyParams(\n node: ast.OperationNode,\n options: {\n pathParamsType: 'object' | 'inline'\n paramsCasing: 'camelcase' | undefined\n resolver: PluginTs['resolver']\n },\n): ast.FunctionParametersNode {\n const { pathParamsType, paramsCasing, resolver } = options\n\n const casedParams = ast.caseParams(node.parameters, paramsCasing)\n const pathParams = casedParams.filter((p) => p.in === 'path')\n const queryParams = casedParams.filter((p) => p.in === 'query')\n\n const queryGroupType = resolveQueryGroupType(node, queryParams, resolver)\n\n const bodyType = node.requestBody?.content?.[0]?.schema ? ast.createParamsType({ variant: 'reference', name: resolver.resolveDataName(node) }) : undefined\n const bodyRequired = node.requestBody?.required ?? false\n\n const params: Array<ast.FunctionParameterNode | ast.ParameterGroupNode> = []\n\n // Path params\n if (pathParams.length) {\n const pathChildren = pathParams.map((p) =>\n ast.createFunctionParameter({ name: p.name, type: resolvePathParamType(node, p, resolver), optional: !p.required }),\n )\n params.push({\n kind: 'ParameterGroup',\n properties: pathChildren,\n inline: pathParamsType === 'inline',\n default: pathChildren.every((c) => c.optional) ? '{}' : undefined,\n })\n }\n\n // Request body\n if (bodyType) {\n params.push(ast.createFunctionParameter({ name: 'data', type: bodyType, optional: !bodyRequired }))\n }\n\n // Query params\n params.push(...buildGroupParam('params', node, queryParams, queryGroupType, resolver))\n\n return ast.createFunctionParameters({ params })\n}\n\nexport function buildEnabledCheck(paramsNode: ast.FunctionParametersNode): string {\n const required: string[] = []\n for (const param of paramsNode.params) {\n if ('kind' in param && (param as ast.ParameterGroupNode).kind === 'ParameterGroup') {\n const group = param as ast.ParameterGroupNode\n for (const child of group.properties) {\n if (!child.optional && child.default === undefined) {\n required.push(child.name)\n }\n }\n } else {\n const fp = param as ast.FunctionParameterNode\n if (!fp.optional && fp.default === undefined) {\n required.push(fp.name)\n }\n }\n }\n return required.join(' && ')\n}\n","import { getOperationParameters } from '@internals/shared'\nimport { URLPath } from '@internals/utils'\nimport type { ast } from '@kubb/core'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function, Type } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { Transformer } from '../types.ts'\nimport { buildQueryKeyParams } from '../utils.ts'\n\ntype Props = {\n name: string\n typeName: string\n node: ast.OperationNode\n tsResolver: PluginTs['resolver']\n paramsCasing: 'camelcase' | undefined\n pathParamsType: 'object' | 'inline'\n transformer: Transformer | undefined\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nexport const queryKeyTransformer: Transformer = ({ node, casing }) => {\n const path = new URLPath(node.path, { casing })\n const hasQueryParams = getOperationParameters(node).query.length > 0\n const hasRequestBody = !!node.requestBody?.content?.[0]?.schema\n\n return [\n path.toObject({ type: 'path', stringify: true }),\n hasQueryParams ? '...(params ? [params] : [])' : undefined,\n hasRequestBody ? '...(data ? [data] : [])' : undefined,\n ].filter(Boolean) as string[]\n}\n\nexport function QueryKey({ name, node, tsResolver, paramsCasing, pathParamsType, typeName, transformer = queryKeyTransformer }: Props): KubbReactNode {\n const paramsNode = buildQueryKeyParams(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const keys = transformer({ node, casing: paramsCasing })\n\n return (\n <>\n <File.Source name={name} isExportable isIndexable>\n <Function.Arrow name={name} export params={paramsSignature} singleLine>\n {`[${keys.join(', ')}] as const`}\n </Function.Arrow>\n </File.Source>\n <File.Source name={typeName} isTypeOnly>\n <Type name={typeName}>{`ReturnType<typeof ${name}>`}</Type>\n </File.Source>\n </>\n )\n}\n","export {\n buildGroupParam,\n buildQueryKeyParams,\n resolveHeaderGroupType,\n resolveOperationOverrides,\n resolvePathParamType,\n resolveQueryGroupType,\n resolveZodSchemaNames,\n} from '@internals/tanstack-query'\nexport { buildOperationComments as getComments, buildRequestConfigType, getContentTypeInfo, resolveErrorNames, resolveStatusCodeNames } from '@internals/shared'\n\nimport { ast } from '@kubb/core'\n\nexport function printType(typeNode: ast.ParamsTypeNode | undefined): string {\n if (!typeNode) return 'unknown'\n if (typeNode.variant === 'reference') return typeNode.name\n if (typeNode.variant === 'member') return `${typeNode.base}['${typeNode.key}']`\n if (typeNode.variant === 'struct') {\n const parts = typeNode.properties.map((p) => {\n const typeStr = printType(p.type)\n const key = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(p.name) ? p.name : JSON.stringify(p.name)\n return p.optional ? `${key}?: ${typeStr}` : `${key}: ${typeStr}`\n })\n return `{ ${parts.join('; ')} }`\n }\n return 'unknown'\n}\n\nexport function wrapWithMaybeRefOrGetter(paramsNode: ast.FunctionParametersNode, skip?: (name: string) => boolean): ast.FunctionParametersNode {\n const wrappedParams = paramsNode.params.map((param) => {\n if ('kind' in param && (param as ast.ParameterGroupNode).kind === 'ParameterGroup') {\n const group = param as ast.ParameterGroupNode\n return {\n ...group,\n properties: group.properties.map((p) => ({\n ...p,\n type: p.type ? ast.createParamsType({ variant: 'reference', name: `MaybeRefOrGetter<${printType(p.type)}>` }) : p.type,\n })),\n }\n }\n const fp = param as ast.FunctionParameterNode\n if (skip?.(fp.name)) return fp\n return {\n ...fp,\n type: fp.type ? ast.createParamsType({ variant: 'reference', name: `MaybeRefOrGetter<${printType(fp.type)}>` }) : fp.type,\n }\n })\n return ast.createFunctionParameters({ params: wrappedParams })\n}\n","import type { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function, Type } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport { queryKeyTransformer } from '@internals/tanstack-query'\nimport type { Transformer } from '../types.ts'\nimport { buildQueryKeyParams, wrapWithMaybeRefOrGetter } from '../utils.ts'\n\ntype Props = {\n name: string\n typeName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: 'camelcase' | undefined\n pathParamsType: 'object' | 'inline'\n transformer: Transformer | undefined\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nexport function buildQueryKeyParamsNode(\n node: ast.OperationNode,\n options: { pathParamsType: 'object' | 'inline'; paramsCasing: 'camelcase' | undefined; resolver: ResolverTs },\n): ast.FunctionParametersNode {\n return wrapWithMaybeRefOrGetter(buildQueryKeyParams(node, options))\n}\n\nexport function QueryKey({ name, node, tsResolver, paramsCasing, pathParamsType, typeName, transformer = queryKeyTransformer }: Props): KubbReactNode {\n const paramsNode = buildQueryKeyParamsNode(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const keys = transformer({\n node,\n casing: paramsCasing,\n })\n\n return (\n <>\n <File.Source name={name} isExportable isIndexable>\n <Function.Arrow name={name} export params={paramsSignature} singleLine>\n {`[${keys.join(', ')}] as const`}\n </Function.Arrow>\n </File.Source>\n <File.Source name={typeName} isExportable isIndexable isTypeOnly>\n <Type name={typeName} export>\n {`ReturnType<typeof ${name}>`}\n </Type>\n </File.Source>\n </>\n )\n}\n","import { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport { buildEnabledCheck } from '@internals/tanstack-query'\nimport type { PluginVueQuery } from '../types.ts'\nimport { resolveErrorNames, wrapWithMaybeRefOrGetter } from '../utils.ts'\nimport { buildQueryKeyParamsNode } from './QueryKey.tsx'\n\ntype Props = {\n name: string\n clientName: string\n queryKeyName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\n\nexport function getQueryOptionsParams(\n node: ast.OperationNode,\n options: {\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n const { paramsType, paramsCasing, pathParamsType, resolver } = options\n const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : undefined\n\n const baseParams = ast.createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver,\n extraParams: [\n ast.createFunctionParameter({\n name: 'config',\n type: ast.createParamsType({\n variant: 'reference',\n name: requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }',\n }),\n default: '{}',\n }),\n ],\n })\n\n return wrapWithMaybeRefOrGetter(baseParams, (name) => name === 'config')\n}\n\nexport function QueryOptions({\n name,\n clientName,\n dataReturnType,\n node,\n tsResolver,\n paramsCasing,\n paramsType,\n pathParamsType,\n queryKeyName,\n}: Props): KubbReactNode {\n const responseName = tsResolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, tsResolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const paramsNode = getQueryOptionsParams(node, { paramsType, paramsCasing, pathParamsType, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const rawParamsCall = callPrinter.print(paramsNode) ?? ''\n\n // Transform: wrap non-config params with toValue(), add signal to config\n const clientCallStr = rawParamsCall.replace(/\\bconfig\\b(?=[^,]*$)/, '{ ...config, signal: config.signal ?? signal }')\n\n const queryKeyParamsNode = buildQueryKeyParamsNode(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? ''\n\n const enabledSource = buildEnabledCheck(queryKeyParamsNode)\n const enabledText = enabledSource\n ? `enabled: () => ${enabledSource\n .split(' && ')\n .map((n) => `!!toValue(${n.trim()})`)\n .join(' && ')},`\n : ''\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export params={paramsSignature}>\n {`\n const queryKey = ${queryKeyName}(${queryKeyParamsCall})\n return queryOptions<${TData}, ${TError}, ${TData}>({\n ${enabledText}\n queryKey,\n queryFn: async ({ signal }) => {\n return ${clientName}(${addToValueCalls(clientCallStr)})\n },\n })\n`}\n </Function>\n </File.Source>\n )\n}\n\n/**\n * Wraps parameter names with `toValue()` in the client call string,\n * except for 'config'-related params (which are already plain objects).\n *\n * Handles both inline params (`petId, config`) and object shorthand\n * params (`{ petId }, config`) by expanding to `{ petId: toValue(petId) }`.\n */\nfunction addToValueCalls(callStr: string): string {\n // Step 1: Transform shorthand object params like { petId } → { petId: toValue(petId) }\n let result = callStr.replace(/\\{\\s*([\\w,\\s]+)\\s*\\}(?=\\s*,)/g, (match, inner: string) => {\n // Only transform simple shorthand (no colons, no spread)\n if (inner.includes(':') || inner.includes('...')) return match\n const keys = inner\n .split(',')\n .map((k: string) => k.trim())\n .filter(Boolean)\n const wrapped = keys.map((k: string) => `${k}: toValue(${k})`).join(', ')\n return `{ ${wrapped} }`\n })\n\n // Step 2: Handle standalone identifiers like `data, params`\n result = result.replace(/(?<![{.:?])\\b(\\w+)\\b(?=\\s*,)/g, (match, name: string) => {\n if (name === 'config' || name === 'signal' || name === 'undefined') return match\n if (match.includes('toValue(')) return match\n return `toValue(${name})`\n })\n\n return result\n}\n","import { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { Infinite, PluginVueQuery } from '../types.ts'\nimport { getComments, resolveErrorNames, wrapWithMaybeRefOrGetter } from '../utils.ts'\nimport { buildQueryKeyParamsNode } from './QueryKey.tsx'\nimport { getQueryOptionsParams } from './QueryOptions.tsx'\n\ntype Props = {\n name: string\n queryOptionsName: string\n queryKeyName: string\n queryKeyTypeName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n initialPageParam: Infinite['initialPageParam']\n queryParam?: Infinite['queryParam']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\n\nfunction buildInfiniteQueryParamsNode(\n node: ast.OperationNode,\n options: {\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n const { paramsType, paramsCasing, pathParamsType, dataReturnType, resolver } = options\n const responseName = resolver.resolveResponseName(node)\n const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : undefined\n const errorNames = resolveErrorNames(node, resolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const optionsParam = ast.createFunctionParameter({\n name: 'options',\n type: ast.createParamsType({\n variant: 'reference',\n name: `{\n query?: Partial<UseInfiniteQueryOptions<${[TData, TError, 'TQueryData', 'TQueryKey', 'TQueryData'].join(', ')}>> & { client?: QueryClient },\n client?: ${requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }'}\n}`,\n }),\n default: '{}',\n })\n\n const baseParams = ast.createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver,\n extraParams: [optionsParam],\n })\n\n return wrapWithMaybeRefOrGetter(baseParams, (name) => name === 'options')\n}\n\nexport function InfiniteQuery({\n name,\n queryKeyTypeName,\n queryOptionsName,\n queryKeyName,\n paramsType,\n paramsCasing,\n pathParamsType,\n dataReturnType,\n node,\n tsResolver,\n}: Props): KubbReactNode {\n const responseName = tsResolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, tsResolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n const returnType = `UseInfiniteQueryReturnType<${['TData', TError].join(', ')}> & { queryKey: TQueryKey }`\n const generics = [`TData = InfiniteData<${TData}>`, `TQueryData = ${TData}`, `TQueryKey extends QueryKey = ${queryKeyTypeName}`]\n\n const queryKeyParamsNode = buildQueryKeyParamsNode(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? ''\n\n const queryOptionsParamsNode = getQueryOptionsParams(node, { paramsType, paramsCasing, pathParamsType, resolver: tsResolver })\n const queryOptionsParamsCall = callPrinter.print(queryOptionsParamsNode) ?? ''\n\n const paramsNode = buildInfiniteQueryParamsNode(node, { paramsType, paramsCasing, pathParamsType, dataReturnType, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export generics={generics.join(', ')} params={paramsSignature} JSDoc={{ comments: getComments(node) }}>\n {`\n const { query: queryConfig = {}, client: config = {} } = options ?? {}\n const { client: queryClient, ...resolvedOptions } = queryConfig\n const queryKey = (resolvedOptions && 'queryKey' in resolvedOptions ? toValue(resolvedOptions.queryKey) : undefined) ?? ${queryKeyName}(${queryKeyParamsCall})\n\n const query = useInfiniteQuery({\n ...${queryOptionsName}(${queryOptionsParamsCall}),\n ...resolvedOptions,\n queryKey\n } as unknown as UseInfiniteQueryOptions<${TData}, ${TError}, ${TData}, TQueryKey, ${TData}>, toValue(queryClient)) as ${returnType}\n\n query.queryKey = queryKey as TQueryKey\n\n return query\n `}\n </Function>\n </File.Source>\n )\n}\n","import { getOperationParameters } from '@internals/shared'\nimport { getNestedAccessor } from '@internals/utils'\nimport type { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { Infinite, PluginVueQuery } from '../types.ts'\nimport { resolveErrorNames } from '../utils.ts'\nimport { buildQueryKeyParamsNode } from './QueryKey.tsx'\nimport { buildEnabledCheck } from '@internals/tanstack-query'\nimport { getQueryOptionsParams } from './QueryOptions.tsx'\n\ntype Props = {\n name: string\n clientName: string\n queryKeyName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n initialPageParam: Infinite['initialPageParam']\n cursorParam: Infinite['cursorParam']\n nextParam: Infinite['nextParam']\n previousParam: Infinite['previousParam']\n queryParam: Infinite['queryParam']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\n\nexport function InfiniteQueryOptions({\n name,\n clientName,\n initialPageParam,\n cursorParam,\n nextParam,\n previousParam,\n node,\n tsResolver,\n paramsCasing,\n paramsType,\n dataReturnType,\n pathParamsType,\n queryParam,\n queryKeyName,\n}: Props): KubbReactNode {\n const responseName = tsResolver.resolveResponseName(node)\n const queryFnDataType = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const errorNames = resolveErrorNames(node, tsResolver)\n const errorType = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const isInitialPageParamDefined = initialPageParam !== undefined && initialPageParam !== null\n const fallbackPageParamType =\n typeof initialPageParam === 'number'\n ? 'number'\n : typeof initialPageParam === 'string'\n ? initialPageParam.includes(' as ')\n ? (() => {\n const parts = initialPageParam.split(' as ')\n return parts[parts.length - 1] ?? 'unknown'\n })()\n : 'string'\n : typeof initialPageParam === 'boolean'\n ? 'boolean'\n : 'unknown'\n\n const rawQueryParams = getOperationParameters(node).query\n const queryParamsTypeName =\n rawQueryParams.length > 0\n ? (() => {\n const groupName = tsResolver.resolveQueryParamsName(node, rawQueryParams[0]!)\n const individualName = tsResolver.resolveParamName(node, rawQueryParams[0]!)\n return groupName !== individualName ? groupName : undefined\n })()\n : undefined\n\n const queryParamType = queryParam && queryParamsTypeName ? `${queryParamsTypeName}['${queryParam}']` : undefined\n const pageParamType = queryParamType ? (isInitialPageParamDefined ? `NonNullable<${queryParamType}>` : queryParamType) : fallbackPageParamType\n\n const paramsNode = getQueryOptionsParams(node, { paramsType, paramsCasing, pathParamsType, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const rawParamsCall = callPrinter.print(paramsNode) ?? ''\n const clientCallStr = rawParamsCall.replace(/\\bconfig\\b(?=[^,]*$)/, '{ ...config, signal: config.signal ?? signal }')\n\n const queryKeyParamsNode = buildQueryKeyParamsNode(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? ''\n\n const enabledSource = buildEnabledCheck(queryKeyParamsNode)\n const enabledText = enabledSource\n ? `enabled: () => ${enabledSource\n .split(' && ')\n .map((n) => `!!toValue(${n.trim()})`)\n .join(' && ')},`\n : ''\n\n const hasNewParams = nextParam !== undefined || previousParam !== undefined\n\n const [getNextPageParamExpr, getPreviousPageParamExpr] = (() => {\n if (hasNewParams) {\n const nextAccessor = nextParam ? getNestedAccessor(nextParam, 'lastPage') : undefined\n const prevAccessor = previousParam ? getNestedAccessor(previousParam, 'firstPage') : undefined\n return [\n nextAccessor ? `getNextPageParam: (lastPage) => ${nextAccessor}` : undefined,\n prevAccessor ? `getPreviousPageParam: (firstPage) => ${prevAccessor}` : undefined,\n ] as const\n }\n if (cursorParam) {\n return [`getNextPageParam: (lastPage) => lastPage['${cursorParam}']`, `getPreviousPageParam: (firstPage) => firstPage['${cursorParam}']`] as const\n }\n return [\n dataReturnType === 'full'\n ? 'getNextPageParam: (lastPage, _allPages, lastPageParam) => Array.isArray(lastPage.data) && lastPage.data.length === 0 ? undefined : lastPageParam + 1'\n : 'getNextPageParam: (lastPage, _allPages, lastPageParam) => Array.isArray(lastPage) && lastPage.length === 0 ? undefined : lastPageParam + 1',\n 'getPreviousPageParam: (_firstPage, _allPages, firstPageParam) => firstPageParam <= 1 ? undefined : firstPageParam - 1',\n ] as const\n })()\n\n const queryOptionsArr = [\n `initialPageParam: ${typeof initialPageParam === 'string' ? JSON.stringify(initialPageParam) : initialPageParam}`,\n getNextPageParamExpr,\n getPreviousPageParamExpr,\n ].filter(Boolean)\n\n const infiniteOverrideParams =\n queryParam && queryParamsTypeName\n ? `\n params = {\n ...(params ?? {}),\n ['${queryParam}']: pageParam as unknown as ${queryParamsTypeName}['${queryParam}'],\n } as ${queryParamsTypeName}`\n : ''\n\n if (infiniteOverrideParams) {\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export params={paramsSignature}>\n {`\n const queryKey = ${queryKeyName}(${queryKeyParamsCall})\n return infiniteQueryOptions<${queryFnDataType}, ${errorType}, InfiniteData<${queryFnDataType}>, QueryKey, ${pageParamType}>({\n ${enabledText}\n queryKey,\n queryFn: async ({ signal, pageParam }) => {\n ${infiniteOverrideParams}\n return ${clientName}(${addToValueCalls(clientCallStr)})\n },\n ${queryOptionsArr.join(',\\n')}\n })\n`}\n </Function>\n </File.Source>\n )\n }\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export params={paramsSignature}>\n {`\n const queryKey = ${queryKeyName}(${queryKeyParamsCall})\n return infiniteQueryOptions<${queryFnDataType}, ${errorType}, InfiniteData<${queryFnDataType}>, QueryKey, ${pageParamType}>({\n ${enabledText}\n queryKey,\n queryFn: async ({ signal }) => {\n return ${clientName}(${addToValueCalls(clientCallStr)})\n },\n ${queryOptionsArr.join(',\\n')}\n })\n`}\n </Function>\n </File.Source>\n )\n}\n\nfunction addToValueCalls(callStr: string): string {\n // Step 1: Transform shorthand object params like { petId } → { petId: toValue(petId) }\n let result = callStr.replace(/\\{\\s*([\\w,\\s]+)\\s*\\}(?=\\s*,)/g, (match, inner: string) => {\n if (inner.includes(':') || inner.includes('...')) return match\n const keys = inner\n .split(',')\n .map((k: string) => k.trim())\n .filter(Boolean)\n const wrapped = keys.map((k: string) => `${k}: toValue(${k})`).join(', ')\n return `{ ${wrapped} }`\n })\n\n // Step 2: Handle standalone identifiers like `data, params`\n result = result.replace(/(?<![{.:?])\\b(\\w+)\\b(?=\\s*,)/g, (match, name: string) => {\n if (name === 'config' || name === 'signal' || name === 'undefined') return match\n if (match.includes('toValue(')) return match\n return `toValue(${name})`\n })\n\n return result\n}\n","import { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { PluginVueQuery } from '../types.ts'\nimport { buildRequestConfigType, getComments, resolveErrorNames, wrapWithMaybeRefOrGetter } from '../utils.ts'\n\ntype Props = {\n name: string\n typeName: string\n clientName: string\n mutationKeyName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\nconst keysPrinter = functionPrinter({ mode: 'keys' })\n\nfunction createMutationArgParams(\n node: ast.OperationNode,\n options: {\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n return ast.createOperationParams(node, {\n paramsType: 'inline',\n pathParamsType: 'inline',\n paramsCasing: options.paramsCasing,\n resolver: options.resolver,\n })\n}\n\nfunction buildMutationParamsNode(\n node: ast.OperationNode,\n options: {\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n const { paramsCasing, dataReturnType, resolver } = options\n const responseName = resolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, resolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const mutationArgParamsNode = createMutationArgParams(node, { paramsCasing, resolver })\n\n const wrappedParamsNode = wrapWithMaybeRefOrGetter(mutationArgParamsNode)\n const TRequestWrapped = wrappedParamsNode.params.length > 0 ? (declarationPrinter.print(wrappedParamsNode) ?? '') : ''\n\n return ast.createFunctionParameters({\n params: [\n ast.createFunctionParameter({\n name: 'options',\n type: ast.createParamsType({\n variant: 'reference',\n name: `{\n mutation?: MutationObserverOptions<${[TData, TError, TRequestWrapped ? `{${TRequestWrapped}}` : 'void', 'TContext'].join(', ')}> & { client?: QueryClient },\n client?: ${buildRequestConfigType(node, resolver)},\n}`,\n }),\n default: '{}',\n }),\n ],\n })\n}\n\nexport function Mutation({\n name,\n clientName,\n paramsCasing,\n paramsType,\n pathParamsType,\n dataReturnType,\n node,\n tsResolver,\n mutationKeyName,\n}: Props): KubbReactNode {\n const responseName = tsResolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, tsResolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const mutationArgParamsNode = createMutationArgParams(node, {\n paramsCasing,\n resolver: tsResolver,\n })\n const hasMutationParams = mutationArgParamsNode.params.length > 0\n const TRequest = hasMutationParams ? (declarationPrinter.print(mutationArgParamsNode) ?? '') : ''\n const argKeysStr = hasMutationParams ? (keysPrinter.print(mutationArgParamsNode) ?? '') : ''\n\n const generics = [TData, TError, TRequest ? `{${TRequest}}` : 'void', 'TContext'].join(', ')\n\n const mutationKeyParamsNode = ast.createFunctionParameters({ params: [] })\n const mutationKeyParamsCall = callPrinter.print(mutationKeyParamsNode) ?? ''\n\n const clientCallParamsNode = ast.createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver: tsResolver,\n extraParams: [\n ast.createFunctionParameter({\n name: 'config',\n type: ast.createParamsType({\n variant: 'reference',\n name: buildRequestConfigType(node, tsResolver),\n }),\n default: '{}',\n }),\n ],\n })\n const clientCallStr = callPrinter.print(clientCallParamsNode) ?? ''\n\n const paramsNode = buildMutationParamsNode(node, { paramsCasing, dataReturnType, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export params={paramsSignature} JSDoc={{ comments: getComments(node) }} generics={['TContext']}>\n {`\n const { mutation = {}, client: config = {} } = options ?? {}\n const { client: queryClient, ...mutationOptions } = mutation;\n const mutationKey = mutationOptions?.mutationKey ?? ${mutationKeyName}(${mutationKeyParamsCall})\n\n return useMutation<${generics}>({\n mutationFn: async(${hasMutationParams ? `{ ${argKeysStr} }` : ''}) => {\n return ${clientName}(${clientCallStr})\n },\n mutationKey,\n ...mutationOptions\n }, queryClient)\n `}\n </Function>\n </File.Source>\n )\n}\n","import { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { PluginVueQuery } from '../types.ts'\nimport { getComments, resolveErrorNames, wrapWithMaybeRefOrGetter } from '../utils.ts'\nimport { buildQueryKeyParamsNode } from './QueryKey.tsx'\nimport { getQueryOptionsParams } from './QueryOptions.tsx'\n\ntype Props = {\n name: string\n queryOptionsName: string\n queryKeyName: string\n queryKeyTypeName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\n\nfunction buildQueryParamsNode(\n node: ast.OperationNode,\n options: {\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n const { paramsType, paramsCasing, pathParamsType, dataReturnType, resolver } = options\n const responseName = resolver.resolveResponseName(node)\n const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : undefined\n const errorNames = resolveErrorNames(node, resolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const optionsParam = ast.createFunctionParameter({\n name: 'options',\n type: ast.createParamsType({\n variant: 'reference',\n name: `{\n query?: Partial<UseQueryOptions<${[TData, TError, 'TData', 'TQueryData', 'TQueryKey'].join(', ')}>> & { client?: QueryClient },\n client?: ${requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }'}\n}`,\n }),\n default: '{}',\n })\n\n // Vue-query wraps operation params with MaybeRefOrGetter\n const baseParams = ast.createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver,\n extraParams: [optionsParam],\n })\n\n return wrapWithMaybeRefOrGetter(baseParams, (name) => name === 'options')\n}\n\nexport function Query({\n name,\n queryKeyTypeName,\n queryOptionsName,\n queryKeyName,\n paramsType,\n paramsCasing,\n pathParamsType,\n dataReturnType,\n node,\n tsResolver,\n}: Props): KubbReactNode {\n const responseName = tsResolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, tsResolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n const returnType = `UseQueryReturnType<${['TData', TError].join(', ')}> & { queryKey: TQueryKey }`\n const generics = [`TData = ${TData}`, `TQueryData = ${TData}`, `TQueryKey extends QueryKey = ${queryKeyTypeName}`]\n\n const queryKeyParamsNode = buildQueryKeyParamsNode(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? ''\n\n const queryOptionsParamsNode = getQueryOptionsParams(node, { paramsType, paramsCasing, pathParamsType, resolver: tsResolver })\n const queryOptionsParamsCall = callPrinter.print(queryOptionsParamsNode) ?? ''\n\n const paramsNode = buildQueryParamsNode(node, { paramsType, paramsCasing, pathParamsType, dataReturnType, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export generics={generics.join(', ')} params={paramsSignature} JSDoc={{ comments: getComments(node) }}>\n {`\n const { query: queryConfig = {}, client: config = {} } = options ?? {}\n const { client: queryClient, ...resolvedOptions } = queryConfig\n const queryKey = (resolvedOptions && 'queryKey' in resolvedOptions ? toValue(resolvedOptions.queryKey) : undefined) ?? ${queryKeyName}(${queryKeyParamsCall})\n\n const query = useQuery({\n ...${queryOptionsName}(${queryOptionsParamsCall}),\n ...resolvedOptions,\n queryKey\n } as unknown as UseQueryOptions<${TData}, ${TError}, TData, ${TData}, TQueryKey>, toValue(queryClient)) as ${returnType}\n\n query.queryKey = queryKey as TQueryKey\n\n return query\n `}\n </Function>\n </File.Source>\n )\n}\n"],"mappings":"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"}