From 75b677093344e6ba783a6af03580e919a80641db Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Sun, 17 Apr 2022 04:51:11 -0400 Subject: [PATCH] chore(builders): simplify types (#7784) * chore(builders): simplify types * chore: removed uneeded partial --- packages/builders/src/components/ActionRow.ts | 26 ++++++------------- packages/builders/src/components/Component.ts | 25 +++++------------- .../builders/src/components/Components.ts | 4 +-- .../src/components/button/UnsafeButton.ts | 4 +-- .../components/selectMenu/UnsafeSelectMenu.ts | 4 +-- .../components/textInput/UnsafeTextInput.ts | 4 +-- .../src/interactions/modals/UnsafeModal.ts | 2 +- packages/discord.js/typings/index.d.ts | 20 +++++--------- packages/discord.js/typings/index.test-d.ts | 2 +- 9 files changed, 29 insertions(+), 62 deletions(-) diff --git a/packages/builders/src/components/ActionRow.ts b/packages/builders/src/components/ActionRow.ts index adb3a4374..f0eed4769 100644 --- a/packages/builders/src/components/ActionRow.ts +++ b/packages/builders/src/components/ActionRow.ts @@ -3,6 +3,7 @@ import { ComponentType, APIMessageActionRowComponent, APIModalActionRowComponent, + APIActionRowComponentTypes, } from 'discord-api-types/v10'; import type { ButtonBuilder, SelectMenuBuilder, TextInputBuilder } from '..'; import { ComponentBuilder } from './Component'; @@ -12,34 +13,22 @@ export type MessageComponentBuilder = | MessageActionRowComponentBuilder | ActionRowBuilder; export type ModalComponentBuilder = ModalActionRowComponentBuilder | ActionRowBuilder; - export type MessageActionRowComponentBuilder = ButtonBuilder | SelectMenuBuilder; export type ModalActionRowComponentBuilder = TextInputBuilder; +export type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComponentBuilder; /** * Represents an action row component */ -export class ActionRowBuilder< - T extends MessageActionRowComponentBuilder | ModalActionRowComponentBuilder = - | MessageActionRowComponentBuilder - | ModalActionRowComponentBuilder, -> extends ComponentBuilder< - Omit< - Partial> & { - type: ComponentType.ActionRow; - }, - 'components' - > +export class ActionRowBuilder extends ComponentBuilder< + APIActionRowComponent > { /** * The components within this action row */ public readonly components: T[]; - public constructor({ - components, - ...data - }: Partial> = {}) { + public constructor({ components, ...data }: Partial> = {}) { super({ type: ComponentType.ActionRow, ...data }); this.components = (components?.map((c) => createComponentBuilder(c)) ?? []) as T[]; } @@ -64,9 +53,10 @@ export class ActionRowBuilder< } public toJSON(): APIActionRowComponent> { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions return { ...this.data, - components: this.components.map((component) => component.toJSON()) as ReturnType[], - }; + components: this.components.map((component) => component.toJSON()), + } as APIActionRowComponent>; } } diff --git a/packages/builders/src/components/Component.ts b/packages/builders/src/components/Component.ts index eca853e5f..fd3f9fd46 100644 --- a/packages/builders/src/components/Component.ts +++ b/packages/builders/src/components/Component.ts @@ -3,37 +3,26 @@ import type { APIActionRowComponent, APIActionRowComponentTypes, APIBaseComponent, - APIMessageActionRowComponent, - APIMessageComponent, - APIModalActionRowComponent, - APIModalComponent, ComponentType, } from 'discord-api-types/v10'; +export type AnyAPIActionRowComponent = APIActionRowComponentTypes | APIActionRowComponent; + /** * Represents a discord component */ export abstract class ComponentBuilder< - DataType extends Partial> & { - type: ComponentType; - } = APIBaseComponent, -> implements - JSONEncodable< - | APIModalComponent - | APIMessageComponent - | APIActionRowComponent - > + DataType extends Partial> = APIBaseComponent, +> implements JSONEncodable { /** * The API data associated with this component */ - public readonly data: DataType; + public readonly data: Partial; - public abstract toJSON(): - | APIActionRowComponentTypes - | APIActionRowComponent; + public abstract toJSON(): AnyAPIActionRowComponent; - public constructor(data: DataType) { + public constructor(data: Partial) { this.data = data; } } diff --git a/packages/builders/src/components/Components.ts b/packages/builders/src/components/Components.ts index aaf4d38d1..582a3e783 100644 --- a/packages/builders/src/components/Components.ts +++ b/packages/builders/src/components/Components.ts @@ -1,9 +1,9 @@ import { APIMessageComponent, APIModalComponent, ComponentType } from 'discord-api-types/v10'; import { ActionRowBuilder, ButtonBuilder, ComponentBuilder, SelectMenuBuilder, TextInputBuilder } from '../index'; -import type { MessageComponentBuilder, ModalComponentBuilder } from './ActionRow'; +import type { AnyComponentBuilder, MessageComponentBuilder, ModalComponentBuilder } from './ActionRow'; export interface MappedComponentTypes { - [ComponentType.ActionRow]: ActionRowBuilder; + [ComponentType.ActionRow]: ActionRowBuilder; [ComponentType.Button]: ButtonBuilder; [ComponentType.SelectMenu]: SelectMenuBuilder; [ComponentType.TextInput]: TextInputBuilder; diff --git a/packages/builders/src/components/button/UnsafeButton.ts b/packages/builders/src/components/button/UnsafeButton.ts index be79c1e35..0a9950b2c 100644 --- a/packages/builders/src/components/button/UnsafeButton.ts +++ b/packages/builders/src/components/button/UnsafeButton.ts @@ -11,9 +11,7 @@ import { ComponentBuilder } from '../Component'; /** * Represents a non-validated button component */ -export class UnsafeButtonBuilder extends ComponentBuilder< - Partial & { type: ComponentType.Button } -> { +export class UnsafeButtonBuilder extends ComponentBuilder { public constructor(data?: Partial) { super({ type: ComponentType.Button, ...data }); } diff --git a/packages/builders/src/components/selectMenu/UnsafeSelectMenu.ts b/packages/builders/src/components/selectMenu/UnsafeSelectMenu.ts index 27b096c27..87280e724 100644 --- a/packages/builders/src/components/selectMenu/UnsafeSelectMenu.ts +++ b/packages/builders/src/components/selectMenu/UnsafeSelectMenu.ts @@ -5,9 +5,7 @@ import { UnsafeSelectMenuOptionBuilder } from './UnsafeSelectMenuOption'; /** * Represents a non-validated select menu component */ -export class UnsafeSelectMenuBuilder extends ComponentBuilder< - Partial> & { type: ComponentType.SelectMenu } -> { +export class UnsafeSelectMenuBuilder extends ComponentBuilder { /** * The options within this select menu */ diff --git a/packages/builders/src/components/textInput/UnsafeTextInput.ts b/packages/builders/src/components/textInput/UnsafeTextInput.ts index ab4546aad..b81c79ceb 100644 --- a/packages/builders/src/components/textInput/UnsafeTextInput.ts +++ b/packages/builders/src/components/textInput/UnsafeTextInput.ts @@ -2,9 +2,7 @@ import { ComponentType, type TextInputStyle, type APITextInputComponent } from ' import { ComponentBuilder } from '../../index'; import isEqual from 'fast-deep-equal'; -export class UnsafeTextInputBuilder extends ComponentBuilder< - Partial & { type: ComponentType.TextInput } -> { +export class UnsafeTextInputBuilder extends ComponentBuilder { public constructor(data?: APITextInputComponent & { type?: ComponentType.TextInput }) { super({ type: ComponentType.TextInput, ...data }); } diff --git a/packages/builders/src/interactions/modals/UnsafeModal.ts b/packages/builders/src/interactions/modals/UnsafeModal.ts index 5c0695355..ff49c2f2e 100644 --- a/packages/builders/src/interactions/modals/UnsafeModal.ts +++ b/packages/builders/src/interactions/modals/UnsafeModal.ts @@ -6,7 +6,7 @@ import type { import { ActionRowBuilder, createComponentBuilder, JSONEncodable, ModalActionRowComponentBuilder } from '../../index'; export class UnsafeModalBuilder implements JSONEncodable { - public readonly data: Partial>; + public readonly data: Partial; public readonly components: ActionRowBuilder[] = []; public constructor({ components, ...data }: Partial = {}) { diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 9c8418dbb..5dcd2cf73 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -28,6 +28,7 @@ import { userMention, ModalActionRowComponentBuilder, ModalBuilder as BuildersModal, + AnyComponentBuilder, } from '@discordjs/builders'; import { Collection } from '@discordjs/collection'; import { BaseImageURLOptions, ImageURLOptions, RawFile, REST, RESTOptions } from '@discordjs/rest'; @@ -232,17 +233,12 @@ export interface ActionRowData extends BuilderActionRow { +export class ActionRowBuilder extends BuilderActionRow { constructor( - data?: + data?: Partial< | ActionRowData - | (Omit, 'type'> & { - type?: ComponentType.ActionRow; - }), + | APIActionRowComponent + >, ); public static from( other: @@ -577,9 +573,7 @@ export class ButtonBuilder extends BuilderButtonComponent { } export class SelectMenuBuilder extends BuilderSelectMenuComponent { - public constructor( - data?: SelectMenuComponentData | (Omit & { type?: ComponentType.SelectMenu }), - ); + public constructor(data?: Partial); public static from(other: JSONEncodable | APISelectMenuComponent): SelectMenuBuilder; } @@ -593,7 +587,7 @@ export class ModalBuilder extends BuildersModal { } export class TextInputBuilder extends BuilderTextInputComponent { - public constructor(data?: TextInputComponentData | APITextInputComponent); + public constructor(data?: Partial); public static from(other: JSONEncodable | APITextInputComponent): TextInputBuilder; } diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index f90434eab..6a909be9e 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -808,8 +808,8 @@ client.on('interactionCreate', async interaction => { // @ts-expect-error interaction.reply({ content: 'Hi!', components: [[button]] }); - // @ts-expect-error void new ActionRowBuilder({}); + // @ts-expect-error await interaction.reply({ content: 'Hi!', components: [button] });