@kubb/plugin-vue-query 5.0.0-beta.22 → 5.0.0-beta.25
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/{components-DycYiYNM.cjs → components-CeZrYaZj.cjs} +35 -35
- package/dist/components-CeZrYaZj.cjs.map +1 -0
- package/dist/{components-CARlYXLX.js → components-CpTXuQiK.js} +35 -35
- package/dist/components-CpTXuQiK.js.map +1 -0
- package/dist/components.cjs +1 -1
- package/dist/components.d.ts +3 -3
- package/dist/components.js +1 -1
- package/dist/{generators-DX8VWz4a.cjs → generators-BSMwPpbh.cjs} +46 -30
- package/dist/generators-BSMwPpbh.cjs.map +1 -0
- package/dist/{generators-BuDRi6qN.js → generators-Cb5_nhMY.js} +46 -30
- package/dist/generators-Cb5_nhMY.js.map +1 -0
- package/dist/generators.cjs +1 -1
- package/dist/generators.d.ts +17 -1
- package/dist/generators.js +1 -1
- package/dist/index.cjs +47 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +29 -1
- package/dist/index.js +47 -8
- package/dist/index.js.map +1 -1
- package/dist/{types-Bkm7bWT3.d.ts → types-D-LjzI_Q.d.ts} +73 -46
- package/extension.yaml +779 -255
- package/package.json +7 -7
- package/src/components/InfiniteQuery.tsx +1 -1
- package/src/components/InfiniteQueryOptions.tsx +8 -8
- package/src/components/Mutation.tsx +2 -2
- package/src/components/Query.tsx +1 -1
- package/src/components/QueryKey.tsx +3 -3
- package/src/components/QueryOptions.tsx +1 -1
- package/src/generators/infiniteQueryGenerator.tsx +19 -10
- package/src/generators/mutationGenerator.tsx +17 -9
- package/src/generators/queryGenerator.tsx +17 -9
- package/src/plugin.ts +32 -4
- package/src/resolvers/resolverVueQuery.ts +13 -2
- package/src/types.ts +72 -45
- package/dist/components-CARlYXLX.js.map +0 -1
- package/dist/components-DycYiYNM.cjs.map +0 -1
- package/dist/generators-BuDRi6qN.js.map +0 -1
- package/dist/generators-DX8VWz4a.cjs.map +0 -1
|
@@ -253,12 +253,12 @@ var URLPath = class {
|
|
|
253
253
|
get object() {
|
|
254
254
|
return this.toObject();
|
|
255
255
|
}
|
|
256
|
-
/** Returns a map of path parameter names, or `
|
|
256
|
+
/** Returns a map of path parameter names, or `null` when the path has no parameters.
|
|
257
257
|
*
|
|
258
258
|
* @example
|
|
259
259
|
* ```ts
|
|
260
260
|
* new URLPath('/pet/{petId}').params // { petId: 'petId' }
|
|
261
|
-
* new URLPath('/pet').params //
|
|
261
|
+
* new URLPath('/pet').params // null
|
|
262
262
|
* ```
|
|
263
263
|
*/
|
|
264
264
|
get params() {
|
|
@@ -321,7 +321,7 @@ var URLPath = class {
|
|
|
321
321
|
const key = replacer ? replacer(param) : param;
|
|
322
322
|
params[key] = key;
|
|
323
323
|
});
|
|
324
|
-
return Object.keys(params).length > 0 ? params :
|
|
324
|
+
return Object.keys(params).length > 0 ? params : null;
|
|
325
325
|
}
|
|
326
326
|
/** Converts the OpenAPI path to Express-style colon syntax.
|
|
327
327
|
*
|
|
@@ -340,10 +340,10 @@ const declarationPrinter$7 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "decla
|
|
|
340
340
|
const mutationKeyTransformer = ({ node, casing }) => {
|
|
341
341
|
return [`{ url: '${new URLPath(node.path, { casing }).toURLPath()}' }`];
|
|
342
342
|
};
|
|
343
|
-
function MutationKey({ name, paramsCasing, node, transformer
|
|
343
|
+
function MutationKey({ name, paramsCasing, node, transformer }) {
|
|
344
344
|
const paramsNode = _kubb_core.ast.createFunctionParameters({ params: [] });
|
|
345
345
|
const paramsSignature = declarationPrinter$7.print(paramsNode) ?? "";
|
|
346
|
-
const keys = transformer({
|
|
346
|
+
const keys = (transformer ?? mutationKeyTransformer)({
|
|
347
347
|
node,
|
|
348
348
|
casing: paramsCasing
|
|
349
349
|
});
|
|
@@ -363,9 +363,9 @@ function MutationKey({ name, paramsCasing, node, transformer = mutationKeyTransf
|
|
|
363
363
|
//#endregion
|
|
364
364
|
//#region ../../internals/shared/src/operation.ts
|
|
365
365
|
function getOperationLink(node, link) {
|
|
366
|
-
if (!link) return;
|
|
367
|
-
if (typeof link === "function") return link(node);
|
|
368
|
-
if (link === "urlPath") return node.path ? `{@link ${new URLPath(node.path).URL}}` :
|
|
366
|
+
if (!link) return null;
|
|
367
|
+
if (typeof link === "function") return link(node) ?? null;
|
|
368
|
+
if (link === "urlPath") return node.path ? `{@link ${new URLPath(node.path).URL}}` : null;
|
|
369
369
|
return `{@link ${node.path.replaceAll("{", ":").replaceAll("}", "")}}`;
|
|
370
370
|
}
|
|
371
371
|
function getContentTypeInfo(node) {
|
|
@@ -380,9 +380,9 @@ function getContentTypeInfo(node) {
|
|
|
380
380
|
};
|
|
381
381
|
}
|
|
382
382
|
function buildRequestConfigType(node, resolver) {
|
|
383
|
-
const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) :
|
|
383
|
+
const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null;
|
|
384
384
|
const { isMultipleContentTypes, contentTypeUnion } = getContentTypeInfo(node);
|
|
385
|
-
return `${requestName ? `Partial<RequestConfig<${requestName}>>` : "Partial<RequestConfig>"} & { ${["client?: Client", isMultipleContentTypes ? `contentType?: ${contentTypeUnion}` :
|
|
385
|
+
return `${requestName ? `Partial<RequestConfig<${requestName}>>` : "Partial<RequestConfig>"} & { ${["client?: Client", isMultipleContentTypes ? `contentType?: ${contentTypeUnion}` : null].filter(Boolean).join("; ")} }`;
|
|
386
386
|
}
|
|
387
387
|
function buildOperationComments(node, options = {}) {
|
|
388
388
|
const { link = "pathTemplate", linkPosition = "afterDeprecated", splitLines = false } = options;
|
|
@@ -412,11 +412,11 @@ function getOperationParameters(node, options = {}) {
|
|
|
412
412
|
}
|
|
413
413
|
function getStatusCodeNumber(statusCode) {
|
|
414
414
|
const code = Number(statusCode);
|
|
415
|
-
return Number.isNaN(code) ?
|
|
415
|
+
return Number.isNaN(code) ? null : code;
|
|
416
416
|
}
|
|
417
417
|
function isErrorStatusCode(statusCode) {
|
|
418
418
|
const code = getStatusCodeNumber(statusCode);
|
|
419
|
-
return code !==
|
|
419
|
+
return code !== null && code >= 400;
|
|
420
420
|
}
|
|
421
421
|
function resolveErrorNames(node, resolver) {
|
|
422
422
|
return node.responses.filter((response) => isErrorStatusCode(response.statusCode)).map((response) => resolver.resolveResponseStatusName(node, response.statusCode));
|
|
@@ -443,7 +443,7 @@ function resolveOperationTypeNames(node, resolver, options = {}) {
|
|
|
443
443
|
...query.map((param) => resolver.resolveQueryParamsName(node, param)),
|
|
444
444
|
...header.map((param) => resolver.resolveHeaderParamsName(node, param))
|
|
445
445
|
];
|
|
446
|
-
const bodyAndResponseNames = [node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) :
|
|
446
|
+
const bodyAndResponseNames = [node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null, resolver.resolveResponseName(node)];
|
|
447
447
|
const result = (options.order === "body-response-first" ? [
|
|
448
448
|
...bodyAndResponseNames,
|
|
449
449
|
...paramNames,
|
|
@@ -465,7 +465,7 @@ function resolveOperationTypeNames(node, resolver, options = {}) {
|
|
|
465
465
|
*/
|
|
466
466
|
function resolveZodSchemaNames(node, zodResolver) {
|
|
467
467
|
if (!zodResolver) return [];
|
|
468
|
-
return [zodResolver.resolveResponseName?.(node), node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) :
|
|
468
|
+
return [zodResolver.resolveResponseName?.(node), node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : null].filter((n) => Boolean(n));
|
|
469
469
|
}
|
|
470
470
|
/**
|
|
471
471
|
* Resolve the type for a single path parameter.
|
|
@@ -489,14 +489,14 @@ function resolvePathParamType(node, param, resolver) {
|
|
|
489
489
|
}
|
|
490
490
|
/**
|
|
491
491
|
* Derive a query-params group type from the resolver.
|
|
492
|
-
* Returns `
|
|
492
|
+
* Returns `null` when no query params exist or when the group name
|
|
493
493
|
* equals the individual param name (no real group).
|
|
494
494
|
*/
|
|
495
495
|
function resolveQueryGroupType(node, params, resolver) {
|
|
496
|
-
if (!params.length) return
|
|
496
|
+
if (!params.length) return null;
|
|
497
497
|
const firstParam = params[0];
|
|
498
498
|
const groupName = resolver.resolveQueryParamsName(node, firstParam);
|
|
499
|
-
if (groupName === resolver.resolveParamName(node, firstParam)) return
|
|
499
|
+
if (groupName === resolver.resolveParamName(node, firstParam)) return null;
|
|
500
500
|
return {
|
|
501
501
|
type: _kubb_core.ast.createParamsType({
|
|
502
502
|
variant: "reference",
|
|
@@ -546,7 +546,7 @@ function buildQueryKeyParams(node, options) {
|
|
|
546
546
|
const bodyType = node.requestBody?.content?.[0]?.schema ? _kubb_core.ast.createParamsType({
|
|
547
547
|
variant: "reference",
|
|
548
548
|
name: resolver.resolveDataName(node)
|
|
549
|
-
}) :
|
|
549
|
+
}) : null;
|
|
550
550
|
const bodyRequired = node.requestBody?.required ?? false;
|
|
551
551
|
const params = [];
|
|
552
552
|
if (pathParams.length) {
|
|
@@ -591,8 +591,8 @@ const queryKeyTransformer = ({ node, casing }) => {
|
|
|
591
591
|
type: "path",
|
|
592
592
|
stringify: true
|
|
593
593
|
}),
|
|
594
|
-
hasQueryParams ? "...(params ? [params] : [])" :
|
|
595
|
-
hasRequestBody ? "...(data ? [data] : [])" :
|
|
594
|
+
hasQueryParams ? "...(params ? [params] : [])" : null,
|
|
595
|
+
hasRequestBody ? "...(data ? [data] : [])" : null
|
|
596
596
|
].filter(Boolean);
|
|
597
597
|
};
|
|
598
598
|
//#endregion
|
|
@@ -641,14 +641,14 @@ const declarationPrinter$5 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "decla
|
|
|
641
641
|
function buildQueryKeyParamsNode(node, options) {
|
|
642
642
|
return wrapWithMaybeRefOrGetter(buildQueryKeyParams(node, options));
|
|
643
643
|
}
|
|
644
|
-
function QueryKey({ name, node, tsResolver, paramsCasing, pathParamsType, typeName, transformer
|
|
644
|
+
function QueryKey({ name, node, tsResolver, paramsCasing, pathParamsType, typeName, transformer }) {
|
|
645
645
|
const paramsNode = buildQueryKeyParamsNode(node, {
|
|
646
646
|
pathParamsType,
|
|
647
647
|
paramsCasing,
|
|
648
648
|
resolver: tsResolver
|
|
649
649
|
});
|
|
650
650
|
const paramsSignature = declarationPrinter$5.print(paramsNode) ?? "";
|
|
651
|
-
const keys = transformer({
|
|
651
|
+
const keys = (transformer ?? queryKeyTransformer)({
|
|
652
652
|
node,
|
|
653
653
|
casing: paramsCasing
|
|
654
654
|
});
|
|
@@ -681,7 +681,7 @@ const declarationPrinter$4 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "decla
|
|
|
681
681
|
const callPrinter$4 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
|
|
682
682
|
function getQueryOptionsParams(node, options) {
|
|
683
683
|
const { paramsType, paramsCasing, pathParamsType, resolver } = options;
|
|
684
|
-
const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) :
|
|
684
|
+
const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null;
|
|
685
685
|
return wrapWithMaybeRefOrGetter(_kubb_core.ast.createOperationParams(node, {
|
|
686
686
|
paramsType,
|
|
687
687
|
pathParamsType: paramsType === "object" ? "object" : pathParamsType === "object" ? "object" : "inline",
|
|
@@ -766,7 +766,7 @@ const callPrinter$3 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
|
|
|
766
766
|
function buildInfiniteQueryParamsNode(node, options) {
|
|
767
767
|
const { paramsType, paramsCasing, pathParamsType, dataReturnType, resolver } = options;
|
|
768
768
|
const responseName = resolver.resolveResponseName(node);
|
|
769
|
-
const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) :
|
|
769
|
+
const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null;
|
|
770
770
|
const errorNames = resolveErrorNames(node, resolver);
|
|
771
771
|
const TData = dataReturnType === "data" ? responseName : `ResponseConfig<${responseName}>`;
|
|
772
772
|
const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`;
|
|
@@ -872,9 +872,9 @@ function InfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam,
|
|
|
872
872
|
const rawQueryParams = getOperationParameters(node).query;
|
|
873
873
|
const queryParamsTypeName = rawQueryParams.length > 0 ? (() => {
|
|
874
874
|
const groupName = tsResolver.resolveQueryParamsName(node, rawQueryParams[0]);
|
|
875
|
-
return groupName !== tsResolver.resolveParamName(node, rawQueryParams[0]) ? groupName :
|
|
876
|
-
})() :
|
|
877
|
-
const queryParamType = queryParam && queryParamsTypeName ? `${queryParamsTypeName}['${queryParam}']` :
|
|
875
|
+
return groupName !== tsResolver.resolveParamName(node, rawQueryParams[0]) ? groupName : null;
|
|
876
|
+
})() : null;
|
|
877
|
+
const queryParamType = queryParam && queryParamsTypeName ? `${queryParamsTypeName}['${queryParam}']` : null;
|
|
878
878
|
const pageParamType = queryParamType ? isInitialPageParamDefined ? `NonNullable<${queryParamType}>` : queryParamType : fallbackPageParamType;
|
|
879
879
|
const paramsNode = getQueryOptionsParams(node, {
|
|
880
880
|
paramsType,
|
|
@@ -892,12 +892,12 @@ function InfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam,
|
|
|
892
892
|
const queryKeyParamsCall = callPrinter$2.print(queryKeyParamsNode) ?? "";
|
|
893
893
|
const enabledSource = buildEnabledCheck(queryKeyParamsNode);
|
|
894
894
|
const enabledText = enabledSource ? `enabled: () => ${enabledSource.split(" && ").map((n) => `!!toValue(${n.trim()})`).join(" && ")},` : "";
|
|
895
|
-
const hasNewParams = nextParam
|
|
895
|
+
const hasNewParams = nextParam != null || previousParam != null;
|
|
896
896
|
const [getNextPageParamExpr, getPreviousPageParamExpr] = (() => {
|
|
897
897
|
if (hasNewParams) {
|
|
898
|
-
const nextAccessor = nextParam ? getNestedAccessor(nextParam, "lastPage") :
|
|
899
|
-
const prevAccessor = previousParam ? getNestedAccessor(previousParam, "firstPage") :
|
|
900
|
-
return [nextAccessor ? `getNextPageParam: (lastPage) => ${nextAccessor}` :
|
|
898
|
+
const nextAccessor = nextParam ? getNestedAccessor(nextParam, "lastPage") : null;
|
|
899
|
+
const prevAccessor = previousParam ? getNestedAccessor(previousParam, "firstPage") : null;
|
|
900
|
+
return [nextAccessor ? `getNextPageParam: (lastPage) => ${nextAccessor}` : null, prevAccessor ? `getPreviousPageParam: (firstPage) => ${prevAccessor}` : null];
|
|
901
901
|
}
|
|
902
902
|
if (cursorParam) return [`getNextPageParam: (lastPage) => lastPage['${cursorParam}']`, `getPreviousPageParam: (firstPage) => firstPage['${cursorParam}']`];
|
|
903
903
|
return [dataReturnType === "full" ? "getNextPageParam: (lastPage, _allPages, lastPageParam) => Array.isArray(lastPage.data) && lastPage.data.length === 0 ? undefined : lastPageParam + 1" : "getNextPageParam: (lastPage, _allPages, lastPageParam) => Array.isArray(lastPage) && lastPage.length === 0 ? undefined : lastPageParam + 1", "getPreviousPageParam: (_firstPage, _allPages, firstPageParam) => firstPageParam <= 1 ? undefined : firstPageParam - 1"];
|
|
@@ -1000,7 +1000,7 @@ function buildMutationParamsNode(node, options) {
|
|
|
1000
1000
|
mutation?: MutationObserverOptions<${[
|
|
1001
1001
|
TData,
|
|
1002
1002
|
TError,
|
|
1003
|
-
TRequestWrapped ? `{${TRequestWrapped}}` : "
|
|
1003
|
+
TRequestWrapped ? `{${TRequestWrapped}}` : "undefined",
|
|
1004
1004
|
"TContext"
|
|
1005
1005
|
].join(", ")}> & { client?: QueryClient },
|
|
1006
1006
|
client?: ${buildRequestConfigType(node, resolver)},
|
|
@@ -1024,7 +1024,7 @@ function Mutation({ name, clientName, paramsCasing, paramsType, pathParamsType,
|
|
|
1024
1024
|
const generics = [
|
|
1025
1025
|
TData,
|
|
1026
1026
|
TError,
|
|
1027
|
-
TRequest ? `{${TRequest}}` : "
|
|
1027
|
+
TRequest ? `{${TRequest}}` : "undefined",
|
|
1028
1028
|
"TContext"
|
|
1029
1029
|
].join(", ");
|
|
1030
1030
|
const mutationKeyParamsNode = _kubb_core.ast.createFunctionParameters({ params: [] });
|
|
@@ -1083,7 +1083,7 @@ const callPrinter = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
|
|
|
1083
1083
|
function buildQueryParamsNode(node, options) {
|
|
1084
1084
|
const { paramsType, paramsCasing, pathParamsType, dataReturnType, resolver } = options;
|
|
1085
1085
|
const responseName = resolver.resolveResponseName(node);
|
|
1086
|
-
const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) :
|
|
1086
|
+
const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null;
|
|
1087
1087
|
const errorNames = resolveErrorNames(node, resolver);
|
|
1088
1088
|
const TData = dataReturnType === "data" ? responseName : `ResponseConfig<${responseName}>`;
|
|
1089
1089
|
const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`;
|
|
@@ -1264,4 +1264,4 @@ Object.defineProperty(exports, "resolveZodSchemaNames", {
|
|
|
1264
1264
|
}
|
|
1265
1265
|
});
|
|
1266
1266
|
|
|
1267
|
-
//# sourceMappingURL=components-
|
|
1267
|
+
//# sourceMappingURL=components-CeZrYaZj.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components-CeZrYaZj.cjs","names":["#options","#transformParam","#eachParam","declarationPrinter","ast","File","Function","ast","ast","declarationPrinter","ast","declarationPrinter","File","Function","Type","declarationPrinter","callPrinter","ast","File","Function","addToValueCalls","declarationPrinter","callPrinter","ast","File","Function","getComments","declarationPrinter","callPrinter","File","Function","declarationPrinter","callPrinter","ast","File","Function","getComments","ast","File","Function","getComments"],"sources":["../../../internals/utils/src/casing.ts","../../../internals/utils/src/object.ts","../../../internals/utils/src/reserved.ts","../../../internals/utils/src/urlPath.ts","../../../internals/tanstack-query/src/components/MutationKey.tsx","../../../internals/shared/src/operation.ts","../../../internals/tanstack-query/src/utils.ts","../../../internals/tanstack-query/src/components/QueryKey.tsx","../src/utils.ts","../src/components/QueryKey.tsx","../src/components/QueryOptions.tsx","../src/components/InfiniteQuery.tsx","../src/components/InfiniteQueryOptions.tsx","../src/components/Mutation.tsx","../src/components/Query.tsx"],"sourcesContent":["type Options = {\n /**\n * When `true`, dot-separated segments are split on `.` and joined with `/` after casing.\n */\n isFile?: boolean\n /**\n * Text prepended before casing is applied.\n */\n prefix?: string\n /**\n * Text appended before casing is applied.\n */\n suffix?: string\n}\n\n/**\n * Shared implementation for camelCase and PascalCase conversion.\n * Splits on common word boundaries (spaces, hyphens, underscores, dots, slashes, colons)\n * and capitalizes each word according to `pascal`.\n *\n * When `pascal` is `true` the first word is also capitalized (PascalCase), otherwise only subsequent words are.\n */\nfunction toCamelOrPascal(text: string, pascal: boolean): string {\n const normalized = text\n .trim()\n .replace(/([a-z\\d])([A-Z])/g, '$1 $2')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')\n .replace(/(\\d)([a-z])/g, '$1 $2')\n\n const words = normalized.split(/[\\s\\-_./\\\\:]+/).filter(Boolean)\n\n return words\n .map((word, i) => {\n const allUpper = word.length > 1 && word === word.toUpperCase()\n if (allUpper) return word\n if (i === 0 && !pascal) return word.charAt(0).toLowerCase() + word.slice(1)\n return word.charAt(0).toUpperCase() + word.slice(1)\n })\n .join('')\n .replace(/[^a-zA-Z0-9]/g, '')\n}\n\n/**\n * Splits `text` on `.` and applies `transformPart` to each segment.\n * The last segment receives `isLast = true`, all earlier segments receive `false`.\n * Segments are joined with `/` to form a file path.\n *\n * Only splits on dots followed by a letter so that version numbers\n * embedded in operationIds (e.g. `v2025.0`) are kept intact.\n */\nfunction applyToFileParts(text: string, transformPart: (part: string, isLast: boolean) => string): string {\n const parts = text.split(/\\.(?=[a-zA-Z])/)\n return parts.map((part, i) => transformPart(part, i === parts.length - 1)).join('/')\n}\n\n/**\n * Converts `text` to camelCase.\n * When `isFile` is `true`, dot-separated segments are each cased independently and joined with `/`.\n *\n * @example\n * camelCase('hello-world') // 'helloWorld'\n * camelCase('pet.petId', { isFile: true }) // 'pet/petId'\n */\nexport function camelCase(text: string, { isFile, prefix = '', suffix = '' }: Options = {}): string {\n if (isFile) {\n return applyToFileParts(text, (part, isLast) => camelCase(part, isLast ? { prefix, suffix } : {}))\n }\n\n return toCamelOrPascal(`${prefix} ${text} ${suffix}`, false)\n}\n\n/**\n * Converts `text` to PascalCase.\n * When `isFile` is `true`, the last dot-separated segment is PascalCased and earlier segments are camelCased.\n *\n * @example\n * pascalCase('hello-world') // 'HelloWorld'\n * pascalCase('pet.petId', { isFile: true }) // 'pet/PetId'\n */\nexport function pascalCase(text: string, { isFile, prefix = '', suffix = '' }: Options = {}): string {\n if (isFile) {\n return applyToFileParts(text, (part, isLast) => (isLast ? pascalCase(part, { prefix, suffix }) : camelCase(part)))\n }\n\n return toCamelOrPascal(`${prefix} ${text} ${suffix}`, true)\n}\n\n/**\n * Converts `text` to snake_case.\n *\n * @example\n * snakeCase('helloWorld') // 'hello_world'\n * snakeCase('Hello-World') // 'hello_world'\n */\nexport function snakeCase(text: string, { prefix = '', suffix = '' }: Omit<Options, 'isFile'> = {}): string {\n const processed = `${prefix} ${text} ${suffix}`.trim()\n return processed\n .replace(/([a-z])([A-Z])/g, '$1_$2')\n .replace(/[\\s\\-.]+/g, '_')\n .replace(/[^a-zA-Z0-9_]/g, '')\n .toLowerCase()\n .split('_')\n .filter(Boolean)\n .join('_')\n}\n\n/**\n * Converts `text` to SCREAMING_SNAKE_CASE.\n *\n * @example\n * screamingSnakeCase('helloWorld') // 'HELLO_WORLD'\n */\nexport function screamingSnakeCase(text: string, { prefix = '', suffix = '' }: Omit<Options, 'isFile'> = {}): string {\n return snakeCase(text, { prefix, suffix }).toUpperCase()\n}\n","import { trimQuotes } from './string.ts'\n\n/**\n * Serializes a primitive value to a JSON string literal, stripping any surrounding quote characters first.\n *\n * @example\n * stringify('hello') // '\"hello\"'\n * stringify('\"hello\"') // '\"hello\"'\n */\nexport function stringify(value: string | number | boolean | undefined): string {\n if (value === undefined || value === null) return '\"\"'\n return JSON.stringify(trimQuotes(value.toString()))\n}\n\n/**\n * Converts a plain object into a multiline key-value string suitable for embedding in generated code.\n * Nested objects are recursively stringified with indentation.\n *\n * @example\n * stringifyObject({ foo: 'bar', nested: { a: 1 } })\n * // 'foo: bar,\\nnested: {\\n a: 1\\n }'\n */\nexport function stringifyObject(value: Record<string, unknown>): string {\n const items = Object.entries(value)\n .map(([key, val]) => {\n if (val !== null && typeof val === 'object') {\n return `${key}: {\\n ${stringifyObject(val as Record<string, unknown>)}\\n }`\n }\n return `${key}: ${val}`\n })\n .filter(Boolean)\n return items.join(',\\n')\n}\n\n/**\n * Converts a dot-notation path or string array into an optional-chaining accessor expression.\n *\n * @example\n * getNestedAccessor('pagination.next.id', 'lastPage')\n * // → \"lastPage?.['pagination']?.['next']?.['id']\"\n */\nexport function getNestedAccessor(param: string | string[], accessor: string): string | null {\n const parts = Array.isArray(param) ? param : param.split('.')\n if (parts.length === 0 || (parts.length === 1 && parts[0] === '')) return null\n return `${accessor}?.['${`${parts.join(\"']?.['\")}']`}`\n}\n","/**\n * JavaScript and Java reserved words.\n * @link https://github.com/jonschlinkert/reserved/blob/master/index.js\n */\nconst reservedWords = new Set([\n 'abstract',\n 'arguments',\n 'boolean',\n 'break',\n 'byte',\n 'case',\n 'catch',\n 'char',\n 'class',\n 'const',\n 'continue',\n 'debugger',\n 'default',\n 'delete',\n 'do',\n 'double',\n 'else',\n 'enum',\n 'eval',\n 'export',\n 'extends',\n 'false',\n 'final',\n 'finally',\n 'float',\n 'for',\n 'function',\n 'goto',\n 'if',\n 'implements',\n 'import',\n 'in',\n 'instanceof',\n 'int',\n 'interface',\n 'let',\n 'long',\n 'native',\n 'new',\n 'null',\n 'package',\n 'private',\n 'protected',\n 'public',\n 'return',\n 'short',\n 'static',\n 'super',\n 'switch',\n 'synchronized',\n 'this',\n 'throw',\n 'throws',\n 'transient',\n 'true',\n 'try',\n 'typeof',\n 'var',\n 'void',\n 'volatile',\n 'while',\n 'with',\n 'yield',\n 'Array',\n 'Date',\n 'hasOwnProperty',\n 'Infinity',\n 'isFinite',\n 'isNaN',\n 'isPrototypeOf',\n 'length',\n 'Math',\n 'name',\n 'NaN',\n 'Number',\n 'Object',\n 'prototype',\n 'String',\n 'toString',\n 'undefined',\n 'valueOf',\n] as const)\n\n/**\n * Returns `true` when `name` is a syntactically valid JavaScript variable name.\n *\n * @example\n * ```ts\n * isValidVarName('status') // true\n * isValidVarName('class') // false (reserved word)\n * isValidVarName('42foo') // false (starts with digit)\n * ```\n */\nexport function isValidVarName(name: string): boolean {\n if (!name || reservedWords.has(name as 'valueOf')) {\n return false\n }\n return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(name)\n}\n","import { camelCase } from './casing.ts'\nimport { isValidVarName } from './reserved.ts'\n\nexport type URLObject = {\n /**\n * The resolved URL string (Express-style or template literal, depending on context).\n */\n url: string\n /**\n * Extracted path parameters as a key-value map, or `null` when the path has none.\n */\n params: Record<string, string> | null\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 `null` when the path has no parameters.\n *\n * @example\n * ```ts\n * new URLPath('/pet/{petId}').params // { petId: 'petId' }\n * new URLPath('/pet').params // null\n * ```\n */\n get params(): Record<string, string> | null {\n return this.toParamsObject()\n }\n\n #transformParam(raw: string): string {\n const param = isValidVarName(raw) ? raw : camelCase(raw)\n return this.#options.casing === 'camelcase' ? camelCase(param) : param\n }\n\n /**\n * Iterates over every `{param}` token in `path`, calling `fn` with the raw token and transformed name.\n */\n #eachParam(fn: (raw: string, param: string) => undefined): undefined {\n for (const match of this.path.matchAll(/\\{([^}]+)\\}/g)) {\n const raw = match[1]!\n fn(raw, this.#transformParam(raw))\n }\n }\n\n toObject({ type = 'path', replacer, stringify }: ObjectOptions = {}): URLObject | string {\n const object = {\n url: type === 'path' ? this.toURLPath() : this.toTemplateString({ replacer }),\n params: this.toParamsObject(),\n }\n\n if (stringify) {\n if (type === 'template') {\n return JSON.stringify(object).replaceAll(\"'\", '').replaceAll(`\"`, '')\n }\n\n if (object.params) {\n return `{ url: '${object.url}', params: ${JSON.stringify(object.params).replaceAll(\"'\", '').replaceAll(`\"`, '')} }`\n }\n\n return `{ url: '${object.url}' }`\n }\n\n return object\n }\n\n /**\n * Converts the OpenAPI path to a TypeScript template literal string.\n * An optional `replacer` can transform each extracted parameter name before interpolation.\n *\n * @example\n * new URLPath('/pet/{petId}').toTemplateString() // '`/pet/${petId}`'\n */\n toTemplateString({ prefix, replacer }: { prefix?: string | null; replacer?: (pathParam: string) => string } = {}): string {\n const parts = this.path.split(/\\{([^}]+)\\}/)\n const result = parts\n .map((part, i) => {\n if (i % 2 === 0) return part\n const param = this.#transformParam(part)\n return `\\${${replacer ? replacer(param) : param}}`\n })\n .join('')\n\n return `\\`${prefix ?? ''}${result}\\``\n }\n\n /**\n * Extracts all `{param}` segments from the path and returns them as a key-value map.\n * An optional `replacer` transforms each parameter name in both key and value positions.\n * Returns `undefined` when no path parameters are found.\n *\n * @example\n * ```ts\n * new URLPath('/pet/{petId}/tag/{tagId}').toParamsObject()\n * // { petId: 'petId', tagId: 'tagId' }\n * ```\n */\n toParamsObject(replacer?: (pathParam: string) => string): Record<string, string> | null {\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 : null\n }\n\n /** Converts the OpenAPI path to Express-style colon syntax.\n *\n * @example\n * ```ts\n * new URLPath('/pet/{petId}').toURLPath() // '/pet/:petId'\n * ```\n */\n toURLPath(): string {\n return this.path.replace(/\\{([^}]+)\\}/g, ':$1')\n }\n}\n","import { URLPath } from '@internals/utils'\nimport { ast } from '@kubb/core'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { Transformer } from '../types.ts'\n\ntype Props = {\n name: string\n node: ast.OperationNode\n paramsCasing: 'camelcase' | undefined\n pathParamsType: 'object' | 'inline'\n transformer: Transformer | null | undefined\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nexport const mutationKeyTransformer: Transformer = ({ node, casing }) => {\n const path = new URLPath(node.path, { casing })\n return [`{ url: '${path.toURLPath()}' }`]\n}\n\nexport function MutationKey({ name, paramsCasing, node, transformer }: Props): KubbReactNode {\n const paramsNode = ast.createFunctionParameters({ params: [] })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const keys = (transformer ?? mutationKeyTransformer)({ node, casing: paramsCasing })\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function.Arrow name={name} export params={paramsSignature} singleLine>\n {`[${keys.join(', ')}] as const`}\n </Function.Arrow>\n </File.Source>\n )\n}\n","import { URLPath } from '@internals/utils'\nimport { ast } from '@kubb/core'\n\nexport type ContentTypeInfo = {\n contentTypes: string[]\n isMultipleContentTypes: boolean\n contentTypeUnion: string\n defaultContentType: string\n hasFormData: boolean\n}\n\nexport type RequestConfigResolver = {\n resolveDataName(node: ast.OperationNode): string\n}\n\nexport type ResponseStatusNameResolver = {\n resolveResponseStatusName(node: ast.OperationNode, statusCode: ast.StatusCode): string\n}\n\nexport type ResponseNameResolver = ResponseStatusNameResolver & {\n resolveResponseName(node: ast.OperationNode): string\n}\n\nexport type OperationTypeNameResolver = RequestConfigResolver &\n ResponseNameResolver & {\n resolvePathParamsName(node: ast.OperationNode, param: ast.ParameterNode): string\n resolveQueryParamsName(node: ast.OperationNode, param: ast.ParameterNode): string\n resolveHeaderParamsName(node: ast.OperationNode, param: ast.ParameterNode): string\n }\n\nexport type OperationCommentLink = 'pathTemplate' | 'urlPath' | false | ((node: ast.OperationNode) => string | undefined)\n\nexport type BuildOperationCommentsOptions = {\n link?: OperationCommentLink\n linkPosition?: 'beforeDeprecated' | 'afterDeprecated'\n splitLines?: boolean\n}\n\ntype ResponseLike = {\n statusCode: ast.StatusCode | number | string\n}\n\nexport type OperationParameterGroups = Record<ast.ParameterNode['in'], Array<ast.ParameterNode>>\n\nexport type ResolveOperationTypeNameOptions = {\n paramsCasing?: 'camelcase'\n responseStatusNames?: boolean | 'error'\n exclude?: ReadonlyArray<string | undefined>\n order?: 'params-first' | 'body-response-first'\n}\n\nfunction getOperationLink(node: ast.OperationNode, link: OperationCommentLink): string | null {\n if (!link) {\n return null\n }\n\n if (typeof link === 'function') {\n return link(node) ?? null\n }\n\n if (link === 'urlPath') {\n return node.path ? `{@link ${new URLPath(node.path).URL}}` : null\n }\n\n return `{@link ${node.path.replaceAll('{', ':').replaceAll('}', '')}}`\n}\n\nexport function getContentTypeInfo(node: ast.OperationNode): ContentTypeInfo {\n const contentTypes = node.requestBody?.content?.map((e) => e.contentType) ?? []\n const isMultipleContentTypes = contentTypes.length > 1\n\n return {\n contentTypes,\n isMultipleContentTypes,\n contentTypeUnion: isMultipleContentTypes ? contentTypes.map((ct) => JSON.stringify(ct)).join(' | ') : '',\n defaultContentType: contentTypes[0] ?? 'application/json',\n hasFormData: contentTypes.some((ct) => ct === 'multipart/form-data'),\n }\n}\n\nexport function buildRequestConfigType(node: ast.OperationNode, resolver: RequestConfigResolver): string {\n const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null\n const { isMultipleContentTypes, contentTypeUnion } = getContentTypeInfo(node)\n const configType = requestName ? `Partial<RequestConfig<${requestName}>>` : 'Partial<RequestConfig>'\n const configProps = ['client?: Client', isMultipleContentTypes ? `contentType?: ${contentTypeUnion}` : null].filter(Boolean).join('; ')\n\n return `${configType} & { ${configProps} }`\n}\n\nexport function buildOperationComments(node: ast.OperationNode, options: BuildOperationCommentsOptions = {}): Array<string> {\n const { link = 'pathTemplate', linkPosition = 'afterDeprecated', splitLines = false } = options\n const linkComment = getOperationLink(node, link)\n const comments =\n linkPosition === 'beforeDeprecated'\n ? [node.description && `@description ${node.description}`, node.summary && `@summary ${node.summary}`, linkComment, node.deprecated && '@deprecated']\n : [node.description && `@description ${node.description}`, node.summary && `@summary ${node.summary}`, node.deprecated && '@deprecated', linkComment]\n\n const filteredComments = comments.filter((comment): comment is string => Boolean(comment))\n\n if (!splitLines) {\n return filteredComments\n }\n\n return filteredComments.flatMap((text) => text.split(/\\r?\\n/).map((line) => line.trim())).filter((comment): comment is string => Boolean(comment))\n}\n\nexport function getOperationParameters(node: ast.OperationNode, options: { paramsCasing?: 'camelcase' } = {}): OperationParameterGroups {\n const params = ast.caseParams(node.parameters, options.paramsCasing)\n\n return {\n path: params.filter((param) => param.in === 'path'),\n query: params.filter((param) => param.in === 'query'),\n header: params.filter((param) => param.in === 'header'),\n cookie: params.filter((param) => param.in === 'cookie'),\n }\n}\n\nexport function getStatusCodeNumber(statusCode: ast.StatusCode | number | string): number | null {\n const code = Number(statusCode)\n\n return Number.isNaN(code) ? null : code\n}\n\nexport function isSuccessStatusCode(statusCode: ast.StatusCode | number | string): boolean {\n const code = getStatusCodeNumber(statusCode)\n\n return code !== null && code >= 200 && code < 300\n}\n\nexport function isErrorStatusCode(statusCode: ast.StatusCode | number | string): boolean {\n const code = getStatusCodeNumber(statusCode)\n\n return code !== null && code >= 400\n}\n\nexport function getSuccessResponses<TResponse extends ResponseLike>(responses: ReadonlyArray<TResponse>): Array<TResponse> {\n return responses.filter((response) => isSuccessStatusCode(response.statusCode))\n}\n\nexport function getOperationSuccessResponses(node: ast.OperationNode): Array<ast.ResponseNode> {\n return getSuccessResponses(node.responses)\n}\n\nexport function getPrimarySuccessResponse(node: ast.OperationNode): ast.ResponseNode | null {\n return getOperationSuccessResponses(node)[0] ?? null\n}\n\nexport function resolveErrorNames(node: ast.OperationNode, resolver: ResponseStatusNameResolver): string[] {\n return node.responses\n .filter((response) => isErrorStatusCode(response.statusCode))\n .map((response) => resolver.resolveResponseStatusName(node, response.statusCode))\n}\n\nexport function resolveStatusCodeNames(node: ast.OperationNode, resolver: ResponseStatusNameResolver): string[] {\n return node.responses.map((response) => resolver.resolveResponseStatusName(node, response.statusCode))\n}\n\nconst typeNamesByResolver = new WeakMap<OperationTypeNameResolver, Map<string, string[]>>()\n\nexport function resolveOperationTypeNames(\n node: ast.OperationNode,\n resolver: OperationTypeNameResolver,\n options: ResolveOperationTypeNameOptions = {},\n): string[] {\n const cacheKey = `${node.operationId}\\0${options.paramsCasing ?? ''}\\0${options.order ?? ''}\\0${options.responseStatusNames ?? ''}\\0${(options.exclude ?? []).join(',')}`\n let byResolver = typeNamesByResolver.get(resolver)\n if (byResolver) {\n const cached = byResolver.get(cacheKey)\n if (cached) return cached\n } else {\n byResolver = new Map()\n typeNamesByResolver.set(resolver, byResolver)\n }\n\n const { path, query, header } = getOperationParameters(node, { paramsCasing: options.paramsCasing })\n const responseStatusNames =\n options.responseStatusNames === 'error'\n ? resolveErrorNames(node, resolver)\n : options.responseStatusNames === false\n ? []\n : resolveStatusCodeNames(node, resolver)\n const exclude = new Set(options.exclude ?? [])\n const paramNames = [\n ...path.map((param) => resolver.resolvePathParamsName(node, param)),\n ...query.map((param) => resolver.resolveQueryParamsName(node, param)),\n ...header.map((param) => resolver.resolveHeaderParamsName(node, param)),\n ]\n const bodyAndResponseNames = [node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null, resolver.resolveResponseName(node)]\n const names =\n options.order === 'body-response-first'\n ? [...bodyAndResponseNames, ...paramNames, ...responseStatusNames]\n : [...paramNames, ...bodyAndResponseNames, ...responseStatusNames]\n\n const result = names.filter((name): name is string => Boolean(name) && !exclude.has(name as string))\n byResolver.set(cacheKey, result)\n return result\n}\n\nexport function resolveResponseTypes(node: ast.OperationNode, resolver: ResponseNameResolver): Array<[statusCode: number | 'default', typeName: string]> {\n const types: Array<[number | 'default', string]> = []\n\n for (const response of node.responses) {\n if (response.statusCode === 'default') {\n types.push(['default', resolver.resolveResponseName(node)])\n continue\n }\n\n const code = getStatusCodeNumber(response.statusCode)\n if (code === null) {\n continue\n }\n\n types.push([code, isSuccessStatusCode(code) ? resolver.resolveResponseName(node) : resolver.resolveResponseStatusName(node, response.statusCode)])\n }\n\n return types\n}\n\nexport function findSuccessStatusCode(responses: Array<{ statusCode: ast.StatusCode | number | string }>): ast.StatusCode | null {\n for (const response of responses) {\n if (isSuccessStatusCode(response.statusCode)) {\n return response.statusCode as ast.StatusCode\n }\n }\n\n return null\n}\n","import { ast } from '@kubb/core'\nimport type { PluginTs } from '@kubb/plugin-ts'\n\nexport function transformName(name: string, type: string, transformers?: { name?: (name: string, type?: string) => string }): string {\n return transformers?.name?.(name, type) || name\n}\n\ntype OverrideEntry<TOptions> = {\n type: string\n pattern: string | RegExp\n options?: Partial<TOptions>\n}\n\nfunction matchesPattern(node: ast.OperationNode, ov: { type: string; pattern: string | RegExp }): boolean {\n const { type, pattern } = ov\n const matches = (value: string) => (typeof pattern === 'string' ? value === pattern : pattern.test(value))\n if (type === 'operationId') return matches(node.operationId)\n if (type === 'tag') return node.tags.some((t) => matches(t))\n if (type === 'path') return matches(node.path)\n if (type === 'method') return matches(node.method)\n return false\n}\n\n/**\n * Resolves per-operation overrides (first matching override wins).\n *\n * @example\n * ```ts\n * const opts = resolveOperationOverrides(node, override)\n * const queryOpts = 'query' in opts ? opts.query : defaultQuery\n * ```\n */\nexport function resolveOperationOverrides<TOptions>(node: ast.OperationNode, override?: ReadonlyArray<OverrideEntry<TOptions>>): Partial<TOptions> {\n if (!override) return {}\n const match = override.find((ov) => matchesPattern(node, ov))\n return match?.options ?? {}\n}\n\ntype ZodSchemaNameResolverLike = {\n resolveResponseName?: (node: ast.OperationNode) => string | undefined\n resolveDataName?: (node: ast.OperationNode) => string | undefined\n}\n\n/**\n * Collects the Zod schema import names for an operation (response + request body).\n *\n * Returns an empty array when no resolver is provided or the operation has no request body schema.\n */\nexport function resolveZodSchemaNames(node: ast.OperationNode, zodResolver: ZodSchemaNameResolverLike | null | undefined): string[] {\n if (!zodResolver) return []\n return [zodResolver.resolveResponseName?.(node), node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : null].filter(\n (n): n is string => Boolean(n),\n )\n}\n\n/**\n * Resolve the type for a single path parameter.\n *\n * - When the resolver's group name differs from the individual param name\n * (e.g. kubbV4) → `GroupName['paramName']` (member access).\n * - When they match (v5 default) → `TypeName` (direct reference).\n */\nexport function resolvePathParamType(node: ast.OperationNode, param: ast.ParameterNode, resolver: PluginTs['resolver']): ast.ParamsTypeNode {\n const individualName = resolver.resolveParamName(node, param)\n const groupName = resolver.resolvePathParamsName(node, param)\n\n if (groupName !== individualName) {\n return ast.createParamsType({ variant: 'member', base: groupName, key: param.name })\n }\n return ast.createParamsType({ variant: 'reference', name: individualName })\n}\n\ntype QueryGroupResult = { type: ast.ParamsTypeNode; optional: boolean } | null\n\n/**\n * Derive a query-params group type from the resolver.\n * Returns `null` when no query params exist or when the group name\n * equals the individual param name (no real group).\n */\nexport function resolveQueryGroupType(node: ast.OperationNode, params: ast.ParameterNode[], resolver: PluginTs['resolver']): QueryGroupResult {\n if (!params.length) return null\n const firstParam = params[0]!\n const groupName = resolver.resolveQueryParamsName(node, firstParam)\n if (groupName === resolver.resolveParamName(node, firstParam)) return null\n return { type: ast.createParamsType({ variant: 'reference', name: groupName }), optional: params.every((p) => !p.required) }\n}\n\n/**\n * Derive a header-params group type from the resolver.\n */\nexport function resolveHeaderGroupType(node: ast.OperationNode, params: ast.ParameterNode[], resolver: PluginTs['resolver']): QueryGroupResult {\n if (!params.length) return null\n const firstParam = params[0]!\n const groupName = resolver.resolveHeaderParamsName(node, firstParam)\n if (groupName === resolver.resolveParamName(node, firstParam)) return null\n return { type: ast.createParamsType({ variant: 'reference', name: groupName }), optional: params.every((p) => !p.required) }\n}\n\n/**\n * Build a single `FunctionParameterNode` for a query or header group.\n */\nexport function buildGroupParam(\n name: string,\n node: ast.OperationNode,\n params: ast.ParameterNode[],\n groupType: QueryGroupResult,\n resolver: PluginTs['resolver'],\n): ast.FunctionParameterNode[] {\n if (groupType) {\n return [ast.createFunctionParameter({ name, type: groupType.type, optional: groupType.optional })]\n }\n if (params.length) {\n const structProps = params.map((p) => ({\n name: p.name,\n type: ast.createParamsType({ variant: 'reference', name: resolver.resolveParamName(node, p) }),\n optional: !p.required,\n }))\n return [\n ast.createFunctionParameter({\n name,\n type: ast.createParamsType({ variant: 'struct', properties: structProps }),\n optional: params.every((p) => !p.required),\n }),\n ]\n }\n return []\n}\n\n/**\n * Build QueryKey params: pathParams + data + queryParams (NO headers, NO config).\n */\nexport function buildQueryKeyParams(\n node: ast.OperationNode,\n options: {\n pathParamsType: 'object' | 'inline'\n paramsCasing: 'camelcase' | undefined\n resolver: PluginTs['resolver']\n },\n): ast.FunctionParametersNode {\n const { pathParamsType, paramsCasing, resolver } = options\n\n const casedParams = ast.caseParams(node.parameters, paramsCasing)\n const pathParams = casedParams.filter((p) => p.in === 'path')\n const queryParams = casedParams.filter((p) => p.in === 'query')\n\n const queryGroupType = resolveQueryGroupType(node, queryParams, resolver)\n\n const bodyType = node.requestBody?.content?.[0]?.schema ? ast.createParamsType({ variant: 'reference', name: resolver.resolveDataName(node) }) : null\n const bodyRequired = node.requestBody?.required ?? false\n\n const params: Array<ast.FunctionParameterNode | ast.ParameterGroupNode> = []\n\n // Path params\n if (pathParams.length) {\n const pathChildren = pathParams.map((p) =>\n ast.createFunctionParameter({ name: p.name, type: resolvePathParamType(node, p, resolver), optional: !p.required }),\n )\n params.push({\n kind: 'ParameterGroup',\n properties: pathChildren,\n inline: pathParamsType === 'inline',\n default: pathChildren.every((c) => c.optional) ? '{}' : undefined,\n })\n }\n\n // Request body\n if (bodyType) {\n params.push(ast.createFunctionParameter({ name: 'data', type: bodyType, optional: !bodyRequired }))\n }\n\n // Query params\n params.push(...buildGroupParam('params', node, queryParams, queryGroupType, resolver))\n\n return ast.createFunctionParameters({ params })\n}\n\nexport function buildEnabledCheck(paramsNode: ast.FunctionParametersNode): string {\n const required: string[] = []\n for (const param of paramsNode.params) {\n if ('kind' in param && (param as ast.ParameterGroupNode).kind === 'ParameterGroup') {\n const group = param as ast.ParameterGroupNode\n for (const child of group.properties) {\n if (!child.optional && child.default === undefined) {\n required.push(child.name)\n }\n }\n } else {\n const fp = param as ast.FunctionParameterNode\n if (!fp.optional && fp.default === undefined) {\n required.push(fp.name)\n }\n }\n }\n return required.join(' && ')\n}\n","import { getOperationParameters } from '@internals/shared'\nimport { URLPath } from '@internals/utils'\nimport type { ast } from '@kubb/core'\nimport type { PluginTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function, Type } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { Transformer } from '../types.ts'\nimport { buildQueryKeyParams } from '../utils.ts'\n\ntype Props = {\n name: string\n typeName: string\n node: ast.OperationNode\n tsResolver: PluginTs['resolver']\n paramsCasing: 'camelcase' | undefined\n pathParamsType: 'object' | 'inline'\n transformer: Transformer | null | undefined\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nexport const queryKeyTransformer: Transformer = ({ node, casing }) => {\n const path = new URLPath(node.path, { casing })\n const hasQueryParams = getOperationParameters(node).query.length > 0\n const hasRequestBody = !!node.requestBody?.content?.[0]?.schema\n\n return [\n path.toObject({ type: 'path', stringify: true }),\n hasQueryParams ? '...(params ? [params] : [])' : null,\n hasRequestBody ? '...(data ? [data] : [])' : null,\n ].filter(Boolean) as string[]\n}\n\nexport function QueryKey({ name, node, tsResolver, paramsCasing, pathParamsType, typeName, transformer }: Props): KubbReactNode {\n const paramsNode = buildQueryKeyParams(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const keys = (transformer ?? queryKeyTransformer)({ node, casing: paramsCasing })\n\n return (\n <>\n <File.Source name={name} isExportable isIndexable>\n <Function.Arrow name={name} export params={paramsSignature} singleLine>\n {`[${keys.join(', ')}] as const`}\n </Function.Arrow>\n </File.Source>\n <File.Source name={typeName} isTypeOnly>\n <Type name={typeName}>{`ReturnType<typeof ${name}>`}</Type>\n </File.Source>\n </>\n )\n}\n","export {\n buildGroupParam,\n buildQueryKeyParams,\n resolveHeaderGroupType,\n resolveOperationOverrides,\n resolvePathParamType,\n resolveQueryGroupType,\n resolveZodSchemaNames,\n} from '@internals/tanstack-query'\nexport { buildOperationComments as getComments, buildRequestConfigType, getContentTypeInfo, resolveErrorNames, resolveStatusCodeNames } from '@internals/shared'\n\nimport { ast } from '@kubb/core'\n\nexport function printType(typeNode: ast.ParamsTypeNode | undefined): string {\n if (!typeNode) return 'unknown'\n if (typeNode.variant === 'reference') return typeNode.name\n if (typeNode.variant === 'member') return `${typeNode.base}['${typeNode.key}']`\n if (typeNode.variant === 'struct') {\n const parts = typeNode.properties.map((p) => {\n const typeStr = printType(p.type)\n const key = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(p.name) ? p.name : JSON.stringify(p.name)\n return p.optional ? `${key}?: ${typeStr}` : `${key}: ${typeStr}`\n })\n return `{ ${parts.join('; ')} }`\n }\n return 'unknown'\n}\n\nexport function wrapWithMaybeRefOrGetter(paramsNode: ast.FunctionParametersNode, skip?: (name: string) => boolean): ast.FunctionParametersNode {\n const wrappedParams = paramsNode.params.map((param) => {\n if ('kind' in param && (param as ast.ParameterGroupNode).kind === 'ParameterGroup') {\n const group = param as ast.ParameterGroupNode\n return {\n ...group,\n properties: group.properties.map((p) => ({\n ...p,\n type: p.type ? ast.createParamsType({ variant: 'reference', name: `MaybeRefOrGetter<${printType(p.type)}>` }) : p.type,\n })),\n }\n }\n const fp = param as ast.FunctionParameterNode\n if (skip?.(fp.name)) return fp\n return {\n ...fp,\n type: fp.type ? ast.createParamsType({ variant: 'reference', name: `MaybeRefOrGetter<${printType(fp.type)}>` }) : fp.type,\n }\n })\n return ast.createFunctionParameters({ params: wrappedParams })\n}\n","import type { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function, Type } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport { queryKeyTransformer } from '@internals/tanstack-query'\nimport type { Transformer } from '../types.ts'\nimport { buildQueryKeyParams, wrapWithMaybeRefOrGetter } from '../utils.ts'\n\ntype Props = {\n name: string\n typeName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: 'camelcase' | undefined\n pathParamsType: 'object' | 'inline'\n transformer: Transformer | null | undefined\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\n\nexport function buildQueryKeyParamsNode(\n node: ast.OperationNode,\n options: { pathParamsType: 'object' | 'inline'; paramsCasing: 'camelcase' | undefined; resolver: ResolverTs },\n): ast.FunctionParametersNode {\n return wrapWithMaybeRefOrGetter(buildQueryKeyParams(node, options))\n}\n\nexport function QueryKey({ name, node, tsResolver, paramsCasing, pathParamsType, typeName, transformer }: Props): KubbReactNode {\n const paramsNode = buildQueryKeyParamsNode(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const keys = (transformer ?? queryKeyTransformer)({\n node,\n casing: paramsCasing,\n })\n\n return (\n <>\n <File.Source name={name} isExportable isIndexable>\n <Function.Arrow name={name} export params={paramsSignature} singleLine>\n {`[${keys.join(', ')}] as const`}\n </Function.Arrow>\n </File.Source>\n <File.Source name={typeName} isExportable isIndexable isTypeOnly>\n <Type name={typeName} export>\n {`ReturnType<typeof ${name}>`}\n </Type>\n </File.Source>\n </>\n )\n}\n","import { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport { buildEnabledCheck } from '@internals/tanstack-query'\nimport type { PluginVueQuery } from '../types.ts'\nimport { resolveErrorNames, wrapWithMaybeRefOrGetter } from '../utils.ts'\nimport { buildQueryKeyParamsNode } from './QueryKey.tsx'\n\ntype Props = {\n name: string\n clientName: string\n queryKeyName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\n\nexport function getQueryOptionsParams(\n node: ast.OperationNode,\n options: {\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n const { paramsType, paramsCasing, pathParamsType, resolver } = options\n const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null\n\n const baseParams = ast.createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver,\n extraParams: [\n ast.createFunctionParameter({\n name: 'config',\n type: ast.createParamsType({\n variant: 'reference',\n name: requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }',\n }),\n default: '{}',\n }),\n ],\n })\n\n return wrapWithMaybeRefOrGetter(baseParams, (name) => name === 'config')\n}\n\nexport function QueryOptions({\n name,\n clientName,\n dataReturnType,\n node,\n tsResolver,\n paramsCasing,\n paramsType,\n pathParamsType,\n queryKeyName,\n}: Props): KubbReactNode {\n const responseName = tsResolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, tsResolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const paramsNode = getQueryOptionsParams(node, { paramsType, paramsCasing, pathParamsType, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const rawParamsCall = callPrinter.print(paramsNode) ?? ''\n\n // Transform: wrap non-config params with toValue(), add signal to config\n const clientCallStr = rawParamsCall.replace(/\\bconfig\\b(?=[^,]*$)/, '{ ...config, signal: config.signal ?? signal }')\n\n const queryKeyParamsNode = buildQueryKeyParamsNode(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? ''\n\n const enabledSource = buildEnabledCheck(queryKeyParamsNode)\n const enabledText = enabledSource\n ? `enabled: () => ${enabledSource\n .split(' && ')\n .map((n) => `!!toValue(${n.trim()})`)\n .join(' && ')},`\n : ''\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export params={paramsSignature}>\n {`\n const queryKey = ${queryKeyName}(${queryKeyParamsCall})\n return queryOptions<${TData}, ${TError}, ${TData}>({\n ${enabledText}\n queryKey,\n queryFn: async ({ signal }) => {\n return ${clientName}(${addToValueCalls(clientCallStr)})\n },\n })\n`}\n </Function>\n </File.Source>\n )\n}\n\n/**\n * Wraps parameter names with `toValue()` in the client call string,\n * except for 'config'-related params (which are already plain objects).\n *\n * Handles both inline params (`petId, config`) and object shorthand\n * params (`{ petId }, config`) by expanding to `{ petId: toValue(petId) }`.\n */\nfunction addToValueCalls(callStr: string): string {\n // Step 1: Transform shorthand object params like { petId } → { petId: toValue(petId) }\n let result = callStr.replace(/\\{\\s*([\\w,\\s]+)\\s*\\}(?=\\s*,)/g, (match, inner: string) => {\n // Only transform simple shorthand (no colons, no spread)\n if (inner.includes(':') || inner.includes('...')) return match\n const keys = inner\n .split(',')\n .map((k: string) => k.trim())\n .filter(Boolean)\n const wrapped = keys.map((k: string) => `${k}: toValue(${k})`).join(', ')\n return `{ ${wrapped} }`\n })\n\n // Step 2: Handle standalone identifiers like `data, params`\n result = result.replace(/(?<![{.:?])\\b(\\w+)\\b(?=\\s*,)/g, (match, name: string) => {\n if (name === 'config' || name === 'signal' || name === 'undefined') return match\n if (match.includes('toValue(')) return match\n return `toValue(${name})`\n })\n\n return result\n}\n","import { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { Infinite, PluginVueQuery } from '../types.ts'\nimport { getComments, resolveErrorNames, wrapWithMaybeRefOrGetter } from '../utils.ts'\nimport { buildQueryKeyParamsNode } from './QueryKey.tsx'\nimport { getQueryOptionsParams } from './QueryOptions.tsx'\n\ntype Props = {\n name: string\n queryOptionsName: string\n queryKeyName: string\n queryKeyTypeName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n initialPageParam: Infinite['initialPageParam']\n queryParam?: Infinite['queryParam']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\n\nfunction buildInfiniteQueryParamsNode(\n node: ast.OperationNode,\n options: {\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n const { paramsType, paramsCasing, pathParamsType, dataReturnType, resolver } = options\n const responseName = resolver.resolveResponseName(node)\n const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null\n const errorNames = resolveErrorNames(node, resolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const optionsParam = ast.createFunctionParameter({\n name: 'options',\n type: ast.createParamsType({\n variant: 'reference',\n name: `{\n query?: Partial<UseInfiniteQueryOptions<${[TData, TError, 'TQueryData', 'TQueryKey', 'TQueryData'].join(', ')}>> & { client?: QueryClient },\n client?: ${requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }'}\n}`,\n }),\n default: '{}',\n })\n\n const baseParams = ast.createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver,\n extraParams: [optionsParam],\n })\n\n return wrapWithMaybeRefOrGetter(baseParams, (name) => name === 'options')\n}\n\nexport function InfiniteQuery({\n name,\n queryKeyTypeName,\n queryOptionsName,\n queryKeyName,\n paramsType,\n paramsCasing,\n pathParamsType,\n dataReturnType,\n node,\n tsResolver,\n}: Props): KubbReactNode {\n const responseName = tsResolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, tsResolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n const returnType = `UseInfiniteQueryReturnType<${['TData', TError].join(', ')}> & { queryKey: TQueryKey }`\n const generics = [`TData = InfiniteData<${TData}>`, `TQueryData = ${TData}`, `TQueryKey extends QueryKey = ${queryKeyTypeName}`]\n\n const queryKeyParamsNode = buildQueryKeyParamsNode(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? ''\n\n const queryOptionsParamsNode = getQueryOptionsParams(node, { paramsType, paramsCasing, pathParamsType, resolver: tsResolver })\n const queryOptionsParamsCall = callPrinter.print(queryOptionsParamsNode) ?? ''\n\n const paramsNode = buildInfiniteQueryParamsNode(node, { paramsType, paramsCasing, pathParamsType, dataReturnType, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export generics={generics.join(', ')} params={paramsSignature} JSDoc={{ comments: getComments(node) }}>\n {`\n const { query: queryConfig = {}, client: config = {} } = options ?? {}\n const { client: queryClient, ...resolvedOptions } = queryConfig\n const queryKey = (resolvedOptions && 'queryKey' in resolvedOptions ? toValue(resolvedOptions.queryKey) : undefined) ?? ${queryKeyName}(${queryKeyParamsCall})\n\n const query = useInfiniteQuery({\n ...${queryOptionsName}(${queryOptionsParamsCall}),\n ...resolvedOptions,\n queryKey\n } as unknown as UseInfiniteQueryOptions<${TData}, ${TError}, ${TData}, TQueryKey, ${TData}>, toValue(queryClient)) as ${returnType}\n\n query.queryKey = queryKey as TQueryKey\n\n return query\n `}\n </Function>\n </File.Source>\n )\n}\n","import { getOperationParameters } from '@internals/shared'\nimport { getNestedAccessor } from '@internals/utils'\nimport type { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { Infinite, PluginVueQuery } from '../types.ts'\nimport { resolveErrorNames } from '../utils.ts'\nimport { buildQueryKeyParamsNode } from './QueryKey.tsx'\nimport { buildEnabledCheck } from '@internals/tanstack-query'\nimport { getQueryOptionsParams } from './QueryOptions.tsx'\n\ntype Props = {\n name: string\n clientName: string\n queryKeyName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n initialPageParam: Infinite['initialPageParam']\n cursorParam: Infinite['cursorParam']\n nextParam: Infinite['nextParam']\n previousParam: Infinite['previousParam']\n queryParam: Infinite['queryParam']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\n\nexport function InfiniteQueryOptions({\n name,\n clientName,\n initialPageParam,\n cursorParam,\n nextParam,\n previousParam,\n node,\n tsResolver,\n paramsCasing,\n paramsType,\n dataReturnType,\n pathParamsType,\n queryParam,\n queryKeyName,\n}: Props): KubbReactNode {\n const responseName = tsResolver.resolveResponseName(node)\n const queryFnDataType = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const errorNames = resolveErrorNames(node, tsResolver)\n const errorType = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const isInitialPageParamDefined = initialPageParam !== undefined && initialPageParam !== null\n const fallbackPageParamType =\n typeof initialPageParam === 'number'\n ? 'number'\n : typeof initialPageParam === 'string'\n ? initialPageParam.includes(' as ')\n ? (() => {\n const parts = initialPageParam.split(' as ')\n return parts[parts.length - 1] ?? 'unknown'\n })()\n : 'string'\n : typeof initialPageParam === 'boolean'\n ? 'boolean'\n : 'unknown'\n\n const rawQueryParams = getOperationParameters(node).query\n const queryParamsTypeName =\n rawQueryParams.length > 0\n ? (() => {\n const groupName = tsResolver.resolveQueryParamsName(node, rawQueryParams[0]!)\n const individualName = tsResolver.resolveParamName(node, rawQueryParams[0]!)\n return groupName !== individualName ? groupName : null\n })()\n : null\n\n const queryParamType = queryParam && queryParamsTypeName ? `${queryParamsTypeName}['${queryParam}']` : null\n const pageParamType = queryParamType ? (isInitialPageParamDefined ? `NonNullable<${queryParamType}>` : queryParamType) : fallbackPageParamType\n\n const paramsNode = getQueryOptionsParams(node, { paramsType, paramsCasing, pathParamsType, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n const rawParamsCall = callPrinter.print(paramsNode) ?? ''\n const clientCallStr = rawParamsCall.replace(/\\bconfig\\b(?=[^,]*$)/, '{ ...config, signal: config.signal ?? signal }')\n\n const queryKeyParamsNode = buildQueryKeyParamsNode(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? ''\n\n const enabledSource = buildEnabledCheck(queryKeyParamsNode)\n const enabledText = enabledSource\n ? `enabled: () => ${enabledSource\n .split(' && ')\n .map((n) => `!!toValue(${n.trim()})`)\n .join(' && ')},`\n : ''\n\n const hasNewParams = nextParam != null || previousParam != null\n\n const [getNextPageParamExpr, getPreviousPageParamExpr] = (() => {\n if (hasNewParams) {\n const nextAccessor = nextParam ? getNestedAccessor(nextParam, 'lastPage') : null\n const prevAccessor = previousParam ? getNestedAccessor(previousParam, 'firstPage') : null\n return [\n nextAccessor ? `getNextPageParam: (lastPage) => ${nextAccessor}` : null,\n prevAccessor ? `getPreviousPageParam: (firstPage) => ${prevAccessor}` : null,\n ] as const\n }\n if (cursorParam) {\n return [`getNextPageParam: (lastPage) => lastPage['${cursorParam}']`, `getPreviousPageParam: (firstPage) => firstPage['${cursorParam}']`] as const\n }\n return [\n dataReturnType === 'full'\n ? 'getNextPageParam: (lastPage, _allPages, lastPageParam) => Array.isArray(lastPage.data) && lastPage.data.length === 0 ? undefined : lastPageParam + 1'\n : 'getNextPageParam: (lastPage, _allPages, lastPageParam) => Array.isArray(lastPage) && lastPage.length === 0 ? undefined : lastPageParam + 1',\n 'getPreviousPageParam: (_firstPage, _allPages, firstPageParam) => firstPageParam <= 1 ? undefined : firstPageParam - 1',\n ] as const\n })()\n\n const queryOptionsArr = [\n `initialPageParam: ${typeof initialPageParam === 'string' ? JSON.stringify(initialPageParam) : initialPageParam}`,\n getNextPageParamExpr,\n getPreviousPageParamExpr,\n ].filter(Boolean)\n\n const infiniteOverrideParams =\n queryParam && queryParamsTypeName\n ? `\n params = {\n ...(params ?? {}),\n ['${queryParam}']: pageParam as unknown as ${queryParamsTypeName}['${queryParam}'],\n } as ${queryParamsTypeName}`\n : ''\n\n if (infiniteOverrideParams) {\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export params={paramsSignature}>\n {`\n const queryKey = ${queryKeyName}(${queryKeyParamsCall})\n return infiniteQueryOptions<${queryFnDataType}, ${errorType}, InfiniteData<${queryFnDataType}>, QueryKey, ${pageParamType}>({\n ${enabledText}\n queryKey,\n queryFn: async ({ signal, pageParam }) => {\n ${infiniteOverrideParams}\n return ${clientName}(${addToValueCalls(clientCallStr)})\n },\n ${queryOptionsArr.join(',\\n')}\n })\n`}\n </Function>\n </File.Source>\n )\n }\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export params={paramsSignature}>\n {`\n const queryKey = ${queryKeyName}(${queryKeyParamsCall})\n return infiniteQueryOptions<${queryFnDataType}, ${errorType}, InfiniteData<${queryFnDataType}>, QueryKey, ${pageParamType}>({\n ${enabledText}\n queryKey,\n queryFn: async ({ signal }) => {\n return ${clientName}(${addToValueCalls(clientCallStr)})\n },\n ${queryOptionsArr.join(',\\n')}\n })\n`}\n </Function>\n </File.Source>\n )\n}\n\nfunction addToValueCalls(callStr: string): string {\n // Step 1: Transform shorthand object params like { petId } → { petId: toValue(petId) }\n let result = callStr.replace(/\\{\\s*([\\w,\\s]+)\\s*\\}(?=\\s*,)/g, (match, inner: string) => {\n if (inner.includes(':') || inner.includes('...')) return match\n const keys = inner\n .split(',')\n .map((k: string) => k.trim())\n .filter(Boolean)\n const wrapped = keys.map((k: string) => `${k}: toValue(${k})`).join(', ')\n return `{ ${wrapped} }`\n })\n\n // Step 2: Handle standalone identifiers like `data, params`\n result = result.replace(/(?<![{.:?])\\b(\\w+)\\b(?=\\s*,)/g, (match, name: string) => {\n if (name === 'config' || name === 'signal' || name === 'undefined') return match\n if (match.includes('toValue(')) return match\n return `toValue(${name})`\n })\n\n return result\n}\n","import { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { PluginVueQuery } from '../types.ts'\nimport { buildRequestConfigType, getComments, resolveErrorNames, wrapWithMaybeRefOrGetter } from '../utils.ts'\n\ntype Props = {\n name: string\n typeName: string\n clientName: string\n mutationKeyName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\nconst keysPrinter = functionPrinter({ mode: 'keys' })\n\nfunction createMutationArgParams(\n node: ast.OperationNode,\n options: {\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n return ast.createOperationParams(node, {\n paramsType: 'inline',\n pathParamsType: 'inline',\n paramsCasing: options.paramsCasing,\n resolver: options.resolver,\n })\n}\n\nfunction buildMutationParamsNode(\n node: ast.OperationNode,\n options: {\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n const { paramsCasing, dataReturnType, resolver } = options\n const responseName = resolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, resolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const mutationArgParamsNode = createMutationArgParams(node, { paramsCasing, resolver })\n\n const wrappedParamsNode = wrapWithMaybeRefOrGetter(mutationArgParamsNode)\n const TRequestWrapped = wrappedParamsNode.params.length > 0 ? (declarationPrinter.print(wrappedParamsNode) ?? '') : ''\n\n return ast.createFunctionParameters({\n params: [\n ast.createFunctionParameter({\n name: 'options',\n type: ast.createParamsType({\n variant: 'reference',\n name: `{\n mutation?: MutationObserverOptions<${[TData, TError, TRequestWrapped ? `{${TRequestWrapped}}` : 'undefined', 'TContext'].join(', ')}> & { client?: QueryClient },\n client?: ${buildRequestConfigType(node, resolver)},\n}`,\n }),\n default: '{}',\n }),\n ],\n })\n}\n\nexport function Mutation({\n name,\n clientName,\n paramsCasing,\n paramsType,\n pathParamsType,\n dataReturnType,\n node,\n tsResolver,\n mutationKeyName,\n}: Props): KubbReactNode {\n const responseName = tsResolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, tsResolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const mutationArgParamsNode = createMutationArgParams(node, {\n paramsCasing,\n resolver: tsResolver,\n })\n const hasMutationParams = mutationArgParamsNode.params.length > 0\n const TRequest = hasMutationParams ? (declarationPrinter.print(mutationArgParamsNode) ?? '') : ''\n const argKeysStr = hasMutationParams ? (keysPrinter.print(mutationArgParamsNode) ?? '') : ''\n\n const generics = [TData, TError, TRequest ? `{${TRequest}}` : 'undefined', 'TContext'].join(', ')\n\n const mutationKeyParamsNode = ast.createFunctionParameters({ params: [] })\n const mutationKeyParamsCall = callPrinter.print(mutationKeyParamsNode) ?? ''\n\n const clientCallParamsNode = ast.createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver: tsResolver,\n extraParams: [\n ast.createFunctionParameter({\n name: 'config',\n type: ast.createParamsType({\n variant: 'reference',\n name: buildRequestConfigType(node, tsResolver),\n }),\n default: '{}',\n }),\n ],\n })\n const clientCallStr = callPrinter.print(clientCallParamsNode) ?? ''\n\n const paramsNode = buildMutationParamsNode(node, { paramsCasing, dataReturnType, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export params={paramsSignature} JSDoc={{ comments: getComments(node) }} generics={['TContext']}>\n {`\n const { mutation = {}, client: config = {} } = options ?? {}\n const { client: queryClient, ...mutationOptions } = mutation;\n const mutationKey = mutationOptions?.mutationKey ?? ${mutationKeyName}(${mutationKeyParamsCall})\n\n return useMutation<${generics}>({\n mutationFn: async(${hasMutationParams ? `{ ${argKeysStr} }` : ''}) => {\n return ${clientName}(${clientCallStr})\n },\n mutationKey,\n ...mutationOptions\n }, queryClient)\n `}\n </Function>\n </File.Source>\n )\n}\n","import { ast } from '@kubb/core'\nimport type { ResolverTs } from '@kubb/plugin-ts'\nimport { functionPrinter } from '@kubb/plugin-ts'\nimport { File, Function } from '@kubb/renderer-jsx'\nimport type { KubbReactNode } from '@kubb/renderer-jsx/types'\nimport type { PluginVueQuery } from '../types.ts'\nimport { getComments, resolveErrorNames, wrapWithMaybeRefOrGetter } from '../utils.ts'\nimport { buildQueryKeyParamsNode } from './QueryKey.tsx'\nimport { getQueryOptionsParams } from './QueryOptions.tsx'\n\ntype Props = {\n name: string\n queryOptionsName: string\n queryKeyName: string\n queryKeyTypeName: string\n node: ast.OperationNode\n tsResolver: ResolverTs\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n}\n\nconst declarationPrinter = functionPrinter({ mode: 'declaration' })\nconst callPrinter = functionPrinter({ mode: 'call' })\n\nfunction buildQueryParamsNode(\n node: ast.OperationNode,\n options: {\n paramsType: PluginVueQuery['resolvedOptions']['paramsType']\n paramsCasing: PluginVueQuery['resolvedOptions']['paramsCasing']\n pathParamsType: PluginVueQuery['resolvedOptions']['pathParamsType']\n dataReturnType: PluginVueQuery['resolvedOptions']['client']['dataReturnType']\n resolver: ResolverTs\n },\n): ast.FunctionParametersNode {\n const { paramsType, paramsCasing, pathParamsType, dataReturnType, resolver } = options\n const responseName = resolver.resolveResponseName(node)\n const requestName = node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : null\n const errorNames = resolveErrorNames(node, resolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n\n const optionsParam = ast.createFunctionParameter({\n name: 'options',\n type: ast.createParamsType({\n variant: 'reference',\n name: `{\n query?: Partial<UseQueryOptions<${[TData, TError, 'TData', 'TQueryData', 'TQueryKey'].join(', ')}>> & { client?: QueryClient },\n client?: ${requestName ? `Partial<RequestConfig<${requestName}>> & { client?: Client }` : 'Partial<RequestConfig> & { client?: Client }'}\n}`,\n }),\n default: '{}',\n })\n\n // Vue-query wraps operation params with MaybeRefOrGetter\n const baseParams = ast.createOperationParams(node, {\n paramsType,\n pathParamsType: paramsType === 'object' ? 'object' : pathParamsType === 'object' ? 'object' : 'inline',\n paramsCasing,\n resolver,\n extraParams: [optionsParam],\n })\n\n return wrapWithMaybeRefOrGetter(baseParams, (name) => name === 'options')\n}\n\nexport function Query({\n name,\n queryKeyTypeName,\n queryOptionsName,\n queryKeyName,\n paramsType,\n paramsCasing,\n pathParamsType,\n dataReturnType,\n node,\n tsResolver,\n}: Props): KubbReactNode {\n const responseName = tsResolver.resolveResponseName(node)\n const errorNames = resolveErrorNames(node, tsResolver)\n\n const TData = dataReturnType === 'data' ? responseName : `ResponseConfig<${responseName}>`\n const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(' | ') : 'Error'}>`\n const returnType = `UseQueryReturnType<${['TData', TError].join(', ')}> & { queryKey: TQueryKey }`\n const generics = [`TData = ${TData}`, `TQueryData = ${TData}`, `TQueryKey extends QueryKey = ${queryKeyTypeName}`]\n\n const queryKeyParamsNode = buildQueryKeyParamsNode(node, { pathParamsType, paramsCasing, resolver: tsResolver })\n const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? ''\n\n const queryOptionsParamsNode = getQueryOptionsParams(node, { paramsType, paramsCasing, pathParamsType, resolver: tsResolver })\n const queryOptionsParamsCall = callPrinter.print(queryOptionsParamsNode) ?? ''\n\n const paramsNode = buildQueryParamsNode(node, { paramsType, paramsCasing, pathParamsType, dataReturnType, resolver: tsResolver })\n const paramsSignature = declarationPrinter.print(paramsNode) ?? ''\n\n return (\n <File.Source name={name} isExportable isIndexable>\n <Function name={name} export generics={generics.join(', ')} params={paramsSignature} JSDoc={{ comments: getComments(node) }}>\n {`\n const { query: queryConfig = {}, client: config = {} } = options ?? {}\n const { client: queryClient, ...resolvedOptions } = queryConfig\n const queryKey = (resolvedOptions && 'queryKey' in resolvedOptions ? toValue(resolvedOptions.queryKey) : undefined) ?? ${queryKeyName}(${queryKeyParamsCall})\n\n const query = useQuery({\n ...${queryOptionsName}(${queryOptionsParamsCall}),\n ...resolvedOptions,\n queryKey\n } as unknown as UseQueryOptions<${TData}, ${TError}, TData, ${TData}, TQueryKey>, toValue(queryClient)) as ${returnType}\n\n query.queryKey = queryKey as TQueryKey\n\n return query\n `}\n </Function>\n </File.Source>\n )\n}\n"],"mappings":"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"}
|