@kubb/plugin-client 5.0.0-beta.10 → 5.0.0-beta.22

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.d.ts CHANGED
@@ -256,7 +256,7 @@ type Props = {
256
256
  isIndexable?: boolean;
257
257
  isConfigurable?: boolean;
258
258
  returnType?: string;
259
- baseURL: string | undefined;
259
+ baseURL: string | null | undefined;
260
260
  dataReturnType: PluginClient['resolvedOptions']['dataReturnType'];
261
261
  paramsCasing: PluginClient['resolvedOptions']['paramsCasing'];
262
262
  paramsType: PluginClient['resolvedOptions']['pathParamsType'];
package/dist/index.js CHANGED
@@ -5,7 +5,7 @@ import { source as source$2 } from "./templates/config.source.js";
5
5
  import path from "node:path";
6
6
  import { ast, defineGenerator, definePlugin, defineResolver } from "@kubb/core";
7
7
  import { functionPrinter, pluginTsName } from "@kubb/plugin-ts";
8
- import { Const, File, Function, jsxRenderer } from "@kubb/renderer-jsx";
8
+ import { Const, File, Function, jsxRendererSync } from "@kubb/renderer-jsx";
9
9
  import { Fragment, jsx, jsxs } from "@kubb/renderer-jsx/jsx-runtime";
10
10
  import { pluginZodName } from "@kubb/plugin-zod";
11
11
  //#region ../../internals/utils/src/casing.ts
@@ -294,12 +294,13 @@ var URLPath = class {
294
294
  * @example
295
295
  * new URLPath('/pet/{petId}').toTemplateString() // '`/pet/${petId}`'
296
296
  */
297
- toTemplateString({ prefix = "", replacer } = {}) {
298
- return `\`${prefix}${this.path.split(/\{([^}]+)\}/).map((part, i) => {
297
+ toTemplateString({ prefix, replacer } = {}) {
298
+ const result = this.path.split(/\{([^}]+)\}/).map((part, i) => {
299
299
  if (i % 2 === 0) return part;
300
300
  const param = this.#transformParam(part);
301
301
  return `\${${replacer ? replacer(param) : param}}`;
302
- }).join("")}\``;
302
+ }).join("");
303
+ return `\`${prefix ?? ""}${result}\``;
303
304
  }
