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.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user