@doccov/sdk 0.3.4 → 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.
Files changed (2) hide show
  1. package/dist/index.js +83 -0
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -2910,6 +2910,86 @@ function serializeFunctionExport(declaration, symbol, context) {
2910
2910
  }
2911
2911
 
2912
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
+ }
2913
2993
  function serializeInterface(declaration, symbol, context) {
2914
2994
  const { checker, typeRegistry } = context;
2915
2995
  const parsedDoc = parseJSDocComment(symbol, checker);
@@ -2918,6 +2998,7 @@ function serializeInterface(declaration, symbol, context) {
2918
2998
  const referencedTypes = typeRegistry.getReferencedTypes();
2919
2999
  const typeRefs = typeRegistry.getTypeRefs();
2920
3000
  const typeParameters = serializeTypeParameterDeclarations(declaration.typeParameters, checker, referencedTypes);
3001
+ const members = serializeInterfaceMembers(declaration, checker, typeRefs, referencedTypes);
2921
3002
  const exportEntry = {
2922
3003
  id: symbol.getName(),
2923
3004
  name: symbol.getName(),
@@ -2926,6 +3007,7 @@ function serializeInterface(declaration, symbol, context) {
2926
3007
  deprecated: isSymbolDeprecated(symbol),
2927
3008
  description,
2928
3009
  source: getSourceLocation(declaration),
3010
+ members,
2929
3011
  typeParameters,
2930
3012
  tags: parsedDoc?.tags,
2931
3013
  examples: parsedDoc?.examples
@@ -2937,6 +3019,7 @@ function serializeInterface(declaration, symbol, context) {
2937
3019
  ...metadata,
2938
3020
  kind: "interface",
2939
3021
  schema,
3022
+ members,
2940
3023
  description,
2941
3024
  source: getSourceLocation(declaration),
2942
3025
  tags: parsedDoc?.tags
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doccov/sdk",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "description": "DocCov SDK - Documentation coverage and drift detection for TypeScript",
5
5
  "keywords": [
6
6
  "typescript",