Files
discord.js/apps/website/src/util/model.ts
Suneet Tipirneni 516c46117c feat(website): use tsdoc parameter names wherever possible (#9413)
Co-authored-by: Noel <buechler.noel@outlook.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
2023-04-17 18:44:17 +02:00

52 lines
1.8 KiB
TypeScript

import type {
ApiDocumentedItem,
ApiEntryPoint,
ApiModel,
ApiParameterListMixin,
Excerpt,
} from '@microsoft/api-extractor-model';
import type { DocSection } from '@microsoft/tsdoc';
export function findMemberByKey(model: ApiModel, packageName: string, containerKey: string) {
const pkg = model.tryGetPackageByName(`@discordjs/${packageName}`)!;
return (pkg.members[0] as ApiEntryPoint).tryGetMemberByKey(containerKey);
}
export function findMember(model: ApiModel, packageName: string, memberName: string | undefined) {
if (!memberName) {
return undefined;
}
const pkg = model.tryGetPackageByName(`@discordjs/${packageName}`)!;
return pkg.entryPoints[0]?.findMembersByName(memberName)[0];
}
interface ResolvedParameter {
description?: DocSection | undefined;
isOptional: boolean;
name: string;
parameterTypeExcerpt: Excerpt;
}
/**
* This takes an api item with a parameter list and resolves the names and descriptions of all the parameters.
*
* @remarks
* This is different from accessing `Parameter#name` or `Parameter.tsdocBlockComment` as this method cross-references the associated tsdoc
* parameter names and descriptions and uses them as a higher precedence to the source code.
* @param item - The api item to resolve parameter data for
* @returns An array of parameters
*/
export function resolveParameters(item: ApiDocumentedItem & ApiParameterListMixin): ResolvedParameter[] {
return item.parameters.map((param, idx) => {
const tsdocAnalog = item.tsdocComment?.params.blocks[idx];
return {
name: param.tsdocParamBlock?.parameterName ?? tsdocAnalog?.parameterName ?? param.name,
description: param.tsdocParamBlock?.content ?? tsdocAnalog?.content,
isOptional: param.isOptional,
parameterTypeExcerpt: param.parameterTypeExcerpt,
};
});
}