@kubb/plugin-client 5.0.0-alpha.30 → 5.0.0-alpha.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/generators/classClientGenerator.tsx +7 -7
- package/src/generators/groupedClientGenerator.tsx +2 -2
- package/src/generators/staticClassClientGenerator.tsx +7 -7
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["#options","#transformParam","#eachParam","declarationPrinter","getParams","Function","declarationPrinter","getParams","Function","Function","declarationPrinter","generateMethod","resolveTypeImportNames","resolveZodImportNames","Function","fetchClientSource","axiosClientSource","configSource"],"sources":["../../../internals/utils/src/casing.ts","../../../internals/utils/src/jsdoc.ts","../../../internals/utils/src/reserved.ts","../../../internals/utils/src/urlPath.ts","../src/utils.ts","../src/components/Url.tsx","../src/components/Client.tsx","../src/components/ClientLegacy.tsx","../src/components/ClassClient.tsx","../src/components/WrapperClient.tsx","../src/generators/classClientGenerator.tsx","../src/generators/clientGenerator.tsx","../src/generators/groupedClientGenerator.tsx","../src/components/Operations.tsx","../src/generators/operationsGenerator.tsx","../src/components/StaticClassClient.tsx","../src/generators/staticClassClientGenerator.tsx","../package.json","../src/resolvers/resolverClient.ts","../src/resolvers/resolverClientLegacy.ts","../src/presets.ts","../src/plugin.ts"],"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","/**\n * Builds a JSDoc comment block from an array of lines.\n * Returns `fallback` when `comments` is empty so callers always get a usable string.\n *\n * @example\n * ```ts\n * buildJSDoc(['@type string', '@example hello'])\n * // '/**\\n * @type string\\n * @example hello\\n *\\/\\n '\n * ```\n */\nexport function buildJSDoc(\n comments: Array<string>,\n options: {\n /**\n * String to use for indenting each line.\n * @default ' * '\n */\n indent?: string\n /**\n * String appended after the closing tag.\n * @default '\\n '\n */\n suffix?: string\n /**\n * Returned as-is when `comments` is empty.\n * @default ' '\n */\n fallback?: string\n } = {},\n): string {\n const { indent = ' * ', suffix = '\\n ', fallback = ' ' } = options\n\n if (comments.length === 0) return fallback\n\n return `/**\\n${comments.map((c) => `${indent}${c}`).join('\\n')}\\n */${suffix}`\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 * Prefixes `word` with `_` when it is a reserved JavaScript/Java identifier or starts with a digit.\n *\n * @example\n * ```ts\n * transformReservedWord('class') // '_class'\n * transformReservedWord('42foo') // '_42foo'\n * transformReservedWord('status') // 'status'\n * ```\n */\nexport function transformReservedWord(word: string): string {\n const firstChar = word.charCodeAt(0)\n if (word && (reservedWords.has(word as 'valueOf') || (firstChar >= 48 && firstChar <= 57))) {\n return `_${word}`\n }\n return word\n}\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 try {\n new Function(`var ${name}`)\n } catch {\n return false\n }\n return true\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.getParams()\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.getParams(),\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; 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}').getParams()\n * // { petId: 'petId', tagId: 'tagId' }\n * ```\n */\n getParams(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 type { OperationNode, ParameterNode } from '@kubb/ast/types'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport type { PluginZod } from '@kubb/plugin-zod'\nimport { FunctionParams } from '@kubb/react-fabric'\nimport type { PluginClient } from './types.ts'\n\nexport function getComments(node: OperationNode): Array<string> {\n return [\n node.description && `@description ${node.description}`,\n node.summary && `@summary ${node.summary}`,\n node.path && `{@link ${new URLPath(node.path).URL}}`,\n node.deprecated && '@deprecated',\n ]\n .filter((x): x is string => Boolean(x))\n .flatMap((text) => text.split(/\\r?\\n/).map((line) => line.trim()))\n .filter((x): x is string => Boolean(x))\n}\n\nexport function buildParamsMapping(originalParams: Array<ParameterNode>, casedParams: Array<ParameterNode>): Record<string, string> | undefined {\n const mapping: Record<string, string> = {}\n let hasChanged = false\n originalParams.forEach((param, i) => {\n const casedName = casedParams[i]?.name ?? param.name\n mapping[param.name] = casedName\n if (param.name !== casedName) {\n hasChanged = true\n }\n })\n return hasChanged ? mapping : undefined\n}\n\nexport function buildHeaders(contentType: string, hasHeaderParams: boolean): Array<string> {\n return [\n contentType !== 'application/json' && contentType !== 'multipart/form-data' ? `'Content-Type': '${contentType}'` : undefined,\n hasHeaderParams ? '...headers' : undefined,\n ].filter(Boolean) as Array<string>\n}\n\nexport function buildGenerics(node: OperationNode, tsResolver: PluginTs['resolver']): Array<string> {\n const responseName = tsResolver.resolveResponseName(node)\n const requestName = node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined\n const errorNames = node.responses.filter((r) => Number.parseInt(r.statusCode, 10) >= 400).map((r) => tsResolver.resolveResponseStatusName(node, r.statusCode))\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n return [responseName, TError, requestName || 'unknown'].filter(Boolean)\n}\n\nexport function buildClassClientParams({\n node,\n path,\n baseURL,\n tsResolver,\n isFormData,\n headers,\n}: {\n node: OperationNode\n path: URLPath\n baseURL: string | undefined\n tsResolver: PluginTs['resolver']\n isFormData: boolean\n headers: Array<string>\n}) {\n const queryParamsName =\n node.parameters.filter((p) => p.in === 'query').length > 0\n ? tsResolver.resolveQueryParamsName(node, node.parameters.filter((p) => p.in === 'query')[0]!)\n : undefined\n const requestName = node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined\n\n return FunctionParams.factory({\n config: {\n mode: 'object',\n children: {\n requestConfig: {\n mode: 'inlineSpread',\n },\n method: {\n value: JSON.stringify(node.method.toUpperCase()),\n },\n url: {\n value: path.template,\n },\n baseURL: baseURL\n ? {\n value: JSON.stringify(baseURL),\n }\n : undefined,\n params: queryParamsName ? {} : undefined,\n data: requestName\n ? {\n value: isFormData ? 'formData as FormData' : 'requestData',\n }\n : undefined,\n headers: headers.length\n ? {\n value: `{ ${headers.join(', ')}, ...requestConfig.headers }`,\n }\n : undefined,\n },\n },\n })\n}\n\nexport function buildRequestDataLine({\n parser,\n node,\n zodResolver,\n}: {\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n node: OperationNode\n zodResolver?: PluginZod['resolver']\n}): string {\n const zodRequestName = zodResolver && parser === 'zod' && node.requestBody?.schema ? zodResolver.resolveDataName?.(node) : undefined\n if (parser === 'zod' && zodRequestName) {\n return `const requestData = ${zodRequestName}.parse(data)`\n }\n if (node.requestBody?.schema) {\n return 'const requestData = data'\n }\n return ''\n}\n\nexport function buildFormDataLine(isFormData: boolean, hasRequest: boolean): string {\n return isFormData && hasRequest ? 'const formData = buildFormData(requestData)' : ''\n}\n\nexport function buildReturnStatement({\n dataReturnType,\n parser,\n node,\n zodResolver,\n}: {\n dataReturnType: PluginClient['resolvedOptions']['dataReturnType']\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n node: OperationNode\n zodResolver?: PluginZod['resolver']\n}): string {\n const zodResponseName = zodResolver && parser === 'zod' ? zodResolver.resolveResponseName?.(node) : undefined\n if (dataReturnType === 'full' && parser === 'zod' && zodResponseName) {\n return `return {...res, data: ${zodResponseName}.parse(res.data)}`\n }\n if (dataReturnType === 'data' && parser === 'zod' && zodResponseName) {\n return `return ${zodResponseName}.parse(res.data)`\n }\n if (dataReturnType === 'full' && parser === 'client') {\n return 'return res'\n }\n return 'return res.data'\n}\n","import { isValidVarName, URLPath } from '@internals/utils'\nimport { caseParams, createOperationParams } from '@kubb/ast'\nimport type { FunctionParametersNode, OperationNode } from '@kubb/ast/types'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { Const, File, Function } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\nimport type { PluginClient } from '../types.ts'\nimport { buildParamsMapping } from '../utils.ts'\n\ntype Props = {\n name: string\n isExportable?: boolean\n isIndexable?: boolean\n\n baseURL: string | undefined\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n paramsType: PluginClient['resolvedOptions']['pathParamsType']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n node: OperationNode\n tsResolver: PluginTs['resolver']\n}\n\ntype GetParamsProps = {\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n paramsType: PluginClient['resolvedOptions']['paramsType']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n node: OperationNode\n tsResolver: PluginTs['resolver']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nfunction getParams({ paramsType, paramsCasing, pathParamsType, node, tsResolver }: GetParamsProps): FunctionParametersNode {\n // Build a URL-only node with only path params (no body, query, header)\n const urlNode: OperationNode = {\n ...node,\n parameters: node.parameters.filter((p) => p.in === 'path'),\n requestBody: undefined,\n }\n\n return createOperationParams(urlNode, {\n paramsType: paramsType === 'object' ? 'object' : 'inline',\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver: tsResolver,\n })\n}\n\nexport function Url({\n name,\n isExportable = true,\n isIndexable = true,\n baseURL,\n paramsType,\n paramsCasing,\n pathParamsType,\n node,\n tsResolver,\n}: Props): FabricReactNode {\n const path = new URLPath(node.path)\n\n const paramsNode = getParams({\n paramsType,\n paramsCasing,\n pathParamsType,\n node,\n tsResolver,\n })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n\n const originalPathParams = node.parameters.filter((p) => p.in === 'path')\n const casedPathParams = caseParams(originalPathParams, paramsCasing)\n const pathParamsMapping = paramsCasing ? buildParamsMapping(originalPathParams, casedPathParams) : undefined\n\n return (\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n <Function name={name} export={isExportable} params={paramsSignature}>\n {pathParamsMapping &&\n Object.entries(pathParamsMapping)\n .filter(([originalName, camelCaseName]) => isValidVarName(originalName) && originalName !== camelCaseName)\n .map(([originalName, camelCaseName]) => `const ${originalName} = ${camelCaseName}`)\n .join('\\n')}\n {pathParamsMapping && Object.keys(pathParamsMapping).length > 0 && <br />}\n <Const name={'res'}>{`{ method: '${node.method.toUpperCase()}', url: ${path.toTemplateString({ prefix: baseURL })} as const }`}</Const>\n <br />\n return res\n </Function>\n </File.Source>\n )\n}\n\nUrl.getParams = getParams\n","import { isValidVarName, URLPath } from '@internals/utils'\nimport { caseParams, createFunctionParameter, createOperationParams, createTypeNode } from '@kubb/ast'\nimport type { FunctionParametersNode, OperationNode } from '@kubb/ast/types'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport type { PluginZod } from '@kubb/plugin-zod'\nimport { File, Function, FunctionParams } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\nimport type { PluginClient } from '../types.ts'\nimport { buildParamsMapping, getComments } from '../utils.ts'\nimport { Url } from './Url.tsx'\n\ntype Props = {\n name: string\n urlName?: string\n isExportable?: boolean\n isIndexable?: boolean\n isConfigurable?: boolean\n returnType?: string\n\n baseURL: string | undefined\n dataReturnType: PluginClient['resolvedOptions']['dataReturnType']\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n paramsType: PluginClient['resolvedOptions']['pathParamsType']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n node: OperationNode\n tsResolver: PluginTs['resolver']\n zodResolver?: PluginZod['resolver']\n children?: FabricReactNode\n}\n\ntype GetParamsProps = {\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n paramsType: PluginClient['resolvedOptions']['paramsType']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n node: OperationNode\n tsResolver: PluginTs['resolver']\n isConfigurable: boolean\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nfunction getParams({ paramsType, paramsCasing, pathParamsType, node, tsResolver, isConfigurable }: GetParamsProps): FunctionParametersNode {\n const requestName = node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined\n\n return createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver: tsResolver,\n extraParams: isConfigurable\n ? [\n createFunctionParameter({\n name: 'config',\n type: createTypeNode({\n variant: 'reference',\n name: requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }',\n }),\n default: '{}',\n }),\n ]\n : [],\n })\n}\n\nexport function Client({\n name,\n isExportable = true,\n isIndexable = true,\n returnType,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n node,\n tsResolver,\n zodResolver,\n urlName,\n children,\n isConfigurable = true,\n}: Props): FabricReactNode {\n const path = new URLPath(node.path)\n const contentType = node.requestBody?.contentType ?? 'application/json'\n const isFormData = contentType === 'multipart/form-data'\n\n const originalPathParams = node.parameters.filter((p) => p.in === 'path')\n const casedPathParams = caseParams(originalPathParams, paramsCasing)\n const originalQueryParams = node.parameters.filter((p) => p.in === 'query')\n const casedQueryParams = caseParams(originalQueryParams, paramsCasing)\n const originalHeaderParams = node.parameters.filter((p) => p.in === 'header')\n const casedHeaderParams = caseParams(originalHeaderParams, paramsCasing)\n\n const pathParamsMapping = paramsCasing && !urlName ? buildParamsMapping(originalPathParams, casedPathParams) : undefined\n const queryParamsMapping = paramsCasing ? buildParamsMapping(originalQueryParams, casedQueryParams) : undefined\n const headerParamsMapping = paramsCasing ? buildParamsMapping(originalHeaderParams, casedHeaderParams) : undefined\n\n const requestName = node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined\n const responseName = tsResolver.resolveResponseName(node)\n const queryParamsName = originalQueryParams.length > 0 ? tsResolver.resolveQueryParamsName(node, originalQueryParams[0]!) : undefined\n const headerParamsName = originalHeaderParams.length > 0 ? tsResolver.resolveHeaderParamsName(node, originalHeaderParams[0]!) : undefined\n\n const zodResponseName = zodResolver && parser === 'zod' ? zodResolver.resolveResponseName?.(node) : undefined\n const zodRequestName = zodResolver && parser === 'zod' && node.requestBody?.schema ? zodResolver.resolveDataName?.(node) : undefined\n\n const errorNames = node.responses\n .filter((r) => {\n const code = Number.parseInt(r.statusCode, 10)\n return code >= 400\n })\n .map((r) => tsResolver.resolveResponseStatusName(node, r.statusCode))\n\n const headers = [\n contentType !== 'application/json' && contentType !== 'multipart/form-data' ? `'Content-Type': '${contentType}'` : undefined,\n headerParamsName ? (headerParamsMapping ? '...mappedHeaders' : '...headers') : undefined,\n ].filter(Boolean)\n\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const generics = [responseName, TError, requestName || 'unknown'].filter(Boolean)\n const paramsNode = getParams({\n paramsType,\n paramsCasing,\n pathParamsType,\n node,\n tsResolver,\n isConfigurable,\n })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n\n const urlParamsNode = Url.getParams({\n paramsType,\n paramsCasing,\n pathParamsType,\n node,\n tsResolver,\n })\n const callPrinter = functionPrinter({ mode: 'call' })\n const urlParamsCall = callPrinter.print(urlParamsNode) ?? ''\n\n const clientParams = FunctionParams.factory({\n config: {\n mode: 'object',\n children: {\n method: {\n value: JSON.stringify(node.method.toUpperCase()),\n },\n url: {\n value: urlName ? `${urlName}(${urlParamsCall}).url.toString()` : path.template,\n },\n baseURL:\n baseURL && !urlName\n ? {\n value: `\\`${baseURL}\\``,\n }\n : undefined,\n params: queryParamsName ? (queryParamsMapping ? { value: 'mappedParams' } : {}) : undefined,\n data: requestName\n ? {\n value: isFormData ? 'formData as FormData' : 'requestData',\n }\n : undefined,\n requestConfig: isConfigurable\n ? {\n mode: 'inlineSpread',\n }\n : undefined,\n headers: headers.length\n ? {\n value: isConfigurable ? `{ ${headers.join(', ')}, ...requestConfig.headers }` : `{ ${headers.join(', ')} }`,\n }\n : undefined,\n },\n },\n })\n\n const childrenElement = children ? (\n children\n ) : (\n <>\n {dataReturnType === 'full' && parser === 'zod' && zodResponseName && `return {...res, data: ${zodResponseName}.parse(res.data)}`}\n {dataReturnType === 'data' && parser === 'zod' && zodResponseName && `return ${zodResponseName}.parse(res.data)`}\n {dataReturnType === 'full' && parser === 'client' && 'return res'}\n {dataReturnType === 'data' && parser === 'client' && 'return res.data'}\n </>\n )\n\n return (\n <>\n <br />\n\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n <Function\n name={name}\n async\n export={isExportable}\n params={paramsSignature}\n JSDoc={{\n comments: getComments(node),\n }}\n returnType={returnType}\n >\n {isConfigurable ? 'const { client: request = fetch, ...requestConfig } = config' : ''}\n <br />\n <br />\n {pathParamsMapping &&\n Object.entries(pathParamsMapping)\n .filter(([originalName, camelCaseName]) => isValidVarName(originalName) && originalName !== camelCaseName)\n .map(([originalName, camelCaseName]) => `const ${originalName} = ${camelCaseName}`)\n .join('\\n')}\n {pathParamsMapping && (\n <>\n <br />\n <br />\n </>\n )}\n {queryParamsMapping && queryParamsName && (\n <>\n {`const mappedParams = params ? { ${Object.entries(queryParamsMapping)\n .map(([originalName, camelCaseName]) => `\"${originalName}\": params.${camelCaseName}`)\n .join(', ')} } : undefined`}\n <br />\n <br />\n </>\n )}\n {headerParamsMapping && headerParamsName && (\n <>\n {`const mappedHeaders = headers ? { ${Object.entries(headerParamsMapping)\n .map(([originalName, camelCaseName]) => `\"${originalName}\": headers.${camelCaseName}`)\n .join(', ')} } : undefined`}\n <br />\n <br />\n </>\n )}\n {parser === 'zod' && zodRequestName ? `const requestData = ${zodRequestName}.parse(data)` : requestName && 'const requestData = data'}\n <br />\n {isFormData && requestName && 'const formData = buildFormData(requestData)'}\n <br />\n {isConfigurable\n ? `const res = await request<${generics.join(', ')}>(${clientParams.toCall()})`\n : `const res = await fetch<${generics.join(', ')}>(${clientParams.toCall()})`}\n <br />\n {childrenElement}\n </Function>\n </File.Source>\n </>\n )\n}\n\nClient.getParams = getParams\n","import { camelCase, isValidVarName, URLPath } from '@internals/utils'\nimport { Const, File, Function, FunctionParams } from '@kubb/react-fabric'\nimport type { FabricReactNode, Params } from '@kubb/react-fabric/types'\n\n/**\n * Structural type matching OperationSchema from @kubb/plugin-oas.\n * Avoids importing from @kubb/oas or @kubb/plugin-oas.\n * Uses broad types so that OperationSchemas is assignable without imports.\n */\ntype LegacyOperationSchema = {\n name?: string\n schema?: Record<string, any>\n statusCode?: string | number\n [key: string]: unknown\n}\n\ntype LegacyOperationSchemas = {\n pathParams?: LegacyOperationSchema\n queryParams?: LegacyOperationSchema\n headerParams?: LegacyOperationSchema\n request?: LegacyOperationSchema\n response: LegacyOperationSchema & { name: string }\n statusCodes?: Array<LegacyOperationSchema & { name: string }>\n errors?: Array<LegacyOperationSchema & { name: string }>\n [key: string]: unknown\n}\n\ntype LegacyOperation = {\n path: string\n method: string\n getDescription?(): string | undefined\n getSummary?(): string | undefined\n isDeprecated?(): boolean\n getContentType?(): string\n}\n\nfunction isSchemaRequired(schema?: LegacyOperationSchema['schema']): boolean {\n if (!schema) return false\n return Array.isArray(schema.required) ? !!schema.required.length : !!schema.required\n}\n\nfunction isSchemaOptional(schema?: LegacyOperationSchema['schema']): boolean {\n return !isSchemaRequired(schema)\n}\n\nfunction isAllOptionalDeep(schema?: any): boolean {\n if (!schema) return true\n if (Array.isArray(schema.required) && schema.required.length > 0) return false\n if (schema.allOf) return (schema.allOf as any[]).every(isAllOptionalDeep)\n return true\n}\n\nfunction getSchemaDefaultValue(schema?: LegacyOperationSchema['schema']): string | undefined {\n if (!schema || !isSchemaOptional(schema)) return undefined\n if (schema.type === 'array') return '[]'\n if (schema.anyOf || schema.oneOf) {\n const variants = (schema.anyOf || schema.oneOf) as any[]\n if (!Array.isArray(variants)) return undefined\n if (variants.some(isAllOptionalDeep)) return '{}'\n return undefined\n }\n if (schema.type === 'object' || schema.properties) return '{}'\n return undefined\n}\n\nfunction legacyGetPathParams(operationSchema: LegacyOperationSchema | undefined, options: { typed?: boolean; casing?: 'camelcase' } = {}): Params {\n if (!operationSchema?.schema?.properties || !operationSchema.name) return {}\n\n const requiredFields = Array.isArray(operationSchema.schema.required) ? operationSchema.schema.required : []\n\n return Object.entries(operationSchema.schema.properties).reduce((acc, [name]) => {\n if (!name) return acc\n let paramName = name\n if (options.casing === 'camelcase') {\n paramName = camelCase(name)\n } else if (!isValidVarName(name)) {\n paramName = camelCase(name)\n }\n\n const accessName = options.casing === 'camelcase' ? camelCase(name) : name\n\n acc[paramName] = {\n default: undefined,\n type: options.typed ? `${operationSchema.name}[\"${accessName}\"]` : undefined,\n optional: !requiredFields.includes(name),\n }\n return acc\n }, {} as Params)\n}\n\nfunction legacyGetParamsMapping(\n operationSchema: LegacyOperationSchema | undefined,\n options: { casing?: 'camelcase' } = {},\n): Record<string, string> | undefined {\n if (!operationSchema?.schema?.properties) return undefined\n\n const allEntries: Array<[string, string]> = []\n let hasTransformation = false\n\n Object.entries(operationSchema.schema.properties).forEach(([originalName]) => {\n let transformedName = originalName\n if (options.casing === 'camelcase') {\n transformedName = camelCase(originalName)\n } else if (!isValidVarName(originalName)) {\n transformedName = camelCase(originalName)\n }\n allEntries.push([originalName, transformedName])\n if (transformedName !== originalName) hasTransformation = true\n })\n\n if (options.casing === 'camelcase' && hasTransformation) {\n return Object.fromEntries(allEntries)\n }\n\n const mapping: Record<string, string> = {}\n allEntries.forEach(([originalName, transformedName]) => {\n if (transformedName !== originalName) mapping[originalName] = transformedName\n })\n\n return Object.keys(mapping).length > 0 ? mapping : undefined\n}\n\nfunction legacyGetComments(operation: LegacyOperation): string[] {\n return [\n operation.getDescription?.() && `@description ${operation.getDescription!()}`,\n operation.getSummary?.() && `@summary ${operation.getSummary!()}`,\n operation.path && `{@link ${new URLPath(operation.path).URL}}`,\n operation.isDeprecated?.() && '@deprecated',\n ]\n .filter((x): x is string => Boolean(x))\n .flatMap((text) => text.split(/\\r?\\n/).map((line) => line.trim()))\n .filter((x): x is string => Boolean(x))\n}\n\ntype Props = {\n name: string\n urlName?: string\n isExportable?: boolean\n isIndexable?: boolean\n isConfigurable?: boolean\n returnType?: string\n baseURL: string | undefined\n dataReturnType: 'data' | 'full'\n paramsCasing?: 'camelcase'\n paramsType: 'object' | 'inline'\n pathParamsType: 'object' | 'inline'\n parser: 'client' | 'zod' | undefined\n typeSchemas: LegacyOperationSchemas\n zodSchemas: LegacyOperationSchemas | undefined\n operation: LegacyOperation\n children?: FabricReactNode\n}\n\ntype GetParamsProps = {\n paramsCasing?: 'camelcase'\n paramsType: 'object' | 'inline'\n pathParamsType: 'object' | 'inline'\n typeSchemas: LegacyOperationSchemas\n isConfigurable: boolean\n}\n\nfunction getParams({ paramsType, paramsCasing, pathParamsType, typeSchemas, isConfigurable }: GetParamsProps) {\n if (paramsType === 'object') {\n const pathParams = legacyGetPathParams(typeSchemas.pathParams, {\n typed: true,\n casing: paramsCasing,\n })\n\n const children = {\n ...pathParams,\n data: typeSchemas.request?.name\n ? {\n type: typeSchemas.request?.name,\n optional: isSchemaOptional(typeSchemas.request?.schema),\n }\n : undefined,\n params: typeSchemas.queryParams?.name\n ? {\n type: typeSchemas.queryParams?.name,\n optional: isSchemaOptional(typeSchemas.queryParams?.schema),\n }\n : undefined,\n headers: typeSchemas.headerParams?.name\n ? {\n type: typeSchemas.headerParams?.name,\n optional: isSchemaOptional(typeSchemas.headerParams?.schema),\n }\n : undefined,\n }\n\n const allChildrenAreOptional = Object.values(children).every((child) => !child || child.optional)\n\n return FunctionParams.factory({\n data: {\n mode: 'object' as const,\n children,\n default: allChildrenAreOptional ? '{}' : undefined,\n },\n config: isConfigurable\n ? {\n type: typeSchemas.request?.name\n ? `Partial<RequestConfig<${typeSchemas.request?.name}>> & { client?: Client }`\n : 'Partial<RequestConfig> & { client?: Client }',\n default: '{}',\n }\n : undefined,\n })\n }\n\n return FunctionParams.factory({\n pathParams: typeSchemas.pathParams?.name\n ? {\n mode: pathParamsType === 'object' ? ('object' as const) : ('inlineSpread' as const),\n children: legacyGetPathParams(typeSchemas.pathParams, {\n typed: true,\n casing: paramsCasing,\n }),\n default: getSchemaDefaultValue(typeSchemas.pathParams?.schema),\n }\n : undefined,\n data: typeSchemas.request?.name\n ? {\n type: typeSchemas.request?.name,\n optional: isSchemaOptional(typeSchemas.request?.schema),\n }\n : undefined,\n params: typeSchemas.queryParams?.name\n ? {\n type: typeSchemas.queryParams?.name,\n optional: isSchemaOptional(typeSchemas.queryParams?.schema),\n }\n : undefined,\n headers: typeSchemas.headerParams?.name\n ? {\n type: typeSchemas.headerParams?.name,\n optional: isSchemaOptional(typeSchemas.headerParams?.schema),\n }\n : undefined,\n config: isConfigurable\n ? {\n type: typeSchemas.request?.name\n ? `Partial<RequestConfig<${typeSchemas.request?.name}>> & { client?: Client }`\n : 'Partial<RequestConfig> & { client?: Client }',\n default: '{}',\n }\n : undefined,\n })\n}\n\nexport function ClientLegacy({\n name,\n isExportable = true,\n isIndexable = true,\n returnType,\n typeSchemas,\n baseURL,\n dataReturnType,\n parser,\n zodSchemas,\n paramsType,\n paramsCasing,\n pathParamsType,\n operation,\n urlName,\n children,\n isConfigurable = true,\n}: Props): FabricReactNode {\n const path = new URLPath(operation.path)\n const contentType = operation.getContentType?.() ?? 'application/json'\n const isFormData = contentType === 'multipart/form-data'\n\n const pathParamsMapping = paramsCasing && !urlName ? legacyGetParamsMapping(typeSchemas.pathParams, { casing: paramsCasing }) : undefined\n const queryParamsMapping = paramsCasing ? legacyGetParamsMapping(typeSchemas.queryParams, { casing: paramsCasing }) : undefined\n const headerParamsMapping = paramsCasing ? legacyGetParamsMapping(typeSchemas.headerParams, { casing: paramsCasing }) : undefined\n\n const headers = [\n contentType !== 'application/json' && contentType !== 'multipart/form-data' ? `'Content-Type': '${contentType}'` : undefined,\n typeSchemas.headerParams?.name ? (headerParamsMapping ? '...mappedHeaders' : '...headers') : undefined,\n ].filter(Boolean)\n\n const TError = `ResponseErrorConfig<${typeSchemas.errors?.map((item) => item.name).join(' | ') || 'Error'}>`\n\n const generics = [typeSchemas.response.name, TError, typeSchemas.request?.name || 'unknown'].filter(Boolean)\n const params = getParams({\n paramsType,\n paramsCasing,\n pathParamsType,\n typeSchemas,\n isConfigurable,\n })\n const urlParams = UrlLegacy.getParams({\n paramsType,\n paramsCasing,\n pathParamsType,\n typeSchemas,\n })\n\n const clientParams = FunctionParams.factory({\n config: {\n mode: 'object' as const,\n children: {\n method: {\n value: JSON.stringify(operation.method.toUpperCase()),\n },\n url: {\n value: urlName ? `${urlName}(${urlParams.toCall()}).url.toString()` : path.template,\n },\n baseURL:\n baseURL && !urlName\n ? {\n value: `\\`${baseURL}\\``,\n }\n : undefined,\n params: typeSchemas.queryParams?.name ? (queryParamsMapping ? { value: 'mappedParams' } : {}) : undefined,\n data: typeSchemas.request?.name\n ? {\n value: isFormData ? 'formData as FormData' : 'requestData',\n }\n : undefined,\n requestConfig: isConfigurable\n ? {\n mode: 'inlineSpread' as const,\n }\n : undefined,\n headers: headers.length\n ? {\n value: isConfigurable ? `{ ${headers.join(', ')}, ...requestConfig.headers }` : `{ ${headers.join(', ')} }`,\n }\n : undefined,\n },\n },\n })\n\n const childrenElement = children ? (\n children\n ) : (\n <>\n {dataReturnType === 'full' && parser === 'zod' && zodSchemas && `return {...res, data: ${zodSchemas.response.name}.parse(res.data)}`}\n {dataReturnType === 'data' && parser === 'zod' && zodSchemas && `return ${zodSchemas.response.name}.parse(res.data)`}\n {dataReturnType === 'full' && parser === 'client' && 'return res'}\n {dataReturnType === 'data' && parser === 'client' && 'return res.data'}\n </>\n )\n\n return (\n <>\n <br />\n\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n <Function\n name={name}\n async\n export={isExportable}\n params={params.toConstructor()}\n JSDoc={{\n comments: legacyGetComments(operation),\n }}\n returnType={returnType}\n >\n {isConfigurable ? 'const { client: request = fetch, ...requestConfig } = config' : ''}\n <br />\n <br />\n {pathParamsMapping &&\n Object.entries(pathParamsMapping)\n .filter(([originalName, camelCaseName]) => originalName !== camelCaseName && isValidVarName(originalName))\n .map(([originalName, camelCaseName]) => `const ${originalName} = ${camelCaseName}`)\n .join('\\n')}\n {pathParamsMapping && (\n <>\n <br />\n <br />\n </>\n )}\n {queryParamsMapping && typeSchemas.queryParams?.name && (\n <>\n {`const mappedParams = params ? { ${Object.entries(queryParamsMapping)\n .map(([originalName, camelCaseName]) => `\"${originalName}\": params.${camelCaseName}`)\n .join(', ')} } : undefined`}\n <br />\n <br />\n </>\n )}\n {headerParamsMapping && typeSchemas.headerParams?.name && (\n <>\n {`const mappedHeaders = headers ? { ${Object.entries(headerParamsMapping)\n .map(([originalName, camelCaseName]) => `\"${originalName}\": headers.${camelCaseName}`)\n .join(', ')} } : undefined`}\n <br />\n <br />\n </>\n )}\n {parser === 'zod' && zodSchemas?.request?.name\n ? `const requestData = ${zodSchemas.request.name}.parse(data)`\n : typeSchemas?.request?.name && 'const requestData = data'}\n <br />\n {isFormData && typeSchemas?.request?.name && 'const formData = buildFormData(requestData)'}\n <br />\n {isConfigurable\n ? `const res = await request<${generics.join(', ')}>(${clientParams.toCall()})`\n : `const res = await fetch<${generics.join(', ')}>(${clientParams.toCall()})`}\n <br />\n {childrenElement}\n </Function>\n </File.Source>\n </>\n )\n}\n\nClientLegacy.getParams = getParams\n\n// --- UrlLegacy ---\n\ntype UrlProps = {\n name: string\n isExportable?: boolean\n isIndexable?: boolean\n baseURL: string | undefined\n paramsCasing?: 'camelcase'\n paramsType: 'object' | 'inline'\n pathParamsType: 'object' | 'inline'\n typeSchemas: LegacyOperationSchemas\n operation: LegacyOperation\n}\n\ntype UrlGetParamsProps = {\n paramsCasing?: 'camelcase'\n paramsType: 'object' | 'inline'\n pathParamsType: 'object' | 'inline'\n typeSchemas: LegacyOperationSchemas\n}\n\nfunction getUrlParams({ paramsType, paramsCasing, pathParamsType, typeSchemas }: UrlGetParamsProps) {\n if (paramsType === 'object') {\n const pathParams = legacyGetPathParams(typeSchemas.pathParams, {\n typed: true,\n casing: paramsCasing,\n })\n\n return FunctionParams.factory({\n data: {\n mode: 'object' as const,\n children: {\n ...pathParams,\n },\n },\n })\n }\n\n return FunctionParams.factory({\n pathParams: typeSchemas.pathParams?.name\n ? {\n mode: pathParamsType === 'object' ? ('object' as const) : ('inlineSpread' as const),\n children: legacyGetPathParams(typeSchemas.pathParams, {\n typed: true,\n casing: paramsCasing,\n }),\n default: getSchemaDefaultValue(typeSchemas.pathParams?.schema),\n }\n : undefined,\n })\n}\n\nexport function UrlLegacy({\n name,\n isExportable = true,\n isIndexable = true,\n typeSchemas,\n baseURL,\n paramsType,\n paramsCasing,\n pathParamsType,\n operation,\n}: UrlProps): FabricReactNode {\n const path = new URLPath(operation.path)\n const params = getUrlParams({\n paramsType,\n paramsCasing,\n pathParamsType,\n typeSchemas,\n })\n\n const pathParamsMapping = paramsCasing ? legacyGetParamsMapping(typeSchemas.pathParams, { casing: paramsCasing }) : undefined\n\n return (\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n <Function name={name} export={isExportable} params={params.toConstructor()}>\n {pathParamsMapping &&\n Object.entries(pathParamsMapping)\n .filter(([originalName, camelCaseName]) => originalName !== camelCaseName && isValidVarName(originalName))\n .map(([originalName, camelCaseName]) => `const ${originalName} = ${camelCaseName}`)\n .join('\\n')}\n {pathParamsMapping && <br />}\n <Const name={'res'}>{`{ method: '${operation.method.toUpperCase()}', url: ${path.toTemplateString({ prefix: baseURL })} as const }`}</Const>\n <br />\n return res\n </Function>\n </File.Source>\n )\n}\n\nUrlLegacy.getParams = getUrlParams\n","import { buildJSDoc, URLPath } from '@internals/utils'\nimport type { OperationNode } from '@kubb/ast/types'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport type { PluginZod } from '@kubb/plugin-zod'\nimport { File } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\nimport type { PluginClient } from '../types.ts'\nimport { buildClassClientParams, buildFormDataLine, buildGenerics, buildHeaders, buildRequestDataLine, buildReturnStatement, getComments } from '../utils.ts'\n\nimport { Client } from './Client.tsx'\n\ntype OperationData = {\n node: OperationNode\n name: string\n tsResolver: PluginTs['resolver']\n zodResolver?: PluginZod['resolver']\n}\n\ntype Props = {\n name: string\n isExportable?: boolean\n isIndexable?: boolean\n operations: Array<OperationData>\n baseURL: string | undefined\n dataReturnType: PluginClient['resolvedOptions']['dataReturnType']\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n paramsType: PluginClient['resolvedOptions']['pathParamsType']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n children?: FabricReactNode\n}\n\ntype GenerateMethodProps = {\n node: OperationNode\n name: string\n tsResolver: PluginTs['resolver']\n zodResolver?: PluginZod['resolver']\n baseURL: string | undefined\n dataReturnType: PluginClient['resolvedOptions']['dataReturnType']\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n paramsType: PluginClient['resolvedOptions']['paramsType']\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nfunction generateMethod({\n node,\n name,\n tsResolver,\n zodResolver,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n}: GenerateMethodProps): string {\n const path = new URLPath(node.path, { casing: paramsCasing })\n const contentType = node.requestBody?.contentType ?? 'application/json'\n const isFormData = contentType === 'multipart/form-data'\n const headerParamsName =\n node.parameters.filter((p) => p.in === 'header').length > 0\n ? tsResolver.resolveHeaderParamsName(node, node.parameters.filter((p) => p.in === 'header')[0]!)\n : undefined\n const headers = buildHeaders(contentType, !!headerParamsName)\n const generics = buildGenerics(node, tsResolver)\n const paramsNode = ClassClient.getParams({ paramsType, paramsCasing, pathParamsType, node, tsResolver, isConfigurable: true })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const clientParams = buildClassClientParams({ node, path, baseURL, tsResolver, isFormData, headers })\n const jsdoc = buildJSDoc(getComments(node))\n\n const requestDataLine = buildRequestDataLine({ parser, node, zodResolver })\n const formDataLine = buildFormDataLine(isFormData, !!node.requestBody?.schema)\n const returnStatement = buildReturnStatement({ dataReturnType, parser, node, zodResolver })\n\n const methodBody = [\n 'const { client: request = fetch, ...requestConfig } = mergeConfig(this.#config, config)',\n '',\n requestDataLine,\n formDataLine,\n `const res = await request<${generics.join(', ')}>(${clientParams.toCall()})`,\n returnStatement,\n ]\n .filter(Boolean)\n .map((line) => ` ${line}`)\n .join('\\n')\n\n return `${jsdoc}async ${name}(${paramsSignature}) {\\n${methodBody}\\n }`\n}\n\nexport function ClassClient({\n name,\n isExportable = true,\n isIndexable = true,\n operations,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n children,\n}: Props): FabricReactNode {\n const methods = operations.map(({ node, name: methodName, tsResolver, zodResolver }) =>\n generateMethod({\n node,\n name: methodName,\n tsResolver,\n zodResolver,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n }),\n )\n\n const classCode = `export class ${name} {\n #config: Partial<RequestConfig> & { client?: Client }\n\n constructor(config: Partial<RequestConfig> & { client?: Client } = {}) {\n this.#config = config\n }\n\n${methods.join('\\n\\n')}\n}`\n\n return (\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n {classCode}\n {children}\n </File.Source>\n )\n}\nClassClient.getParams = Client.getParams\n","import { camelCase } from '@internals/utils'\nimport { File } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\n\ntype Props = {\n name: string\n classNames: Array<string>\n isExportable?: boolean\n isIndexable?: boolean\n}\n\nexport function WrapperClient({ name, classNames, isExportable = true, isIndexable = true }: Props): FabricReactNode {\n const properties = classNames.map((className) => ` readonly ${camelCase(className)}: ${className}`).join('\\n')\n const assignments = classNames.map((className) => ` this.${camelCase(className)} = new ${className}(config)`).join('\\n')\n\n const classCode = `export class ${name} {\n${properties}\n\n constructor(config: Partial<RequestConfig> & { client?: Client } = {}) {\n${assignments}\n }\n}`\n\n return (\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n {classCode}\n </File.Source>\n )\n}\n","import path from 'node:path'\nimport { camelCase, pascalCase } from '@internals/utils'\nimport type { OperationNode } from '@kubb/ast/types'\nimport { defineGenerator } from '@kubb/core'\nimport type { FabricFile } from '@kubb/fabric-core/types'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport type { PluginZod } from '@kubb/plugin-zod'\nimport { pluginZodName } from '@kubb/plugin-zod'\nimport { File } from '@kubb/react-fabric'\nimport { ClassClient } from '../components/ClassClient'\nimport { WrapperClient } from '../components/WrapperClient'\nimport type { PluginClient } from '../types'\n\ntype OperationData = {\n node: OperationNode\n name: string\n tsResolver: PluginTs['resolver']\n zodResolver: PluginZod['resolver'] | undefined\n typeFile: FabricFile.File\n zodFile: FabricFile.File | undefined\n}\n\ntype Controller = {\n name: string\n file: FabricFile.File\n operations: Array<OperationData>\n}\n\nfunction resolveTypeImportNames(node: OperationNode, tsResolver: PluginTs['resolver']): Array<string> {\n const names: Array<string | undefined> = [\n node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined,\n tsResolver.resolveResponseName(node),\n ...node.parameters.filter((p) => p.in === 'path').map((p) => tsResolver.resolvePathParamsName(node, p)),\n ...node.parameters.filter((p) => p.in === 'query').map((p) => tsResolver.resolveQueryParamsName(node, p)),\n ...node.parameters.filter((p) => p.in === 'header').map((p) => tsResolver.resolveHeaderParamsName(node, p)),\n ...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode)),\n ]\n return names.filter((n): n is string => Boolean(n))\n}\n\nfunction resolveZodImportNames(node: OperationNode, zodResolver: PluginZod['resolver']): Array<string> {\n const names: Array<string | undefined> = [zodResolver.resolveResponseName?.(node), node.requestBody?.schema ? zodResolver.resolveDataName?.(node) : undefined]\n return names.filter((n): n is string => Boolean(n))\n}\n\nexport const classClientGenerator = defineGenerator<PluginClient>({\n name: 'classClient',\n operations(nodes, options) {\n const { adapter, config, driver, resolver, root } = this\n const { output, group, dataReturnType, paramsCasing, paramsType, pathParamsType, parser, importPath, wrapper } = options\n const baseURL = options.baseURL ?? adapter.rootNode?.meta?.baseURL\n\n const pluginTs = driver.getPlugin(pluginTsName)\n if (!pluginTs?.resolver) return null\n\n const tsResolver = pluginTs.resolver\n const tsPluginOptions = pluginTs.options\n const pluginZod = parser === 'zod' ? driver.getPlugin(pluginZodName) : undefined\n const zodResolver = pluginZod?.resolver\n\n function buildOperationData(node: OperationNode): OperationData {\n const typeFile = tsResolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n { root, output: tsPluginOptions?.output ?? output, group: tsPluginOptions?.group },\n )\n const zodFile =\n zodResolver && pluginZod?.options\n ? zodResolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n { root, output: pluginZod.options.output ?? output, group: pluginZod.options.group },\n )\n : undefined\n\n return {\n node: node,\n name: resolver.resolveName(node.operationId),\n tsResolver,\n zodResolver,\n typeFile,\n zodFile,\n }\n }\n\n const controllers = nodes.reduce(\n (acc, operationNode) => {\n const tag = operationNode.tags[0]\n const groupName = tag ? (group?.name?.({ group: camelCase(tag) }) ?? pascalCase(tag)) : 'Client'\n\n if (!tag && !group) {\n const name = 'ApiClient'\n const file = resolver.resolveFile({ name, extname: '.ts' }, { root, output, group })\n const operationData = buildOperationData(operationNode)\n const previous = acc.find((item) => item.file.path === file.path)\n\n if (previous) {\n previous.operations.push(operationData)\n } else {\n acc.push({ name, file, operations: [operationData] })\n }\n } else if (tag) {\n const name = groupName\n const file = resolver.resolveFile({ name, extname: '.ts', tag }, { root, output, group })\n const operationData = buildOperationData(operationNode)\n const previous = acc.find((item) => item.file.path === file.path)\n\n if (previous) {\n previous.operations.push(operationData)\n } else {\n acc.push({ name, file, operations: [operationData] })\n }\n }\n\n return acc\n },\n [] as Array<Controller>,\n )\n\n function collectTypeImports(ops: Array<OperationData>) {\n const typeImportsByFile = new Map<string, Set<string>>()\n const typeFilesByPath = new Map<string, FabricFile.File>()\n\n ops.forEach((op) => {\n const names = resolveTypeImportNames(op.node, tsResolver)\n if (!typeImportsByFile.has(op.typeFile.path)) {\n typeImportsByFile.set(op.typeFile.path, new Set())\n }\n const imports = typeImportsByFile.get(op.typeFile.path)!\n names.forEach((n) => {\n imports.add(n)\n })\n typeFilesByPath.set(op.typeFile.path, op.typeFile)\n })\n\n return { typeImportsByFile, typeFilesByPath }\n }\n\n function collectZodImports(ops: Array<OperationData>) {\n const zodImportsByFile = new Map<string, Set<string>>()\n const zodFilesByPath = new Map<string, FabricFile.File>()\n\n ops.forEach((op) => {\n if (!op.zodFile || !zodResolver) return\n const names = resolveZodImportNames(op.node, zodResolver)\n if (!zodImportsByFile.has(op.zodFile.path)) {\n zodImportsByFile.set(op.zodFile.path, new Set())\n }\n const imports = zodImportsByFile.get(op.zodFile.path)!\n names.forEach((n) => {\n imports.add(n)\n })\n zodFilesByPath.set(op.zodFile.path, op.zodFile)\n })\n\n return { zodImportsByFile, zodFilesByPath }\n }\n\n const files = controllers.map(({ name, file, operations: ops }) => {\n const { typeImportsByFile, typeFilesByPath } = collectTypeImports(ops)\n const { zodImportsByFile, zodFilesByPath } =\n parser === 'zod' ? collectZodImports(ops) : { zodImportsByFile: new Map<string, Set<string>>(), zodFilesByPath: new Map<string, FabricFile.File>() }\n const hasFormData = ops.some((op) => op.node.requestBody?.contentType === 'multipart/form-data')\n\n return (\n <File\n key={file.path}\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {importPath ? (\n <>\n <File.Import name={'fetch'} path={importPath} />\n <File.Import name={['mergeConfig']} path={importPath} />\n <File.Import name={['Client', 'RequestConfig', 'ResponseErrorConfig']} path={importPath} isTypeOnly />\n </>\n ) : (\n <>\n <File.Import name={['fetch']} root={file.path} path={path.resolve(root, '.kubb/fetch.ts')} />\n <File.Import name={['mergeConfig']} root={file.path} path={path.resolve(root, '.kubb/fetch.ts')} />\n <File.Import name={['Client', 'RequestConfig', 'ResponseErrorConfig']} root={file.path} path={path.resolve(root, '.kubb/fetch.ts')} isTypeOnly />\n </>\n )}\n\n {hasFormData && <File.Import name={['buildFormData']} root={file.path} path={path.resolve(root, '.kubb/config.ts')} />}\n\n {Array.from(typeImportsByFile.entries()).map(([filePath, importSet]) => {\n const typeFile = typeFilesByPath.get(filePath)\n if (!typeFile) return null\n const importNames = Array.from(importSet).filter(Boolean)\n if (importNames.length === 0) return null\n return <File.Import key={filePath} name={importNames} root={file.path} path={typeFile.path} isTypeOnly />\n })}\n\n {parser === 'zod' &&\n Array.from(zodImportsByFile.entries()).map(([filePath, importSet]) => {\n const zodFile = zodFilesByPath.get(filePath)\n if (!zodFile) return null\n const importNames = Array.from(importSet).filter(Boolean)\n if (importNames.length === 0) return null\n return <File.Import key={filePath} name={importNames} root={file.path} path={zodFile.path} />\n })}\n\n <ClassClient\n name={name}\n operations={ops}\n baseURL={baseURL}\n dataReturnType={dataReturnType}\n pathParamsType={pathParamsType}\n paramsCasing={paramsCasing}\n paramsType={paramsType}\n parser={parser}\n />\n </File>\n )\n })\n\n if (wrapper) {\n const wrapperFile = resolver.resolveFile({ name: wrapper.className, extname: '.ts' }, { root, output, group })\n\n files.push(\n <File\n key={wrapperFile.path}\n baseName={wrapperFile.baseName}\n path={wrapperFile.path}\n meta={wrapperFile.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {importPath ? (\n <File.Import name={['Client', 'RequestConfig']} path={importPath} isTypeOnly />\n ) : (\n <File.Import name={['Client', 'RequestConfig']} root={wrapperFile.path} path={path.resolve(root, '.kubb/fetch.ts')} isTypeOnly />\n )}\n\n {controllers.map(({ name, file }) => (\n <File.Import key={name} name={[name]} root={wrapperFile.path} path={file.path} />\n ))}\n\n <WrapperClient name={wrapper.className} classNames={controllers.map(({ name }) => name)} />\n </File>,\n )\n }\n\n return <>{files}</>\n },\n})\n","import path from 'node:path'\nimport { caseParams } from '@kubb/ast'\nimport { defineGenerator } from '@kubb/core'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { pluginZodName } from '@kubb/plugin-zod'\nimport { File } from '@kubb/react-fabric'\nimport { Client } from '../components/Client'\nimport { Url } from '../components/Url.tsx'\nimport type { PluginClient } from '../types'\n\nexport const clientGenerator = defineGenerator<PluginClient>({\n name: 'client',\n operation(node, options) {\n const { adapter, config, driver, resolver, root } = this\n const { output, urlType, dataReturnType, paramsCasing, paramsType, pathParamsType, parser, importPath, group } = options\n const baseURL = options.baseURL ?? adapter.rootNode?.meta?.baseURL\n\n const pluginTs = driver.getPlugin(pluginTsName)\n\n if (!pluginTs?.resolver) {\n return null\n }\n\n const tsResolver = pluginTs.resolver\n\n const pluginZod = parser === 'zod' ? driver.getPlugin(pluginZodName) : undefined\n const zodResolver = pluginZod?.resolver\n\n const casedParams = caseParams(node.parameters, paramsCasing)\n const pathParams = casedParams.filter((p) => p.in === 'path')\n const queryParams = casedParams.filter((p) => p.in === 'query')\n const headerParams = casedParams.filter((p) => p.in === 'header')\n\n const importedTypeNames = [\n ...pathParams.map((p) => tsResolver.resolvePathParamsName(node, p)),\n ...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),\n ...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),\n node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined,\n tsResolver.resolveResponseName(node),\n ...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode)),\n ].filter(Boolean)\n\n const importedZodNames =\n zodResolver && parser === 'zod'\n ? [zodResolver.resolveResponseName?.(node), node.requestBody?.schema ? zodResolver.resolveDataName?.(node) : undefined].filter(Boolean)\n : []\n\n const meta = {\n name: resolver.resolveName(node.operationId),\n urlName: `get${resolver.resolveName(node.operationId).charAt(0).toUpperCase()}${resolver.resolveName(node.operationId).slice(1)}Url`,\n file: resolver.resolveFile({ name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path }, { root, output, group }),\n fileTs: tsResolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n {\n root,\n output: pluginTs.options?.output ?? output,\n group: pluginTs.options?.group,\n },\n ),\n fileZod:\n zodResolver && pluginZod?.options\n ? zodResolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n {\n root,\n output: pluginZod.options.output ?? output,\n group: pluginZod.options.group,\n },\n )\n : undefined,\n } as const\n\n const isFormData = node.requestBody?.contentType === 'multipart/form-data'\n\n return (\n <File\n baseName={meta.file.baseName}\n path={meta.file.path}\n meta={meta.file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {importPath ? (\n <>\n <File.Import name={'fetch'} path={importPath} />\n <File.Import name={['Client', 'RequestConfig', 'ResponseErrorConfig']} path={importPath} isTypeOnly />\n </>\n ) : (\n <>\n <File.Import name={['fetch']} root={meta.file.path} path={path.resolve(root, '.kubb/fetch.ts')} />\n <File.Import\n name={['Client', 'RequestConfig', 'ResponseErrorConfig']}\n root={meta.file.path}\n path={path.resolve(root, '.kubb/fetch.ts')}\n isTypeOnly\n />\n </>\n )}\n\n {isFormData && node.requestBody?.schema && <File.Import name={['buildFormData']} root={meta.file.path} path={path.resolve(root, '.kubb/config.ts')} />}\n\n {meta.fileZod && importedZodNames.length > 0 && <File.Import name={importedZodNames as string[]} root={meta.file.path} path={meta.fileZod.path} />}\n\n {meta.fileTs && importedTypeNames.length > 0 && (\n <File.Import name={Array.from(new Set(importedTypeNames))} root={meta.file.path} path={meta.fileTs.path} isTypeOnly />\n )}\n\n <Url\n name={meta.urlName}\n baseURL={baseURL}\n pathParamsType={pathParamsType}\n paramsCasing={paramsCasing}\n paramsType={paramsType}\n node={node}\n tsResolver={tsResolver}\n isIndexable={urlType === 'export'}\n isExportable={urlType === 'export'}\n />\n\n <Client\n name={meta.name}\n urlName={meta.urlName}\n baseURL={baseURL}\n dataReturnType={dataReturnType}\n pathParamsType={pathParamsType}\n paramsCasing={paramsCasing}\n paramsType={paramsType}\n node={node}\n tsResolver={tsResolver}\n zodResolver={zodResolver}\n parser={parser}\n />\n </File>\n )\n },\n})\n","import { camelCase } from '@internals/utils'\nimport { defineGenerator } from '@kubb/core'\nimport type { FabricFile } from '@kubb/fabric-core/types'\nimport { File, Function } from '@kubb/react-fabric'\nimport type { PluginClient } from '../types'\n\nexport const groupedClientGenerator = defineGenerator<PluginClient>({\n name: 'groupedClient',\n operations(nodes, options) {\n const { config, resolver, adapter, root } = this\n const { output, group } = options\n\n const controllers = nodes.reduce(\n (acc, operationNode) => {\n if (group?.type === 'tag') {\n const tag = operationNode.tags[0]\n const name = tag ? group?.name?.({ group: camelCase(tag) }) : undefined\n\n if (!tag || !name) {\n return acc\n }\n\n const file = resolver.resolveFile({ name, extname: '.ts', tag }, { root, output, group })\n const clientFile = resolver.resolveFile(\n { name: operationNode.operationId, extname: '.ts', tag: operationNode.tags[0] ?? 'default', path: operationNode.path },\n { root, output, group },\n )\n\n const client = {\n name: resolver.resolveName(operationNode.operationId),\n file: clientFile,\n }\n\n const previous = acc.find((item) => item.file.path === file.path)\n\n if (previous) {\n previous.clients.push(client)\n } else {\n acc.push({ name, file, clients: [client] })\n }\n }\n\n return acc\n },\n [] as Array<{ name: string; file: FabricFile.File; clients: Array<{ name: string; file: FabricFile.File }> }>,\n )\n\n return (\n <>\n {controllers.map(({ name, file, clients }) => {\n return (\n <File\n key={file.path}\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {clients.map((client) => (\n <File.Import key={client.name} name={[client.name]} root={file.path} path={client.file.path} />\n ))}\n\n <File.Source name={name} isExportable isIndexable>\n <Function export name={name}>\n {`return { ${clients.map((client) => client.name).join(', ')} }`}\n </Function>\n </File.Source>\n </File>\n )\n })}\n </>\n )\n },\n})\n","import { URLPath } from '@internals/utils'\nimport type { OperationNode } from '@kubb/ast/types'\nimport { Const, File } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\n\ntype OperationsProps = {\n name: string\n nodes: Array<OperationNode>\n}\n\nexport function Operations({ name, nodes }: OperationsProps): FabricReactNode {\n const operationsObject: Record<string, { path: string; method: string }> = {}\n\n nodes.forEach((node) => {\n operationsObject[node.operationId] = {\n path: new URLPath(node.path).URL,\n method: node.method.toLowerCase(),\n }\n })\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Const name={name} export>\n {JSON.stringify(operationsObject, undefined, 2)}\n </Const>\n </File.Source>\n )\n}\n","import { defineGenerator } from '@kubb/core'\nimport { File } from '@kubb/react-fabric'\nimport { Operations } from '../components/Operations'\nimport type { PluginClient } from '../types'\n\nexport const operationsGenerator = defineGenerator<PluginClient>({\n name: 'client',\n operations(nodes, options) {\n const { config, resolver, adapter, root } = this\n const { output, group } = options\n\n const name = 'operations'\n const file = resolver.resolveFile({ name, extname: '.ts' }, { root, output, group })\n\n return (\n <File\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n <Operations name={name} nodes={nodes} />\n </File>\n )\n },\n})\n","import { buildJSDoc, URLPath } from '@internals/utils'\nimport type { OperationNode } from '@kubb/ast/types'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport type { PluginZod } from '@kubb/plugin-zod'\nimport { File } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\nimport type { PluginClient } from '../types.ts'\nimport { buildClassClientParams, buildFormDataLine, buildGenerics, buildHeaders, buildRequestDataLine, buildReturnStatement, getComments } from '../utils.ts'\nimport { Client } from './Client.tsx'\n\ntype OperationData = {\n node: OperationNode\n name: string\n tsResolver: PluginTs['resolver']\n zodResolver?: PluginZod['resolver']\n}\n\ntype Props = {\n name: string\n isExportable?: boolean\n isIndexable?: boolean\n operations: Array<OperationData>\n baseURL: string | undefined\n dataReturnType: PluginClient['resolvedOptions']['dataReturnType']\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n paramsType: PluginClient['resolvedOptions']['pathParamsType']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n children?: FabricReactNode\n}\n\ntype GenerateMethodProps = {\n node: OperationNode\n name: string\n tsResolver: PluginTs['resolver']\n zodResolver?: PluginZod['resolver']\n baseURL: string | undefined\n dataReturnType: PluginClient['resolvedOptions']['dataReturnType']\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n paramsType: PluginClient['resolvedOptions']['paramsType']\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nfunction generateMethod({\n node,\n name,\n tsResolver,\n zodResolver,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n}: GenerateMethodProps): string {\n const path = new URLPath(node.path, { casing: paramsCasing })\n const contentType = node.requestBody?.contentType ?? 'application/json'\n const isFormData = contentType === 'multipart/form-data'\n const headerParamsName =\n node.parameters.filter((p) => p.in === 'header').length > 0\n ? tsResolver.resolveHeaderParamsName(node, node.parameters.filter((p) => p.in === 'header')[0]!)\n : undefined\n const headers = buildHeaders(contentType, !!headerParamsName)\n const generics = buildGenerics(node, tsResolver)\n const paramsNode = Client.getParams({ paramsType, paramsCasing, pathParamsType, node, tsResolver, isConfigurable: true })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const clientParams = buildClassClientParams({ node, path, baseURL, tsResolver, isFormData, headers })\n const jsdoc = buildJSDoc(getComments(node))\n\n const requestDataLine = buildRequestDataLine({ parser, node, zodResolver })\n const formDataLine = buildFormDataLine(isFormData, !!node.requestBody?.schema)\n const returnStatement = buildReturnStatement({ dataReturnType, parser, node, zodResolver })\n\n const methodBody = [\n 'const { client: request = fetch, ...requestConfig } = mergeConfig(this.#config, config)',\n '',\n requestDataLine,\n formDataLine,\n `const res = await request<${generics.join(', ')}>(${clientParams.toCall()})`,\n returnStatement,\n ]\n .filter(Boolean)\n .map((line) => ` ${line}`)\n .join('\\n')\n\n return `${jsdoc} static async ${name}(${paramsSignature}) {\\n${methodBody}\\n }`\n}\n\nexport function StaticClassClient({\n name,\n isExportable = true,\n isIndexable = true,\n operations,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n children,\n}: Props): FabricReactNode {\n const methods = operations.map(({ node, name: methodName, tsResolver, zodResolver }) =>\n generateMethod({\n node,\n name: methodName,\n tsResolver,\n zodResolver,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n }),\n )\n\n const classCode = `export class ${name} {\\n static #config: Partial<RequestConfig> & { client?: Client } = {}\\n\\n${methods.join('\\n\\n')}\\n}`\n\n return (\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n {classCode}\n {children}\n </File.Source>\n )\n}\nStaticClassClient.getParams = Client.getParams\n","import path from 'node:path'\nimport { camelCase, pascalCase } from '@internals/utils'\nimport type { OperationNode } from '@kubb/ast/types'\nimport { defineGenerator } from '@kubb/core'\nimport type { FabricFile } from '@kubb/fabric-core/types'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport type { PluginZod } from '@kubb/plugin-zod'\nimport { pluginZodName } from '@kubb/plugin-zod'\nimport { File } from '@kubb/react-fabric'\nimport { StaticClassClient } from '../components/StaticClassClient'\nimport type { PluginClient } from '../types'\n\ntype OperationData = {\n node: OperationNode\n name: string\n tsResolver: PluginTs['resolver']\n zodResolver: PluginZod['resolver'] | undefined\n typeFile: FabricFile.File\n zodFile: FabricFile.File | undefined\n}\n\ntype Controller = {\n name: string\n file: FabricFile.File\n operations: Array<OperationData>\n}\n\nfunction resolveTypeImportNames(node: OperationNode, tsResolver: PluginTs['resolver']): Array<string> {\n const names: Array<string | undefined> = [\n node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined,\n tsResolver.resolveResponseName(node),\n ...node.parameters.filter((p) => p.in === 'path').map((p) => tsResolver.resolvePathParamsName(node, p)),\n ...node.parameters.filter((p) => p.in === 'query').map((p) => tsResolver.resolveQueryParamsName(node, p)),\n ...node.parameters.filter((p) => p.in === 'header').map((p) => tsResolver.resolveHeaderParamsName(node, p)),\n ...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode)),\n ]\n return names.filter((n): n is string => Boolean(n))\n}\n\nfunction resolveZodImportNames(node: OperationNode, zodResolver: PluginZod['resolver']): Array<string> {\n const names: Array<string | undefined> = [zodResolver.resolveResponseName?.(node), node.requestBody?.schema ? zodResolver.resolveDataName?.(node) : undefined]\n return names.filter((n): n is string => Boolean(n))\n}\n\nexport const staticClassClientGenerator = defineGenerator<PluginClient>({\n name: 'staticClassClient',\n operations(nodes, options) {\n const { adapter, config, driver, resolver, root } = this\n const { output, group, dataReturnType, paramsCasing, paramsType, pathParamsType, parser, importPath } = options\n const baseURL = options.baseURL ?? adapter.rootNode?.meta?.baseURL\n\n const pluginTs = driver.getPlugin(pluginTsName)\n if (!pluginTs?.resolver) return null\n\n const tsResolver = pluginTs.resolver\n const tsPluginOptions = pluginTs.options\n const pluginZod = parser === 'zod' ? driver.getPlugin(pluginZodName) : undefined\n const zodResolver = pluginZod?.resolver\n\n function buildOperationData(node: OperationNode): OperationData {\n const typeFile = tsResolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n { root, output: tsPluginOptions?.output ?? output, group: tsPluginOptions?.group },\n )\n const zodFile =\n zodResolver && pluginZod?.options\n ? zodResolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n { root, output: pluginZod.options.output ?? output, group: pluginZod.options.group },\n )\n : undefined\n\n return {\n node: node,\n name: resolver.resolveName(node.operationId),\n tsResolver,\n zodResolver,\n typeFile,\n zodFile,\n }\n }\n\n const controllers = nodes.reduce(\n (acc, operationNode) => {\n const tag = operationNode.tags[0]\n const groupName = tag ? (group?.name?.({ group: camelCase(tag) }) ?? pascalCase(tag)) : 'Client'\n\n if (!tag && !group) {\n const name = 'ApiClient'\n const file = resolver.resolveFile({ name, extname: '.ts' }, { root, output, group })\n const operationData = buildOperationData(operationNode)\n const previous = acc.find((item) => item.file.path === file.path)\n\n if (previous) {\n previous.operations.push(operationData)\n } else {\n acc.push({ name, file, operations: [operationData] })\n }\n } else if (tag) {\n const name = groupName\n const file = resolver.resolveFile({ name, extname: '.ts', tag }, { root, output, group })\n const operationData = buildOperationData(operationNode)\n const previous = acc.find((item) => item.file.path === file.path)\n\n if (previous) {\n previous.operations.push(operationData)\n } else {\n acc.push({ name, file, operations: [operationData] })\n }\n }\n\n return acc\n },\n [] as Array<Controller>,\n )\n\n function collectTypeImports(ops: Array<OperationData>) {\n const typeImportsByFile = new Map<string, Set<string>>()\n const typeFilesByPath = new Map<string, FabricFile.File>()\n\n ops.forEach((op) => {\n const names = resolveTypeImportNames(op.node, tsResolver)\n if (!typeImportsByFile.has(op.typeFile.path)) {\n typeImportsByFile.set(op.typeFile.path, new Set())\n }\n const imports = typeImportsByFile.get(op.typeFile.path)!\n names.forEach((n) => {\n imports.add(n)\n })\n typeFilesByPath.set(op.typeFile.path, op.typeFile)\n })\n\n return { typeImportsByFile, typeFilesByPath }\n }\n\n function collectZodImports(ops: Array<OperationData>) {\n const zodImportsByFile = new Map<string, Set<string>>()\n const zodFilesByPath = new Map<string, FabricFile.File>()\n\n ops.forEach((op) => {\n if (!op.zodFile || !zodResolver) return\n const names = resolveZodImportNames(op.node, zodResolver)\n if (!zodImportsByFile.has(op.zodFile.path)) {\n zodImportsByFile.set(op.zodFile.path, new Set())\n }\n const imports = zodImportsByFile.get(op.zodFile.path)!\n names.forEach((n) => {\n imports.add(n)\n })\n zodFilesByPath.set(op.zodFile.path, op.zodFile)\n })\n\n return { zodImportsByFile, zodFilesByPath }\n }\n\n return (\n <>\n {controllers.map(({ name, file, operations: ops }) => {\n const { typeImportsByFile, typeFilesByPath } = collectTypeImports(ops)\n const { zodImportsByFile, zodFilesByPath } =\n parser === 'zod' ? collectZodImports(ops) : { zodImportsByFile: new Map<string, Set<string>>(), zodFilesByPath: new Map<string, FabricFile.File>() }\n const hasFormData = ops.some((op) => op.node.requestBody?.contentType === 'multipart/form-data')\n\n return (\n <File\n key={file.path}\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {importPath ? (\n <>\n <File.Import name={'fetch'} path={importPath} />\n <File.Import name={['mergeConfig']} path={importPath} />\n <File.Import name={['Client', 'RequestConfig', 'ResponseErrorConfig']} path={importPath} isTypeOnly />\n </>\n ) : (\n <>\n <File.Import name={['fetch']} root={file.path} path={path.resolve(root, '.kubb/fetch.ts')} />\n <File.Import name={['mergeConfig']} root={file.path} path={path.resolve(root, '.kubb/fetch.ts')} />\n <File.Import\n name={['Client', 'RequestConfig', 'ResponseErrorConfig']}\n root={file.path}\n path={path.resolve(root, '.kubb/fetch.ts')}\n isTypeOnly\n />\n </>\n )}\n\n {hasFormData && <File.Import name={['buildFormData']} root={file.path} path={path.resolve(root, '.kubb/config.ts')} />}\n\n {Array.from(typeImportsByFile.entries()).map(([filePath, importSet]) => {\n const typeFile = typeFilesByPath.get(filePath)\n if (!typeFile) return null\n const importNames = Array.from(importSet).filter(Boolean)\n if (importNames.length === 0) return null\n return <File.Import key={filePath} name={importNames} root={file.path} path={typeFile.path} isTypeOnly />\n })}\n\n {parser === 'zod' &&\n Array.from(zodImportsByFile.entries()).map(([filePath, importSet]) => {\n const zodFile = zodFilesByPath.get(filePath)\n if (!zodFile) return null\n const importNames = Array.from(importSet).filter(Boolean)\n if (importNames.length === 0) return null\n return <File.Import key={filePath} name={importNames} root={file.path} path={zodFile.path} />\n })}\n\n <StaticClassClient\n name={name}\n operations={ops}\n baseURL={baseURL}\n dataReturnType={dataReturnType}\n pathParamsType={pathParamsType}\n paramsCasing={paramsCasing}\n paramsType={paramsType}\n parser={parser}\n />\n </File>\n )\n })}\n </>\n )\n },\n})\n","","import { camelCase } from '@internals/utils'\nimport { defineResolver } from '@kubb/core'\nimport type { PluginClient } from '../types.ts'\n\n/**\n * Resolver for `@kubb/plugin-client` that provides the default naming\n * and path-resolution helpers used by the plugin.\n *\n * @example\n * ```ts\n * import { resolverClient } from '@kubb/plugin-client'\n *\n * resolverClient.default('list pets', 'function') // -> 'listPets'\n * resolverClient.resolveName('show pet by id') // -> 'showPetById'\n * ```\n */\nexport const resolverClient = defineResolver<PluginClient>(() => ({\n name: 'default',\n pluginName: 'plugin-client',\n default(name, type) {\n return camelCase(name, { isFile: type === 'file' })\n },\n resolveName(name) {\n return this.default(name, 'function')\n },\n}))\n","import { camelCase } from '@internals/utils'\nimport { defineResolver } from '@kubb/core'\nimport type { PluginClient } from '../types.ts'\n\n/**\n * Legacy resolver for `@kubb/plugin-client` that provides backward-compatible\n * naming conventions matching the v4 behavior.\n *\n * @example\n * ```ts\n * import { resolverClientLegacy } from '@kubb/plugin-client'\n *\n * resolverClientLegacy.default('list pets', 'function') // -> 'listPets'\n * resolverClientLegacy.resolveName('show pet by id') // -> 'showPetById'\n * ```\n */\nexport const resolverClientLegacy = defineResolver<PluginClient>(() => ({\n name: 'kubbV4',\n pluginName: 'plugin-client',\n default(name, type) {\n return camelCase(name, { isFile: type === 'file' })\n },\n resolveName(name) {\n return this.default(name, 'function')\n },\n}))\n","import { definePresets } from '@kubb/core'\nimport { resolverClient } from './resolvers/resolverClient.ts'\nimport { resolverClientLegacy } from './resolvers/resolverClientLegacy.ts'\nimport type { ResolverClient } from './types.ts'\n\n/**\n * Built-in preset registry for `@kubb/plugin-client`.\n *\n * - `default` — uses `resolverClient` with v5 naming conventions.\n * - `kubbV4` — uses `resolverClientLegacy` with backward-compatible naming.\n *\n * Note: Unlike plugin-ts/plugin-zod, generators are not defined here because\n * plugin-client selects generators dynamically based on `clientType`, `group`,\n * and `operations` options. Generator selection happens in `plugin.ts`.\n */\nexport const presets = definePresets<ResolverClient>({\n default: {\n name: 'default',\n resolver: resolverClient,\n },\n kubbV4: {\n name: 'kubbV4',\n resolver: resolverClientLegacy,\n },\n})\n","import path from 'node:path'\nimport { camelCase } from '@internals/utils'\nimport { createPlugin, type Group, getPreset, mergeGenerators } from '@kubb/core'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { pluginZodName } from '@kubb/plugin-zod'\nimport { version } from '../package.json'\nimport { classClientGenerator } from './generators/classClientGenerator.tsx'\nimport { clientGenerator } from './generators/clientGenerator.tsx'\nimport { groupedClientGenerator } from './generators/groupedClientGenerator.tsx'\nimport { operationsGenerator } from './generators/operationsGenerator.tsx'\nimport { staticClassClientGenerator } from './generators/staticClassClientGenerator.tsx'\nimport { presets } from './presets.ts'\nimport { source as axiosClientSource } from './templates/clients/axios.source.ts'\nimport { source as fetchClientSource } from './templates/clients/fetch.source.ts'\nimport { source as configSource } from './templates/config.source.ts'\nimport type { PluginClient } from './types.ts'\n\n/**\n * Canonical plugin name for `@kubb/plugin-client`, used to identify the plugin\n * in driver lookups and warnings.\n */\nexport const pluginClientName = 'plugin-client' satisfies PluginClient['name']\n\n/**\n * The `@kubb/plugin-client` plugin factory.\n *\n * Generates type-safe HTTP client functions (or classes) from an OpenAPI/AST `RootNode`.\n * Walks operations, delegates rendering to the active generators,\n * and writes barrel files based on `output.barrelType`.\n *\n * @example\n * ```ts\n * import { pluginClient } from '@kubb/plugin-client'\n *\n * export default defineConfig({\n * plugins: [pluginClient({ output: { path: 'clients' } })],\n * })\n * ```\n */\nexport const pluginClient = createPlugin<PluginClient>((options) => {\n const {\n output = { path: 'clients', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n urlType = false,\n dataReturnType = 'data',\n paramsType = 'inline',\n pathParamsType = paramsType === 'object' ? 'object' : options.pathParamsType || 'inline',\n operations = false,\n paramsCasing,\n clientType = 'function',\n parser = 'client',\n client = 'axios',\n importPath,\n bundle = false,\n wrapper,\n baseURL,\n compatibilityPreset = 'default',\n resolver: userResolver,\n transformer: userTransformer,\n } = options\n\n const resolvedImportPath = importPath ?? (!bundle ? `@kubb/plugin-client/clients/${client}` : undefined)\n\n const selectedGenerators =\n options.generators ??\n [\n clientType === 'staticClass' ? staticClassClientGenerator : clientType === 'class' ? classClientGenerator : clientGenerator,\n group && clientType === 'function' ? groupedClientGenerator : undefined,\n operations ? operationsGenerator : undefined,\n ].filter((x): x is NonNullable<typeof x> => Boolean(x))\n\n const preset = getPreset({\n preset: compatibilityPreset,\n presets,\n resolver: userResolver,\n transformer: userTransformer,\n generators: selectedGenerators,\n })\n\n const generators = preset.generators ?? []\n const mergedGenerator = mergeGenerators(generators)\n\n let resolveNameWarning = false\n let resolvePathWarning = false\n\n return {\n name: pluginClientName,\n version,\n get resolver() {\n return preset.resolver\n },\n get transformer() {\n return preset.transformer\n },\n get options() {\n return {\n client,\n clientType,\n bundle,\n output,\n exclude,\n include,\n override,\n group: group\n ? ({\n ...group,\n name: group.name\n ? group.name\n : (ctx: { group: string }) => {\n if (group.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n },\n } satisfies Group)\n : undefined,\n parser,\n dataReturnType,\n importPath: resolvedImportPath,\n baseURL,\n paramsType,\n paramsCasing,\n pathParamsType,\n urlType,\n wrapper,\n resolver: preset.resolver,\n }\n },\n pre: [pluginTsName, parser === 'zod' ? pluginZodName : undefined].filter(Boolean),\n resolvePath(baseName, pathMode, options) {\n if (!resolvePathWarning) {\n this.warn('Do not use resolvePath for pluginClient, use resolverClient.resolvePath instead')\n resolvePathWarning = true\n }\n\n return this.plugin.resolver.resolvePath(\n { baseName, pathMode, tag: options?.group?.tag, path: options?.group?.path },\n { root: this.root, output, group: this.plugin.options.group },\n )\n },\n resolveName(name, type) {\n if (!resolveNameWarning) {\n this.warn('Do not use resolveName for pluginClient, use resolverClient.default instead')\n resolveNameWarning = true\n }\n\n return this.plugin.resolver.default(name, type)\n },\n async operation(node, options) {\n return mergedGenerator.operation?.call(this, node, options)\n },\n async operations(nodes, options) {\n return mergedGenerator.operations?.call(this, nodes, options)\n },\n async buildStart() {\n const { plugin } = this\n const root = this.root\n\n // pre add bundled fetch\n if (bundle && !plugin.options.importPath) {\n await this.addFile({\n baseName: 'fetch.ts',\n path: path.resolve(root, '.kubb/fetch.ts'),\n sources: [\n {\n name: 'fetch',\n value: plugin.options.client === 'fetch' ? fetchClientSource : axiosClientSource,\n isExportable: true,\n isIndexable: true,\n },\n ],\n imports: [],\n exports: [],\n })\n }\n\n await this.addFile({\n baseName: 'config.ts',\n path: path.resolve(root, '.kubb/config.ts'),\n sources: [\n {\n name: 'config',\n value: configSource,\n isExportable: false,\n isIndexable: false,\n },\n ],\n imports: [],\n exports: [],\n })\n },\n }\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["#options","#transformParam","#eachParam","declarationPrinter","getParams","Function","declarationPrinter","getParams","Function","Function","declarationPrinter","generateMethod","resolveTypeImportNames","resolveZodImportNames","Function","fetchClientSource","axiosClientSource","configSource"],"sources":["../../../internals/utils/src/casing.ts","../../../internals/utils/src/jsdoc.ts","../../../internals/utils/src/reserved.ts","../../../internals/utils/src/urlPath.ts","../src/utils.ts","../src/components/Url.tsx","../src/components/Client.tsx","../src/components/ClientLegacy.tsx","../src/components/ClassClient.tsx","../src/components/WrapperClient.tsx","../src/generators/classClientGenerator.tsx","../src/generators/clientGenerator.tsx","../src/generators/groupedClientGenerator.tsx","../src/components/Operations.tsx","../src/generators/operationsGenerator.tsx","../src/components/StaticClassClient.tsx","../src/generators/staticClassClientGenerator.tsx","../package.json","../src/resolvers/resolverClient.ts","../src/resolvers/resolverClientLegacy.ts","../src/presets.ts","../src/plugin.ts"],"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","/**\n * Builds a JSDoc comment block from an array of lines.\n * Returns `fallback` when `comments` is empty so callers always get a usable string.\n *\n * @example\n * ```ts\n * buildJSDoc(['@type string', '@example hello'])\n * // '/**\\n * @type string\\n * @example hello\\n *\\/\\n '\n * ```\n */\nexport function buildJSDoc(\n comments: Array<string>,\n options: {\n /**\n * String to use for indenting each line.\n * @default ' * '\n */\n indent?: string\n /**\n * String appended after the closing tag.\n * @default '\\n '\n */\n suffix?: string\n /**\n * Returned as-is when `comments` is empty.\n * @default ' '\n */\n fallback?: string\n } = {},\n): string {\n const { indent = ' * ', suffix = '\\n ', fallback = ' ' } = options\n\n if (comments.length === 0) return fallback\n\n return `/**\\n${comments.map((c) => `${indent}${c}`).join('\\n')}\\n */${suffix}`\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 * Prefixes `word` with `_` when it is a reserved JavaScript/Java identifier or starts with a digit.\n *\n * @example\n * ```ts\n * transformReservedWord('class') // '_class'\n * transformReservedWord('42foo') // '_42foo'\n * transformReservedWord('status') // 'status'\n * ```\n */\nexport function transformReservedWord(word: string): string {\n const firstChar = word.charCodeAt(0)\n if (word && (reservedWords.has(word as 'valueOf') || (firstChar >= 48 && firstChar <= 57))) {\n return `_${word}`\n }\n return word\n}\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 try {\n new Function(`var ${name}`)\n } catch {\n return false\n }\n return true\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.getParams()\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.getParams(),\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; 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}').getParams()\n * // { petId: 'petId', tagId: 'tagId' }\n * ```\n */\n getParams(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 type { OperationNode, ParameterNode } from '@kubb/ast/types'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport type { PluginZod } from '@kubb/plugin-zod'\nimport { FunctionParams } from '@kubb/react-fabric'\nimport type { PluginClient } from './types.ts'\n\nexport function getComments(node: OperationNode): Array<string> {\n return [\n node.description && `@description ${node.description}`,\n node.summary && `@summary ${node.summary}`,\n node.path && `{@link ${new URLPath(node.path).URL}}`,\n node.deprecated && '@deprecated',\n ]\n .filter((x): x is string => Boolean(x))\n .flatMap((text) => text.split(/\\r?\\n/).map((line) => line.trim()))\n .filter((x): x is string => Boolean(x))\n}\n\nexport function buildParamsMapping(originalParams: Array<ParameterNode>, casedParams: Array<ParameterNode>): Record<string, string> | undefined {\n const mapping: Record<string, string> = {}\n let hasChanged = false\n originalParams.forEach((param, i) => {\n const casedName = casedParams[i]?.name ?? param.name\n mapping[param.name] = casedName\n if (param.name !== casedName) {\n hasChanged = true\n }\n })\n return hasChanged ? mapping : undefined\n}\n\nexport function buildHeaders(contentType: string, hasHeaderParams: boolean): Array<string> {\n return [\n contentType !== 'application/json' && contentType !== 'multipart/form-data' ? `'Content-Type': '${contentType}'` : undefined,\n hasHeaderParams ? '...headers' : undefined,\n ].filter(Boolean) as Array<string>\n}\n\nexport function buildGenerics(node: OperationNode, tsResolver: PluginTs['resolver']): Array<string> {\n const responseName = tsResolver.resolveResponseName(node)\n const requestName = node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined\n const errorNames = node.responses.filter((r) => Number.parseInt(r.statusCode, 10) >= 400).map((r) => tsResolver.resolveResponseStatusName(node, r.statusCode))\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n return [responseName, TError, requestName || 'unknown'].filter(Boolean)\n}\n\nexport function buildClassClientParams({\n node,\n path,\n baseURL,\n tsResolver,\n isFormData,\n headers,\n}: {\n node: OperationNode\n path: URLPath\n baseURL: string | undefined\n tsResolver: PluginTs['resolver']\n isFormData: boolean\n headers: Array<string>\n}) {\n const queryParamsName =\n node.parameters.filter((p) => p.in === 'query').length > 0\n ? tsResolver.resolveQueryParamsName(node, node.parameters.filter((p) => p.in === 'query')[0]!)\n : undefined\n const requestName = node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined\n\n return FunctionParams.factory({\n config: {\n mode: 'object',\n children: {\n requestConfig: {\n mode: 'inlineSpread',\n },\n method: {\n value: JSON.stringify(node.method.toUpperCase()),\n },\n url: {\n value: path.template,\n },\n baseURL: baseURL\n ? {\n value: JSON.stringify(baseURL),\n }\n : undefined,\n params: queryParamsName ? {} : undefined,\n data: requestName\n ? {\n value: isFormData ? 'formData as FormData' : 'requestData',\n }\n : undefined,\n headers: headers.length\n ? {\n value: `{ ${headers.join(', ')}, ...requestConfig.headers }`,\n }\n : undefined,\n },\n },\n })\n}\n\nexport function buildRequestDataLine({\n parser,\n node,\n zodResolver,\n}: {\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n node: OperationNode\n zodResolver?: PluginZod['resolver']\n}): string {\n const zodRequestName = zodResolver && parser === 'zod' && node.requestBody?.schema ? zodResolver.resolveDataName?.(node) : undefined\n if (parser === 'zod' && zodRequestName) {\n return `const requestData = ${zodRequestName}.parse(data)`\n }\n if (node.requestBody?.schema) {\n return 'const requestData = data'\n }\n return ''\n}\n\nexport function buildFormDataLine(isFormData: boolean, hasRequest: boolean): string {\n return isFormData && hasRequest ? 'const formData = buildFormData(requestData)' : ''\n}\n\nexport function buildReturnStatement({\n dataReturnType,\n parser,\n node,\n zodResolver,\n}: {\n dataReturnType: PluginClient['resolvedOptions']['dataReturnType']\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n node: OperationNode\n zodResolver?: PluginZod['resolver']\n}): string {\n const zodResponseName = zodResolver && parser === 'zod' ? zodResolver.resolveResponseName?.(node) : undefined\n if (dataReturnType === 'full' && parser === 'zod' && zodResponseName) {\n return `return {...res, data: ${zodResponseName}.parse(res.data)}`\n }\n if (dataReturnType === 'data' && parser === 'zod' && zodResponseName) {\n return `return ${zodResponseName}.parse(res.data)`\n }\n if (dataReturnType === 'full' && parser === 'client') {\n return 'return res'\n }\n return 'return res.data'\n}\n","import { isValidVarName, URLPath } from '@internals/utils'\nimport { caseParams, createOperationParams } from '@kubb/ast'\nimport type { FunctionParametersNode, OperationNode } from '@kubb/ast/types'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { Const, File, Function } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\nimport type { PluginClient } from '../types.ts'\nimport { buildParamsMapping } from '../utils.ts'\n\ntype Props = {\n name: string\n isExportable?: boolean\n isIndexable?: boolean\n\n baseURL: string | undefined\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n paramsType: PluginClient['resolvedOptions']['pathParamsType']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n node: OperationNode\n tsResolver: PluginTs['resolver']\n}\n\ntype GetParamsProps = {\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n paramsType: PluginClient['resolvedOptions']['paramsType']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n node: OperationNode\n tsResolver: PluginTs['resolver']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nfunction getParams({ paramsType, paramsCasing, pathParamsType, node, tsResolver }: GetParamsProps): FunctionParametersNode {\n // Build a URL-only node with only path params (no body, query, header)\n const urlNode: OperationNode = {\n ...node,\n parameters: node.parameters.filter((p) => p.in === 'path'),\n requestBody: undefined,\n }\n\n return createOperationParams(urlNode, {\n paramsType: paramsType === 'object' ? 'object' : 'inline',\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver: tsResolver,\n })\n}\n\nexport function Url({\n name,\n isExportable = true,\n isIndexable = true,\n baseURL,\n paramsType,\n paramsCasing,\n pathParamsType,\n node,\n tsResolver,\n}: Props): FabricReactNode {\n const path = new URLPath(node.path)\n\n const paramsNode = getParams({\n paramsType,\n paramsCasing,\n pathParamsType,\n node,\n tsResolver,\n })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n\n const originalPathParams = node.parameters.filter((p) => p.in === 'path')\n const casedPathParams = caseParams(originalPathParams, paramsCasing)\n const pathParamsMapping = paramsCasing ? buildParamsMapping(originalPathParams, casedPathParams) : undefined\n\n return (\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n <Function name={name} export={isExportable} params={paramsSignature}>\n {pathParamsMapping &&\n Object.entries(pathParamsMapping)\n .filter(([originalName, camelCaseName]) => isValidVarName(originalName) && originalName !== camelCaseName)\n .map(([originalName, camelCaseName]) => `const ${originalName} = ${camelCaseName}`)\n .join('\\n')}\n {pathParamsMapping && Object.keys(pathParamsMapping).length > 0 && <br />}\n <Const name={'res'}>{`{ method: '${node.method.toUpperCase()}', url: ${path.toTemplateString({ prefix: baseURL })} as const }`}</Const>\n <br />\n return res\n </Function>\n </File.Source>\n )\n}\n\nUrl.getParams = getParams\n","import { isValidVarName, URLPath } from '@internals/utils'\nimport { caseParams, createFunctionParameter, createOperationParams, createTypeNode } from '@kubb/ast'\nimport type { FunctionParametersNode, OperationNode } from '@kubb/ast/types'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport type { PluginZod } from '@kubb/plugin-zod'\nimport { File, Function, FunctionParams } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\nimport type { PluginClient } from '../types.ts'\nimport { buildParamsMapping, getComments } from '../utils.ts'\nimport { Url } from './Url.tsx'\n\ntype Props = {\n name: string\n urlName?: string\n isExportable?: boolean\n isIndexable?: boolean\n isConfigurable?: boolean\n returnType?: string\n\n baseURL: string | undefined\n dataReturnType: PluginClient['resolvedOptions']['dataReturnType']\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n paramsType: PluginClient['resolvedOptions']['pathParamsType']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n node: OperationNode\n tsResolver: PluginTs['resolver']\n zodResolver?: PluginZod['resolver']\n children?: FabricReactNode\n}\n\ntype GetParamsProps = {\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n paramsType: PluginClient['resolvedOptions']['paramsType']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n node: OperationNode\n tsResolver: PluginTs['resolver']\n isConfigurable: boolean\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nfunction getParams({ paramsType, paramsCasing, pathParamsType, node, tsResolver, isConfigurable }: GetParamsProps): FunctionParametersNode {\n const requestName = node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined\n\n return createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver: tsResolver,\n extraParams: isConfigurable\n ? [\n createFunctionParameter({\n name: 'config',\n type: createTypeNode({\n variant: 'reference',\n name: requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }',\n }),\n default: '{}',\n }),\n ]\n : [],\n })\n}\n\nexport function Client({\n name,\n isExportable = true,\n isIndexable = true,\n returnType,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n node,\n tsResolver,\n zodResolver,\n urlName,\n children,\n isConfigurable = true,\n}: Props): FabricReactNode {\n const path = new URLPath(node.path)\n const contentType = node.requestBody?.contentType ?? 'application/json'\n const isFormData = contentType === 'multipart/form-data'\n\n const originalPathParams = node.parameters.filter((p) => p.in === 'path')\n const casedPathParams = caseParams(originalPathParams, paramsCasing)\n const originalQueryParams = node.parameters.filter((p) => p.in === 'query')\n const casedQueryParams = caseParams(originalQueryParams, paramsCasing)\n const originalHeaderParams = node.parameters.filter((p) => p.in === 'header')\n const casedHeaderParams = caseParams(originalHeaderParams, paramsCasing)\n\n const pathParamsMapping = paramsCasing && !urlName ? buildParamsMapping(originalPathParams, casedPathParams) : undefined\n const queryParamsMapping = paramsCasing ? buildParamsMapping(originalQueryParams, casedQueryParams) : undefined\n const headerParamsMapping = paramsCasing ? buildParamsMapping(originalHeaderParams, casedHeaderParams) : undefined\n\n const requestName = node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined\n const responseName = tsResolver.resolveResponseName(node)\n const queryParamsName = originalQueryParams.length > 0 ? tsResolver.resolveQueryParamsName(node, originalQueryParams[0]!) : undefined\n const headerParamsName = originalHeaderParams.length > 0 ? tsResolver.resolveHeaderParamsName(node, originalHeaderParams[0]!) : undefined\n\n const zodResponseName = zodResolver && parser === 'zod' ? zodResolver.resolveResponseName?.(node) : undefined\n const zodRequestName = zodResolver && parser === 'zod' && node.requestBody?.schema ? zodResolver.resolveDataName?.(node) : undefined\n\n const errorNames = node.responses\n .filter((r) => {\n const code = Number.parseInt(r.statusCode, 10)\n return code >= 400\n })\n .map((r) => tsResolver.resolveResponseStatusName(node, r.statusCode))\n\n const headers = [\n contentType !== 'application/json' && contentType !== 'multipart/form-data' ? `'Content-Type': '${contentType}'` : undefined,\n headerParamsName ? (headerParamsMapping ? '...mappedHeaders' : '...headers') : undefined,\n ].filter(Boolean)\n\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const generics = [responseName, TError, requestName || 'unknown'].filter(Boolean)\n const paramsNode = getParams({\n paramsType,\n paramsCasing,\n pathParamsType,\n node,\n tsResolver,\n isConfigurable,\n })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n\n const urlParamsNode = Url.getParams({\n paramsType,\n paramsCasing,\n pathParamsType,\n node,\n tsResolver,\n })\n const callPrinter = functionPrinter({ mode: 'call' })\n const urlParamsCall = callPrinter.print(urlParamsNode) ?? ''\n\n const clientParams = FunctionParams.factory({\n config: {\n mode: 'object',\n children: {\n method: {\n value: JSON.stringify(node.method.toUpperCase()),\n },\n url: {\n value: urlName ? `${urlName}(${urlParamsCall}).url.toString()` : path.template,\n },\n baseURL:\n baseURL && !urlName\n ? {\n value: `\\`${baseURL}\\``,\n }\n : undefined,\n params: queryParamsName ? (queryParamsMapping ? { value: 'mappedParams' } : {}) : undefined,\n data: requestName\n ? {\n value: isFormData ? 'formData as FormData' : 'requestData',\n }\n : undefined,\n requestConfig: isConfigurable\n ? {\n mode: 'inlineSpread',\n }\n : undefined,\n headers: headers.length\n ? {\n value: isConfigurable ? `{ ${headers.join(', ')}, ...requestConfig.headers }` : `{ ${headers.join(', ')} }`,\n }\n : undefined,\n },\n },\n })\n\n const childrenElement = children ? (\n children\n ) : (\n <>\n {dataReturnType === 'full' && parser === 'zod' && zodResponseName && `return {...res, data: ${zodResponseName}.parse(res.data)}`}\n {dataReturnType === 'data' && parser === 'zod' && zodResponseName && `return ${zodResponseName}.parse(res.data)`}\n {dataReturnType === 'full' && parser === 'client' && 'return res'}\n {dataReturnType === 'data' && parser === 'client' && 'return res.data'}\n </>\n )\n\n return (\n <>\n <br />\n\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n <Function\n name={name}\n async\n export={isExportable}\n params={paramsSignature}\n JSDoc={{\n comments: getComments(node),\n }}\n returnType={returnType}\n >\n {isConfigurable ? 'const { client: request = fetch, ...requestConfig } = config' : ''}\n <br />\n <br />\n {pathParamsMapping &&\n Object.entries(pathParamsMapping)\n .filter(([originalName, camelCaseName]) => isValidVarName(originalName) && originalName !== camelCaseName)\n .map(([originalName, camelCaseName]) => `const ${originalName} = ${camelCaseName}`)\n .join('\\n')}\n {pathParamsMapping && (\n <>\n <br />\n <br />\n </>\n )}\n {queryParamsMapping && queryParamsName && (\n <>\n {`const mappedParams = params ? { ${Object.entries(queryParamsMapping)\n .map(([originalName, camelCaseName]) => `\"${originalName}\": params.${camelCaseName}`)\n .join(', ')} } : undefined`}\n <br />\n <br />\n </>\n )}\n {headerParamsMapping && headerParamsName && (\n <>\n {`const mappedHeaders = headers ? { ${Object.entries(headerParamsMapping)\n .map(([originalName, camelCaseName]) => `\"${originalName}\": headers.${camelCaseName}`)\n .join(', ')} } : undefined`}\n <br />\n <br />\n </>\n )}\n {parser === 'zod' && zodRequestName ? `const requestData = ${zodRequestName}.parse(data)` : requestName && 'const requestData = data'}\n <br />\n {isFormData && requestName && 'const formData = buildFormData(requestData)'}\n <br />\n {isConfigurable\n ? `const res = await request<${generics.join(', ')}>(${clientParams.toCall()})`\n : `const res = await fetch<${generics.join(', ')}>(${clientParams.toCall()})`}\n <br />\n {childrenElement}\n </Function>\n </File.Source>\n </>\n )\n}\n\nClient.getParams = getParams\n","import { camelCase, isValidVarName, URLPath } from '@internals/utils'\nimport { Const, File, Function, FunctionParams } from '@kubb/react-fabric'\nimport type { FabricReactNode, Params } from '@kubb/react-fabric/types'\n\n/**\n * Structural type matching OperationSchema from @kubb/plugin-oas.\n * Avoids importing from @kubb/oas or @kubb/plugin-oas.\n * Uses broad types so that OperationSchemas is assignable without imports.\n */\ntype LegacyOperationSchema = {\n name?: string\n schema?: Record<string, any>\n statusCode?: string | number\n [key: string]: unknown\n}\n\ntype LegacyOperationSchemas = {\n pathParams?: LegacyOperationSchema\n queryParams?: LegacyOperationSchema\n headerParams?: LegacyOperationSchema\n request?: LegacyOperationSchema\n response: LegacyOperationSchema & { name: string }\n statusCodes?: Array<LegacyOperationSchema & { name: string }>\n errors?: Array<LegacyOperationSchema & { name: string }>\n [key: string]: unknown\n}\n\ntype LegacyOperation = {\n path: string\n method: string\n getDescription?(): string | undefined\n getSummary?(): string | undefined\n isDeprecated?(): boolean\n getContentType?(): string\n}\n\nfunction isSchemaRequired(schema?: LegacyOperationSchema['schema']): boolean {\n if (!schema) return false\n return Array.isArray(schema.required) ? !!schema.required.length : !!schema.required\n}\n\nfunction isSchemaOptional(schema?: LegacyOperationSchema['schema']): boolean {\n return !isSchemaRequired(schema)\n}\n\nfunction isAllOptionalDeep(schema?: any): boolean {\n if (!schema) return true\n if (Array.isArray(schema.required) && schema.required.length > 0) return false\n if (schema.allOf) return (schema.allOf as any[]).every(isAllOptionalDeep)\n return true\n}\n\nfunction getSchemaDefaultValue(schema?: LegacyOperationSchema['schema']): string | undefined {\n if (!schema || !isSchemaOptional(schema)) return undefined\n if (schema.type === 'array') return '[]'\n if (schema.anyOf || schema.oneOf) {\n const variants = (schema.anyOf || schema.oneOf) as any[]\n if (!Array.isArray(variants)) return undefined\n if (variants.some(isAllOptionalDeep)) return '{}'\n return undefined\n }\n if (schema.type === 'object' || schema.properties) return '{}'\n return undefined\n}\n\nfunction legacyGetPathParams(operationSchema: LegacyOperationSchema | undefined, options: { typed?: boolean; casing?: 'camelcase' } = {}): Params {\n if (!operationSchema?.schema?.properties || !operationSchema.name) return {}\n\n const requiredFields = Array.isArray(operationSchema.schema.required) ? operationSchema.schema.required : []\n\n return Object.entries(operationSchema.schema.properties).reduce((acc, [name]) => {\n if (!name) return acc\n let paramName = name\n if (options.casing === 'camelcase') {\n paramName = camelCase(name)\n } else if (!isValidVarName(name)) {\n paramName = camelCase(name)\n }\n\n const accessName = options.casing === 'camelcase' ? camelCase(name) : name\n\n acc[paramName] = {\n default: undefined,\n type: options.typed ? `${operationSchema.name}[\"${accessName}\"]` : undefined,\n optional: !requiredFields.includes(name),\n }\n return acc\n }, {} as Params)\n}\n\nfunction legacyGetParamsMapping(\n operationSchema: LegacyOperationSchema | undefined,\n options: { casing?: 'camelcase' } = {},\n): Record<string, string> | undefined {\n if (!operationSchema?.schema?.properties) return undefined\n\n const allEntries: Array<[string, string]> = []\n let hasTransformation = false\n\n Object.entries(operationSchema.schema.properties).forEach(([originalName]) => {\n let transformedName = originalName\n if (options.casing === 'camelcase') {\n transformedName = camelCase(originalName)\n } else if (!isValidVarName(originalName)) {\n transformedName = camelCase(originalName)\n }\n allEntries.push([originalName, transformedName])\n if (transformedName !== originalName) hasTransformation = true\n })\n\n if (options.casing === 'camelcase' && hasTransformation) {\n return Object.fromEntries(allEntries)\n }\n\n const mapping: Record<string, string> = {}\n allEntries.forEach(([originalName, transformedName]) => {\n if (transformedName !== originalName) mapping[originalName] = transformedName\n })\n\n return Object.keys(mapping).length > 0 ? mapping : undefined\n}\n\nfunction legacyGetComments(operation: LegacyOperation): string[] {\n return [\n operation.getDescription?.() && `@description ${operation.getDescription!()}`,\n operation.getSummary?.() && `@summary ${operation.getSummary!()}`,\n operation.path && `{@link ${new URLPath(operation.path).URL}}`,\n operation.isDeprecated?.() && '@deprecated',\n ]\n .filter((x): x is string => Boolean(x))\n .flatMap((text) => text.split(/\\r?\\n/).map((line) => line.trim()))\n .filter((x): x is string => Boolean(x))\n}\n\ntype Props = {\n name: string\n urlName?: string\n isExportable?: boolean\n isIndexable?: boolean\n isConfigurable?: boolean\n returnType?: string\n baseURL: string | undefined\n dataReturnType: 'data' | 'full'\n paramsCasing?: 'camelcase'\n paramsType: 'object' | 'inline'\n pathParamsType: 'object' | 'inline'\n parser: 'client' | 'zod' | undefined\n typeSchemas: LegacyOperationSchemas\n zodSchemas: LegacyOperationSchemas | undefined\n operation: LegacyOperation\n children?: FabricReactNode\n}\n\ntype GetParamsProps = {\n paramsCasing?: 'camelcase'\n paramsType: 'object' | 'inline'\n pathParamsType: 'object' | 'inline'\n typeSchemas: LegacyOperationSchemas\n isConfigurable: boolean\n}\n\nfunction getParams({ paramsType, paramsCasing, pathParamsType, typeSchemas, isConfigurable }: GetParamsProps) {\n if (paramsType === 'object') {\n const pathParams = legacyGetPathParams(typeSchemas.pathParams, {\n typed: true,\n casing: paramsCasing,\n })\n\n const children = {\n ...pathParams,\n data: typeSchemas.request?.name\n ? {\n type: typeSchemas.request?.name,\n optional: isSchemaOptional(typeSchemas.request?.schema),\n }\n : undefined,\n params: typeSchemas.queryParams?.name\n ? {\n type: typeSchemas.queryParams?.name,\n optional: isSchemaOptional(typeSchemas.queryParams?.schema),\n }\n : undefined,\n headers: typeSchemas.headerParams?.name\n ? {\n type: typeSchemas.headerParams?.name,\n optional: isSchemaOptional(typeSchemas.headerParams?.schema),\n }\n : undefined,\n }\n\n const allChildrenAreOptional = Object.values(children).every((child) => !child || child.optional)\n\n return FunctionParams.factory({\n data: {\n mode: 'object' as const,\n children,\n default: allChildrenAreOptional ? '{}' : undefined,\n },\n config: isConfigurable\n ? {\n type: typeSchemas.request?.name\n ? `Partial<RequestConfig<${typeSchemas.request?.name}>> & { client?: Client }`\n : 'Partial<RequestConfig> & { client?: Client }',\n default: '{}',\n }\n : undefined,\n })\n }\n\n return FunctionParams.factory({\n pathParams: typeSchemas.pathParams?.name\n ? {\n mode: pathParamsType === 'object' ? ('object' as const) : ('inlineSpread' as const),\n children: legacyGetPathParams(typeSchemas.pathParams, {\n typed: true,\n casing: paramsCasing,\n }),\n default: getSchemaDefaultValue(typeSchemas.pathParams?.schema),\n }\n : undefined,\n data: typeSchemas.request?.name\n ? {\n type: typeSchemas.request?.name,\n optional: isSchemaOptional(typeSchemas.request?.schema),\n }\n : undefined,\n params: typeSchemas.queryParams?.name\n ? {\n type: typeSchemas.queryParams?.name,\n optional: isSchemaOptional(typeSchemas.queryParams?.schema),\n }\n : undefined,\n headers: typeSchemas.headerParams?.name\n ? {\n type: typeSchemas.headerParams?.name,\n optional: isSchemaOptional(typeSchemas.headerParams?.schema),\n }\n : undefined,\n config: isConfigurable\n ? {\n type: typeSchemas.request?.name\n ? `Partial<RequestConfig<${typeSchemas.request?.name}>> & { client?: Client }`\n : 'Partial<RequestConfig> & { client?: Client }',\n default: '{}',\n }\n : undefined,\n })\n}\n\nexport function ClientLegacy({\n name,\n isExportable = true,\n isIndexable = true,\n returnType,\n typeSchemas,\n baseURL,\n dataReturnType,\n parser,\n zodSchemas,\n paramsType,\n paramsCasing,\n pathParamsType,\n operation,\n urlName,\n children,\n isConfigurable = true,\n}: Props): FabricReactNode {\n const path = new URLPath(operation.path)\n const contentType = operation.getContentType?.() ?? 'application/json'\n const isFormData = contentType === 'multipart/form-data'\n\n const pathParamsMapping = paramsCasing && !urlName ? legacyGetParamsMapping(typeSchemas.pathParams, { casing: paramsCasing }) : undefined\n const queryParamsMapping = paramsCasing ? legacyGetParamsMapping(typeSchemas.queryParams, { casing: paramsCasing }) : undefined\n const headerParamsMapping = paramsCasing ? legacyGetParamsMapping(typeSchemas.headerParams, { casing: paramsCasing }) : undefined\n\n const headers = [\n contentType !== 'application/json' && contentType !== 'multipart/form-data' ? `'Content-Type': '${contentType}'` : undefined,\n typeSchemas.headerParams?.name ? (headerParamsMapping ? '...mappedHeaders' : '...headers') : undefined,\n ].filter(Boolean)\n\n const TError = `ResponseErrorConfig<${typeSchemas.errors?.map((item) => item.name).join(' | ') || 'Error'}>`\n\n const generics = [typeSchemas.response.name, TError, typeSchemas.request?.name || 'unknown'].filter(Boolean)\n const params = getParams({\n paramsType,\n paramsCasing,\n pathParamsType,\n typeSchemas,\n isConfigurable,\n })\n const urlParams = UrlLegacy.getParams({\n paramsType,\n paramsCasing,\n pathParamsType,\n typeSchemas,\n })\n\n const clientParams = FunctionParams.factory({\n config: {\n mode: 'object' as const,\n children: {\n method: {\n value: JSON.stringify(operation.method.toUpperCase()),\n },\n url: {\n value: urlName ? `${urlName}(${urlParams.toCall()}).url.toString()` : path.template,\n },\n baseURL:\n baseURL && !urlName\n ? {\n value: `\\`${baseURL}\\``,\n }\n : undefined,\n params: typeSchemas.queryParams?.name ? (queryParamsMapping ? { value: 'mappedParams' } : {}) : undefined,\n data: typeSchemas.request?.name\n ? {\n value: isFormData ? 'formData as FormData' : 'requestData',\n }\n : undefined,\n requestConfig: isConfigurable\n ? {\n mode: 'inlineSpread' as const,\n }\n : undefined,\n headers: headers.length\n ? {\n value: isConfigurable ? `{ ${headers.join(', ')}, ...requestConfig.headers }` : `{ ${headers.join(', ')} }`,\n }\n : undefined,\n },\n },\n })\n\n const childrenElement = children ? (\n children\n ) : (\n <>\n {dataReturnType === 'full' && parser === 'zod' && zodSchemas && `return {...res, data: ${zodSchemas.response.name}.parse(res.data)}`}\n {dataReturnType === 'data' && parser === 'zod' && zodSchemas && `return ${zodSchemas.response.name}.parse(res.data)`}\n {dataReturnType === 'full' && parser === 'client' && 'return res'}\n {dataReturnType === 'data' && parser === 'client' && 'return res.data'}\n </>\n )\n\n return (\n <>\n <br />\n\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n <Function\n name={name}\n async\n export={isExportable}\n params={params.toConstructor()}\n JSDoc={{\n comments: legacyGetComments(operation),\n }}\n returnType={returnType}\n >\n {isConfigurable ? 'const { client: request = fetch, ...requestConfig } = config' : ''}\n <br />\n <br />\n {pathParamsMapping &&\n Object.entries(pathParamsMapping)\n .filter(([originalName, camelCaseName]) => originalName !== camelCaseName && isValidVarName(originalName))\n .map(([originalName, camelCaseName]) => `const ${originalName} = ${camelCaseName}`)\n .join('\\n')}\n {pathParamsMapping && (\n <>\n <br />\n <br />\n </>\n )}\n {queryParamsMapping && typeSchemas.queryParams?.name && (\n <>\n {`const mappedParams = params ? { ${Object.entries(queryParamsMapping)\n .map(([originalName, camelCaseName]) => `\"${originalName}\": params.${camelCaseName}`)\n .join(', ')} } : undefined`}\n <br />\n <br />\n </>\n )}\n {headerParamsMapping && typeSchemas.headerParams?.name && (\n <>\n {`const mappedHeaders = headers ? { ${Object.entries(headerParamsMapping)\n .map(([originalName, camelCaseName]) => `\"${originalName}\": headers.${camelCaseName}`)\n .join(', ')} } : undefined`}\n <br />\n <br />\n </>\n )}\n {parser === 'zod' && zodSchemas?.request?.name\n ? `const requestData = ${zodSchemas.request.name}.parse(data)`\n : typeSchemas?.request?.name && 'const requestData = data'}\n <br />\n {isFormData && typeSchemas?.request?.name && 'const formData = buildFormData(requestData)'}\n <br />\n {isConfigurable\n ? `const res = await request<${generics.join(', ')}>(${clientParams.toCall()})`\n : `const res = await fetch<${generics.join(', ')}>(${clientParams.toCall()})`}\n <br />\n {childrenElement}\n </Function>\n </File.Source>\n </>\n )\n}\n\nClientLegacy.getParams = getParams\n\n// --- UrlLegacy ---\n\ntype UrlProps = {\n name: string\n isExportable?: boolean\n isIndexable?: boolean\n baseURL: string | undefined\n paramsCasing?: 'camelcase'\n paramsType: 'object' | 'inline'\n pathParamsType: 'object' | 'inline'\n typeSchemas: LegacyOperationSchemas\n operation: LegacyOperation\n}\n\ntype UrlGetParamsProps = {\n paramsCasing?: 'camelcase'\n paramsType: 'object' | 'inline'\n pathParamsType: 'object' | 'inline'\n typeSchemas: LegacyOperationSchemas\n}\n\nfunction getUrlParams({ paramsType, paramsCasing, pathParamsType, typeSchemas }: UrlGetParamsProps) {\n if (paramsType === 'object') {\n const pathParams = legacyGetPathParams(typeSchemas.pathParams, {\n typed: true,\n casing: paramsCasing,\n })\n\n return FunctionParams.factory({\n data: {\n mode: 'object' as const,\n children: {\n ...pathParams,\n },\n },\n })\n }\n\n return FunctionParams.factory({\n pathParams: typeSchemas.pathParams?.name\n ? {\n mode: pathParamsType === 'object' ? ('object' as const) : ('inlineSpread' as const),\n children: legacyGetPathParams(typeSchemas.pathParams, {\n typed: true,\n casing: paramsCasing,\n }),\n default: getSchemaDefaultValue(typeSchemas.pathParams?.schema),\n }\n : undefined,\n })\n}\n\nexport function UrlLegacy({\n name,\n isExportable = true,\n isIndexable = true,\n typeSchemas,\n baseURL,\n paramsType,\n paramsCasing,\n pathParamsType,\n operation,\n}: UrlProps): FabricReactNode {\n const path = new URLPath(operation.path)\n const params = getUrlParams({\n paramsType,\n paramsCasing,\n pathParamsType,\n typeSchemas,\n })\n\n const pathParamsMapping = paramsCasing ? legacyGetParamsMapping(typeSchemas.pathParams, { casing: paramsCasing }) : undefined\n\n return (\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n <Function name={name} export={isExportable} params={params.toConstructor()}>\n {pathParamsMapping &&\n Object.entries(pathParamsMapping)\n .filter(([originalName, camelCaseName]) => originalName !== camelCaseName && isValidVarName(originalName))\n .map(([originalName, camelCaseName]) => `const ${originalName} = ${camelCaseName}`)\n .join('\\n')}\n {pathParamsMapping && <br />}\n <Const name={'res'}>{`{ method: '${operation.method.toUpperCase()}', url: ${path.toTemplateString({ prefix: baseURL })} as const }`}</Const>\n <br />\n return res\n </Function>\n </File.Source>\n )\n}\n\nUrlLegacy.getParams = getUrlParams\n","import { buildJSDoc, URLPath } from '@internals/utils'\nimport type { OperationNode } from '@kubb/ast/types'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport type { PluginZod } from '@kubb/plugin-zod'\nimport { File } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\nimport type { PluginClient } from '../types.ts'\nimport { buildClassClientParams, buildFormDataLine, buildGenerics, buildHeaders, buildRequestDataLine, buildReturnStatement, getComments } from '../utils.ts'\n\nimport { Client } from './Client.tsx'\n\ntype OperationData = {\n node: OperationNode\n name: string\n tsResolver: PluginTs['resolver']\n zodResolver?: PluginZod['resolver']\n}\n\ntype Props = {\n name: string\n isExportable?: boolean\n isIndexable?: boolean\n operations: Array<OperationData>\n baseURL: string | undefined\n dataReturnType: PluginClient['resolvedOptions']['dataReturnType']\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n paramsType: PluginClient['resolvedOptions']['pathParamsType']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n children?: FabricReactNode\n}\n\ntype GenerateMethodProps = {\n node: OperationNode\n name: string\n tsResolver: PluginTs['resolver']\n zodResolver?: PluginZod['resolver']\n baseURL: string | undefined\n dataReturnType: PluginClient['resolvedOptions']['dataReturnType']\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n paramsType: PluginClient['resolvedOptions']['paramsType']\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nfunction generateMethod({\n node,\n name,\n tsResolver,\n zodResolver,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n}: GenerateMethodProps): string {\n const path = new URLPath(node.path, { casing: paramsCasing })\n const contentType = node.requestBody?.contentType ?? 'application/json'\n const isFormData = contentType === 'multipart/form-data'\n const headerParamsName =\n node.parameters.filter((p) => p.in === 'header').length > 0\n ? tsResolver.resolveHeaderParamsName(node, node.parameters.filter((p) => p.in === 'header')[0]!)\n : undefined\n const headers = buildHeaders(contentType, !!headerParamsName)\n const generics = buildGenerics(node, tsResolver)\n const paramsNode = ClassClient.getParams({ paramsType, paramsCasing, pathParamsType, node, tsResolver, isConfigurable: true })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const clientParams = buildClassClientParams({ node, path, baseURL, tsResolver, isFormData, headers })\n const jsdoc = buildJSDoc(getComments(node))\n\n const requestDataLine = buildRequestDataLine({ parser, node, zodResolver })\n const formDataLine = buildFormDataLine(isFormData, !!node.requestBody?.schema)\n const returnStatement = buildReturnStatement({ dataReturnType, parser, node, zodResolver })\n\n const methodBody = [\n 'const { client: request = fetch, ...requestConfig } = mergeConfig(this.#config, config)',\n '',\n requestDataLine,\n formDataLine,\n `const res = await request<${generics.join(', ')}>(${clientParams.toCall()})`,\n returnStatement,\n ]\n .filter(Boolean)\n .map((line) => ` ${line}`)\n .join('\\n')\n\n return `${jsdoc}async ${name}(${paramsSignature}) {\\n${methodBody}\\n }`\n}\n\nexport function ClassClient({\n name,\n isExportable = true,\n isIndexable = true,\n operations,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n children,\n}: Props): FabricReactNode {\n const methods = operations.map(({ node, name: methodName, tsResolver, zodResolver }) =>\n generateMethod({\n node,\n name: methodName,\n tsResolver,\n zodResolver,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n }),\n )\n\n const classCode = `export class ${name} {\n #config: Partial<RequestConfig> & { client?: Client }\n\n constructor(config: Partial<RequestConfig> & { client?: Client } = {}) {\n this.#config = config\n }\n\n${methods.join('\\n\\n')}\n}`\n\n return (\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n {classCode}\n {children}\n </File.Source>\n )\n}\nClassClient.getParams = Client.getParams\n","import { camelCase } from '@internals/utils'\nimport { File } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\n\ntype Props = {\n name: string\n classNames: Array<string>\n isExportable?: boolean\n isIndexable?: boolean\n}\n\nexport function WrapperClient({ name, classNames, isExportable = true, isIndexable = true }: Props): FabricReactNode {\n const properties = classNames.map((className) => ` readonly ${camelCase(className)}: ${className}`).join('\\n')\n const assignments = classNames.map((className) => ` this.${camelCase(className)} = new ${className}(config)`).join('\\n')\n\n const classCode = `export class ${name} {\n${properties}\n\n constructor(config: Partial<RequestConfig> & { client?: Client } = {}) {\n${assignments}\n }\n}`\n\n return (\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n {classCode}\n </File.Source>\n )\n}\n","import path from 'node:path'\nimport { camelCase, pascalCase } from '@internals/utils'\nimport type { OperationNode } from '@kubb/ast/types'\nimport type { KubbFile } from '@kubb/core'\nimport { defineGenerator } from '@kubb/core'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport type { PluginZod } from '@kubb/plugin-zod'\nimport { pluginZodName } from '@kubb/plugin-zod'\nimport { File } from '@kubb/react-fabric'\nimport { ClassClient } from '../components/ClassClient'\nimport { WrapperClient } from '../components/WrapperClient'\nimport type { PluginClient } from '../types'\n\ntype OperationData = {\n node: OperationNode\n name: string\n tsResolver: PluginTs['resolver']\n zodResolver: PluginZod['resolver'] | undefined\n typeFile: KubbFile.File\n zodFile: KubbFile.File | undefined\n}\n\ntype Controller = {\n name: string\n file: KubbFile.File\n operations: Array<OperationData>\n}\n\nfunction resolveTypeImportNames(node: OperationNode, tsResolver: PluginTs['resolver']): Array<string> {\n const names: Array<string | undefined> = [\n node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined,\n tsResolver.resolveResponseName(node),\n ...node.parameters.filter((p) => p.in === 'path').map((p) => tsResolver.resolvePathParamsName(node, p)),\n ...node.parameters.filter((p) => p.in === 'query').map((p) => tsResolver.resolveQueryParamsName(node, p)),\n ...node.parameters.filter((p) => p.in === 'header').map((p) => tsResolver.resolveHeaderParamsName(node, p)),\n ...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode)),\n ]\n return names.filter((n): n is string => Boolean(n))\n}\n\nfunction resolveZodImportNames(node: OperationNode, zodResolver: PluginZod['resolver']): Array<string> {\n const names: Array<string | undefined> = [zodResolver.resolveResponseName?.(node), node.requestBody?.schema ? zodResolver.resolveDataName?.(node) : undefined]\n return names.filter((n): n is string => Boolean(n))\n}\n\nexport const classClientGenerator = defineGenerator<PluginClient>({\n name: 'classClient',\n operations(nodes, options) {\n const { adapter, config, driver, resolver, root } = this\n const { output, group, dataReturnType, paramsCasing, paramsType, pathParamsType, parser, importPath, wrapper } = options\n const baseURL = options.baseURL ?? adapter.rootNode?.meta?.baseURL\n\n const pluginTs = driver.getPlugin(pluginTsName)\n if (!pluginTs?.resolver) return null\n\n const tsResolver = pluginTs.resolver\n const tsPluginOptions = pluginTs.options\n const pluginZod = parser === 'zod' ? driver.getPlugin(pluginZodName) : undefined\n const zodResolver = pluginZod?.resolver\n\n function buildOperationData(node: OperationNode): OperationData {\n const typeFile = tsResolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n { root, output: tsPluginOptions?.output ?? output, group: tsPluginOptions?.group },\n )\n const zodFile =\n zodResolver && pluginZod?.options\n ? zodResolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n { root, output: pluginZod.options.output ?? output, group: pluginZod.options.group },\n )\n : undefined\n\n return {\n node: node,\n name: resolver.resolveName(node.operationId),\n tsResolver,\n zodResolver,\n typeFile,\n zodFile,\n }\n }\n\n const controllers = nodes.reduce(\n (acc, operationNode) => {\n const tag = operationNode.tags[0]\n const groupName = tag ? (group?.name?.({ group: camelCase(tag) }) ?? pascalCase(tag)) : 'Client'\n\n if (!tag && !group) {\n const name = 'ApiClient'\n const file = resolver.resolveFile({ name, extname: '.ts' }, { root, output, group })\n const operationData = buildOperationData(operationNode)\n const previous = acc.find((item) => item.file.path === file.path)\n\n if (previous) {\n previous.operations.push(operationData)\n } else {\n acc.push({ name, file, operations: [operationData] })\n }\n } else if (tag) {\n const name = groupName\n const file = resolver.resolveFile({ name, extname: '.ts', tag }, { root, output, group })\n const operationData = buildOperationData(operationNode)\n const previous = acc.find((item) => item.file.path === file.path)\n\n if (previous) {\n previous.operations.push(operationData)\n } else {\n acc.push({ name, file, operations: [operationData] })\n }\n }\n\n return acc\n },\n [] as Array<Controller>,\n )\n\n function collectTypeImports(ops: Array<OperationData>) {\n const typeImportsByFile = new Map<string, Set<string>>()\n const typeFilesByPath = new Map<string, KubbFile.File>()\n\n ops.forEach((op) => {\n const names = resolveTypeImportNames(op.node, tsResolver)\n if (!typeImportsByFile.has(op.typeFile.path)) {\n typeImportsByFile.set(op.typeFile.path, new Set())\n }\n const imports = typeImportsByFile.get(op.typeFile.path)!\n names.forEach((n) => {\n imports.add(n)\n })\n typeFilesByPath.set(op.typeFile.path, op.typeFile)\n })\n\n return { typeImportsByFile, typeFilesByPath }\n }\n\n function collectZodImports(ops: Array<OperationData>) {\n const zodImportsByFile = new Map<string, Set<string>>()\n const zodFilesByPath = new Map<string, KubbFile.File>()\n\n ops.forEach((op) => {\n if (!op.zodFile || !zodResolver) return\n const names = resolveZodImportNames(op.node, zodResolver)\n if (!zodImportsByFile.has(op.zodFile.path)) {\n zodImportsByFile.set(op.zodFile.path, new Set())\n }\n const imports = zodImportsByFile.get(op.zodFile.path)!\n names.forEach((n) => {\n imports.add(n)\n })\n zodFilesByPath.set(op.zodFile.path, op.zodFile)\n })\n\n return { zodImportsByFile, zodFilesByPath }\n }\n\n const files = controllers.map(({ name, file, operations: ops }) => {\n const { typeImportsByFile, typeFilesByPath } = collectTypeImports(ops)\n const { zodImportsByFile, zodFilesByPath } =\n parser === 'zod' ? collectZodImports(ops) : { zodImportsByFile: new Map<string, Set<string>>(), zodFilesByPath: new Map<string, KubbFile.File>() }\n const hasFormData = ops.some((op) => op.node.requestBody?.contentType === 'multipart/form-data')\n\n return (\n <File\n key={file.path}\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {importPath ? (\n <>\n <File.Import name={'fetch'} path={importPath} />\n <File.Import name={['mergeConfig']} path={importPath} />\n <File.Import name={['Client', 'RequestConfig', 'ResponseErrorConfig']} path={importPath} isTypeOnly />\n </>\n ) : (\n <>\n <File.Import name={['fetch']} root={file.path} path={path.resolve(root, '.kubb/fetch.ts')} />\n <File.Import name={['mergeConfig']} root={file.path} path={path.resolve(root, '.kubb/fetch.ts')} />\n <File.Import name={['Client', 'RequestConfig', 'ResponseErrorConfig']} root={file.path} path={path.resolve(root, '.kubb/fetch.ts')} isTypeOnly />\n </>\n )}\n\n {hasFormData && <File.Import name={['buildFormData']} root={file.path} path={path.resolve(root, '.kubb/config.ts')} />}\n\n {Array.from(typeImportsByFile.entries()).map(([filePath, importSet]) => {\n const typeFile = typeFilesByPath.get(filePath)\n if (!typeFile) return null\n const importNames = Array.from(importSet).filter(Boolean)\n if (importNames.length === 0) return null\n return <File.Import key={filePath} name={importNames} root={file.path} path={typeFile.path} isTypeOnly />\n })}\n\n {parser === 'zod' &&\n Array.from(zodImportsByFile.entries()).map(([filePath, importSet]) => {\n const zodFile = zodFilesByPath.get(filePath)\n if (!zodFile) return null\n const importNames = Array.from(importSet).filter(Boolean)\n if (importNames.length === 0) return null\n return <File.Import key={filePath} name={importNames} root={file.path} path={zodFile.path} />\n })}\n\n <ClassClient\n name={name}\n operations={ops}\n baseURL={baseURL}\n dataReturnType={dataReturnType}\n pathParamsType={pathParamsType}\n paramsCasing={paramsCasing}\n paramsType={paramsType}\n parser={parser}\n />\n </File>\n )\n })\n\n if (wrapper) {\n const wrapperFile = resolver.resolveFile({ name: wrapper.className, extname: '.ts' }, { root, output, group })\n\n files.push(\n <File\n key={wrapperFile.path}\n baseName={wrapperFile.baseName}\n path={wrapperFile.path}\n meta={wrapperFile.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {importPath ? (\n <File.Import name={['Client', 'RequestConfig']} path={importPath} isTypeOnly />\n ) : (\n <File.Import name={['Client', 'RequestConfig']} root={wrapperFile.path} path={path.resolve(root, '.kubb/fetch.ts')} isTypeOnly />\n )}\n\n {controllers.map(({ name, file }) => (\n <File.Import key={name} name={[name]} root={wrapperFile.path} path={file.path} />\n ))}\n\n <WrapperClient name={wrapper.className} classNames={controllers.map(({ name }) => name)} />\n </File>,\n )\n }\n\n return <>{files}</>\n },\n})\n","import path from 'node:path'\nimport { caseParams } from '@kubb/ast'\nimport { defineGenerator } from '@kubb/core'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { pluginZodName } from '@kubb/plugin-zod'\nimport { File } from '@kubb/react-fabric'\nimport { Client } from '../components/Client'\nimport { Url } from '../components/Url.tsx'\nimport type { PluginClient } from '../types'\n\nexport const clientGenerator = defineGenerator<PluginClient>({\n name: 'client',\n operation(node, options) {\n const { adapter, config, driver, resolver, root } = this\n const { output, urlType, dataReturnType, paramsCasing, paramsType, pathParamsType, parser, importPath, group } = options\n const baseURL = options.baseURL ?? adapter.rootNode?.meta?.baseURL\n\n const pluginTs = driver.getPlugin(pluginTsName)\n\n if (!pluginTs?.resolver) {\n return null\n }\n\n const tsResolver = pluginTs.resolver\n\n const pluginZod = parser === 'zod' ? driver.getPlugin(pluginZodName) : undefined\n const zodResolver = pluginZod?.resolver\n\n const casedParams = caseParams(node.parameters, paramsCasing)\n const pathParams = casedParams.filter((p) => p.in === 'path')\n const queryParams = casedParams.filter((p) => p.in === 'query')\n const headerParams = casedParams.filter((p) => p.in === 'header')\n\n const importedTypeNames = [\n ...pathParams.map((p) => tsResolver.resolvePathParamsName(node, p)),\n ...queryParams.map((p) => tsResolver.resolveQueryParamsName(node, p)),\n ...headerParams.map((p) => tsResolver.resolveHeaderParamsName(node, p)),\n node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined,\n tsResolver.resolveResponseName(node),\n ...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode)),\n ].filter(Boolean)\n\n const importedZodNames =\n zodResolver && parser === 'zod'\n ? [zodResolver.resolveResponseName?.(node), node.requestBody?.schema ? zodResolver.resolveDataName?.(node) : undefined].filter(Boolean)\n : []\n\n const meta = {\n name: resolver.resolveName(node.operationId),\n urlName: `get${resolver.resolveName(node.operationId).charAt(0).toUpperCase()}${resolver.resolveName(node.operationId).slice(1)}Url`,\n file: resolver.resolveFile({ name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path }, { root, output, group }),\n fileTs: tsResolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n {\n root,\n output: pluginTs.options?.output ?? output,\n group: pluginTs.options?.group,\n },\n ),\n fileZod:\n zodResolver && pluginZod?.options\n ? zodResolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n {\n root,\n output: pluginZod.options.output ?? output,\n group: pluginZod.options.group,\n },\n )\n : undefined,\n } as const\n\n const isFormData = node.requestBody?.contentType === 'multipart/form-data'\n\n return (\n <File\n baseName={meta.file.baseName}\n path={meta.file.path}\n meta={meta.file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {importPath ? (\n <>\n <File.Import name={'fetch'} path={importPath} />\n <File.Import name={['Client', 'RequestConfig', 'ResponseErrorConfig']} path={importPath} isTypeOnly />\n </>\n ) : (\n <>\n <File.Import name={['fetch']} root={meta.file.path} path={path.resolve(root, '.kubb/fetch.ts')} />\n <File.Import\n name={['Client', 'RequestConfig', 'ResponseErrorConfig']}\n root={meta.file.path}\n path={path.resolve(root, '.kubb/fetch.ts')}\n isTypeOnly\n />\n </>\n )}\n\n {isFormData && node.requestBody?.schema && <File.Import name={['buildFormData']} root={meta.file.path} path={path.resolve(root, '.kubb/config.ts')} />}\n\n {meta.fileZod && importedZodNames.length > 0 && <File.Import name={importedZodNames as string[]} root={meta.file.path} path={meta.fileZod.path} />}\n\n {meta.fileTs && importedTypeNames.length > 0 && (\n <File.Import name={Array.from(new Set(importedTypeNames))} root={meta.file.path} path={meta.fileTs.path} isTypeOnly />\n )}\n\n <Url\n name={meta.urlName}\n baseURL={baseURL}\n pathParamsType={pathParamsType}\n paramsCasing={paramsCasing}\n paramsType={paramsType}\n node={node}\n tsResolver={tsResolver}\n isIndexable={urlType === 'export'}\n isExportable={urlType === 'export'}\n />\n\n <Client\n name={meta.name}\n urlName={meta.urlName}\n baseURL={baseURL}\n dataReturnType={dataReturnType}\n pathParamsType={pathParamsType}\n paramsCasing={paramsCasing}\n paramsType={paramsType}\n node={node}\n tsResolver={tsResolver}\n zodResolver={zodResolver}\n parser={parser}\n />\n </File>\n )\n },\n})\n","import { camelCase } from '@internals/utils'\nimport type { KubbFile } from '@kubb/core'\nimport { defineGenerator } from '@kubb/core'\nimport { File, Function } from '@kubb/react-fabric'\nimport type { PluginClient } from '../types'\n\nexport const groupedClientGenerator = defineGenerator<PluginClient>({\n name: 'groupedClient',\n operations(nodes, options) {\n const { config, resolver, adapter, root } = this\n const { output, group } = options\n\n const controllers = nodes.reduce(\n (acc, operationNode) => {\n if (group?.type === 'tag') {\n const tag = operationNode.tags[0]\n const name = tag ? group?.name?.({ group: camelCase(tag) }) : undefined\n\n if (!tag || !name) {\n return acc\n }\n\n const file = resolver.resolveFile({ name, extname: '.ts', tag }, { root, output, group })\n const clientFile = resolver.resolveFile(\n { name: operationNode.operationId, extname: '.ts', tag: operationNode.tags[0] ?? 'default', path: operationNode.path },\n { root, output, group },\n )\n\n const client = {\n name: resolver.resolveName(operationNode.operationId),\n file: clientFile,\n }\n\n const previous = acc.find((item) => item.file.path === file.path)\n\n if (previous) {\n previous.clients.push(client)\n } else {\n acc.push({ name, file, clients: [client] })\n }\n }\n\n return acc\n },\n [] as Array<{ name: string; file: KubbFile.File; clients: Array<{ name: string; file: KubbFile.File }> }>,\n )\n\n return (\n <>\n {controllers.map(({ name, file, clients }) => {\n return (\n <File\n key={file.path}\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {clients.map((client) => (\n <File.Import key={client.name} name={[client.name]} root={file.path} path={client.file.path} />\n ))}\n\n <File.Source name={name} isExportable isIndexable>\n <Function export name={name}>\n {`return { ${clients.map((client) => client.name).join(', ')} }`}\n </Function>\n </File.Source>\n </File>\n )\n })}\n </>\n )\n },\n})\n","import { URLPath } from '@internals/utils'\nimport type { OperationNode } from '@kubb/ast/types'\nimport { Const, File } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\n\ntype OperationsProps = {\n name: string\n nodes: Array<OperationNode>\n}\n\nexport function Operations({ name, nodes }: OperationsProps): FabricReactNode {\n const operationsObject: Record<string, { path: string; method: string }> = {}\n\n nodes.forEach((node) => {\n operationsObject[node.operationId] = {\n path: new URLPath(node.path).URL,\n method: node.method.toLowerCase(),\n }\n })\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Const name={name} export>\n {JSON.stringify(operationsObject, undefined, 2)}\n </Const>\n </File.Source>\n )\n}\n","import { defineGenerator } from '@kubb/core'\nimport { File } from '@kubb/react-fabric'\nimport { Operations } from '../components/Operations'\nimport type { PluginClient } from '../types'\n\nexport const operationsGenerator = defineGenerator<PluginClient>({\n name: 'client',\n operations(nodes, options) {\n const { config, resolver, adapter, root } = this\n const { output, group } = options\n\n const name = 'operations'\n const file = resolver.resolveFile({ name, extname: '.ts' }, { root, output, group })\n\n return (\n <File\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n <Operations name={name} nodes={nodes} />\n </File>\n )\n },\n})\n","import { buildJSDoc, URLPath } from '@internals/utils'\nimport type { OperationNode } from '@kubb/ast/types'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport type { PluginZod } from '@kubb/plugin-zod'\nimport { File } from '@kubb/react-fabric'\nimport type { FabricReactNode } from '@kubb/react-fabric/types'\nimport type { PluginClient } from '../types.ts'\nimport { buildClassClientParams, buildFormDataLine, buildGenerics, buildHeaders, buildRequestDataLine, buildReturnStatement, getComments } from '../utils.ts'\nimport { Client } from './Client.tsx'\n\ntype OperationData = {\n node: OperationNode\n name: string\n tsResolver: PluginTs['resolver']\n zodResolver?: PluginZod['resolver']\n}\n\ntype Props = {\n name: string\n isExportable?: boolean\n isIndexable?: boolean\n operations: Array<OperationData>\n baseURL: string | undefined\n dataReturnType: PluginClient['resolvedOptions']['dataReturnType']\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n paramsType: PluginClient['resolvedOptions']['pathParamsType']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n children?: FabricReactNode\n}\n\ntype GenerateMethodProps = {\n node: OperationNode\n name: string\n tsResolver: PluginTs['resolver']\n zodResolver?: PluginZod['resolver']\n baseURL: string | undefined\n dataReturnType: PluginClient['resolvedOptions']['dataReturnType']\n parser: PluginClient['resolvedOptions']['parser'] | undefined\n paramsType: PluginClient['resolvedOptions']['paramsType']\n paramsCasing: PluginClient['resolvedOptions']['paramsCasing']\n pathParamsType: PluginClient['resolvedOptions']['pathParamsType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nfunction generateMethod({\n node,\n name,\n tsResolver,\n zodResolver,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n}: GenerateMethodProps): string {\n const path = new URLPath(node.path, { casing: paramsCasing })\n const contentType = node.requestBody?.contentType ?? 'application/json'\n const isFormData = contentType === 'multipart/form-data'\n const headerParamsName =\n node.parameters.filter((p) => p.in === 'header').length > 0\n ? tsResolver.resolveHeaderParamsName(node, node.parameters.filter((p) => p.in === 'header')[0]!)\n : undefined\n const headers = buildHeaders(contentType, !!headerParamsName)\n const generics = buildGenerics(node, tsResolver)\n const paramsNode = Client.getParams({ paramsType, paramsCasing, pathParamsType, node, tsResolver, isConfigurable: true })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const clientParams = buildClassClientParams({ node, path, baseURL, tsResolver, isFormData, headers })\n const jsdoc = buildJSDoc(getComments(node))\n\n const requestDataLine = buildRequestDataLine({ parser, node, zodResolver })\n const formDataLine = buildFormDataLine(isFormData, !!node.requestBody?.schema)\n const returnStatement = buildReturnStatement({ dataReturnType, parser, node, zodResolver })\n\n const methodBody = [\n 'const { client: request = fetch, ...requestConfig } = mergeConfig(this.#config, config)',\n '',\n requestDataLine,\n formDataLine,\n `const res = await request<${generics.join(', ')}>(${clientParams.toCall()})`,\n returnStatement,\n ]\n .filter(Boolean)\n .map((line) => ` ${line}`)\n .join('\\n')\n\n return `${jsdoc} static async ${name}(${paramsSignature}) {\\n${methodBody}\\n }`\n}\n\nexport function StaticClassClient({\n name,\n isExportable = true,\n isIndexable = true,\n operations,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n children,\n}: Props): FabricReactNode {\n const methods = operations.map(({ node, name: methodName, tsResolver, zodResolver }) =>\n generateMethod({\n node,\n name: methodName,\n tsResolver,\n zodResolver,\n baseURL,\n dataReturnType,\n parser,\n paramsType,\n paramsCasing,\n pathParamsType,\n }),\n )\n\n const classCode = `export class ${name} {\\n static #config: Partial<RequestConfig> & { client?: Client } = {}\\n\\n${methods.join('\\n\\n')}\\n}`\n\n return (\n <File.Source name={name} isExportable={isExportable} isIndexable={isIndexable}>\n {classCode}\n {children}\n </File.Source>\n )\n}\nStaticClassClient.getParams = Client.getParams\n","import path from 'node:path'\nimport { camelCase, pascalCase } from '@internals/utils'\nimport type { OperationNode } from '@kubb/ast/types'\nimport type { KubbFile } from '@kubb/core'\nimport { defineGenerator } from '@kubb/core'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport type { PluginZod } from '@kubb/plugin-zod'\nimport { pluginZodName } from '@kubb/plugin-zod'\nimport { File } from '@kubb/react-fabric'\nimport { StaticClassClient } from '../components/StaticClassClient'\nimport type { PluginClient } from '../types'\n\ntype OperationData = {\n node: OperationNode\n name: string\n tsResolver: PluginTs['resolver']\n zodResolver: PluginZod['resolver'] | undefined\n typeFile: KubbFile.File\n zodFile: KubbFile.File | undefined\n}\n\ntype Controller = {\n name: string\n file: KubbFile.File\n operations: Array<OperationData>\n}\n\nfunction resolveTypeImportNames(node: OperationNode, tsResolver: PluginTs['resolver']): Array<string> {\n const names: Array<string | undefined> = [\n node.requestBody?.schema ? tsResolver.resolveDataName(node) : undefined,\n tsResolver.resolveResponseName(node),\n ...node.parameters.filter((p) => p.in === 'path').map((p) => tsResolver.resolvePathParamsName(node, p)),\n ...node.parameters.filter((p) => p.in === 'query').map((p) => tsResolver.resolveQueryParamsName(node, p)),\n ...node.parameters.filter((p) => p.in === 'header').map((p) => tsResolver.resolveHeaderParamsName(node, p)),\n ...node.responses.map((res) => tsResolver.resolveResponseStatusName(node, res.statusCode)),\n ]\n return names.filter((n): n is string => Boolean(n))\n}\n\nfunction resolveZodImportNames(node: OperationNode, zodResolver: PluginZod['resolver']): Array<string> {\n const names: Array<string | undefined> = [zodResolver.resolveResponseName?.(node), node.requestBody?.schema ? zodResolver.resolveDataName?.(node) : undefined]\n return names.filter((n): n is string => Boolean(n))\n}\n\nexport const staticClassClientGenerator = defineGenerator<PluginClient>({\n name: 'staticClassClient',\n operations(nodes, options) {\n const { adapter, config, driver, resolver, root } = this\n const { output, group, dataReturnType, paramsCasing, paramsType, pathParamsType, parser, importPath } = options\n const baseURL = options.baseURL ?? adapter.rootNode?.meta?.baseURL\n\n const pluginTs = driver.getPlugin(pluginTsName)\n if (!pluginTs?.resolver) return null\n\n const tsResolver = pluginTs.resolver\n const tsPluginOptions = pluginTs.options\n const pluginZod = parser === 'zod' ? driver.getPlugin(pluginZodName) : undefined\n const zodResolver = pluginZod?.resolver\n\n function buildOperationData(node: OperationNode): OperationData {\n const typeFile = tsResolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n { root, output: tsPluginOptions?.output ?? output, group: tsPluginOptions?.group },\n )\n const zodFile =\n zodResolver && pluginZod?.options\n ? zodResolver.resolveFile(\n { name: node.operationId, extname: '.ts', tag: node.tags[0] ?? 'default', path: node.path },\n { root, output: pluginZod.options.output ?? output, group: pluginZod.options.group },\n )\n : undefined\n\n return {\n node: node,\n name: resolver.resolveName(node.operationId),\n tsResolver,\n zodResolver,\n typeFile,\n zodFile,\n }\n }\n\n const controllers = nodes.reduce(\n (acc, operationNode) => {\n const tag = operationNode.tags[0]\n const groupName = tag ? (group?.name?.({ group: camelCase(tag) }) ?? pascalCase(tag)) : 'Client'\n\n if (!tag && !group) {\n const name = 'ApiClient'\n const file = resolver.resolveFile({ name, extname: '.ts' }, { root, output, group })\n const operationData = buildOperationData(operationNode)\n const previous = acc.find((item) => item.file.path === file.path)\n\n if (previous) {\n previous.operations.push(operationData)\n } else {\n acc.push({ name, file, operations: [operationData] })\n }\n } else if (tag) {\n const name = groupName\n const file = resolver.resolveFile({ name, extname: '.ts', tag }, { root, output, group })\n const operationData = buildOperationData(operationNode)\n const previous = acc.find((item) => item.file.path === file.path)\n\n if (previous) {\n previous.operations.push(operationData)\n } else {\n acc.push({ name, file, operations: [operationData] })\n }\n }\n\n return acc\n },\n [] as Array<Controller>,\n )\n\n function collectTypeImports(ops: Array<OperationData>) {\n const typeImportsByFile = new Map<string, Set<string>>()\n const typeFilesByPath = new Map<string, KubbFile.File>()\n\n ops.forEach((op) => {\n const names = resolveTypeImportNames(op.node, tsResolver)\n if (!typeImportsByFile.has(op.typeFile.path)) {\n typeImportsByFile.set(op.typeFile.path, new Set())\n }\n const imports = typeImportsByFile.get(op.typeFile.path)!\n names.forEach((n) => {\n imports.add(n)\n })\n typeFilesByPath.set(op.typeFile.path, op.typeFile)\n })\n\n return { typeImportsByFile, typeFilesByPath }\n }\n\n function collectZodImports(ops: Array<OperationData>) {\n const zodImportsByFile = new Map<string, Set<string>>()\n const zodFilesByPath = new Map<string, KubbFile.File>()\n\n ops.forEach((op) => {\n if (!op.zodFile || !zodResolver) return\n const names = resolveZodImportNames(op.node, zodResolver)\n if (!zodImportsByFile.has(op.zodFile.path)) {\n zodImportsByFile.set(op.zodFile.path, new Set())\n }\n const imports = zodImportsByFile.get(op.zodFile.path)!\n names.forEach((n) => {\n imports.add(n)\n })\n zodFilesByPath.set(op.zodFile.path, op.zodFile)\n })\n\n return { zodImportsByFile, zodFilesByPath }\n }\n\n return (\n <>\n {controllers.map(({ name, file, operations: ops }) => {\n const { typeImportsByFile, typeFilesByPath } = collectTypeImports(ops)\n const { zodImportsByFile, zodFilesByPath } =\n parser === 'zod' ? collectZodImports(ops) : { zodImportsByFile: new Map<string, Set<string>>(), zodFilesByPath: new Map<string, KubbFile.File>() }\n const hasFormData = ops.some((op) => op.node.requestBody?.contentType === 'multipart/form-data')\n\n return (\n <File\n key={file.path}\n baseName={file.baseName}\n path={file.path}\n meta={file.meta}\n banner={resolver.resolveBanner(adapter.rootNode, { output, config })}\n footer={resolver.resolveFooter(adapter.rootNode, { output, config })}\n >\n {importPath ? (\n <>\n <File.Import name={'fetch'} path={importPath} />\n <File.Import name={['mergeConfig']} path={importPath} />\n <File.Import name={['Client', 'RequestConfig', 'ResponseErrorConfig']} path={importPath} isTypeOnly />\n </>\n ) : (\n <>\n <File.Import name={['fetch']} root={file.path} path={path.resolve(root, '.kubb/fetch.ts')} />\n <File.Import name={['mergeConfig']} root={file.path} path={path.resolve(root, '.kubb/fetch.ts')} />\n <File.Import\n name={['Client', 'RequestConfig', 'ResponseErrorConfig']}\n root={file.path}\n path={path.resolve(root, '.kubb/fetch.ts')}\n isTypeOnly\n />\n </>\n )}\n\n {hasFormData && <File.Import name={['buildFormData']} root={file.path} path={path.resolve(root, '.kubb/config.ts')} />}\n\n {Array.from(typeImportsByFile.entries()).map(([filePath, importSet]) => {\n const typeFile = typeFilesByPath.get(filePath)\n if (!typeFile) return null\n const importNames = Array.from(importSet).filter(Boolean)\n if (importNames.length === 0) return null\n return <File.Import key={filePath} name={importNames} root={file.path} path={typeFile.path} isTypeOnly />\n })}\n\n {parser === 'zod' &&\n Array.from(zodImportsByFile.entries()).map(([filePath, importSet]) => {\n const zodFile = zodFilesByPath.get(filePath)\n if (!zodFile) return null\n const importNames = Array.from(importSet).filter(Boolean)\n if (importNames.length === 0) return null\n return <File.Import key={filePath} name={importNames} root={file.path} path={zodFile.path} />\n })}\n\n <StaticClassClient\n name={name}\n operations={ops}\n baseURL={baseURL}\n dataReturnType={dataReturnType}\n pathParamsType={pathParamsType}\n paramsCasing={paramsCasing}\n paramsType={paramsType}\n parser={parser}\n />\n </File>\n )\n })}\n </>\n )\n },\n})\n","","import { camelCase } from '@internals/utils'\nimport { defineResolver } from '@kubb/core'\nimport type { PluginClient } from '../types.ts'\n\n/**\n * Resolver for `@kubb/plugin-client` that provides the default naming\n * and path-resolution helpers used by the plugin.\n *\n * @example\n * ```ts\n * import { resolverClient } from '@kubb/plugin-client'\n *\n * resolverClient.default('list pets', 'function') // -> 'listPets'\n * resolverClient.resolveName('show pet by id') // -> 'showPetById'\n * ```\n */\nexport const resolverClient = defineResolver<PluginClient>(() => ({\n name: 'default',\n pluginName: 'plugin-client',\n default(name, type) {\n return camelCase(name, { isFile: type === 'file' })\n },\n resolveName(name) {\n return this.default(name, 'function')\n },\n}))\n","import { camelCase } from '@internals/utils'\nimport { defineResolver } from '@kubb/core'\nimport type { PluginClient } from '../types.ts'\n\n/**\n * Legacy resolver for `@kubb/plugin-client` that provides backward-compatible\n * naming conventions matching the v4 behavior.\n *\n * @example\n * ```ts\n * import { resolverClientLegacy } from '@kubb/plugin-client'\n *\n * resolverClientLegacy.default('list pets', 'function') // -> 'listPets'\n * resolverClientLegacy.resolveName('show pet by id') // -> 'showPetById'\n * ```\n */\nexport const resolverClientLegacy = defineResolver<PluginClient>(() => ({\n name: 'kubbV4',\n pluginName: 'plugin-client',\n default(name, type) {\n return camelCase(name, { isFile: type === 'file' })\n },\n resolveName(name) {\n return this.default(name, 'function')\n },\n}))\n","import { definePresets } from '@kubb/core'\nimport { resolverClient } from './resolvers/resolverClient.ts'\nimport { resolverClientLegacy } from './resolvers/resolverClientLegacy.ts'\nimport type { ResolverClient } from './types.ts'\n\n/**\n * Built-in preset registry for `@kubb/plugin-client`.\n *\n * - `default` — uses `resolverClient` with v5 naming conventions.\n * - `kubbV4` — uses `resolverClientLegacy` with backward-compatible naming.\n *\n * Note: Unlike plugin-ts/plugin-zod, generators are not defined here because\n * plugin-client selects generators dynamically based on `clientType`, `group`,\n * and `operations` options. Generator selection happens in `plugin.ts`.\n */\nexport const presets = definePresets<ResolverClient>({\n default: {\n name: 'default',\n resolver: resolverClient,\n },\n kubbV4: {\n name: 'kubbV4',\n resolver: resolverClientLegacy,\n },\n})\n","import path from 'node:path'\nimport { camelCase } from '@internals/utils'\nimport { createPlugin, type Group, getPreset, mergeGenerators } from '@kubb/core'\nimport { pluginTsName } from '@kubb/plugin-ts'\nimport { pluginZodName } from '@kubb/plugin-zod'\nimport { version } from '../package.json'\nimport { classClientGenerator } from './generators/classClientGenerator.tsx'\nimport { clientGenerator } from './generators/clientGenerator.tsx'\nimport { groupedClientGenerator } from './generators/groupedClientGenerator.tsx'\nimport { operationsGenerator } from './generators/operationsGenerator.tsx'\nimport { staticClassClientGenerator } from './generators/staticClassClientGenerator.tsx'\nimport { presets } from './presets.ts'\nimport { source as axiosClientSource } from './templates/clients/axios.source.ts'\nimport { source as fetchClientSource } from './templates/clients/fetch.source.ts'\nimport { source as configSource } from './templates/config.source.ts'\nimport type { PluginClient } from './types.ts'\n\n/**\n * Canonical plugin name for `@kubb/plugin-client`, used to identify the plugin\n * in driver lookups and warnings.\n */\nexport const pluginClientName = 'plugin-client' satisfies PluginClient['name']\n\n/**\n * The `@kubb/plugin-client` plugin factory.\n *\n * Generates type-safe HTTP client functions (or classes) from an OpenAPI/AST `RootNode`.\n * Walks operations, delegates rendering to the active generators,\n * and writes barrel files based on `output.barrelType`.\n *\n * @example\n * ```ts\n * import { pluginClient } from '@kubb/plugin-client'\n *\n * export default defineConfig({\n * plugins: [pluginClient({ output: { path: 'clients' } })],\n * })\n * ```\n */\nexport const pluginClient = createPlugin<PluginClient>((options) => {\n const {\n output = { path: 'clients', barrelType: 'named' },\n group,\n exclude = [],\n include,\n override = [],\n urlType = false,\n dataReturnType = 'data',\n paramsType = 'inline',\n pathParamsType = paramsType === 'object' ? 'object' : options.pathParamsType || 'inline',\n operations = false,\n paramsCasing,\n clientType = 'function',\n parser = 'client',\n client = 'axios',\n importPath,\n bundle = false,\n wrapper,\n baseURL,\n compatibilityPreset = 'default',\n resolver: userResolver,\n transformer: userTransformer,\n } = options\n\n const resolvedImportPath = importPath ?? (!bundle ? `@kubb/plugin-client/clients/${client}` : undefined)\n\n const selectedGenerators =\n options.generators ??\n [\n clientType === 'staticClass' ? staticClassClientGenerator : clientType === 'class' ? classClientGenerator : clientGenerator,\n group && clientType === 'function' ? groupedClientGenerator : undefined,\n operations ? operationsGenerator : undefined,\n ].filter((x): x is NonNullable<typeof x> => Boolean(x))\n\n const preset = getPreset({\n preset: compatibilityPreset,\n presets,\n resolver: userResolver,\n transformer: userTransformer,\n generators: selectedGenerators,\n })\n\n const generators = preset.generators ?? []\n const mergedGenerator = mergeGenerators(generators)\n\n let resolveNameWarning = false\n let resolvePathWarning = false\n\n return {\n name: pluginClientName,\n version,\n get resolver() {\n return preset.resolver\n },\n get transformer() {\n return preset.transformer\n },\n get options() {\n return {\n client,\n clientType,\n bundle,\n output,\n exclude,\n include,\n override,\n group: group\n ? ({\n ...group,\n name: group.name\n ? group.name\n : (ctx: { group: string }) => {\n if (group.type === 'path') {\n return `${ctx.group.split('/')[1]}`\n }\n return `${camelCase(ctx.group)}Controller`\n },\n } satisfies Group)\n : undefined,\n parser,\n dataReturnType,\n importPath: resolvedImportPath,\n baseURL,\n paramsType,\n paramsCasing,\n pathParamsType,\n urlType,\n wrapper,\n resolver: preset.resolver,\n }\n },\n pre: [pluginTsName, parser === 'zod' ? pluginZodName : undefined].filter(Boolean),\n resolvePath(baseName, pathMode, options) {\n if (!resolvePathWarning) {\n this.warn('Do not use resolvePath for pluginClient, use resolverClient.resolvePath instead')\n resolvePathWarning = true\n }\n\n return this.plugin.resolver.resolvePath(\n { baseName, pathMode, tag: options?.group?.tag, path: options?.group?.path },\n { root: this.root, output, group: this.plugin.options.group },\n )\n },\n resolveName(name, type) {\n if (!resolveNameWarning) {\n this.warn('Do not use resolveName for pluginClient, use resolverClient.default instead')\n resolveNameWarning = true\n }\n\n return this.plugin.resolver.default(name, type)\n },\n async operation(node, options) {\n return mergedGenerator.operation?.call(this, node, options)\n },\n async operations(nodes, options) {\n return mergedGenerator.operations?.call(this, nodes, options)\n },\n async buildStart() {\n const { plugin } = this\n const root = this.root\n\n // pre add bundled fetch\n if (bundle && !plugin.options.importPath) {\n await this.addFile({\n baseName: 'fetch.ts',\n path: path.resolve(root, '.kubb/fetch.ts'),\n sources: [\n {\n name: 'fetch',\n value: plugin.options.client === 'fetch' ? fetchClientSource : axiosClientSource,\n isExportable: true,\n isIndexable: true,\n },\n ],\n imports: [],\n exports: [],\n })\n }\n\n await this.addFile({\n baseName: 'config.ts',\n path: path.resolve(root, '.kubb/config.ts'),\n sources: [\n {\n name: 'config',\n value: configSource,\n isExportable: false,\n isIndexable: false,\n },\n ],\n imports: [],\n exports: [],\n })\n },\n }\n})\n"],"mappings":"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"}
|