* Resolved child type metadata set for provided type metadata reflecting inheritance order where the * first element is the current type metadata and the last element is the most specific child. This * collection is used to define polymorphic relationships between types. * * @
(
typeMetadata: TypeMetadata<any>,
childTypeMetadataSet: Set<TypeMetadata<any>> = new Set<TypeMetadata<any>>()
)
| 953 | * @returns {ReadonlySet<TypeMetadata<any>>} Child type metadata set. |
| 954 | */ |
| 955 | private resolveChildTypeMetadataSet( |
| 956 | typeMetadata: TypeMetadata<any>, |
| 957 | childTypeMetadataSet: Set<TypeMetadata<any>> = new Set<TypeMetadata<any>>() |
| 958 | ): ReadonlySet<TypeMetadata<any>> |
| 959 | { |
| 960 | if (childTypeMetadataSet.has(typeMetadata)) |
| 961 | { |
| 962 | return childTypeMetadataSet; |
| 963 | } |
| 964 | |
| 965 | childTypeMetadataSet.add(typeMetadata); |
| 966 | |
| 967 | for (const childTypeMetadata of typeMetadata.currentChildTypeMetadataMap.values()) |
| 968 | { |
| 969 | this.resolveChildTypeMetadataSet(childTypeMetadata, childTypeMetadataSet); |
| 970 | |
| 971 | childTypeMetadata.unresolveTypeState(); |
| 972 | } |
| 973 | |
| 974 | for (const setTypeMetadata of this.typeMetadataSet) |
| 975 | { |
| 976 | const typeOptions = setTypeMetadata.typeOptions; |
| 977 | |
| 978 | const parentTypeArguments = typeOptions.parentTypeArguments === undefined |
| 979 | ? EMPTY_ARRAY |
| 980 | : typeOptions.parentTypeArguments; |
| 981 | |
| 982 | const parentTypeMetadatas = this.resolveTypeMetadatas(parentTypeArguments); |
| 983 | |
| 984 | for (let i = 0; i < parentTypeMetadatas.length; i++) |
| 985 | { |
| 986 | if (parentTypeMetadatas[i] === typeMetadata) |
| 987 | { |
| 988 | this.resolveChildTypeMetadataSet(setTypeMetadata, childTypeMetadataSet); |
| 989 | |
| 990 | setTypeMetadata.unresolveTypeState(); |
| 991 | |
| 992 | break; |
| 993 | } |
| 994 | } |
| 995 | } |
| 996 | |
| 997 | return childTypeMetadataSet; |
| 998 | } |
| 999 | |
| 1000 | /** |
| 1001 | * Resolves property metadata map. |
no test coverage detected