Skip to content

Commit

Permalink
chore: make requested changes
Browse files Browse the repository at this point in the history
  • Loading branch information
suneettipirneni committed Feb 7, 2022
1 parent 5e097a7 commit 94707bb
Show file tree
Hide file tree
Showing 5 changed files with 17 additions and 30 deletions.
15 changes: 3 additions & 12 deletions packages/builders/src/components/ActionRow.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,9 @@ export class ActionRow<T extends ActionRowComponent = ActionRowComponent> extend
> {
public readonly components: T[];

public constructor(data?: ActionRowData) {
// We don't destructure directly in the constructor because it can't properly
// handle possibly-undefined data, which causes invalid destructure runtime errors.
if (data?.components) {
const { components: initComponents, ...initData } = data;
super({ type: ComponentType.ActionRow, ...initData });
} else {
super({ type: ComponentType.ActionRow, ...data });
}

// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
this.components = (data?.components?.map(createComponent) ?? []) as T[];
public constructor({ components, ...data }: ActionRowData = {}) {
super({ type: ComponentType.ActionRow, ...data });
this.components = (components?.map(createComponent) ?? []) as T[];
}

/**
Expand Down
13 changes: 3 additions & 10 deletions packages/builders/src/components/selectMenu/UnsafeSelectMenu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,9 @@ export class UnsafeSelectMenuComponent extends Component<Omit<APISelectMenuCompo
public readonly options: UnsafeSelectMenuOption[];

public constructor(data?: SelectMenuComponentData) {
// We don't destructure directly in the constructor because it can't properly
// handle possibly-undefined data, which causes invalid destructure runtime errors.
if (data?.options) {
const { options, ...initData } = data;
super({ type: ComponentType.SelectMenu, ...initData });
} else {
super({ type: ComponentType.SelectMenu, ...data! });
}

this.options = data?.options?.map((o) => new UnsafeSelectMenuOption(o)) ?? [];
const { options, ...initData } = data ?? {};
super({ type: ComponentType.SelectMenu, ...initData } as APISelectMenuComponent);
this.options = options?.map((o) => new UnsafeSelectMenuOption(o)) ?? [];
}

/**
Expand Down
4 changes: 2 additions & 2 deletions packages/builders/src/messages/embed/Assertions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ export const embedFieldsArrayPredicate = embedFieldPredicate.array();

export const fieldLengthPredicate = z.number().lte(25);

export function validateFieldLength(fields: APIEmbedField[], amountAdding: number): void {
fieldLengthPredicate.parse(fields.length + amountAdding);
export function validateFieldLength(fields: APIEmbedField[] | undefined, amountAdding: number): void {
fieldLengthPredicate.parse((fields?.length ?? 0) + amountAdding);
}

export const authorNamePredicate = fieldNamePredicate.nullable();
Expand Down
4 changes: 2 additions & 2 deletions packages/builders/src/messages/embed/Embed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@ import { EmbedAuthorOptions, EmbedFooterOptions, UnsafeEmbed } from './UnsafeEmb
export class Embed extends UnsafeEmbed {
public override addFields(...fields: APIEmbedField[]): this {
// Ensure adding these fields won't exceed the 25 field limit
validateFieldLength(this.fields ?? [], fields.length);
validateFieldLength(this.fields, fields.length);

// Data assertions
return super.addFields(...embedFieldsArrayPredicate.parse(fields));
}

public override spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this {
// Ensure adding these fields won't exceed the 25 field limit
validateFieldLength(this.fields ?? [], fields.length - deleteCount);
validateFieldLength(this.fields, fields.length - deleteCount);

// Data assertions
return super.spliceFields(index, deleteCount, ...embedFieldsArrayPredicate.parse(fields));
Expand Down
11 changes: 7 additions & 4 deletions packages/builders/src/messages/embed/UnsafeEmbed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ export class UnsafeEmbed {
return (
(this.data.title?.length ?? 0) +
(this.data.description?.length ?? 0) +
(this.data.fields ?? []).reduce((prev, curr) => prev + curr.name.length + curr.value.length, 0) +
(this.data.fields?.reduce((prev, curr) => prev + curr.name.length + curr.value.length, 0) ?? 0) +
(this.data.footer?.text.length ?? 0) +
(this.data.author?.name.length ?? 0)
);
Expand All @@ -179,8 +179,9 @@ export class UnsafeEmbed {
* @param fields The fields to add
*/
public addFields(...fields: APIEmbedField[]): this {
this.data.fields ??= [];
this.data.fields.push(...UnsafeEmbed.normalizeFields(...fields));
fields = UnsafeEmbed.normalizeFields(...fields);
if (this.data.fields) this.data.fields.push(...fields);
else this.data.fields = fields;
return this;
}

Expand All @@ -192,7 +193,9 @@ export class UnsafeEmbed {
* @param fields The replacing field objects
*/
public spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this {
this.data.fields?.splice(index, deleteCount, ...UnsafeEmbed.normalizeFields(...fields));
fields = UnsafeEmbed.normalizeFields(...fields);
if (this.data.fields) this.data.fields.splice(index, deleteCount, ...fields);
else this.data.fields = fields;
return this;
}

Expand Down

0 comments on commit 94707bb

Please sign in to comment.