@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 +193 -279
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +18 -170
- package/dist/index.js +193 -279
- package/dist/index.js.map +1 -1
- package/package.json +6 -7
package/dist/index.js
CHANGED
|
@@ -2,7 +2,6 @@ import "./rolldown-runtime-C0LytTxp.js";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { ast, defineGenerator, definePlugin, defineResolver } from "@kubb/core";
|
|
4
4
|
import { createFunctionParameter, createFunctionParameters, createObjectBindingPattern, createTypeLiteral, functionPrinter, pluginTsName } from "@kubb/plugin-ts";
|
|
5
|
-
import { pluginZodName } from "@kubb/plugin-zod";
|
|
6
5
|
import { File, Function, Type, jsxRenderer } from "@kubb/renderer-jsx";
|
|
7
6
|
import { Fragment, jsx, jsxs } from "@kubb/renderer-jsx/jsx-runtime";
|
|
8
7
|
import fs from "node:fs";
|
|
@@ -530,16 +529,6 @@ function createGroupConfig(group) {
|
|
|
530
529
|
};
|
|
531
530
|
}
|
|
532
531
|
//#endregion
|
|
533
|
-
//#region ../../internals/client/src/builders/validatorOptions.ts
|
|
534
|
-
/**
|
|
535
|
-
* Returns `true` when any direction of the validator uses zod (used for dependency checks).
|
|
536
|
-
*/
|
|
537
|
-
function isValidatorEnabled(validator) {
|
|
538
|
-
if (!validator) return false;
|
|
539
|
-
if (validator === "zod") return true;
|
|
540
|
-
return Boolean(validator.request || validator.response);
|
|
541
|
-
}
|
|
542
|
-
//#endregion
|
|
543
532
|
//#region ../../internals/client/src/resolveClient.ts
|
|
544
533
|
/**
|
|
545
534
|
* Resolves which client plugin a consumer (react-query, vue-query, swr, mcp) should call for an
|
|
@@ -665,12 +654,15 @@ function MutationKey({ name, node, transformer }) {
|
|
|
665
654
|
* The grouped request options, ordered for both the destructured signature and the
|
|
666
655
|
* call passed to the underlying client.
|
|
667
656
|
*/
|
|
668
|
-
const requestGroupOrder = [
|
|
657
|
+
const requestGroupOrder$1 = [
|
|
669
658
|
"path",
|
|
670
659
|
"query",
|
|
671
660
|
"body",
|
|
672
661
|
"headers"
|
|
673
662
|
];
|
|
663
|
+
function maybeValueOrGetter(type) {
|
|
664
|
+
return `${type} | (() => ${type})`;
|
|
665
|
+
}
|
|
674
666
|
/**
|
|
675
667
|
* Builds the grouped `{ path, query, body, headers }` parameter that mirrors the client
|
|
676
668
|
* function signature. Only the groups the operation carries are emitted, typed from the
|
|
@@ -683,7 +675,7 @@ const requestGroupOrder = [
|
|
|
683
675
|
* `MaybeRefOrGetter` per group.
|
|
684
676
|
*/
|
|
685
677
|
function buildGroupedRequestParam(node, options) {
|
|
686
|
-
const { resolver, keys = requestGroupOrder, memberTypeWrapper } = options;
|
|
678
|
+
const { resolver, keys = requestGroupOrder$1, memberTypeWrapper } = options;
|
|
687
679
|
const { groups, hasRequiredPath, hasRequiredQuery, hasRequiredHeader } = getRequestGroupOptionality(node);
|
|
688
680
|
const names = keys.filter((key) => groups[key]);
|
|
689
681
|
if (names.length === 0) return null;
|
|
@@ -695,7 +687,7 @@ function buildGroupedRequestParam(node, options) {
|
|
|
695
687
|
};
|
|
696
688
|
const isOptional = names.every((name) => !requiredByGroup[name]);
|
|
697
689
|
const requestConfigName = resolver.resolveRequestConfigName(node);
|
|
698
|
-
const omittedKeys = requestGroupOrder.filter((key) => !keys.includes(key));
|
|
690
|
+
const omittedKeys = requestGroupOrder$1.filter((key) => !keys.includes(key));
|
|
699
691
|
const requestConfigType = omittedKeys.length > 0 ? `Omit<${requestConfigName}, ${omittedKeys.map((key) => `'${key}'`).join(" | ")}>` : requestConfigName;
|
|
700
692
|
if (memberTypeWrapper) {
|
|
701
693
|
const members = names.map((name) => ({
|
|
@@ -751,7 +743,7 @@ function buildClientCall(node, options) {
|
|
|
751
743
|
const { groups } = getRequestGroupOptionality(node);
|
|
752
744
|
return `${clientName}({ ${[
|
|
753
745
|
"...config",
|
|
754
|
-
...requestGroupOrder.filter((key) => groups[key]),
|
|
746
|
+
...requestGroupOrder$1.filter((key) => groups[key]),
|
|
755
747
|
signal ? "signal: config.signal ?? signal" : null,
|
|
756
748
|
"throwOnError: true"
|
|
757
749
|
].filter((part) => part !== null).join(", ")} })`;
|
|
@@ -779,51 +771,6 @@ function resolveOperationOverrides(node, override) {
|
|
|
779
771
|
return override.find((ov) => matchesPattern(node, ov))?.options ?? {};
|
|
780
772
|
}
|
|
781
773
|
/**
|
|
782
|
-
* Returns `'zod'` when response-direction parsing is enabled.
|
|
783
|
-
* The string shorthand `'zod'` also enables response parsing.
|
|
784
|
-
*/
|
|
785
|
-
function resolveResponseParser(parser) {
|
|
786
|
-
if (!parser) return null;
|
|
787
|
-
if (parser === "zod") return "zod";
|
|
788
|
-
return parser.response ?? null;
|
|
789
|
-
}
|
|
790
|
-
/**
|
|
791
|
-
* Returns `'zod'` when request body parsing is enabled.
|
|
792
|
-
* The string shorthand `'zod'` also enables request body parsing (existing behavior).
|
|
793
|
-
*/
|
|
794
|
-
function resolveRequestParser(parser) {
|
|
795
|
-
if (!parser) return null;
|
|
796
|
-
if (parser === "zod") return "zod";
|
|
797
|
-
return parser.request ?? null;
|
|
798
|
-
}
|
|
799
|
-
/**
|
|
800
|
-
* Returns `'zod'` when query-params parsing is enabled.
|
|
801
|
-
* Only the object form `{ request: 'zod' }` enables this. `parser: 'zod'` does not.
|
|
802
|
-
*/
|
|
803
|
-
function resolveQueryParamsParser(parser) {
|
|
804
|
-
if (!parser || parser === "zod") return null;
|
|
805
|
-
return parser.request ?? null;
|
|
806
|
-
}
|
|
807
|
-
/**
|
|
808
|
-
* Collects the Zod schema import names for an operation based on the active parser directions.
|
|
809
|
-
*
|
|
810
|
-
* - `parser: 'zod'`: response and request body names (backward-compatible behavior).
|
|
811
|
-
* - `parser: { request: 'zod' }`: request body and query params names.
|
|
812
|
-
* - `parser: { response: 'zod' }`: response name only.
|
|
813
|
-
* - `parser: { request: 'zod', response: 'zod' }`: all three.
|
|
814
|
-
*
|
|
815
|
-
* Returns an empty array when no resolver is provided or `parser` is falsy.
|
|
816
|
-
*/
|
|
817
|
-
function resolveZodSchemaNames(node, zodResolver, parser) {
|
|
818
|
-
if (!zodResolver || !parser) return [];
|
|
819
|
-
const { query: queryParams } = getOperationParameters(node, { paramsCasing: "original" });
|
|
820
|
-
return [
|
|
821
|
-
resolveResponseParser(parser) === "zod" ? zodResolver.resolveResponseName?.(node) : null,
|
|
822
|
-
resolveRequestParser(parser) === "zod" && node.requestBody?.content?.[0]?.schema ? zodResolver.resolveDataName?.(node) : null,
|
|
823
|
-
resolveQueryParamsParser(parser) === "zod" && queryParams.length > 0 ? zodResolver.resolveQueryParamsName?.(node, queryParams[0]) : null
|
|
824
|
-
].filter((n) => Boolean(n));
|
|
825
|
-
}
|
|
826
|
-
/**
|
|
827
774
|
* Build QueryKey params as the grouped `{ path, query, body }` object (NO headers, NO config),
|
|
828
775
|
* typed from the operation's `RequestConfig` minus `url`. The query key transformer reads the
|
|
829
776
|
* grouped `path`/`query`/`body` bindings.
|
|
@@ -978,6 +925,30 @@ const customHookOptionsFileGenerator = defineGenerator({
|
|
|
978
925
|
}
|
|
979
926
|
});
|
|
980
927
|
//#endregion
|
|
928
|
+
//#region src/utils.ts
|
|
929
|
+
const requestGroupOrder = [
|
|
930
|
+
"path",
|
|
931
|
+
"query",
|
|
932
|
+
"body",
|
|
933
|
+
"headers"
|
|
934
|
+
];
|
|
935
|
+
/**
|
|
936
|
+
* Builds the object literal that resolves each request group to a concrete value, unwrapping a getter
|
|
937
|
+
* once before the value reaches the plain `queryKey`/`queryOptions` helpers. A getter must never reach a
|
|
938
|
+
* React Query key, which is hashed structurally. Returns `null` when the operation carries no request group.
|
|
939
|
+
*
|
|
940
|
+
* @example
|
|
941
|
+
* ```ts
|
|
942
|
+
* buildResolvedRequestParams(node) // { path: typeof path === 'function' ? path() : path }
|
|
943
|
+
* ```
|
|
944
|
+
*/
|
|
945
|
+
function buildResolvedRequestParams(node) {
|
|
946
|
+
const groups = getRequestGroups(node);
|
|
947
|
+
const names = requestGroupOrder.filter((key) => groups[key]);
|
|
948
|
+
if (names.length === 0) return null;
|
|
949
|
+
return `{ ${names.map((name) => `${name}: typeof ${name} === 'function' ? ${name}() : ${name}`).join(", ")} }`;
|
|
950
|
+
}
|
|
951
|
+
//#endregion
|
|
981
952
|
//#region src/generators/hookOptionsGenerator.tsx
|
|
982
953
|
/**
|
|
983
954
|
* Emits the `HookOptions` type used by `customOptions`. Enabled when
|
|
@@ -990,8 +961,8 @@ const hookOptionsGenerator = defineGenerator({
|
|
|
990
961
|
renderer: jsxRenderer,
|
|
991
962
|
operations(nodes, ctx) {
|
|
992
963
|
const { resolver, config, root } = ctx;
|
|
993
|
-
const { output, customOptions, query, mutation, suspense, infinite, group, override } = ctx.options;
|
|
994
|
-
if (!customOptions) return null;
|
|
964
|
+
const { output, customOptions, query, mutation, suspense, infinite, group, override, hooks } = ctx.options;
|
|
965
|
+
if (!customOptions || !hooks) return null;
|
|
995
966
|
const name = resolver.resolveHookOptionsName();
|
|
996
967
|
const resolvedFile = resolver.resolveFile({
|
|
997
968
|
name,
|
|
@@ -1135,51 +1106,8 @@ const hookOptionsGenerator = defineGenerator({
|
|
|
1135
1106
|
}
|
|
1136
1107
|
});
|
|
1137
1108
|
//#endregion
|
|
1138
|
-
//#region src/components/QueryOptions.tsx
|
|
1139
|
-
const declarationPrinter$8 = functionPrinter({ mode: "declaration" });
|
|
1140
|
-
const callPrinter$8 = functionPrinter({ mode: "call" });
|
|
1141
|
-
function getQueryOptionsParams(node, options) {
|
|
1142
|
-
return buildQueryOptionsParams(node, options);
|
|
1143
|
-
}
|
|
1144
|
-
function QueryOptions({ name, clientName, node, tsResolver, queryKeyName }) {
|
|
1145
|
-
const successNames = resolveSuccessNames(node, tsResolver);
|
|
1146
|
-
const responseName = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
|
|
1147
|
-
const errorNames = resolveErrorNames(node, tsResolver);
|
|
1148
|
-
const TData = responseName;
|
|
1149
|
-
const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`;
|
|
1150
|
-
const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
|
|
1151
|
-
const queryKeyParamsCall = callPrinter$8.print(queryKeyParamsNode) ?? "";
|
|
1152
|
-
const paramsNode = getQueryOptionsParams(node, { resolver: tsResolver });
|
|
1153
|
-
const paramsSignature = declarationPrinter$8.print(paramsNode) ?? "";
|
|
1154
|
-
const queryFnBody = `const { data } = await ${buildClientCall(node, {
|
|
1155
|
-
clientName,
|
|
1156
|
-
signal: true
|
|
1157
|
-
})}
|
|
1158
|
-
return data`;
|
|
1159
|
-
return /* @__PURE__ */ jsx(File.Source, {
|
|
1160
|
-
name,
|
|
1161
|
-
isExportable: true,
|
|
1162
|
-
isIndexable: true,
|
|
1163
|
-
children: /* @__PURE__ */ jsx(Function, {
|
|
1164
|
-
name,
|
|
1165
|
-
export: true,
|
|
1166
|
-
params: paramsSignature,
|
|
1167
|
-
children: `
|
|
1168
|
-
const queryKey = ${queryKeyName}(${queryKeyParamsCall})
|
|
1169
|
-
return queryOptions<${TData}, ${TError}, ${TData}, typeof queryKey>({
|
|
1170
|
-
queryKey,
|
|
1171
|
-
queryFn: async ({ signal }) => {
|
|
1172
|
-
${queryFnBody}
|
|
1173
|
-
},
|
|
1174
|
-
})
|
|
1175
|
-
`
|
|
1176
|
-
})
|
|
1177
|
-
});
|
|
1178
|
-
}
|
|
1179
|
-
//#endregion
|
|
1180
1109
|
//#region src/components/InfiniteQuery.tsx
|
|
1181
|
-
const declarationPrinter$
|
|
1182
|
-
const callPrinter$7 = functionPrinter({ mode: "call" });
|
|
1110
|
+
const declarationPrinter$8 = functionPrinter({ mode: "declaration" });
|
|
1183
1111
|
function buildInfiniteQueryParamsNode(node, options) {
|
|
1184
1112
|
const { resolver, pageParamGeneric } = options;
|
|
1185
1113
|
const optionsParam = createFunctionParameter({
|
|
@@ -1190,7 +1118,10 @@ function buildInfiniteQueryParamsNode(node, options) {
|
|
|
1190
1118
|
}`,
|
|
1191
1119
|
default: "{}"
|
|
1192
1120
|
});
|
|
1193
|
-
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1121
|
+
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1122
|
+
resolver,
|
|
1123
|
+
memberTypeWrapper: maybeValueOrGetter
|
|
1124
|
+
}), optionsParam].filter((param) => param !== null) });
|
|
1194
1125
|
}
|
|
1195
1126
|
function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, initialPageParam, queryParam, customOptions }) {
|
|
1196
1127
|
const successNames = resolveSuccessNames(node, tsResolver);
|
|
@@ -1218,15 +1149,14 @@ function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
|
|
|
1218
1149
|
`TQueryKey extends QueryKey = ${queryKeyTypeName}`,
|
|
1219
1150
|
`TPageParam = ${pageParamType}`
|
|
1220
1151
|
];
|
|
1221
|
-
const
|
|
1222
|
-
const
|
|
1223
|
-
const
|
|
1224
|
-
const queryOptionsParamsCall = callPrinter$7.print(queryOptionsParamsNode) ?? "";
|
|
1152
|
+
const resolvedParams = buildResolvedRequestParams(node);
|
|
1153
|
+
const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
|
|
1154
|
+
const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
|
|
1225
1155
|
const paramsNode = buildInfiniteQueryParamsNode(node, {
|
|
1226
1156
|
resolver: tsResolver,
|
|
1227
1157
|
pageParamGeneric: "TPageParam"
|
|
1228
1158
|
});
|
|
1229
|
-
const paramsSignature = declarationPrinter$
|
|
1159
|
+
const paramsSignature = declarationPrinter$8.print(paramsNode) ?? "";
|
|
1230
1160
|
return /* @__PURE__ */ jsx(File.Source, {
|
|
1231
1161
|
name,
|
|
1232
1162
|
isExportable: true,
|
|
@@ -1240,11 +1170,11 @@ function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
|
|
|
1240
1170
|
JSDoc: { comments: buildOperationComments(node) },
|
|
1241
1171
|
children: `
|
|
1242
1172
|
const { query: queryConfig = {}, client: config = {} } = options ?? {}
|
|
1243
|
-
const { client: queryClient, ...resolvedOptions } = queryConfig
|
|
1244
|
-
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${
|
|
1173
|
+
const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
|
|
1174
|
+
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
|
|
1245
1175
|
|
|
1246
1176
|
const queryResult = useInfiniteQuery({
|
|
1247
|
-
...${queryOptionsName}(${
|
|
1177
|
+
...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
|
|
1248
1178
|
...resolvedOptions,
|
|
1249
1179
|
queryKey,
|
|
1250
1180
|
} as unknown as InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient) as ${returnType}
|
|
@@ -1257,9 +1187,51 @@ function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
|
|
|
1257
1187
|
});
|
|
1258
1188
|
}
|
|
1259
1189
|
//#endregion
|
|
1190
|
+
//#region src/components/QueryOptions.tsx
|
|
1191
|
+
const declarationPrinter$7 = functionPrinter({ mode: "declaration" });
|
|
1192
|
+
const callPrinter$4 = functionPrinter({ mode: "call" });
|
|
1193
|
+
function getQueryOptionsParams(node, options) {
|
|
1194
|
+
return buildQueryOptionsParams(node, options);
|
|
1195
|
+
}
|
|
1196
|
+
function QueryOptions({ name, clientName, node, tsResolver, queryKeyName }) {
|
|
1197
|
+
const successNames = resolveSuccessNames(node, tsResolver);
|
|
1198
|
+
const responseName = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
|
|
1199
|
+
const errorNames = resolveErrorNames(node, tsResolver);
|
|
1200
|
+
const TData = responseName;
|
|
1201
|
+
const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`;
|
|
1202
|
+
const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
|
|
1203
|
+
const queryKeyParamsCall = callPrinter$4.print(queryKeyParamsNode) ?? "";
|
|
1204
|
+
const paramsNode = getQueryOptionsParams(node, { resolver: tsResolver });
|
|
1205
|
+
const paramsSignature = declarationPrinter$7.print(paramsNode) ?? "";
|
|
1206
|
+
const queryFnBody = `const { data } = await ${buildClientCall(node, {
|
|
1207
|
+
clientName,
|
|
1208
|
+
signal: true
|
|
1209
|
+
})}
|
|
1210
|
+
return data`;
|
|
1211
|
+
return /* @__PURE__ */ jsx(File.Source, {
|
|
1212
|
+
name,
|
|
1213
|
+
isExportable: true,
|
|
1214
|
+
isIndexable: true,
|
|
1215
|
+
children: /* @__PURE__ */ jsx(Function, {
|
|
1216
|
+
name,
|
|
1217
|
+
export: true,
|
|
1218
|
+
params: paramsSignature,
|
|
1219
|
+
children: `
|
|
1220
|
+
const queryKey = ${queryKeyName}(${queryKeyParamsCall})
|
|
1221
|
+
return queryOptions<${TData}, ${TError}, ${TData}, typeof queryKey>({
|
|
1222
|
+
queryKey,
|
|
1223
|
+
queryFn: async ({ signal }) => {
|
|
1224
|
+
${queryFnBody}
|
|
1225
|
+
},
|
|
1226
|
+
})
|
|
1227
|
+
`
|
|
1228
|
+
})
|
|
1229
|
+
});
|
|
1230
|
+
}
|
|
1231
|
+
//#endregion
|
|
1260
1232
|
//#region src/components/InfiniteQueryOptions.tsx
|
|
1261
1233
|
const declarationPrinter$6 = functionPrinter({ mode: "declaration" });
|
|
1262
|
-
const callPrinter$
|
|
1234
|
+
const callPrinter$3 = functionPrinter({ mode: "call" });
|
|
1263
1235
|
function InfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam, nextParam, previousParam, node, tsResolver, queryParam, queryKeyName }) {
|
|
1264
1236
|
const successNames = resolveSuccessNames(node, tsResolver);
|
|
1265
1237
|
const queryFnDataType = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
|
|
@@ -1278,7 +1250,7 @@ function InfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam,
|
|
|
1278
1250
|
const queryParamType = queryParam && queryParamsTypeName ? `${queryParamsTypeName}['${queryParam}']` : null;
|
|
1279
1251
|
const pageParamType = queryParamType ? isInitialPageParamDefined ? `NonNullable<${queryParamType}>` : queryParamType : fallbackPageParamType;
|
|
1280
1252
|
const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
|
|
1281
|
-
const queryKeyParamsCall = callPrinter$
|
|
1253
|
+
const queryKeyParamsCall = callPrinter$3.print(queryKeyParamsNode) ?? "";
|
|
1282
1254
|
const paramsNode = getQueryOptionsParams(node, { resolver: tsResolver });
|
|
1283
1255
|
const paramsSignature = declarationPrinter$6.print(paramsNode) ?? "";
|
|
1284
1256
|
const queryFnBody = `const { data } = await ${buildClientCall(node, {
|
|
@@ -1350,7 +1322,7 @@ return infiniteQueryOptions<${queryFnDataType}, ${errorType}, InfiniteData<${que
|
|
|
1350
1322
|
//#endregion
|
|
1351
1323
|
//#region src/components/MutationOptions.tsx
|
|
1352
1324
|
const declarationPrinter$5 = functionPrinter({ mode: "declaration" });
|
|
1353
|
-
const callPrinter$
|
|
1325
|
+
const callPrinter$2 = functionPrinter({ mode: "call" });
|
|
1354
1326
|
function buildMutationConfigParamsNode(node) {
|
|
1355
1327
|
return createFunctionParameters({ params: [createFunctionParameter({
|
|
1356
1328
|
name: "config",
|
|
@@ -1369,7 +1341,7 @@ function MutationOptions({ name, clientName, node, tsResolver, mutationKeyName }
|
|
|
1369
1341
|
const hasMutationParams = groupedParam !== null;
|
|
1370
1342
|
const groupedParamsNode = createFunctionParameters({ params: groupedParam ? [groupedParam] : [] });
|
|
1371
1343
|
const TRequest = hasMutationParams ? tsResolver.resolveRequestConfigName(node) : "undefined";
|
|
1372
|
-
const argBindingStr = hasMutationParams ? callPrinter$
|
|
1344
|
+
const argBindingStr = hasMutationParams ? callPrinter$2.print(groupedParamsNode) ?? "" : "_";
|
|
1373
1345
|
const mutationFnBody = `const { data } = await ${buildClientCall(node, {
|
|
1374
1346
|
clientName,
|
|
1375
1347
|
signal: false
|
|
@@ -1399,7 +1371,7 @@ function MutationOptions({ name, clientName, node, tsResolver, mutationKeyName }
|
|
|
1399
1371
|
//#endregion
|
|
1400
1372
|
//#region src/components/Mutation.tsx
|
|
1401
1373
|
const declarationPrinter$4 = functionPrinter({ mode: "declaration" });
|
|
1402
|
-
const callPrinter$
|
|
1374
|
+
const callPrinter$1 = functionPrinter({ mode: "call" });
|
|
1403
1375
|
function resolveMutationRequestType(node, resolver) {
|
|
1404
1376
|
return buildGroupedRequestParam(node, { resolver }) ? resolver.resolveRequestConfigName(node) : "undefined";
|
|
1405
1377
|
}
|
|
@@ -1434,7 +1406,7 @@ function Mutation({ name, mutationOptionsName, node, tsResolver, mutationKeyName
|
|
|
1434
1406
|
].join(", ");
|
|
1435
1407
|
const returnType = `UseMutationResult<${generics}>`;
|
|
1436
1408
|
const mutationOptionsConfigNode = buildMutationConfigParamsNode(node);
|
|
1437
|
-
const mutationOptionsParamsCall = callPrinter$
|
|
1409
|
+
const mutationOptionsParamsCall = callPrinter$1.print(mutationOptionsConfigNode) ?? "";
|
|
1438
1410
|
const paramsNode = buildMutationParamsNode(node, { resolver: tsResolver });
|
|
1439
1411
|
const paramsSignature = declarationPrinter$4.print(paramsNode) ?? "";
|
|
1440
1412
|
return /* @__PURE__ */ jsx(File.Source, {
|
|
@@ -1466,7 +1438,6 @@ function Mutation({ name, mutationOptionsName, node, tsResolver, mutationKeyName
|
|
|
1466
1438
|
//#endregion
|
|
1467
1439
|
//#region src/components/Query.tsx
|
|
1468
1440
|
const declarationPrinter$3 = functionPrinter({ mode: "declaration" });
|
|
1469
|
-
const callPrinter$3 = functionPrinter({ mode: "call" });
|
|
1470
1441
|
function buildQueryParamsNode(node, options) {
|
|
1471
1442
|
const { resolver } = options;
|
|
1472
1443
|
const successNames = resolveSuccessNames(node, resolver);
|
|
@@ -1486,7 +1457,10 @@ function buildQueryParamsNode(node, options) {
|
|
|
1486
1457
|
}`,
|
|
1487
1458
|
default: "{}"
|
|
1488
1459
|
});
|
|
1489
|
-
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1460
|
+
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1461
|
+
resolver,
|
|
1462
|
+
memberTypeWrapper: maybeValueOrGetter
|
|
1463
|
+
}), optionsParam].filter((param) => param !== null) });
|
|
1490
1464
|
}
|
|
1491
1465
|
function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, customOptions }) {
|
|
1492
1466
|
const successNames = resolveSuccessNames(node, tsResolver);
|
|
@@ -1499,10 +1473,9 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, t
|
|
|
1499
1473
|
`TQueryData = ${TData}`,
|
|
1500
1474
|
`TQueryKey extends QueryKey = ${queryKeyTypeName}`
|
|
1501
1475
|
];
|
|
1502
|
-
const
|
|
1503
|
-
const
|
|
1504
|
-
const
|
|
1505
|
-
const queryOptionsParamsCall = callPrinter$3.print(queryOptionsParamsNode) ?? "";
|
|
1476
|
+
const resolvedParams = buildResolvedRequestParams(node);
|
|
1477
|
+
const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
|
|
1478
|
+
const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
|
|
1506
1479
|
const paramsNode = buildQueryParamsNode(node, { resolver: tsResolver });
|
|
1507
1480
|
const paramsSignature = declarationPrinter$3.print(paramsNode) ?? "";
|
|
1508
1481
|
return /* @__PURE__ */ jsx(File.Source, {
|
|
@@ -1518,11 +1491,11 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, t
|
|
|
1518
1491
|
JSDoc: { comments: buildOperationComments(node) },
|
|
1519
1492
|
children: `
|
|
1520
1493
|
const { query: queryConfig = {}, client: config = {} } = options ?? {}
|
|
1521
|
-
const { client: queryClient, ...resolvedOptions } = queryConfig
|
|
1522
|
-
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${
|
|
1494
|
+
const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
|
|
1495
|
+
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
|
|
1523
1496
|
|
|
1524
1497
|
const queryResult = useQuery({
|
|
1525
|
-
...${queryOptionsName}(${
|
|
1498
|
+
...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
|
|
1526
1499
|
...resolvedOptions,
|
|
1527
1500
|
queryKey,
|
|
1528
1501
|
} as unknown as QueryObserverOptions, queryClient) as ${returnType}
|
|
@@ -1537,7 +1510,6 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, t
|
|
|
1537
1510
|
//#endregion
|
|
1538
1511
|
//#region src/components/SuspenseInfiniteQuery.tsx
|
|
1539
1512
|
const declarationPrinter$2 = functionPrinter({ mode: "declaration" });
|
|
1540
|
-
const callPrinter$2 = functionPrinter({ mode: "call" });
|
|
1541
1513
|
function buildSuspenseInfiniteQueryParamsNode(node, options) {
|
|
1542
1514
|
const { resolver, pageParamGeneric } = options;
|
|
1543
1515
|
const optionsParam = createFunctionParameter({
|
|
@@ -1548,7 +1520,10 @@ function buildSuspenseInfiniteQueryParamsNode(node, options) {
|
|
|
1548
1520
|
}`,
|
|
1549
1521
|
default: "{}"
|
|
1550
1522
|
});
|
|
1551
|
-
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1523
|
+
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1524
|
+
resolver,
|
|
1525
|
+
memberTypeWrapper: maybeValueOrGetter
|
|
1526
|
+
}), optionsParam].filter((param) => param !== null) });
|
|
1552
1527
|
}
|
|
1553
1528
|
function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, customOptions, initialPageParam, queryParam }) {
|
|
1554
1529
|
const successNames = resolveSuccessNames(node, tsResolver);
|
|
@@ -1576,10 +1551,9 @@ function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, query
|
|
|
1576
1551
|
`TQueryKey extends QueryKey = ${queryKeyTypeName}`,
|
|
1577
1552
|
`TPageParam = ${pageParamType}`
|
|
1578
1553
|
];
|
|
1579
|
-
const
|
|
1580
|
-
const
|
|
1581
|
-
const
|
|
1582
|
-
const queryOptionsParamsCall = callPrinter$2.print(queryOptionsParamsNode) ?? "";
|
|
1554
|
+
const resolvedParams = buildResolvedRequestParams(node);
|
|
1555
|
+
const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
|
|
1556
|
+
const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
|
|
1583
1557
|
const paramsNode = buildSuspenseInfiniteQueryParamsNode(node, {
|
|
1584
1558
|
resolver: tsResolver,
|
|
1585
1559
|
pageParamGeneric: "TPageParam"
|
|
@@ -1598,11 +1572,11 @@ function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, query
|
|
|
1598
1572
|
JSDoc: { comments: buildOperationComments(node) },
|
|
1599
1573
|
children: `
|
|
1600
1574
|
const { query: queryConfig = {}, client: config = {} } = options ?? {}
|
|
1601
|
-
const { client: queryClient, ...resolvedOptions } = queryConfig
|
|
1602
|
-
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${
|
|
1575
|
+
const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
|
|
1576
|
+
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
|
|
1603
1577
|
|
|
1604
1578
|
const queryResult = useSuspenseInfiniteQuery({
|
|
1605
|
-
...${queryOptionsName}(${
|
|
1579
|
+
...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
|
|
1606
1580
|
...resolvedOptions,
|
|
1607
1581
|
queryKey,
|
|
1608
1582
|
} as unknown as UseSuspenseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient) as ${returnType}
|
|
@@ -1617,7 +1591,7 @@ function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, query
|
|
|
1617
1591
|
//#endregion
|
|
1618
1592
|
//#region src/components/SuspenseInfiniteQueryOptions.tsx
|
|
1619
1593
|
const declarationPrinter$1 = functionPrinter({ mode: "declaration" });
|
|
1620
|
-
const callPrinter
|
|
1594
|
+
const callPrinter = functionPrinter({ mode: "call" });
|
|
1621
1595
|
function SuspenseInfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam, nextParam, previousParam, node, tsResolver, queryParam, queryKeyName }) {
|
|
1622
1596
|
const successNames = resolveSuccessNames(node, tsResolver);
|
|
1623
1597
|
const queryFnDataType = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
|
|
@@ -1643,7 +1617,7 @@ function SuspenseInfiniteQueryOptions({ name, clientName, initialPageParam, curs
|
|
|
1643
1617
|
})}
|
|
1644
1618
|
return data`;
|
|
1645
1619
|
const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
|
|
1646
|
-
const queryKeyParamsCall = callPrinter
|
|
1620
|
+
const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? "";
|
|
1647
1621
|
const hasNewParams = nextParam != null || previousParam != null;
|
|
1648
1622
|
const [getNextPageParamExpr, getPreviousPageParamExpr] = (() => {
|
|
1649
1623
|
if (hasNewParams) {
|
|
@@ -1708,7 +1682,6 @@ return infiniteQueryOptions<${queryFnDataType}, ${errorType}, InfiniteData<${que
|
|
|
1708
1682
|
//#endregion
|
|
1709
1683
|
//#region src/components/SuspenseQuery.tsx
|
|
1710
1684
|
const declarationPrinter = functionPrinter({ mode: "declaration" });
|
|
1711
|
-
const callPrinter = functionPrinter({ mode: "call" });
|
|
1712
1685
|
function buildSuspenseQueryParamsNode(node, options) {
|
|
1713
1686
|
const { resolver } = options;
|
|
1714
1687
|
const successNames = resolveSuccessNames(node, resolver);
|
|
@@ -1727,7 +1700,10 @@ function buildSuspenseQueryParamsNode(node, options) {
|
|
|
1727
1700
|
}`,
|
|
1728
1701
|
default: "{}"
|
|
1729
1702
|
});
|
|
1730
|
-
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1703
|
+
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1704
|
+
resolver,
|
|
1705
|
+
memberTypeWrapper: maybeValueOrGetter
|
|
1706
|
+
}), optionsParam].filter((param) => param !== null) });
|
|
1731
1707
|
}
|
|
1732
1708
|
function SuspenseQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, customOptions }) {
|
|
1733
1709
|
const successNames = resolveSuccessNames(node, tsResolver);
|
|
@@ -1736,10 +1712,9 @@ function SuspenseQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
|
|
|
1736
1712
|
const TData = responseName;
|
|
1737
1713
|
const returnType = `UseSuspenseQueryResult<TData, ${`ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`}> & { queryKey: TQueryKey }`;
|
|
1738
1714
|
const generics = [`TData = ${TData}`, `TQueryKey extends QueryKey = ${queryKeyTypeName}`];
|
|
1739
|
-
const
|
|
1740
|
-
const
|
|
1741
|
-
const
|
|
1742
|
-
const queryOptionsParamsCall = callPrinter.print(queryOptionsParamsNode) ?? "";
|
|
1715
|
+
const resolvedParams = buildResolvedRequestParams(node);
|
|
1716
|
+
const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
|
|
1717
|
+
const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
|
|
1743
1718
|
const paramsNode = buildSuspenseQueryParamsNode(node, { resolver: tsResolver });
|
|
1744
1719
|
const paramsSignature = declarationPrinter.print(paramsNode) ?? "";
|
|
1745
1720
|
return /* @__PURE__ */ jsx(File.Source, {
|
|
@@ -1755,11 +1730,11 @@ function SuspenseQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
|
|
|
1755
1730
|
JSDoc: { comments: buildOperationComments(node) },
|
|
1756
1731
|
children: `
|
|
1757
1732
|
const { query: queryConfig = {}, client: config = {} } = options ?? {}
|
|
1758
|
-
const { client: queryClient, ...resolvedOptions } = queryConfig
|
|
1759
|
-
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${
|
|
1733
|
+
const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
|
|
1734
|
+
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
|
|
1760
1735
|
|
|
1761
1736
|
const queryResult = useSuspenseQuery({
|
|
1762
|
-
...${queryOptionsName}(${
|
|
1737
|
+
...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
|
|
1763
1738
|
...resolvedOptions,
|
|
1764
1739
|
queryKey,
|
|
1765
1740
|
} as unknown as UseSuspenseQueryOptions, queryClient) as ${returnType}
|
|
@@ -1785,7 +1760,7 @@ const infiniteQueryGenerator = defineGenerator({
|
|
|
1785
1760
|
operation(node, ctx) {
|
|
1786
1761
|
if (!ast.isHttpOperationNode(node)) return null;
|
|
1787
1762
|
const { config, driver, resolver, root } = ctx;
|
|
1788
|
-
const { output, query, mutation, infinite,
|
|
1763
|
+
const { output, query, mutation, infinite, client, group, customOptions, hooks } = ctx.options;
|
|
1789
1764
|
const pluginTs = driver.getPlugin(pluginTsName);
|
|
1790
1765
|
if (!pluginTs) return null;
|
|
1791
1766
|
const tsResolver = driver.getResolver(pluginTsName);
|
|
@@ -1835,14 +1810,6 @@ const infiniteQueryGenerator = defineGenerator({
|
|
|
1835
1810
|
includeParams: false
|
|
1836
1811
|
})
|
|
1837
1812
|
].filter((name) => Boolean(name));
|
|
1838
|
-
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(pluginZodName) : null;
|
|
1839
|
-
const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
|
|
1840
|
-
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
1841
|
-
root,
|
|
1842
|
-
output: pluginZod?.options?.output ?? output,
|
|
1843
|
-
group: pluginZod?.options?.group ?? void 0
|
|
1844
|
-
}) : null;
|
|
1845
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
1846
1813
|
const calledClientName = contractOp.name;
|
|
1847
1814
|
return /* @__PURE__ */ jsxs(File, {
|
|
1848
1815
|
baseName: meta.file.baseName,
|
|
@@ -1865,11 +1832,6 @@ const infiniteQueryGenerator = defineGenerator({
|
|
|
1865
1832
|
}
|
|
1866
1833
|
}),
|
|
1867
1834
|
children: [
|
|
1868
|
-
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ jsx(File.Import, {
|
|
1869
|
-
name: zodSchemaNames,
|
|
1870
|
-
root: meta.file.path,
|
|
1871
|
-
path: fileZod.path
|
|
1872
|
-
}),
|
|
1873
1835
|
/* @__PURE__ */ jsx(File.Import, {
|
|
1874
1836
|
name: [contractOp.name],
|
|
1875
1837
|
root: meta.file.path,
|
|
@@ -1919,31 +1881,33 @@ const infiniteQueryGenerator = defineGenerator({
|
|
|
1919
1881
|
initialPageParam: infiniteOptions.initialPageParam,
|
|
1920
1882
|
queryParam: infiniteOptions.queryParam
|
|
1921
1883
|
}),
|
|
1922
|
-
/* @__PURE__ */
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1884
|
+
hooks && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1885
|
+
/* @__PURE__ */ jsx(File.Import, {
|
|
1886
|
+
name: ["useInfiniteQuery"],
|
|
1887
|
+
path: importPath
|
|
1888
|
+
}),
|
|
1889
|
+
/* @__PURE__ */ jsx(File.Import, {
|
|
1890
|
+
name: [
|
|
1891
|
+
"QueryKey",
|
|
1892
|
+
"QueryClient",
|
|
1893
|
+
"InfiniteQueryObserverOptions",
|
|
1894
|
+
"UseInfiniteQueryResult"
|
|
1895
|
+
],
|
|
1896
|
+
path: importPath,
|
|
1897
|
+
isTypeOnly: true
|
|
1898
|
+
}),
|
|
1899
|
+
/* @__PURE__ */ jsx(InfiniteQuery, {
|
|
1900
|
+
name: queryName,
|
|
1901
|
+
queryOptionsName,
|
|
1902
|
+
queryKeyName,
|
|
1903
|
+
queryKeyTypeName,
|
|
1904
|
+
node,
|
|
1905
|
+
tsResolver,
|
|
1906
|
+
initialPageParam: infiniteOptions.initialPageParam,
|
|
1907
|
+
queryParam: infiniteOptions.queryParam,
|
|
1908
|
+
customOptions
|
|
1909
|
+
})
|
|
1910
|
+
] })
|
|
1947
1911
|
]
|
|
1948
1912
|
});
|
|
1949
1913
|
}
|
|
@@ -1961,7 +1925,7 @@ const mutationGenerator = defineGenerator({
|
|
|
1961
1925
|
operation(node, ctx) {
|
|
1962
1926
|
if (!ast.isHttpOperationNode(node)) return null;
|
|
1963
1927
|
const { config, driver, resolver, root } = ctx;
|
|
1964
|
-
const { output, query, mutation,
|
|
1928
|
+
const { output, query, mutation, client, group, customOptions, hooks } = ctx.options;
|
|
1965
1929
|
const pluginTs = driver.getPlugin(pluginTsName);
|
|
1966
1930
|
if (!pluginTs) return null;
|
|
1967
1931
|
const tsResolver = driver.getResolver(pluginTsName);
|
|
@@ -1997,14 +1961,6 @@ const mutationGenerator = defineGenerator({
|
|
|
1997
1961
|
order: "body-response-first",
|
|
1998
1962
|
includeParams: false
|
|
1999
1963
|
})].filter((name) => Boolean(name));
|
|
2000
|
-
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(pluginZodName) : null;
|
|
2001
|
-
const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
|
|
2002
|
-
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
2003
|
-
root,
|
|
2004
|
-
output: pluginZod?.options?.output ?? output,
|
|
2005
|
-
group: pluginZod?.options?.group ?? void 0
|
|
2006
|
-
}) : null;
|
|
2007
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
2008
1964
|
const calledClientName = contractOp.name;
|
|
2009
1965
|
return /* @__PURE__ */ jsxs(File, {
|
|
2010
1966
|
baseName: meta.file.baseName,
|
|
@@ -2027,11 +1983,6 @@ const mutationGenerator = defineGenerator({
|
|
|
2027
1983
|
}
|
|
2028
1984
|
}),
|
|
2029
1985
|
children: [
|
|
2030
|
-
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ jsx(File.Import, {
|
|
2031
|
-
name: zodSchemaNames,
|
|
2032
|
-
root: meta.file.path,
|
|
2033
|
-
path: fileZod.path
|
|
2034
|
-
}),
|
|
2035
1986
|
/* @__PURE__ */ jsx(File.Import, {
|
|
2036
1987
|
name: [contractOp.name],
|
|
2037
1988
|
root: meta.file.path,
|
|
@@ -2069,7 +2020,7 @@ const mutationGenerator = defineGenerator({
|
|
|
2069
2020
|
node,
|
|
2070
2021
|
tsResolver
|
|
2071
2022
|
}),
|
|
2072
|
-
mutation && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2023
|
+
mutation && hooks && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2073
2024
|
/* @__PURE__ */ jsx(File.Import, {
|
|
2074
2025
|
name: ["useMutation"],
|
|
2075
2026
|
path: importPath
|
|
@@ -2110,7 +2061,7 @@ const queryGenerator = defineGenerator({
|
|
|
2110
2061
|
operation(node, ctx) {
|
|
2111
2062
|
if (!ast.isHttpOperationNode(node)) return null;
|
|
2112
2063
|
const { config, driver, resolver, root } = ctx;
|
|
2113
|
-
const { output, query, mutation,
|
|
2064
|
+
const { output, query, mutation, client, group, customOptions, hooks } = ctx.options;
|
|
2114
2065
|
const pluginTs = driver.getPlugin(pluginTsName);
|
|
2115
2066
|
if (!pluginTs) return null;
|
|
2116
2067
|
const tsResolver = driver.getResolver(pluginTsName);
|
|
@@ -2148,14 +2099,6 @@ const queryGenerator = defineGenerator({
|
|
|
2148
2099
|
order: "body-response-first",
|
|
2149
2100
|
includeParams: false
|
|
2150
2101
|
})].filter((name) => Boolean(name));
|
|
2151
|
-
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(pluginZodName) : null;
|
|
2152
|
-
const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
|
|
2153
|
-
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
2154
|
-
root,
|
|
2155
|
-
output: pluginZod?.options?.output ?? output,
|
|
2156
|
-
group: pluginZod?.options?.group ?? void 0
|
|
2157
|
-
}) : null;
|
|
2158
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
2159
2102
|
const calledClientName = contractOp.name;
|
|
2160
2103
|
return /* @__PURE__ */ jsxs(File, {
|
|
2161
2104
|
baseName: meta.file.baseName,
|
|
@@ -2178,11 +2121,6 @@ const queryGenerator = defineGenerator({
|
|
|
2178
2121
|
}
|
|
2179
2122
|
}),
|
|
2180
2123
|
children: [
|
|
2181
|
-
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ jsx(File.Import, {
|
|
2182
|
-
name: zodSchemaNames,
|
|
2183
|
-
root: meta.file.path,
|
|
2184
|
-
path: fileZod.path
|
|
2185
|
-
}),
|
|
2186
2124
|
/* @__PURE__ */ jsx(File.Import, {
|
|
2187
2125
|
name: [contractOp.name],
|
|
2188
2126
|
root: meta.file.path,
|
|
@@ -2222,7 +2160,7 @@ const queryGenerator = defineGenerator({
|
|
|
2222
2160
|
node,
|
|
2223
2161
|
tsResolver
|
|
2224
2162
|
}),
|
|
2225
|
-
query && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2163
|
+
query && hooks && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2226
2164
|
/* @__PURE__ */ jsx(File.Import, {
|
|
2227
2165
|
name: ["useQuery"],
|
|
2228
2166
|
path: importPath
|
|
@@ -2256,7 +2194,7 @@ const queryGenerator = defineGenerator({
|
|
|
2256
2194
|
/**
|
|
2257
2195
|
* Built-in generator for `useSuspenseInfiniteQuery` hooks. Enabled when both
|
|
2258
2196
|
* `suspense` and `infinite` are configured. Combines suspense semantics with
|
|
2259
|
-
* cursor-based pagination
|
|
2197
|
+
* cursor-based pagination. Handlers throw promises while loading and pull
|
|
2260
2198
|
* additional pages on demand.
|
|
2261
2199
|
*/
|
|
2262
2200
|
const suspenseInfiniteQueryGenerator = defineGenerator({
|
|
@@ -2265,7 +2203,7 @@ const suspenseInfiniteQueryGenerator = defineGenerator({
|
|
|
2265
2203
|
operation(node, ctx) {
|
|
2266
2204
|
if (!ast.isHttpOperationNode(node)) return null;
|
|
2267
2205
|
const { config, driver, resolver, root } = ctx;
|
|
2268
|
-
const { output, query, mutation, infinite, suspense,
|
|
2206
|
+
const { output, query, mutation, infinite, suspense, client, group, customOptions, hooks } = ctx.options;
|
|
2269
2207
|
const pluginTs = driver.getPlugin(pluginTsName);
|
|
2270
2208
|
if (!pluginTs) return null;
|
|
2271
2209
|
const tsResolver = driver.getResolver(pluginTsName);
|
|
@@ -2315,14 +2253,6 @@ const suspenseInfiniteQueryGenerator = defineGenerator({
|
|
|
2315
2253
|
includeParams: false
|
|
2316
2254
|
})
|
|
2317
2255
|
].filter((name) => Boolean(name));
|
|
2318
|
-
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(pluginZodName) : null;
|
|
2319
|
-
const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
|
|
2320
|
-
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
2321
|
-
root,
|
|
2322
|
-
output: pluginZod?.options?.output ?? output,
|
|
2323
|
-
group: pluginZod?.options?.group ?? void 0
|
|
2324
|
-
}) : null;
|
|
2325
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
2326
2256
|
const calledClientName = contractOp.name;
|
|
2327
2257
|
return /* @__PURE__ */ jsxs(File, {
|
|
2328
2258
|
baseName: meta.file.baseName,
|
|
@@ -2345,11 +2275,6 @@ const suspenseInfiniteQueryGenerator = defineGenerator({
|
|
|
2345
2275
|
}
|
|
2346
2276
|
}),
|
|
2347
2277
|
children: [
|
|
2348
|
-
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ jsx(File.Import, {
|
|
2349
|
-
name: zodSchemaNames,
|
|
2350
|
-
root: meta.file.path,
|
|
2351
|
-
path: fileZod.path
|
|
2352
|
-
}),
|
|
2353
2278
|
/* @__PURE__ */ jsx(File.Import, {
|
|
2354
2279
|
name: [contractOp.name],
|
|
2355
2280
|
root: meta.file.path,
|
|
@@ -2399,31 +2324,33 @@ const suspenseInfiniteQueryGenerator = defineGenerator({
|
|
|
2399
2324
|
initialPageParam: infiniteOptions.initialPageParam,
|
|
2400
2325
|
queryParam: infiniteOptions.queryParam
|
|
2401
2326
|
}),
|
|
2402
|
-
/* @__PURE__ */
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
|
|
2408
|
-
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2327
|
+
hooks && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2328
|
+
/* @__PURE__ */ jsx(File.Import, {
|
|
2329
|
+
name: ["useSuspenseInfiniteQuery"],
|
|
2330
|
+
path: importPath
|
|
2331
|
+
}),
|
|
2332
|
+
/* @__PURE__ */ jsx(File.Import, {
|
|
2333
|
+
name: [
|
|
2334
|
+
"QueryKey",
|
|
2335
|
+
"QueryClient",
|
|
2336
|
+
"UseSuspenseInfiniteQueryOptions",
|
|
2337
|
+
"UseSuspenseInfiniteQueryResult"
|
|
2338
|
+
],
|
|
2339
|
+
path: importPath,
|
|
2340
|
+
isTypeOnly: true
|
|
2341
|
+
}),
|
|
2342
|
+
/* @__PURE__ */ jsx(SuspenseInfiniteQuery, {
|
|
2343
|
+
name: queryName,
|
|
2344
|
+
queryOptionsName,
|
|
2345
|
+
queryKeyName,
|
|
2346
|
+
queryKeyTypeName,
|
|
2347
|
+
node,
|
|
2348
|
+
tsResolver,
|
|
2349
|
+
initialPageParam: infiniteOptions.initialPageParam,
|
|
2350
|
+
queryParam: infiniteOptions.queryParam,
|
|
2351
|
+
customOptions
|
|
2352
|
+
})
|
|
2353
|
+
] })
|
|
2427
2354
|
]
|
|
2428
2355
|
});
|
|
2429
2356
|
}
|
|
@@ -2442,7 +2369,7 @@ const suspenseQueryGenerator = defineGenerator({
|
|
|
2442
2369
|
operation(node, ctx) {
|
|
2443
2370
|
if (!ast.isHttpOperationNode(node)) return null;
|
|
2444
2371
|
const { config, driver, resolver, root } = ctx;
|
|
2445
|
-
const { output, query, mutation, suspense,
|
|
2372
|
+
const { output, query, mutation, suspense, client, group, customOptions, hooks } = ctx.options;
|
|
2446
2373
|
const pluginTs = driver.getPlugin(pluginTsName);
|
|
2447
2374
|
if (!pluginTs) return null;
|
|
2448
2375
|
const tsResolver = driver.getResolver(pluginTsName);
|
|
@@ -2480,14 +2407,6 @@ const suspenseQueryGenerator = defineGenerator({
|
|
|
2480
2407
|
order: "body-response-first",
|
|
2481
2408
|
includeParams: false
|
|
2482
2409
|
})].filter((name) => Boolean(name));
|
|
2483
|
-
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(pluginZodName) : null;
|
|
2484
|
-
const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
|
|
2485
|
-
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
2486
|
-
root,
|
|
2487
|
-
output: pluginZod?.options?.output ?? output,
|
|
2488
|
-
group: pluginZod?.options?.group ?? void 0
|
|
2489
|
-
}) : null;
|
|
2490
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
2491
2410
|
const calledClientName = contractOp.name;
|
|
2492
2411
|
return /* @__PURE__ */ jsxs(File, {
|
|
2493
2412
|
baseName: meta.file.baseName,
|
|
@@ -2510,11 +2429,6 @@ const suspenseQueryGenerator = defineGenerator({
|
|
|
2510
2429
|
}
|
|
2511
2430
|
}),
|
|
2512
2431
|
children: [
|
|
2513
|
-
fileZod && zodSchemaNames.length > 0 && /* @__PURE__ */ jsx(File.Import, {
|
|
2514
|
-
name: zodSchemaNames,
|
|
2515
|
-
root: meta.file.path,
|
|
2516
|
-
path: fileZod.path
|
|
2517
|
-
}),
|
|
2518
2432
|
/* @__PURE__ */ jsx(File.Import, {
|
|
2519
2433
|
name: [contractOp.name],
|
|
2520
2434
|
root: meta.file.path,
|
|
@@ -2554,7 +2468,7 @@ const suspenseQueryGenerator = defineGenerator({
|
|
|
2554
2468
|
node,
|
|
2555
2469
|
tsResolver
|
|
2556
2470
|
}),
|
|
2557
|
-
suspense && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2471
|
+
suspense && hooks && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2558
2472
|
/* @__PURE__ */ jsx(File.Import, {
|
|
2559
2473
|
name: ["useSuspenseQuery"],
|
|
2560
2474
|
path: importPath
|
|
@@ -2707,8 +2621,8 @@ const resolverReactQuery = defineResolver(() => ({
|
|
|
2707
2621
|
const pluginReactQueryName = "plugin-react-query";
|
|
2708
2622
|
/**
|
|
2709
2623
|
* Generates one TanStack Query hook per OpenAPI operation for React. Queries
|
|
2710
|
-
* become `
|
|
2711
|
-
* become `
|
|
2624
|
+
* become `useFoo`, with `useFooSuspense` and `useFooInfinite` variants.
|
|
2625
|
+
* Mutations become `useFoo`. Each hook is fully typed: query keys, input
|
|
2712
2626
|
* variables, response data, and error shape all come from the spec.
|
|
2713
2627
|
*
|
|
2714
2628
|
* @example
|
|
@@ -2734,7 +2648,7 @@ const pluginReactQuery = definePlugin((options) => {
|
|
|
2734
2648
|
const { output = {
|
|
2735
2649
|
path: "hooks",
|
|
2736
2650
|
barrel: { type: "named" }
|
|
2737
|
-
}, group, exclude = [], include, override = [],
|
|
2651
|
+
}, group, exclude = [], include, override = [], suspense = {}, infinite = false, mutation = {}, query = {}, mutationKey = mutationKeyTransformer, queryKey = queryKeyTransformer, customOptions, hooks = false, client, resolver: userResolver, macros: userMacros } = options;
|
|
2738
2652
|
const selectedGenerators = [
|
|
2739
2653
|
queryGenerator,
|
|
2740
2654
|
suspenseQueryGenerator,
|
|
@@ -2748,7 +2662,7 @@ const pluginReactQuery = definePlugin((options) => {
|
|
|
2748
2662
|
return {
|
|
2749
2663
|
name: pluginReactQueryName,
|
|
2750
2664
|
options,
|
|
2751
|
-
dependencies: [pluginTsName
|
|
2665
|
+
dependencies: [pluginTsName],
|
|
2752
2666
|
hooks: { "kubb:plugin:setup"(ctx) {
|
|
2753
2667
|
const resolver = userResolver ? {
|
|
2754
2668
|
...resolverReactQuery,
|
|
@@ -2796,7 +2710,7 @@ const pluginReactQuery = definePlugin((options) => {
|
|
|
2796
2710
|
name: "useCustomHookOptions",
|
|
2797
2711
|
...customOptions
|
|
2798
2712
|
} : null,
|
|
2799
|
-
|
|
2713
|
+
hooks,
|
|
2800
2714
|
group: groupConfig,
|
|
2801
2715
|
exclude,
|
|
2802
2716
|
include,
|