@kubb/plugin-faker 5.1.10 → 5.1.11

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 CHANGED
@@ -400,6 +400,12 @@ const NON_INLINABLE_RESPONSE_TYPES = /* @__PURE__ */ new Set([
400
400
  function canOverrideSchema(node) {
401
401
  return !NON_OVERRIDABLE_TYPES.has(node.type);
402
402
  }
403
+ /**
404
+ * Follows a ref, including alias chains, to the schema it resolves to. Unresolved refs are returned as is.
405
+ */
406
+ function resolveRefTarget(node) {
407
+ return node.type === "ref" && node.schema ? resolveRefTarget(node.schema) : node;
408
+ }
403
409
  function shouldInlineSingleResponseSchema(schema) {
404
410
  return !NON_INLINABLE_RESPONSE_TYPES.has(schema.type);
405
411
  }
@@ -490,7 +496,7 @@ function resolveFakerTypeUsage(node, typeName, canOverride) {
490
496
  return {
491
497
  dataType,
492
498
  returnType,
493
- usesTypeName: dataType.includes(typeName) || Boolean(returnType?.includes(typeName))
499
+ usesTypeName: canOverride && dataType.includes(typeName) || Boolean(returnType?.includes(typeName))
494
500
  };
495
501
  }
496
502
  //#endregion
@@ -894,18 +900,22 @@ function parseEnumValue(value) {
894
900
  return value;
895
901
  }
896
902
  /**
897
- * Reads the discriminator literal off a variant, or `undefined` when it can't be determined.
903
+ * Reads the discriminator literal off a variant, with whether its property is required, or
904
+ * `undefined` when it can't be determined.
898
905
  *
899
906
  * A variant carries exactly one discriminator value, so a property resolving to several literals
900
907
  * (a `ref` to the enum shared by every branch, say) identifies no branch and narrows nothing.
901
908
  */
902
- function getDiscriminatorValue(member, discriminatorPropertyName) {
909
+ function getDiscriminator(member, discriminatorPropertyName) {
903
910
  for (const property of kubb_kit.ast.resolveSchemaProperties({
904
911
  node: member,
905
912
  propertyName: discriminatorPropertyName
906
913
  })) {
907
914
  const values = kubb_kit.ast.getSchemaLiteralValues(property.schema);
908
- if (values.length === 1) return values[0];
915
+ if (values.length === 1) return {
916
+ value: values[0],
917
+ required: property.required
918
+ };
909
919
  }
910
920
  }
911
921
  /**
@@ -977,7 +987,7 @@ const printerFaker = kubb_kit.ast.createPrinter((options) => {
977
987
  });
978
988
  if (this.options.schemaName && refName === this.options.schemaName) return this.options.typeName ? `undefined as unknown as ${this.options.typeName}` : "undefined as unknown";
979
989
  const resolvedName = node.ref ? this.options.resolver.name(refName) : refName;
980
- if (!this.options.nestedInObject) return `${resolvedName}(data)`;
990
+ if (!this.options.nestedInObject && canOverrideSchema(resolveRefTarget(node))) return `${resolvedName}(data)`;
981
991
  return `${resolvedName}()`;
982
992
  },
983
993
  enum(node) {
@@ -988,9 +998,10 @@ const printerFaker = kubb_kit.ast.createPrinter((options) => {
988
998
  const { discriminatorPropertyName } = node;
989
999
  const baseTypeName = this.options.typeName;
990
1000
  return `faker.helpers.arrayElement([${mapSchemaMembers(node, (member) => {
991
- const value = discriminatorPropertyName ? getDiscriminatorValue(member, discriminatorPropertyName) : void 0;
992
- if (baseTypeName && value !== void 0) {
993
- const typeName = `Extract<NonNullable<${baseTypeName}>, { ${JSON.stringify(discriminatorPropertyName)}: ${parseEnumValue(value)} }>`;
1001
+ const discriminator = discriminatorPropertyName ? getDiscriminator(member, discriminatorPropertyName) : void 0;
1002
+ if (baseTypeName && discriminator) {
1003
+ const key = `${JSON.stringify(discriminatorPropertyName)}${discriminator.required ? "" : "?"}`;
1004
+ const typeName = `Extract<NonNullable<${baseTypeName}>, { ${key}: ${parseEnumValue(discriminator.value)} }>`;
994
1005
  return printNested(member, {
995
1006
  typeName,
996
1007
  nestedInObject: true,
@@ -1400,7 +1411,7 @@ var compatibility = {
1400
1411
  };
1401
1412
  //#endregion
1402
1413
  //#region package.json
1403
- var version = "5.1.10";
1414
+ var version = "5.1.11";
1404
1415
  //#endregion
1405
1416
  //#region src/resolvers/resolverFaker.ts
1406
1417
  /**
@@ -1468,18 +1479,6 @@ const pluginFaker = (0, kubb_kit.defineExtension)({
1468
1479
  path: "mocks",
1469
1480
  barrel: { type: "named" }
1470
1481
  }, seed, locale = "en", group, exclude = [], include, override = [], typeMode = "inferred", dateParser = "faker", regexGenerator = "faker", printer, resolver: userResolver, macros: userMacros } = options;
1471
- (0, kubb_kit.assertPluginOption)({
1472
- plugin: pluginFakerName,
1473
- option: "typeMode",
1474
- value: typeMode,
1475
- allowed: ["inferred", "schema"]
1476
- });
1477
- (0, kubb_kit.assertPluginOption)({
1478
- plugin: pluginFakerName,
1479
- option: "regexGenerator",
1480
- value: regexGenerator,
1481
- allowed: ["faker", "randexp"]
1482
- });
1483
1482
  (0, kubb_kit.setResolver)(userResolver ? kubb_kit.Resolver.merge(resolverFaker, userResolver) : resolverFaker);
1484
1483
  if (userMacros?.length) (0, kubb_kit.setMacros)(userMacros);
1485
1484
  (0, kubb_kit.addGenerator)(fakerGenerator);