( type: ts.NodeWithTypeArguments, symbolGroup: SymbolGroup, leadingComments: NodeComments | undefined, references: AST.TypeReferences, )
| 250 | } |
| 251 | |
| 252 | function parseTypeFromSymbolGroup( |
| 253 | type: ts.NodeWithTypeArguments, |
| 254 | symbolGroup: SymbolGroup, |
| 255 | leadingComments: NodeComments | undefined, |
| 256 | references: AST.TypeReferences, |
| 257 | ): AST.Type { |
| 258 | if (symbolGroup.symbol) { |
| 259 | const resolvedSymbol = symbolGroup.symbol; |
| 260 | if (resolvedSymbol.name === 'Array') { |
| 261 | if (!type.typeArguments || type.typeArguments.length !== 1) { |
| 262 | throw new Error( |
| 263 | `Resolved a generic Array reference with invalid type arguments ${getNodeDebugDescription(type)}`, |
| 264 | ); |
| 265 | } |
| 266 | |
| 267 | const elementTypeNode = type.typeArguments[0]; |
| 268 | const elementType = parseType(elementTypeNode, references); |
| 269 | return { name: 'array', leadingComments, array: elementType }; |
| 270 | } |
| 271 | |
| 272 | const typeArguments = type.typeArguments?.map((typeArgTypeNode) => { |
| 273 | const parsedType = parseType(typeArgTypeNode, references); |
| 274 | return { type: parsedType }; |
| 275 | }); |
| 276 | |
| 277 | const typeReferenceIndex = resolveTypeReference(type, resolvedSymbol, references); |
| 278 | return { |
| 279 | name: 'reference', |
| 280 | leadingComments, |
| 281 | typeReferenceIndex, |
| 282 | typeArguments, |
| 283 | isTypeParameter: resolvedSymbol.isTypeParameter, |
| 284 | }; |
| 285 | } |
| 286 | |
| 287 | if (symbolGroup.intersections) { |
| 288 | return { |
| 289 | name: 'intersection', |
| 290 | leadingComments, |
| 291 | intersections: symbolGroup.intersections.map((u) => parseTypeFromSymbolGroup(type, u, undefined, references)), |
| 292 | }; |
| 293 | } |
| 294 | |
| 295 | if (symbolGroup.unions) { |
| 296 | return { |
| 297 | name: 'union', |
| 298 | leadingComments, |
| 299 | unions: symbolGroup.unions.map((u) => parseTypeFromSymbolGroup(type, u, undefined, references)), |
| 300 | }; |
| 301 | } |
| 302 | |
| 303 | throw new Error('Invalid symbolGroup'); |
| 304 | } |
| 305 | |
| 306 | function parseType(type: ts.TypeNode | undefined, references: AST.TypeReferences): AST.Type { |
| 307 | if (!type) { |
no test coverage detected