@kubb/plugin-react-query 5.0.0-beta.79 → 5.0.0-beta.81

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 CHANGED
@@ -28,7 +28,6 @@ let node_path = require("node:path");
28
28
  node_path = __toESM(node_path, 1);
29
29
  let _kubb_core = require("@kubb/core");
30
30
  let _kubb_plugin_ts = require("@kubb/plugin-ts");
31
- let _kubb_plugin_zod = require("@kubb/plugin-zod");
32
31
  let _kubb_renderer_jsx = require("@kubb/renderer-jsx");
33
32
  let _kubb_renderer_jsx_jsx_runtime = require("@kubb/renderer-jsx/jsx-runtime");
34
33
  let node_fs = require("node:fs");
@@ -557,16 +556,6 @@ function createGroupConfig(group) {
557
556
  };
558
557
  }
559
558
  //#endregion
560
- //#region ../../internals/client/src/builders/validatorOptions.ts
561
- /**
562
- * Returns `true` when any direction of the validator uses zod (used for dependency checks).
563
- */
564
- function isValidatorEnabled(validator) {
565
- if (!validator) return false;
566
- if (validator === "zod") return true;
567
- return Boolean(validator.request || validator.response);
568
- }
569
- //#endregion
570
559
  //#region ../../internals/client/src/resolveClient.ts
571
560
  /**
572
561
  * Resolves which client plugin a consumer (react-query, vue-query, swr, mcp) should call for an
@@ -692,12 +681,15 @@ function MutationKey({ name, node, transformer }) {
692
681
  * The grouped request options, ordered for both the destructured signature and the
693
682
  * call passed to the underlying client.
694
683
  */
