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
|
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) {
|
switch (true) {
|
||||||
case itemType.flags === ts.TypeFlags.Enum:
|
case isEnum || isEnumParent:
|
||||||
const enumMembers: string[] = []
|
const enumMembers: string[] = []
|
||||||
symbol?.members?.forEach((enumMember) => {
|
if (isEnum) {
|
||||||
if ((enumMember.valueDeclaration as ts.EnumMember).initializer) {
|
symbol?.members?.forEach((enumMember) => {
|
||||||
enumMembers.push(
|
if ((enumMember.valueDeclaration as ts.EnumMember).initializer) {
|
||||||
(
|
enumMembers.push(
|
||||||
enumMember.valueDeclaration as ts.EnumMember
|
(
|
||||||
).initializer!.getText()
|
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 {
|
return {
|
||||||
type: "string",
|
type: "string",
|
||||||
description,
|
description,
|
||||||
@@ -1610,8 +1622,9 @@ class OasKindGenerator extends FunctionKindGenerator {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const expressionName = (expression.name as ts.Identifier).getText()
|
||||||
isRequired =
|
isRequired =
|
||||||
(expression.name as ts.Identifier).getText() !== "optional"
|
expressionName !== "optional" && expressionName !== "nullish"
|
||||||
break
|
break
|
||||||
case ts.SyntaxKind.QuestionToken:
|
case ts.SyntaxKind.QuestionToken:
|
||||||
isRequired = false
|
isRequired = false
|
||||||
|
|||||||
Reference in New Issue
Block a user