@kubb/plugin-faker 5.0.5 → 5.0.7

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
@@ -463,10 +463,14 @@ function buildResponseUnionSchema(node, resolver) {
463
463
  }
464
464
  return ast.factory.createSchema({
465
465
  type: "union",
466
- members: responses.map((response) => ast.factory.createSchema({
467
- type: "ref",
468
- name: resolver.response.status(node, response.statusCode)
469
- }))
466
+ members: responses.map((response) => {
467
+ const schema = (response.content?.length ?? 0) === 1 ? response.content?.[0]?.schema : void 0;
468
+ return ast.factory.createSchema({
469
+ type: "ref",
470
+ name: resolver.response.status(node, response.statusCode),
471
+ schema
472
+ });
473
+ })
470
474
  });
471
475
  }
472
476
  const SCALAR_TYPES$1 = /* @__PURE__ */ new Set([
@@ -528,11 +532,8 @@ function getScalarType(node, typeName) {
528
532
  * Determines the data type, return type, and whether it uses the type name.
529
533
  */
530
534
  function resolveFakerTypeUsage(node, typeName, canOverride) {
531
- const isArray = node.type === "array";
532
- const isTuple = node.type === "tuple";
533
535
  const isScalar = SCALAR_TYPES$1.has(node.type);
534
536
  let dataType = `Partial<${typeName}>`;
535
- if (isArray || isTuple || node.type === "union" || node.type === "enum") dataType = typeName;
536
537
  if (isScalar) dataType = getScalarType(node, typeName);
537
538
  let returnType = canOverride ? typeName : null;
538
539
  if (isScalar) returnType = getScalarType(node, typeName);
@@ -567,11 +568,12 @@ function Faker({ node, description, name, typeName, printer, canOverride }) {
567
568
  const isObject = OBJECT_TYPES.has(node.type);
568
569
  const isTuple = node.type === "tuple";
569
570
  const isScalar = SCALAR_TYPES.has(node.type);
571
+ const isUnion = node.type === "union";
570
572
  const useGenericOverride = canOverride && isObject;
571
573
  const fakerTextWithOverride = (() => {
572
- if (canOverride && isTuple) return `data || ${fakerText}`;
573
- if (canOverride && isArray) return `[\n ...${fakerText},\n ...(data || [])\n]`;
574
- if (canOverride && isScalar) return `data ?? ${fakerText}`;
574
+ if (canOverride && node.type === "tuple") return `data && data.length === ${node.items?.length ?? 0} && !data.includes(undefined) ? data : ${fakerText}`;
575
+ if (canOverride && isArray) return `[\n ...${fakerText},\n ...(data || []).filter((item) => item !== undefined),\n]`;
576
+ if (canOverride && (isScalar || isUnion)) return `data ?? ${fakerText}`;
575
577
  return fakerText;
576
578
  })();
577
579
  const { dataType, returnType: resolvedReturnType } = resolveFakerTypeUsage(node, typeName, canOverride);
@@ -584,7 +586,7 @@ function Faker({ node, description, name, typeName, printer, canOverride }) {
584
586
  })] });
585
587
  const paramsSignature = declarationPrinter.print(params) ?? "";
586
588
  const returnType = resolvedReturnType;
587
- const returnExpression = node.type === "ref" && canOverride && returnType ? `${fakerTextWithOverride} as ${returnType}` : fakerTextWithOverride;
589
+ const returnExpression = canOverride && !!returnType && (node.type === "ref" || isArray || isTuple || isUnion) ? `${isTuple || isUnion ? `(${fakerTextWithOverride})` : fakerTextWithOverride} as ${returnType}` : fakerTextWithOverride;
588
590
  return /* @__PURE__ */ jsx(File.Source, {
589
591
  name,
590
592
  isExportable: true,
@@ -1287,7 +1289,8 @@ const fakerGenerator = defineGenerator({
1287
1289
  type: "union",
1288
1290
  members: variants.map((variant) => ast.factory.createSchema({
1289
1291
  type: "ref",
1290
- name: variant.name
1292
+ name: variant.name,
1293
+ schema: variant.schema
1291
1294
  }))
1292
1295
  });
1293
1296
  return [...variants.map((variant) => ({