@kubb/plugin-vue-query 5.0.0-beta.77 → 5.0.0-beta.79
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 +68 -26
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +68 -26
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
package/dist/index.cjs
CHANGED
|
@@ -89,7 +89,7 @@ function toFilePath(name, caseLast = camelCase) {
|
|
|
89
89
|
* JavaScript and Java reserved words.
|
|
90
90
|
* @link https://github.com/jonschlinkert/reserved/blob/master/index.js
|
|
91
91
|
*/
|
|
92
|
-
const reservedWords = new Set([
|
|
92
|
+
const reservedWords = /* @__PURE__ */ new Set([
|
|
93
93
|
"abstract",
|
|
94
94
|
"arguments",
|
|
95
95
|
"boolean",
|
|
@@ -318,6 +318,23 @@ function caseParams(params, casing) {
|
|
|
318
318
|
caseParamsCache.set(params, result);
|
|
319
319
|
return result;
|
|
320
320
|
}
|
|
321
|
+
/**
|
|
322
|
+
* Drops parameters that collapse to the same property identity once camelCased, keeping the first.
|
|
323
|
+
*
|
|
324
|
+
* Some specs declare the same parameter twice under different casings (for example AWS S3 lists both
|
|
325
|
+
* `max-uploads` and `MaxUploads`). Both resolve to one output property, so emitting both would yield
|
|
326
|
+
* an object type with a duplicate member, which TypeScript rejects. De-duplicate by the camelCased
|
|
327
|
+
* identity so the resulting group is collision-free regardless of the names each caller carries.
|
|
328
|
+
*/
|
|
329
|
+
function dedupeByCasedName(params) {
|
|
330
|
+
const seen = /* @__PURE__ */ new Set();
|
|
331
|
+
return params.filter((param) => {
|
|
332
|
+
const key = camelCase(param.name);
|
|
333
|
+
if (seen.has(key)) return false;
|
|
334
|
+
seen.add(key);
|
|
335
|
+
return true;
|
|
336
|
+
});
|
|
337
|
+
}
|
|
321
338
|
//#endregion
|
|
322
339
|
//#region ../../internals/shared/src/operation.ts
|
|
323
340
|
/**
|
|
@@ -356,11 +373,27 @@ function getContentTypeInfo(node) {
|
|
|
356
373
|
hasFormData: contentTypes.some((ct) => ct === "multipart/form-data")
|
|
357
374
|
};
|
|
358
375
|
}
|
|
376
|
+
/**
|
|
377
|
+
* The request-body counterpart for the primary success response: the content types it documents and
|
|
378
|
+
* whether several are present, so the client can let a caller pick which one to accept.
|
|
379
|
+
*/
|
|
380
|
+
function getResponseContentTypeInfo(node) {
|
|
381
|
+
const contentTypes = getPrimarySuccessResponse(node)?.content?.map((e) => e.contentType) ?? [];
|
|
382
|
+
const isMultipleContentTypes = contentTypes.length > 1;
|
|
383
|
+
return {
|
|
384
|
+
contentTypes,
|
|
385
|
+
isMultipleContentTypes,
|
|
386
|
+
contentTypeUnion: isMultipleContentTypes ? contentTypes.map((ct) => JSON.stringify(ct)).join(" | ") : "",
|
|
387
|
+
defaultContentType: contentTypes[0] ?? "application/json",
|
|
388
|
+
hasFormData: contentTypes.some((ct) => ct === "multipart/form-data")
|
|
389
|
+
};
|
|
390
|
+
}
|
|
359
391
|
function buildRequestConfigType(node) {
|
|
360
|
-
const
|
|
392
|
+
const request = getContentTypeInfo(node);
|
|
393
|
+
const response = getResponseContentTypeInfo(node);
|
|
361
394
|
const configType = `Partial<Omit<RequestConfig, 'path' | 'query' | 'body' | 'headers' | 'url'>>`;
|
|
362
|
-
const
|
|
363
|
-
return
|
|
395
|
+
const members = [request.isMultipleContentTypes ? `request?: ${request.contentTypeUnion}` : null, response.isMultipleContentTypes ? `response?: ${response.contentTypeUnion}` : null].filter(Boolean);
|
|
396
|
+
return members.length ? `${configType} & { contentType?: { ${members.join("; ")} } }` : configType;
|
|
364
397
|
}
|
|
365
398
|
/**
|
|
366
399
|
* Builds the `client?:` option type shared by the generated query hooks (`useQuery`,
|
|
@@ -422,10 +455,10 @@ function buildOperationComments(node, options = {}) {
|
|
|
422
455
|
function getOperationParameters(node, options = {}) {
|
|
423
456
|
const params = caseParams(node.parameters, options.paramsCasing === "original" ? void 0 : "camelcase");
|
|
424
457
|
return {
|
|
425
|
-
path: params.filter((param) => param.in === "path"),
|
|
426
|
-
query: params.filter((param) => param.in === "query"),
|
|
427
|
-
header: params.filter((param) => param.in === "header"),
|
|
428
|
-
cookie: params.filter((param) => param.in === "cookie")
|
|
458
|
+
path: dedupeByCasedName(params.filter((param) => param.in === "path")),
|
|
459
|
+
query: dedupeByCasedName(params.filter((param) => param.in === "query")),
|
|
460
|
+
header: dedupeByCasedName(params.filter((param) => param.in === "header")),
|
|
461
|
+
cookie: dedupeByCasedName(params.filter((param) => param.in === "cookie"))
|
|
429
462
|
};
|
|
430
463
|
}
|
|
431
464
|
function getStatusCodeNumber(statusCode) {
|
|
@@ -440,6 +473,15 @@ function isErrorStatusCode(statusCode) {
|
|
|
440
473
|
const code = getStatusCodeNumber(statusCode);
|
|
441
474
|
return code !== null && code >= 400;
|
|
442
475
|
}
|
|
476
|
+
function getSuccessResponses(responses) {
|
|
477
|
+
return responses.filter((response) => isSuccessStatusCode(response.statusCode));
|
|
478
|
+
}
|
|
479
|
+
function getOperationSuccessResponses(node) {
|
|
480
|
+
return getSuccessResponses(node.responses);
|
|
481
|
+
}
|
|
482
|
+
function getPrimarySuccessResponse(node) {
|
|
483
|
+
return getOperationSuccessResponses(node)[0] ?? null;
|
|
484
|
+
}
|
|
443
485
|
function resolveErrorNames(node, resolver) {
|
|
444
486
|
return node.responses.filter((response) => isErrorStatusCode(response.statusCode)).map((response) => resolver.resolveResponseStatusName(node, response.statusCode));
|
|
445
487
|
}
|
|
@@ -513,14 +555,14 @@ function createGroupConfig(group) {
|
|
|
513
555
|
};
|
|
514
556
|
}
|
|
515
557
|
//#endregion
|
|
516
|
-
//#region ../../internals/client/src/builders/
|
|
558
|
+
//#region ../../internals/client/src/builders/validatorOptions.ts
|
|
517
559
|
/**
|
|
518
|
-
* Returns `true` when any direction of the
|
|
560
|
+
* Returns `true` when any direction of the validator uses zod (used for dependency checks).
|
|
519
561
|
*/
|
|
520
|
-
function
|
|
521
|
-
if (!
|
|
522
|
-
if (
|
|
523
|
-
return Boolean(
|
|
562
|
+
function isValidatorEnabled(validator) {
|
|
563
|
+
if (!validator) return false;
|
|
564
|
+
if (validator === "zod") return true;
|
|
565
|
+
return Boolean(validator.request || validator.response);
|
|
524
566
|
}
|
|
525
567
|
//#endregion
|
|
526
568
|
//#region ../../internals/client/src/resolveClient.ts
|
|
@@ -1225,7 +1267,7 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1225
1267
|
operation(node, ctx) {
|
|
1226
1268
|
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
1227
1269
|
const { config, driver, resolver, root } = ctx;
|
|
1228
|
-
const { output, query, mutation, infinite,
|
|
1270
|
+
const { output, query, mutation, infinite, validator, client, group } = ctx.options;
|
|
1229
1271
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
1230
1272
|
if (!pluginTs) return null;
|
|
1231
1273
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
@@ -1275,14 +1317,14 @@ const infiniteQueryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1275
1317
|
includeParams: false
|
|
1276
1318
|
})
|
|
1277
1319
|
].filter((name) => Boolean(name));
|
|
1278
|
-
const pluginZod =
|
|
1320
|
+
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
1279
1321
|
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
1280
1322
|
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
1281
1323
|
root,
|
|
1282
1324
|
output: pluginZod?.options?.output ?? output,
|
|
1283
1325
|
group: pluginZod?.options?.group ?? void 0
|
|
1284
1326
|
}) : null;
|
|
1285
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver,
|
|
1327
|
+
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
1286
1328
|
const calledClientName = contractOp.name;
|
|
1287
1329
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
1288
1330
|
baseName: meta.file.baseName,
|
|
@@ -1405,7 +1447,7 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1405
1447
|
operation(node, ctx) {
|
|
1406
1448
|
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
1407
1449
|
const { config, driver, resolver, root } = ctx;
|
|
1408
|
-
const { output, query, mutation,
|
|
1450
|
+
const { output, query, mutation, validator, client, group } = ctx.options;
|
|
1409
1451
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
1410
1452
|
if (!pluginTs) return null;
|
|
1411
1453
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
@@ -1440,14 +1482,14 @@ const mutationGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1440
1482
|
order: "body-response-first",
|
|
1441
1483
|
includeParams: false
|
|
1442
1484
|
})].filter((name) => Boolean(name));
|
|
1443
|
-
const pluginZod =
|
|
1485
|
+
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
1444
1486
|
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
1445
1487
|
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
1446
1488
|
root,
|
|
1447
1489
|
output: pluginZod?.options?.output ?? output,
|
|
1448
1490
|
group: pluginZod?.options?.group ?? void 0
|
|
1449
1491
|
}) : null;
|
|
1450
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver,
|
|
1492
|
+
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
1451
1493
|
const calledClientName = contractOp.name;
|
|
1452
1494
|
const groups = getRequestGroups(node);
|
|
1453
1495
|
const hasRequestGroups = groups.path || groups.query || groups.body || groups.headers;
|
|
@@ -1544,7 +1586,7 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1544
1586
|
operation(node, ctx) {
|
|
1545
1587
|
if (!_kubb_core.ast.isHttpOperationNode(node)) return null;
|
|
1546
1588
|
const { config, driver, resolver, root } = ctx;
|
|
1547
|
-
const { output, query, mutation,
|
|
1589
|
+
const { output, query, mutation, validator, client, group } = ctx.options;
|
|
1548
1590
|
const pluginTs = driver.getPlugin(_kubb_plugin_ts.pluginTsName);
|
|
1549
1591
|
if (!pluginTs) return null;
|
|
1550
1592
|
const tsResolver = driver.getResolver(_kubb_plugin_ts.pluginTsName);
|
|
@@ -1582,14 +1624,14 @@ const queryGenerator = (0, _kubb_core.defineGenerator)({
|
|
|
1582
1624
|
order: "body-response-first",
|
|
1583
1625
|
includeParams: false
|
|
1584
1626
|
})].filter((name) => Boolean(name));
|
|
1585
|
-
const pluginZod =
|
|
1627
|
+
const pluginZod = isValidatorEnabled(validator) ? driver.getPlugin(_kubb_plugin_zod.pluginZodName) : null;
|
|
1586
1628
|
const zodResolver = pluginZod ? driver.getResolver(_kubb_plugin_zod.pluginZodName) : null;
|
|
1587
1629
|
const fileZod = zodResolver ? zodResolver.resolveFile(operationFileEntry(node, node.operationId), {
|
|
1588
1630
|
root,
|
|
1589
1631
|
output: pluginZod?.options?.output ?? output,
|
|
1590
1632
|
group: pluginZod?.options?.group ?? void 0
|
|
1591
1633
|
}) : null;
|
|
1592
|
-
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver,
|
|
1634
|
+
const zodSchemaNames = resolveZodSchemaNames(node, zodResolver, validator);
|
|
1593
1635
|
const calledClientName = contractOp.name;
|
|
1594
1636
|
return /* @__PURE__ */ (0, _kubb_renderer_jsx_jsx_runtime.jsxs)(_kubb_renderer_jsx.File, {
|
|
1595
1637
|
baseName: meta.file.baseName,
|
|
@@ -1797,7 +1839,7 @@ const pluginVueQuery = (0, _kubb_core.definePlugin)((options) => {
|
|
|
1797
1839
|
const { output = {
|
|
1798
1840
|
path: "hooks",
|
|
1799
1841
|
barrel: { type: "named" }
|
|
1800
|
-
}, group, exclude = [], include, override = [],
|
|
1842
|
+
}, group, exclude = [], include, override = [], validator = false, infinite = false, mutation = {}, query = {}, mutationKey = mutationKeyTransformer, queryKey = queryKeyTransformer, client, resolver: userResolver, macros: userMacros } = options;
|
|
1801
1843
|
const selectedGenerators = [
|
|
1802
1844
|
queryGenerator,
|
|
1803
1845
|
infiniteQueryGenerator,
|
|
@@ -1807,7 +1849,7 @@ const pluginVueQuery = (0, _kubb_core.definePlugin)((options) => {
|
|
|
1807
1849
|
return {
|
|
1808
1850
|
name: pluginVueQueryName,
|
|
1809
1851
|
options,
|
|
1810
|
-
dependencies: [_kubb_plugin_ts.pluginTsName,
|
|
1852
|
+
dependencies: [_kubb_plugin_ts.pluginTsName, isValidatorEnabled(validator) ? _kubb_plugin_zod.pluginZodName : void 0].filter((dependency) => Boolean(dependency)),
|
|
1811
1853
|
hooks: { "kubb:plugin:setup"(ctx) {
|
|
1812
1854
|
const resolver = userResolver ? {
|
|
1813
1855
|
...resolverVueQuery,
|
|
@@ -1850,7 +1892,7 @@ const pluginVueQuery = (0, _kubb_core.definePlugin)((options) => {
|
|
|
1850
1892
|
previousParam: null,
|
|
1851
1893
|
...infinite
|
|
1852
1894
|
} : false,
|
|
1853
|
-
|
|
1895
|
+
validator,
|
|
1854
1896
|
group: groupConfig,
|
|
1855
1897
|
exclude,
|
|
1856
1898
|
include,
|