MCPcopy Create free account
hub / github.com/Effect-TS/effect / parseMembersFromTsType

Function parseMembersFromTsType

packages/tools/jsdocs/src/Jsdocs.ts:3033–3069  ·  view source on GitHub ↗
(
  type: ts.TypeNode | undefined,
  diagnostics: Array<JSDocModelDiagnostic>,
  linkContext: { readonly checker: ts.TypeChecker; readonly entry: ProgramCacheEntry; readonly cwd: string }
)

Source from the content-addressed store, hash-verified

3031}
3032
3033function parseMembersFromTsType(
3034 type: ts.TypeNode | undefined,
3035 diagnostics: Array<JSDocModelDiagnostic>,
3036 linkContext: { readonly checker: ts.TypeChecker; readonly entry: ProgramCacheEntry; readonly cwd: string }
3037): Array<ParsedMember> {
3038 if (!type) return []
3039 if (ts.isTypeLiteralNode(type)) return parseTsMembers(type.members, diagnostics, linkContext)
3040 if (ts.isUnionTypeNode(type) || ts.isIntersectionTypeNode(type)) {
3041 return type.types.flatMap((item) => parseMembersFromTsType(item, diagnostics, linkContext))
3042 }
3043 if (ts.isParenthesizedTypeNode(type) || ts.isTypeOperatorNode(type)) {
3044 return parseMembersFromTsType(type.type, diagnostics, linkContext)
3045 }
3046 if (ts.isArrayTypeNode(type)) return parseMembersFromTsType(type.elementType, diagnostics, linkContext)
3047 if (ts.isConditionalTypeNode(type)) {
3048 return [
3049 ...parseMembersFromTsType(type.checkType, diagnostics, linkContext),
3050 ...parseMembersFromTsType(type.extendsType, diagnostics, linkContext),
3051 ...parseMembersFromTsType(type.trueType, diagnostics, linkContext),
3052 ...parseMembersFromTsType(type.falseType, diagnostics, linkContext)
3053 ]
3054 }
3055 if (ts.isTypeReferenceNode(type)) {
3056 return type.typeArguments?.flatMap((item) => parseMembersFromTsType(item, diagnostics, linkContext)) ?? []
3057 }
3058 if (ts.isMappedTypeNode(type)) return parseMembersFromTsType(type.type, diagnostics, linkContext)
3059 if (ts.isIndexedAccessTypeNode(type)) {
3060 return [
3061 ...parseMembersFromTsType(type.objectType, diagnostics, linkContext),
3062 ...parseMembersFromTsType(type.indexType, diagnostics, linkContext)
3063 ]
3064 }
3065 if (ts.isFunctionTypeNode(type) || ts.isConstructorTypeNode(type)) {
3066 return parseMembersFromTsType(type.type, diagnostics, linkContext)
3067 }
3068 return []
3069}
3070
3071function memberName(member: ts.TypeElement | ts.ClassElement): string {
3072 if (

Callers 2

parseTsMembersFunction · 0.85

Calls 1

parseTsMembersFunction · 0.85

Tested by

no test coverage detected