mirror of
https://github.com/discordjs/discord.js.git
synced 2026-06-02 17:10:08 +00:00
72 lines
2.4 KiB
TypeScript
72 lines
2.4 KiB
TypeScript
import { ApiItemKind } from '@microsoft/api-extractor-model';
|
|
import type {
|
|
ApiItem,
|
|
ApiItemContainerMixin,
|
|
ApiMethod,
|
|
ApiMethodSignature,
|
|
ApiProperty,
|
|
ApiPropertySignature,
|
|
ApiDocumentedItem,
|
|
ApiParameterListMixin,
|
|
} from '@microsoft/api-extractor-model';
|
|
import type { TableOfContentsSerialized } from '../TableOfContentItems';
|
|
import { METHOD_SEPARATOR, OVERLOAD_SEPARATOR } from '~/util/constants';
|
|
import { resolveMembers } from '~/util/members';
|
|
import { resolveParameters } from '~/util/model';
|
|
|
|
export function hasProperties(item: ApiItemContainerMixin) {
|
|
return resolveMembers(item, memberPredicate).some(
|
|
({ item: member }) => member.kind === ApiItemKind.Property || member.kind === ApiItemKind.PropertySignature,
|
|
);
|
|
}
|
|
|
|
export function hasMethods(item: ApiItemContainerMixin) {
|
|
return resolveMembers(item, memberPredicate).some(
|
|
({ item: member }) => member.kind === ApiItemKind.Method || member.kind === ApiItemKind.MethodSignature,
|
|
);
|
|
}
|
|
|
|
export function resolveItemURI(item: ApiItem): string {
|
|
return !item.parent || item.parent.kind === ApiItemKind.EntryPoint
|
|
? `${item.displayName}${OVERLOAD_SEPARATOR}${item.kind}`
|
|
: `${item.parent.displayName}${OVERLOAD_SEPARATOR}${item.parent.kind}${METHOD_SEPARATOR}${item.displayName}`;
|
|
}
|
|
|
|
export function memberPredicate(
|
|
item: ApiItem,
|
|
): item is ApiMethod | ApiMethodSignature | ApiProperty | ApiPropertySignature {
|
|
return (
|
|
item.kind === ApiItemKind.Property ||
|
|
item.kind === ApiItemKind.PropertySignature ||
|
|
item.kind === ApiItemKind.Method ||
|
|
item.kind === ApiItemKind.MethodSignature
|
|
);
|
|
}
|
|
|
|
export function serializeMembers(clazz: ApiItemContainerMixin): TableOfContentsSerialized[] {
|
|
return resolveMembers(clazz, memberPredicate).map(({ item: member }) => {
|
|
if (member.kind === 'Method' || member.kind === 'MethodSignature') {
|
|
return {
|
|
kind: member.kind as 'Method' | 'MethodSignature',
|
|
name: member.displayName,
|
|
};
|
|
} else {
|
|
return {
|
|
kind: member.kind as 'Property' | 'PropertySignature',
|
|
name: member.displayName,
|
|
overloadIndex: (member as ApiMethod | ApiMethodSignature).overloadIndex,
|
|
};
|
|
}
|
|
});
|
|
}
|
|
|
|
export function parametersString(item: ApiDocumentedItem & ApiParameterListMixin) {
|
|
return resolveParameters(item).reduce((prev, cur, index) => {
|
|
if (index === 0) {
|
|
return `${prev}${cur.isOptional ? `${cur.name}?` : cur.name}`;
|
|
}
|
|
|
|
return `${prev}, ${cur.isOptional ? `${cur.name}?` : cur.name}`;
|
|
}, '');
|
|
}
|