304
305
  /**
305
306
  * Extracts all `{param}` segments from the path and returns them as a key-value map.
@@ -395,7 +396,17 @@ function resolveErrorNames(node, resolver) {
395
396
  function resolveStatusCodeNames(node, resolver) {
396
397
  return node.responses.map((response) => resolver.resolveResponseStatusName(node, response.statusCode));
397
398
  }
399
+ const typeNamesByResolver = /* @__PURE__ */ new WeakMap();
398
400
  function resolveOperationTypeNames(node, resolver, options = {}) {
401
+ const cacheKey = `${node.operationId}\0${options.paramsCasing ?? ""}\0${options.order ?? ""}\0${options.responseStatusNames ?? ""}\0${(options.exclude ?? []).join(",")}`;
402
+ let byResolver = typeNamesByResolver.get(resolver);
403
+ if (byResolver) {
404
+ const cached = byResolver.get(cacheKey);
405
+ if (cached) return cached;
406
+ } else {
407
+ byResolver = /* @__PURE__ */ new Map();
408
+ typeNamesByResolver.set(resolver, byResolver);
409
+ }
399
410
  const { path, query, header } = getOperationParameters(node, { paramsCasing: options.paramsCasing });
400
411
  const responseStatusNames = options.responseStatusNames === "error" ? resolveErrorNames(node, resolver) : options.responseStatusNames === false ? [] : resolveStatusCodeNames(node, resolver);
401
412
  const exclude = new Set(options.exclude ?? []);
@@ -405,7 +416,7 @@ function resolveOperationTypeNames(node, resolver, options = {}) {
405
416
  ...header.map((param) => resolver.resolveHeaderParamsName(node, param))
406
417
  ];
407
418
  const bodyAndResponseNames = [node.requestBody?.content?.[0]?.schema ? resolver.resolveDataName(node) : void 0, resolver.resolveResponseName(node)];
408
- return (options.order === "body-response-first" ? [
419
+ const result = (options.order === "body-response-first" ? [
409
420
  ...bodyAndResponseNames,
410
421
  ...paramNames,
411
422
  ...responseStatusNames
@@ -414,6 +425,8 @@ function resolveOperationTypeNames(node, resolver, options = {}) {
414
425
  ...bodyAndResponseNames,
415
426
  ...responseStatusNames
416
427
  ]).filter((name) => Boolean(name) && !exclude.has(name));
428
+ byResolver.set(cacheKey, result);
429
+ return result;
417
430
  }
418
431
  //#endregion
419
432
  //#region ../../internals/shared/src/params.ts
@@ -848,11 +861,11 @@ function resolveZodImportNames$1(node, zodResolver) {
848
861
  __name(resolveZodImportNames$1, "resolveZodImportNames");
849
862
  const classClientGenerator = defineGenerator({
850
863
  name: "classClient",
851
- renderer: jsxRenderer,
864
+ renderer: jsxRendererSync,
852
865
  operations(nodes, ctx) {
853
- const { adapter, config, driver, resolver, root } = ctx;
866
+ const { config, driver, resolver, root } = ctx;
854
867
  const { output, group, dataReturnType, paramsCasing, paramsType, pathParamsType, parser, importPath, sdk } = ctx.options;
855
- const baseURL = ctx.options.baseURL ?? adapter.inputNode?.meta?.baseURL;
868
+ const baseURL = ctx.options.baseURL ?? ctx.meta.baseURL;
856
869
  const pluginTs = driver.getPlugin(pluginTsName);
857
870
  if (!pluginTs) return null;
858
871
  const tsResolver = driver.getResolver(pluginTsName);
@@ -911,7 +924,9 @@ const classClientGenerator = defineGenerator({
911
924
  file,
912
925
  operations: [operationData]
913
926
  });
914
- } else if (tag) {
927
+ return acc;
928
+ }
929
+ if (tag) {
915
930
  const name = groupName;
916
931
  const file = resolver.resolveFile({
917
932
  name,
@@ -980,11 +995,11 @@ const classClientGenerator = defineGenerator({
980
995
  baseName: file.baseName,
981
996
  path: file.path,
982
997
  meta: file.meta,
983
- banner: resolver.resolveBanner(adapter.inputNode, {
998
+ banner: resolver.resolveBanner(ctx.meta, {
984
999
  output,
985
1000
  config
986
1001
  }),
987
- footer: resolver.resolveFooter(adapter.inputNode, {
1002
+ footer: resolver.resolveFooter(ctx.meta, {
988
1003
  output,
989
1004
  config
990
1005
  }),
@@ -1083,11 +1098,11 @@ const classClientGenerator = defineGenerator({
1083
1098
  baseName: sdkFile.baseName,
1084
1099
  path: sdkFile.path,
1085
1100
  meta: sdkFile.meta,
1086
- banner: resolver.resolveBanner(adapter.inputNode, {
1101
+ banner: resolver.resolveBanner(ctx.meta, {
1087
1102
  output,
1088
1103
  config
1089
1104
  }),
1090
- footer: resolver.resolveFooter(adapter.inputNode, {
1105
+ footer: resolver.resolveFooter(ctx.meta, {
1091
1106
  output,
1092
1107
  config
1093
1108
  }),
@@ -1124,11 +1139,11 @@ const classClientGenerator = defineGenerator({
1124
1139
  //#region src/generators/clientGenerator.tsx
1125
1140
  const clientGenerator = defineGenerator({
1126
1141
  name: "client",
1127
- renderer: jsxRenderer,
1142
+ renderer: jsxRendererSync,
1128
1143
  operation(node, ctx) {
1129
- const { adapter, config, driver, resolver, root } = ctx;
1144
+ const { config, driver, resolver, root } = ctx;
1130
1145
  const { output, urlType, dataReturnType, paramsCasing, paramsType, pathParamsType, parser, importPath, group } = ctx.options;
1131
- const baseURL = ctx.options.baseURL ?? adapter.inputNode?.meta?.baseURL;
1146
+ const baseURL = ctx.options.baseURL ?? ctx.meta.baseURL;
1132
1147
  const pluginTs = driver.getPlugin(pluginTsName);
1133
1148
  if (!pluginTs) return null;
1134
1149
  const tsResolver = driver.getResolver(pluginTsName);
@@ -1175,11 +1190,11 @@ const clientGenerator = defineGenerator({
1175
1190
  baseName: meta.file.baseName,
1176
1191
  path: meta.file.path,
1177
1192
  meta: meta.file.meta,
1178
- banner: resolver.resolveBanner(adapter.inputNode, {
1193
+ banner: resolver.resolveBanner(ctx.meta, {
1179
1194
  output,
1180
1195
  config
1181
1196
  }),
1182
- footer: resolver.resolveFooter(adapter.inputNode, {
1197
+ footer: resolver.resolveFooter(ctx.meta, {
1183
1198
  output,
1184
1199
  config
1185
1200
  }),
@@ -1257,9 +1272,9 @@ const clientGenerator = defineGenerator({
1257
1272
  //#region src/generators/groupedClientGenerator.tsx
1258
1273
  const groupedClientGenerator = defineGenerator({
1259
1274
  name: "groupedClient",
1260
- renderer: jsxRenderer,
1275
+ renderer: jsxRendererSync,
1261
1276
  operations(nodes, ctx) {
1262
- const { config, resolver, adapter, root } = ctx;
1277
+ const { config, resolver, root } = ctx;
1263
1278
  const { output, group } = ctx.options;
1264
1279
  return /* @__PURE__ */ jsx(Fragment, { children: nodes.reduce((acc, operationNode) => {
1265
1280
  if (group?.type === "tag") {
@@ -1303,11 +1318,11 @@ const groupedClientGenerator = defineGenerator({
1303
1318
  baseName: file.baseName,
1304
1319
  path: file.path,
1305
1320
  meta: file.meta,
1306
- banner: resolver.resolveBanner(adapter.inputNode, {
1321
+ banner: resolver.resolveBanner(ctx.meta, {
1307
1322
  output,
1308
1323
  config
1309
1324
  }),
1310
- footer: resolver.resolveFooter(adapter.inputNode, {
1325
+ footer: resolver.resolveFooter(ctx.meta, {
1311
1326
  output,
1312
1327
  config
1313
1328
  }),
@@ -1354,9 +1369,9 @@ function Operations({ name, nodes }) {
1354
1369
  //#region src/generators/operationsGenerator.tsx
1355
1370
  const operationsGenerator = defineGenerator({
1356
1371
  name: "client",
1357
- renderer: jsxRenderer,
1372
+ renderer: jsxRendererSync,
1358
1373
  operations(nodes, ctx) {
1359
- const { config, resolver, adapter, root } = ctx;
1374
+ const { config, resolver, root } = ctx;
1360
1375
  const { output, group } = ctx.options;
1361
1376
  const name = "operations";
1362
1377
  const file = resolver.resolveFile({
@@ -1371,11 +1386,11 @@ const operationsGenerator = defineGenerator({
1371
1386
  baseName: file.baseName,
1372
1387
  path: file.path,
1373
1388
  meta: file.meta,
1374
- banner: resolver.resolveBanner(adapter.inputNode, {
1389
+ banner: resolver.resolveBanner(ctx.meta, {
1375
1390
  output,
1376
1391
  config
1377
1392
  }),
1378
- footer: resolver.resolveFooter(adapter.inputNode, {
1393
+ footer: resolver.resolveFooter(ctx.meta, {
1379
1394
  output,
1380
1395
  config
1381
1396
  }),
@@ -1472,11 +1487,11 @@ function resolveZodImportNames(node, zodResolver) {
1472
1487
  }
1473
1488
  const staticClassClientGenerator = defineGenerator({
1474
1489
  name: "staticClassClient",
1475
- renderer: jsxRenderer,
1490
+ renderer: jsxRendererSync,
1476
1491
  operations(nodes, ctx) {
1477
- const { adapter, config, driver, resolver, root } = ctx;
1492
+ const { config, driver, resolver, root } = ctx;
1478
1493
  const { output, group, dataReturnType, paramsCasing, paramsType, pathParamsType, parser, importPath } = ctx.options;
1479
- const baseURL = ctx.options.baseURL ?? adapter.inputNode?.meta?.baseURL;
1494
+ const baseURL = ctx.options.baseURL ?? ctx.meta.baseURL;
1480
1495
  const pluginTs = driver.getPlugin(pluginTsName);
1481
1496
  if (!pluginTs) return null;
1482
1497
  const tsResolver = driver.getResolver(pluginTsName);
@@ -1534,7 +1549,9 @@ const staticClassClientGenerator = defineGenerator({
1534
1549
  file,
1535
1550
  operations: [operationData]
1536
1551
  });
1537
- } else if (tag) {
1552
+ return acc;
1553
+ }
1554
+ if (tag) {
1538
1555
  const name = groupName;
1539
1556
  const file = resolver.resolveFile({
1540
1557
  name,
@@ -1602,11 +1619,11 @@ const staticClassClientGenerator = defineGenerator({
1602
1619
  baseName: file.baseName,
1603
1620
  path: file.path,
1604
1621
  meta: file.meta,
1605
- banner: resolver.resolveBanner(adapter.inputNode, {
1622
+ banner: resolver.resolveBanner(ctx.meta, {
1606
1623
  output,
1607
1624
  config
1608
1625
  }),
1609
- footer: resolver.resolveFooter(adapter.inputNode, {
1626
+ footer: resolver.resolveFooter(ctx.meta, {
1610
1627
  output,
1611
1628
  config
1612
1629
  }),