(
node: ts.ModuleDeclaration,
diagnostics: Array<JSDocModelDiagnostic>,
linkContext: { readonly checker: ts.TypeChecker; readonly entry: ProgramCacheEntry; readonly cwd: string },
isInsideDeclare = false
)
| 3030 | return symbol === undefined ? null : symbolSignature(name, bucket, symbol, specifier.name, checker, cwd) |
| 3031 | } |
| 3032 | |
| 3033 | function 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 | |
| 3071 | function memberName(member: ts.TypeElement | ts.ClassElement): string { |
| 3072 | if ( |
| 3073 | ts.isPropertySignature(member) || ts.isMethodSignature(member) || ts.isPropertyDeclaration(member) || |
| 3074 | ts.isMethodDeclaration(member) || ts.isGetAccessorDeclaration(member) || ts.isSetAccessorDeclaration(member) |
| 3075 | ) { |
| 3076 | const name = member.name |
| 3077 | if (ts.isComputedPropertyName(name)) return name.expression.getText(member.getSourceFile()) |
| 3078 | return name.getText(member.getSourceFile()).replace(/^[']|[']$/g, "") |
| 3079 | } |
| 3080 | return "" |
| 3081 | } |
| 3082 | |
| 3083 | function memberType(member: ts.TypeElement | ts.ClassElement): ts.TypeNode | undefined { |
| 3084 | if ( |
| 3085 | ts.isPropertySignature(member) || ts.isMethodSignature(member) || ts.isPropertyDeclaration(member) || |
| 3086 | ts.isMethodDeclaration(member) || ts.isGetAccessorDeclaration(member) || ts.isSetAccessorDeclaration(member) |
| 3087 | ) return member.type |
| 3088 | return undefined |
| 3089 | } |
no test coverage detected
searching dependent graphs…