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

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
@@ -692,12 +692,15 @@ function MutationKey({ name, node, transformer }) {
692
692
  * The grouped request options, ordered for both the destructured signature and the
693
693
  * call passed to the underlying client.
694
694
  */
695
- const requestGroupOrder = [
695
+ const requestGroupOrder$1 = [
696
696
  "path",
697
697
  "query",
698
698
  "body",
699
699
  "headers"
700
700
  ];
701
+ function maybeValueOrGetter(type) {
702
+ return `${type} | (() => ${type})`;
703
+ }
701
704
  /**
702
705
  * Builds the grouped `{ path, query, body, headers }` parameter that mirrors the client
703
706
  * function signature. Only the groups the operation carries are emitted, typed from the
@@ -710,7 +713,7 @@ const requestGroupOrder = [
710
713
  * `MaybeRefOrGetter` per group.
711
714
  */
712
715
  function buildGroupedRequestParam(node, options) {
713
- const { resolver, keys = requestGroupOrder, memberTypeWrapper } = options;
716
+ const { resolver, keys = requestGroupOrder$1, memberTypeWrapper } = options;
714
717
  const { groups, hasRequiredPath, hasRequiredQuery, hasRequiredHeader } = getRequestGroupOptionality(node);
715
718
  const names = keys.filter((key) => groups[key]);
716
719
  if (names.length === 0) return null;
@@ -722,7 +725,7 @@ function buildGroupedRequestParam(node, options) {
722
725
  };
723
726
  const isOptional = names.every((name) => !requiredByGroup[name]);
724
727
  const requestConfigName = resolver.resolveRequestConfigName(node);
725
- const omittedKeys = requestGroupOrder.filter((key) => !keys.includes(key));
728
+ const omittedKeys = requestGroupOrder$1.filter((key) => !keys.includes(key));
726
729
  const requestConfigType = omittedKeys.length > 0 ? `Omit<${requestConfigName}, ${omittedKeys.map((key) => `'${key}'`).join(" | ")}>` : requestConfigName;
727
730
  if (memberTypeWrapper) {
728
731
  const members = names.map((name) => ({
@@ -778,7 +781,7 @@ function buildClientCall(node, options) {
778
781
  const { groups } = getRequestGroupOptionality(node);
779
782
  return `${clientName}({ ${[
780
783
  "...config",
781
- ...requestGroupOrder.filter((key) => groups[key]),
784
+ ...requestGroupOrder$1.filter((key) => groups[key]),
782
785
  signal ? "signal: config.signal ?? signal" : null,
783
786
  "throwOnError: true"
784
787
  ].filter((part) => part !== null).join(", ")} })`;
@@ -1005,6 +1008,30 @@ const customHookOptionsFileGenerator = (0, _kubb_core.defineGenerator)({
1005
1008
  }
1006
1009
  });
1007
1010
  //#endregion
1011
+ //#region src/utils.ts
1012
+ const requestGroupOrder = [
1013
+ "path",
1014
+ "query",
1015
+ "body",
1016
+ "headers"
1017
+ ];
1018
+ /**
1019
+ * Builds the object literal that resolves each request group to a concrete value, unwrapping a getter
1020
+ * once before the value reaches the plain `queryKey`/`queryOptions` helpers. A getter must never reach a
1021
+ * React Query key, which is hashed structurally. Returns `null` when the operation carries no request group.
1022
+ *
1023
+ * @example
1024
+ * ```ts
1025
+ * buildResolvedRequestParams(node) // { path: typeof path === 'function' ? path() : path }
1026
+ * ```
1027
+ */
1028
+ function buildResolvedRequestParams(node) {
1029
+ const groups = getRequestGroups(node);
1030
+ const names = requestGroupOrder.filter((key) => groups[key]);
1031
+ if (names.length === 0) return null;
1032
+ return `{ ${names.map((name) => `${name}: typeof ${name} === 'function' ? ${name}() : ${name}`).join(", ")} }`;
1033
+ }
1034
+ //#endregion
1008
1035
  //#region src/generators/hookOptionsGenerator.tsx
1009
1036
  /**
1010
1037
  * Emits the `HookOptions` type used by `customOptions`. Enabled when
@@ -1017,8 +1044,8 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
1017
1044
  renderer: _kubb_renderer_jsx.jsxRenderer,
1018
1045
  operations(nodes, ctx) {
1019
1046
  const { resolver, config, root } = ctx;
1020
- const { output, customOptions, query, mutation, suspense, infinite, group, override } = ctx.options;
1021
- if (!customOptions) return null;
1047
+ const { output, customOptions, query, mutation, suspense, infinite, group, override, hooks } = ctx.options;
1048
+ if (!customOptions || !hooks) return null;
1022
1049
  const name = resolver.resolveHookOptionsName();
1023
1050
  const resolvedFile = resolver.resolveFile({
1024
1051
  name,
@@ -1162,51 +1189,8 @@ const hookOptionsGenerator = (0, _kubb_core.defineGenerator)({
1162
1189
  }
1163
1190
  });
1164
1191
  //#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
1192
  //#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" });
1193
+ const declarationPrinter$8 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1210
1194
  function buildInfiniteQueryParamsNode(node, options) {
1211
1195
  const { resolver, pageParamGeneric } = options;
1212
1196
  const optionsParam = (0, _kubb_plugin_ts.createFunctionParameter)({
@@ -1217,7 +1201,10 @@ function buildInfiniteQueryParamsNode(node, options) {
1217
1201
  }`,
1218
1202
  default: "{}"
1219
1203
  });
1220
- return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, { resolver }), optionsParam].filter((param) => param !== null) });
1204
+ return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, {
1205
+ resolver,
1206
+ memberTypeWrapper: maybeValueOrGetter
1207
+ }), optionsParam].filter((param) => param !== null) });
1221
1208
  }
1222
1209
  function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, initialPageParam, queryParam, customOptions }) {
1223
1210
  const successNames = resolveSuccessNames(node, tsResolver);
@@ -1245,15 +1232,14 @@ function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
1245
1232
  `TQueryKey extends QueryKey = ${queryKeyTypeName}`,
1246
1233
  `TPageParam = ${pageParamType}`
1247
1234
  ];
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) ?? "";
1235
+ const resolvedParams = buildResolvedRequestParams(node);
1236
+ const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
1237
+ const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
1252
1238
  const paramsNode = buildInfiniteQueryParamsNode(node, {
1253
1239
  resolver: tsResolver,
1254
1240
  pageParamGeneric: "TPageParam"
1255
1241
  });
1256
- const paramsSignature = declarationPrinter$7.print(paramsNode) ?? "";
1242
+ const paramsSignature = declarationPrinter$8.print(paramsNode) ?? "";
1257
1243
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
1258
1244
  name,
1259
1245
  isExportable: true,
@@ -1267,11 +1253,11 @@ function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
1267
1253
  JSDoc: { comments: buildOperationComments(node) },
1268
1254
  children: `
1269
1255
  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}' })` : ""}
1256
+ const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
1257
+ const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
1272
1258
 
1273
1259
  const queryResult = useInfiniteQuery({
1274
- ...${queryOptionsName}(${queryOptionsParamsCall}),${customOptions ? "\n ...customOptions," : ""}
1260
+ ...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
1275
1261
  ...resolvedOptions,
1276
1262
  queryKey,
1277
1263
  } as unknown as InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient) as ${returnType}
@@ -1284,9 +1270,51 @@ function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
1284
1270
  });
1285
1271
  }
1286
1272
  //#endregion
1273
+ //#region src/components/QueryOptions.tsx
1274
+ const declarationPrinter$7 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1275
+ const callPrinter$4 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1276
+ function getQueryOptionsParams(node, options) {
1277
+ return buildQueryOptionsParams(node, options);
1278
+ }
1279
+ function QueryOptions({ name, clientName, node, tsResolver, queryKeyName }) {
1280
+ const successNames = resolveSuccessNames(node, tsResolver);
1281
+ const responseName = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
1282
+ const errorNames = resolveErrorNames(node, tsResolver);
1283
+ const TData = responseName;
1284
+ const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`;
1285
+ const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
1286
+ const queryKeyParamsCall = callPrinter$4.print(queryKeyParamsNode) ?? "";
1287
+ const paramsNode = getQueryOptionsParams(node, { resolver: tsResolver });
1288
+ const paramsSignature = declarationPrinter$7.print(paramsNode) ?? "";
1289
+ const queryFnBody = `const { data } = await ${buildClientCall(node, {
1290
+ clientName,
1291
+ signal: true
1292
+ })}
1293
+ return data`;
1294
+ return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
1295
+ name,
1296
+ isExportable: true,
1297
+ isIndexable: true,
1298
+ children: /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.Function, {
1299
+ name,
1300
+ export: true,
1301
+ params: paramsSignature,
1302
+ children: `
1303
+ const queryKey = ${queryKeyName}(${queryKeyParamsCall})
1304
+ return queryOptions<${TData}, ${TError}, ${TData}, typeof queryKey>({
1305
+ queryKey,
1306
+ queryFn: async ({ signal }) => {
1307
+ ${queryFnBody}
1308
+ },
1309
+ })
1310
+ `
1311
+ })
1312
+ });
1313
+ }
1314
+ //#endregion
1287
1315
  //#region src/components/InfiniteQueryOptions.tsx
1288
1316
  const declarationPrinter$6 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1289
- const callPrinter$6 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1317
+ const callPrinter$3 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1290
1318
  function InfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam, nextParam, previousParam, node, tsResolver, queryParam, queryKeyName }) {
1291
1319
  const successNames = resolveSuccessNames(node, tsResolver);
1292
1320
  const queryFnDataType = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
@@ -1305,7 +1333,7 @@ function InfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam,
1305
1333
  const queryParamType = queryParam && queryParamsTypeName ? `${queryParamsTypeName}['${queryParam}']` : null;
1306
1334
  const pageParamType = queryParamType ? isInitialPageParamDefined ? `NonNullable<${queryParamType}>` : queryParamType : fallbackPageParamType;
1307
1335
  const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
1308
- const queryKeyParamsCall = callPrinter$6.print(queryKeyParamsNode) ?? "";
1336
+ const queryKeyParamsCall = callPrinter$3.print(queryKeyParamsNode) ?? "";
1309
1337
  const paramsNode = getQueryOptionsParams(node, { resolver: tsResolver });
1310
1338
  const paramsSignature = declarationPrinter$6.print(paramsNode) ?? "";
1311
1339
  const queryFnBody = `const { data } = await ${buildClientCall(node, {
@@ -1377,7 +1405,7 @@ return infiniteQueryOptions<${queryFnDataType}, ${errorType}, InfiniteData<${que
1377
1405
  //#endregion
1378
1406
  //#region src/components/MutationOptions.tsx
1379
1407
  const declarationPrinter$5 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1380
- const callPrinter$5 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1408
+ const callPrinter$2 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1381
1409
  function buildMutationConfigParamsNode(node) {
1382
1410
  return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [(0, _kubb_plugin_ts.createFunctionParameter)({
1383
1411
  name: "config",
@@ -1396,7 +1424,7 @@ function MutationOptions({ name, clientName, node, tsResolver, mutationKeyName }
1396
1424
  const hasMutationParams = groupedParam !== null;
1397
1425
  const groupedParamsNode = (0, _kubb_plugin_ts.createFunctionParameters)({ params: groupedParam ? [groupedParam] : [] });
1398
1426
  const TRequest = hasMutationParams ? tsResolver.resolveRequestConfigName(node) : "undefined";
1399
- const argBindingStr = hasMutationParams ? callPrinter$5.print(groupedParamsNode) ?? "" : "_";
1427
+ const argBindingStr = hasMutationParams ? callPrinter$2.print(groupedParamsNode) ?? "" : "_";
1400
1428
  const mutationFnBody = `const { data } = await ${buildClientCall(node, {
1401
1429
  clientName,
1402
1430
  signal: false
@@ -1426,7 +1454,7 @@ function MutationOptions({ name, clientName, node, tsResolver, mutationKeyName }
1426
1454
  //#endregion
1427
1455
  //#region src/components/Mutation.tsx
1428
1456
  const declarationPrinter$4 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1429
- const callPrinter$4 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1457
+ const callPrinter$1 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1430
1458
  function resolveMutationRequestType(node, resolver) {
1431
1459
  return buildGroupedRequestParam(node, { resolver }) ? resolver.resolveRequestConfigName(node) : "undefined";
1432
1460
  }
@@ -1461,7 +1489,7 @@ function Mutation({ name, mutationOptionsName, node, tsResolver, mutationKeyName
1461
1489
  ].join(", ");
1462
1490
  const returnType = `UseMutationResult<${generics}>`;
1463
1491
  const mutationOptionsConfigNode = buildMutationConfigParamsNode(node);
1464
- const mutationOptionsParamsCall = callPrinter$4.print(mutationOptionsConfigNode) ?? "";
1492
+ const mutationOptionsParamsCall = callPrinter$1.print(mutationOptionsConfigNode) ?? "";
1465
1493
  const paramsNode = buildMutationParamsNode(node, { resolver: tsResolver });
1466
1494
  const paramsSignature = declarationPrinter$4.print(paramsNode) ?? "";
1467
1495
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
@@ -1493,7 +1521,6 @@ function Mutation({ name, mutationOptionsName, node, tsResolver, mutationKeyName
1493
1521
  //#endregion
1494
1522
  //#region src/components/Query.tsx
1495
1523
  const declarationPrinter$3 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1496
- const callPrinter$3 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1497
1524
  function buildQueryParamsNode(node, options) {
1498
1525
  const { resolver } = options;
1499
1526
  const successNames = resolveSuccessNames(node, resolver);
@@ -1513,7 +1540,10 @@ function buildQueryParamsNode(node, options) {
1513
1540
  }`,
1514
1541
  default: "{}"
1515
1542
  });
1516
- return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, { resolver }), optionsParam].filter((param) => param !== null) });
1543
+ return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, {
1544
+ resolver,
1545
+ memberTypeWrapper: maybeValueOrGetter
1546
+ }), optionsParam].filter((param) => param !== null) });
1517
1547
  }
1518
1548
  function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, customOptions }) {
1519
1549
  const successNames = resolveSuccessNames(node, tsResolver);
@@ -1526,10 +1556,9 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, t
1526
1556
  `TQueryData = ${TData}`,
1527
1557
  `TQueryKey extends QueryKey = ${queryKeyTypeName}`
1528
1558
  ];
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) ?? "";
1559
+ const resolvedParams = buildResolvedRequestParams(node);
1560
+ const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
1561
+ const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
1533
1562
  const paramsNode = buildQueryParamsNode(node, { resolver: tsResolver });
1534
1563
  const paramsSignature = declarationPrinter$3.print(paramsNode) ?? "";
1535
1564
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
@@ -1545,11 +1574,11 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, t
1545
1574
  JSDoc: { comments: buildOperationComments(node) },
1546
1575
  children: `
1547
1576
  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}' })` : ""}
1577
+ const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
1578
+ const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
1550
1579
 
1551
1580
  const queryResult = useQuery({
1552
- ...${queryOptionsName}(${queryOptionsParamsCall}),${customOptions ? "\n ...customOptions," : ""}
1581
+ ...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
1553
1582
  ...resolvedOptions,
1554
1583
  queryKey,
1555
1584
  } as unknown as QueryObserverOptions, queryClient) as ${returnType}
@@ -1564,7 +1593,6 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, t
1564
1593
  //#endregion
1565
1594
  //#region src/components/SuspenseInfiniteQuery.tsx
1566
1595
  const declarationPrinter$2 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1567
- const callPrinter$2 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1568
1596
  function buildSuspenseInfiniteQueryParamsNode(node, options) {
1569
1597
  const { resolver, pageParamGeneric } = options;
1570
1598
  const optionsParam = (0, _kubb_plugin_ts.createFunctionParameter)({
@@ -1575,7 +1603,10 @@ function buildSuspenseInfiniteQueryParamsNode(node, options) {
1575
1603
  }`,
1576
1604
  default: "{}"
1577
1605
  });
1578
- return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, { resolver }), optionsParam].filter((param) => param !== null) });
1606
+ return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, {
1607
+ resolver,
1608
+ memberTypeWrapper: maybeValueOrGetter
1609
+ }), optionsParam].filter((param) => param !== null) });
1579
1610
  }
1580
1611
  function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, customOptions, initialPageParam, queryParam }) {
1581
1612
  const successNames = resolveSuccessNames(node, tsResolver);
@@ -1603,10 +1634,9 @@ function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, query
1603
1634
  `TQueryKey extends QueryKey = ${queryKeyTypeName}`,
1604
1635
  `TPageParam = ${pageParamType}`
1605
1636
  ];
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) ?? "";
1637
+ const resolvedParams = buildResolvedRequestParams(node);
1638
+ const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
1639
+ const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
1610
1640
  const paramsNode = buildSuspenseInfiniteQueryParamsNode(node, {
1611
1641
  resolver: tsResolver,
1612
1642
  pageParamGeneric: "TPageParam"
@@ -1625,11 +1655,11 @@ function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, query
1625
1655
  JSDoc: { comments: buildOperationComments(node) },
1626
1656
  children: `
1627
1657
  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}' })` : ""}
1658
+ const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
1659
+ const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
1630
1660
 
1631
1661
  const queryResult = useSuspenseInfiniteQuery({
1632
- ...${queryOptionsName}(${queryOptionsParamsCall}),${customOptions ? "\n ...customOptions," : ""}
1662
+ ...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
1633
1663
  ...resolvedOptions,
1634
1664
  queryKey,
1635
1665
  } as unknown as UseSuspenseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient) as ${returnType}
@@ -1644,7 +1674,7 @@ function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, query
1644
1674
  //#endregion
1645
1675
  //#region src/components/SuspenseInfiniteQueryOptions.tsx
1646
1676
  const declarationPrinter$1 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1647
- const callPrinter$1 = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1677
+ const callPrinter = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1648
1678
  function SuspenseInfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam, nextParam, previousParam, node, tsResolver, queryParam, queryKeyName }) {
1649
1679
  const successNames = resolveSuccessNames(node, tsResolver);
1650
1680
  const queryFnDataType = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
@@ -1670,7 +1700,7 @@ function SuspenseInfiniteQueryOptions({ name, clientName, initialPageParam, curs
1670
1700
  })}
1671
1701
  return data`;
1672
1702
  const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
1673
- const queryKeyParamsCall = callPrinter$1.print(queryKeyParamsNode) ?? "";
1703
+ const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? "";
1674
1704
  const hasNewParams = nextParam != null || previousParam != null;
1675
1705
  const [getNextPageParamExpr, getPreviousPageParamExpr] = (() => {
1676
1706
  if (hasNewParams) {
@@ -1735,7 +1765,6 @@ return infiniteQueryOptions<${queryFnDataType}, ${errorType}, InfiniteData<${que
1735
1765
  //#endregion
1736
1766
  //#region src/components/SuspenseQuery.tsx
1737
1767
  const declarationPrinter = (0, _kubb_plugin_ts.functionPrinter)({ mode: "declaration" });
1738
- const callPrinter = (0, _kubb_plugin_ts.functionPrinter)({ mode: "call" });
1739
1768
  function buildSuspenseQueryParamsNode(node, options) {
1740
1769
  const { resolver } = options;
1741
1770
  const successNames = resolveSuccessNames(node, resolver);
@@ -1754,7 +1783,10 @@ function buildSuspenseQueryParamsNode(node, options) {
1754
1783
  }`,
1755
1784
  default: "{}"
1756
1785
  });
1757
- return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, { resolver }), optionsParam].filter((param) => param !== null) });
1786
+ return (0, _kubb_plugin_ts.createFunctionParameters)({ params: [buildGroupedRequestParam(node, {
1787
+ resolver,
1788
+ memberTypeWrapper: maybeValueOrGetter
1789
+ }), optionsParam].filter((param) => param !== null) });
1758
1790
  }
1759
1791
  function SuspenseQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, customOptions }) {
1760
1792
  const successNames = resolveSuccessNames(node, tsResolver);
@@ -1763,10 +1795,9 @@ function SuspenseQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
1763
1795
  const TData = responseName;
1764
1796
  const returnType = `UseSuspenseQueryResult<TData, ${`ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`}> & { queryKey: TQueryKey }`;
1765
1797
  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) ?? "";
1798
+ const resolvedParams = buildResolvedRequestParams(node);
1799
+ const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
1800
+ const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
1770
1801
  const paramsNode = buildSuspenseQueryParamsNode(node, { resolver: tsResolver });
1771
1802
  const paramsSignature = declarationPrinter.print(paramsNode) ?? "";
1772
1803
  return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Source, {
@@ -1782,11 +1813,11 @@ function SuspenseQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
1782
1813
  JSDoc: { comments: buildOperationComments(node) },
1783
1814
  children: `
1784
1815
  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}' })` : ""}
1816
+ const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
1817
+ const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
1787
1818
 
1788
1819
  const queryResult = useSuspenseQuery({
1789
- ...${queryOptionsName}(${queryOptionsParamsCall}),${customOptions ? "\n ...customOptions," : ""}
1820
+ ...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
1790
1821
  ...resolvedOptions,
1791
1822
  queryKey,
1792
1823
  } as unknown as UseSuspenseQueryOptions, queryClient) as ${returnType}
@@ -1812,7 +1843,7 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
1812
1843
  operation(node, ctx) {
1813
1844
  if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
1814
1845
  const { config, driver, resolver, root } = ctx;
1815
- const { output, query, mutation, infinite, validator, client, group, customOptions } = ctx.options;
1846
+ const { output, query, mutation, infinite, validator, client, group, customOptions, hooks } = ctx.options;
1816
1847
  const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
1817
1848
  if (!pluginTs) return null;
1818
1849
  const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
@@ -1946,31 +1977,33 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
1946
1977
  initialPageParam: infiniteOptions.initialPageParam,
1947
1978
  queryParam: infiniteOptions.queryParam
1948
1979
  }),
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
- })
1980
+ hooks && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
1981
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1982
+ name: ["useInfiniteQuery"],
1983
+ path: importPath
1984
+ }),
1985
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
1986
+ name: [
1987
+ "QueryKey",
1988
+ "QueryClient",
1989
+ "InfiniteQueryObserverOptions",
1990
+ "UseInfiniteQueryResult"
1991
+ ],
1992
+ path: importPath,
1993
+ isTypeOnly: true
1994
+ }),
1995
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(InfiniteQuery, {
1996
+ name: queryName,
1997
+ queryOptionsName,
1998
+ queryKeyName,
1999
+ queryKeyTypeName,
2000
+ node,
2001
+ tsResolver,
2002
+ initialPageParam: infiniteOptions.initialPageParam,
2003
+ queryParam: infiniteOptions.queryParam,
2004
+ customOptions
2005
+ })
2006
+ ] })
1974
2007
  ]
1975
2008
  });
1976
2009
  }
@@ -1988,7 +2021,7 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
1988
2021
  operation(node, ctx) {
1989
2022
  if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
1990
2023
  const { config, driver, resolver, root } = ctx;
1991
- const { output, query, mutation, validator, client, group, customOptions } = ctx.options;
2024
+ const { output, query, mutation, validator, client, group, customOptions, hooks } = ctx.options;
1992
2025
  const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
1993
2026
  if (!pluginTs) return null;
1994
2027
  const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
@@ -2096,7 +2129,7 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
2096
2129
  node,
2097
2130
  tsResolver
2098
2131
  }),
2099
- mutation && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2132
+ mutation && hooks && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2100
2133
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2101
2134
  name: ["useMutation"],
2102
2135
  path: importPath
@@ -2137,7 +2170,7 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
2137
2170
  operation(node, ctx) {
2138
2171
  if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
2139
2172
  const { config, driver, resolver, root } = ctx;
2140
- const { output, query, mutation, validator, client, group, customOptions } = ctx.options;
2173
+ const { output, query, mutation, validator, client, group, customOptions, hooks } = ctx.options;
2141
2174
  const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
2142
2175
  if (!pluginTs) return null;
2143
2176
  const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
@@ -2249,7 +2282,7 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
2249
2282
  node,
2250
2283
  tsResolver
2251
2284
  }),
2252
- query && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2285
+ query && hooks && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2253
2286
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2254
2287
  name: ["useQuery"],
2255
2288
  path: importPath
@@ -2292,7 +2325,7 @@ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
2292
2325
  operation(node, ctx) {
2293
2326
  if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
2294
2327
  const { config, driver, resolver, root } = ctx;
2295
- const { output, query, mutation, infinite, suspense, validator, client, group, customOptions } = ctx.options;
2328
+ const { output, query, mutation, infinite, suspense, validator, client, group, customOptions, hooks } = ctx.options;
2296
2329
  const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
2297
2330
  if (!pluginTs) return null;
2298
2331
  const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
@@ -2426,31 +2459,33 @@ const suspenseInfiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
2426
2459
  initialPageParam: infiniteOptions.initialPageParam,
2427
2460
  queryParam: infiniteOptions.queryParam
2428
2461
  }),
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
- })
2462
+ hooks && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2463
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2464
+ name: ["useSuspenseInfiniteQuery"],
2465
+ path: importPath
2466
+ }),
2467
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2468
+ name: [
2469
+ "QueryKey",
2470
+ "QueryClient",
2471
+ "UseSuspenseInfiniteQueryOptions",
2472
+ "UseSuspenseInfiniteQueryResult"
2473
+ ],
2474
+ path: importPath,
2475
+ isTypeOnly: true
2476
+ }),
2477
+ /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(SuspenseInfiniteQuery, {
2478
+ name: queryName,
2479
+ queryOptionsName,
2480
+ queryKeyName,
2481
+ queryKeyTypeName,
2482
+ node,
2483
+ tsResolver,
2484
+ initialPageParam: infiniteOptions.initialPageParam,
2485
+ queryParam: infiniteOptions.queryParam,
2486
+ customOptions
2487
+ })
2488
+ ] })
2454
2489
  ]
2455
2490
  });
2456
2491
  }
@@ -2469,7 +2504,7 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
2469
2504
  operation(node, ctx) {
2470
2505
  if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
2471
2506
  const { config, driver, resolver, root } = ctx;
2472
- const { output, query, mutation, suspense, validator, client, group, customOptions } = ctx.options;
2507
+ const { output, query, mutation, suspense, validator, client, group, customOptions, hooks } = ctx.options;
2473
2508
  const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
2474
2509
  if (!pluginTs) return null;
2475
2510
  const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
@@ -2581,7 +2616,7 @@ const suspenseQueryGenerator = (0, _kubb_core.defineGenerator)({
2581
2616
  node,
2582
2617
  tsResolver
2583
2618
  }),
2584
- suspense && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2619
+ suspense && hooks && /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx_jsx_runtime.Fragment, { children: [
2585
2620
  /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsx)(_kubb_renderer_jsx.File.Import, {
2586
2621
  name: ["useSuspenseQuery"],
2587
2622
  path: importPath
@@ -2761,7 +2796,7 @@ const pluginReactQuery = (0, _kubb_core.definePlugin)((options) => {
2761
2796
  const { output = {
2762
2797
  path: "hooks",
2763
2798
  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;
2799
+ }, group, exclude = [], include, override = [], validator = false, suspense = {}, infinite = false, mutation = {}, query = {}, mutationKey = mutationKeyTransformer, queryKey = queryKeyTransformer, customOptions, hooks = false, client, resolver: userResolver, macros: userMacros } = options;
2765
2800
  const selectedGenerators = [
2766
2801
  queryGenerator,
2767
2802
  suspenseQueryGenerator,
@@ -2823,6 +2858,7 @@ const pluginReactQuery = (0, _kubb_core.definePlugin)((options) => {
2823
2858
  name: "useCustomHookOptions",
2824
2859
  ...customOptions
2825
2860
  } : null,
2861
+ hooks,
2826
2862
  validator,
2827
2863
  group: groupConfig,
2828
2864
  exclude,