From beaa8513023e49c05e2d62b767cf3f670185e529 Mon Sep 17 00:00:00 2001 From: Shahed Nasser Date: Wed, 4 Sep 2024 21:36:58 +0300 Subject: [PATCH] docs-util: fix to enum type + optional (#8950) - Fix to some enum types (with one member) not being extracted properly. - Consider `nullish` Zod types as optional. --- .../docs-generator/src/classes/kinds/oas.ts | 35 +++++++++++++------ 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/www/utils/packages/docs-generator/src/classes/kinds/oas.ts b/www/utils/packages/docs-generator/src/classes/kinds/oas.ts index 278f485a61..1e76ac9a77 100644 --- a/www/utils/packages/docs-generator/src/classes/kinds/oas.ts +++ b/www/utils/packages/docs-generator/src/classes/kinds/oas.ts @@ -1259,18 +1259,30 @@ class OasKindGenerator extends FunctionKindGenerator { return schemaFromFactory } + const isEnum = itemType.flags === ts.TypeFlags.Enum + const isEnumParent = + itemType.symbol && + "parent" in itemType.symbol && + (itemType.symbol.parent as ts.Symbol)?.valueDeclaration?.kind === + ts.SyntaxKind.EnumDeclaration + switch (true) { - case itemType.flags === ts.TypeFlags.Enum: + case isEnum || isEnumParent: const enumMembers: string[] = [] - symbol?.members?.forEach((enumMember) => { - if ((enumMember.valueDeclaration as ts.EnumMember).initializer) { - enumMembers.push( - ( - enumMember.valueDeclaration as ts.EnumMember - ).initializer!.getText() - ) - } - }) + if (isEnum) { + symbol?.members?.forEach((enumMember) => { + if ((enumMember.valueDeclaration as ts.EnumMember).initializer) { + enumMembers.push( + ( + enumMember.valueDeclaration as ts.EnumMember + ).initializer!.getText() + ) + } + }) + } else { + // the item itself is the enum member so add it to the array + enumMembers.push(itemType.symbol.getName()) + } return { type: "string", description, @@ -1610,8 +1622,9 @@ class OasKindGenerator extends FunctionKindGenerator { break } + const expressionName = (expression.name as ts.Identifier).getText() isRequired = - (expression.name as ts.Identifier).getText() !== "optional" + expressionName !== "optional" && expressionName !== "nullish" break case ts.SyntaxKind.QuestionToken: isRequired = false