695
- const requestGroupOrder = [
684
+ const requestGroupOrder$1 = [
696
685
  "path",
697
686
  "query",
698
687
  "body",
699
688
  "headers"
700
689
  ];
690
+ function maybeValueOrGetter(type) {
691
+ return `${type} | (() => ${type})`;
692
+ }
701
693
  /**
702
694
  * Builds the grouped `{ path, query, body, headers }` parameter that mirrors the client
703
695
  * function signature. Only the groups the operation carries are emitted, typed from the
@@ -710,7 +702,7 @@ const requestGroupOrder = [
710
702
  * `MaybeRefOrGetter` per group.
711
703
  */
712
704
  function buildGroupedRequestParam(node, options) {
713
- const { resolver, keys = requestGroupOrder, memberTypeWrapper } = options;
705
+ const { resolver, keys = requestGroupOrder$1, memberTypeWrapper } = options;
714
706
  const { groups, hasRequiredPath, hasRequiredQuery, hasRequiredHeader } = getRequestGroupOptionality(node);
715
707
  const names = keys.filter((key) => groups[key]);
716
708
  if (names.length === 0) return null;
@@ -722,7 +714,7 @@ function buildGroupedRequestParam(node, options) {
722
714
  };
723
715
  const isOptional = names.every((name) => !requiredByGroup[name]);
724
716
  const requestConfigName = resolver.resolveRequestConfigName(node);
725
- const omittedKeys = requestGroupOrder.filter((key) => !keys.includes(key));
717
+ const omittedKeys = requestGroupOrder$1.filter((key) => !keys.includes(key));
726
718
  const requestConfigType = omittedKeys.length > 0 ? `Omit<${requestConfigName}, ${omittedKeys.map((key) => `'${key}'`).join(" | ")}>` : requestConfigName;
727
719
  if (memberTypeWrapper) {
728
720
  const members = names.map((name) => ({
@@ -778,7 +770,7 @@ function buildClientCall(node, options) {
778
770
  const { groups } = getRequestGroupOptionality(node);
779
771
  return `${clientName}({ ${[
780
772
  "...config",
781
- ...requestGroupOrder.filter((key) => groups[key]),
773
+ ...requestGroupOrder$1.filter((key) => groups[key]),
782
774
  signal ? "signal: config.signal ?? signal" : null,
783
775
  "throwOnError: true"
784
776
  ].filter((part) => part !== null).join(", ")} })`;
@@ -806,51 +798,6 @@ function resolveOperationOverrides(node, override) {
806
798
  return override.find((ov) => matchesPattern(node, ov))?.options ?? {};
807
799
  }
808
800
  /**
809
- * Returns `'zod'` when response-direction parsing is enabled.
810
- * The string shorthand `'zod'` also enables response parsing.
811
- */
812
- function resolveResponseParser(parser) {
813
- if (!parser) return null;
814
- if (parser === "zod") return "zod";
815
- return parser.response ?? null;
816
- }
817
- /**
818
- * Returns `'zod'` when request body parsing is enabled.
819
- * The string shorthand `'zod'` also enables request body parsing (existing behavior).
820
- */
821
- function resolveRequestParser(parser) {
822
- if (!parser) return null;
823
- if (parser === "zod") return "zod";
824
- return parser.request ?? null;
825
- }
826
- /**
827
- * Returns `'zod'` when query-params parsing is enabled.
828
- * Only the object form `{ request: 'zod' }` enables this. `parser: 'zod'` does not.
829
- */
830
- function resolveQueryParamsParser(parser) {
831
- if (!parser || parser === "zod") return null;
832
- return parser.request ?? null;
833
- }
834
- /**
835
- * Collects the Zod schema import names for an operation based on the active parser directions.
836
- *
837
- * - `parser: 'zod'`: response and request body names (backward-compatible behavior).
838
- * - `parser: { request: 'zod' }`: request body and query params names.
839
- * - `parser: { response: 'zod' }`: response name only.
840
- * - `parser: { request: 'zod', response: 'zod' }`: all three.
841
- *
842
- * Returns an empty array when no resolver is provided or `parser` is falsy.
843
- */
844
- function resolveZodSchemaNames(node, zodResolver, parser) {
845
- if (!zodResolver || !parser) return [];
846
- const { query: queryParams } = getOperationParameters(node, { paramsCasing: "original" });
847
- return [
848
- resolveResponseParser(parser) === "zod" ? zodResolver.resolveResponseName?.(node) : null,
849
- resolveRequestParser(parser) === "zod" && node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : null,
850
- resolveQueryParamsParser(parser) === "zod" && queryParams.length > 0 ? zodResolver.resolveQueryParamsName?.(node, queryParams[0]) : null
851
- ].filter((n) => Boolean(n));
852
- }
853
- /**
854
801
  * Build QueryKey params as the grouped `{ path, query, body }` object (NO headers, NO config),
855
802
  * typed from the operation's `RequestConfig` minus `url`. The query key transformer reads the
856
803
  * grouped `path`/`query`/`body` bindings.
@@ -1005,6 +952,30 @@ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
1005
952
  }
1006
953
  });
1007
954
  //#endregion
955
+ //#region src/utils.ts
956
+ const requestGroupOrder = [
957
+ "path",
958
+ "query",
959
+ "body",
960
+ "headers"
961
+ ];
962
+ /**
963
+ * Builds the object literal that resolves each request group to a concrete value, unwrapping a getter
964
+ * once before the value reaches the plain `queryKey`/`queryOptions` helpers. A getter must never reach a
965
+ * React Query key, which is hashed structurally. Returns `null` when the operation carries no request group.
966
+ *
967
+ * @example
968
+ * ```ts
969
+ * buildResolvedRequestParams(node) // { path: typeof path === 'function' ? path() : path }
970
+ * ```
971
+ */
972
+ function buildResolvedRequestParams(node) {
973
+ const groups = getRequestGroups(node);
974
+ const names = requestGroupOrder.filter((key) => groups[key]);
975
+ if (names.length === 0) return null;
976
+ return `{ ${names.map((name) => `${name}: typeof ${name} === 'function' ? ${name}() : ${name}`).join(", ")} }`;
977
+ }
978
+ //#endregion
1008
979
  //#region src/generators/hookOptionsGenerator.tsx
1009
980
  /**
1010
981
  * Emits the `HookOptions` type used by `customOptions`. Enabled when
@@ -1017,8 +988,8 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
1017
988
  renderer: _kubb_renderer_jsx.jsxRenderer,
1018
989
  operations(nodes, ctx) {
1019
990
  const { resolver, config, root } = ctx;
1020
- const { output, customOptions, query, mutation, suspense, infinite, group, override } = ctx.options;
1021
- if (!customOptions) return null;
991
+ const { output, customOptions, query, mutation, suspense, infinite, group, override, hooks } = ctx.options;
992
+ if (!customOptions || !hooks) return null;
1022
993
  const name = resolver.resolveHookOptionsName();
1023
994
  const resolvedFile = resolver.resolveFile({
1024
995
  name,
@@ -1162,51 +1133,8 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
1162
1133
  }
1163
1134
  });
1164
1135
  //#endregion
1165
- //#region src/components/QueryOptions.tsx
1166
- const declarationPrinter$8 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1167
- const callPrinter$8 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1168
- function getQueryOptionsParams(node, options) {
1169
- return buildQueryOptionsParams(node, options);
1170
- }
1171
- function QueryOptions({ name, clientName, node, tsResolver, queryKeyName }) {
1172
- const successNames = resolveSuccessNames(node, tsResolver);
1173
- const responseName = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
1174
- const errorNames = resolveErrorNames(node, tsResolver);
1175
- const TData = responseName;
1176
- const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`;
1177
- const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
1178
- const queryKeyParamsCall = callPrinter$8.print(queryKeyParamsNode) ?? "";
1179
- const paramsNode = getQueryOptionsParams(node, { resolver: tsResolver });
1180
- const paramsSignature = declarationPrinter$8.print(paramsNode) ?? "";
1181
- const queryFnBody = `const { data } = await ${buildClientCall(node, {
1182
- clientName,
1183
- signal: true
1184
- })}
1185
- return data`;
1186
- return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
1187
- name,
1188
- isExportable: true,
1189
- isIndexable: true,
1190
- children: /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.Function, {
1191
- name,
1192
- export: true,
1193
- params: paramsSignature,
1194
- children: `
1195
- const queryKey = ${queryKeyName}(${queryKeyParamsCall})
1196
- return queryOptions<${TData}, ${TError}, ${TData}, typeof queryKey>({
1197
- queryKey,
1198
- queryFn: async ({ signal }) => {
1199
- ${queryFnBody}
1200
- },
1201
- })
1202
- `
1203
- })
1204
- });
1205
- }
1206
- //#endregion
1207
1136
  //#region src/components/InfiniteQuery.tsx
1208
- const declarationPrinter$7 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1209
- const callPrinter$7 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1137
+ const declarationPrinter$8 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1210
1138
  function buildInfiniteQueryParamsNode(node, options) {
1211
1139
  const { resolver, pageParamGeneric } = options;
1212
1140
  const optionsParam = (0, _kubb_plugin_ts.createFunctionParameter)({
@@ -1217,7 +1145,10 @@ function buildInfiniteQueryParamsNode(node, options) {
1217
1145
  }`,
1218
1146
  default: "{}"
1219
1147
  });
1220
- return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, { resolver }), optionsParam].filter((param) => param !== null) });
1148
+ return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, {
1149
+ resolver,
1150
+ memberTypeWrapper: maybeValueOrGetter
1151
+ }), optionsParam].filter((param) => param !== null) });
1221
1152
  }
1222
1153
  function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, initialPageParam, queryParam, customOptions }) {
1223
1154
  const successNames = resolveSuccessNames(node, tsResolver);
@@ -1245,15 +1176,14 @@ function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
1245
1176
  `TQueryKey extends QueryKey = ${queryKeyTypeName}`,
1246
1177
  `TPageParam = ${pageParamType}`
1247
1178
  ];
1248
- const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
1249
- const queryKeyParamsCall = callPrinter$7.print(queryKeyParamsNode) ?? "";
1250
- const queryOptionsParamsNode = getQueryOptionsParams(node, { resolver: tsResolver });
1251
- const queryOptionsParamsCall = callPrinter$7.print(queryOptionsParamsNode) ?? "";
1179
+ const resolvedParams = buildResolvedRequestParams(node);
1180
+ const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
1181
+ const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
1252
1182
  const paramsNode = buildInfiniteQueryParamsNode(node, {
1253
1183
  resolver: tsResolver,
1254
1184
  pageParamGeneric: "TPageParam"
1255
1185
  });
1256
- const paramsSignature = declarationPrinter$7.print(paramsNode) ?? "";
1186
+ const paramsSignature = declarationPrinter$8.print(paramsNode) ?? "";
1257
1187
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
1258
1188
  name,
1259
1189
  isExportable: true,
@@ -1267,11 +1197,11 @@ function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
1267
1197
  JSDoc: { comments: buildOperationComments(node) },
1268
1198
  children: `
1269
1199
  const { query: queryConfig = {}, client: config = {} } = options ?? {}
1270
- const { client: queryClient, ...resolvedOptions } = queryConfig
1271
- const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyParamsCall})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
1200
+ const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
1201
+ const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
1272
1202
 
1273
1203
  const queryResult = useInfiniteQuery({
1274
- ...${queryOptionsName}(${queryOptionsParamsCall}),${customOptions ? "\n ...customOptions," : ""}
1204
+ ...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
1275
1205
  ...resolvedOptions,
1276
1206
  queryKey,
1277
1207
  } as unknown as InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient) as ${returnType}
@@ -1284,9 +1214,51 @@ function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
1284
1214
  });
1285
1215
  }
1286
1216
  //#endregion
1217
+ //#region src/components/QueryOptions.tsx
1218
+ const declarationPrinter$7 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1219
+ const callPrinter$4 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1220
+ function getQueryOptionsParams(node, options) {
1221
+ return buildQueryOptionsParams(node, options);
1222
+ }
1223
+ function QueryOptions({ name, clientName, node, tsResolver, queryKeyName }) {
1224
+ const successNames = resolveSuccessNames(node, tsResolver);
1225
+ const responseName = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
1226
+ const errorNames = resolveErrorNames(node, tsResolver);
1227
+ const TData = responseName;
1228
+ const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`;
1229
+ const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
1230
+ const queryKeyParamsCall = callPrinter$4.print(queryKeyParamsNode) ?? "";
1231
+ const paramsNode = getQueryOptionsParams(node, { resolver: tsResolver });
1232
+ const paramsSignature = declarationPrinter$7.print(paramsNode) ?? "";
1233
+ const queryFnBody = `const { data } = await ${buildClientCall(node, {
1234
+ clientName,
1235
+ signal: true
1236
+ })}
1237
+ return data`;
1238
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
1239
+ name,
1240
+ isExportable: true,
1241
+ isIndexable: true,
1242
+ children: /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.Function, {
1243
+ name,
1244
+ export: true,
1245
+ params: paramsSignature,
1246
+ children: `
1247
+ const queryKey = ${queryKeyName}(${queryKeyParamsCall})
1248
+ return queryOptions<${TData}, ${TError}, ${TData}, typeof queryKey>({
1249
+ queryKey,
1250
+ queryFn: async ({ signal }) => {
1251
+ ${queryFnBody}
1252
+ },
1253
+ })
1254
+ `
1255
+ })
1256
+ });
1257
+ }
1258
+ //#endregion
1287
1259
  //#region src/components/InfiniteQueryOptions.tsx
1288
1260
  const declarationPrinter$6 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1289
- const callPrinter$6 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1261
+ const callPrinter$3 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1290
1262
  function InfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam, nextParam, previousParam, node, tsResolver, queryParam, queryKeyName }) {
1291
1263
  const successNames = resolveSuccessNames(node, tsResolver);
1292
1264
  const queryFnDataType = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
@@ -1305,7 +1277,7 @@ function InfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam,
1305
1277
  const queryParamType = queryParam && queryParamsTypeName ? `${queryParamsTypeName}['${queryParam}']` : null;
1306
1278
  const pageParamType = queryParamType ? isInitialPageParamDefined ? `NonNullable<${queryParamType}>` : queryParamType : fallbackPageParamType;
1307
1279
  const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
1308
- const queryKeyParamsCall = callPrinter$6.print(queryKeyParamsNode) ?? "";
1280
+ const queryKeyParamsCall = callPrinter$3.print(queryKeyParamsNode) ?? "";
1309
1281
  const paramsNode = getQueryOptionsParams(node, { resolver: tsResolver });
1310
1282
  const paramsSignature = declarationPrinter$6.print(paramsNode) ?? "";
1311
1283
  const queryFnBody = `const { data } = await ${buildClientCall(node, {
@@ -1377,7 +1349,7 @@ return infiniteQueryOptions<${queryFnDataType}, ${errorType}, InfiniteData<${que
1377
1349
  //#endregion
1378
1350
  //#region src/components/MutationOptions.tsx
1379
1351
  const declarationPrinter$5 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1380
- const callPrinter$5 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1352
+ const callPrinter$2 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1381
1353
  function buildMutationConfigParamsNode(node) {
1382
1354
  return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [(0, _kubb_plugin_ts.createFunctionParameter)({
1383
1355
  name: "config",
@@ -1396,7 +1368,7 @@ function MutationOptions({ name, clientName, node, tsResolver, mutationKeyName }
1396
1368
  const hasMutationParams = groupedParam !== null;
1397
1369
  const groupedParamsNode = (0, _kubb_plugin_ts.createFunctionParameters)({ params: groupedParam ? [groupedParam] : [] });
1398
1370
  const TRequest = hasMutationParams ? tsResolver.resolveRequestConfigName(node) : "undefined";
1399
- const argBindingStr = hasMutationParams ? callPrinter$5.print(groupedParamsNode) ?? "" : "_";
1371
+ const argBindingStr = hasMutationParams ? callPrinter$2.print(groupedParamsNode) ?? "" : "_";
1400
1372
  const mutationFnBody = `const { data } = await ${buildClientCall(node, {
1401
1373
  clientName,
1402
1374
  signal: false
@@ -1426,7 +1398,7 @@ function MutationOptions({ name, clientName, node, tsResolver, mutationKeyName }
1426
1398
  //#endregion
1427
1399
  //#region src/components/Mutation.tsx
1428
1400
  const declarationPrinter$4 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1429
- const callPrinter$4 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1401
+ const callPrinter$1 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1430
1402
  function resolveMutationRequestType(node, resolver) {
1431
1403
  return buildGroupedRequestParam(node, { resolver }) ? resolver.resolveRequestConfigName(node) : "undefined";
1432
1404
  }
@@ -1461,7 +1433,7 @@ function Mutation({ name, mutationOptionsName, node, tsResolver, mutationKeyName
1461
1433
  ].join(", ");
1462
1434
  const returnType = `UseMutationResult<${generics}>`;
1463
1435
  const mutationOptionsConfigNode = buildMutationConfigParamsNode(node);
1464
- const mutationOptionsParamsCall = callPrinter$4.print(mutationOptionsConfigNode) ?? "";
1436
+ const mutationOptionsParamsCall = callPrinter$1.print(mutationOptionsConfigNode) ?? "";
1465
1437
  const paramsNode = buildMutationParamsNode(node, { resolver: tsResolver });
1466
1438
  const paramsSignature = declarationPrinter$4.print(paramsNode) ?? "";
1467
1439
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
@@ -1493,7 +1465,6 @@ function Mutation({ name, mutationOptionsName, node, tsResolver, mutationKeyName
1493
1465
  //#endregion
1494
1466
  //#region src/components/Query.tsx
1495
1467
  const declarationPrinter$3 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1496
- const callPrinter$3 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1497
1468
  function buildQueryParamsNode(node, options) {
1498
1469
  const { resolver } = options;
1499
1470
  const successNames = resolveSuccessNames(node, resolver);
@@ -1513,7 +1484,10 @@ function buildQueryParamsNode(node, options) {
1513
1484
  }`,
1514
1485
  default: "{}"
1515
1486
  });
1516
- return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, { resolver }), optionsParam].filter((param) => param !== null) });
1487
+ return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, {
1488
+ resolver,
1489
+ memberTypeWrapper: maybeValueOrGetter
1490
+ }), optionsParam].filter((param) => param !== null) });
1517
1491
  }
1518
1492
  function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, customOptions }) {
1519
1493
  const successNames = resolveSuccessNames(node, tsResolver);
@@ -1526,10 +1500,9 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, t
1526
1500
  `TQueryData = ${TData}`,
1527
1501
  `TQueryKey extends QueryKey = ${queryKeyTypeName}`
1528
1502
  ];
1529
- const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
1530
- const queryKeyParamsCall = callPrinter$3.print(queryKeyParamsNode) ?? "";
1531
- const queryOptionsParamsNode = getQueryOptionsParams(node, { resolver: tsResolver });
1532
- const queryOptionsParamsCall = callPrinter$3.print(queryOptionsParamsNode) ?? "";
1503
+ const resolvedParams = buildResolvedRequestParams(node);
1504
+ const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
1505
+ const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
1533
1506
  const paramsNode = buildQueryParamsNode(node, { resolver: tsResolver });
1534
1507
  const paramsSignature = declarationPrinter$3.print(paramsNode) ?? "";
1535
1508
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
@@ -1545,11 +1518,11 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, t
1545
1518
  JSDoc: { comments: buildOperationComments(node) },
1546
1519
  children: `
1547
1520
  const { query: queryConfig = {}, client: config = {} } = options ?? {}
1548
- const { client: queryClient, ...resolvedOptions } = queryConfig
1549
- const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyParamsCall})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
1521
+ const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
1522
+ const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
1550
1523
 
1551
1524
  const queryResult = useQuery({
1552
- ...${queryOptionsName}(${queryOptionsParamsCall}),${customOptions ? "\n ...customOptions," : ""}
1525
+ ...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
1553
1526
  ...resolvedOptions,
1554
1527
  queryKey,
1555
1528
  } as unknown as QueryObserverOptions, queryClient) as ${returnType}
@@ -1564,7 +1537,6 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, t
1564
1537
  //#endregion
1565
1538
  //#region src/components/SuspenseInfiniteQuery.tsx
1566
1539
  const declarationPrinter$2 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1567
- const callPrinter$2 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1568
1540
  function buildSuspenseInfiniteQueryParamsNode(node, options) {
1569
1541
  const { resolver, pageParamGeneric } = options;
1570
1542
  const optionsParam = (0, _kubb_plugin_ts.createFunctionParameter)({
@@ -1575,7 +1547,10 @@ function buildSuspenseInfiniteQueryParamsNode(node, options) {
1575
1547
  }`,
1576
1548
  default: "{}"
1577
1549
  });
1578
- return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, { resolver }), optionsParam].filter((param) => param !== null) });
1550
+ return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, {
1551
+ resolver,
1552
+ memberTypeWrapper: maybeValueOrGetter
1553
+ }), optionsParam].filter((param) => param !== null) });
1579
1554
  }
1580
1555
  function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, customOptions, initialPageParam, queryParam }) {
1581
1556
  const successNames = resolveSuccessNames(node, tsResolver);
@@ -1603,10 +1578,9 @@ function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, query
1603
1578
  `TQueryKey extends QueryKey = ${queryKeyTypeName}`,
1604
1579
  `TPageParam = ${pageParamType}`
1605
1580
  ];
1606
- const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
1607
- const queryKeyParamsCall = callPrinter$2.print(queryKeyParamsNode) ?? "";
1608
- const queryOptionsParamsNode = getQueryOptionsParams(node, { resolver: tsResolver });
1609
- const queryOptionsParamsCall = callPrinter$2.print(queryOptionsParamsNode) ?? "";
1581
+ const resolvedParams = buildResolvedRequestParams(node);
1582
+ const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
1583
+ const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
1610
1584
  const paramsNode = buildSuspenseInfiniteQueryParamsNode(node, {
1611
1585
  resolver: tsResolver,
1612
1586
  pageParamGeneric: "TPageParam"
@@ -1625,11 +1599,11 @@ function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, query
1625
1599
  JSDoc: { comments: buildOperationComments(node) },
1626
1600
  children: `
1627
1601
  const { query: queryConfig = {}, client: config = {} } = options ?? {}
1628
- const { client: queryClient, ...resolvedOptions } = queryConfig
1629
- const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyParamsCall})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
1602
+ const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
1603
+ const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
1630
1604
 
1631
1605
  const queryResult = useSuspenseInfiniteQuery({
1632
- ...${queryOptionsName}(${queryOptionsParamsCall}),${customOptions ? "\n ...customOptions," : ""}
1606
+ ...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
1633
1607
  ...resolvedOptions,
1634
1608
  queryKey,
1635
1609
  } as unknown as UseSuspenseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient) as ${returnType}
@@ -1644,7 +1618,7 @@ function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, query
1644
1618
  //#endregion
1645
1619
  //#region src/components/SuspenseInfiniteQueryOptions.tsx
1646
1620
  const declarationPrinter$1 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1647
- const callPrinter$1 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1621
+ const callPrinter = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1648
1622
  function SuspenseInfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam, nextParam, previousParam, node, tsResolver, queryParam, queryKeyName }) {
1649
1623
  const successNames = resolveSuccessNames(node, tsResolver);
1650
1624
  const queryFnDataType = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
@@ -1670,7 +1644,7 @@ function SuspenseInfiniteQueryOptions({ name, clientName, initialPageParam, curs
1670
1644
  })}
1671
1645
  return data`;
1672
1646
  const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
1673
- const queryKeyParamsCall = callPrinter$1.print(queryKeyParamsNode) ?? "";
1647
+ const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? "";
1674
1648
  const hasNewParams = nextParam != null || previousParam != null;
1675
1649
  const [getNextPageParamExpr, getPreviousPageParamExpr] = (() => {
1676
1650
  if (hasNewParams) {
@@ -1735,7 +1709,6 @@ return infiniteQueryOptions<${queryFnDataType}, ${errorType}, InfiniteData<${que
1735
1709
  //#endregion
1736
1710
  //#region src/components/SuspenseQuery.tsx
1737
1711
  const declarationPrinter = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1738
- const callPrinter = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1739
1712
  function buildSuspenseQueryParamsNode(node, options) {
1740
1713
  const { resolver } = options;
1741
1714
  const successNames = resolveSuccessNames(node, resolver);
@@ -1754,7 +1727,10 @@ function buildSuspenseQueryParamsNode(node, options) {
1754
1727
  }`,
1755
1728
  default: "{}"
1756
1729
  });
1757
- return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, { resolver }), optionsParam].filter((param) => param !== null) });
1730
+ return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, {
1731
+ resolver,
1732
+ memberTypeWrapper: maybeValueOrGetter
1733
+ }), optionsParam].filter((param) => param !== null) });
1758
1734
  }
1759
1735
  function SuspenseQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, customOptions }) {
1760
1736
  const successNames = resolveSuccessNames(node, tsResolver);
@@ -1763,10 +1739,9 @@ function SuspenseQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
1763
1739
  const TData = responseName;
1764
1740
  const returnType = `UseSuspenseQueryResult<TData, ${`ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`}> & { queryKey: TQueryKey }`;
1765
1741
  const generics = [`TData = ${TData}`, `TQueryKey extends QueryKey = ${queryKeyTypeName}`];
1766
- const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
1767
- const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? "";
1768
- const queryOptionsParamsNode = getQueryOptionsParams(node, { resolver: tsResolver });
1769
- const queryOptionsParamsCall = callPrinter.print(queryOptionsParamsNode) ?? "";
1742
+ const resolvedParams = buildResolvedRequestParams(node);
1743
+ const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
1744
+ const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
1770
1745
  const paramsNode = buildSuspenseQueryParamsNode(node, { resolver: tsResolver });
1771
1746
  const paramsSignature = declarationPrinter.print(paramsNode) ?? "";
1772
1747
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
@@ -1782,11 +1757,11 @@ function SuspenseQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
1782
1757
  JSDoc: { comments: buildOperationComments(node) },
1783
1758
  children: `
1784
1759
  const { query: queryConfig = {}, client: config = {} } = options ?? {}
1785
- const { client: queryClient, ...resolvedOptions } = queryConfig
1786
- const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyParamsCall})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
1760
+ const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
1761
+ const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
1787
1762
 
1788
1763
  const queryResult = useSuspenseQuery({
1789
- ...${queryOptionsName}(${queryOptionsParamsCall}),${customOptions ? "\n ...customOptions," : ""}
1764
+ ...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
1790
1765
  ...resolvedOptions,
1791
1766
  queryKey,
1792
1767
  } as unknown as UseSuspenseQueryOptions, queryClient) as ${returnType}
@@ -1812,7 +1787,7 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
1812
1787
  operation(node, ctx) {
1813
1788
  if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
1814
1789
  const { config, driver, resolver, root } = ctx;
1815
- const { output, query, mutation, infinite, validator, client, group, customOptions } = ctx.options;
1790
+ const { output, query, mutation, infinite, client, group, customOptions, hooks } = ctx.options;
1816
1791
  const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
1817
1792
  if (!pluginTs) return null;
1818
1793
  const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
@@ -1862,14 +1837,6 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
1862
1837
  includeParams: false
1863
1838
  })
1864
1839
  ].filter((name) => Boolean(name));
1865
- const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
1866
- const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
1867
- const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
1868
- root,
1869
- output: pluginZod?.options?.output ?? output,
1870
- group: pluginZod?.options?.group ?? void 0
1871
- }) : null;
1872
- const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
1873
1840
  const calledClientName = contractOp.name;
1874
1841
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
1875
1842
  baseName: meta.file.baseName,
@@ -1892,11 +1859,6 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
1892
1859
  }
1893
1860
  }),
1894
1861
  children: [
1895
- fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1896
- name: zodSchemaNames,
1897
- root: meta.file.path,
1898
- path: fileZod.path
1899
- }),
1900
1862
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1901
1863
  name: [contractOp.name],
1902
1864
  root: meta.file.path,
@@ -1946,31 +1908,33 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
1946
1908
  initialPageParam: infiniteOptions.initialPageParam,
1947
1909
  queryParam: infiniteOptions.queryParam
1948
1910
  }),
1949
- /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1950
- name: ["useInfiniteQuery"],
1951
- path: importPath
1952
- }),
1953
- /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1954
- name: [
1955
- "QueryKey",
1956
- "QueryClient",
1957
- "InfiniteQueryObserverOptions",
1958
- "UseInfiniteQueryResult"
1959
- ],
1960
- path: importPath,
1961
- isTypeOnly: true
1962
- }),
1963
- /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(InfiniteQuery, {
1964
- name: queryName,
1965
- queryOptionsName,
1966
- queryKeyName,
1967
- queryKeyTypeName,
1968
- node,
1969
- tsResolver,
1970
- initialPageParam: infiniteOptions.initialPageParam,
1971
- queryParam: infiniteOptions.queryParam,
1972
- customOptions
1973
- })
1911
+ hooks && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
1912
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1913
+ name: ["useInfiniteQuery"],
1914
+ path: importPath
1915
+ }),
1916
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1917
+ name: [
1918
+ "QueryKey",
1919
+ "QueryClient",
1920
+ "InfiniteQueryObserverOptions",
1921
+ "UseInfiniteQueryResult"
1922
+ ],
1923
+ path: importPath,
1924
+ isTypeOnly: true
1925
+ }),
1926
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(InfiniteQuery, {
1927
+ name: queryName,
1928
+ queryOptionsName,
1929
+ queryKeyName,
1930
+ queryKeyTypeName,
1931
+ node,
1932
+ tsResolver,
1933
+ initialPageParam: infiniteOptions.initialPageParam,
1934
+ queryParam: infiniteOptions.queryParam,
1935
+ customOptions
1936
+ })
1937
+ ] })
1974
1938
  ]
1975
1939
  });
1976
1940
  }
@@ -1988,7 +1952,7 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
1988
1952
  operation(node, ctx) {
1989
1953
  if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
1990
1954
  const { config, driver, resolver, root } = ctx;
1991
- const { output, query, mutation, validator, client, group, customOptions } = ctx.options;
1955
+ const { output, query, mutation, client, group, customOptions, hooks } = ctx.options;
1992
1956
  const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
1993
1957
  if (!pluginTs) return null;
1994
1958
  const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
@@ -2024,14 +1988,6 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
2024
1988
  order: "body-response-first",
2025
1989
  includeParams: false
2026
1990
  })].filter((name) => Boolean(name));
2027
- const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
2028
- const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
2029
- const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
2030
- root,
2031
- output: pluginZod?.options?.output ?? output,
2032
- group: pluginZod?.options?.group ?? void 0
2033
- }) : null;
2034
- const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
2035
1991
  const calledClientName = contractOp.name;
2036
1992
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
2037
1993
  baseName: meta.file.baseName,
@@ -2054,11 +2010,6 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
2054
2010
  }
2055
2011
  }),
2056
2012
  children: [
2057
- fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2058
- name: zodSchemaNames,
2059
- root: meta.file.path,
2060
- path: fileZod.path
2061
- }),
2062
2013
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2063
2014
  name: [contractOp.name],
2064
2015
  root: meta.file.path,
@@ -2096,7 +2047,7 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
2096
2047
  node,
2097
2048
  tsResolver
2098
2049
  }),
2099
- mutation && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2050
+ mutation && hooks && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2100
2051
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2101
2052
  name: ["useMutation"],
2102
2053
  path: importPath
@@ -2137,7 +2088,7 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
2137
2088
  operation(node, ctx) {
2138
2089
  if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
2139
2090
  const { config, driver, resolver, root } = ctx;
2140
- const { output, query, mutation, validator, client, group, customOptions } = ctx.options;
2091
+ const { output, query, mutation, client, group, customOptions, hooks } = ctx.options;
2141
2092
  const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
2142
2093
  if (!pluginTs) return null;
2143
2094
  const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
@@ -2175,14 +2126,6 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
2175
2126
  order: "body-response-first",
2176
2127
  includeParams: false
2177
2128
  })].filter((name) => Boolean(name));
2178
- const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
2179
- const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
2180
- const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
2181
- root,
2182
- output: pluginZod?.options?.output ?? output,
2183
- group: pluginZod?.options?.group ?? void 0
2184
- }) : null;
2185
- const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
2186
2129
  const calledClientName = contractOp.name;
2187
2130
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
2188
2131
  baseName: meta.file.baseName,
@@ -2205,11 +2148,6 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
2205
2148
  }
2206
2149
  }),
2207
2150
  children: [
2208
- fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2209
- name: zodSchemaNames,
2210
- root: meta.file.path,
2211
- path: fileZod.path
2212
- }),
2213
2151
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2214
2152
  name: [contractOp.name],
2215
2153
  root: meta.file.path,
@@ -2249,7 +2187,7 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
2249
2187
  node,
2250
2188
  tsResolver
2251
2189
  }),
2252
- query && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2190
+ query && hooks && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2253
2191
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2254
2192
  name: ["useQuery"],
2255
2193
  path: importPath
@@ -2283,7 +2221,7 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
2283
2221
  /**
2284
2222
  * Built-in generator for `useSuspenseInfiniteQuery` hooks. Enabled when both
2285
2223
  * `suspense` and `infinite` are configured. Combines suspense semantics with
2286
- * cursor-based pagination — handlers throw promises while loading and pull
2224
+ * cursor-based pagination. Handlers throw promises while loading and pull
2287
2225
  * additional pages on demand.
2288
2226
  */
2289
2227
  const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
@@ -2292,7 +2230,7 @@ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
2292
2230
  operation(node, ctx) {
2293
2231
  if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
2294
2232
  const { config, driver, resolver, root } = ctx;
2295
- const { output, query, mutation, infinite, suspense, validator, client, group, customOptions } = ctx.options;
2233
+ const { output, query, mutation, infinite, suspense, client, group, customOptions, hooks } = ctx.options;
2296
2234
  const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
2297
2235
  if (!pluginTs) return null;
2298
2236
  const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
@@ -2342,14 +2280,6 @@ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
2342
2280
  includeParams: false
2343
2281
  })
2344
2282
  ].filter((name) => Boolean(name));
2345
- const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
2346
- const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
2347
- const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
2348
- root,
2349
- output: pluginZod?.options?.output ?? output,
2350
- group: pluginZod?.options?.group ?? void 0
2351
- }) : null;
2352
- const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
2353
2283
  const calledClientName = contractOp.name;
2354
2284
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
2355
2285
  baseName: meta.file.baseName,
@@ -2372,11 +2302,6 @@ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
2372
2302
  }
2373
2303
  }),
