@kubb/plugin-react-query 5.0.0-beta.77 → 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 +257 -179
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +16 -5
- package/dist/index.js +257 -179
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
package/dist/index.js
CHANGED
|
@@ -64,7 +64,7 @@ function toFilePath(name, caseLast = camelCase) {
|
|
|
64
64
|
* JavaScript and Java reserved words.
|
|
65
65
|
* @link https://github.com/jonschlinkert/reserved/blob/master/index.js
|
|
66
66
|
*/
|
|
67
|
-
const reservedWords = new Set([
|
|
67
|
+
const reservedWords = /* @__PURE__ */ new Set([
|
|
68
68
|
"abstract",
|
|
69
69
|
"arguments",
|
|
70
70
|
"boolean",
|
|
@@ -293,6 +293,23 @@ function caseParams(params, casing) {
|
|
|
293
293
|
caseParamsCache.set(params, result);
|
|
294
294
|
return result;
|
|
295
295
|
}
|
|
296
|
+
/**
|
|
297
|
+
* Drops parameters that collapse to the same property identity once camelCased, keeping the first.
|
|
298
|
+
*
|
|
299
|
+
* Some specs declare the same parameter twice under different casings (for example AWS S3 lists both
|
|
300
|
+
* `max-uploads` and `MaxUploads`). Both resolve to one output property, so emitting both would yield
|
|
301
|
+
* an object type with a duplicate member, which TypeScript rejects. De-duplicate by the camelCased
|
|
302
|
+
* identity so the resulting group is collision-free regardless of the names each caller carries.
|
|
303
|
+
*/
|
|
304
|
+
function dedupeByCasedName(params) {
|
|
305
|
+
const seen = /* @__PURE__ */ new Set();
|
|
306
|
+
return params.filter((param) => {
|
|
307
|
+
const key = camelCase(param.name);
|
|
308
|
+
if (seen.has(key)) return false;
|
|
309
|
+
seen.add(key);
|
|
310
|
+
return true;
|
|
311
|
+
});
|
|
312
|
+
}
|
|
296
313
|
//#endregion
|
|
297
314
|
//#region ../../internals/shared/src/operation.ts
|
|
298
315
|
/**
|
|
@@ -331,11 +348,27 @@ function getContentTypeInfo(node) {
|
|
|
331
348
|
hasFormData: contentTypes.some((ct) => ct === "multipart/form-data")
|
|
332
349
|
};
|
|
333
350
|
}
|
|
351
|
+
/**
|
|
352
|
+
* The request-body counterpart for the primary success response: the content types it documents and
|
|
353
|
+
* whether several are present, so the client can let a caller pick which one to accept.
|
|
354
|
+
*/
|
|
355
|
+
function getResponseContentTypeInfo(node) {
|
|
356
|
+
const contentTypes = getPrimarySuccessResponse(node)?.content?.map((e) => e.contentType) ?? [];
|
|
357
|
+
const isMultipleContentTypes = contentTypes.length > 1;
|
|
358
|
+
return {
|
|
359
|
+
contentTypes,
|
|
360
|
+
isMultipleContentTypes,
|
|
361
|
+
contentTypeUnion: isMultipleContentTypes ? contentTypes.map((ct) => JSON.stringify(ct)).join(" | ") : "",
|
|
362
|
+
defaultContentType: contentTypes[0] ?? "application/json",
|
|
363
|
+
hasFormData: contentTypes.some((ct) => ct === "multipart/form-data")
|
|
364
|
+
};
|
|
365
|
+
}
|
|
334
366
|
function buildRequestConfigType(node) {
|
|
335
|
-
const
|
|
367
|
+
const request = getContentTypeInfo(node);
|
|
368
|
+
const response = getResponseContentTypeInfo(node);
|
|
336
369
|
const configType = `Partial<Omit<RequestConfig, 'path' | 'query' | 'body' | 'headers' | 'url'>>`;
|
|
337
|
-
const
|
|
338
|
-
return
|
|
370
|
+
const members = [request.isMultipleContentTypes ? `request?: ${request.contentTypeUnion}` : null, response.isMultipleContentTypes ? `response?: ${response.contentTypeUnion}` : null].filter(Boolean);
|
|
371
|
+
return members.length ? `${configType} & { contentType?: { ${members.join("; ")} } }` : configType;
|
|
339
372
|
}
|
|
340
373
|
/**
|
|
341
374
|
* Builds the `client?:` option type shared by the generated query hooks (`useQuery`,
|
|
@@ -397,10 +430,10 @@ function buildOperationComments(node, options = {}) {
|
|
|
397
430
|
function getOperationParameters(node, options = {}) {
|
|
398
431
|
const params = caseParams(node.parameters, options.paramsCasing === "original" ? void 0 : "camelcase");
|
|
399
432
|
return {
|
|
400
|
-
path: params.filter((param) => param.in === "path"),
|
|
401
|
-
query: params.filter((param) => param.in === "query"),
|
|
402
|
-
header: params.filter((param) => param.in === "header"),
|
|
403
|
-
cookie: params.filter((param) => param.in === "cookie")
|
|
433
|
+
path: dedupeByCasedName(params.filter((param) => param.in === "path")),
|
|
434
|
+
query: dedupeByCasedName(params.filter((param) => param.in === "query")),
|
|
435
|
+
header: dedupeByCasedName(params.filter((param) => param.in === "header")),
|
|
436
|
+
cookie: dedupeByCasedName(params.filter((param) => param.in === "cookie"))
|
|
404
437
|
};
|
|
405
438
|
}
|
|
406
439
|
function getStatusCodeNumber(statusCode) {
|
|
@@ -415,6 +448,15 @@ function isErrorStatusCode(statusCode) {
|
|
|
415
448
|
const code = getStatusCodeNumber(statusCode);
|
|
416
449
|
return code !== null && code >= 400;
|
|
417
450
|
}
|
|
451
|
+
function getSuccessResponses(responses) {
|
|
452
|
+
return responses.filter((response) => isSuccessStatusCode(response.statusCode));
|
|
453
|
+
}
|
|
454
|
+
function getOperationSuccessResponses(node) {
|
|
455
|
+
return getSuccessResponses(node.responses);
|
|
456
|
+
}
|
|
457
|
+
function getPrimarySuccessResponse(node) {
|
|
458
|
+
return getOperationSuccessResponses(node)[0] ?? null;
|
|
459
|
+
}
|
|
418
460
|
function resolveErrorNames(node, resolver) {
|
|
419
461
|
return node.responses.filter((response) => isErrorStatusCode(response.statusCode)).map((response) => resolver.resolveResponseStatusName(node, response.statusCode));
|
|
420
462
|
}
|
|
@@ -488,14 +530,14 @@ function createGroupConfig(group) {
|
|
|
488
530
|
};
|
|
489
531
|
}
|
|
490
532
|
//#endregion
|
|
491
|
-
//#region ../../internals/client/src/builders/
|
|
533
|
+
//#region ../../internals/client/src/builders/validatorOptions.ts
|
|
492
534
|
/**
|
|
493
|
-
* Returns `true` when any direction of the
|
|
535
|
+
* Returns `true` when any direction of the validator uses zod (used for dependency checks).
|
|
494
536
|
*/
|
|
495
|
-
function
|
|
496
|
-
if (!
|
|
497
|
-
if (
|
|
498
|
-
return Boolean(
|
|
537
|
+
function isValidatorEnabled(validator) {
|
|
538
|
+
if (!validator) return false;
|
|
539
|
+
if (validator === "zod") return true;
|
|
540
|
+
return Boolean(validator.request || validator.response);
|
|
499
541
|
}
|
|
500
542
|
//#endregion
|
|
501
543
|
//#region ../../internals/client/src/resolveClient.ts
|
|
@@ -623,12 +665,15 @@ function MutationKey({ name, node, transformer }) {
|
|
|
623
665
|
* The grouped request options, ordered for both the destructured signature and the
|
|
624
666
|
* call passed to the underlying client.
|
|
625
667
|
*/
|
|
626
|
-
const requestGroupOrder = [
|
|
668
|
+
const requestGroupOrder$1 = [
|
|
627
669
|
"path",
|
|
628
670
|
"query",
|
|
629
671
|
"body",
|
|
630
672
|
"headers"
|
|
631
673
|
];
|
|
674
|
+
function maybeValueOrGetter(type) {
|
|
675
|
+
return `${type} | (() => ${type})`;
|
|
676
|
+
}
|
|
632
677
|
/**
|
|
633
678
|
* Builds the grouped `{ path, query, body, headers }` parameter that mirrors the client
|
|
634
679
|
* function signature. Only the groups the operation carries are emitted, typed from the
|
|
@@ -641,7 +686,7 @@ const requestGroupOrder = [
|
|
|
641
686
|
* `MaybeRefOrGetter` per group.
|
|
642
687
|
*/
|
|
643
688
|
function buildGroupedRequestParam(node, options) {
|
|
644
|
-
const { resolver, keys = requestGroupOrder, memberTypeWrapper } = options;
|
|
689
|
+
const { resolver, keys = requestGroupOrder$1, memberTypeWrapper } = options;
|
|
645
690
|
const { groups, hasRequiredPath, hasRequiredQuery, hasRequiredHeader } = getRequestGroupOptionality(node);
|
|
646
691
|
const names = keys.filter((key) => groups[key]);
|
|
647
692
|
if (names.length === 0) return null;
|
|
@@ -653,7 +698,7 @@ function buildGroupedRequestParam(node, options) {
|
|
|
653
698
|
};
|
|
654
699
|
const isOptional = names.every((name) => !requiredByGroup[name]);
|
|
655
700
|
const requestConfigName = resolver.resolveRequestConfigName(node);
|
|
656
|
-
const omittedKeys = requestGroupOrder.filter((key) => !keys.includes(key));
|
|
701
|
+
const omittedKeys = requestGroupOrder$1.filter((key) => !keys.includes(key));
|
|
657
702
|
const requestConfigType = omittedKeys.length > 0 ? `Omit<${requestConfigName}, ${omittedKeys.map((key) => `'${key}'`).join(" | ")}>` : requestConfigName;
|
|
658
703
|
if (memberTypeWrapper) {
|
|
659
704
|
const members = names.map((name) => ({
|
|
@@ -709,7 +754,7 @@ function buildClientCall(node, options) {
|
|
|
709
754
|
const { groups } = getRequestGroupOptionality(node);
|
|
710
755
|
return `${clientName}({ ${[
|
|
711
756
|
"...config",
|
|
712
|
-
...requestGroupOrder.filter((key) => groups[key]),
|
|
757
|
+
...requestGroupOrder$1.filter((key) => groups[key]),
|
|
713
758
|
signal ? "signal: config.signal ?? signal" : null,
|
|
714
759
|
"throwOnError: true"
|
|
715
760
|
].filter((part) => part !== null).join(", ")} })`;
|
|
@@ -936,6 +981,30 @@ const customHookOptionsFileGenerator = defineGenerator({
|
|
|
936
981
|
}
|
|
937
982
|
});
|
|
938
983
|
//#endregion
|
|
984
|
+
//#region src/utils.ts
|
|
985
|
+
const requestGroupOrder = [
|
|
986
|
+
"path",
|
|
987
|
+
"query",
|
|
988
|
+
"body",
|
|
989
|
+
"headers"
|
|
990
|
+
];
|
|
991
|
+
/**
|
|
992
|
+
* Builds the object literal that resolves each request group to a concrete value, unwrapping a getter
|
|
993
|
+
* once before the value reaches the plain `queryKey`/`queryOptions` helpers. A getter must never reach a
|
|
994
|
+
* React Query key, which is hashed structurally. Returns `null` when the operation carries no request group.
|
|
995
|
+
*
|
|
996
|
+
* @example
|
|
997
|
+
* ```ts
|
|
998
|
+
* buildResolvedRequestParams(node) // { path: typeof path === 'function' ? path() : path }
|
|
999
|
+
* ```
|
|
1000
|
+
*/
|
|
1001
|
+
function buildResolvedRequestParams(node) {
|
|
1002
|
+
const groups = getRequestGroups(node);
|
|
1003
|
+
const names = requestGroupOrder.filter((key) => groups[key]);
|
|
1004
|
+
if (names.length === 0) return null;
|
|
1005
|
+
return `{ ${names.map((name) => `${name}: typeof ${name} === 'function' ? ${name}() : ${name}`).join(", ")} }`;
|
|
1006
|
+
}
|
|
1007
|
+
//#endregion
|
|
939
1008
|
//#region src/generators/hookOptionsGenerator.tsx
|
|
940
1009
|
/**
|
|
941
1010
|
* Emits the `HookOptions` type used by `customOptions`. Enabled when
|
|
@@ -948,8 +1017,8 @@ const hookOptionsGenerator = defineGenerator({
|
|
|
948
1017
|
renderer: jsxRenderer,
|
|
949
1018
|
operations(nodes, ctx) {
|
|
950
1019
|
const { resolver, config, root } = ctx;
|
|
951
|
-
const { output, customOptions, query, mutation, suspense, infinite, group, override } = ctx.options;
|
|
952
|
-
if (!customOptions) return null;
|
|
1020
|
+
const { output, customOptions, query, mutation, suspense, infinite, group, override, hooks } = ctx.options;
|
|
1021
|
+
if (!customOptions || !hooks) return null;
|
|
953
1022
|
const name = resolver.resolveHookOptionsName();
|
|
954
1023
|
const resolvedFile = resolver.resolveFile({
|
|
955
1024
|
name,
|
|
@@ -1093,51 +1162,8 @@ const hookOptionsGenerator = defineGenerator({
|
|
|
1093
1162
|
}
|
|
1094
1163
|
});
|
|
1095
1164
|
//#endregion
|
|
1096
|
-
//#region src/components/QueryOptions.tsx
|
|
1097
|
-
const declarationPrinter$8 = functionPrinter({ mode: "declaration" });
|
|
1098
|
-
const callPrinter$8 = functionPrinter({ mode: "call" });
|
|
1099
|
-
function getQueryOptionsParams(node, options) {
|
|
1100
|
-
return buildQueryOptionsParams(node, options);
|
|
1101
|
-
}
|
|
1102
|
-
function QueryOptions({ name, clientName, node, tsResolver, queryKeyName }) {
|
|
1103
|
-
const successNames = resolveSuccessNames(node, tsResolver);
|
|
1104
|
-
const responseName = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
|
|
1105
|
-
const errorNames = resolveErrorNames(node, tsResolver);
|
|
1106
|
-
const TData = responseName;
|
|
1107
|
-
const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`;
|
|
1108
|
-
const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
|
|
1109
|
-
const queryKeyParamsCall = callPrinter$8.print(queryKeyParamsNode) ?? "";
|
|
1110
|
-
const paramsNode = getQueryOptionsParams(node, { resolver: tsResolver });
|
|
1111
|
-
const paramsSignature = declarationPrinter$8.print(paramsNode) ?? "";
|
|
1112
|
-
const queryFnBody = `const { data } = await ${buildClientCall(node, {
|
|
1113
|
-
clientName,
|
|
1114
|
-
signal: true
|
|
1115
|
-
})}
|
|
1116
|
-
return data`;
|
|
1117
|
-
return /* @__PURE__ */ jsx(File.Source, {
|
|
1118
|
-
name,
|
|
1119
|
-
isExportable: true,
|
|
1120
|
-
isIndexable: true,
|
|
1121
|
-
children: /* @__PURE__ */ jsx(Function, {
|
|
1122
|
-
name,
|
|
1123
|
-
export: true,
|
|
1124
|
-
params: paramsSignature,
|
|
1125
|
-
children: `
|
|
1126
|
-
const queryKey = ${queryKeyName}(${queryKeyParamsCall})
|
|
1127
|
-
return queryOptions<${TData}, ${TError}, ${TData}, typeof queryKey>({
|
|
1128
|
-
queryKey,
|
|
1129
|
-
queryFn: async ({ signal }) => {
|
|
1130
|
-
${queryFnBody}
|
|
1131
|
-
},
|
|
1132
|
-
})
|
|
1133
|
-
`
|
|
1134
|
-
})
|
|
1135
|
-
});
|
|
1136
|
-
}
|
|
1137
|
-
//#endregion
|
|
1138
1165
|
//#region src/components/InfiniteQuery.tsx
|
|
1139
|
-
const declarationPrinter$
|
|
1140
|
-
const callPrinter$7 = functionPrinter({ mode: "call" });
|
|
1166
|
+
const declarationPrinter$8 = functionPrinter({ mode: "declaration" });
|
|
1141
1167
|
function buildInfiniteQueryParamsNode(node, options) {
|
|
1142
1168
|
const { resolver, pageParamGeneric } = options;
|
|
1143
1169
|
const optionsParam = createFunctionParameter({
|
|
@@ -1148,7 +1174,10 @@ function buildInfiniteQueryParamsNode(node, options) {
|
|
|
1148
1174
|
}`,
|
|
1149
1175
|
default: "{}"
|
|
1150
1176
|
});
|
|
1151
|
-
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1177
|
+
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1178
|
+
resolver,
|
|
1179
|
+
memberTypeWrapper: maybeValueOrGetter
|
|
1180
|
+
}), optionsParam].filter((param) => param !== null) });
|
|
1152
1181
|
}
|
|
1153
1182
|
function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, initialPageParam, queryParam, customOptions }) {
|
|
1154
1183
|
const successNames = resolveSuccessNames(node, tsResolver);
|
|
@@ -1176,15 +1205,14 @@ function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
|
|
|
1176
1205
|
`TQueryKey extends QueryKey = ${queryKeyTypeName}`,
|
|
1177
1206
|
`TPageParam = ${pageParamType}`
|
|
1178
1207
|
];
|
|
1179
|
-
const
|
|
1180
|
-
const
|
|
1181
|
-
const
|
|
1182
|
-
const queryOptionsParamsCall = callPrinter$7.print(queryOptionsParamsNode) ?? "";
|
|
1208
|
+
const resolvedParams = buildResolvedRequestParams(node);
|
|
1209
|
+
const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
|
|
1210
|
+
const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
|
|
1183
1211
|
const paramsNode = buildInfiniteQueryParamsNode(node, {
|
|
1184
1212
|
resolver: tsResolver,
|
|
1185
1213
|
pageParamGeneric: "TPageParam"
|
|
1186
1214
|
});
|
|
1187
|
-
const paramsSignature = declarationPrinter$
|
|
1215
|
+
const paramsSignature = declarationPrinter$8.print(paramsNode) ?? "";
|
|
1188
1216
|
return /* @__PURE__ */ jsx(File.Source, {
|
|
1189
1217
|
name,
|
|
1190
1218
|
isExportable: true,
|
|
@@ -1198,11 +1226,11 @@ function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
|
|
|
1198
1226
|
JSDoc: { comments: buildOperationComments(node) },
|
|
1199
1227
|
children: `
|
|
1200
1228
|
const { query: queryConfig = {}, client: config = {} } = options ?? {}
|
|
1201
|
-
const { client: queryClient, ...resolvedOptions } = queryConfig
|
|
1202
|
-
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${
|
|
1229
|
+
const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
|
|
1230
|
+
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
|
|
1203
1231
|
|
|
1204
1232
|
const queryResult = useInfiniteQuery({
|
|
1205
|
-
...${queryOptionsName}(${
|
|
1233
|
+
...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
|
|
1206
1234
|
...resolvedOptions,
|
|
1207
1235
|
queryKey,
|
|
1208
1236
|
} as unknown as InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient) as ${returnType}
|
|
@@ -1215,9 +1243,51 @@ function InfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
|
|
|
1215
1243
|
});
|
|
1216
1244
|
}
|
|
1217
1245
|
//#endregion
|
|
1246
|
+
//#region src/components/QueryOptions.tsx
|
|
1247
|
+
const declarationPrinter$7 = functionPrinter({ mode: "declaration" });
|
|
1248
|
+
const callPrinter$4 = functionPrinter({ mode: "call" });
|
|
1249
|
+
function getQueryOptionsParams(node, options) {
|
|
1250
|
+
return buildQueryOptionsParams(node, options);
|
|
1251
|
+
}
|
|
1252
|
+
function QueryOptions({ name, clientName, node, tsResolver, queryKeyName }) {
|
|
1253
|
+
const successNames = resolveSuccessNames(node, tsResolver);
|
|
1254
|
+
const responseName = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
|
|
1255
|
+
const errorNames = resolveErrorNames(node, tsResolver);
|
|
1256
|
+
const TData = responseName;
|
|
1257
|
+
const TError = `ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`;
|
|
1258
|
+
const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
|
|
1259
|
+
const queryKeyParamsCall = callPrinter$4.print(queryKeyParamsNode) ?? "";
|
|
1260
|
+
const paramsNode = getQueryOptionsParams(node, { resolver: tsResolver });
|
|
1261
|
+
const paramsSignature = declarationPrinter$7.print(paramsNode) ?? "";
|
|
1262
|
+
const queryFnBody = `const { data } = await ${buildClientCall(node, {
|
|
1263
|
+
clientName,
|
|
1264
|
+
signal: true
|
|
1265
|
+
})}
|
|
1266
|
+
return data`;
|
|
1267
|
+
return /* @__PURE__ */ jsx(File.Source, {
|
|
1268
|
+
name,
|
|
1269
|
+
isExportable: true,
|
|
1270
|
+
isIndexable: true,
|
|
1271
|
+
children: /* @__PURE__ */ jsx(Function, {
|
|
1272
|
+
name,
|
|
1273
|
+
export: true,
|
|
1274
|
+
params: paramsSignature,
|
|
1275
|
+
children: `
|
|
1276
|
+
const queryKey = ${queryKeyName}(${queryKeyParamsCall})
|
|
1277
|
+
return queryOptions<${TData}, ${TError}, ${TData}, typeof queryKey>({
|
|
1278
|
+
queryKey,
|
|
1279
|
+
queryFn: async ({ signal }) => {
|
|
1280
|
+
${queryFnBody}
|
|
1281
|
+
},
|
|
1282
|
+
})
|
|
1283
|
+
`
|
|
1284
|
+
})
|
|
1285
|
+
});
|
|
1286
|
+
}
|
|
1287
|
+
//#endregion
|
|
1218
1288
|
//#region src/components/InfiniteQueryOptions.tsx
|
|
1219
1289
|
const declarationPrinter$6 = functionPrinter({ mode: "declaration" });
|
|
1220
|
-
const callPrinter$
|
|
1290
|
+
const callPrinter$3 = functionPrinter({ mode: "call" });
|
|
1221
1291
|
function InfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam, nextParam, previousParam, node, tsResolver, queryParam, queryKeyName }) {
|
|
1222
1292
|
const successNames = resolveSuccessNames(node, tsResolver);
|
|
1223
1293
|
const queryFnDataType = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
|
|
@@ -1236,7 +1306,7 @@ function InfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam,
|
|
|
1236
1306
|
const queryParamType = queryParam && queryParamsTypeName ? `${queryParamsTypeName}['${queryParam}']` : null;
|
|
1237
1307
|
const pageParamType = queryParamType ? isInitialPageParamDefined ? `NonNullable<${queryParamType}>` : queryParamType : fallbackPageParamType;
|
|
1238
1308
|
const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
|
|
1239
|
-
const queryKeyParamsCall = callPrinter$
|
|
1309
|
+
const queryKeyParamsCall = callPrinter$3.print(queryKeyParamsNode) ?? "";
|
|
1240
1310
|
const paramsNode = getQueryOptionsParams(node, { resolver: tsResolver });
|
|
1241
1311
|
const paramsSignature = declarationPrinter$6.print(paramsNode) ?? "";
|
|
1242
1312
|
const queryFnBody = `const { data } = await ${buildClientCall(node, {
|
|
@@ -1308,7 +1378,7 @@ return infiniteQueryOptions<${queryFnDataType}, ${errorType}, InfiniteData<${que
|
|
|
1308
1378
|
//#endregion
|
|
1309
1379
|
//#region src/components/MutationOptions.tsx
|
|
1310
1380
|
const declarationPrinter$5 = functionPrinter({ mode: "declaration" });
|
|
1311
|
-
const callPrinter$
|
|
1381
|
+
const callPrinter$2 = functionPrinter({ mode: "call" });
|
|
1312
1382
|
function buildMutationConfigParamsNode(node) {
|
|
1313
1383
|
return createFunctionParameters({ params: [createFunctionParameter({
|
|
1314
1384
|
name: "config",
|
|
@@ -1327,7 +1397,7 @@ function MutationOptions({ name, clientName, node, tsResolver, mutationKeyName }
|
|
|
1327
1397
|
const hasMutationParams = groupedParam !== null;
|
|
1328
1398
|
const groupedParamsNode = createFunctionParameters({ params: groupedParam ? [groupedParam] : [] });
|
|
1329
1399
|
const TRequest = hasMutationParams ? tsResolver.resolveRequestConfigName(node) : "undefined";
|
|
1330
|
-
const argBindingStr = hasMutationParams ? callPrinter$
|
|
1400
|
+
const argBindingStr = hasMutationParams ? callPrinter$2.print(groupedParamsNode) ?? "" : "_";
|
|
1331
1401
|
const mutationFnBody = `const { data } = await ${buildClientCall(node, {
|
|
1332
1402
|
clientName,
|
|
1333
1403
|
signal: false
|
|
@@ -1357,7 +1427,7 @@ function MutationOptions({ name, clientName, node, tsResolver, mutationKeyName }
|
|
|
1357
1427
|
//#endregion
|
|
1358
1428
|
//#region src/components/Mutation.tsx
|
|
1359
1429
|
const declarationPrinter$4 = functionPrinter({ mode: "declaration" });
|
|
1360
|
-
const callPrinter$
|
|
1430
|
+
const callPrinter$1 = functionPrinter({ mode: "call" });
|
|
1361
1431
|
function resolveMutationRequestType(node, resolver) {
|
|
1362
1432
|
return buildGroupedRequestParam(node, { resolver }) ? resolver.resolveRequestConfigName(node) : "undefined";
|
|
1363
1433
|
}
|
|
@@ -1392,7 +1462,7 @@ function Mutation({ name, mutationOptionsName, node, tsResolver, mutationKeyName
|
|
|
1392
1462
|
].join(", ");
|
|
1393
1463
|
const returnType = `UseMutationResult<${generics}>`;
|
|
1394
1464
|
const mutationOptionsConfigNode = buildMutationConfigParamsNode(node);
|
|
1395
|
-
const mutationOptionsParamsCall = callPrinter$
|
|
1465
|
+
const mutationOptionsParamsCall = callPrinter$1.print(mutationOptionsConfigNode) ?? "";
|
|
1396
1466
|
const paramsNode = buildMutationParamsNode(node, { resolver: tsResolver });
|
|
1397
1467
|
const paramsSignature = declarationPrinter$4.print(paramsNode) ?? "";
|
|
1398
1468
|
return /* @__PURE__ */ jsx(File.Source, {
|
|
@@ -1424,7 +1494,6 @@ function Mutation({ name, mutationOptionsName, node, tsResolver, mutationKeyName
|
|
|
1424
1494
|
//#endregion
|
|
1425
1495
|
//#region src/components/Query.tsx
|
|
1426
1496
|
const declarationPrinter$3 = functionPrinter({ mode: "declaration" });
|
|
1427
|
-
const callPrinter$3 = functionPrinter({ mode: "call" });
|
|
1428
1497
|
function buildQueryParamsNode(node, options) {
|
|
1429
1498
|
const { resolver } = options;
|
|
1430
1499
|
const successNames = resolveSuccessNames(node, resolver);
|
|
@@ -1444,7 +1513,10 @@ function buildQueryParamsNode(node, options) {
|
|
|
1444
1513
|
}`,
|
|
1445
1514
|
default: "{}"
|
|
1446
1515
|
});
|
|
1447
|
-
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1516
|
+
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1517
|
+
resolver,
|
|
1518
|
+
memberTypeWrapper: maybeValueOrGetter
|
|
1519
|
+
}), optionsParam].filter((param) => param !== null) });
|
|
1448
1520
|
}
|
|
1449
1521
|
function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, customOptions }) {
|
|
1450
1522
|
const successNames = resolveSuccessNames(node, tsResolver);
|
|
@@ -1457,10 +1529,9 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, t
|
|
|
1457
1529
|
`TQueryData = ${TData}`,
|
|
1458
1530
|
`TQueryKey extends QueryKey = ${queryKeyTypeName}`
|
|
1459
1531
|
];
|
|
1460
|
-
const
|
|
1461
|
-
const
|
|
1462
|
-
const
|
|
1463
|
-
const queryOptionsParamsCall = callPrinter$3.print(queryOptionsParamsNode) ?? "";
|
|
1532
|
+
const resolvedParams = buildResolvedRequestParams(node);
|
|
1533
|
+
const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
|
|
1534
|
+
const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
|
|
1464
1535
|
const paramsNode = buildQueryParamsNode(node, { resolver: tsResolver });
|
|
1465
1536
|
const paramsSignature = declarationPrinter$3.print(paramsNode) ?? "";
|
|
1466
1537
|
return /* @__PURE__ */ jsx(File.Source, {
|
|
@@ -1476,11 +1547,11 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, t
|
|
|
1476
1547
|
JSDoc: { comments: buildOperationComments(node) },
|
|
1477
1548
|
children: `
|
|
1478
1549
|
const { query: queryConfig = {}, client: config = {} } = options ?? {}
|
|
1479
|
-
const { client: queryClient, ...resolvedOptions } = queryConfig
|
|
1480
|
-
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${
|
|
1550
|
+
const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
|
|
1551
|
+
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
|
|
1481
1552
|
|
|
1482
1553
|
const queryResult = useQuery({
|
|
1483
|
-
...${queryOptionsName}(${
|
|
1554
|
+
...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
|
|
1484
1555
|
...resolvedOptions,
|
|
1485
1556
|
queryKey,
|
|
1486
1557
|
} as unknown as QueryObserverOptions, queryClient) as ${returnType}
|
|
@@ -1495,7 +1566,6 @@ function Query({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, t
|
|
|
1495
1566
|
//#endregion
|
|
1496
1567
|
//#region src/components/SuspenseInfiniteQuery.tsx
|
|
1497
1568
|
const declarationPrinter$2 = functionPrinter({ mode: "declaration" });
|
|
1498
|
-
const callPrinter$2 = functionPrinter({ mode: "call" });
|
|
1499
1569
|
function buildSuspenseInfiniteQueryParamsNode(node, options) {
|
|
1500
1570
|
const { resolver, pageParamGeneric } = options;
|
|
1501
1571
|
const optionsParam = createFunctionParameter({
|
|
@@ -1506,7 +1576,10 @@ function buildSuspenseInfiniteQueryParamsNode(node, options) {
|
|
|
1506
1576
|
}`,
|
|
1507
1577
|
default: "{}"
|
|
1508
1578
|
});
|
|
1509
|
-
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1579
|
+
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1580
|
+
resolver,
|
|
1581
|
+
memberTypeWrapper: maybeValueOrGetter
|
|
1582
|
+
}), optionsParam].filter((param) => param !== null) });
|
|
1510
1583
|
}
|
|
1511
1584
|
function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, customOptions, initialPageParam, queryParam }) {
|
|
1512
1585
|
const successNames = resolveSuccessNames(node, tsResolver);
|
|
@@ -1534,10 +1607,9 @@ function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, query
|
|
|
1534
1607
|
`TQueryKey extends QueryKey = ${queryKeyTypeName}`,
|
|
1535
1608
|
`TPageParam = ${pageParamType}`
|
|
1536
1609
|
];
|
|
1537
|
-
const
|
|
1538
|
-
const
|
|
1539
|
-
const
|
|
1540
|
-
const queryOptionsParamsCall = callPrinter$2.print(queryOptionsParamsNode) ?? "";
|
|
1610
|
+
const resolvedParams = buildResolvedRequestParams(node);
|
|
1611
|
+
const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
|
|
1612
|
+
const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
|
|
1541
1613
|
const paramsNode = buildSuspenseInfiniteQueryParamsNode(node, {
|
|
1542
1614
|
resolver: tsResolver,
|
|
1543
1615
|
pageParamGeneric: "TPageParam"
|
|
@@ -1556,11 +1628,11 @@ function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, query
|
|
|
1556
1628
|
JSDoc: { comments: buildOperationComments(node) },
|
|
1557
1629
|
children: `
|
|
1558
1630
|
const { query: queryConfig = {}, client: config = {} } = options ?? {}
|
|
1559
|
-
const { client: queryClient, ...resolvedOptions } = queryConfig
|
|
1560
|
-
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${
|
|
1631
|
+
const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
|
|
1632
|
+
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
|
|
1561
1633
|
|
|
1562
1634
|
const queryResult = useSuspenseInfiniteQuery({
|
|
1563
|
-
...${queryOptionsName}(${
|
|
1635
|
+
...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
|
|
1564
1636
|
...resolvedOptions,
|
|
1565
1637
|
queryKey,
|
|
1566
1638
|
} as unknown as UseSuspenseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient) as ${returnType}
|
|
@@ -1575,7 +1647,7 @@ function SuspenseInfiniteQuery({ name, queryKeyTypeName, queryOptionsName, query
|
|
|
1575
1647
|
//#endregion
|
|
1576
1648
|
//#region src/components/SuspenseInfiniteQueryOptions.tsx
|
|
1577
1649
|
const declarationPrinter$1 = functionPrinter({ mode: "declaration" });
|
|
1578
|
-
const callPrinter
|
|
1650
|
+
const callPrinter = functionPrinter({ mode: "call" });
|
|
1579
1651
|
function SuspenseInfiniteQueryOptions({ name, clientName, initialPageParam, cursorParam, nextParam, previousParam, node, tsResolver, queryParam, queryKeyName }) {
|
|
1580
1652
|
const successNames = resolveSuccessNames(node, tsResolver);
|
|
1581
1653
|
const queryFnDataType = successNames.length > 0 ? successNames.join(" | ") : tsResolver.resolveResponseName(node);
|
|
@@ -1601,7 +1673,7 @@ function SuspenseInfiniteQueryOptions({ name, clientName, initialPageParam, curs
|
|
|
1601
1673
|
})}
|
|
1602
1674
|
return data`;
|
|
1603
1675
|
const queryKeyParamsNode = buildQueryKeyParams(node, { resolver: tsResolver });
|
|
1604
|
-
const queryKeyParamsCall = callPrinter
|
|
1676
|
+
const queryKeyParamsCall = callPrinter.print(queryKeyParamsNode) ?? "";
|
|
1605
1677
|
const hasNewParams = nextParam != null || previousParam != null;
|
|
1606
1678
|
const [getNextPageParamExpr, getPreviousPageParamExpr] = (() => {
|
|
1607
1679
|
if (hasNewParams) {
|
|
@@ -1666,7 +1738,6 @@ return infiniteQueryOptions<${queryFnDataType}, ${errorType}, InfiniteData<${que
|
|
|
1666
1738
|
//#endregion
|
|
1667
1739
|
//#region src/components/SuspenseQuery.tsx
|
|
1668
1740
|
const declarationPrinter = functionPrinter({ mode: "declaration" });
|
|
1669
|
-
const callPrinter = functionPrinter({ mode: "call" });
|
|
1670
1741
|
function buildSuspenseQueryParamsNode(node, options) {
|
|
1671
1742
|
const { resolver } = options;
|
|
1672
1743
|
const successNames = resolveSuccessNames(node, resolver);
|
|
@@ -1685,7 +1756,10 @@ function buildSuspenseQueryParamsNode(node, options) {
|
|
|
1685
1756
|
}`,
|
|
1686
1757
|
default: "{}"
|
|
1687
1758
|
});
|
|
1688
|
-
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1759
|
+
return createFunctionParameters({ params: [buildGroupedRequestParam(node, {
|
|
1760
|
+
resolver,
|
|
1761
|
+
memberTypeWrapper: maybeValueOrGetter
|
|
1762
|
+
}), optionsParam].filter((param) => param !== null) });
|
|
1689
1763
|
}
|
|
1690
1764
|
function SuspenseQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName, node, tsResolver, customOptions }) {
|
|
1691
1765
|
const successNames = resolveSuccessNames(node, tsResolver);
|
|
@@ -1694,10 +1768,9 @@ function SuspenseQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
|
|
|
1694
1768
|
const TData = responseName;
|
|
1695
1769
|
const returnType = `UseSuspenseQueryResult<TData, ${`ResponseErrorConfig<${errorNames.length > 0 ? errorNames.join(" | ") : "Error"}>`}> & { queryKey: TQueryKey }`;
|
|
1696
1770
|
const generics = [`TData = ${TData}`, `TQueryKey extends QueryKey = ${queryKeyTypeName}`];
|
|
1697
|
-
const
|
|
1698
|
-
const
|
|
1699
|
-
const
|
|
1700
|
-
const queryOptionsParamsCall = callPrinter.print(queryOptionsParamsNode) ?? "";
|
|
1771
|
+
const resolvedParams = buildResolvedRequestParams(node);
|
|
1772
|
+
const queryKeyArgs = resolvedParams ? "resolvedParams" : "";
|
|
1773
|
+
const queryOptionsArgs = resolvedParams ? "resolvedParams, config" : "config";
|
|
1701
1774
|
const paramsNode = buildSuspenseQueryParamsNode(node, { resolver: tsResolver });
|
|
1702
1775
|
const paramsSignature = declarationPrinter.print(paramsNode) ?? "";
|
|
1703
1776
|
return /* @__PURE__ */ jsx(File.Source, {
|
|
@@ -1713,11 +1786,11 @@ function SuspenseQuery({ name, queryKeyTypeName, queryOptionsName, queryKeyName,
|
|
|
1713
1786
|
JSDoc: { comments: buildOperationComments(node) },
|
|
1714
1787
|
children: `
|
|
1715
1788
|
const { query: queryConfig = {}, client: config = {} } = options ?? {}
|
|
1716
|
-
const { client: queryClient, ...resolvedOptions } = queryConfig
|
|
1717
|
-
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${
|
|
1789
|
+
const { client: queryClient, ...resolvedOptions } = queryConfig${resolvedParams ? `\n const resolvedParams = ${resolvedParams}` : ""}
|
|
1790
|
+
const queryKey = resolvedOptions?.queryKey ?? ${queryKeyName}(${queryKeyArgs})${customOptions ? `\n const customOptions = ${customOptions.name}({ hookName: '${name}', operationId: '${node.operationId}' })` : ""}
|
|
1718
1791
|
|
|
1719
1792
|
const queryResult = useSuspenseQuery({
|
|
1720
|
-
...${queryOptionsName}(${
|
|
1793
|
+
...${queryOptionsName}(${queryOptionsArgs}),${customOptions ? "\n ...customOptions," : ""}
|
|
1721
1794
|
...resolvedOptions,
|
|
1722
1795
|
queryKey,
|
|
1723
1796
|
} as unknown as UseSuspenseQueryOptions, queryClient) as ${returnType}
|
|
@@ -1743,7 +1816,7 @@ const infiniteQueryGenerator = defineGenerator({
|
|
|
1743
1816
|
operation(node, ctx) {
|
|
1744
1817
|
if (!ast.isHttpOperationNode(node)) return null;
|
|
1745
1818
|
const { config, driver, resolver, root } = ctx;
|
|
1746
|
-
const { output, query, mutation, infinite,
|
|
1819
|
+
const { output, query, mutation, infinite, validator, client, group, customOptions, hooks } = ctx.options;
|
|
1747
1820
|
const pluginTs = driver.getPlugin(pluginTsName);
|
|
1748
1821
|
if (!pluginTs) return null;
|
|
1749
1822
|
const tsResolver = driver.getResolver(pluginTsName);
|
|
@@ -1793,14 +1866,14 @@ const infiniteQueryGenerator = defineGenerator({
|
|
|
1793
1866
|
includeParams: false
|
|
1794
1867
|
})
|
|
1795
1868
|
].filter((name) => Boolean(name));
|
|
1796
|
-
const pluginZod =
|
|
1869
|
+
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(pluginZodName) : null;
|
|
1797
1870
|
const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
|
|
1798
1871
|
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
1799
1872
|
root,
|
|
1800
1873
|
output: pluginZod?.options?.output ?? output,
|
|
1801
1874
|
group: pluginZod?.options?.group ?? void 0
|
|
1802
1875
|
}) : null;
|
|
1803
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver,
|
|
1876
|
+
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
1804
1877
|
const calledClientName = contractOp.name;
|
|
1805
1878
|
return /* @__PURE__ */ jsxs(File, {
|
|
1806
1879
|
baseName: meta.file.baseName,
|
|
@@ -1877,31 +1950,33 @@ const infiniteQueryGenerator = defineGenerator({
|
|
|
1877
1950
|
initialPageParam: infiniteOptions.initialPageParam,
|
|
1878
1951
|
queryParam: infiniteOptions.queryParam
|
|
1879
1952
|
}),
|
|
1880
|
-
/* @__PURE__ */
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1953
|
+
hooks && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1954
|
+
/* @__PURE__ */ jsx(File.Import, {
|
|
1955
|
+
name: ["useInfiniteQuery"],
|
|
1956
|
+
path: importPath
|
|
1957
|
+
}),
|
|
1958
|
+
/* @__PURE__ */ jsx(File.Import, {
|
|
1959
|
+
name: [
|
|
1960
|
+
"QueryKey",
|
|
1961
|
+
"QueryClient",
|
|
1962
|
+
"InfiniteQueryObserverOptions",
|
|
1963
|
+
"UseInfiniteQueryResult"
|
|
1964
|
+
],
|
|
1965
|
+
path: importPath,
|
|
1966
|
+
isTypeOnly: true
|
|
1967
|
+
}),
|
|
1968
|
+
/* @__PURE__ */ jsx(InfiniteQuery, {
|
|
1969
|
+
name: queryName,
|
|
1970
|
+
queryOptionsName,
|
|
1971
|
+
queryKeyName,
|
|
1972
|
+
queryKeyTypeName,
|
|
1973
|
+
node,
|
|
1974
|
+
tsResolver,
|
|
1975
|
+
initialPageParam: infiniteOptions.initialPageParam,
|
|
1976
|
+
queryParam: infiniteOptions.queryParam,
|
|
1977
|
+
customOptions
|
|
1978
|
+
})
|
|
1979
|
+
] })
|
|
1905
1980
|
]
|
|
1906
1981
|
});
|
|
1907
1982
|
}
|
|
@@ -1919,7 +1994,7 @@ const mutationGenerator = defineGenerator({
|
|
|
1919
1994
|
operation(node, ctx) {
|
|
1920
1995
|
if (!ast.isHttpOperationNode(node)) return null;
|
|
1921
1996
|
const { config, driver, resolver, root } = ctx;
|
|
1922
|
-
const { output, query, mutation,
|
|
1997
|
+
const { output, query, mutation, validator, client, group, customOptions, hooks } = ctx.options;
|
|
1923
1998
|
const pluginTs = driver.getPlugin(pluginTsName);
|
|
1924
1999
|
if (!pluginTs) return null;
|
|
1925
2000
|
const tsResolver = driver.getResolver(pluginTsName);
|
|
@@ -1955,14 +2030,14 @@ const mutationGenerator = defineGenerator({
|
|
|
1955
2030
|
order: "body-response-first",
|
|
1956
2031
|
includeParams: false
|
|
1957
2032
|
})].filter((name) => Boolean(name));
|
|
1958
|
-
const pluginZod =
|
|
2033
|
+
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(pluginZodName) : null;
|
|
1959
2034
|
const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
|
|
1960
2035
|
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
1961
2036
|
root,
|
|
1962
2037
|
output: pluginZod?.options?.output ?? output,
|
|
1963
2038
|
group: pluginZod?.options?.group ?? void 0
|
|
1964
2039
|
}) : null;
|
|
1965
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver,
|
|
2040
|
+
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
1966
2041
|
const calledClientName = contractOp.name;
|
|
1967
2042
|
return /* @__PURE__ */ jsxs(File, {
|
|
1968
2043
|
baseName: meta.file.baseName,
|
|
@@ -2027,7 +2102,7 @@ const mutationGenerator = defineGenerator({
|
|
|
2027
2102
|
node,
|
|
2028
2103
|
tsResolver
|
|
2029
2104
|
}),
|
|
2030
|
-
mutation && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2105
|
+
mutation && hooks && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2031
2106
|
/* @__PURE__ */ jsx(File.Import, {
|
|
2032
2107
|
name: ["useMutation"],
|
|
2033
2108
|
path: importPath
|
|
@@ -2068,7 +2143,7 @@ const queryGenerator = defineGenerator({
|
|
|
2068
2143
|
operation(node, ctx) {
|
|
2069
2144
|
if (!ast.isHttpOperationNode(node)) return null;
|
|
2070
2145
|
const { config, driver, resolver, root } = ctx;
|
|
2071
|
-
const { output, query, mutation,
|
|
2146
|
+
const { output, query, mutation, validator, client, group, customOptions, hooks } = ctx.options;
|
|
2072
2147
|
const pluginTs = driver.getPlugin(pluginTsName);
|
|
2073
2148
|
if (!pluginTs) return null;
|
|
2074
2149
|
const tsResolver = driver.getResolver(pluginTsName);
|
|
@@ -2106,14 +2181,14 @@ const queryGenerator = defineGenerator({
|
|
|
2106
2181
|
order: "body-response-first",
|
|
2107
2182
|
includeParams: false
|
|
2108
2183
|
})].filter((name) => Boolean(name));
|
|
2109
|
-
const pluginZod =
|
|
2184
|
+
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(pluginZodName) : null;
|
|
2110
2185
|
const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
|
|
2111
2186
|
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
2112
2187
|
root,
|
|
2113
2188
|
output: pluginZod?.options?.output ?? output,
|
|
2114
2189
|
group: pluginZod?.options?.group ?? void 0
|
|
2115
2190
|
}) : null;
|
|
2116
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver,
|
|
2191
|
+
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
2117
2192
|
const calledClientName = contractOp.name;
|
|
2118
2193
|
return /* @__PURE__ */ jsxs(File, {
|
|
2119
2194
|
baseName: meta.file.baseName,
|
|
@@ -2180,7 +2255,7 @@ const queryGenerator = defineGenerator({
|
|
|
2180
2255
|
node,
|
|
2181
2256
|
tsResolver
|
|
2182
2257
|
}),
|
|
2183
|
-
query && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2258
|
+
query && hooks && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2184
2259
|
/* @__PURE__ */ jsx(File.Import, {
|
|
2185
2260
|
name: ["useQuery"],
|
|
2186
2261
|
path: importPath
|
|
@@ -2223,7 +2298,7 @@ const suspenseInfiniteQueryGenerator = defineGenerator({
|
|
|
2223
2298
|
operation(node, ctx) {
|
|
2224
2299
|
if (!ast.isHttpOperationNode(node)) return null;
|
|
2225
2300
|
const { config, driver, resolver, root } = ctx;
|
|
2226
|
-
const { output, query, mutation, infinite, suspense,
|
|
2301
|
+
const { output, query, mutation, infinite, suspense, validator, client, group, customOptions, hooks } = ctx.options;
|
|
2227
2302
|
const pluginTs = driver.getPlugin(pluginTsName);
|
|
2228
2303
|
if (!pluginTs) return null;
|
|
2229
2304
|
const tsResolver = driver.getResolver(pluginTsName);
|
|
@@ -2273,14 +2348,14 @@ const suspenseInfiniteQueryGenerator = defineGenerator({
|
|
|
2273
2348
|
includeParams: false
|
|
2274
2349
|
})
|
|
2275
2350
|
].filter((name) => Boolean(name));
|
|
2276
|
-
const pluginZod =
|
|
2351
|
+
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(pluginZodName) : null;
|
|
2277
2352
|
const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
|
|
2278
2353
|
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
2279
2354
|
root,
|
|
2280
2355
|
output: pluginZod?.options?.output ?? output,
|
|
2281
2356
|
group: pluginZod?.options?.group ?? void 0
|
|
2282
2357
|
}) : null;
|
|
2283
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver,
|
|
2358
|
+
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
2284
2359
|
const calledClientName = contractOp.name;
|
|
2285
2360
|
return /* @__PURE__ */ jsxs(File, {
|
|
2286
2361
|
baseName: meta.file.baseName,
|
|
@@ -2357,31 +2432,33 @@ const suspenseInfiniteQueryGenerator = defineGenerator({
|
|
|
2357
2432
|
initialPageParam: infiniteOptions.initialPageParam,
|
|
2358
2433
|
queryParam: infiniteOptions.queryParam
|
|
2359
2434
|
}),
|
|
2360
|
-
/* @__PURE__ */
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2435
|
+
hooks && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2436
|
+
/* @__PURE__ */ jsx(File.Import, {
|
|
2437
|
+
name: ["useSuspenseInfiniteQuery"],
|
|
2438
|
+
path: importPath
|
|
2439
|
+
}),
|
|
2440
|
+
/* @__PURE__ */ jsx(File.Import, {
|
|
2441
|
+
name: [
|
|
2442
|
+
"QueryKey",
|
|
2443
|
+
"QueryClient",
|
|
2444
|
+
"UseSuspenseInfiniteQueryOptions",
|
|
2445
|
+
"UseSuspenseInfiniteQueryResult"
|
|
2446
|
+
],
|
|
2447
|
+
path: importPath,
|
|
2448
|
+
isTypeOnly: true
|
|
2449
|
+
}),
|
|
2450
|
+
/* @__PURE__ */ jsx(SuspenseInfiniteQuery, {
|
|
2451
|
+
name: queryName,
|
|
2452
|
+
queryOptionsName,
|
|
2453
|
+
queryKeyName,
|
|
2454
|
+
queryKeyTypeName,
|
|
2455
|
+
node,
|
|
2456
|
+
tsResolver,
|
|
2457
|
+
initialPageParam: infiniteOptions.initialPageParam,
|
|
2458
|
+
queryParam: infiniteOptions.queryParam,
|
|
2459
|
+
customOptions
|
|
2460
|
+
})
|
|
2461
|
+
] })
|
|
2385
2462
|
]
|
|
2386
2463
|
});
|
|
2387
2464
|
}
|
|
@@ -2400,7 +2477,7 @@ const suspenseQueryGenerator = defineGenerator({
|
|
|
2400
2477
|
operation(node, ctx) {
|
|
2401
2478
|
if (!ast.isHttpOperationNode(node)) return null;
|
|
2402
2479
|
const { config, driver, resolver, root } = ctx;
|
|
2403
|
-
const { output, query, mutation, suspense,
|
|
2480
|
+
const { output, query, mutation, suspense, validator, client, group, customOptions, hooks } = ctx.options;
|
|
2404
2481
|
const pluginTs = driver.getPlugin(pluginTsName);
|
|
2405
2482
|
if (!pluginTs) return null;
|
|
2406
2483
|
const tsResolver = driver.getResolver(pluginTsName);
|
|
@@ -2438,14 +2515,14 @@ const suspenseQueryGenerator = defineGenerator({
|
|
|
2438
2515
|
order: "body-response-first",
|
|
2439
2516
|
includeParams: false
|
|
2440
2517
|
})].filter((name) => Boolean(name));
|
|
2441
|
-
const pluginZod =
|
|
2518
|
+
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(pluginZodName) : null;
|
|
2442
2519
|
const zodResolver = pluginZod ? driver.getResolver(pluginZodName) : null;
|
|
2443
2520
|
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
2444
2521
|
root,
|
|
2445
2522
|
output: pluginZod?.options?.output ?? output,
|
|
2446
2523
|
group: pluginZod?.options?.group ?? void 0
|
|
2447
2524
|
}) : null;
|
|
2448
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver,
|
|
2525
|
+
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
2449
2526
|
const calledClientName = contractOp.name;
|
|
2450
2527
|
return /* @__PURE__ */ jsxs(File, {
|
|
2451
2528
|
baseName: meta.file.baseName,
|
|
@@ -2512,7 +2589,7 @@ const suspenseQueryGenerator = defineGenerator({
|
|
|
2512
2589
|
node,
|
|
2513
2590
|
tsResolver
|
|
2514
2591
|
}),
|
|
2515
|
-
suspense && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2592
|
+
suspense && hooks && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2516
2593
|
/* @__PURE__ */ jsx(File.Import, {
|
|
2517
2594
|
name: ["useSuspenseQuery"],
|
|
2518
2595
|
path: importPath
|
|
@@ -2692,7 +2769,7 @@ const pluginReactQuery = definePlugin((options) => {
|
|
|
2692
2769
|
const { output = {
|
|
2693
2770
|
path: "hooks",
|
|
2694
2771
|
barrel: { type: "named" }
|
|
2695
|
-
}, group, exclude = [], include, override = [],
|
|
2772
|
+
}, group, exclude = [], include, override = [], validator = false, suspense = {}, infinite = false, mutation = {}, query = {}, mutationKey = mutationKeyTransformer, queryKey = queryKeyTransformer, customOptions, hooks = false, client, resolver: userResolver, macros: userMacros } = options;
|
|
2696
2773
|
const selectedGenerators = [
|
|
2697
2774
|
queryGenerator,
|
|
2698
2775
|
suspenseQueryGenerator,
|
|
@@ -2706,7 +2783,7 @@ const pluginReactQuery = definePlugin((options) => {
|
|
|
2706
2783
|
return {
|
|
2707
2784
|
name: pluginReactQueryName,
|
|
2708
2785
|
options,
|
|
2709
|
-
dependencies: [pluginTsName,
|
|
2786
|
+
dependencies: [pluginTsName, isValidatorEnabled(validator) ? pluginZodName : void 0].filter((dependency) => Boolean(dependency)),
|
|
2710
2787
|
hooks: { "kubb:plugin:setup"(ctx) {
|
|
2711
2788
|
const resolver = userResolver ? {
|
|
2712
2789
|
...resolverReactQuery,
|
|
@@ -2754,7 +2831,8 @@ const pluginReactQuery = definePlugin((options) => {
|
|
|
2754
2831
|
name: "useCustomHookOptions",
|
|
2755
2832
|
...customOptions
|
|
2756
2833
|
} : null,
|
|
2757
|
-
|
|
2834
|
+
hooks,
|
|
2835
|
+
validator,
|
|
2758
2836
|
group: groupConfig,
|
|
2759
2837
|
exclude,
|
|
2760
2838
|
include,
|