feat(website): add support for type parameter documentation (#8237)

This commit is contained in:
Suneet Tipirneni
2022-07-06 11:37:33 -04:00
committed by GitHub
parent 8198da5cd0
commit 34531c45e3
14 changed files with 145 additions and 12 deletions

View File

@@ -8,24 +8,29 @@ import {
import { DocItem } from './DocItem';
import { DocMethod } from './DocMethod';
import { DocProperty } from './DocProperty';
import { type TokenDocumentation, genToken } from '~/util/parse.server';
import { type TokenDocumentation, genToken, TypeParameterData, generateTypeParamData } from '~/util/parse.server';
export class DocClass extends DocItem<ApiClass> {
public readonly extendsTokens: TokenDocumentation[] | null;
public readonly implementsTokens: TokenDocumentation[][];
public readonly methods: DocMethod[] = [];
public readonly properties: DocProperty[] = [];
public readonly typeParameters: TypeParameterData[] = [];
public constructor(model: ApiModel, item: ApiClass) {
super(model, item);
const extendsExcerpt = item.extendsType?.excerpt;
this.extendsTokens = extendsExcerpt
? extendsExcerpt.spannedTokens.map((token) => genToken(this.model, token))
: null;
this.implementsTokens = item.implementsTypes.map((excerpt) =>
excerpt.excerpt.spannedTokens.map((token) => genToken(this.model, token)),
);
this.typeParameters = item.typeParameters.map((typeParam) => generateTypeParamData(model, typeParam));
for (const member of item.members) {
switch (member.kind) {
case ApiItemKind.Method:
@@ -47,6 +52,7 @@ export class DocClass extends DocItem<ApiClass> {
implementsTokens: this.implementsTokens,
methods: this.methods.map((method) => method.toJSON()),
properties: this.properties.map((prop) => prop.toJSON()),
typeParameters: this.typeParameters,
};
}
}

View File

@@ -1,17 +1,26 @@
import type { ApiFunction, ApiModel } from '@microsoft/api-extractor-model';
import { DocItem } from './DocItem';
import { type ParameterDocumentation, type TokenDocumentation, genParameter, genToken } from '~/util/parse.server';
import {
type ParameterDocumentation,
type TokenDocumentation,
genParameter,
genToken,
type TypeParameterData,
generateTypeParamData,
} from '~/util/parse.server';
export class DocFunction extends DocItem<ApiFunction> {
public readonly parameters: ParameterDocumentation[];
public readonly returnTypeTokens: TokenDocumentation[];
public readonly overloadIndex: number;
public readonly typeParameters: TypeParameterData[] = [];
public constructor(model: ApiModel, item: ApiFunction) {
super(model, item);
this.parameters = item.parameters.map((param) => genParameter(this.model, param));
this.returnTypeTokens = item.returnTypeExcerpt.spannedTokens.map((token) => genToken(this.model, token));
this.overloadIndex = item.overloadIndex;
this.typeParameters = item.typeParameters.map((typeParam) => generateTypeParamData(model, typeParam));
}
public override toJSON() {
@@ -20,6 +29,7 @@ export class DocFunction extends DocItem<ApiFunction> {
parameters: this.parameters,
returnTypeTokens: this.returnTypeTokens,
overloadIndex: this.overloadIndex,
typeParameters: this.typeParameters,
};
}
}

View File

@@ -2,12 +2,13 @@ import { DocItem } from './DocItem';
import { DocMethodSignature } from './DocMethodSignature';
import { DocProperty } from './DocProperty';
import { ApiInterface, ApiItemKind, ApiMethodSignature, ApiModel, ApiPropertySignature } from '~/api-extractor.server';
import { type TokenDocumentation, genToken } from '~/util/parse.server';
import { type TokenDocumentation, genToken, type TypeParameterData, generateTypeParamData } from '~/util/parse.server';
export class DocInterface extends DocItem<ApiInterface> {
public readonly extendsTokens: TokenDocumentation[][] | null;
public readonly methods: DocMethodSignature[] = [];
public readonly properties: DocProperty[] = [];
public readonly typeParameters: TypeParameterData[] = [];
public constructor(model: ApiModel, item: ApiInterface) {
super(model, item);
@@ -16,6 +17,8 @@ export class DocInterface extends DocItem<ApiInterface> {
excerpt.excerpt.spannedTokens.map((token) => genToken(this.model, token)),
);
this.typeParameters = item.typeParameters.map((typeParam) => generateTypeParamData(this.model, typeParam));
for (const member of item.members) {
switch (member.kind) {
case ApiItemKind.MethodSignature:
@@ -36,6 +39,7 @@ export class DocInterface extends DocItem<ApiInterface> {
extendsTokens: this.extendsTokens,
methods: this.methods.map((method) => method.toJSON()),
properties: this.properties.map((prop) => prop.toJSON()),
typeParameters: this.typeParameters,
};
}
}

View File

@@ -1,7 +1,14 @@
import type { ApiMethod, ApiModel } from '@microsoft/api-extractor-model';
import { DocItem } from './DocItem';
import { Visibility } from './Visibility';
import { type ParameterDocumentation, type TokenDocumentation, genParameter, genToken } from '~/util/parse.server';
import {
type ParameterDocumentation,
type TokenDocumentation,
genParameter,
genToken,
generateTypeParamData,
TypeParameterData,
} from '~/util/parse.server';
export class DocMethod extends DocItem<ApiMethod> {
public readonly parameters: ParameterDocumentation[];
@@ -10,6 +17,7 @@ export class DocMethod extends DocItem<ApiMethod> {
public readonly visibility: Visibility;
public readonly returnTypeTokens: TokenDocumentation[];
public readonly overloadIndex: number;
public readonly typeParameters: TypeParameterData[] = [];
public constructor(model: ApiModel, item: ApiMethod) {
super(model, item);
@@ -19,6 +27,7 @@ export class DocMethod extends DocItem<ApiMethod> {
this.visibility = item.isProtected ? Visibility.Protected : Visibility.Public;
this.returnTypeTokens = item.returnTypeExcerpt.spannedTokens.map((token) => genToken(this.model, token));
this.overloadIndex = item.overloadIndex;
this.typeParameters = item.typeParameters.map((typeParam) => generateTypeParamData(this.model, typeParam));
}
public override toJSON() {

View File

@@ -1,12 +1,20 @@
import type { ApiMethodSignature, ApiModel } from '@microsoft/api-extractor-model';
import { DocItem } from './DocItem';
import { type ParameterDocumentation, type TokenDocumentation, genParameter, genToken } from '~/util/parse.server';
import {
type ParameterDocumentation,
type TokenDocumentation,
genParameter,
genToken,
generateTypeParamData,
type TypeParameterData,
} from '~/util/parse.server';
export class DocMethodSignature extends DocItem<ApiMethodSignature> {
public readonly parameters: ParameterDocumentation[];
public readonly optional: boolean;
public readonly returnTypeTokens: TokenDocumentation[];
public readonly overloadIndex: number;
public readonly typeParameters: TypeParameterData[] = [];
public constructor(model: ApiModel, item: ApiMethodSignature) {
super(model, item);
@@ -14,6 +22,7 @@ export class DocMethodSignature extends DocItem<ApiMethodSignature> {
this.optional = item.isOptional;
this.returnTypeTokens = item.returnTypeExcerpt.spannedTokens.map((token) => genToken(this.model, token));
this.overloadIndex = item.overloadIndex;
this.typeParameters = item.typeParameters.map((typeParam) => generateTypeParamData(this.model, typeParam));
}
public override toJSON() {

View File

@@ -1,19 +1,22 @@
import type { ApiModel, ApiTypeAlias } from '@microsoft/api-extractor-model';
import { DocItem } from './DocItem';
import { type TokenDocumentation, genToken } from '~/util/parse.server';
import { type TokenDocumentation, genToken, generateTypeParamData, type TypeParameterData } from '~/util/parse.server';
export class DocTypeAlias extends DocItem<ApiTypeAlias> {
public readonly typeTokens: TokenDocumentation[];
public readonly typeParameters: TypeParameterData[] = [];
public constructor(model: ApiModel, item: ApiTypeAlias) {
super(model, item);
this.typeTokens = item.typeExcerpt.spannedTokens.map((token) => genToken(model, token));
this.typeParameters = item.typeParameters.map((typeParam) => generateTypeParamData(this.model, typeParam));
}
public override toJSON() {
return {
...super.toJSON(),
typeTokens: this.typeTokens,
typeParameters: this.typeParameters,
};
}
}