2374
2304
  children: [
2375
- fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2376
- name: zodSchemaNames,
2377
- root: meta.file.path,
2378
- path: fileZod.path
2379
- }),
2380
2305
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2381
2306
  name: [contractOp.name],
2382
2307
  root: meta.file.path,
@@ -2426,31 +2351,33 @@ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
2426
2351
  initialPageParam: infiniteOptions.initialPageParam,
2427
2352
  queryParam: infiniteOptions.queryParam
2428
2353
  }),
2429
- /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2430
- name: ["useSuspenseInfiniteQuery"],
2431
- path: importPath
2432
- }),
2433
- /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2434
- name: [
2435
- "QueryKey",
2436
- "QueryClient",
2437
- "UseSuspenseInfiniteQueryOptions",
2438
- "UseSuspenseInfiniteQueryResult"
2439
- ],
2440
- path: importPath,
2441
- isTypeOnly: true
2442
- }),
2443
- /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(SuspenseInfiniteQuery, {
2444
- name: queryName,
2445
- queryOptionsName,
2446
- queryKeyName,
2447
- queryKeyTypeName,
2448
- node,
2449
- tsResolver,
2450
- initialPageParam: infiniteOptions.initialPageParam,
2451
- queryParam: infiniteOptions.queryParam,
2452
- customOptions
2453
- })
2354
+ hooks && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2355
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2356
+ name: ["useSuspenseInfiniteQuery"],
2357
+ path: importPath
2358
+ }),
2359
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2360
+ name: [
2361
+ "QueryKey",
2362
+ "QueryClient",
2363
+ "UseSuspenseInfiniteQueryOptions",
2364
+ "UseSuspenseInfiniteQueryResult"
2365
+ ],
2366
+ path: importPath,
2367
+ isTypeOnly: true
2368
+ }),
2369
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(SuspenseInfiniteQuery, {
2370
+ name: queryName,
2371
+ queryOptionsName,
2372
+ queryKeyName,
2373
+ queryKeyTypeName,
2374
+ node,
2375
+ tsResolver,
2376
+ initialPageParam: infiniteOptions.initialPageParam,
2377
+ queryParam: infiniteOptions.queryParam,
2378
+ customOptions
2379
+ })
2380
+ ] })
2454
2381
  ]
2455
2382
  });
2456
2383
  }
@@ -2469,7 +2396,7 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
2469
2396
  operation(node, ctx) {
2470
2397
  if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
2471
2398
  const { config, driver, resolver, root } = ctx;
2472
- const { output, query, mutation, suspense, validator, client, group, customOptions } = ctx.options;
2399
+ const { output, query, mutation, suspense, client, group, customOptions, hooks } = ctx.options;
2473
2400
  const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
2474
2401
  if (!pluginTs) return null;
2475
2402
  const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
@@ -2507,14 +2434,6 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
2507
2434
  order: "body-response-first",
2508
2435
  includeParams: false
2509
2436
  })].filter((name) => Boolean(name));
2510
- const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
2511
- const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
2512
- const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
2513
- root,
2514
- output: pluginZod?.options?.output ?? output,
2515
- group: pluginZod?.options?.group ?? void 0
2516
- }) : null;
2517
- const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
2518
2437
  const calledClientName = contractOp.name;
2519
2438
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
2520
2439
  baseName: meta.file.baseName,
@@ -2537,11 +2456,6 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
2537
2456
  }
2538
2457
  }),
2539
2458
  children: [
2540
- fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2541
- name: zodSchemaNames,
2542
- root: meta.file.path,
2543
- path: fileZod.path
2544
- }),
2545
2459
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2546
2460
  name: [contractOp.name],
2547
2461
  root: meta.file.path,
@@ -2581,7 +2495,7 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
2581
2495
  node,
2582
2496
  tsResolver
2583
2497
  }),
2584
- suspense && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2498
+ suspense && hooks && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2585
2499
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2586
2500
  name: ["useSuspenseQuery"],
2587
2501
  path: importPath
@@ -2734,8 +2648,8 @@ const resolverReactQuery = (0, _kubb_core.defineResolver)(() => ({
2734
2648
  const pluginReactQueryName = "plugin-react-query";
2735
2649
  /**
2736
2650
  * Generates one TanStack Query hook per OpenAPI operation for React. Queries
2737
- * become `useFooQuery`/`useFooSuspenseQuery`/`useFooInfiniteQuery`; mutations
2738
- * become `useFooMutation`. Each hook is fully typed: query keys, input
2651
+ * become `useFoo`, with `useFooSuspense` and `useFooInfinite` variants.
2652
+ * Mutations become `useFoo`. Each hook is fully typed: query keys, input
2739
2653
  * variables, response data, and error shape all come from the spec.
2740
2654
  *
2741
2655
  * @example
@@ -2761,7 +2675,7 @@ const pluginReactQuery = (0, _kubb_core.definePlugin)((options) => {
2761
2675
  const { output = {
2762
2676
  path: "hooks",
2763
2677
  barrel: { type: "named" }
2764
- }, group, exclude = [], include, override = [], validator = false, suspense = {}, infinite = false, mutation = {}, query = {}, mutationKey = mutationKeyTransformer, queryKey = queryKeyTransformer, customOptions, client, resolver: userResolver, macros: userMacros } = options;
2678
+ }, group, exclude = [], include, override = [], suspense = {}, infinite = false, mutation = {}, query = {}, mutationKey = mutationKeyTransformer, queryKey = queryKeyTransformer, customOptions, hooks = false, client, resolver: userResolver, macros: userMacros } = options;
2765
2679
  const selectedGenerators = [
2766
2680
  queryGenerator,
2767
2681
  suspenseQueryGenerator,
@@ -2775,7 +2689,7 @@ const pluginReactQuery = (0, _kubb_core.definePlugin)((options) => {
2775
2689
  return {
2776
2690
  name: pluginReactQueryName,
2777
2691
  options,
2778
- dependencies: [_kubb_plugin_ts.pluginTsName, isValidatorEnabled(validator) ? _kubb_plugin_zod.pluginZodName : void 0].filter((dependency) => Boolean(dependency)),
2692
+ dependencies: [_kubb_plugin_ts.pluginTsName],
2779
2693
  hooks: { "kubb:plugin:setup"(ctx) {
2780
2694
  const resolver = userResolver ? {
2781
2695
  ...resolverReactQuery,
@@ -2823,7 +2737,7 @@ const pluginReactQuery = (0, _kubb_core.definePlugin)((options) => {
2823
2737
  name: "useCustomHookOptions",
2824
2738
  ...customOptions
2825
2739
  } : null,
2826
- validator,
2740
+ hooks,
2827
2741
  group: groupConfig,
2828
2742
  exclude,
2829
2743
  include,