@kubb/plugin-zod 5.0.0-alpha.29 → 5.0.0-alpha.30

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.js CHANGED
@@ -1,7 +1,6 @@
1
1
  import "./chunk--u3MIqq1.js";
2
- import path from "node:path";
3
- import { caseParams, createProperty, createSchema, extractRefName, narrowSchema, syncSchemaRef, transform, walk } from "@kubb/ast";
4
- import { createPlugin, defineGenerator, definePresets, definePrinter, defineResolver, getBarrelFiles, getMode, getPreset, runGeneratorOperation, runGeneratorOperations, runGeneratorSchema } from "@kubb/core";
2
+ import { caseParams, createProperty, createSchema, extractRefName, narrowSchema, syncSchemaRef } from "@kubb/ast";
3
+ import { createPlugin, defineGenerator, definePresets, definePrinter, defineResolver, getPreset, mergeGenerators } from "@kubb/core";
5
4
  import { Const, File, Type } from "@kubb/react-fabric";
6
5
  import { Fragment, jsx, jsxs } from "@kubb/react-fabric/jsx-runtime";
7
6
  //#region ../../internals/utils/src/casing.ts
@@ -757,15 +756,13 @@ const printerZodMini = definePrinter((options) => {
757
756
  //#region src/generators/zodGenerator.tsx
758
757
  const zodGenerator = defineGenerator({
759
758
  name: "zod",
760
- type: "react",
761
- Schema({ node, adapter, options, config, resolver, plugin }) {
759
+ schema(node, options) {
760
+ const { adapter, config, resolver, root } = this;
762
761
  const { output, coercion, guidType, mini, wrapOutput, inferred, importPath, group, printer } = options;
763
- const transformedNode = plugin.transformer ? transform(node, plugin.transformer) : node;
764
- if (!transformedNode.name) return;
765
- const root = path.resolve(config.root, config.output.path);
766
- const mode = getMode(path.resolve(root, output.path));
762
+ if (!node.name) return;
763
+ const mode = this.getMode(output);
767
764
  const isZodImport = ZOD_NAMESPACE_IMPORTS.has(importPath);
768
- const imports = adapter.getImports(transformedNode, (schemaName) => ({
765
+ const imports = adapter.getImports(node, (schemaName) => ({
769
766
  name: resolver.resolveSchemaName(schemaName),
770
767
  path: resolver.resolveFile({
771
768
  name: schemaName,
@@ -777,9 +774,9 @@ const zodGenerator = defineGenerator({
777
774
  }).path
778
775
  }));
779
776
  const meta = {
780
- name: resolver.resolveSchemaName(transformedNode.name),
777
+ name: resolver.resolveSchemaName(node.name),
781
778
  file: resolver.resolveFile({
782
- name: transformedNode.name,
779
+ name: node.name,
783
780
  extname: ".ts"
784
781
  }, {
785
782
  root,
@@ -787,7 +784,7 @@ const zodGenerator = defineGenerator({
787
784
  group
788
785
  })
789
786
  };
790
- const inferTypeName = inferred ? resolver.resolveSchemaTypeName(transformedNode.name) : void 0;
787
+ const inferTypeName = inferred ? resolver.resolveSchemaTypeName(node.name) : void 0;
791
788
  const schemaPrinter = mini ? printerZodMini({
792
789
  guidType,
793
790
  wrapOutput,
@@ -824,28 +821,27 @@ const zodGenerator = defineGenerator({
824
821
  root: meta.file.path,
825
822
  path: imp.path,
826
823
  name: imp.name
827
- }, [transformedNode.name, imp.path].join("-"))),
824
+ }, [node.name, imp.path].join("-"))),
828
825
  /* @__PURE__ */ jsx(Zod, {
829
826
  name: meta.name,
830
- node: transformedNode,
827
+ node,
831
828
  printer: schemaPrinter,
832
829
  inferTypeName
833
830
  })
834
831
  ]
835
832
  });
836
833
  },
837
- Operation({ node, adapter, options, config, resolver, plugin }) {
834
+ operation(node, options) {
835
+ const { adapter, config, resolver, root } = this;
838
836
  const { output, coercion, guidType, mini, wrapOutput, inferred, importPath, group, paramsCasing, printer } = options;
839
- const transformedNode = plugin.transformer ? transform(node, plugin.transformer) : node;
840
- const root = path.resolve(config.root, config.output.path);
841
- const mode = getMode(path.resolve(root, output.path));
837
+ const mode = this.getMode(output);
842
838
  const isZodImport = ZOD_NAMESPACE_IMPORTS.has(importPath);
843
- const params = caseParams(transformedNode.parameters, paramsCasing);
839
+ const params = caseParams(node.parameters, paramsCasing);
844
840
  const meta = { file: resolver.resolveFile({
845
- name: transformedNode.operationId,
841
+ name: node.operationId,
846
842
  extname: ".ts",
847
- tag: transformedNode.tags[0] ?? "default",
848
- path: transformedNode.path
843
+ tag: node.tags[0] ?? "default",
844
+ path: node.path
849
845
  }, {
850
846
  root,
851
847
  output,
@@ -900,18 +896,18 @@ const zodGenerator = defineGenerator({
900
896
  schema: param.schema,
901
897
  name: resolver.resolveParamName(node, param)
902
898
  }));
903
- const responseSchemas = transformedNode.responses.map((res) => renderSchemaEntry({
899
+ const responseSchemas = node.responses.map((res) => renderSchemaEntry({
904
900
  schema: res.schema,
905
- name: resolver.resolveResponseStatusName(transformedNode, res.statusCode),
901
+ name: resolver.resolveResponseStatusName(node, res.statusCode),
906
902
  keysToOmit: res.keysToOmit
907
903
  }));
908
- const requestSchema = transformedNode.requestBody?.schema ? renderSchemaEntry({
904
+ const requestSchema = node.requestBody?.schema ? renderSchemaEntry({
909
905
  schema: {
910
- ...transformedNode.requestBody.schema,
911
- description: transformedNode.requestBody.description ?? transformedNode.requestBody.schema.description
906
+ ...node.requestBody.schema,
907
+ description: node.requestBody.description ?? node.requestBody.schema.description
912
908
  },
913
- name: resolver.resolveDataName(transformedNode),
914
- keysToOmit: transformedNode.requestBody.keysToOmit
909
+ name: resolver.resolveDataName(node),
910
+ keysToOmit: node.requestBody.keysToOmit
915
911
  }) : null;
916
912
  return /* @__PURE__ */ jsxs(File, {
917
913
  baseName: meta.file.baseName,
@@ -937,10 +933,10 @@ const zodGenerator = defineGenerator({
937
933
  ]
938
934
  });
939
935
  },
940
- Operations({ nodes, adapter, options, config, resolver, plugin }) {
936
+ operations(nodes, options) {
937
+ const { adapter, config, resolver, root } = this;
941
938
  const { output, importPath, group, operations, paramsCasing } = options;
942
939
  if (!operations) return;
943
- const root = path.resolve(config.root, config.output.path);
944
940
  const isZodImport = ZOD_NAMESPACE_IMPORTS.has(importPath);
945
941
  const meta = { file: resolver.resolveFile({
946
942
  name: "operations",
@@ -951,11 +947,10 @@ const zodGenerator = defineGenerator({
951
947
  group
952
948
  }) };
953
949
  const transformedOperations = nodes.map((node) => {
954
- const transformedNode = plugin.transformer ? transform(node, plugin.transformer) : node;
955
950
  return {
956
- node: transformedNode,
957
- data: buildSchemaNames(transformedNode, {
958
- params: caseParams(transformedNode.parameters, paramsCasing),
951
+ node,
952
+ data: buildSchemaNames(node, {
953
+ params: caseParams(node.parameters, paramsCasing),
959
954
  resolver
960
955
  })
961
956
  };
@@ -1150,15 +1145,13 @@ function buildLegacySchemaNames(node, params, resolver) {
1150
1145
  }
1151
1146
  const zodGeneratorLegacy = defineGenerator({
1152
1147
  name: "zod-legacy",
1153
- type: "react",
1154
- Schema({ node, adapter, options, config, resolver, plugin }) {
1148
+ schema(node, options) {
1149
+ const { adapter, config, resolver, root } = this;
1155
1150
  const { output, coercion, guidType, mini, wrapOutput, inferred, importPath, group, printer } = options;
1156
- const transformedNode = plugin.transformer ? transform(node, plugin.transformer) : node;
1157
- if (!transformedNode.name) return;
1158
- const root = path.resolve(config.root, config.output.path);
1159
- const mode = getMode(path.resolve(root, output.path));
1151
+ if (!node.name) return;
1152
+ const mode = this.getMode(output);
1160
1153
  const isZodImport = ZOD_NAMESPACE_IMPORTS.has(importPath);
1161
- const imports = adapter.getImports(transformedNode, (schemaName) => ({
1154
+ const imports = adapter.getImports(node, (schemaName) => ({
1162
1155
  name: resolver.resolveSchemaName(schemaName),
1163
1156
  path: resolver.resolveFile({
1164
1157
  name: schemaName,
@@ -1169,11 +1162,11 @@ const zodGeneratorLegacy = defineGenerator({
1169
1162
  group
1170
1163
  }).path
1171
1164
  }));
1172
- const inferTypeName = inferred ? resolver.resolveSchemaTypeName(transformedNode.name) : void 0;
1165
+ const inferTypeName = inferred ? resolver.resolveSchemaTypeName(node.name) : void 0;
1173
1166
  const meta = {
1174
- name: resolver.resolveSchemaName(transformedNode.name),
1167
+ name: resolver.resolveSchemaName(node.name),
1175
1168
  file: resolver.resolveFile({
1176
- name: transformedNode.name,
1169
+ name: node.name,
1177
1170
  extname: ".ts"
1178
1171
  }, {
1179
1172
  root,
@@ -1217,28 +1210,27 @@ const zodGeneratorLegacy = defineGenerator({
1217
1210
  root: meta.file.path,
1218
1211
  path: imp.path,
1219
1212
  name: imp.name
1220
- }, [transformedNode.name, imp.path].join("-"))),
1213
+ }, [node.name, imp.path].join("-"))),
1221
1214
  /* @__PURE__ */ jsx(Zod, {
1222
1215
  name: meta.name,
1223
- node: transformedNode,
1216
+ node,
1224
1217
  printer: schemaPrinter,
1225
1218
  inferTypeName
1226
1219
  })
1227
1220
  ]
1228
1221
  });
1229
1222
  },
1230
- Operation({ node, adapter, options, config, resolver, plugin }) {
1223
+ operation(node, options) {
1224
+ const { adapter, config, resolver, root } = this;
1231
1225
  const { output, coercion, guidType, mini, wrapOutput, inferred, importPath, group, paramsCasing, printer } = options;
1232
- const transformedNode = plugin.transformer ? transform(node, plugin.transformer) : node;
1233
- const root = path.resolve(config.root, config.output.path);
1234
- const mode = getMode(path.resolve(root, output.path));
1226
+ const mode = this.getMode(output);
1235
1227
  const isZodImport = ZOD_NAMESPACE_IMPORTS.has(importPath);
1236
- const params = caseParams(transformedNode.parameters, paramsCasing);
1228
+ const params = caseParams(node.parameters, paramsCasing);
1237
1229
  const meta = { file: resolver.resolveFile({
1238
- name: transformedNode.operationId,
1230
+ name: node.operationId,
1239
1231
  extname: ".ts",
1240
- tag: transformedNode.tags[0] ?? "default",
1241
- path: transformedNode.path
1232
+ tag: node.tags[0] ?? "default",
1233
+ path: node.path
1242
1234
  }, {
1243
1235
  root,
1244
1236
  output,
@@ -1292,8 +1284,8 @@ const zodGeneratorLegacy = defineGenerator({
1292
1284
  const pathParams = params.filter((p) => p.in === "path");
1293
1285
  const queryParams = params.filter((p) => p.in === "query");
1294
1286
  const headerParams = params.filter((p) => p.in === "header");
1295
- const responseSchemas = transformedNode.responses.map((res) => {
1296
- const responseName = resolver.resolveResponseStatusName(transformedNode, res.statusCode);
1287
+ const responseSchemas = node.responses.map((res) => {
1288
+ const responseName = resolver.resolveResponseStatusName(node, res.statusCode);
1297
1289
  return renderSchemaEntry({
1298
1290
  schema: {
1299
1291
  ...res.schema,
@@ -1303,13 +1295,13 @@ const zodGeneratorLegacy = defineGenerator({
1303
1295
  keysToOmit: res.keysToOmit
1304
1296
  });
1305
1297
  });
1306
- const requestSchema = transformedNode.requestBody?.schema ? renderSchemaEntry({
1298
+ const requestSchema = node.requestBody?.schema ? renderSchemaEntry({
1307
1299
  schema: {
1308
- ...transformedNode.requestBody.schema,
1309
- description: transformedNode.requestBody.description ?? transformedNode.requestBody.schema.description
1300
+ ...node.requestBody.schema,
1301
+ description: node.requestBody.description ?? node.requestBody.schema.description
1310
1302
  },
1311
- name: resolver.resolveDataName(transformedNode),
1312
- keysToOmit: transformedNode.requestBody.keysToOmit
1303
+ name: resolver.resolveDataName(node),
1304
+ keysToOmit: node.requestBody.keysToOmit
1313
1305
  }) : null;
1314
1306
  const legacyParamTypes = [
1315
1307
  pathParams.length > 0 ? renderSchemaEntry({
@@ -1317,30 +1309,30 @@ const zodGeneratorLegacy = defineGenerator({
1317
1309
  params: pathParams,
1318
1310
  optional: pathParams.every((p) => !p.required)
1319
1311
  }),
1320
- name: resolver.resolvePathParamsName(transformedNode, pathParams[0])
1312
+ name: resolver.resolvePathParamsName(node, pathParams[0])
1321
1313
  }) : null,
1322
1314
  queryParams.length > 0 ? renderSchemaEntry({
1323
1315
  schema: buildGroupedParamsSchema({
1324
1316
  params: queryParams,
1325
1317
  optional: queryParams.every((p) => !p.required)
1326
1318
  }),
1327
- name: resolver.resolveQueryParamsName(transformedNode, queryParams[0])
1319
+ name: resolver.resolveQueryParamsName(node, queryParams[0])
1328
1320
  }) : null,
1329
1321
  headerParams.length > 0 ? renderSchemaEntry({
1330
1322
  schema: buildGroupedParamsSchema({
1331
1323
  params: headerParams,
1332
1324
  optional: headerParams.every((p) => !p.required)
1333
1325
  }),
1334
- name: resolver.resolveHeaderParamsName(transformedNode, headerParams[0])
1326
+ name: resolver.resolveHeaderParamsName(node, headerParams[0])
1335
1327
  }) : null
1336
1328
  ];
1337
1329
  const legacyResponsesSchema = renderSchemaEntry({
1338
- schema: buildLegacyResponsesSchemaNode(transformedNode, { resolver }),
1339
- name: resolver.resolveResponsesName(transformedNode)
1330
+ schema: buildLegacyResponsesSchemaNode(node, { resolver }),
1331
+ name: resolver.resolveResponsesName(node)
1340
1332
  });
1341
1333
  const legacyResponseSchema = renderSchemaEntry({
1342
- schema: buildLegacyResponseUnionSchemaNode(transformedNode, { resolver }),
1343
- name: resolver.resolveResponseName(transformedNode)
1334
+ schema: buildLegacyResponseUnionSchemaNode(node, { resolver }),
1335
+ name: resolver.resolveResponseName(node)
1344
1336
  });
1345
1337
  return /* @__PURE__ */ jsxs(File, {
1346
1338
  baseName: meta.file.baseName,
@@ -1368,10 +1360,10 @@ const zodGeneratorLegacy = defineGenerator({
1368
1360
  ]
1369
1361
  });
1370
1362
  },
1371
- Operations({ nodes, adapter, options, config, resolver, plugin }) {
1363
+ operations(nodes, options) {
1364
+ const { adapter, config, resolver, root } = this;
1372
1365
  const { output, importPath, group, operations, paramsCasing } = options;
1373
1366
  if (!operations) return;
1374
- const root = path.resolve(config.root, config.output.path);
1375
1367
  const isZodImport = ZOD_NAMESPACE_IMPORTS.has(importPath);
1376
1368
  const meta = { file: resolver.resolveFile({
1377
1369
  name: "operations",
@@ -1382,10 +1374,9 @@ const zodGeneratorLegacy = defineGenerator({
1382
1374
  group
1383
1375
  }) };
1384
1376
  const transformedOperations = nodes.map((node) => {
1385
- const transformedNode = plugin.transformer ? transform(node, plugin.transformer) : node;
1386
1377
  return {
1387
- node: transformedNode,
1388
- data: buildLegacySchemaNames(transformedNode, caseParams(transformedNode.parameters, paramsCasing), resolver)
1378
+ node,
1379
+ data: buildLegacySchemaNames(node, caseParams(node.parameters, paramsCasing), resolver)
1389
1380
  };
1390
1381
  });
1391
1382
  const imports = transformedOperations.flatMap(({ node, data }) => {
@@ -1439,6 +1430,9 @@ const zodGeneratorLegacy = defineGenerator({
1439
1430
  }
1440
1431
  });
1441
1432
  //#endregion
1433
+ //#region package.json
1434
+ var version = "5.0.0-alpha.30";
1435
+ //#endregion
1442
1436
  //#region src/resolvers/resolverZod.ts
1443
1437
  /**
1444
1438
  * Default resolver for `@kubb/plugin-zod`.
@@ -1614,10 +1608,12 @@ const pluginZod = createPlugin((options) => {
1614
1608
  transformer: userTransformer,
1615
1609
  generators: userGenerators
1616
1610
  });
1611
+ const mergedGenerator = mergeGenerators(preset.generators ?? []);
1617
1612
  let resolveNameWarning = false;
1618
1613
  let resolvePathWarning = false;
1619
1614
  return {
1620
1615
  name: pluginZodName,
1616
+ version,
1621
1617
  get resolver() {
1622
1618
  return preset.resolver;
1623
1619
  },
@@ -1627,6 +1623,9 @@ const pluginZod = createPlugin((options) => {
1627
1623
  get options() {
1628
1624
  return {
1629
1625
  output,
1626
+ exclude,
1627
+ include,
1628
+ override,
1630
1629
  group: group ? {
1631
1630
  ...group,
1632
1631
  name: (ctx) => {
@@ -1649,7 +1648,7 @@ const pluginZod = createPlugin((options) => {
1649
1648
  },
1650
1649
  resolvePath(baseName, pathMode, options) {
1651
1650
  if (!resolvePathWarning) {
1652
- this.events.emit("warn", "Do not use resolvePath for pluginZod, use resolverZod.resolvePath instead");
1651
+ this.warn("Do not use resolvePath for pluginZod, use resolverZod.resolvePath instead");
1653
1652
  resolvePathWarning = true;
1654
1653
  }
1655
1654
  return this.plugin.resolver.resolvePath({
@@ -1658,59 +1657,29 @@ const pluginZod = createPlugin((options) => {
1658
1657
  tag: options?.group?.tag,
1659
1658
  path: options?.group?.path
1660
1659
  }, {
1661
- root: path.resolve(this.config.root, this.config.output.path),
1660
+ root: this.root,
1662
1661
  output,
1663
1662
  group: this.plugin.options.group
1664
1663
  });
1665
1664
  },
1666
1665
  resolveName(name, type) {
1667
1666
  if (!resolveNameWarning) {
1668
- this.events.emit("warn", "Do not use resolveName for pluginZod, use resolverZod.default instead");
1667
+ this.warn("Do not use resolveName for pluginZod, use resolverZod.default instead");
1669
1668
  resolveNameWarning = true;
1670
1669
  }
1671
1670
  return this.plugin.resolver.default(name, type);
1672
1671
  },
1673
- async install() {
1674
- const { config, fabric, plugin, adapter, rootNode, driver, openInStudio, resolver } = this;
1675
- const root = path.resolve(config.root, config.output.path);
1676
- if (!adapter) throw new Error(`[${pluginZodName}] No adapter found. Add an OAS adapter (e.g. pluginOas()) before this plugin in your Kubb config.`);
1677
- await openInStudio({ ast: true });
1678
- const collectedOperations = [];
1679
- const generatorContext = {
1680
- generators: preset.generators,
1681
- plugin,
1682
- resolver,
1683
- exclude,
1684
- include,
1685
- override,
1686
- fabric,
1687
- adapter,
1688
- config,
1689
- driver
1690
- };
1691
- await walk(rootNode, {
1692
- depth: "shallow",
1693
- async schema(schemaNode) {
1694
- await runGeneratorSchema(schemaNode, generatorContext);
1695
- },
1696
- async operation(operationNode) {
1697
- if (resolver.resolveOptions(operationNode, {
1698
- options: plugin.options,
1699
- exclude,
1700
- include,
1701
- override
1702
- }) !== null) collectedOperations.push(operationNode);
1703
- await runGeneratorOperation(operationNode, generatorContext);
1704
- }
1705
- });
1706
- await runGeneratorOperations(collectedOperations, generatorContext);
1707
- const barrelFiles = await getBarrelFiles(this.fabric.files, {
1708
- type: output.barrelType ?? "named",
1709
- root,
1710
- output,
1711
- meta: { pluginName: this.plugin.name }
1712
- });
1713
- await this.upsertFile(...barrelFiles);
1672
+ async schema(node, options) {
1673
+ return mergedGenerator.schema?.call(this, node, options);
1674
+ },
1675
+ async operation(node, options) {
1676
+ return mergedGenerator.operation?.call(this, node, options);
1677
+ },
1678
+ async operations(nodes, options) {
1679
+ return mergedGenerator.operations?.call(this, nodes, options);
1680
+ },
1681
+ async buildStart() {
1682
+ await this.openInStudio({ ast: true });
1714
1683
  }
1715
1684
  };
1716
1685
  });