@doccov/sdk 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +104 -6
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1618,6 +1618,20 @@ function withDescription(schema, description) {
|
|
|
1618
1618
|
description
|
|
1619
1619
|
};
|
|
1620
1620
|
}
|
|
1621
|
+
function getPropertyType(prop, parentType, typeChecker) {
|
|
1622
|
+
if (prop.valueDeclaration) {
|
|
1623
|
+
return typeChecker.getTypeOfSymbolAtLocation(prop, prop.valueDeclaration);
|
|
1624
|
+
}
|
|
1625
|
+
const propType = typeChecker.getTypeOfPropertyOfType(parentType, prop.getName());
|
|
1626
|
+
if (propType) {
|
|
1627
|
+
return propType;
|
|
1628
|
+
}
|
|
1629
|
+
const decl = prop.declarations?.[0];
|
|
1630
|
+
if (decl) {
|
|
1631
|
+
return typeChecker.getTypeOfSymbolAtLocation(prop, decl);
|
|
1632
|
+
}
|
|
1633
|
+
return typeChecker.getAnyType();
|
|
1634
|
+
}
|
|
1621
1635
|
function propertiesToSchema(properties, description) {
|
|
1622
1636
|
const schema = {
|
|
1623
1637
|
type: "object",
|
|
@@ -1958,7 +1972,7 @@ function formatTypeReference(type, typeChecker, typeRefs, referencedTypes, visit
|
|
|
1958
1972
|
};
|
|
1959
1973
|
const required = [];
|
|
1960
1974
|
for (const prop of properties) {
|
|
1961
|
-
const propType =
|
|
1975
|
+
const propType = getPropertyType(prop, type, typeChecker);
|
|
1962
1976
|
const propName = prop.getName();
|
|
1963
1977
|
objSchema.properties[propName] = formatTypeReference(propType, typeChecker, typeRefs, referencedTypes, visited);
|
|
1964
1978
|
if (!(prop.flags & ts2.SymbolFlags.Optional)) {
|
|
@@ -2043,7 +2057,7 @@ function structureParameter(param, paramDecl, paramType, typeChecker, typeRefs,
|
|
|
2043
2057
|
const isAnonymousObject = isObjectLiteralType(subType) || symbol2?.getName().startsWith("__");
|
|
2044
2058
|
if (isAnonymousObject) {
|
|
2045
2059
|
for (const prop of subType.getProperties()) {
|
|
2046
|
-
const propType =
|
|
2060
|
+
const propType = getPropertyType(prop, subType, typeChecker);
|
|
2047
2061
|
let description = "";
|
|
2048
2062
|
if (functionDoc) {
|
|
2049
2063
|
const propName = prop.getName();
|
|
@@ -2063,7 +2077,7 @@ function structureParameter(param, paramDecl, paramType, typeChecker, typeRefs,
|
|
|
2063
2077
|
const _symbolName = symbol2.getName();
|
|
2064
2078
|
if (!isBuiltInType(_symbolName)) {
|
|
2065
2079
|
for (const prop of subType.getProperties()) {
|
|
2066
|
-
const propType =
|
|
2080
|
+
const propType = getPropertyType(prop, subType, typeChecker);
|
|
2067
2081
|
properties.push({
|
|
2068
2082
|
name: prop.getName(),
|
|
2069
2083
|
type: formatTypeReference(propType, typeChecker, typeRefs, referencedTypes),
|
|
@@ -2094,7 +2108,7 @@ function structureParameter(param, paramDecl, paramType, typeChecker, typeRefs,
|
|
|
2094
2108
|
if (isObjectLiteralType(subType) || symbol2?.getName().startsWith("__")) {
|
|
2095
2109
|
const properties = [];
|
|
2096
2110
|
for (const prop of subType.getProperties()) {
|
|
2097
|
-
const propType =
|
|
2111
|
+
const propType = getPropertyType(prop, subType, typeChecker);
|
|
2098
2112
|
properties.push({
|
|
2099
2113
|
name: prop.getName(),
|
|
2100
2114
|
type: formatTypeReference(propType, typeChecker, typeRefs, referencedTypes),
|
|
@@ -2128,7 +2142,7 @@ function structureParameter(param, paramDecl, paramType, typeChecker, typeRefs,
|
|
|
2128
2142
|
if ((symbol?.getName().startsWith("__") || isObjectLiteralType(paramType)) && paramType.getProperties().length > 0) {
|
|
2129
2143
|
const properties = [];
|
|
2130
2144
|
for (const prop of paramType.getProperties()) {
|
|
2131
|
-
const propType =
|
|
2145
|
+
const propType = getPropertyType(prop, paramType, typeChecker);
|
|
2132
2146
|
properties.push({
|
|
2133
2147
|
name: prop.getName(),
|
|
2134
2148
|
type: formatTypeReference(propType, typeChecker, typeRefs, referencedTypes),
|
|
@@ -2825,7 +2839,8 @@ function serializeCallSignatures(signatures, symbol, context, parsedDoc) {
|
|
|
2825
2839
|
return signatures.map((signature) => {
|
|
2826
2840
|
const parameters = signature.getParameters().map((param) => {
|
|
2827
2841
|
const paramDecl = param.declarations?.find(ts2.isParameter);
|
|
2828
|
-
const
|
|
2842
|
+
const location = symbol?.declarations?.[0] ?? signature.declaration ?? param.declarations?.[0] ?? param.valueDeclaration;
|
|
2843
|
+
const paramType = paramDecl ? paramDecl.type != null ? checker.getTypeFromTypeNode(paramDecl.type) : checker.getTypeAtLocation(paramDecl) : location ? checker.getTypeOfSymbolAtLocation(param, location) : checker.getAnyType();
|
|
2829
2844
|
collectReferencedTypes(paramType, checker, referencedTypes);
|
|
2830
2845
|
if (paramDecl?.type) {
|
|
2831
2846
|
collectReferencedTypesFromNode(paramDecl.type, checker, referencedTypes);
|
|
@@ -2895,6 +2910,86 @@ function serializeFunctionExport(declaration, symbol, context) {
|
|
|
2895
2910
|
}
|
|
2896
2911
|
|
|
2897
2912
|
// src/analysis/serializers/interfaces.ts
|
|
2913
|
+
function serializeInterfaceMembers(declaration, checker, typeRefs, referencedTypes) {
|
|
2914
|
+
const members = [];
|
|
2915
|
+
for (const member of declaration.members) {
|
|
2916
|
+
if (ts2.isPropertySignature(member)) {
|
|
2917
|
+
const memberName = member.name?.getText();
|
|
2918
|
+
if (!memberName)
|
|
2919
|
+
continue;
|
|
2920
|
+
const memberSymbol = member.name ? checker.getSymbolAtLocation(member.name) : undefined;
|
|
2921
|
+
const memberDoc = memberSymbol ? parseJSDocComment(memberSymbol, checker) : null;
|
|
2922
|
+
const memberType = member.type ? checker.getTypeAtLocation(member.type) : checker.getAnyType();
|
|
2923
|
+
collectReferencedTypes(memberType, checker, referencedTypes);
|
|
2924
|
+
const schema = formatTypeReference(memberType, checker, typeRefs, referencedTypes);
|
|
2925
|
+
const flags = {};
|
|
2926
|
+
if (member.questionToken) {
|
|
2927
|
+
flags.optional = true;
|
|
2928
|
+
}
|
|
2929
|
+
if (member.modifiers?.some((mod) => mod.kind === ts2.SyntaxKind.ReadonlyKeyword)) {
|
|
2930
|
+
flags.readonly = true;
|
|
2931
|
+
}
|
|
2932
|
+
members.push({
|
|
2933
|
+
id: memberName,
|
|
2934
|
+
name: memberName,
|
|
2935
|
+
kind: "property",
|
|
2936
|
+
schema,
|
|
2937
|
+
description: memberDoc?.description ?? (memberSymbol ? getJSDocComment(memberSymbol, checker) : undefined),
|
|
2938
|
+
flags: Object.keys(flags).length > 0 ? flags : undefined,
|
|
2939
|
+
tags: memberDoc?.tags
|
|
2940
|
+
});
|
|
2941
|
+
} else if (ts2.isMethodSignature(member)) {
|
|
2942
|
+
const methodName = member.name?.getText();
|
|
2943
|
+
if (!methodName)
|
|
2944
|
+
continue;
|
|
2945
|
+
const memberSymbol = member.name ? checker.getSymbolAtLocation(member.name) : undefined;
|
|
2946
|
+
const methodDoc = memberSymbol ? parseJSDocComment(memberSymbol, checker) : null;
|
|
2947
|
+
const signature = checker.getSignatureFromDeclaration(member);
|
|
2948
|
+
if (signature) {
|
|
2949
|
+
const parameters = signature.getParameters().map((param) => {
|
|
2950
|
+
const paramDecl = param.declarations?.find(ts2.isParameter);
|
|
2951
|
+
const paramType = paramDecl ? checker.getTypeAtLocation(paramDecl) : checker.getTypeOfSymbolAtLocation(param, member);
|
|
2952
|
+
collectReferencedTypes(paramType, checker, referencedTypes);
|
|
2953
|
+
if (paramDecl) {
|
|
2954
|
+
const paramDoc = getParameterDocumentation(param, paramDecl, checker);
|
|
2955
|
+
return structureParameter(param, paramDecl, paramType, checker, typeRefs, null, paramDoc, referencedTypes);
|
|
2956
|
+
}
|
|
2957
|
+
return {
|
|
2958
|
+
name: param.getName(),
|
|
2959
|
+
required: !(param.flags & ts2.SymbolFlags.Optional),
|
|
2960
|
+
schema: formatTypeReference(paramType, checker, typeRefs, referencedTypes)
|
|
2961
|
+
};
|
|
2962
|
+
});
|
|
2963
|
+
const returnType = signature.getReturnType();
|
|
2964
|
+
if (returnType) {
|
|
2965
|
+
collectReferencedTypes(returnType, checker, referencedTypes);
|
|
2966
|
+
}
|
|
2967
|
+
const flags = {};
|
|
2968
|
+
if (member.questionToken) {
|
|
2969
|
+
flags.optional = true;
|
|
2970
|
+
}
|
|
2971
|
+
members.push({
|
|
2972
|
+
id: methodName,
|
|
2973
|
+
name: methodName,
|
|
2974
|
+
kind: "method",
|
|
2975
|
+
signatures: [
|
|
2976
|
+
{
|
|
2977
|
+
parameters,
|
|
2978
|
+
returns: {
|
|
2979
|
+
schema: returnType ? formatTypeReference(returnType, checker, typeRefs, referencedTypes) : { type: "void" }
|
|
2980
|
+
},
|
|
2981
|
+
description: methodDoc?.description
|
|
2982
|
+
}
|
|
2983
|
+
],
|
|
2984
|
+
description: methodDoc?.description ?? (memberSymbol ? getJSDocComment(memberSymbol, checker) : undefined),
|
|
2985
|
+
flags: Object.keys(flags).length > 0 ? flags : undefined,
|
|
2986
|
+
tags: methodDoc?.tags
|
|
2987
|
+
});
|
|
2988
|
+
}
|
|
2989
|
+
}
|
|
2990
|
+
}
|
|
2991
|
+
return members;
|
|
2992
|
+
}
|
|
2898
2993
|
function serializeInterface(declaration, symbol, context) {
|
|
2899
2994
|
const { checker, typeRegistry } = context;
|
|
2900
2995
|
const parsedDoc = parseJSDocComment(symbol, checker);
|
|
@@ -2903,6 +2998,7 @@ function serializeInterface(declaration, symbol, context) {
|
|
|
2903
2998
|
const referencedTypes = typeRegistry.getReferencedTypes();
|
|
2904
2999
|
const typeRefs = typeRegistry.getTypeRefs();
|
|
2905
3000
|
const typeParameters = serializeTypeParameterDeclarations(declaration.typeParameters, checker, referencedTypes);
|
|
3001
|
+
const members = serializeInterfaceMembers(declaration, checker, typeRefs, referencedTypes);
|
|
2906
3002
|
const exportEntry = {
|
|
2907
3003
|
id: symbol.getName(),
|
|
2908
3004
|
name: symbol.getName(),
|
|
@@ -2911,6 +3007,7 @@ function serializeInterface(declaration, symbol, context) {
|
|
|
2911
3007
|
deprecated: isSymbolDeprecated(symbol),
|
|
2912
3008
|
description,
|
|
2913
3009
|
source: getSourceLocation(declaration),
|
|
3010
|
+
members,
|
|
2914
3011
|
typeParameters,
|
|
2915
3012
|
tags: parsedDoc?.tags,
|
|
2916
3013
|
examples: parsedDoc?.examples
|
|
@@ -2922,6 +3019,7 @@ function serializeInterface(declaration, symbol, context) {
|
|
|
2922
3019
|
...metadata,
|
|
2923
3020
|
kind: "interface",
|
|
2924
3021
|
schema,
|
|
3022
|
+
members,
|
|
2925
3023
|
description,
|
|
2926
3024
|
source: getSourceLocation(declaration),
|
|
2927
3025
|
tags: parsedDoc?.tags
|