From 253b4190b80797805b88d4f0056901eb7cd0929a Mon Sep 17 00:00:00 2001 From: Taken Date: Sun, 20 Oct 2024 15:53:45 +0200 Subject: [PATCH 1/8] Updated event handler for dev --- src/utils/Events/events.ts | 5 +++-- src/utils/Events/loadevents.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/utils/Events/events.ts b/src/utils/Events/events.ts index 8115c46..34fb010 100644 --- a/src/utils/Events/events.ts +++ b/src/utils/Events/events.ts @@ -2,12 +2,13 @@ import fs from "fs" import path from "path" import { ExtendedClient as Client } from "~/utils/Client.js" const __dirname = import.meta.dirname +type FileType = "js" | "ts" -export default async function loadEvents(client: Client) { +export default async function loadEvents(client: Client, ft: FileType) { const serverDir = path.join(__dirname, "..", "..", "events", "server") const eventDirs = fs.readdirSync(serverDir) for (const eventDir of eventDirs) { - const eventFiles = fs.readdirSync(path.join(serverDir, eventDir)) + const eventFiles = fs.readdirSync(path.join(serverDir, eventDir)).filter(file => file.endsWith(ft)) for (const eventFile of eventFiles) { const eventPath = path.join(serverDir, eventDir, eventFile) const { default: event } = await import("file://" + eventPath) diff --git a/src/utils/Events/loadevents.ts b/src/utils/Events/loadevents.ts index eee3d73..a63ab61 100644 --- a/src/utils/Events/loadevents.ts +++ b/src/utils/Events/loadevents.ts @@ -8,7 +8,7 @@ import loadEvents from "./events.js" import loadModalEvents from "./modal.js" export default async function loadAllEvents(client: Client, ft: "js" | "ts") { - await loadEvents(client) + await loadEvents(client, ft) await loadButtonEvents(client, ft) await loadSlashCommandsEvents(client, ft) await loadContextMenuEvents(client, ft) From 10456770c9091adad6a7490481f439d61ca1b72e Mon Sep 17 00:00:00 2001 From: Taken Date: Sun, 20 Oct 2024 15:56:53 +0200 Subject: [PATCH 2/8] Removed unused files --- old/.eslintignore | 2 -- old/.eslintrc.js | 59 ----------------------------------------------- 2 files changed, 61 deletions(-) delete mode 100644 old/.eslintignore delete mode 100644 old/.eslintrc.js diff --git a/old/.eslintignore b/old/.eslintignore deleted file mode 100644 index 76add87..0000000 --- a/old/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -dist \ No newline at end of file diff --git a/old/.eslintrc.js b/old/.eslintrc.js deleted file mode 100644 index 38dc1e6..0000000 --- a/old/.eslintrc.js +++ /dev/null @@ -1,59 +0,0 @@ -module.exports = { - env: { - node: true, - es2021: true, - browser: true, - }, - extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended"], - overrides: [ - { - env: { - node: true, - }, - files: [".eslintrc.{js,cjs}"], - parserOptions: { - sourceType: "script", - }, - }, - ], - parser: "@typescript-eslint/parser", - parserOptions: { - ecmaVersion: "latest", - sourceType: "module", - }, - plugins: ["@typescript-eslint"], - rules: { - indent: ["error", 4, { SwitchCase: 1 }], - "linebreak-style": ["error", "unix"], - quotes: ["warn", "double"], - semi: ["error", "never"], - "no-unused-vars": "off", - "prefer-const": "warn", - "no-var": "error", - "no-multiple-empty-lines": ["error", { max: 2, maxEOF: 1, maxBOF: 0 }], - "no-lonely-if": "error", - "no-empty-function": "error", - "no-inline-comments": "error", - "no-trailing-spaces": ["error"], - "arrow-spacing": ["warn", { before: true, after: true }], - "space-before-function-paren": [ - "error", - { - anonymous: "never", - named: "never", - asyncArrow: "always", - }, - ], - "comma-spacing": "error", - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-unused-vars": [ - "warn", - { - vars: "all", - args: "after-used", - ignoreRestSiblings: false, - }, - ], - }, -} From d20670309817b3870df875127f1aa524fb6d6626 Mon Sep 17 00:00:00 2001 From: Taken Date: Fri, 25 Oct 2024 18:31:18 +0200 Subject: [PATCH 3/8] Updated node version --- .node-version | 2 +- Dockerfile | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.node-version b/.node-version index 4f79d22..ab44d29 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -21.7.3 +22.10.0 diff --git a/Dockerfile b/Dockerfile index cb0eecf..01a482c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:21.7.3-alpine3.18 AS cache +FROM node:22.10.0-alpine3.20 AS cache WORKDIR /cache @@ -10,7 +10,7 @@ RUN corepack enable RUN pnpm install # main image -FROM node:21.7.3-alpine3.18 +FROM node:22.10.0-alpine3.20 WORKDIR /app COPY --from=cache /cache/node_modules /app/node_modules From f2aa84f8a5e5cb2225f929ab669609e06bc1268a Mon Sep 17 00:00:00 2001 From: Taken Date: Fri, 25 Oct 2024 19:52:34 +0200 Subject: [PATCH 4/8] Moved all db logic to db functions --- src/commands-contextmenu/updateuser.ts | 5 +-- src/commands/config.ts | 13 +++--- src/commands/find.ts | 5 +-- src/commands/forceunverify.ts | 7 ++-- src/commands/forceupdate.ts | 5 +-- src/commands/forceverify.ts | 7 ++-- src/commands/remove.ts | 7 ++-- src/commands/staff/removeguildroles.ts | 3 +- src/commands/staff/updateall.ts | 3 +- src/commands/update.ts | 5 +-- src/commands/verify.ts | 7 ++-- src/commands/whoami.ts | 5 +-- src/commands/whois.ts | 5 +-- src/components/buttons/checkstats.ts | 5 +-- .../buttons/guildapplicationaccept.ts | 14 +++---- src/components/buttons/guildapply.ts | 7 ++-- .../buttons/staffapplicationaccept.ts | 3 +- src/components/buttons/staffapply.ts | 11 ++--- src/components/buttons/waitingListUpdate.ts | 5 ++- src/components/modals/denyreasonbox.ts | 3 +- src/components/modals/staffdenyreasonbox.ts | 3 +- src/components/modals/verifyModal.ts | 7 ++-- src/drizzle/functions.ts | 5 +++ src/drizzle/functions/guildApps.ts | 32 +++++++++++++++ src/drizzle/functions/settings.ts | 41 +++++++++++++++++++ src/drizzle/functions/staffApps.ts | 32 +++++++++++++++ src/drizzle/functions/verifies.ts | 36 ++++++++++++++++ src/drizzle/functions/waitingList.ts | 36 ++++++++++++++++ 28 files changed, 244 insertions(+), 73 deletions(-) create mode 100644 src/drizzle/functions.ts create mode 100644 src/drizzle/functions/guildApps.ts create mode 100644 src/drizzle/functions/settings.ts create mode 100644 src/drizzle/functions/staffApps.ts create mode 100644 src/drizzle/functions/verifies.ts create mode 100644 src/drizzle/functions/waitingList.ts diff --git a/src/commands-contextmenu/updateuser.ts b/src/commands-contextmenu/updateuser.ts index c4b79f1..55ebac4 100644 --- a/src/commands-contextmenu/updateuser.ts +++ b/src/commands-contextmenu/updateuser.ts @@ -1,5 +1,6 @@ import { ApplicationCommandType, ContextMenuCommandBuilder, InteractionContextType, PermissionFlagsBits, userMention } from "discord.js" import db from "src/drizzle/db.js" +import { getVerify } from "src/drizzle/functions" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" import { IContextMenu } from "~/interfaces" @@ -24,9 +25,7 @@ export default { const targetId = interaction.targetId const user = await interaction.guild!.members.fetch(targetId) const usermentioned = userMention(user.user.id) - const verifyData = await db.query.verifies.findFirst({ - where: ({ userID }, { eq }) => eq(userID, user.id) - }) + const verifyData = await getVerify({ userID: user.id }) if (!verifyData) { await user.setNickname(`${user.user.username} (X)`, "User used the update command").catch(() => { diff --git a/src/commands/config.ts b/src/commands/config.ts index b772b35..5863163 100644 --- a/src/commands/config.ts +++ b/src/commands/config.ts @@ -1,6 +1,7 @@ import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder } from "discord.js" import { eq } from "drizzle-orm" import db from "src/drizzle/db.js" +import { addSetting, getSetting, updateSetting } from "src/drizzle/functions" import { settings } from "src/drizzle/schema.js" import { embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" @@ -38,12 +39,10 @@ export default { const setting = interaction.options.getString("setting")! const value = interaction.options.getString("value")! - const settingsData = await db.query.settings.findFirst({ - where: ({ name }, { eq }) => eq(name, setting) - }) + const settingsData = await getSetting({ name: setting }) if (!settingsData) { - await db.insert(settings).values({ + await addSetting({ name: setting, value: value }) @@ -55,9 +54,9 @@ export default { }] }) } else { - await db.update(settings).set({ - value: value - }).where(eq(settings.name, setting)) + await updateSetting({ + value + }) await interaction.editReply({ embeds: [{ diff --git a/src/commands/find.ts b/src/commands/find.ts index 7749530..c697009 100644 --- a/src/commands/find.ts +++ b/src/commands/find.ts @@ -1,5 +1,6 @@ import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" import db from "src/drizzle/db.js" +import { getVerify } from "src/drizzle/functions" import { devMessage, embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" import { getHeadURL, getIGN, getUUID } from "~/utils/Hypixel.js" @@ -37,9 +38,7 @@ export default { return } - const verifyData = await db.query.verifies.findFirst({ - where: ({ uuid: uuidfromdb }, { eq }) => eq(uuidfromdb, uuid) - }) + const verifyData = await getVerify({ uuid }) if (!verifyData) { await interaction.editReply({ embeds: [{ diff --git a/src/commands/forceunverify.ts b/src/commands/forceunverify.ts index eae0c96..b6e4f78 100644 --- a/src/commands/forceunverify.ts +++ b/src/commands/forceunverify.ts @@ -1,6 +1,7 @@ import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" import { eq } from "drizzle-orm" import db from "src/drizzle/db.js" +import { getVerify, removeVerify } from "src/drizzle/functions" import { verifies } from "src/drizzle/schema.js" import { devMessage, embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" @@ -28,9 +29,7 @@ export default { async execute({ interaction }) { const member = interaction.options.getMember("user") as GuildMember - const verifiedUser = await db.query.verifies.findFirst({ - where: ({ userID }, { eq }) => eq(userID, member.user.id) - }) + const verifiedUser = await getVerify({ userID: member.user.id }) const mod = interaction.user if (!verifiedUser) { @@ -45,7 +44,7 @@ export default { const uuid = verifiedUser.uuid const ign = await getIGN(uuid) - await db.delete(verifies).where(eq(verifies.userID, member.user.id)) + await removeVerify({ userID: member.user.id }) await member.roles.remove( roleManage("all").rolesToRemove, "User force unverified by " + interaction.user.username diff --git a/src/commands/forceupdate.ts b/src/commands/forceupdate.ts index 9ba92cd..5b43b94 100644 --- a/src/commands/forceupdate.ts +++ b/src/commands/forceupdate.ts @@ -1,5 +1,6 @@ import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" import db from "src/drizzle/db.js" +import { getVerify } from "src/drizzle/functions" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" import { ICommand } from "~/interfaces" @@ -29,9 +30,7 @@ export default { const user = interaction.options.getMember("user") as GuildMember const usermentioned = userMention(user.user.id) - const verifyData = await db.query.verifies.findFirst({ - where: ({ userID }, { eq }) => eq(userID, user.user.id) - }) + const verifyData = await getVerify({ userID: user.user.id }) if (!verifyData) { await user.setNickname(`${user.user.username} (X)`, "User used the update command").catch(() => { diff --git a/src/commands/forceverify.ts b/src/commands/forceverify.ts index dc2952a..90e325c 100644 --- a/src/commands/forceverify.ts +++ b/src/commands/forceverify.ts @@ -1,5 +1,6 @@ import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" import db from "src/drizzle/db.js" +import { addVerify, getVerify } from "src/drizzle/functions" import { verifies } from "src/drizzle/schema.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { ICommand } from "~/interfaces" @@ -38,9 +39,7 @@ export default { const ign = interaction.options.getString("ign")! const mod = interaction.user - const verifyData = await db.query.verifies.findFirst({ - where: ({ userID }, { eq }) => eq(userID, user.user.id) - }) + const verifyData = await getVerify({ userID: user.id }) if (verifyData) { interaction.editReply("That user is already verified.") return @@ -141,7 +140,7 @@ export default { // Do nothing }) - await db.insert(verifies).values({ + await addVerify({ userID: user.user.id, uuid: uuid }) diff --git a/src/commands/remove.ts b/src/commands/remove.ts index f22e93d..d4eb223 100644 --- a/src/commands/remove.ts +++ b/src/commands/remove.ts @@ -1,6 +1,7 @@ import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" import { eq } from "drizzle-orm" import db from "src/drizzle/db.js" +import { getWaitingList, removeWaitingList } from "src/drizzle/functions" import { waitingLists } from "src/drizzle/schema.js" import { devMessage, embedColor } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" @@ -36,9 +37,7 @@ export default { const member = interaction.options.getMember("user") as GuildMember const reason = interaction.options.getString("reason") ?? "No reason provided." const mod = interaction.user! - const waiting = await db.query.waitingLists.findFirst({ - where: ({ userID }, { eq }) => eq(userID, member.user.id) - }) + const waiting = await getWaitingList({ userID: member.user.id }) if (!waiting) { await interaction.editReply({ @@ -50,7 +49,7 @@ export default { return } - await db.delete(waitingLists).where(eq(waitingLists.userID, member.user.id)) + await removeWaitingList({ userID: member.user.id }) await member.roles.remove(waitingListRole, "Removed from waiting list.") await logToChannel("mod", { diff --git a/src/commands/staff/removeguildroles.ts b/src/commands/staff/removeguildroles.ts index b99e59d..9fdf395 100644 --- a/src/commands/staff/removeguildroles.ts +++ b/src/commands/staff/removeguildroles.ts @@ -1,5 +1,6 @@ import { ChatInputCommandInteraction, GuildMember } from "discord.js" import db from "src/drizzle/db.js" +import { getVerifies } from "src/drizzle/functions" import { embedColor, hypixelGuildID } from "~/config/options.js" import { IGuildData } from "~/interfaces" import env from "~/utils/Env.js" @@ -35,7 +36,7 @@ export default async function removeGuildRoles(interaction: ChatInputCommandInte const hypixelGuildMembers = guildData.members.map(gmember => gmember.uuid) - const verifiedUsers = await db.query.verifies.findMany() + const verifiedUsers = await getVerifies() for (const gmember of guildMembers) { const gmemberuuid = verifiedUsers.find(user => user.userID === gmember.id)?.uuid diff --git a/src/commands/staff/updateall.ts b/src/commands/staff/updateall.ts index 308cfe9..a07ce0e 100644 --- a/src/commands/staff/updateall.ts +++ b/src/commands/staff/updateall.ts @@ -1,5 +1,6 @@ import { ChannelType, ChatInputCommandInteraction, GuildMember } from "discord.js" import db from "src/drizzle/db.js" +import { getVerifies } from "src/drizzle/functions" import { embedColor, hypixelGuildID } from "~/config/options.js" import { IGuildData } from "~/interfaces" import env from "~/utils/Env.js" @@ -53,7 +54,7 @@ export default async function updateAll(interaction: ChatInputCommandInteraction }) const guildMemberIDs = hypixelGuildMembers.map(gmember => gmember.uuid) - const verifiedUsers = await db.query.verifies.findMany() + const verifiedUsers = await getVerifies() await interaction.editReply({ embeds: [{ diff --git a/src/commands/update.ts b/src/commands/update.ts index 61e5653..bf94da7 100644 --- a/src/commands/update.ts +++ b/src/commands/update.ts @@ -1,5 +1,6 @@ import { GuildMember, InteractionContextType, SlashCommandBuilder } from "discord.js" import db from "src/drizzle/db.js" +import { getVerify } from "src/drizzle/functions" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" import { ICommand } from "~/interfaces" @@ -21,9 +22,7 @@ export default { await interaction.deferReply() const user = interaction.member as GuildMember - const verifyData = await db.query.verifies.findFirst({ - where: ({ userID }, { eq }) => eq(userID, user.user.id) - }) + const verifyData = await getVerify({ userID: user.id }) if (!verifyData) { await user.setNickname(`${user.user.username} (X)`, "User used the update command").catch(() => { diff --git a/src/commands/verify.ts b/src/commands/verify.ts index 3b9b8f9..6fe0411 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -1,5 +1,6 @@ import { GuildMember, InteractionContextType, SlashCommandBuilder } from "discord.js" import db from "src/drizzle/db.js" +import { addVerify, getVerify } from "src/drizzle/functions" import { verifies } from "src/drizzle/schema.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { ICommand } from "~/interfaces" @@ -33,9 +34,7 @@ export default { const user = interaction.member! as GuildMember const ign = interaction.options.getString("ign")! - const verifyData = await db.query.verifies.findFirst({ - where: ({ userID }, { eq }) => eq(userID, user.id) - }) + const verifyData = await getVerify({ userID: user.id }) if (verifyData) { interaction.editReply("You are already verified.\n" + "Try running /update to update your roles.") return @@ -166,7 +165,7 @@ export default { // Do nothing }) - await db.insert(verifies).values({ + await addVerify({ userID: user.id, uuid: uuid }) diff --git a/src/commands/whoami.ts b/src/commands/whoami.ts index 8c32452..52b004d 100644 --- a/src/commands/whoami.ts +++ b/src/commands/whoami.ts @@ -1,5 +1,6 @@ import { InteractionContextType, SlashCommandBuilder, userMention } from "discord.js" import db from "src/drizzle/db.js" +import { getVerify } from "src/drizzle/functions" import { devMessage, embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" import { getHeadURL, getIGN } from "~/utils/Hypixel.js" @@ -19,9 +20,7 @@ export default { await interaction.deferReply() const user = interaction.user - const verifyData = await db.query.verifies.findFirst({ - where: ({ userID }, { eq }) => eq(userID, user.id) - }) + const verifyData = await getVerify({ userID: user.id }) if (!verifyData) { await interaction.editReply({ diff --git a/src/commands/whois.ts b/src/commands/whois.ts index c81cbb4..15f43d8 100644 --- a/src/commands/whois.ts +++ b/src/commands/whois.ts @@ -1,5 +1,6 @@ import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" import db from "src/drizzle/db.js" +import { getVerify } from "src/drizzle/functions" import { devMessage, embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" import { getHeadURL, getIGN } from "~/utils/Hypixel.js" @@ -26,9 +27,7 @@ export default { await interaction.deferReply() const user = interaction.options.getUser("user")! - const verifiedUser = await db.query.verifies.findFirst({ - where: ({ userID }, { eq }) => eq(userID, user.id) - }) + const verifiedUser = await getVerify({ userID: user.id }) if (!verifiedUser) { interaction.editReply({ embeds: [{ diff --git a/src/components/buttons/checkstats.ts b/src/components/buttons/checkstats.ts index 5cabfe7..adf9a98 100644 --- a/src/components/buttons/checkstats.ts +++ b/src/components/buttons/checkstats.ts @@ -1,4 +1,5 @@ import db from "src/drizzle/db.js" +import { getGuildApp } from "src/drizzle/functions" import { devMessage, embedColor } from "~/config/options.js" import { bwfkdr, bwstars, bwwins, duelswins, duelswlr, swkdr, swstars } from "~/config/reqs.js" import { IButton } from "~/interfaces" @@ -14,9 +15,7 @@ export default { const message = interaction.message const embed = message.embeds[0] const applicantId = embed.footer!.text.split(" ")[1] - const guildappdata = await db.query.guildApps.findFirst({ - where: ({ userID }, { eq }) => eq(userID, applicantId) - }) + const guildappdata = await getGuildApp({ userID: applicantId }) const uuid = guildappdata!.uuid const player = await getPlayer(uuid) diff --git a/src/components/buttons/guildapplicationaccept.ts b/src/components/buttons/guildapplicationaccept.ts index 6af5d5b..53d0b5d 100644 --- a/src/components/buttons/guildapplicationaccept.ts +++ b/src/components/buttons/guildapplicationaccept.ts @@ -1,6 +1,8 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, TextChannel } from "discord.js" import { eq } from "drizzle-orm" import db from "src/drizzle/db.js" +import { getGuildApp, removeVerify } from "src/drizzle/functions" +import { addWaitingList, getWaitingLists, removeWaitingList } from "src/drizzle/functions" import { guildApps, waitingLists } from "src/drizzle/schema.js" import { embedColor, hypixelGuildID, waitingListChannel, waitingListMessage } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" @@ -54,20 +56,18 @@ export default { }] }) - const applicantEntry = await db.query.guildApps.findFirst({ - where: ({ userID }, { eq }) => eq(userID, applicantId) - }) + const applicantEntry = await getGuildApp({ userID: applicantId }) const applicantUUID = applicantEntry!.uuid const time = Date.now() - await db.insert(waitingLists).values({ + await addWaitingList({ userID: applicantId, uuid: applicantUUID, timestamp: time }) await applicant.roles.add(waitingListRole) - await db.delete(guildApps).where(eq(guildApps.userID, applicantId)) + await removeVerify({ userID: applicantId }) await interaction.editReply({ embeds: [{ @@ -90,14 +90,14 @@ export default { const wlmessage = await channel!.messages.fetch(waitingListMessage) const wlembed = wlmessage.embeds[0] - const accepted = await db.query.waitingLists.findMany() + const accepted = await getWaitingLists() for (let i = 0; i < accepted.length; i++) { const uuid = accepted[i].uuid const guild = await getGuild(uuid) if (guild && guild._id === hypixelGuildID) { - await db.delete(waitingLists).where(eq(waitingLists.uuid, uuid)) + await removeWaitingList({ uuid }) continue } } diff --git a/src/components/buttons/guildapply.ts b/src/components/buttons/guildapply.ts index 6b949c7..eb942e5 100644 --- a/src/components/buttons/guildapply.ts +++ b/src/components/buttons/guildapply.ts @@ -1,5 +1,6 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, GuildMember, TextChannel } from "discord.js" import db from "src/drizzle/db.js" +import { addGuildApp, getGuildApp } from "src/drizzle/functions" import { guildApps } from "src/drizzle/schema.js" import { ignM, largeM, smallM } from "~/config/limitmessages.js" import { applicationsChannel, embedColor } from "~/config/options.js" @@ -31,9 +32,7 @@ export default { return } - const application = await db.query.guildApps.findFirst({ - where: ({ userID }, { eq }) => eq(userID, user.user.id) - }) + const application = await getGuildApp({ userID: user.user.id }) if (application) { await interaction.editReply("You already have an application in progress.") @@ -251,7 +250,7 @@ export default { }] }) - await db.insert(guildApps).values({ + await addGuildApp({ userID: user.user.id, uuid: uuid }) diff --git a/src/components/buttons/staffapplicationaccept.ts b/src/components/buttons/staffapplicationaccept.ts index 260d7f5..6facd20 100644 --- a/src/components/buttons/staffapplicationaccept.ts +++ b/src/components/buttons/staffapplicationaccept.ts @@ -1,6 +1,7 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle } from "discord.js" import { eq } from "drizzle-orm" import db from "src/drizzle/db.js" +import { removeStaffApp } from "src/drizzle/functions" import { staffApps } from "src/drizzle/schema.js" import { embedColor } from "~/config/options.js" import { IButton } from "~/interfaces" @@ -45,7 +46,7 @@ export default { ] }) - await db.delete(staffApps).where(eq(staffApps.userID, applicantId)) + await removeStaffApp({ userID: applicantId }) await interaction.editReply({ embeds: [{ diff --git a/src/components/buttons/staffapply.ts b/src/components/buttons/staffapply.ts index 121a69d..164b788 100644 --- a/src/components/buttons/staffapply.ts +++ b/src/components/buttons/staffapply.ts @@ -1,5 +1,6 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, GuildMember, TextChannel } from "discord.js" import db from "src/drizzle/db.js" +import { addStaffApp, getSetting, getStaffApp } from "src/drizzle/functions" import { staffApps } from "src/drizzle/schema.js" import { ignM, largeM } from "~/config/limitmessages.js" import { embedColor, staffApplicationsChannel } from "~/config/options.js" @@ -17,9 +18,7 @@ export default { const user = interaction.member as GuildMember const guild = interaction.guild! const userRoles = user.roles.cache - const setting = await db.query.settings.findFirst({ - where: ({ name }, { eq }) => eq(name, "staffApplications") - }) + const setting = await getSetting({ name: "staffapplications" }) const status = setting?.value || "0" function sq(n: number): string { @@ -50,9 +49,7 @@ export default { return } - const application = await db.query.staffApps.findFirst({ - where: ({ userID }, { eq }) => eq(userID, user.user.id) - }) + const application = await getStaffApp({ userID: user.user.id }) if (application) { await interaction.editReply("You already have an application in progress.") @@ -225,7 +222,7 @@ export default { }] }) - await db.insert(staffApps).values({ + await addStaffApp({ userID: user.user.id, uuid: uuid }) diff --git a/src/components/buttons/waitingListUpdate.ts b/src/components/buttons/waitingListUpdate.ts index 1b208b5..f431601 100644 --- a/src/components/buttons/waitingListUpdate.ts +++ b/src/components/buttons/waitingListUpdate.ts @@ -1,5 +1,6 @@ import { eq } from "drizzle-orm" import db from "src/drizzle/db.js" +import { getWaitingLists, removeWaitingList } from "src/drizzle/functions" import { waitingLists } from "src/drizzle/schema.js" import { hypixelGuildID } from "~/config/options.js" import { IButton } from "~/interfaces" @@ -15,14 +16,14 @@ export default { const user = interaction.user const message = interaction.message const embed = message.embeds[0] - const accepted = await db.query.waitingLists.findMany() + const accepted = await getWaitingLists() for (let i = 0; i < accepted.length; i++) { const uuid = accepted[i].uuid const guild = await getGuild(uuid) if (guild && guild._id === hypixelGuildID) { - await db.delete(waitingLists).where(eq(waitingLists.uuid, uuid)) + await removeWaitingList({ uuid }) continue } } diff --git a/src/components/modals/denyreasonbox.ts b/src/components/modals/denyreasonbox.ts index 1d78ee4..895ea93 100644 --- a/src/components/modals/denyreasonbox.ts +++ b/src/components/modals/denyreasonbox.ts @@ -1,6 +1,7 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder, GuildMember, Message } from "discord.js" import { eq } from "drizzle-orm" import db from "src/drizzle/db.js" +import { removeGuildApp } from "src/drizzle/functions" import { guildApps } from "src/drizzle/schema.js" import { embedColor } from "~/config/options.js" import { IModal } from "~/interfaces" @@ -83,7 +84,7 @@ export default { responseEmbeds = [responseEmbed] } - await db.delete(guildApps).where(eq(guildApps.userID, applicantId)) + await removeGuildApp({ userID: applicantId }) await interaction.editReply({ embeds: responseEmbeds diff --git a/src/components/modals/staffdenyreasonbox.ts b/src/components/modals/staffdenyreasonbox.ts index e243de1..560bb6d 100644 --- a/src/components/modals/staffdenyreasonbox.ts +++ b/src/components/modals/staffdenyreasonbox.ts @@ -1,6 +1,7 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "discord.js" import { eq } from "drizzle-orm" import db from "src/drizzle/db.js" +import { removeStaffApp } from "src/drizzle/functions" import { staffApps } from "src/drizzle/schema.js" import { embedColor } from "~/config/options.js" import { IModal } from "~/interfaces" @@ -45,7 +46,7 @@ export default { await applicant.send({ embeds: [dmMessage] }) - await db.delete(staffApps).where(eq(staffApps.userID, applicantId)) + await removeStaffApp({ userID: applicantId }) await interaction.editReply({ embeds: [{ diff --git a/src/components/modals/verifyModal.ts b/src/components/modals/verifyModal.ts index 10b5743..635d2ce 100644 --- a/src/components/modals/verifyModal.ts +++ b/src/components/modals/verifyModal.ts @@ -1,5 +1,6 @@ import { GuildMember } from "discord.js" import db from "src/drizzle/db.js" +import { addVerify, getVerify } from "src/drizzle/functions" import { verifies } from "src/drizzle/schema.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { IModal } from "~/interfaces" @@ -15,9 +16,7 @@ export default { const user = interaction.member as GuildMember const ign = interaction.fields.fields.get("verifyign")!.value - const verifyData = await db.query.verifies.findFirst({ - where: ({ userID }, { eq }) => eq(userID, user.id) - }) + const verifyData = await getVerify({ userID: user.id }) if (verifyData) { interaction.editReply("You are already verified.\n" + "Try running /update to update your roles.") return @@ -147,7 +146,7 @@ export default { // Do nothing }) - await db.insert(verifies).values({ + await addVerify({ userID: user.id, uuid: uuid }) diff --git a/src/drizzle/functions.ts b/src/drizzle/functions.ts new file mode 100644 index 0000000..5c2f7de --- /dev/null +++ b/src/drizzle/functions.ts @@ -0,0 +1,5 @@ +export * from "./functions/guildApps.js" +export * from "./functions/settings.js" +export * from "./functions/staffApps.js" +export * from "./functions/verifies.js" +export * from "./functions/waitingList.js" diff --git a/src/drizzle/functions/guildApps.ts b/src/drizzle/functions/guildApps.ts new file mode 100644 index 0000000..189ab31 --- /dev/null +++ b/src/drizzle/functions/guildApps.ts @@ -0,0 +1,32 @@ +import { eq, or } from "drizzle-orm" +import db from "../db.js" +import { guildApps, InsertGuildApp } from "../schema.js" + +type GuildAppDBData = Partial> + +export async function addGuildApp(data: InsertGuildApp) { + await db.insert(guildApps).values(data) +} + +export async function getGuildApp(data: GuildAppDBData) { + const userId = data.userID ?? "" + const uuid = data.uuid ?? "" + + return await db.query.guildApps.findFirst({ + where: (({ userID: dbUserId, uuid: dbUuid }, { eq, or }) => + or( + eq(dbUuid, uuid), + eq(dbUserId, userId) + )) + }) +} + +export async function removeGuildApp(data: GuildAppDBData) { + const userId = data.userID ?? "" + const uuid = data.uuid ?? "" + + await db.delete(guildApps).where(or( + eq(guildApps.userID, userId), + eq(guildApps.uuid, uuid) + )) +} diff --git a/src/drizzle/functions/settings.ts b/src/drizzle/functions/settings.ts new file mode 100644 index 0000000..3a4eebd --- /dev/null +++ b/src/drizzle/functions/settings.ts @@ -0,0 +1,41 @@ +import { eq, or } from "drizzle-orm" +import db from "../db.js" +import { InsertSetting, settings } from "../schema.js" + +type SettingsDBData = Partial> + +export async function addSetting(data: InsertSetting) { + await db.insert(settings).values(data) +} + +export async function getSetting(data: SettingsDBData) { + const name = data.name ?? "" + const value = data.value ?? "" + + return await db.query.settings.findFirst({ + where: (({ name: dbName, value: dbValue }, { eq, or }) => + or( + eq(dbName, name), + eq(dbValue, value) + )) + }) +} + +export async function updateSetting(data: SettingsDBData) { + const name = data.name ?? "" + const value = data.value + + await db.update(settings).set({ + value: value + }).where(eq(settings.name, name)) +} + +export async function removeSetting(data: SettingsDBData) { + const name = data.name ?? "" + const value = data.value ?? "" + + await db.delete(settings).where(or( + eq(settings.name, name), + eq(settings.value, value) + )) +} diff --git a/src/drizzle/functions/staffApps.ts b/src/drizzle/functions/staffApps.ts new file mode 100644 index 0000000..d73779e --- /dev/null +++ b/src/drizzle/functions/staffApps.ts @@ -0,0 +1,32 @@ +import { eq, or } from "drizzle-orm" +import db from "../db.js" +import { InsertStaffApp, staffApps } from "../schema.js" + +type StaffAppDBData = Partial> + +export async function addStaffApp(data: InsertStaffApp) { + await db.insert(staffApps).values(data) +} + +export async function getStaffApp(data: StaffAppDBData) { + const userId = data.userID ?? "" + const uuid = data.uuid ?? "" + + return await db.query.staffApps.findFirst({ + where: (({ userID: dbUserId, uuid: dbUuid }, { eq, or }) => + or( + eq(dbUuid, uuid), + eq(dbUserId, userId) + )) + }) +} + +export async function removeStaffApp(data: StaffAppDBData) { + const userId = data.userID ?? "" + const uuid = data.uuid ?? "" + + await db.delete(staffApps).where(or( + eq(staffApps.userID, userId), + eq(staffApps.uuid, uuid) + )) +} diff --git a/src/drizzle/functions/verifies.ts b/src/drizzle/functions/verifies.ts new file mode 100644 index 0000000..d317cf3 --- /dev/null +++ b/src/drizzle/functions/verifies.ts @@ -0,0 +1,36 @@ +import { eq, or } from "drizzle-orm" +import db from "../db.js" +import { InsertVerify, verifies } from "../schema.js" + +type VerifyDBData = Partial> + +export async function addVerify(data: InsertVerify) { + await db.insert(verifies).values(data) +} + +export async function getVerify(data: VerifyDBData) { + const userId = data.userID ?? "" + const uuid = data.uuid ?? "" + + return await db.query.verifies.findFirst({ + where: (({ userID: dbUserId, uuid: dbUuid }, { eq, or }) => + or( + eq(dbUuid, uuid), + eq(dbUserId, userId) + )) + }) +} + +export async function getVerifies() { + return await db.query.verifies.findMany() +} + +export async function removeVerify(data: VerifyDBData) { + const userId = data.userID ?? "" + const uuid = data.uuid ?? "" + + await db.delete(verifies).where(or( + eq(verifies.userID, userId), + eq(verifies.uuid, uuid) + )) +} diff --git a/src/drizzle/functions/waitingList.ts b/src/drizzle/functions/waitingList.ts new file mode 100644 index 0000000..a023a44 --- /dev/null +++ b/src/drizzle/functions/waitingList.ts @@ -0,0 +1,36 @@ +import { eq, or } from "drizzle-orm" +import db from "../db.js" +import { InsertWaitingList, waitingLists } from "../schema.js" + +type WaitingListDBData = Partial> + +export async function addWaitingList(data: InsertWaitingList) { + await db.insert(waitingLists).values(data) +} + +export async function getWaitingList(data: WaitingListDBData) { + const userId = data.userID ?? "" + const uuid = data.uuid ?? "" + + return await db.query.waitingLists.findFirst({ + where: (({ userID: dbUserId, uuid: dbUuid }, { eq, or }) => + or( + eq(dbUuid, uuid), + eq(dbUserId, userId) + )) + }) +} + +export async function getWaitingLists() { + return await db.query.waitingLists.findMany() +} + +export async function removeWaitingList(data: WaitingListDBData) { + const userId = data.userID ?? "" + const uuid = data.uuid ?? "" + + await db.delete(waitingLists).where(or( + eq(waitingLists.userID, userId), + eq(waitingLists.uuid, uuid) + )) +} From c94b0ff36e614072528c458509ced317787503a9 Mon Sep 17 00:00:00 2001 From: Taken Date: Fri, 25 Oct 2024 20:00:52 +0200 Subject: [PATCH 5/8] Cleaned up imports --- src/commands-contextmenu/updateuser.ts | 1 - src/commands/config.ts | 3 --- src/commands/find.ts | 1 - src/commands/forceunverify.ts | 3 --- src/commands/forceupdate.ts | 1 - src/commands/forceverify.ts | 2 -- src/commands/remove.ts | 3 --- src/commands/staff/removeguildroles.ts | 1 - src/commands/staff/updateall.ts | 1 - src/commands/update.ts | 1 - src/commands/verify.ts | 2 -- src/commands/whoami.ts | 1 - src/commands/whois.ts | 1 - src/components/buttons/checkstats.ts | 1 - src/components/buttons/guildapplicationaccept.ts | 3 --- src/components/buttons/guildapply.ts | 2 -- src/components/buttons/staffapplicationaccept.ts | 3 --- src/components/buttons/staffapply.ts | 2 -- src/components/buttons/waitingListUpdate.ts | 3 --- src/components/modals/denyreasonbox.ts | 3 --- src/components/modals/staffdenyreasonbox.ts | 3 --- src/components/modals/verifyModal.ts | 2 -- 22 files changed, 43 deletions(-) diff --git a/src/commands-contextmenu/updateuser.ts b/src/commands-contextmenu/updateuser.ts index 55ebac4..44ad2e7 100644 --- a/src/commands-contextmenu/updateuser.ts +++ b/src/commands-contextmenu/updateuser.ts @@ -1,5 +1,4 @@ import { ApplicationCommandType, ContextMenuCommandBuilder, InteractionContextType, PermissionFlagsBits, userMention } from "discord.js" -import db from "src/drizzle/db.js" import { getVerify } from "src/drizzle/functions" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" diff --git a/src/commands/config.ts b/src/commands/config.ts index 5863163..acf1e77 100644 --- a/src/commands/config.ts +++ b/src/commands/config.ts @@ -1,8 +1,5 @@ import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder } from "discord.js" -import { eq } from "drizzle-orm" -import db from "src/drizzle/db.js" import { addSetting, getSetting, updateSetting } from "src/drizzle/functions" -import { settings } from "src/drizzle/schema.js" import { embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" diff --git a/src/commands/find.ts b/src/commands/find.ts index c697009..409a2ad 100644 --- a/src/commands/find.ts +++ b/src/commands/find.ts @@ -1,5 +1,4 @@ import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" -import db from "src/drizzle/db.js" import { getVerify } from "src/drizzle/functions" import { devMessage, embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" diff --git a/src/commands/forceunverify.ts b/src/commands/forceunverify.ts index b6e4f78..da1ff83 100644 --- a/src/commands/forceunverify.ts +++ b/src/commands/forceunverify.ts @@ -1,8 +1,5 @@ import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" -import { eq } from "drizzle-orm" -import db from "src/drizzle/db.js" import { getVerify, removeVerify } from "src/drizzle/functions" -import { verifies } from "src/drizzle/schema.js" import { devMessage, embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" import logToChannel from "~/utils/Functions/logtochannel.js" diff --git a/src/commands/forceupdate.ts b/src/commands/forceupdate.ts index 5b43b94..f0f9078 100644 --- a/src/commands/forceupdate.ts +++ b/src/commands/forceupdate.ts @@ -1,5 +1,4 @@ import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" -import db from "src/drizzle/db.js" import { getVerify } from "src/drizzle/functions" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" diff --git a/src/commands/forceverify.ts b/src/commands/forceverify.ts index 90e325c..e5da18b 100644 --- a/src/commands/forceverify.ts +++ b/src/commands/forceverify.ts @@ -1,7 +1,5 @@ import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" -import db from "src/drizzle/db.js" import { addVerify, getVerify } from "src/drizzle/functions" -import { verifies } from "src/drizzle/schema.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { ICommand } from "~/interfaces" import logToChannel from "~/utils/Functions/logtochannel.js" diff --git a/src/commands/remove.ts b/src/commands/remove.ts index d4eb223..b6ee62d 100644 --- a/src/commands/remove.ts +++ b/src/commands/remove.ts @@ -1,8 +1,5 @@ import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" -import { eq } from "drizzle-orm" -import db from "src/drizzle/db.js" import { getWaitingList, removeWaitingList } from "src/drizzle/functions" -import { waitingLists } from "src/drizzle/schema.js" import { devMessage, embedColor } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" import { ICommand } from "~/interfaces" diff --git a/src/commands/staff/removeguildroles.ts b/src/commands/staff/removeguildroles.ts index 9fdf395..e5ef8f7 100644 --- a/src/commands/staff/removeguildroles.ts +++ b/src/commands/staff/removeguildroles.ts @@ -1,5 +1,4 @@ import { ChatInputCommandInteraction, GuildMember } from "discord.js" -import db from "src/drizzle/db.js" import { getVerifies } from "src/drizzle/functions" import { embedColor, hypixelGuildID } from "~/config/options.js" import { IGuildData } from "~/interfaces" diff --git a/src/commands/staff/updateall.ts b/src/commands/staff/updateall.ts index a07ce0e..6f226ed 100644 --- a/src/commands/staff/updateall.ts +++ b/src/commands/staff/updateall.ts @@ -1,5 +1,4 @@ import { ChannelType, ChatInputCommandInteraction, GuildMember } from "discord.js" -import db from "src/drizzle/db.js" import { getVerifies } from "src/drizzle/functions" import { embedColor, hypixelGuildID } from "~/config/options.js" import { IGuildData } from "~/interfaces" diff --git a/src/commands/update.ts b/src/commands/update.ts index bf94da7..25da688 100644 --- a/src/commands/update.ts +++ b/src/commands/update.ts @@ -1,5 +1,4 @@ import { GuildMember, InteractionContextType, SlashCommandBuilder } from "discord.js" -import db from "src/drizzle/db.js" import { getVerify } from "src/drizzle/functions" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" diff --git a/src/commands/verify.ts b/src/commands/verify.ts index 6fe0411..ef56117 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -1,7 +1,5 @@ import { GuildMember, InteractionContextType, SlashCommandBuilder } from "discord.js" -import db from "src/drizzle/db.js" import { addVerify, getVerify } from "src/drizzle/functions" -import { verifies } from "src/drizzle/schema.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { ICommand } from "~/interfaces" import { IPlayerData } from "~/interfaces" diff --git a/src/commands/whoami.ts b/src/commands/whoami.ts index 52b004d..f7af2f2 100644 --- a/src/commands/whoami.ts +++ b/src/commands/whoami.ts @@ -1,5 +1,4 @@ import { InteractionContextType, SlashCommandBuilder, userMention } from "discord.js" -import db from "src/drizzle/db.js" import { getVerify } from "src/drizzle/functions" import { devMessage, embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" diff --git a/src/commands/whois.ts b/src/commands/whois.ts index 15f43d8..cd61159 100644 --- a/src/commands/whois.ts +++ b/src/commands/whois.ts @@ -1,5 +1,4 @@ import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" -import db from "src/drizzle/db.js" import { getVerify } from "src/drizzle/functions" import { devMessage, embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" diff --git a/src/components/buttons/checkstats.ts b/src/components/buttons/checkstats.ts index adf9a98..74e539d 100644 --- a/src/components/buttons/checkstats.ts +++ b/src/components/buttons/checkstats.ts @@ -1,4 +1,3 @@ -import db from "src/drizzle/db.js" import { getGuildApp } from "src/drizzle/functions" import { devMessage, embedColor } from "~/config/options.js" import { bwfkdr, bwstars, bwwins, duelswins, duelswlr, swkdr, swstars } from "~/config/reqs.js" diff --git a/src/components/buttons/guildapplicationaccept.ts b/src/components/buttons/guildapplicationaccept.ts index 53d0b5d..39c7e03 100644 --- a/src/components/buttons/guildapplicationaccept.ts +++ b/src/components/buttons/guildapplicationaccept.ts @@ -1,9 +1,6 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, TextChannel } from "discord.js" -import { eq } from "drizzle-orm" -import db from "src/drizzle/db.js" import { getGuildApp, removeVerify } from "src/drizzle/functions" import { addWaitingList, getWaitingLists, removeWaitingList } from "src/drizzle/functions" -import { guildApps, waitingLists } from "src/drizzle/schema.js" import { embedColor, hypixelGuildID, waitingListChannel, waitingListMessage } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" import { IButton } from "~/interfaces" diff --git a/src/components/buttons/guildapply.ts b/src/components/buttons/guildapply.ts index eb942e5..3a8b06f 100644 --- a/src/components/buttons/guildapply.ts +++ b/src/components/buttons/guildapply.ts @@ -1,7 +1,5 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, GuildMember, TextChannel } from "discord.js" -import db from "src/drizzle/db.js" import { addGuildApp, getGuildApp } from "src/drizzle/functions" -import { guildApps } from "src/drizzle/schema.js" import { ignM, largeM, smallM } from "~/config/limitmessages.js" import { applicationsChannel, embedColor } from "~/config/options.js" import { guild as guildQuestions } from "~/config/questions.js" diff --git a/src/components/buttons/staffapplicationaccept.ts b/src/components/buttons/staffapplicationaccept.ts index 6facd20..10f138a 100644 --- a/src/components/buttons/staffapplicationaccept.ts +++ b/src/components/buttons/staffapplicationaccept.ts @@ -1,8 +1,5 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle } from "discord.js" -import { eq } from "drizzle-orm" -import db from "src/drizzle/db.js" import { removeStaffApp } from "src/drizzle/functions" -import { staffApps } from "src/drizzle/schema.js" import { embedColor } from "~/config/options.js" import { IButton } from "~/interfaces" diff --git a/src/components/buttons/staffapply.ts b/src/components/buttons/staffapply.ts index 164b788..38ccd9b 100644 --- a/src/components/buttons/staffapply.ts +++ b/src/components/buttons/staffapply.ts @@ -1,7 +1,5 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, GuildMember, TextChannel } from "discord.js" -import db from "src/drizzle/db.js" import { addStaffApp, getSetting, getStaffApp } from "src/drizzle/functions" -import { staffApps } from "src/drizzle/schema.js" import { ignM, largeM } from "~/config/limitmessages.js" import { embedColor, staffApplicationsChannel } from "~/config/options.js" import { staff as staffQuestions } from "~/config/questions.js" diff --git a/src/components/buttons/waitingListUpdate.ts b/src/components/buttons/waitingListUpdate.ts index f431601..4355be1 100644 --- a/src/components/buttons/waitingListUpdate.ts +++ b/src/components/buttons/waitingListUpdate.ts @@ -1,7 +1,4 @@ -import { eq } from "drizzle-orm" -import db from "src/drizzle/db.js" import { getWaitingLists, removeWaitingList } from "src/drizzle/functions" -import { waitingLists } from "src/drizzle/schema.js" import { hypixelGuildID } from "~/config/options.js" import { IButton } from "~/interfaces" import { getGuild, getIGN } from "~/utils/Hypixel.js" diff --git a/src/components/modals/denyreasonbox.ts b/src/components/modals/denyreasonbox.ts index 895ea93..3981da4 100644 --- a/src/components/modals/denyreasonbox.ts +++ b/src/components/modals/denyreasonbox.ts @@ -1,8 +1,5 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder, GuildMember, Message } from "discord.js" -import { eq } from "drizzle-orm" -import db from "src/drizzle/db.js" import { removeGuildApp } from "src/drizzle/functions" -import { guildApps } from "src/drizzle/schema.js" import { embedColor } from "~/config/options.js" import { IModal } from "~/interfaces" diff --git a/src/components/modals/staffdenyreasonbox.ts b/src/components/modals/staffdenyreasonbox.ts index 560bb6d..6546683 100644 --- a/src/components/modals/staffdenyreasonbox.ts +++ b/src/components/modals/staffdenyreasonbox.ts @@ -1,8 +1,5 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "discord.js" -import { eq } from "drizzle-orm" -import db from "src/drizzle/db.js" import { removeStaffApp } from "src/drizzle/functions" -import { staffApps } from "src/drizzle/schema.js" import { embedColor } from "~/config/options.js" import { IModal } from "~/interfaces" diff --git a/src/components/modals/verifyModal.ts b/src/components/modals/verifyModal.ts index 635d2ce..f71fff7 100644 --- a/src/components/modals/verifyModal.ts +++ b/src/components/modals/verifyModal.ts @@ -1,7 +1,5 @@ import { GuildMember } from "discord.js" -import db from "src/drizzle/db.js" import { addVerify, getVerify } from "src/drizzle/functions" -import { verifies } from "src/drizzle/schema.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { IModal } from "~/interfaces" import roleManage from "~/utils/Functions/rolesmanage.js" From d1cc3be0b333a43a031d7526a520feae10067dcb Mon Sep 17 00:00:00 2001 From: Taken Date: Sun, 27 Oct 2024 13:36:05 +0100 Subject: [PATCH 6/8] Updating eslint rules --- eslint.config.mjs | 6 +++++- tsconfig.json | 1 - 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index d6b1b22..c914bca 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -80,7 +80,11 @@ export default [ "@typescript-eslint/no-unused-vars": ["warn", { vars: "all", args: "after-used", - ignoreRestSiblings: false + ignoreRestSiblings: false, + argsIgnorePattern: "^_", + caughtErrorsIgnorePattern: "^_", + destructuredArrayIgnorePattern: "^_", + varsIgnorePattern: "^_" }], "@typescript-eslint/no-empty-object-type": "off", "@typescript-eslint/no-require-imports": "off", diff --git a/tsconfig.json b/tsconfig.json index 50151ac..f1475ac 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -12,7 +12,6 @@ "strictNullChecks": true, "resolveJsonModule": true, "removeComments": true, - "noUnusedLocals": true, "outDir": "dist", "baseUrl": ".", "paths": { From edb421fa04f360b905a50b29b7f4facc443b4230 Mon Sep 17 00:00:00 2001 From: Taken Date: Sun, 27 Oct 2024 13:43:30 +0100 Subject: [PATCH 7/8] Fixing file paths for imports --- src/commands-contextmenu/updateuser.ts | 2 +- src/commands/config.ts | 2 +- src/commands/find.ts | 2 +- src/commands/forceunverify.ts | 2 +- src/commands/forceupdate.ts | 2 +- src/commands/forceverify.ts | 2 +- src/commands/remove.ts | 2 +- src/commands/staff/removeguildroles.ts | 2 +- src/commands/staff/updateall.ts | 2 +- src/commands/update.ts | 2 +- src/commands/verify.ts | 2 +- src/commands/whoami.ts | 2 +- src/commands/whois.ts | 2 +- src/components/buttons/checkstats.ts | 2 +- src/components/buttons/guildapplicationaccept.ts | 4 ++-- src/components/buttons/guildapply.ts | 2 +- src/components/buttons/staffapplicationaccept.ts | 2 +- src/components/buttons/staffapply.ts | 2 +- src/components/buttons/waitingListUpdate.ts | 2 +- src/components/modals/denyreasonbox.ts | 2 +- src/components/modals/staffdenyreasonbox.ts | 2 +- src/components/modals/verifyModal.ts | 2 +- 22 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/commands-contextmenu/updateuser.ts b/src/commands-contextmenu/updateuser.ts index 44ad2e7..da92501 100644 --- a/src/commands-contextmenu/updateuser.ts +++ b/src/commands-contextmenu/updateuser.ts @@ -1,5 +1,5 @@ import { ApplicationCommandType, ContextMenuCommandBuilder, InteractionContextType, PermissionFlagsBits, userMention } from "discord.js" -import { getVerify } from "src/drizzle/functions" +import { getVerify } from "src/drizzle/functions.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" import { IContextMenu } from "~/interfaces" diff --git a/src/commands/config.ts b/src/commands/config.ts index acf1e77..8bfd18e 100644 --- a/src/commands/config.ts +++ b/src/commands/config.ts @@ -1,5 +1,5 @@ import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder } from "discord.js" -import { addSetting, getSetting, updateSetting } from "src/drizzle/functions" +import { addSetting, getSetting, updateSetting } from "src/drizzle/functions.js" import { embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" diff --git a/src/commands/find.ts b/src/commands/find.ts index 409a2ad..bf45403 100644 --- a/src/commands/find.ts +++ b/src/commands/find.ts @@ -1,5 +1,5 @@ import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" -import { getVerify } from "src/drizzle/functions" +import { getVerify } from "src/drizzle/functions.js" import { devMessage, embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" import { getHeadURL, getIGN, getUUID } from "~/utils/Hypixel.js" diff --git a/src/commands/forceunverify.ts b/src/commands/forceunverify.ts index da1ff83..2ecf4a8 100644 --- a/src/commands/forceunverify.ts +++ b/src/commands/forceunverify.ts @@ -1,5 +1,5 @@ import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" -import { getVerify, removeVerify } from "src/drizzle/functions" +import { getVerify, removeVerify } from "src/drizzle/functions.js" import { devMessage, embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" import logToChannel from "~/utils/Functions/logtochannel.js" diff --git a/src/commands/forceupdate.ts b/src/commands/forceupdate.ts index f0f9078..573f01d 100644 --- a/src/commands/forceupdate.ts +++ b/src/commands/forceupdate.ts @@ -1,5 +1,5 @@ import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" -import { getVerify } from "src/drizzle/functions" +import { getVerify } from "src/drizzle/functions.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" import { ICommand } from "~/interfaces" diff --git a/src/commands/forceverify.ts b/src/commands/forceverify.ts index e5da18b..beb93c7 100644 --- a/src/commands/forceverify.ts +++ b/src/commands/forceverify.ts @@ -1,5 +1,5 @@ import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" -import { addVerify, getVerify } from "src/drizzle/functions" +import { addVerify, getVerify } from "src/drizzle/functions.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { ICommand } from "~/interfaces" import logToChannel from "~/utils/Functions/logtochannel.js" diff --git a/src/commands/remove.ts b/src/commands/remove.ts index b6ee62d..3db1bdc 100644 --- a/src/commands/remove.ts +++ b/src/commands/remove.ts @@ -1,5 +1,5 @@ import { GuildMember, InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" -import { getWaitingList, removeWaitingList } from "src/drizzle/functions" +import { getWaitingList, removeWaitingList } from "src/drizzle/functions.js" import { devMessage, embedColor } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" import { ICommand } from "~/interfaces" diff --git a/src/commands/staff/removeguildroles.ts b/src/commands/staff/removeguildroles.ts index e5ef8f7..b9ce6cd 100644 --- a/src/commands/staff/removeguildroles.ts +++ b/src/commands/staff/removeguildroles.ts @@ -1,5 +1,5 @@ import { ChatInputCommandInteraction, GuildMember } from "discord.js" -import { getVerifies } from "src/drizzle/functions" +import { getVerifies } from "src/drizzle/functions.js" import { embedColor, hypixelGuildID } from "~/config/options.js" import { IGuildData } from "~/interfaces" import env from "~/utils/Env.js" diff --git a/src/commands/staff/updateall.ts b/src/commands/staff/updateall.ts index 6f226ed..6071c43 100644 --- a/src/commands/staff/updateall.ts +++ b/src/commands/staff/updateall.ts @@ -1,5 +1,5 @@ import { ChannelType, ChatInputCommandInteraction, GuildMember } from "discord.js" -import { getVerifies } from "src/drizzle/functions" +import { getVerifies } from "src/drizzle/functions.js" import { embedColor, hypixelGuildID } from "~/config/options.js" import { IGuildData } from "~/interfaces" import env from "~/utils/Env.js" diff --git a/src/commands/update.ts b/src/commands/update.ts index 25da688..51427b7 100644 --- a/src/commands/update.ts +++ b/src/commands/update.ts @@ -1,5 +1,5 @@ import { GuildMember, InteractionContextType, SlashCommandBuilder } from "discord.js" -import { getVerify } from "src/drizzle/functions" +import { getVerify } from "src/drizzle/functions.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" import { ICommand } from "~/interfaces" diff --git a/src/commands/verify.ts b/src/commands/verify.ts index ef56117..00f27c2 100644 --- a/src/commands/verify.ts +++ b/src/commands/verify.ts @@ -1,5 +1,5 @@ import { GuildMember, InteractionContextType, SlashCommandBuilder } from "discord.js" -import { addVerify, getVerify } from "src/drizzle/functions" +import { addVerify, getVerify } from "src/drizzle/functions.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { ICommand } from "~/interfaces" import { IPlayerData } from "~/interfaces" diff --git a/src/commands/whoami.ts b/src/commands/whoami.ts index f7af2f2..beb9443 100644 --- a/src/commands/whoami.ts +++ b/src/commands/whoami.ts @@ -1,5 +1,5 @@ import { InteractionContextType, SlashCommandBuilder, userMention } from "discord.js" -import { getVerify } from "src/drizzle/functions" +import { getVerify } from "src/drizzle/functions.js" import { devMessage, embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" import { getHeadURL, getIGN } from "~/utils/Hypixel.js" diff --git a/src/commands/whois.ts b/src/commands/whois.ts index cd61159..ad40fcf 100644 --- a/src/commands/whois.ts +++ b/src/commands/whois.ts @@ -1,5 +1,5 @@ import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, userMention } from "discord.js" -import { getVerify } from "src/drizzle/functions" +import { getVerify } from "src/drizzle/functions.js" import { devMessage, embedColor } from "~/config/options.js" import { ICommand } from "~/interfaces" import { getHeadURL, getIGN } from "~/utils/Hypixel.js" diff --git a/src/components/buttons/checkstats.ts b/src/components/buttons/checkstats.ts index 74e539d..5c43972 100644 --- a/src/components/buttons/checkstats.ts +++ b/src/components/buttons/checkstats.ts @@ -1,4 +1,4 @@ -import { getGuildApp } from "src/drizzle/functions" +import { getGuildApp } from "src/drizzle/functions.js" import { devMessage, embedColor } from "~/config/options.js" import { bwfkdr, bwstars, bwwins, duelswins, duelswlr, swkdr, swstars } from "~/config/reqs.js" import { IButton } from "~/interfaces" diff --git a/src/components/buttons/guildapplicationaccept.ts b/src/components/buttons/guildapplicationaccept.ts index 39c7e03..825e2e5 100644 --- a/src/components/buttons/guildapplicationaccept.ts +++ b/src/components/buttons/guildapplicationaccept.ts @@ -1,6 +1,6 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, TextChannel } from "discord.js" -import { getGuildApp, removeVerify } from "src/drizzle/functions" -import { addWaitingList, getWaitingLists, removeWaitingList } from "src/drizzle/functions" +import { getGuildApp, removeVerify } from "src/drizzle/functions.js" +import { addWaitingList, getWaitingLists, removeWaitingList } from "src/drizzle/functions.js" import { embedColor, hypixelGuildID, waitingListChannel, waitingListMessage } from "~/config/options.js" import { waitingListRole } from "~/config/roles.js" import { IButton } from "~/interfaces" diff --git a/src/components/buttons/guildapply.ts b/src/components/buttons/guildapply.ts index 3a8b06f..cc4f0e9 100644 --- a/src/components/buttons/guildapply.ts +++ b/src/components/buttons/guildapply.ts @@ -1,5 +1,5 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, GuildMember, TextChannel } from "discord.js" -import { addGuildApp, getGuildApp } from "src/drizzle/functions" +import { addGuildApp, getGuildApp } from "src/drizzle/functions.js" import { ignM, largeM, smallM } from "~/config/limitmessages.js" import { applicationsChannel, embedColor } from "~/config/options.js" import { guild as guildQuestions } from "~/config/questions.js" diff --git a/src/components/buttons/staffapplicationaccept.ts b/src/components/buttons/staffapplicationaccept.ts index 10f138a..483fe3a 100644 --- a/src/components/buttons/staffapplicationaccept.ts +++ b/src/components/buttons/staffapplicationaccept.ts @@ -1,5 +1,5 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle } from "discord.js" -import { removeStaffApp } from "src/drizzle/functions" +import { removeStaffApp } from "src/drizzle/functions.js" import { embedColor } from "~/config/options.js" import { IButton } from "~/interfaces" diff --git a/src/components/buttons/staffapply.ts b/src/components/buttons/staffapply.ts index 38ccd9b..1adeb4c 100644 --- a/src/components/buttons/staffapply.ts +++ b/src/components/buttons/staffapply.ts @@ -1,5 +1,5 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, GuildMember, TextChannel } from "discord.js" -import { addStaffApp, getSetting, getStaffApp } from "src/drizzle/functions" +import { addStaffApp, getSetting, getStaffApp } from "src/drizzle/functions.js" import { ignM, largeM } from "~/config/limitmessages.js" import { embedColor, staffApplicationsChannel } from "~/config/options.js" import { staff as staffQuestions } from "~/config/questions.js" diff --git a/src/components/buttons/waitingListUpdate.ts b/src/components/buttons/waitingListUpdate.ts index 4355be1..5b7f55b 100644 --- a/src/components/buttons/waitingListUpdate.ts +++ b/src/components/buttons/waitingListUpdate.ts @@ -1,4 +1,4 @@ -import { getWaitingLists, removeWaitingList } from "src/drizzle/functions" +import { getWaitingLists, removeWaitingList } from "src/drizzle/functions.js" import { hypixelGuildID } from "~/config/options.js" import { IButton } from "~/interfaces" import { getGuild, getIGN } from "~/utils/Hypixel.js" diff --git a/src/components/modals/denyreasonbox.ts b/src/components/modals/denyreasonbox.ts index 3981da4..1317da6 100644 --- a/src/components/modals/denyreasonbox.ts +++ b/src/components/modals/denyreasonbox.ts @@ -1,5 +1,5 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder, GuildMember, Message } from "discord.js" -import { removeGuildApp } from "src/drizzle/functions" +import { removeGuildApp } from "src/drizzle/functions.js" import { embedColor } from "~/config/options.js" import { IModal } from "~/interfaces" diff --git a/src/components/modals/staffdenyreasonbox.ts b/src/components/modals/staffdenyreasonbox.ts index 6546683..4d236d2 100644 --- a/src/components/modals/staffdenyreasonbox.ts +++ b/src/components/modals/staffdenyreasonbox.ts @@ -1,5 +1,5 @@ import { ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from "discord.js" -import { removeStaffApp } from "src/drizzle/functions" +import { removeStaffApp } from "src/drizzle/functions.js" import { embedColor } from "~/config/options.js" import { IModal } from "~/interfaces" diff --git a/src/components/modals/verifyModal.ts b/src/components/modals/verifyModal.ts index f71fff7..4074d17 100644 --- a/src/components/modals/verifyModal.ts +++ b/src/components/modals/verifyModal.ts @@ -1,5 +1,5 @@ import { GuildMember } from "discord.js" -import { addVerify, getVerify } from "src/drizzle/functions" +import { addVerify, getVerify } from "src/drizzle/functions.js" import { devMessage, embedColor, hypixelGuildID } from "~/config/options.js" import { IModal } from "~/interfaces" import roleManage from "~/utils/Functions/rolesmanage.js" From 96b145a8ad7b1934430ba0ec2e3341cf79923769 Mon Sep 17 00:00:00 2001 From: Taken Date: Sun, 27 Oct 2024 13:46:29 +0100 Subject: [PATCH 8/8] Updated deps --- package.json | 30 ++-- pnpm-lock.yaml | 418 ++++++++++++++++++++++++++----------------------- 2 files changed, 240 insertions(+), 208 deletions(-) diff --git a/package.json b/package.json index 3897141..97456ac 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,8 @@ "dev:js": "nodemon --config .nodemon/js.json dist/index.js", "fmt": "dprint fmt \"**/*.ts\"", "check": "pnpm tscheck && pnpm lint", - "tscheck": "tsc && echo \"TypeScript check passed!\"", - "lint": "eslint && echo \"Linting passed!\"", + "tscheck": "tsc", + "lint": "eslint", "lint:fix": "eslint --fix", "db:generate": "drizzle-kit generate", "db:migrate": "drizzle-kit migrate", @@ -44,34 +44,34 @@ "chalk": "^5.3.0", "cron": "^3.1.7", "discord-player": "^6.7.1", - "discord-player-youtubei": "^1.3.2", + "discord-player-youtubei": "^1.3.3", "discord.js": "^14.16.3", - "drizzle-orm": "^0.34.1", + "drizzle-orm": "^0.35.3", "ioredis": "^5.4.1", "ms": "^2.1.3", - "postgres": "^3.4.4", + "postgres": "^3.4.5", "pretty-ms": "^9.1.0" }, "devDependencies": { "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "^9.12.0", + "@eslint/js": "^9.13.0", "@swc/cli": "^0.4.0", - "@swc/core": "^1.7.35", + "@swc/core": "^1.7.40", "@types/ms": "^0.7.34", - "@types/node": "^22.7.5", - "@typescript-eslint/eslint-plugin": "^8.8.1", - "@typescript-eslint/parser": "^8.8.1", + "@types/node": "^22.8.1", + "@typescript-eslint/eslint-plugin": "^8.11.0", + "@typescript-eslint/parser": "^8.11.0", "chokidar": "^4.0.1", "dotenv": "^16.4.5", - "dprint": "^0.47.2", - "drizzle-kit": "^0.25.0", - "eslint": "^9.12.0", + "dprint": "^0.47.5", + "drizzle-kit": "^0.26.2", + "eslint": "^9.13.0", "eslint-plugin-drizzle": "^0.2.3", "globals": "^15.11.0", - "tsx": "^4.19.1", + "tsx": "^4.19.2", "typescript": "^5.6.3" }, - "packageManager": "pnpm@9.12.1+sha512.e5a7e52a4183a02d5931057f7a0dbff9d5e9ce3161e33fa68ae392125b79282a8a8a470a51dfc8a0ed86221442eb2fb57019b0990ed24fab519bf0e1bc5ccfc4", + "packageManager": "pnpm@9.12.2+sha512.22721b3a11f81661ae1ec68ce1a7b879425a1ca5b991c975b074ac220b187ce56c708fe5db69f4c962c989452eee76c82877f4ee80f474cebd61ee13461b6228", "pnpm": { "patchedDependencies": { "whatwg-url@5.0.0": "patches/whatwg-url@5.0.0.patch", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94a1b71..cb2a099 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,14 +38,14 @@ importers: specifier: ^6.7.1 version: 6.7.1(@discord-player/extractor@4.5.1(encoding@0.1.13)) discord-player-youtubei: - specifier: ^1.3.2 - version: 1.3.2 + specifier: ^1.3.3 + version: 1.3.3 discord.js: specifier: ^14.16.3 version: 14.16.3 drizzle-orm: - specifier: ^0.34.1 - version: 0.34.1(@types/pg@8.11.10)(pg@8.13.0)(postgres@3.4.4)(sqlite3@5.1.7) + specifier: ^0.35.3 + version: 0.35.3(@libsql/client-wasm@0.14.0)(@types/pg@8.11.10)(pg@8.13.0)(postgres@3.4.5)(sqlite3@5.1.7) ioredis: specifier: ^5.4.1 version: 5.4.1 @@ -53,8 +53,8 @@ importers: specifier: ^2.1.3 version: 2.1.3 postgres: - specifier: ^3.4.4 - version: 3.4.4 + specifier: ^3.4.5 + version: 3.4.5 pretty-ms: specifier: ^9.1.0 version: 9.1.0 @@ -63,26 +63,26 @@ importers: specifier: ^3.1.0 version: 3.1.0 '@eslint/js': - specifier: ^9.12.0 - version: 9.12.0 + specifier: ^9.13.0 + version: 9.13.0 '@swc/cli': specifier: ^0.4.0 - version: 0.4.0(@swc/core@1.7.35)(chokidar@4.0.1) + version: 0.4.0(@swc/core@1.7.40)(chokidar@4.0.1) '@swc/core': - specifier: ^1.7.35 - version: 1.7.35 + specifier: ^1.7.40 + version: 1.7.40 '@types/ms': specifier: ^0.7.34 version: 0.7.34 '@types/node': - specifier: ^22.7.5 - version: 22.7.5 + specifier: ^22.8.1 + version: 22.8.1 '@typescript-eslint/eslint-plugin': - specifier: ^8.8.1 - version: 8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.3))(eslint@9.12.0)(typescript@5.6.3) + specifier: ^8.11.0 + version: 8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)(typescript@5.6.3) '@typescript-eslint/parser': - specifier: ^8.8.1 - version: 8.8.1(eslint@9.12.0)(typescript@5.6.3) + specifier: ^8.11.0 + version: 8.11.0(eslint@9.13.0)(typescript@5.6.3) chokidar: specifier: ^4.0.1 version: 4.0.1 @@ -90,23 +90,23 @@ importers: specifier: ^16.4.5 version: 16.4.5 dprint: - specifier: ^0.47.2 - version: 0.47.2 + specifier: ^0.47.5 + version: 0.47.5 drizzle-kit: - specifier: ^0.25.0 - version: 0.25.0 + specifier: ^0.26.2 + version: 0.26.2 eslint: - specifier: ^9.12.0 - version: 9.12.0 + specifier: ^9.13.0 + version: 9.13.0 eslint-plugin-drizzle: specifier: ^0.2.3 - version: 0.2.3(eslint@9.12.0) + version: 0.2.3(eslint@9.13.0) globals: specifier: ^15.11.0 version: 15.11.0 tsx: - specifier: ^4.19.1 - version: 4.19.1 + specifier: ^4.19.2 + version: 4.19.2 typescript: specifier: ^5.6.3 version: 5.6.3 @@ -159,43 +159,43 @@ packages: resolution: {integrity: sha512-PZ+vLpxGCRtmr2RMkqh8Zp+BenUaJqlS6xhgWKEZcgC/vfHLEzpHtKkB0sl3nZWpwtcKk6YWy+pU3okL2I97FA==} engines: {node: '>=16.11.0'} - '@dprint/darwin-arm64@0.47.2': - resolution: {integrity: sha512-mVPFBJsXxGDKHHCAY8wbqOyS4028g1bN15H9tivCnPAjwaZhkUimZHXWejXADjhGn+Xm2SlakugY9PY/68pH3Q==} + '@dprint/darwin-arm64@0.47.5': + resolution: {integrity: sha512-aVa3F//dkvEeNA7DCSlVcLxB0CV6zXpfbJZ/xsd+xgbayCXFuFr7qt0M6T4WP3gkQn5D7Zu8/pbXfRXQXo9qlQ==} cpu: [arm64] os: [darwin] - '@dprint/darwin-x64@0.47.2': - resolution: {integrity: sha512-T7wzlc+rBV+6BRRiBjoqoy5Hj4TR2Nv2p2s9+ycyPGs10Kj/JXOWD8dnEHeBgUr2r4qe/ZdcxmsFQ5Hf2n0WuA==} + '@dprint/darwin-x64@0.47.5': + resolution: {integrity: sha512-84lmSLM/idIQ4UBkBHU1chP0WTldRjzLOEN22/XbdB1JGOIVN1pJIIU0lsmVWXaNI4SvGfty+thhGn73SSlQwA==} cpu: [x64] os: [darwin] - '@dprint/linux-arm64-glibc@0.47.2': - resolution: {integrity: sha512-B0m1vT5LdVtrNOVdkqpLPrSxuCD+l5bTIgRzPaDoIB1ChWQkler9IlX8C+RStpujjPj6SYvwo5vTzjQSvRdQkA==} + '@dprint/linux-arm64-glibc@0.47.5': + resolution: {integrity: sha512-Zk7Ut9Trgl2ssGWx0u3YegnRQFXivKaK1fPEimg/uMwdaLtWFGvNs6DACAJk34d883zmDkTQvllqY1kc78CeBg==} cpu: [arm64] os: [linux] - '@dprint/linux-arm64-musl@0.47.2': - resolution: {integrity: sha512-zID6wZZqpg2/Q2Us+ERQkbhLwlW3p3xaeEr00MPf49bpydmEjMiPuSjWPkNv+slQSIyIsVovOxF4lbNZjsdtvw==} + '@dprint/linux-arm64-musl@0.47.5': + resolution: {integrity: sha512-KmCu1yX5+/2MbT9n0iAgSK1gc6sQBcDayq8QRO7TRSs+gTDAZ/yQXHkhLdlk5fWsTR1mDQPVRG+2nAjHDhk8EA==} cpu: [arm64] os: [linux] - '@dprint/linux-x64-glibc@0.47.2': - resolution: {integrity: sha512-rB3WXMdINnRd33DItIp7mObS7dzHW90ZzeJSsoKJLPp+Z7wXjjb27UUowfqVI4baa/1pd7sdbX54DPohMtfu/A==} + '@dprint/linux-x64-glibc@0.47.5': + resolution: {integrity: sha512-oBwENMikvcM+eT6JdliMIM+TOiV4VuBJGK+AN1sTOW45VeiYvmzGPOQwCxVeFq4MnZkMfrycC/PAY3C7Vcuh6w==} cpu: [x64] os: [linux] - '@dprint/linux-x64-musl@0.47.2': - resolution: {integrity: sha512-E0+TNbzYdTXJ/jCVjUctVxkda/faw++aDQLfyWGcmdMJnbM7NZz+W4fUpDXzMPsjy+zTWxXcPK7/q2DZz2gnbg==} + '@dprint/linux-x64-musl@0.47.5': + resolution: {integrity: sha512-B1IGyaP0k25JDhqmR/UpvgyNtnclBoXV7ZNQbvygehBkTeC69afwzpUxjQ2pKj2F9bl1Rby//fhsAFOg60PzsA==} cpu: [x64] os: [linux] - '@dprint/win32-arm64@0.47.2': - resolution: {integrity: sha512-K1EieTCFjfOCmyIhw9zFSduE6qVCNHEveupqZEfbSkVGw5T9MJQ1I9+n7MDb3RIDYEUk0enJ58/w82q8oDKCyA==} + '@dprint/win32-arm64@0.47.5': + resolution: {integrity: sha512-tKSPwGWsKc+QAdsx6UQav9AY8WXm+B5Mx23ujliJJMRss6Dnlmg17NjbAnSBSqXSrfqaMeQx6d4gujPpOS3F9A==} cpu: [arm64] os: [win32] - '@dprint/win32-x64@0.47.2': - resolution: {integrity: sha512-LhizWr8VrhHvq4ump8HwOERyFmdLiE8C6A42QSntGXzKdaa2nEOq20x/o56ZIiDcesiV+1TmosMKimPcOZHa+Q==} + '@dprint/win32-x64@0.47.5': + resolution: {integrity: sha512-ljbrGv5rDR00ziBFY6V+qLhtLHm2dsjgiFG9OU7kr3vHEj4eN31nwxU5W2mh0eMoRk7IbcJ5ahTJDLgoYdvfgw==} cpu: [x64] os: [win32] @@ -638,16 +638,16 @@ packages: resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.6.0': - resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} + '@eslint/core@0.7.0': + resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.1.0': resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.12.0': - resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} + '@eslint/js@9.13.0': + resolution: {integrity: sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': @@ -687,6 +687,14 @@ packages: '@ioredis/commands@1.2.0': resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} + '@libsql/client-wasm@0.14.0': + resolution: {integrity: sha512-gB/jtz0xuwrqAHApBv9e9JSew2030Fhj2edyZ83InZ4yPj/Q2LTUlEhaspEYT0T0xsAGqPy38uGrmq/OGS+DdQ==} + bundledDependencies: + - '@libsql/libsql-wasm-experimental' + + '@libsql/core@0.14.0': + resolution: {integrity: sha512-nhbuXf7GP3PSZgdCY2Ecj8vz187ptHlZQ0VRc751oB2C1W8jQUXKKklvt7t1LJiUTQBVJuadF628eUk+3cRi4Q==} + '@mole-inc/bin-wrapper@8.0.1': resolution: {integrity: sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -838,68 +846,68 @@ packages: chokidar: optional: true - '@swc/core-darwin-arm64@1.7.35': - resolution: {integrity: sha512-BQSSozVxjxS+SVQz6e3GC/+OBWGIK3jfe52pWdANmycdjF3ch7lrCKTHTU7eHwyoJ96mofszPf5AsiVJF34Fwg==} + '@swc/core-darwin-arm64@1.7.40': + resolution: {integrity: sha512-LRRrCiRJLb1kpQtxMNNsr5W82Inr0dy5Imho+4HQzVx/Ismi0qX4hQBgzJAnyOBNLK1+OBVb/912UVhKXppdfQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.7.35': - resolution: {integrity: sha512-44TYdKN/EWtkU88foXR7IGki9JzhEJzaFOoPevfi9Xe7hjAD/x2+AJOWWqQNzDPMz9+QewLdUVLyR6s5okRgtg==} + '@swc/core-darwin-x64@1.7.40': + resolution: {integrity: sha512-Lpl0XK/4fLzS5jsK48opUuGXrqJXwqJckYYPwyGbCfCXm4MsBe+7dX2hq/Kc4YMY25+NeTmzAXhla8TT4WYD/g==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.7.35': - resolution: {integrity: sha512-ccfA5h3zxwioD+/z/AmYtkwtKz9m4rWTV7RoHq6Jfsb0cXHrd6tbcvgqRWXra1kASlE+cDWsMtEZygs9dJRtUQ==} + '@swc/core-linux-arm-gnueabihf@1.7.40': + resolution: {integrity: sha512-4bEvvjptpoc5BRPr/R419h6fXTEuub+frpxxlxBOEKxgXjAF/S3xdxyPijUAakmW/xXBF0u7OC4KYI+38yQp6g==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.7.35': - resolution: {integrity: sha512-hx65Qz+G4iG/IVtxJKewC5SJdki8PAPFGl6gC/57Jb0+jA4BIoGLD/J3Q3rCPeoHfdqpkCYpahtyUq8CKx41Jg==} + '@swc/core-linux-arm64-gnu@1.7.40': + resolution: {integrity: sha512-v2fBlHJ/6Ovz0L2xFAI9TRiKyl9DTdx139PuAHD9gyzp16Utl/W0MPd4t2cYdkI6hPXE9PsJCSzMOrduh+YoDg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.7.35': - resolution: {integrity: sha512-kL6tQL9No7UEoEvDRuPxzPTpxrvbwYteNRbdChSSP74j13/55G2/2hLmult5yFFaWuyoyU/2lvzjRL/i8OLZxg==} + '@swc/core-linux-arm64-musl@1.7.40': + resolution: {integrity: sha512-uMkduQuU4LFVkW6txv8AVArT8GjJVJ5IHoWloXaUBMT447iE8NALmpePdZWhMyj6KV7j0y23CM5rzV/I2eNGLg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.7.35': - resolution: {integrity: sha512-Ke4rcLQSwCQ2LHdJX1FtnqmYNQ3IX6BddKlUtS7mcK13IHkQzZWp0Dcu6MgNA3twzb/dBpKX5GLy07XdGgfmyw==} + '@swc/core-linux-x64-gnu@1.7.40': + resolution: {integrity: sha512-4LZdY1MBSnXyTpW5fpBU/+JGAhkuHT+VnFTDNegRboN5nSPh7y0Yvn4LmIioESV+sWzjKkEXujJPGjrp+oSp5w==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.7.35': - resolution: {integrity: sha512-T30tlLnz0kYyDFyO5RQF5EQ4ENjW9+b56hEGgFUYmfhFhGA4E4V67iEx7KIG4u0whdPG7oy3qjyyIeTb7nElEw==} + '@swc/core-linux-x64-musl@1.7.40': + resolution: {integrity: sha512-FPjOwT3SgI6PAwH1O8bhOGBPzuvzOlzKeCtxLaCjruHJu9V8KKBrMTWOZT/FJyYC9mX5Ip1+l9j30UqUZdQxtA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.7.35': - resolution: {integrity: sha512-CfM/k8mvtuMyX+okRhemfLt784PLS0KF7Q9djA8/Dtavk0L5Ghnq+XsGltO3d8B8+XZ7YOITsB14CrjehzeHsg==} + '@swc/core-win32-arm64-msvc@1.7.40': + resolution: {integrity: sha512-//ovXdD9GsTmhPmXJlXnIbRQkeuL6PSrYSr7uCMNcclrUdJG0YkO0GMM2afUKYbdJcunylDDWsSS8PFWn0QxmA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.7.35': - resolution: {integrity: sha512-ATB3uuH8j/RmS64EXQZJSbo2WXfRNpTnQszHME/sGaexsuxeijrp3DTYSFAA3R2Bu6HbIIX6jempe1Au8I3j+A==} + '@swc/core-win32-ia32-msvc@1.7.40': + resolution: {integrity: sha512-iD/1auVhHGlhWAPrWmfRWL3w4AvXIWGVXZiSA109/xnRIPiHKb/HqqTp/qB94E/ZHMPRgLKkLTNwamlkueUs8g==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.7.35': - resolution: {integrity: sha512-iDGfQO1571NqWUXtLYDhwIELA/wadH42ioGn+J9R336nWx40YICzy9UQyslWRhqzhQ5kT+QXAW/MoCWc058N6Q==} + '@swc/core-win32-x64-msvc@1.7.40': + resolution: {integrity: sha512-ZlFAV1WFPhhWQ/8esiygmetkb905XIcMMtHRRG0FBGCllO+HVL5nikUaLDgTClz1onmEY9sMXUFQeoPtvliV+w==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.7.35': - resolution: {integrity: sha512-3cUteCTbr2r5jqfgx0r091sfq5Mgh6F1SQh8XAOnSvtKzwv2bC31mvBHVAieD1uPa2kHJhLav20DQgXOhpEitw==} + '@swc/core@1.7.40': + resolution: {integrity: sha512-0HIzM5vigVT5IvNum+pPuST9p8xFhN6mhdIKju7qYYeNuZG78lwms/2d8WgjTJJlzp6JlPguXGrMMNzjQw0qNg==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -945,8 +953,8 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@22.7.5': - resolution: {integrity: sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==} + '@types/node@22.8.1': + resolution: {integrity: sha512-k6Gi8Yyo8EtrNtkHXutUu2corfDf9su95VYVP10aGYMMROM6SAItZi0w1XszA6RtWTHSVp5OeFof37w0IEqCQg==} '@types/pg@8.11.10': resolution: {integrity: sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg==} @@ -957,8 +965,8 @@ packages: '@types/ws@8.5.12': resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} - '@typescript-eslint/eslint-plugin@8.8.1': - resolution: {integrity: sha512-xfvdgA8AP/vxHgtgU310+WBnLB4uJQ9XdyP17RebG26rLtDrQJV3ZYrcopX91GrHmMoH8bdSwMRh2a//TiJ1jQ==} + '@typescript-eslint/eslint-plugin@8.11.0': + resolution: {integrity: sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -968,8 +976,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.8.1': - resolution: {integrity: sha512-hQUVn2Lij2NAxVFEdvIGxT9gP1tq2yM83m+by3whWFsWC+1y8pxxxHUFE1UqDu2VsGi2i6RLcv4QvouM84U+ow==} + '@typescript-eslint/parser@8.11.0': + resolution: {integrity: sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -978,12 +986,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@8.8.1': - resolution: {integrity: sha512-X4JdU+66Mazev/J0gfXlcC/dV6JI37h+93W9BRYXrSn0hrE64IoWgVkO9MSJgEzoWkxONgaQpICWg8vAN74wlA==} + '@typescript-eslint/scope-manager@8.11.0': + resolution: {integrity: sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.8.1': - resolution: {integrity: sha512-qSVnpcbLP8CALORf0za+vjLYj1Wp8HSoiI8zYU5tHxRVj30702Z1Yw4cLwfNKhTPWp5+P+k1pjmD5Zd1nhxiZA==} + '@typescript-eslint/type-utils@8.11.0': + resolution: {integrity: sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -991,12 +999,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@8.8.1': - resolution: {integrity: sha512-WCcTP4SDXzMd23N27u66zTKMuEevH4uzU8C9jf0RO4E04yVHgQgW+r+TeVTNnO1KIfrL8ebgVVYYMMO3+jC55Q==} + '@typescript-eslint/types@8.11.0': + resolution: {integrity: sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.8.1': - resolution: {integrity: sha512-A5d1R9p+X+1js4JogdNilDuuq+EHZdsH9MjTVxXOdVFfTJXunKJR/v+fNNyO4TnoOn5HqobzfRlc70NC6HTcdg==} + '@typescript-eslint/typescript-estree@8.11.0': + resolution: {integrity: sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -1004,14 +1012,14 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.8.1': - resolution: {integrity: sha512-/QkNJDbV0bdL7H7d0/y0qBbV2HTtf0TIyjSDTvvmQEzeVx8jEImEbLuOA4EsvE8gIgqMitns0ifb5uQhMj8d9w==} + '@typescript-eslint/utils@8.11.0': + resolution: {integrity: sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/visitor-keys@8.8.1': - resolution: {integrity: sha512-0/TdC3aeRAsW7MDvYRwEc1Uwm0TIBfzjPFgg60UU2Haj5qsCs9cc3zNgY71edqE3LbWfF/WoZQd3lJoDXFQpag==} + '@typescript-eslint/visitor-keys@8.11.0': + resolution: {integrity: sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vladfrangu/async_event_emitter@2.4.6': @@ -1272,8 +1280,8 @@ packages: discord-api-types@0.37.97: resolution: {integrity: sha512-No1BXPcVkyVD4ZVmbNgDKaBoqgeQ+FJpzZ8wqHkfmBnTZig1FcH3iPPersiK1TUIAzgClh2IvOuVUYfcWLQAOA==} - discord-player-youtubei@1.3.2: - resolution: {integrity: sha512-NtKtLiR9HMYfTDXYvBeQCE+k3eegjB+ttaBq7gYdldIghBZ4fYHb0ERsAcY6lN4bQyAq0DaPFRIRbyk9Pi0TSg==} + discord-player-youtubei@1.3.3: + resolution: {integrity: sha512-upjLdAO57R3LzoX4SzyCAhLngrRuyiG+3zWBIFKi17h+S/FT8Ys/FuNW71pyvtbH/gpG3GhLlzzoHkm+9u6v4Q==} hasBin: true discord-player@6.7.1: @@ -1306,21 +1314,22 @@ packages: resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - dprint@0.47.2: - resolution: {integrity: sha512-geUcVIIrmLaY+YtuOl4gD7J/QCjsXZa5gUqre9sO6cgH0X/Fa9heBN3l/AWVII6rKPw45ATuCSDWz1pyO+HkPQ==} + dprint@0.47.5: + resolution: {integrity: sha512-EAP3OLYZXiW66HKMlhu6Gu0o7mzBVTWyMyuAAgT7dBtMX+W+pPJmIwyRUnTRQNyyFO4S7bAaa21rzIgo97Bg9A==} hasBin: true - drizzle-kit@0.25.0: - resolution: {integrity: sha512-Rcf0nYCAKizwjWQCY+d3zytyuTbDb81NcaPor+8NebESlUz1+9W3uGl0+r9FhU4Qal5Zv9j/7neXCSCe7DHzjA==} + drizzle-kit@0.26.2: + resolution: {integrity: sha512-cMq8omEKywjIy5KcqUo6LvEFxkl8/zYHsgYjFVXjmPWWtuW4blcz+YW9+oIhoaALgs2ebRjzXwsJgN9i6P49Dw==} hasBin: true - drizzle-orm@0.34.1: - resolution: {integrity: sha512-t+zCwyWWt8xTqtYV4doE/xYmT7hpv1L8pQ66zddEz+3VWyedBBtctjMAp22mAJPfyWurRQXUJ1nrTtqLq+DqNA==} + drizzle-orm@0.35.3: + resolution: {integrity: sha512-Uv6N+b36x4BaZlxc96e+ag7RnMapBLGhc4SSi2F7RDwqYJipWjaU/P68RUp1FbW9r+mxoDp8nMz2Eece8PJxfA==} peerDependencies: '@aws-sdk/client-rds-data': '>=3' '@cloudflare/workers-types': '>=3' '@electric-sql/pglite': '>=0.1.1' '@libsql/client': '>=0.10.0' + '@libsql/client-wasm': '>=0.10.0' '@neondatabase/serverless': '>=0.1' '@op-engineering/op-sqlite': '>=2' '@opentelemetry/api': ^1.4.1 @@ -1472,8 +1481,8 @@ packages: resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.12.0: - resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} + eslint@9.13.0: + resolution: {integrity: sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1800,6 +1809,9 @@ packages: jintr@2.1.1: resolution: {integrity: sha512-89cwX4ouogeDGOBsEVsVYsnWWvWjchmwXBB4kiBhmjOKw19FiOKhNhMhpxhTlK2ctl7DS+d/ethfmuBpzoNNgA==} + js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -2183,8 +2195,8 @@ packages: postgres-range@1.1.4: resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} - postgres@3.4.4: - resolution: {integrity: sha512-IbyN+9KslkqcXa8AO9fxpk97PA4pzewvpi2B3Dwy9u4zpV32QicaEdgmF3eSQUzdRk7ttDHQejNgAEr4XoeH4A==} + postgres@3.4.5: + resolution: {integrity: sha512-cDWgoah1Gez9rN3H4165peY9qfpEo+SA61oQv65O3cRUE1pOEoJWwddwcqKE8XZYjbblOJlYDlLV4h67HrEVDg==} engines: {node: '>=12'} prebuild-install@7.1.2: @@ -2506,8 +2518,8 @@ packages: tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - tsx@4.19.1: - resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} + tsx@4.19.2: + resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==} engines: {node: '>=18.0.0'} hasBin: true @@ -2534,6 +2546,10 @@ packages: resolution: {integrity: sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==} engines: {node: '>=18.17'} + undici@6.20.1: + resolution: {integrity: sha512-AjQF1QsmqfJys+LXfGTNum+qw4S88CojRInG/6t31W/1fk6G59s92bnAvGz5Cmur+kQv2SURXEvvudLmbrE8QA==} + engines: {node: '>=18.17'} + unfetch@5.0.0: resolution: {integrity: sha512-3xM2c89siXg0nHvlmYsQ2zkLASvVMBisZm5lF3gFDqfF2xonNStDJyMpvaOBe0a1Edxmqrf2E0HBdmy9QyZaeg==} @@ -2684,28 +2700,28 @@ snapshots: - bufferutil - utf-8-validate - '@dprint/darwin-arm64@0.47.2': + '@dprint/darwin-arm64@0.47.5': optional: true - '@dprint/darwin-x64@0.47.2': + '@dprint/darwin-x64@0.47.5': optional: true - '@dprint/linux-arm64-glibc@0.47.2': + '@dprint/linux-arm64-glibc@0.47.5': optional: true - '@dprint/linux-arm64-musl@0.47.2': + '@dprint/linux-arm64-musl@0.47.5': optional: true - '@dprint/linux-x64-glibc@0.47.2': + '@dprint/linux-x64-glibc@0.47.5': optional: true - '@dprint/linux-x64-musl@0.47.2': + '@dprint/linux-x64-musl@0.47.5': optional: true - '@dprint/win32-arm64@0.47.2': + '@dprint/win32-arm64@0.47.5': optional: true - '@dprint/win32-x64@0.47.2': + '@dprint/win32-x64@0.47.5': optional: true '@drizzle-team/brocli@0.10.1': {} @@ -2927,9 +2943,9 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.13.0)': dependencies: - eslint: 9.12.0 + eslint: 9.13.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.11.1': {} @@ -2942,7 +2958,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/core@0.6.0': {} + '@eslint/core@0.7.0': {} '@eslint/eslintrc@3.1.0': dependencies: @@ -2958,7 +2974,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.12.0': {} + '@eslint/js@9.13.0': {} '@eslint/object-schema@2.1.4': {} @@ -2986,6 +3002,15 @@ snapshots: '@ioredis/commands@1.2.0': {} + '@libsql/client-wasm@0.14.0': + dependencies: + '@libsql/core': 0.14.0 + js-base64: 3.7.7 + + '@libsql/core@0.14.0': + dependencies: + js-base64: 3.7.7 + '@mole-inc/bin-wrapper@8.0.1': dependencies: bin-check: 4.1.0 @@ -3100,10 +3125,10 @@ snapshots: '@sindresorhus/is@4.6.0': {} - '@swc/cli@0.4.0(@swc/core@1.7.35)(chokidar@4.0.1)': + '@swc/cli@0.4.0(@swc/core@1.7.40)(chokidar@4.0.1)': dependencies: '@mole-inc/bin-wrapper': 8.0.1 - '@swc/core': 1.7.35 + '@swc/core': 1.7.40 '@swc/counter': 0.1.3 commander: 8.3.0 fast-glob: 3.3.2 @@ -3115,51 +3140,51 @@ snapshots: optionalDependencies: chokidar: 4.0.1 - '@swc/core-darwin-arm64@1.7.35': + '@swc/core-darwin-arm64@1.7.40': optional: true - '@swc/core-darwin-x64@1.7.35': + '@swc/core-darwin-x64@1.7.40': optional: true - '@swc/core-linux-arm-gnueabihf@1.7.35': + '@swc/core-linux-arm-gnueabihf@1.7.40': optional: true - '@swc/core-linux-arm64-gnu@1.7.35': + '@swc/core-linux-arm64-gnu@1.7.40': optional: true - '@swc/core-linux-arm64-musl@1.7.35': + '@swc/core-linux-arm64-musl@1.7.40': optional: true - '@swc/core-linux-x64-gnu@1.7.35': + '@swc/core-linux-x64-gnu@1.7.40': optional: true - '@swc/core-linux-x64-musl@1.7.35': + '@swc/core-linux-x64-musl@1.7.40': optional: true - '@swc/core-win32-arm64-msvc@1.7.35': + '@swc/core-win32-arm64-msvc@1.7.40': optional: true - '@swc/core-win32-ia32-msvc@1.7.35': + '@swc/core-win32-ia32-msvc@1.7.40': optional: true - '@swc/core-win32-x64-msvc@1.7.35': + '@swc/core-win32-x64-msvc@1.7.40': optional: true - '@swc/core@1.7.35': + '@swc/core@1.7.40': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.13 optionalDependencies: - '@swc/core-darwin-arm64': 1.7.35 - '@swc/core-darwin-x64': 1.7.35 - '@swc/core-linux-arm-gnueabihf': 1.7.35 - '@swc/core-linux-arm64-gnu': 1.7.35 - '@swc/core-linux-arm64-musl': 1.7.35 - '@swc/core-linux-x64-gnu': 1.7.35 - '@swc/core-linux-x64-musl': 1.7.35 - '@swc/core-win32-arm64-msvc': 1.7.35 - '@swc/core-win32-ia32-msvc': 1.7.35 - '@swc/core-win32-x64-msvc': 1.7.35 + '@swc/core-darwin-arm64': 1.7.40 + '@swc/core-darwin-x64': 1.7.40 + '@swc/core-linux-arm-gnueabihf': 1.7.40 + '@swc/core-linux-arm64-gnu': 1.7.40 + '@swc/core-linux-arm64-musl': 1.7.40 + '@swc/core-linux-x64-gnu': 1.7.40 + '@swc/core-linux-x64-musl': 1.7.40 + '@swc/core-win32-arm64-msvc': 1.7.40 + '@swc/core-win32-ia32-msvc': 1.7.40 + '@swc/core-win32-x64-msvc': 1.7.40 '@swc/counter@0.1.3': {} @@ -3180,7 +3205,7 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 22.7.5 + '@types/node': 22.8.1 '@types/responselike': 1.0.3 '@types/estree@1.0.6': {} @@ -3191,40 +3216,40 @@ snapshots: '@types/keyv@3.1.4': dependencies: - '@types/node': 22.7.5 + '@types/node': 22.8.1 '@types/luxon@3.4.2': {} '@types/ms@0.7.34': {} - '@types/node@22.7.5': + '@types/node@22.8.1': dependencies: undici-types: 6.19.8 '@types/pg@8.11.10': dependencies: - '@types/node': 22.7.5 + '@types/node': 22.8.1 pg-protocol: 1.7.0 pg-types: 4.0.2 optional: true '@types/responselike@1.0.3': dependencies: - '@types/node': 22.7.5 + '@types/node': 22.8.1 '@types/ws@8.5.12': dependencies: - '@types/node': 22.7.5 + '@types/node': 22.8.1 - '@typescript-eslint/eslint-plugin@8.8.1(@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.3))(eslint@9.12.0)(typescript@5.6.3)': + '@typescript-eslint/eslint-plugin@8.11.0(@typescript-eslint/parser@8.11.0(eslint@9.13.0)(typescript@5.6.3))(eslint@9.13.0)(typescript@5.6.3)': dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.8.1(eslint@9.12.0)(typescript@5.6.3) - '@typescript-eslint/scope-manager': 8.8.1 - '@typescript-eslint/type-utils': 8.8.1(eslint@9.12.0)(typescript@5.6.3) - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.8.1 - eslint: 9.12.0 + '@typescript-eslint/parser': 8.11.0(eslint@9.13.0)(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.11.0 + '@typescript-eslint/type-utils': 8.11.0(eslint@9.13.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.11.0(eslint@9.13.0)(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.11.0 + eslint: 9.13.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -3234,28 +3259,28 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.8.1(eslint@9.12.0)(typescript@5.6.3)': + '@typescript-eslint/parser@8.11.0(eslint@9.13.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 8.8.1 - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3) - '@typescript-eslint/visitor-keys': 8.8.1 + '@typescript-eslint/scope-manager': 8.11.0 + '@typescript-eslint/types': 8.11.0 + '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.11.0 debug: 4.3.7 - eslint: 9.12.0 + eslint: 9.13.0 optionalDependencies: typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.8.1': + '@typescript-eslint/scope-manager@8.11.0': dependencies: - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/visitor-keys': 8.8.1 + '@typescript-eslint/types': 8.11.0 + '@typescript-eslint/visitor-keys': 8.11.0 - '@typescript-eslint/type-utils@8.8.1(eslint@9.12.0)(typescript@5.6.3)': + '@typescript-eslint/type-utils@8.11.0(eslint@9.13.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3) - '@typescript-eslint/utils': 8.8.1(eslint@9.12.0)(typescript@5.6.3) + '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.11.0(eslint@9.13.0)(typescript@5.6.3) debug: 4.3.7 ts-api-utils: 1.3.0(typescript@5.6.3) optionalDependencies: @@ -3264,12 +3289,12 @@ snapshots: - eslint - supports-color - '@typescript-eslint/types@8.8.1': {} + '@typescript-eslint/types@8.11.0': {} - '@typescript-eslint/typescript-estree@8.8.1(typescript@5.6.3)': + '@typescript-eslint/typescript-estree@8.11.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/visitor-keys': 8.8.1 + '@typescript-eslint/types': 8.11.0 + '@typescript-eslint/visitor-keys': 8.11.0 debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 @@ -3281,20 +3306,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.8.1(eslint@9.12.0)(typescript@5.6.3)': + '@typescript-eslint/utils@8.11.0(eslint@9.13.0)(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) - '@typescript-eslint/scope-manager': 8.8.1 - '@typescript-eslint/types': 8.8.1 - '@typescript-eslint/typescript-estree': 8.8.1(typescript@5.6.3) - eslint: 9.12.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.13.0) + '@typescript-eslint/scope-manager': 8.11.0 + '@typescript-eslint/types': 8.11.0 + '@typescript-eslint/typescript-estree': 8.11.0(typescript@5.6.3) + eslint: 9.13.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@8.8.1': + '@typescript-eslint/visitor-keys@8.11.0': dependencies: - '@typescript-eslint/types': 8.8.1 + '@typescript-eslint/types': 8.11.0 eslint-visitor-keys: 3.4.3 '@vladfrangu/async_event_emitter@2.4.6': {} @@ -3575,9 +3600,10 @@ snapshots: discord-api-types@0.37.97: {} - discord-player-youtubei@1.3.2: + discord-player-youtubei@1.3.3: dependencies: tiny-typed-emitter: 2.1.0 + undici: 6.20.1 youtubei.js: 10.5.0 discord-player@6.7.1(@discord-player/extractor@4.5.1(encoding@0.1.13)): @@ -3652,18 +3678,18 @@ snapshots: dotenv@16.4.5: {} - dprint@0.47.2: + dprint@0.47.5: optionalDependencies: - '@dprint/darwin-arm64': 0.47.2 - '@dprint/darwin-x64': 0.47.2 - '@dprint/linux-arm64-glibc': 0.47.2 - '@dprint/linux-arm64-musl': 0.47.2 - '@dprint/linux-x64-glibc': 0.47.2 - '@dprint/linux-x64-musl': 0.47.2 - '@dprint/win32-arm64': 0.47.2 - '@dprint/win32-x64': 0.47.2 + '@dprint/darwin-arm64': 0.47.5 + '@dprint/darwin-x64': 0.47.5 + '@dprint/linux-arm64-glibc': 0.47.5 + '@dprint/linux-arm64-musl': 0.47.5 + '@dprint/linux-x64-glibc': 0.47.5 + '@dprint/linux-x64-musl': 0.47.5 + '@dprint/win32-arm64': 0.47.5 + '@dprint/win32-x64': 0.47.5 - drizzle-kit@0.25.0: + drizzle-kit@0.26.2: dependencies: '@drizzle-team/brocli': 0.10.1 '@esbuild-kit/esm-loader': 2.6.5 @@ -3672,11 +3698,13 @@ snapshots: transitivePeerDependencies: - supports-color - drizzle-orm@0.34.1(@types/pg@8.11.10)(pg@8.13.0)(postgres@3.4.4)(sqlite3@5.1.7): + drizzle-orm@0.35.3(@libsql/client-wasm@0.14.0)(@types/pg@8.11.10)(pg@8.13.0)(postgres@3.4.5)(sqlite3@5.1.7): + dependencies: + '@libsql/client-wasm': 0.14.0 optionalDependencies: '@types/pg': 8.11.10 pg: 8.13.0 - postgres: 3.4.4 + postgres: 3.4.5 sqlite3: 5.1.7 emoji-regex@8.0.0: @@ -3788,9 +3816,9 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-plugin-drizzle@0.2.3(eslint@9.12.0): + eslint-plugin-drizzle@0.2.3(eslint@9.13.0): dependencies: - eslint: 9.12.0 + eslint: 9.13.0 eslint-scope@8.1.0: dependencies: @@ -3803,14 +3831,14 @@ snapshots: eslint-visitor-keys@4.1.0: {} - eslint@9.12.0: + eslint@9.13.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.13.0) '@eslint-community/regexpp': 4.11.1 '@eslint/config-array': 0.18.0 - '@eslint/core': 0.6.0 + '@eslint/core': 0.7.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.12.0 + '@eslint/js': 9.13.0 '@eslint/plugin-kit': 0.2.0 '@humanfs/node': 0.16.5 '@humanwhocodes/module-importer': 1.0.1 @@ -4198,6 +4226,8 @@ snapshots: dependencies: acorn: 8.12.1 + js-base64@3.7.7: {} + js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -4598,7 +4628,7 @@ snapshots: postgres-range@1.1.4: optional: true - postgres@3.4.4: {} + postgres@3.4.5: {} prebuild-install@7.1.2: dependencies: @@ -4918,7 +4948,7 @@ snapshots: tslib@2.7.0: {} - tsx@4.19.1: + tsx@4.19.2: dependencies: esbuild: 0.23.1 get-tsconfig: 4.8.1 @@ -4944,6 +4974,8 @@ snapshots: undici@6.19.8: {} + undici@6.20.1: {} + unfetch@5.0.0: {} unique-filename@1.1.1: