From 24f395412c5d44e172c710bc069b4714caa126d4 Mon Sep 17 00:00:00 2001 From: Vlad Frangu Date: Sun, 12 Jan 2025 22:22:09 +0200 Subject: [PATCH] types: fix recurrence rule types (#10693) * types: fix recurrence rule types * fix: endAt not endsAt --------- Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/typings/index.d.ts | 39 ++++++--- packages/discord.js/typings/index.test-d.ts | 90 +++++++++++++++++++++ 2 files changed, 119 insertions(+), 10 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index d838dff8a..3a744a28b 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -6067,18 +6067,37 @@ export interface GuildScheduledEventCreateOptions { recurrenceRule?: GuildScheduledEventRecurrenceRuleOptions; } -export interface GuildScheduledEventRecurrenceRuleOptions { +export type GuildScheduledEventRecurrenceRuleOptions = + | BaseGuildScheduledEventRecurrenceRuleOptions< + GuildScheduledEventRecurrenceRuleFrequency.Yearly, + { + byMonth: readonly GuildScheduledEventRecurrenceRuleMonth[]; + byMonthDay: readonly number[]; + } + > + | BaseGuildScheduledEventRecurrenceRuleOptions< + GuildScheduledEventRecurrenceRuleFrequency.Monthly, + { + byNWeekday: readonly GuildScheduledEventRecurrenceRuleNWeekday[]; + } + > + | BaseGuildScheduledEventRecurrenceRuleOptions< + GuildScheduledEventRecurrenceRuleFrequency.Weekly | GuildScheduledEventRecurrenceRuleFrequency.Daily, + { + byWeekday: readonly GuildScheduledEventRecurrenceRuleWeekday[]; + } + >; + +type BaseGuildScheduledEventRecurrenceRuleOptions< + Frequency extends GuildScheduledEventRecurrenceRuleFrequency, + Extra extends {}, +> = { startAt: DateResolvable; - endAt: DateResolvable; - frequency: GuildScheduledEventRecurrenceRuleFrequency; + endAt?: DateResolvable; + count?: number; interval: number; - byWeekday: readonly GuildScheduledEventRecurrenceRuleWeekday[]; - byNWeekday: readonly GuildScheduledEventRecurrenceRuleNWeekday[]; - byMonth: readonly GuildScheduledEventRecurrenceRuleMonth[]; - byMonthDay: readonly number[]; - byYearDay: readonly number[]; - count: number; -} + frequency: Frequency; +} & Extra; export interface GuildScheduledEventEditOptions< Status extends GuildScheduledEventStatus, diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index b587e3bf2..760954ad7 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -33,6 +33,9 @@ import { APIMentionableSelectComponent, APIModalInteractionResponseCallbackData, WebhookType, + GuildScheduledEventRecurrenceRuleFrequency, + GuildScheduledEventRecurrenceRuleMonth, + GuildScheduledEventRecurrenceRuleWeekday, } from 'discord-api-types/v10'; import { ApplicationCommand, @@ -209,6 +212,7 @@ import { SendableChannels, PollData, InteractionCallbackResponse, + GuildScheduledEventRecurrenceRuleOptions, } from '.'; import { expectAssignable, expectNotAssignable, expectNotType, expectType } from 'tsd'; import type { ContextMenuCommandBuilder, SlashCommandBuilder } from '@discordjs/builders'; @@ -2596,3 +2600,89 @@ client.on('interactionCreate', interaction => { declare const guildScheduledEventManager: GuildScheduledEventManager; await guildScheduledEventManager.edit(snowflake, { recurrenceRule: null }); + +{ + expectNotAssignable({ + startAt: new Date(), + frequency: GuildScheduledEventRecurrenceRuleFrequency.Yearly, + interval: 1, + byMonth: [GuildScheduledEventRecurrenceRuleMonth.May], + byMonthDay: [4], + // Invalid property + byWeekday: [GuildScheduledEventRecurrenceRuleWeekday.Monday], + }); + + expectNotAssignable({ + startAt: new Date(), + frequency: GuildScheduledEventRecurrenceRuleFrequency.Yearly, + interval: 1, + byMonth: [GuildScheduledEventRecurrenceRuleMonth.May], + byMonthDay: [4], + // Invalid property + byNWeekday: [{ n: 1, day: GuildScheduledEventRecurrenceRuleWeekday.Monday }], + }); + + expectAssignable({ + startAt: new Date(), + frequency: GuildScheduledEventRecurrenceRuleFrequency.Yearly, + interval: 1, + byMonth: [GuildScheduledEventRecurrenceRuleMonth.May], + byMonthDay: [4], + }); +} + +{ + expectAssignable({ + startAt: new Date(), + frequency: GuildScheduledEventRecurrenceRuleFrequency.Monthly, + interval: 1, + byNWeekday: [{ n: 1, day: GuildScheduledEventRecurrenceRuleWeekday.Monday }], + }); + + expectNotAssignable({ + startAt: new Date(), + frequency: GuildScheduledEventRecurrenceRuleFrequency.Monthly, + interval: 1, + byNWeekday: [{ n: 1, day: GuildScheduledEventRecurrenceRuleWeekday.Monday }], + // Invalid property + byWeekday: [GuildScheduledEventRecurrenceRuleWeekday.Monday], + }); +} + +{ + expectAssignable({ + startAt: new Date(), + frequency: GuildScheduledEventRecurrenceRuleFrequency.Weekly, + interval: 1, + byWeekday: [GuildScheduledEventRecurrenceRuleWeekday.Monday], + }); + + expectNotAssignable({ + startAt: new Date(), + frequency: GuildScheduledEventRecurrenceRuleFrequency.Weekly, + interval: 1, + byWeekday: [GuildScheduledEventRecurrenceRuleWeekday.Monday], + // Invalid property + byNWeekday: [{ n: 1, day: GuildScheduledEventRecurrenceRuleWeekday.Monday }], + }); +} + +{ + expectNotAssignable({ + startAt: new Date(), + frequency: GuildScheduledEventRecurrenceRuleFrequency.Daily, + interval: 1, + byWeekday: [GuildScheduledEventRecurrenceRuleWeekday.Monday], + // Invalid property + byNWeekday: [{ n: 1, day: GuildScheduledEventRecurrenceRuleWeekday.Monday }], + }); + + expectNotAssignable({ + startAt: new Date(), + frequency: GuildScheduledEventRecurrenceRuleFrequency.Daily, + interval: 1, + byWeekday: [GuildScheduledEventRecurrenceRuleWeekday.Monday], + // Invalid property + byMonth: [GuildScheduledEventRecurrenceRuleMonth.May], + }); +}