Skip to content

Commit

Permalink
feat: add a utils method to get all enums in a type recursivly
Browse files Browse the repository at this point in the history
  • Loading branch information
svenliebig committed Sep 29, 2022
1 parent cb455f9 commit 1aa4be6
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
export * from "./models"
export { Parser } from "./parser"
export * from "./rewrite"
export * from "./utils/prettify"

export * from "./models"
export * from "./writer"
1 change: 1 addition & 0 deletions src/models/UnionType.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { Type } from "./Type"
export class UnionType extends Type {
public types: Array<Type>

// TODO these `types` should be a parameter instead of creating a dependency to the `typescript` lib here
constructor(node: UnionTypeNode) {
super()
this.types = node.types.map(TypeFactory.create)
Expand Down
1 change: 1 addition & 0 deletions src/writer/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "./utils/getAllEnumsInside"
30 changes: 30 additions & 0 deletions src/writer/utils/getAllEnumsInside.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { ArrayType, EnumType, IntersectionType, TypeLiteral, UnionType } from "../../models"
import { Type } from "../../models/Type"
import { L } from "../../utils/logger"

export function getAllEnumsInside(type: Type): Set<EnumType> {
const s = new Set<EnumType>()

function append(set: Set<EnumType>) {
set.forEach((e) => s.add(e))
}

L.d("<getAllEnumsInside>")
if (type instanceof UnionType) {
L.d("isUnionType")
type.types.map(getAllEnumsInside).forEach(append)
} else if (type instanceof IntersectionType) {
L.d("isIntersection")
type.types.map(getAllEnumsInside).forEach(append)
} else if (type instanceof ArrayType) {
L.d("isArray")
append(getAllEnumsInside(type.arrayType))
} else if (type instanceof TypeLiteral) {
L.d("isTypeLiteral")
Array.from(type.properties.values()).map(getAllEnumsInside).forEach(append)
} else if (type instanceof EnumType) {
s.add(type)
}

return s
}

0 comments on commit 1aa4be6

Please sign in to comment.