mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-17 20:13:30 +01:00
feat(website): type parameters on methods and overloads (#9998)
* feat(website): type parameters on methods and overloads * refactor: add collapsible parameter list
This commit is contained in:
@@ -1,11 +1,13 @@
|
|||||||
import type {
|
import {
|
||||||
ApiDeclaredItem,
|
ApiItemKind,
|
||||||
ApiItemContainerMixin,
|
type ApiDeclaredItem,
|
||||||
ApiMethod,
|
type ApiItemContainerMixin,
|
||||||
ApiMethodSignature,
|
type ApiMethod,
|
||||||
|
type ApiMethodSignature,
|
||||||
} from '@discordjs/api-extractor-model';
|
} from '@discordjs/api-extractor-model';
|
||||||
|
import { ParameterSection } from '~/components/documentation/section/ParametersSection';
|
||||||
|
import { TypeParameterSection } from '~/components/documentation/section/TypeParametersSection';
|
||||||
import { InheritanceText } from '../../InheritanceText';
|
import { InheritanceText } from '../../InheritanceText';
|
||||||
import { ParameterTable } from '../../ParameterTable';
|
|
||||||
import { TSDoc } from '../../documentation/tsdoc/TSDoc';
|
import { TSDoc } from '../../documentation/tsdoc/TSDoc';
|
||||||
|
|
||||||
export interface MethodDocumentationProps {
|
export interface MethodDocumentationProps {
|
||||||
@@ -15,15 +17,22 @@ export interface MethodDocumentationProps {
|
|||||||
|
|
||||||
export function MethodDocumentation({ method, inheritedFrom }: MethodDocumentationProps) {
|
export function MethodDocumentation({ method, inheritedFrom }: MethodDocumentationProps) {
|
||||||
const parent = method.parent as ApiDeclaredItem;
|
const parent = method.parent as ApiDeclaredItem;
|
||||||
|
const firstOverload = method
|
||||||
|
.getMergedSiblings()
|
||||||
|
.find((meth): meth is ApiMethod => meth.kind === ApiItemKind.Method && (meth as ApiMethod).overloadIndex === 1)
|
||||||
|
?.tsdocComment;
|
||||||
|
|
||||||
if (!(method.tsdocComment?.summarySection || method.parameters.length > 0)) {
|
if (!(method.tsdocComment?.summarySection || firstOverload?.summarySection || method.parameters.length > 0)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="mb-4 w-full flex flex-col gap-4">
|
<div className="mb-4 w-full flex flex-col gap-4">
|
||||||
{method.tsdocComment ? <TSDoc item={method} tsdoc={method.tsdocComment} /> : null}
|
{method.tsdocComment || firstOverload ? (
|
||||||
{method.parameters.length ? <ParameterTable item={method} /> : null}
|
<TSDoc item={method} tsdoc={method.tsdocComment ?? firstOverload!} />
|
||||||
|
) : null}
|
||||||
|
{method.typeParameters.length ? <TypeParameterSection item={method} /> : null}
|
||||||
|
{method.parameters.length ? <ParameterSection item={method} /> : null}
|
||||||
{inheritedFrom && parent ? <InheritanceText parent={inheritedFrom} /> : null}
|
{inheritedFrom && parent ? <InheritanceText parent={inheritedFrom} /> : null}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,10 +1,5 @@
|
|||||||
import type {
|
import type { ApiDocumentedItem, ApiEntryPoint, ApiModel, Excerpt } from '@discordjs/api-extractor-model';
|
||||||
ApiDocumentedItem,
|
import { ApiParameterListMixin } from '@discordjs/api-extractor-model';
|
||||||
ApiEntryPoint,
|
|
||||||
ApiModel,
|
|
||||||
ApiParameterListMixin,
|
|
||||||
Excerpt,
|
|
||||||
} from '@discordjs/api-extractor-model';
|
|
||||||
import type { DocSection } from '@microsoft/tsdoc';
|
import type { DocSection } from '@microsoft/tsdoc';
|
||||||
import { resolvePackageName } from './resolvePackageName';
|
import { resolvePackageName } from './resolvePackageName';
|
||||||
|
|
||||||
@@ -41,7 +36,14 @@ interface ResolvedParameter {
|
|||||||
*/
|
*/
|
||||||
export function resolveParameters(item: ApiDocumentedItem & ApiParameterListMixin): ResolvedParameter[] {
|
export function resolveParameters(item: ApiDocumentedItem & ApiParameterListMixin): ResolvedParameter[] {
|
||||||
return item.parameters.map((param, idx) => {
|
return item.parameters.map((param, idx) => {
|
||||||
const tsdocAnalog = item.tsdocComment?.params.blocks[idx];
|
const tsdocAnalog =
|
||||||
|
item.tsdocComment?.params.blocks[idx] ??
|
||||||
|
item
|
||||||
|
.getMergedSiblings()
|
||||||
|
.find(
|
||||||
|
(paramList): paramList is ApiDocumentedItem & ApiParameterListMixin =>
|
||||||
|
ApiParameterListMixin.isBaseClassOf(paramList) && paramList.overloadIndex === 1,
|
||||||
|
)?.tsdocComment?.params.blocks[idx];
|
||||||
|
|
||||||
return {
|
return {
|
||||||
name: param.tsdocParamBlock?.parameterName ?? tsdocAnalog?.parameterName ?? param.name,
|
name: param.tsdocParamBlock?.parameterName ?? tsdocAnalog?.parameterName ?? param.name,
|
||||||
|
|||||||
Reference in New Issue
Block a user