From d1c77f4dddb4defd347bc3c7bacfeb82acac7d8a Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 13 Jun 2023 09:27:24 -0600 Subject: [PATCH 01/79] Added stuff First update in a long time! --- README.md | 168 +- config/config.hjson.example | 1 + config/constants.hjson | 4 + config/permissions.hjson | 7 +- config/text.hjson | 41 +- package.json | 17 +- prisma/schema.prisma | 228 +- src/commands/Devs/botinfo.ts | 37 + src/commands/Devs/policy.ts | 7 - src/commands/Devs/terms.ts | 7 - src/commands/Devs/userinfo.ts | 62 + src/commands/economy/balance.ts | 14 +- src/commands/economy/crime.ts | 53 +- src/commands/economy/daily.ts | 17 +- src/commands/economy/drinkroullete.ts | 27 +- src/commands/economy/give.ts | 18 +- src/commands/economy/work.ts | 17 +- src/commands/fun/doggo.ts | 5 +- src/commands/fun/goose.ts | 5 +- src/commands/fun/hug.ts | 5 +- src/commands/fun/meme.ts | 7 +- src/commands/fun/meow.ts | 5 +- src/commands/fun/pat.ts | 5 +- src/commands/fun/slap.ts | 7 +- src/commands/fun/tickle.ts | 5 +- src/commands/moderation/blacklist.ts | 18 +- src/commands/orders/cancel.ts | 7 +- src/commands/orders/feedback.ts | 8 +- src/commands/orders/order.ts | 29 +- src/commands/orders/status.ts | 18 +- src/commands/orders/tip.ts | 8 +- src/commands/orders/worker/brew.ts | 61 +- src/commands/orders/worker/claim.ts | 128 +- src/commands/orders/worker/claimed.ts | 21 +- src/commands/orders/worker/delete.ts | 27 +- src/commands/orders/worker/deliver.ts | 148 +- src/commands/orders/worker/deliverymessage.ts | 15 +- src/commands/orders/worker/duty.ts | 17 +- src/commands/orders/worker/fetch.ts | 49 +- src/commands/orders/worker/leaderboard.ts | 173 ++ src/commands/orders/worker/list.ts | 14 +- src/commands/orders/worker/unclaim.ts | 112 +- src/commands/public/expboard.ts | 51 + src/commands/public/profile.ts | 51 + src/database/order.ts | 142 +- src/database/orders.ts | 172 ++ src/database/userInfo.ts | 59 +- src/database/workerInfo.ts | 9 + src/events/ExpCreate.ts | 86 + src/events/interactionCreate.ts | 21 +- src/providers/client.ts | 40 +- src/providers/commandManager.ts | 14 +- src/providers/config.ts | 52 +- src/providers/customCommands.ts | 29 + src/providers/drink.ts | 25 + src/providers/orderManager.ts | 7 +- src/providers/permissions.ts | 3 +- src/structures/Command.ts | 41 +- src/structures/CustomDrinkData.ts | 6 + src/structures/DrinksData.ts | 6 + src/utils/serverconfig.ts | 11 + src/utils/string.ts | 5 +- yarn.lock | 1934 +++++++++++++++++ 63 files changed, 3643 insertions(+), 743 deletions(-) create mode 100644 src/commands/Devs/botinfo.ts create mode 100644 src/commands/Devs/userinfo.ts create mode 100644 src/commands/orders/worker/leaderboard.ts create mode 100644 src/commands/public/expboard.ts create mode 100644 src/commands/public/profile.ts create mode 100644 src/database/orders.ts create mode 100644 src/events/ExpCreate.ts create mode 100644 src/providers/customCommands.ts create mode 100644 src/providers/drink.ts create mode 100644 src/structures/CustomDrinkData.ts create mode 100644 src/structures/DrinksData.ts create mode 100644 src/utils/serverconfig.ts create mode 100644 yarn.lock diff --git a/README.md b/README.md index 4284655..60ef8dc 100644 --- a/README.md +++ b/README.md @@ -1,166 +1,2 @@ -[![Patreon](https://img.shields.io/badge/Patreon-F96854?style=for-the-badge&logo=patreon&logoColor=white)](https://www.patreon.com/drunkbartender) -[![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.com/invite/pY6hNVs) -[![Github](https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white)](https://github.com/shadow6060/DBRewrite) -[![Typescript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/) -[![Website](https://img.shields.io/badge/-Website-blueviolet?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGF2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDg4LCAyMDIwLzA3LzEwLTIyOjA2OjUzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIyLTEyLTI1VDEyOjU1OjE1WiIgeG1wOk1vZGlmeURhdGU9IjIwMjItMTItMjVUMTM6MDE6NDJaIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIyLTEyLTI1VDEzOjAxOjQyWiIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Yjc2ODI5ZTQtY2RhMC0zZjQxLThlNWItMzNkY2Q5Nzc3NmJiIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTU4Nzc3ODAtZTE5ZS1kZDRiLWIwYjItY2VkN2UyYjVlN2NiIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6N2FhMjBmYmItNzEwNy05NTQ4LTgxZmUtODFjZTMxZGY2M2M5Ij4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3YWEyMGZiYi03MTA3LTk1NDgtODFmZS04MWNlMzFkZjYzYzkiIHN0RXZ0OndoZW49IjIwMjItMTItMjVUMTI6NTU6MTVaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMCAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Yjc2ODI5ZTQtY2RhMC0zZjQxLThlNWItMzNkY2Q5Nzc3NmJiIiBzdEV2dDp3aGVuPSIyMDIyLTEyLTI1VDEzOjAxOjQyWiIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pnios6IAAAJaSURBVCiRndLLS5RRHIfx7++cd5x3HGfSGUZR8zqFlWZONyy7aEHRIozAIiJaGeiiIDAoENqE4C4QKkgoyS4QKegiWmWIl02hpQaZMU5iMZrXmffMO+85p//BZ//ZPaS1xlYy+gbev7ZFShLnNoHWRkaHx3qfPe/P8rnFiZOn6hsbL7YKkXIYY8SYTk18nR6dGP/0wvBHRy5nMAmPocDNTOTn27ecqkB318ep5vq9c+HSxHSTcNLI8rrA3S6U7/NdT05tRmj2boYW5KTGZtVcIIjM/UUoycr1oOGBOBwp08UPW9xvF5a41f7E6Skv5NtuN+JS3EKChXc4WLTUQss7XGjuxdmMEBaDxQKFQUQMH1R2hYMUTyW+RO32pLQ6XQXWmj/PMo20zcDcTJWF5HpdISwuKKFtDoM5blIA1gmlpTz70X16U2SqYGg75bx6jGF286XqiC9rd10pzDtnGBOCEZEC4xoiwYE0wFJkVISNhkAuq4bDULmb3Gzou773dEi2xFYQ7/oshTY0wDWkQ+BcAT6F6JJaq71mHz/XJmtnfshfp4/hkDF4A0fTxOOWS9cMR7HT61MhmMDqphZFYQCrBHtDqivnDefIHpJcpiVIwwhlsw9pglYuUGsFeZnJEJvXzkxMjh+MYBf8DNWVyCnIZ/3BXJZpBrhvZd6BIYi8iaSG6SesWkz9/I2Nth7Z+S+BSW6wmuW/JFNCwfQ4eRubLsRhWB3doo+aDqBDatLEoW3JnNkl9W1mXg+aHljlBVRVXYKryXXA7SOtGcOfFR0bn5QDtNVX2ZYUgP/eWQ654oa7+gAAAABJRU5ErkJggg==)](https://drunk-bartender.org) - -

- -

- -

Drunk Bartender

-
-

❓ What is Drunk Bartender

-
-Drunk bartender is a bot that was created in August of 2019, - -We are a part of an independent group of developers who have been working on this for the longest time with the same original team as in the beginning We have some commands and recently moved over to Slash Commands to follow Discord Requirements to continue operating and work with most other bots that follow it, and we are currently working on moving into Discord.js v14 - -We can also be reached at anytime and we we have always worked hard on providing premium support to anyone who reaches out to us as that is the most important to us as your time is valuable so we do our best to make your experience the best so you can have more enjoyment with your time with us that is what keeps us going with this project and will always work our hardest to bring you the best new features we can and bring more fun commands - -And we are always open to hearing suggestions from the community about new features and love to hear your feedback on things we are glad that you have decided to spend some time with us as that is really important to us and if you want you also get to know us as most of our dms are open and are always ready to answer any questions -
-

ℹ Commands

- -| Commands | Usage | Permissions | -| :--- | :---: | ---: | -| /balance | Gets a user's balance. | Global 🌐 | -| /work | Work to get money. | Global 🌐 | -| /crime | Commit a crime for money. | Global 🌐 | -| /daily | Gets money daily. | Global 🌐 | -| /order | Orders a drink. | Global 🌐 | -| /tip | Tip's a bartender. | Global 🌐 | -| /status | Gets the status of an order. | Global 🌐 | -| /cancel | Cancel's an order. | Global 🌐 | -| /feedback | Sends a feedback. | Global 🌐 | -| /doggo | Cute images of dogs. | Global 🌐 | -| /goose | Cool images of goose. | Global 🌐 | -| /meow | Wow images of cats. | Global 🌐 | -| /memes | Get some very funny memes. | Global 🌐 | -| /pat | Pat someone. | Global 🌐 | -| /tickle | Tickle your friends. | Global 🌐 | -| /hug | Give someone a big old hug. | Global 🌐 | -| /slap | Slap a very naughty person. | Global 🌐 | -| /status | Get a status of your order. | Global 🌐 | -| /blacklist | Blacklist's a user. | Admin 🛠 | -| /unblacklist | Unblacklist's a user. | Admin 🛠 | -| /list | List's all available orders. | Staff 🛠 | -| /claim | Claim's a user's order. | Staff 🛠 | -| /unclaim | Unclaim's a user's order. | Staff 🛠 | -| /fetch | Fetches the status of an order. | Staff 🛠 | -| /duty | Gives the on-duty role. | Staff 🛠 | -| /deliverymessage set | Sets a delivery message. | Staff 🛠 | -| /deliverymessage fetch | Gets your delivery message. | Staff 🛠 | -| /deliverymessage placeholders | Gets your delivery message placeholders. | Staff 🛠 | -| /brew | Brew's an order. | Staff 🛠 | -| /delete | Delete's a order. | Staff 🛠 | -  -  -

â„šī¸ Installation

- -Make sure you got Node.js -And the following packages. - - - @discordjs/builders - - @discordjs/rest - - @prisma/client - - cross-env - - discord-api-types - - discord.js - - fast-glob - - got - - hjson - - nekos.life - - pincolors - - pino - - pretty-ms - - source-map-support - - typescript - - typescript-memoize - - yarn - - zod - - ts-toolbelt - - prisma - - eslint - - Once you got all these then you can finally start with setting up your database. - It has to be with postgres unless you want to switch it to another type. - But keep in mind then we can't provide you with support. - -You will have to make the postgres database yourself and connect the bot to it. -The tables will be made by the bot. - - -If you do not know how to create a bot. -Then follow these steps. - - 1. Go to https://discord.com/developers/applications - 2. Click on New Application - 3. And create a name for the Application - 4. Then click on "Bot" - 5. And click on "Add Bot" - 6. Then click on "Reset Token" - 7. Copy the token and place it into the config.hjson in the config folder. - - -Then you want to open a terminal and run tsc. -And then proceed to open the dist folder and start the bot by running - - node index.js - - then if that brings you some errors then - you can always contact us for support. - But if you got the database up and running. - Then this should work if you follow these steps. - But make sure you change the configs for roles, and channels. - So you can use it in your server! - and experience all the fun with your friends. -But some of the channel configs are in the employee commands. - -You may have a get an error like this one - - Issue(s) found when scanning config config.hjson. - 9 issue(s) found. - Error at mainServer: String must contain at most 18 character(s) - Error at roles.employee: String must contain at most 18 character(s) - Error at roles.duty: String must contain at most 18 character(s) - Error at roles.moderator: String must contain at most 18 character(s) - Error at roles.dutyd: String must contain at most 18 character(s) - Error at channels.brewery: String must contain at most 18 character(s) - Error at channels.delivery: String must contain at most 18 character(s) - Error at channels.feedback: String must contain at most 18 character(s) - Error at channels.tips: String must contain at most 18 character(s) - C:\Users\desktop\db\dist\providers\config.js:202 - throw new error_1.IllegalStateError(`${file} is invalid.`); - ^ - -To solve it go to -src/providers/config.ts -and go to - - export const snowflake = z.string().length(18).regex(/^\d+$/); - and change it from 18 to 19 - then run tsc and it should be fixed. - -## -

Contributors ✨

- - -## - -

🔗 Links

- -- [GitHub](https://github.com/shadow6060/DBRewrite) -
- -- [Website](https://drunk-bartender.org) -
- -- [Patreon](https://www.patreon.com/drunkbartender) -
- -- [Discord](https://discord.gg/pY6hNVs) -
- -- [Appeals](https://www.drunk-bartender.org/Appeals) -
+# Cafe +An Brand new cafe! diff --git a/config/config.hjson.example b/config/config.hjson.example index deff0fc..a99bb6a 100644 --- a/config/config.hjson.example +++ b/config/config.hjson.example @@ -13,6 +13,7 @@ moderator: "" duty: "" dutyd: "" + admin: "" } channels: { brewery: "" diff --git a/config/constants.hjson b/config/constants.hjson index 8d542e9..3aeb5d0 100644 --- a/config/constants.hjson +++ b/config/constants.hjson @@ -1,5 +1,9 @@ { interactionExpiryTimeMs: 30000 // 30 seconds + bakeTimeRangeMs: [ + 20000 // 20 seconds + 90000 // 1.5 minutes + ] brewTimeRangeMs: [ 20000 // 20 seconds 90000 // 1.5 minutes diff --git a/config/permissions.hjson b/config/permissions.hjson index 3ff8a81..e89864a 100644 --- a/config/permissions.hjson +++ b/config/permissions.hjson @@ -28,4 +28,9 @@ moderator: true } } -} \ No newline at end of file + admin: { + roles: { + admin: true + } + } +} \ No newline at end of file diff --git a/config/text.hjson b/config/text.hjson index 0c7a34e..14e36fb 100644 --- a/config/text.hjson +++ b/config/text.hjson @@ -15,7 +15,7 @@ noActiveOrder: "[no] You do not have an active order. Order one with `/order`!" noClaimedOrder: "[no] You do not have an order claimed currently." noOrders: "[no] You have not any orders yet." - identified: **{name}** (`{id}`) + identified: **{name}** (`{id}`) orderEmbed: { title: Order Information for `{}` description: Information about the order `{}`. @@ -37,10 +37,11 @@ } commands: { order: { - success: "[yes] Your order for **{details}** has been placed! The order ID is `{id}`." - exists: "[no] You already have an active order." - created: "{duty} An order with the id `{id}` for **{details}** has been placed by {tag}." - } + success: "[yes] Your order for **{details}** has been placed! The order ID is `{id}`.", + exists: "[no] You already have an active order.", + created: "{duty} An order with the id `{id}` for **{details}** has been placed by {tag}.", + success1: "[yes] Your order for **{details}** has been placed! The price is `{price}`. The order ID is `{id}`.", + success_tab: "Your tab order has been placed. Order ID: {id}, Details: {details}."} list: { title: **__Current Orders__** empty: *There are currently no active orders.* @@ -55,12 +56,12 @@ } claim: { existing: "[no] You already have an order claimed." - success: "[yes] You have successfully claimed the order." + success: "[yes] You have successfully claimed the order `{id}`." } unclaim: { - success: "[yes] You have successfully unclaimed the order." - - } + success: "[yes] You have successfully unclaimed the order `{id}` . ", + notClaimed: "[no] You haven't claimed any order.", // Add this line for the error message + }, cancel: { success: "[yes] Your order has been successfully cancelled." canned: "An order with the id `{id}` was cancelled!\n Order desc `{details}`\nPlaced by {tag}." @@ -69,7 +70,7 @@ brew: { invalidUrl: "[no] Please specify a valid URL." success: "[yes] The order is now brewing." - ready: <@&ROLEID>The order{} {} {} finished brewing and {} now available for delivery. + ready: <@&1053887156701118485>he order{} {} {} finished brewing and {} now available for delivery. } deliver: { noMessage: âš ī¸ You do not have a delivery message set, and the default message was used. Make to set one with `/deliverymessage`! @@ -116,7 +117,8 @@ } } balance: { - success: You currently have `${}`. + success: You currently have `${}` Balance!. + success1: You currently have `${}` Donuts!. } work: { responses: [ @@ -180,6 +182,12 @@ footer: By {} } } + rate: { + success: "[yes] You have successfully rated the bake/prep/delivery process of your last order.", + alreadyRated: "[no] You have already rated the bake/prep/delivery process of your previous order. Try ordering another.", + invalidRating: "[no] Invalid rating. Please provide a rating between 1 and 5 for each process." + } + tip: { success: "[yes] You have successfully tipped `${}` on your order of `{}`." alreadyTipped: "[no] You have already tipped your previous order. Try ordering another." @@ -196,7 +204,11 @@ delete: { success: "[yes] The order was successfully deleted with the provided reason." dm: "[no] Your order of `{}` was deleted for `{}`. If you feel that this was a mistake, please contact us." + userDmDisabled: "[no] Unable to send a direct message to the user. Their DMs are disabled.", + dmFailed: "[no] Failed to send a direct message to the user. Please try again later.", + "userNotFound": "[no] User not found. Please try again.", } + blacklist: { success: "[yes] The ID has been successfully blacklisted." existing: "[no] The ID is already blacklisted." @@ -222,4 +234,11 @@ cooldown: ⏰ Please wait `{}` before using this command again. blacklisted: "[no] Either you or the server has been blacklisted from using this bot." } + //tab: //{ + //createConfirmation: "Tab creation confirmation message", + //createMaxLimit: "Tab creation maximum limit reached message", + //createCancelled: "Tab creation cancelled message", + //payConfirmation: "Tab payment confirmation message", + //payMaxLimit: "Tab payment maximum limit reached message", + //} } \ No newline at end of file diff --git a/package.json b/package.json index 680b62f..16e7319 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dbrewrite", - "version": "1.2.0", + "version": "1.2.5", "description": "", "main": "index.js", "scripts": { @@ -24,30 +24,37 @@ "homepage": "https://github.com/MelnCat/DBRewrite#readme", "devDependencies": { "@types/node": "^17.0.42", + "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^5.16.0", "@typescript-eslint/parser": "^5.16.0", + "discord-api-types": "^0.37.35", "eslint": "^8.12.0", "eslint-plugin-regexp": "^1.6.0", "prisma": "latest", + "ts-node": "^10.9.1", "ts-toolbelt": "^9.6.0", - "typescript": "^4.7.0-beta" + "tsconfig-paths": "^4.1.2", + "typescript": "^4.9.5" }, "dependencies": { - "@discordjs/builders": "^0.12.0", + "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/rest": "^0.3.0", + "@paralleldrive/cuid2": "^2.2.1", "@prisma/client": "latest", + "@sapphire/shapeshift": "^3.8.1", "cross-env": "^7.0.3", - "discord-api-types": "^0.30.0", - "discord.js": "^13.6.0", + "discord.js": "^14.8.0", "fast-glob": "^3.2.11", "got": "^11.8.3", "hjson": "^3.2.2", "nekos.life": "^3.0.0", + "nodemon": "^2.0.20", "picocolors": "^1.0.0", "pino": "^7.9.2", "pretty-ms": "^7.0.1", "source-map-support": "^0.5.21", "typescript-memoize": "^1.1.0", + "uuid": "^9.0.0", "yarn": "^1.22.18", "zod": "^3.14.3" } diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 49a66fe..45ee1ae 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,68 +1,160 @@ -generator client { - provider = "prisma-client-js" - binaryTargets = ["native"] -} - -datasource db { - provider = "postgresql" - url = env("DATABASE_URL") -} - -model Order { - id String @id @db.VarChar(10) - createdAt DateTime @default(now()) - user String @db.VarChar(20) - details String - status OrderStatus @default(Unprepared) - channel String @db.VarChar(20) - guild String @db.VarChar(20) - - claimer String? @db.VarChar(20) - deliverer String? @db.VarChar(20) - image String? - timeout DateTime? - - deleteReason String? - - // 0bAB - // A - Feedback Given - // B - Tipped - flags Int @default(0) -} - -enum OrderStatus { - Unprepared - Preparing - Brewing - Fermenting // Unused - PendingDelivery - Delivering - Delivered - Cancelled - Deleted - Failed -} - -model WorkerInfo { - id String @id @db.VarChar(20) - createdAt DateTime @default(now()) - - preparations Int @default(0) - deliveries Int @default(0) - - deliveryMessage String? -} - -model UserInfo { - id String @id @db.VarChar(20) - createdAt DateTime @default(now()) - - balance Int @default(0) -} - -model Blacklist { - id String @id @db.VarChar(20) - createdAt DateTime @default(now()) - reason String - blacklister String @db.VarChar(20) -} +generator client { + provider = "prisma-client-js" + binaryTargets = ["native", "windows"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model WorkerInfo { + id String @id @db.VarChar(20) + createdAt DateTime @default(now()) + preparations Int @default(0) + deliveries Int @default(0) + deliveryMessage String? +} + +model UserInfo { + id String @id @db.VarChar(30) + createdAt DateTime @default(now()) + balance Int @default(0) + newBalance Int? + tabLimit Float @default(0) + guildsxp Json @default("{}") + tab Tab? + donuts Int @default(0) +} + + +model Tree { + id String @id + age Int + water DateTime + maxAge Int + + @@map(name: "trees") +} + +model ServerInfo { + id String @id @db.VarChar(30) + createdAt DateTime @default(now()) + data Json +} + +model ServerConfig { + id String @id @db.VarChar(30) + xpEnabledChannels Json @default("[]") + levelNotificationChannelId String? +} + +model Tab { + id Int @id @default(autoincrement()) + userId String @unique @db.VarChar(20) + createdAt DateTime @default(now()) + paidAt DateTime? + amount Float + tabLimit Float @default(0) + amountNeeded Float @default(0) + amountRemaining Float @default(0) + user UserInfo @relation(fields: [userId], references: [id]) +} + +model Blacklist { + id String @id @db.VarChar(20) + createdAt DateTime @default(now()) + reason String + blacklister String @db.VarChar(20) +} + +model CafeOrders { + id String @id @db.VarChar(10) + createdAt DateTime @default(now()) + user String @db.VarChar(20) + details String + status CafeStatus @default(Unprepared) + channel String @db.VarChar(20) + guild String @db.VarChar(20) + claimer String? @db.VarChar(20) + deliverer String? @db.VarChar(20) + image String? + timeout DateTime? + deleteReason String? + bakeRating Int? + prepRating Int? + deliveryRating Int? + flags Int @default(0) + putOnTab Boolean? + amount Float? +} + model Orders { + id String @id @db.VarChar(10) + createdAt DateTime @default(now()) + user String @db.VarChar(20) + details String + status OrderStatus @default(Unprepared) + channel String @db.VarChar(20) + guild String @db.VarChar(20) + claimer String? @db.VarChar(20) + deliverer String? @db.VarChar(20) + image String? + timeout DateTime? + deleteReason String? + bakeRating Int? + prepRating Int? + deliveryRating Int? + flags Int @default(0) + putOnTab Boolean? + amount Float? +} +model dishes { + id String @id @db.VarChar(1234) + status Int + createdAt DateTime @db.Timestamp(6) + updatedAt DateTime @db.Timestamp(6) +} + +model Drink { + id Int @id @default(autoincrement()) + name String @unique + type String + price Float + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model CustomDrink { + id Int @id @default(autoincrement()) + name String @unique + type String + price Float + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +enum CafeStatus { //Cafe Status used to be OrderStatus. + Unprepared + Preparing + Brewing + Fermenting + PendingDelivery + Delivering + Delivered + Cancelled + Deleted + Failed +} + +enum OrderStatus { + Unprepared + Preparing + Brewing + Fermenting + PendingDelivery + Delivering + Delivered + Cancelled + Deleted + Failed +} \ No newline at end of file diff --git a/src/commands/Devs/botinfo.ts b/src/commands/Devs/botinfo.ts new file mode 100644 index 0000000..e33f6f3 --- /dev/null +++ b/src/commands/Devs/botinfo.ts @@ -0,0 +1,37 @@ +import { CommandInteraction, EmbedBuilder } from "discord.js"; +import os from "os"; +import { client } from "../../providers/client"; +import { permissions } from "../../providers/permissions"; +import { Command } from "../../structures/Command"; + +export const command = new Command("botinfo", "Displays information about the bot.") + .addPermission(permissions.developer) + .setExecutor(async (interaction: CommandInteraction) => { + // Get the number of guilds (servers) the bot is in + const guildsSize = client.guilds.cache.size.toString(); + + // Get the bot's uptime + const uptime = process.uptime(); + const uptimeString = `${Math.floor(uptime / 3600)}h ${Math.floor((uptime % 3600) / 60)}m ${Math.floor(uptime % 60)}s`; + + // Get the bot's memory usage + const memoryUsage = (process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2); + + // Get the bot's CPU usage + const cpuUsage = os.loadavg()[0].toFixed(2); + + // Create an embed to display the bot information + const botInfoEmbed = new EmbedBuilder() + .setColor("#00ff00") + .setTitle("Bot Information") + .addFields( + { name: "Name", value: client.user?.tag || "Unknown", inline: true }, + { name: "Version", value: "1.0.0", inline: true }, + { name: "Guilds", value: guildsSize, inline: true }, + { name: "Uptime", value: uptimeString, inline: true }, + { name: "Memory Usage", value: `${memoryUsage} MB`, inline: true }, + ); + + // Send the embed to the user who used the command + await interaction.reply({ embeds: [botInfoEmbed] }); + }); diff --git a/src/commands/Devs/policy.ts b/src/commands/Devs/policy.ts index 7d48a0d..b74f8bb 100644 --- a/src/commands/Devs/policy.ts +++ b/src/commands/Devs/policy.ts @@ -1,11 +1,4 @@ -import { development } from "./../../providers/env"; -import { execSync } from "child_process"; -import { format } from "../../utils/string"; -import { transpile } from "typescript"; -import { permissions } from "../../providers/permissions"; import { Command } from "../../structures/Command"; -import { client } from "../../providers/client"; -import { channel } from "diagnostics_channel"; export const command = new Command("policy", "Gives you a link to our policy.") .setExecutor(async int => { int.channel.send("https://drunk-bartender.org/Policy"); diff --git a/src/commands/Devs/terms.ts b/src/commands/Devs/terms.ts index 6a17749..9e2920c 100644 --- a/src/commands/Devs/terms.ts +++ b/src/commands/Devs/terms.ts @@ -1,11 +1,4 @@ -import { development } from "./../../providers/env"; -import { execSync } from "child_process"; -import { format } from "../../utils/string"; -import { transpile } from "typescript"; -import { permissions } from "../../providers/permissions"; import { Command } from "../../structures/Command"; -import { client } from "../../providers/client"; -import { channel } from "diagnostics_channel"; export const command = new Command("tos", "Gives you a link to our tos.") .setExecutor(async int => { int.channel.send("https://drunk-bartender.org/Terms_of_Service"); diff --git a/src/commands/Devs/userinfo.ts b/src/commands/Devs/userinfo.ts new file mode 100644 index 0000000..d2fc024 --- /dev/null +++ b/src/commands/Devs/userinfo.ts @@ -0,0 +1,62 @@ +import { db } from "../../database/database"; +import { Command } from "../../structures/Command"; + +export const command = new Command("userinfo", "Show user information including ratings.") + .setExecutor(async int => { + const userId = int.user.id; + const userOrders = await db.cafeOrders.findMany({ + where: { + user: userId, + bakeRating: { not: null }, + prepRating: { not: null }, + deliveryRating: { not: null } + }, + select: { + bakeRating: true, + prepRating: true, + deliveryRating: true + } + }); + + if (userOrders.length === 0) { + await int.reply("You have no ratings yet."); + return; + } + + let totalRatings = 0; + let totalBakeRating = 0; + let totalPrepRating = 0; + let totalDeliveryRating = 0; + + for (const order of userOrders) { + if (order.bakeRating && order.prepRating && order.deliveryRating) { + totalRatings++; + totalBakeRating += order.bakeRating; + totalPrepRating += order.prepRating; + totalDeliveryRating += order.deliveryRating; + } + } + + if (totalRatings === 0) { + await int.reply("You have no ratings yet."); + return; + } + + const averageBakeRating = totalBakeRating / totalRatings; + const averagePrepRating = totalPrepRating / totalRatings; + const averageDeliveryRating = totalDeliveryRating / totalRatings; + + const bakeRatingStars = "⭐".repeat(Math.round(averageBakeRating)); + const prepRatingStars = "⭐".repeat(Math.round(averagePrepRating)); + const deliveryRatingStars = "⭐".repeat(Math.round(averageDeliveryRating)); + + let response = `Your average bake rating: ${averageBakeRating.toFixed(1)} (${bakeRatingStars})\n`; + response += `Your average prep rating: ${averagePrepRating.toFixed(1)} (${prepRatingStars})\n`; + response += `Your average delivery rating: ${averageDeliveryRating.toFixed(1)} (${deliveryRatingStars})\n`; + + if (totalRatings > 0) { + response += `Total ratings: ${totalRatings}`; + } + + await int.reply(response); + }); diff --git a/src/commands/economy/balance.ts b/src/commands/economy/balance.ts index 3c9514f..22abc7b 100644 --- a/src/commands/economy/balance.ts +++ b/src/commands/economy/balance.ts @@ -1,16 +1,14 @@ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../database/database"; -import { generateOrderId, getClaimedOrder, getUserActiveOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus, orderEmbedAsync } from "../../database/order"; import { getUserInfo } from "../../database/userInfo"; -import { client } from "../../providers/client"; -import { config, text } from "../../providers/config"; -import { mainGuild } from "../../providers/discord"; -import { permissions } from "../../providers/permissions"; +import { text } from "../../providers/config"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; export const command = new Command("balance", "Checks your balance.") .setExecutor(async int => { const info = await getUserInfo(int.user); - await int.reply(format(text.commands.balance.success, info?.balance ?? 0)); + const balance = info?.balance ?? 0; + //const donuts = info?.donuts ?? 0; + const replyMessage = format(text.commands.balance.success, balance) //+ "\n" + + //format(text.commands.balance.success1, donuts); + await int.reply(replyMessage); }); diff --git a/src/commands/economy/crime.ts b/src/commands/economy/crime.ts index b46d54b..ccf3df2 100644 --- a/src/commands/economy/crime.ts +++ b/src/commands/economy/crime.ts @@ -1,19 +1,6 @@ -import { OrderStatus } from "@prisma/client"; import { db } from "../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getUserActiveOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../database/order"; -import { getUserInfo, upsertUserInfo } from "../../database/userInfo"; -import { client } from "../../providers/client"; -import { config, constants, text } from "../../providers/config"; -import { mainGuild } from "../../providers/discord"; -import { permissions } from "../../providers/permissions"; +import { upsertUserInfo } from "../../database/userInfo"; +import { constants, text } from "../../providers/config"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import pms from "pretty-ms"; @@ -31,22 +18,22 @@ export const command = new Command("crime", "Try your chances on doing crime!") ); return; } - const result = [ - "Succesful", - "Failure" - ] - let awnser = result[Math.floor(Math.random() * result.length)]; - if (awnser === "Failure") { - const info = await upsertUserInfo(int.user); - const obtained = randRange(...constants.crime.amountRange); - cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: -obtained } } }); - await int.reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); - } else { - const info = await upsertUserInfo(int.user); - const obtained = randRange(...constants.crime.amountRange); - cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); - await int.reply(format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``)); - } + const result = [ + "Succesful", + "Failure" + ] + let awnser = result[Math.floor(Math.random() * result.length)]; + if (awnser === "Failure") { + const info = await upsertUserInfo(int.user); + const obtained = randRange(...constants.crime.amountRange); + cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; + await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: -obtained } } }); + await int.reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); + } else { + const info = await upsertUserInfo(int.user); + const obtained = randRange(...constants.crime.amountRange); + cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; + await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); + await int.reply(format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``)); + } }); diff --git a/src/commands/economy/daily.ts b/src/commands/economy/daily.ts index 550fc6f..1b2fd2f 100644 --- a/src/commands/economy/daily.ts +++ b/src/commands/economy/daily.ts @@ -1,19 +1,6 @@ -import { OrderStatus } from "@prisma/client"; import { db } from "../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getUserActiveOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../database/order"; -import { getUserInfo, upsertUserInfo } from "../../database/userInfo"; -import { client } from "../../providers/client"; -import { config, constants, text } from "../../providers/config"; -import { mainGuild } from "../../providers/discord"; -import { permissions } from "../../providers/permissions"; +import { upsertUserInfo } from "../../database/userInfo"; +import { constants, text } from "../../providers/config"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import pms from "pretty-ms"; diff --git a/src/commands/economy/drinkroullete.ts b/src/commands/economy/drinkroullete.ts index 10eccfc..ce284de 100644 --- a/src/commands/economy/drinkroullete.ts +++ b/src/commands/economy/drinkroullete.ts @@ -1,32 +1,19 @@ -import { OrderStatus } from "@prisma/client"; import { db } from "../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getUserActiveOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../database/order"; -import { getUserInfo, upsertUserInfo } from "../../database/userInfo"; -import { client } from "../../providers/client"; -import { config, constants, text } from "../../providers/config"; -import { mainGuild, mainChannels, mainRoles } from "../../providers/discord"; -import { permissions, mainChannels, mainRoles } from "../../providers/permissions"; +import { generateOrderId, hasActiveOrder, } from "../../database/orders"; +import { text } from "../../providers/config"; +import { mainChannels, mainRoles } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; -import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; +import { sampleArray } from "../../utils/utils"; export const command = new Command("drinkroullete", "Get a random drink ordered!") .setExecutor(async int => { - if (await hasActiveOrder(int.user)) { + if (await hasActiveOrder(int.user)) { await int.reply(text.commands.order.exists); - return; + return; } const drink = format(sampleArray(text.commands.drinkingr.drinks)); - const order = await db.order.create({ + const order = await db.orders.create({ data: { id: await generateOrderId(), user: int.user.id, diff --git a/src/commands/economy/give.ts b/src/commands/economy/give.ts index 748b0e5..5dc7957 100644 --- a/src/commands/economy/give.ts +++ b/src/commands/economy/give.ts @@ -1,34 +1,30 @@ -import { MessageEmbed } from "discord.js"; import { db } from "../../database/database"; -import { generateOrderId, getLatestOrder, hasActiveOrder, OrderFlags } from "../../database/order"; import { getUserInfo } from "../../database/userInfo"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; export const command = new Command("give", "Give someone some money.") .addOption("integer", o => o.setName("money").setDescription("The amount to give.").setRequired(true)) - .addOption("string", o => o.setName("receiver ").setDescription("Please use their id").setRequired(true)) + .addOption("string", o => o.setName("receiver").setDescription("Please use their id").setRequired(true)) .setExecutor(async int => { const user = int.user; const tip = int.options.getInteger("money", true); - const receiver = int.options.getString("receiver", true); + const receiver = int.options.getString("receiver", true); const info = await getUserInfo(int.user); if (!info || info.balance < tip) { await int.reply(text.common.notEnoughBalance); return; } - if (tip > 5000) return int.reply("Funny this safety thing stopping your transaction of 5000+"); - await db.userInfo.update({ + if (tip > 5000) return int.reply("Funny this safety thing stopping your transaction of 5000+"); + await db.userInfo.update({ where: { id: int.user.id }, data: { balance: { decrement: tip } } }); - await db.userInfo.update({ + await db.userInfo.update({ where: { id: receiver }, data: { balance: { increment: tip } } - }); + }); - int.reply(`You sucessfully transfered ${tip} to <@${receiver}>`) + int.reply(`You sucessfully transfered ${tip} to <@${receiver}>`); }); diff --git a/src/commands/economy/work.ts b/src/commands/economy/work.ts index f973250..5796149 100644 --- a/src/commands/economy/work.ts +++ b/src/commands/economy/work.ts @@ -1,19 +1,6 @@ -import { OrderStatus } from "@prisma/client"; import { db } from "../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getUserActiveOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../database/order"; -import { getUserInfo, upsertUserInfo } from "../../database/userInfo"; -import { client } from "../../providers/client"; -import { config, constants, text } from "../../providers/config"; -import { mainGuild } from "../../providers/discord"; -import { permissions } from "../../providers/permissions"; +import { upsertUserInfo } from "../../database/userInfo"; +import { constants, text } from "../../providers/config"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import pms from "pretty-ms"; diff --git a/src/commands/fun/doggo.ts b/src/commands/fun/doggo.ts index bcf68fe..10a3d2e 100644 --- a/src/commands/fun/doggo.ts +++ b/src/commands/fun/doggo.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -13,7 +12,7 @@ export const command = new Command("doggo", "Get cute doggos.") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("Bam someone got doggoed") .setImage(yeeeee.url) .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), diff --git a/src/commands/fun/goose.ts b/src/commands/fun/goose.ts index 0329219..190c04a 100644 --- a/src/commands/fun/goose.ts +++ b/src/commands/fun/goose.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -14,7 +13,7 @@ export const command = new Command("goose", "See cute gooseeeeeeeeee") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("Hoooonk") .setImage(yeeeee.url) .setDescription(`${goose} got honked at by ${int.user.tag}`) diff --git a/src/commands/fun/hug.ts b/src/commands/fun/hug.ts index 68cea01..d20a3cc 100644 --- a/src/commands/fun/hug.ts +++ b/src/commands/fun/hug.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -14,7 +13,7 @@ export const command = new Command("hug", "Give your friends a good hug.") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("Bam someone got hugged") .setImage(yeeeee.url) .setDescription(`${slapped} got hugged by ${int.user.tag}`) diff --git a/src/commands/fun/meme.ts b/src/commands/fun/meme.ts index 51410e5..34b3401 100644 --- a/src/commands/fun/meme.ts +++ b/src/commands/fun/meme.ts @@ -1,9 +1,6 @@ import got from "got"; -import { MessageEmbed } from "discord.js"; -import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; +import { EmbedBuilder } from "discord.js"; import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; export const command = new Command("memes", "memes!") .setExecutor(async int => { got('https://www.reddit.com/r/memes/random/.json') @@ -19,7 +16,7 @@ export const command = new Command("memes", "memes!") const memeNumComments = post.data.num_comments; int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setImage(memeImage) .setDescription(`${int.user.tag} Has summoned a meme!`) .setFooter({ text: memeUrl, memeUpvotes, }), diff --git a/src/commands/fun/meow.ts b/src/commands/fun/meow.ts index bbbf7cb..c4f3410 100644 --- a/src/commands/fun/meow.ts +++ b/src/commands/fun/meow.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -12,7 +11,7 @@ export const command = new Command("meow", "Cute kittens.") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("You Summoned a kitten!") .setImage(yeeeee.url) .setDescription(`${int.user.tag} Has summoned an kitten!`) diff --git a/src/commands/fun/pat.ts b/src/commands/fun/pat.ts index 6be7a70..8cef3c5 100644 --- a/src/commands/fun/pat.ts +++ b/src/commands/fun/pat.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -14,7 +13,7 @@ export const command = new Command("pat", "Give your friends a good Pat.") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("Bam someone got patted") .setImage(yeeeee.url) .setDescription(`${slapped} got patted by ${int.user.tag}`) diff --git a/src/commands/fun/slap.ts b/src/commands/fun/slap.ts index bfeefb8..30fb727 100644 --- a/src/commands/fun/slap.ts +++ b/src/commands/fun/slap.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -14,7 +13,7 @@ export const command = new Command("slap", "Give your friends a good slap.") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("Bam someone got slapped") .setImage(yeeeee.url) .setDescription(`${slapped} got slapped by ${int.user.tag}`) @@ -22,4 +21,4 @@ export const command = new Command("slap", "Give your friends a good slap.") ], }); - }); \ No newline at end of file + }); diff --git a/src/commands/fun/tickle.ts b/src/commands/fun/tickle.ts index 8bea5fc..89c864b 100644 --- a/src/commands/fun/tickle.ts +++ b/src/commands/fun/tickle.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -14,7 +13,7 @@ export const command = new Command("tickle", "Give your friends a good tickle.") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("Bam someone got tickled") .setImage(yeeeee.url) .setDescription(`${tickled} got tickled by ${int.user.tag}`) diff --git a/src/commands/moderation/blacklist.ts b/src/commands/moderation/blacklist.ts index 94bd1e3..4080c25 100644 --- a/src/commands/moderation/blacklist.ts +++ b/src/commands/moderation/blacklist.ts @@ -1,23 +1,7 @@ -import { OrderStatus } from "@prisma/client"; import { db } from "../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getUserActiveOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../database/order"; -import { getUserInfo, upsertUserInfo } from "../../database/userInfo"; -import { client } from "../../providers/client"; -import { config, constants, text } from "../../providers/config"; -import { mainGuild } from "../../providers/discord"; +import { text } from "../../providers/config"; import { permissions } from "../../providers/permissions"; import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; -import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; import { blacklist, createBlacklist } from "../../database/blacklist"; export const command = new Command("blacklist", "Blacklists a user, server, or channel.") diff --git a/src/commands/orders/cancel.ts b/src/commands/orders/cancel.ts index e0593e1..7d80b16 100644 --- a/src/commands/orders/cancel.ts +++ b/src/commands/orders/cancel.ts @@ -1,10 +1,9 @@ -import { OrderStatus } from "@prisma/client"; +import { CafeStatus, OrderStatus } from "@prisma/client"; import { db } from "../../database/database"; import { mainChannels } from "../../providers/discord"; -import { generateOrderId, getUserActiveOrder, hasActiveOrder } from "../../database/order"; +import { getUserActiveOrder } from "../../database/orders"; import { text } from "../../providers/config"; import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; export const command = new Command("cancel", "Cancels your active order.") .setExecutor(async int => { @@ -13,7 +12,7 @@ export const command = new Command("cancel", "Cancels your active order.") await int.reply(text.common.noActiveOrder); return; } - await db.order.update({ + await db.orders.update({ where: { id: order.id }, diff --git a/src/commands/orders/feedback.ts b/src/commands/orders/feedback.ts index d1e1a17..37e551b 100644 --- a/src/commands/orders/feedback.ts +++ b/src/commands/orders/feedback.ts @@ -1,6 +1,6 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { db } from "../../database/database"; -import { generateOrderId, getLatestOrder, hasActiveOrder, OrderFlags } from "../../database/order"; +import { getLatestOrder, OrderFlags } from "../../database/orders"; import { text } from "../../providers/config"; import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; @@ -24,13 +24,13 @@ export const command = new Command("feedback", "Give feedback on your last order const tcfe = text.commands.feedback.embed; await mainChannels.feedback.send({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle(format(tcfe.title, lastOrder.id)) .setDescription(feedback) .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), ], }); - await db.order.update({ + await db.orders.update({ where: { id: lastOrder.id }, data: { flags: lastOrder.flags | OrderFlags.FeedbackGiven } }); diff --git a/src/commands/orders/order.ts b/src/commands/orders/order.ts index c54eb3c..6d967c7 100644 --- a/src/commands/orders/order.ts +++ b/src/commands/orders/order.ts @@ -1,19 +1,31 @@ import { db } from "../../database/database"; -import { generateOrderId, hasActiveOrder } from "../../database/order"; +import { generateOrderId, hasActiveOrder } from "../../database/orders"; import { text } from "../../providers/config"; import { mainChannels, mainRoles } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; export const command = new Command("order", "Orders a drink.") - .addOption("string", o => o.setName("drink").setDescription("The drink to order.").setRequired(true)) - .setExecutor(async int => { + .addOption("string", (o) => + o.setName("drink").setDescription("The drink to order.").setRequired(true) + ) + .setExecutor(async (int) => { if (await hasActiveOrder(int.user)) { await int.reply(text.commands.order.exists); return; } - const drink = int.options.getString("drink", true); // Why the FUCK do options not default to required - const order = await db.order.create({ + + // Check the number of existing orders + const orderCount = await db.cafeOrders.count(); + const maxOrderLimit = 25; + + if (orderCount >= maxOrderLimit) { + await int.reply(`The maximum order limit of ${maxOrderLimit} has been reached. Try again later.`); + return; + } + + const drink = int.options.getString("drink", true); + const order = await db.orders.create({ data: { id: await generateOrderId(), user: int.user.id, @@ -22,8 +34,13 @@ export const command = new Command("order", "Orders a drink.") guild: int.guildId, }, }); + await int.reply(format(text.commands.order.success, { id: order.id, details: drink })); - if (int.member.nickname?.toLowerCase() === "bart") int.followUp("i will end you"); + + if (int.member.nickname?.toLowerCase() === "bart") { + await int.followUp("I will end you"); + } + await mainChannels.brewery.send( format(text.commands.order.created, { details: drink, diff --git a/src/commands/orders/status.ts b/src/commands/orders/status.ts index e8f67c5..c93e7ef 100644 --- a/src/commands/orders/status.ts +++ b/src/commands/orders/status.ts @@ -1,12 +1,8 @@ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../database/database"; -import { generateOrderId, getClaimedOrder, getUserActiveOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus, orderEmbedAsync } from "../../database/order"; -import { client } from "../../providers/client"; -import { config, text } from "../../providers/config"; -import { mainGuild } from "../../providers/discord"; +import { getUserActiveOrder } from "../../database/orders"; +import { text } from "../../providers/config"; import { permissions } from "../../providers/permissions"; import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import { EmbedBuilder } from "discord.js"; export const command = new Command("status", "Checks the status of your current order.") .addPermission(permissions.employee) @@ -16,7 +12,9 @@ export const command = new Command("status", "Checks the status of your current await int.reply(text.common.noActiveOrder); return; } - await int.reply({ - embeds: [await orderEmbedAsync(order)] - }); + const embed = new EmbedBuilder() + .setColor("#0099ff") + .setTitle("Order Status") + .setDescription(`The status of your order is ${order.status}.`); + await int.reply({ embeds: [embed] }); }); diff --git a/src/commands/orders/tip.ts b/src/commands/orders/tip.ts index 8d9db51..b56c061 100644 --- a/src/commands/orders/tip.ts +++ b/src/commands/orders/tip.ts @@ -1,6 +1,6 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { db } from "../../database/database"; -import { generateOrderId, getLatestOrder, hasActiveOrder, OrderFlags } from "../../database/order"; +import { getLatestOrder, OrderFlags } from "../../database/orders"; import { getUserInfo } from "../../database/userInfo"; import { text } from "../../providers/config"; import { mainChannels } from "../../providers/discord"; @@ -33,7 +33,7 @@ export const command = new Command("tip", "Tip your last order.") const tcte = text.commands.tip.embed; await mainChannels.tips.send({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle(tcte.title) .setDescription( format(tcte.description, lastOrder.id, tip, `<@${lastOrder.claimer}>`, `<@${lastOrder.deliverer}>`) @@ -41,7 +41,7 @@ export const command = new Command("tip", "Tip your last order.") .setFooter({ text: format(tcte.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), ], }); - await db.order.update({ + await db.cafeOrders.update({ where: { id: lastOrder.id }, data: { flags: lastOrder.flags | OrderFlags.Tipped }, }); diff --git a/src/commands/orders/worker/brew.ts b/src/commands/orders/worker/brew.ts index 9fe22c5..cf32560 100644 --- a/src/commands/orders/worker/brew.ts +++ b/src/commands/orders/worker/brew.ts @@ -1,6 +1,6 @@ import { OrderStatus } from "@prisma/client"; import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus } from "../../../database/order"; +import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder } from "../../../database/orders"; import { upsertWorkerInfo } from "../../../database/workerInfo"; import { client } from "../../../providers/client"; import { config, constants, text } from "../../../providers/config"; @@ -10,28 +10,62 @@ import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; import { randRange } from "../../../utils/utils"; -export const command = new Command("brew", "Brews your claimed order.") +import type { CommandInteraction } from "discord.js"; + +export const command = new Command( + "brew", + "Brews your claimed order." +) + .addSubCommand((subcommand) => + subcommand + .setName("attach") + .setDescription("Attach an image to your order.") + .addAttachmentOption((option) => + option + .setName("attachment") + .setDescription("The image to attach to the order.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("url") + .setDescription("Attach an image to your order by URL.") + .addStringOption((option) => + option + .setName("url") + .setDescription("The URL of the image to attach to the order.") + .setRequired(true) + ) + ) .addPermission(permissions.employee) - .addOption("string", o => o.setRequired(true).setName("image").setDescription("The image to attach.")) - .setExecutor(async int => { + .setExecutor(async (int: CommandInteraction) => { const order = await getClaimedOrder(int.user); if (!order) { - await int.reply(text.common.noClaimedOrder); + await int.reply({ content: text.common.noClaimedOrder }); return; } - const image = int.options.getString("image", true); - if (!/https?:\/\//.test(image)) { - await int.reply(text.commands.brew.invalidUrl); - return; + const subcommand = int.options.getSubcommand(true); + let imageUrl: string | undefined; + if (subcommand === "attach") { + const attachment = int.options.get("attachment", true)?.attachment; + if (!attachment) { + await int.reply({ content: "Attachment is missing or not valid." }); + return; + } + imageUrl = attachment.url; + } else if (subcommand === "url") { + const url = int.options.getString("url", true); + imageUrl = url; } const time = randRange(...constants.brewTimeRangeMs); - await db.order.update({ + await db.orders.update({ where: { id: order.id, }, data: { status: OrderStatus.Brewing, - image, + image: imageUrl ?? "default.png", timeout: new Date(Date.now() + time), }, }); @@ -44,5 +78,8 @@ export const command = new Command("brew", "Brews your claimed order.") preparations: { increment: 1 }, }, }); - await int.reply(text.commands.brew.success); + await int.reply({ + content: text.commands.brew.success, + files: imageUrl ? [{ attachment: imageUrl }] : undefined, + }); }); diff --git a/src/commands/orders/worker/claim.ts b/src/commands/orders/worker/claim.ts index 7b9a23c..9a01acb 100644 --- a/src/commands/orders/worker/claim.ts +++ b/src/commands/orders/worker/claim.ts @@ -1,35 +1,101 @@ -import { OrderStatus } from "@prisma/client"; +/* eslint-disable indent */ +import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; //DON'T CHANGE THE IMPORTS! +import { Command } from "../../../structures/Command"; +import { permissions } from "../../../providers/permissions"; +import { OrderStatus, getClaimedOrder, } from "../../../database/orders"; import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus } from "../../../database/order"; +import { text } from "../../../providers/config"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; export const command = new Command("claim", "Claims an order.") - .addPermission(permissions.employee) - .addOption("string", o => o.setRequired(true).setName("order").setDescription("The order to claim.")) - .setExecutor(async int => { - if (await getClaimedOrder(int.user)) { - await int.reply(text.commands.claim.existing); - return; - } - //if (await getClaimedOrder(int.user) !== int.user.id) - //return int.reply("Sorry you may not claim ur own order.") - - const match = int.options.getString("order", true); - const order = await matchOrderStatus(match, OrderStatus.Unprepared); - if (order === null) { - await int.reply(text.common.invalidOrderId); - return; - } - if (order.user === int.user.id && !permissions.developer.hasPermission(int.user)) { - await int.reply(text.common.interactOwn); - return; - } - await db.order.update({ where: { id: order.id }, data: { claimer: int.user.id, status: OrderStatus.Preparing } }); - await int.reply(text.commands.claim.success); - - }); + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + if (await getClaimedOrder(int.user)) { + await int.reply({ content: text.commands.claim.existing, ephemeral: false }); + return; + } + + const orders = await db.orders.findMany({ + where: { + status: OrderStatus.Unprepared + }, + select: { + id: true, + user: true, + details: true // Include the 'details' property + } + }); + + if (orders.length === 0) { + await int.reply({ content: "There are no available orders to claim.", ephemeral: true }); + return; + } + + const options = orders.map(order => ({ + label: order.id, + description: `Details: ${order.details}\nUser: ${order.user}`, // Include the 'details' property in the description + value: order.id, + details: order.details + })); + + const selectMenu = new StringSelectMenuBuilder() + .setCustomId("claim_order") + .setPlaceholder("Select an order to claim") + .addOptions(options); + + const actionRow = { + type: ComponentType.ActionRow, + components: [selectMenu] + }; + + const embed = new EmbedBuilder() + .setDescription("Please select an order to claim.") + .setColor("#00FF00"); + + await int.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true + }); + }); + +// Interaction Create Event (for handling select menu interaction) +client.on("interactionCreate", async (interaction) => { + if (!interaction.isStringSelectMenu()) return; + + const componentId = interaction.customId; + if (componentId === "claim_order") { + const orderId = interaction.values[0]; + + const order = await db.orders.findUnique({ + where: { + id: orderId + }, + select: { + id: true, + user: true, + details: true + } + }); + + if (!order) { + await interaction.reply({ content: "Invalid order selected.", ephemeral: true }); + return; + } + + if (order.user === interaction.user.id && !permissions.developer.hasPermission(interaction.user)) { + await interaction.reply({ content: text.common.interactOwn, ephemeral: true }); + return; + } + + await db.orders.update({ + where: { id: orderId }, + data: { claimer: interaction.user.id, status: OrderStatus.Preparing } + }); + + await interaction.reply({ + content: `${text.commands.claim.success.replace("{id}", order.id)}`, + ephemeral: false + }); + } +}); \ No newline at end of file diff --git a/src/commands/orders/worker/claimed.ts b/src/commands/orders/worker/claimed.ts index 64f0f51..950878d 100644 --- a/src/commands/orders/worker/claimed.ts +++ b/src/commands/orders/worker/claimed.ts @@ -1,22 +1,19 @@ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus, orderEmbedAsync } from "../../../database/order"; -import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; +import { getClaimedOrder, orderEmbedAsync } from "../../../database/orders"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; - +import type { CommandInteraction } from "discord.js"; export const command = new Command("claimed", "Checks your claimed order.") .addPermission(permissions.employee) - .setExecutor(async int => { + .setExecutor(async (int: CommandInteraction) => { const order = await getClaimedOrder(int.user); if (!order) { - await int.reply(text.common.noClaimedOrder); + await int.reply("You have not claimed an order."); return; } + + const embed = await orderEmbedAsync(order, int.client); + await int.reply({ - embeds: [await orderEmbedAsync(order)] + embeds: [embed] }); - }); + }); \ No newline at end of file diff --git a/src/commands/orders/worker/delete.ts b/src/commands/orders/worker/delete.ts index 2fc27a2..79eb203 100644 --- a/src/commands/orders/worker/delete.ts +++ b/src/commands/orders/worker/delete.ts @@ -1,9 +1,8 @@ -import { OrderStatus } from "@prisma/client"; +import { CafeStatus, OrderStatus } from "@prisma/client"; import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus } from "../../../database/order"; +import { matchActiveOrder } from "../../../database/orders"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; +import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; @@ -20,10 +19,26 @@ export const command = new Command("delete", "Deletes an order.") await int.reply(text.common.invalidOrderId); return; } - await (await client.users.fetch(order.user)).send(format(text.commands.delete.dm, order.details, reason)); - await db.order.update({ + + const user = await client.users.fetch(order.user); + if (!user) { + // User not found + await int.reply(text.commands.delete.userNotFound); + return; + } + + try { + await user.send(format(text.commands.delete.dm, order.details, reason)); + } catch (error) { + // Failed to send DM to the user + await int.reply(text.commands.delete.dmFailed); + return; + } + + await db.orders.update({ where: { id: order.id }, data: { claimer: int.user.id, status: OrderStatus.Deleted, deleteReason: reason }, }); + await int.reply(text.commands.delete.success); }); diff --git a/src/commands/orders/worker/deliver.ts b/src/commands/orders/worker/deliver.ts index c981051..5f6fae2 100644 --- a/src/commands/orders/worker/deliver.ts +++ b/src/commands/orders/worker/deliver.ts @@ -1,44 +1,146 @@ -import { OrderStatus } from "@prisma/client"; -import { CategoryChannel, GuildChannel } from "discord.js"; +// Main code +import { v4 as uuidv4 } from 'uuid'; +import { CafeStatus, OrderStatus } from "@prisma/client"; +import { ChannelType, GuildChannel, StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus, orderPlaceholders } from "../../../database/order"; -import { getWorkerInfo, upsertWorkerInfo } from "../../../database/workerInfo"; +import { orderPlaceholders, generateOrderId, generateDishId, } from "../../../database/orders"; +import { upsertWorkerInfo } from "../../../database/workerInfo"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; +import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; +import { PrismaClient } from '@prisma/client'; -export const command = new Command("deliver", "Delivers an order.") +const prisma = new PrismaClient(); +export const command = new Command( + "deliver", + "Delivers an order." +) .addPermission(permissions.employee) - .addOption("string", o => o.setRequired(true).setName("order").setDescription("The order to deliver.")) - .setExecutor(async int => { - const match = int.options.getString("order", true); - const order = await matchOrderStatus(match, OrderStatus.PendingDelivery); - if (order === null) { - await int.reply(text.common.invalidOrderId); + .setExecutor(async (int: CommandInteraction) => { + const selectMenu = new StringSelectMenuBuilder() + .setCustomId("deliver_order") + .setPlaceholder("Select an order to deliver"); + + const orders = await db.orders.findMany({ + where: { + status: OrderStatus.PendingDelivery, + }, + select: { + id: true, + user: true, + }, + }); + + if (orders.length === 0) { + await int.reply({ content: "No orders available for delivery.", ephemeral: false }); return; } - if (order.user === int.user.id && !permissions.developer.hasPermission(int.user)) { - await int.reply(text.common.interactOwn); + + if (orders.length > 25) { + orders.splice(25); // Limit the number of orders to 25 + } + + for (const order of orders) { + selectMenu.addOptions({ + label: order.id, + description: `User: ${order.user}`, + value: order.id, + }); + } + + const actionRow = { + type: ComponentType.ActionRow, + components: [selectMenu], + }; + + const embed = new EmbedBuilder() + .setDescription("Please select an order to deliver.") + .setColor("#00FF00"); + + await int.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true, // Set ephemeral to true by default + }); + }); + +// Interaction Create Event (for handling select menu interaction) +// Interaction Create Event (for handling select menu interaction) +client.on("interactionCreate", async (interaction) => { + if (!interaction.isStringSelectMenu()) return; + + const componentId = interaction.customId; + if (componentId === "deliver_order") { + const orderId = interaction.values[0]; + + const order = await db.orders.findUnique({ + where: { + id: orderId, + }, + }); + + if (!order) { + await interaction.reply({ content: "Invalid order selected.", ephemeral: true }); return; } - const info = await upsertWorkerInfo(int.user); + + if (order.user === interaction.user.id && !permissions.developer.hasPermission(interaction.user)) { + await interaction.reply({ content: text.common.interactOwn, ephemeral: false }); + return; + } + + const info = await upsertWorkerInfo(interaction.user); await db.workerInfo.update({ where: { - id: int.user.id, + id: interaction.user.id, }, data: { deliveries: { increment: 1 }, }, }); - await db.order.update({ where: { id: order.id }, data: { status: OrderStatus.Delivered, deliverer: int.user.id } }); + await db.orders.update({ + where: { + id: orderId, + }, + data: { + status: OrderStatus.Delivered, + deliverer: interaction.user.id, + }, + }); + + // Create a new dish in the database each time an order is delivered + const statuses = ['Filthy', 'Smells Weird', 'Literally Ancient', 'Mildly Dirty']; + let uniqueId; + do { + uniqueId = await generateOrderId(); // Generate a unique ID for the dish + const existingDish = await prisma.dishes.findUnique({ + where: { + id: uniqueId + } + }); + if (!existingDish) break; // If there's no existing dish with this ID, we can use it + } while (true); + + await prisma.dishes.create({ + data: { + id: uniqueId, + status: Math.floor(Math.random() * statuses.length), + createdAt: new Date(), + updatedAt: new Date(), + }, + }); + + + const channel = client.channels.cache.get(order.channel) ?? await client.channels.fetch(order.channel).catch(() => null) ?? client.users.cache.get(order.user); - if (!channel || (channel instanceof GuildChannel && !channel.isText())) { - await int.reply(text.commands.deliver.noChannel); + if (!channel || (channel instanceof GuildChannel && channel.type !== ChannelType.GuildText)) { + await interaction.reply({ content: text.commands.deliver.noChannel, ephemeral: true }); // Set ephemeral to true return; } - await int.reply(`${text.commands.deliver.success}${info?.deliveryMessage ? "" : `\n${text.commands.deliver.noMessage}`}`); - await channel.send(format(info?.deliveryMessage ?? text.commands.deliver.default, await orderPlaceholders(order))); - }); + + await interaction.reply({ content: `${text.commands.deliver.success}${info?.deliveryMessage ? "" : `\n${text.commands.deliver.noMessage}`}`, ephemeral: false }); + await channel.send(format(info?.deliveryMessage || text.commands.deliver.default, await orderPlaceholders(order))); + } +}); diff --git a/src/commands/orders/worker/deliverymessage.ts b/src/commands/orders/worker/deliverymessage.ts index 3bd1c44..bca33a5 100644 --- a/src/commands/orders/worker/deliverymessage.ts +++ b/src/commands/orders/worker/deliverymessage.ts @@ -1,19 +1,8 @@ -import { OrderStatus } from "@prisma/client"; -import { CategoryChannel, GuildChannel } from "discord.js"; import { db } from "../../../database/database"; -import { - generateOrderId, - getClaimedOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderPlaceholders, - requiredOrderPlaceholders, -} from "../../../database/order"; +import { requiredOrderPlaceholders } from "../../../database/orders"; import { getWorkerInfo, upsertWorkerInfo } from "../../../database/workerInfo"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; +import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; diff --git a/src/commands/orders/worker/duty.ts b/src/commands/orders/worker/duty.ts index 445a5c9..0a9cf4a 100644 --- a/src/commands/orders/worker/duty.ts +++ b/src/commands/orders/worker/duty.ts @@ -1,20 +1,7 @@ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../../database/order"; -import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; +import { text } from "../../../providers/config"; import { mainGuild, mainRoles } from "../../../providers/discord"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; export const command = new Command("duty", "Toggles your on-duty status.") .addPermission(permissions.employee) @@ -30,4 +17,4 @@ export const command = new Command("duty", "Toggles your on-duty status.") if (hass) await int.member.roles.remove(mainRoles.dutyd); else await int.member.roles.add(mainRoles.dutyd); await int.reply(has ? text.commands.duty.disabled : text.commands.duty.enabled); - }); + }); \ No newline at end of file diff --git a/src/commands/orders/worker/fetch.ts b/src/commands/orders/worker/fetch.ts index 952a6d2..bc029f0 100644 --- a/src/commands/orders/worker/fetch.ts +++ b/src/commands/orders/worker/fetch.ts @@ -1,43 +1,32 @@ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../../database/order"; +import { getOrder, matchActiveOrder, orderEmbedAsync } from "../../../database/orders"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; +import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; -export const command = new Command("fetch", "Fetches the status of an order.") +export const command = new Command( + "fetch", + "Fetches the status of an order." +) .addPermission(permissions.employee) - .addOption("string", o => - o - .setRequired(true) - .setName("order") - .setDescription("The order to fetch. Requires the entire ID when checking inactive orders.") + .addOption("string", (o) => o + .setRequired(true) + .setName("order") + .setDescription( + "The order to fetch. Requires the entire ID when checking inactive orders." + ) ) - .addOption("boolean", o => - o - .setName("inactive") - .setDescription("Include inactive orders too.") + .addOption("boolean", (o) => + o.setName("inactive").setDescription("Include inactive orders too.") ) - .setExecutor(async int => { - const match = int.options.getString("order", true); - const inactive = int.options.getBoolean("inactive") ?? false; + .setExecutor(async (int) => { + const match = int.options.get("order")?.value; + const inactive = int.options.get("inactive")?.value; const order = inactive ? await getOrder(match) : await matchActiveOrder(match); if (!order) { await int.reply(text.common.invalidOrderId); return; + } else { + await int.reply({ embeds: [await orderEmbedAsync(order, client)] }); } - await int.reply({ - embeds: [await orderEmbedAsync(order)] - }); }); diff --git a/src/commands/orders/worker/leaderboard.ts b/src/commands/orders/worker/leaderboard.ts new file mode 100644 index 0000000..58d2dea --- /dev/null +++ b/src/commands/orders/worker/leaderboard.ts @@ -0,0 +1,173 @@ +import { permissions } from "../../../providers/permissions"; +import { CommandInteraction, EmbedBuilder, Message } from "discord.js"; +import { ButtonBuilder, ButtonStyle, ActionRowBuilder } from "discord.js"; +import { Command } from "../../../structures/Command"; +import { getWorkerInfos } from "../../../database/workerInfo"; +const PAGE_SIZE = 5; // Number of workers per page + +async function refreshWorkerInfos() { + // Refresh worker infos from the database + await getWorkerInfos(true); + // Wait for 1 second before retrieving the worker infos again + await new Promise((resolve) => setTimeout(resolve, 1000)); +} + +export const command = new Command("leaderboard", "hm.") + .addPermission(permissions.developer) + .setExecutor(async (int: CommandInteraction) => { + // Refresh worker infos from the database + await refreshWorkerInfos(); + + // Get worker infos from database + const workerInfos = await getWorkerInfos(); + + // Filter out workers who have not delivered or prepared any orders + const activeWorkerInfos = workerInfos.filter( + (workerInfo) => + workerInfo.deliveries > 0 || workerInfo.preparations > 0 + ); + + // Sort worker infos by delivered and prepared orders + activeWorkerInfos.sort( + (a, b) => + b.deliveries + b.preparations - (a.deliveries + a.preparations) + ); + + // Calculate the number of pages required + const totalPages = Math.ceil(activeWorkerInfos.length / PAGE_SIZE); + + // Get the current page number from the command options (defaults to page 1) + const currentPage = int.options.getInteger("page") ?? 1; + + // Calculate the start and end index for the workers on the current page + const startIndex = (currentPage - 1) * PAGE_SIZE; + const endIndex = Math.min(startIndex + PAGE_SIZE, activeWorkerInfos.length); + + // Create the embed + const embed = new EmbedBuilder() + .setTitle("Delivery Leaderboard") + .setColor("Aqua"); + + // Add fields for each worker info on the current page + if (activeWorkerInfos.length > 0) { + for (let i = startIndex; i < endIndex; i++) { + const workerInfo = activeWorkerInfos[i]; + const isTopThree = i < 3; + const emoji = + i === 0 + ? "đŸĨ‡" + : i === 1 + ? "đŸĨˆ" + : i === 2 + ? "đŸĨ‰" + : ""; + + embed.addFields({ + name: `${isTopThree ? emoji : ""} ${i + 1}. ${workerInfo.id}`, + value: `Delivered: ${workerInfo.deliveries} | Preparations: ${workerInfo.preparations}`, + }); + } + + // Add page information to the embed + embed.setFooter({ text: `Page ${currentPage}/${totalPages}` }); + } else { + // Display a message if there are no active worker infos + embed.setDescription("No active workers found."); + } + + // Send the initial embed + const reply = await int.reply({ embeds: [embed], fetchReply: true }) as Message; + + // Function to update the embed based on the current page + const updateEmbed = async (pageNumber: number) => { + // Calculate the start and end index for the workers on the updated page + const startIndex = (pageNumber - 1) * PAGE_SIZE; + const endIndex = Math.min( + startIndex + PAGE_SIZE, + activeWorkerInfos.length + ); + + // Clear the fields in the embed + embed.setFields([]); + + // Add fields for each worker info on the updated page + for (let i = startIndex; i < endIndex; i++) { + const workerInfo = activeWorkerInfos[i]; + const isTopThree = i < 3; + const emoji = + i === 0 + ? "đŸĨ‡" + : i === 1 + ? "đŸĨˆ" + : i === 2 + ? "đŸĨ‰" + : ""; + + embed.addFields({ + name: `${isTopThree ? emoji : ""} ${i + 1}. ${workerInfo.id}`, + value: `Delivered: ${workerInfo.deliveries} | Preparations: ${workerInfo.preparations}`, + }); + } + + // Update the embed's page information + embed.setFooter({ text: `Page ${pageNumber}/${totalPages}` }); + + // Update the message with the updated embed + await reply.edit({ embeds: [embed] }); + }; + + // Add pagination buttons if there is more than one page + if (totalPages > 1) { + // Create the previous button + const previousButton = new ButtonBuilder() + .setCustomId("previous") + .setLabel("Previous") + .setStyle(ButtonStyle.Secondary); + + // Create the next button + const nextButton = new ButtonBuilder() + .setCustomId("next") + .setLabel("Next") + .setStyle(ButtonStyle.Secondary); + + // Create the action row with the pagination buttons + const actionRow = new ActionRowBuilder() + .addComponents(previousButton, nextButton); + + // Await the interaction with the pagination buttons + const collector = reply.createMessageComponentCollector({ + filter: (interaction) => + interaction.user.id === int.user.id && + (interaction.customId === "previous" || + interaction.customId === "next"), + time: 60000, + }); + + collector.on("collect", async (interaction) => { + const { customId } = interaction; + + if (customId === "previous") { + // Handle the previous button + const newPage = Math.max(currentPage - 1, 1); + await updateEmbed(newPage); + } else if (customId === "next") { + // Handle the next button + const newPage = Math.min(currentPage + 1, totalPages); + await updateEmbed(newPage); + } + + // Update the message with the updated embed and action row + await (interaction as any).update({ embeds: [embed], components: [actionRow.toJSON() as any] }); + }); + + collector.on("end", () => { + // Remove the action row from the message after the collector ends + reply.edit({ components: [] }); + }); + + // Update the message with the initial embed and action row + await reply.edit({ embeds: [embed], components: [actionRow.toJSON() as any] }); + } + }); + +export { command as leaderboard }; \ No newline at end of file diff --git a/src/commands/orders/worker/list.ts b/src/commands/orders/worker/list.ts index a3c50cb..5965f24 100644 --- a/src/commands/orders/worker/list.ts +++ b/src/commands/orders/worker/list.ts @@ -1,13 +1,12 @@ -import { db } from "../../../database/database"; -import { generateOrderId, getAllActiveOrders, hasActiveOrder } from "../../../database/order"; +/* eslint-disable indent */ +import { getAllActiveOrders } from "../../../database/orders"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; +import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; import pms from "pretty-ms"; -import { OrderStatus } from "@prisma/client"; +import { CafeStatus, OrderStatus } from "@prisma/client"; export const command = new Command("list", "Lists active orders.") .addPermission(permissions.employee) @@ -20,9 +19,8 @@ export const command = new Command("list", "Lists active orders.") ${format(txt.parts.status, text.statuses[x.status] ?? x.status)}\ - ${format(txt.parts.details, x.details)}\ - ${format(txt.parts.time, `${pms(Date.now() - x.createdAt.getTime(), { verbose: true, unitCount: 1 })} ago`)}\ - ${x.status === OrderStatus.Unprepared ? "- **UNCLAIMED**" : x.status === OrderStatus.Preparing ? `- **Claimed by ${ - (x.claimer ? client.users.cache.get(x.claimer)?.tag : undefined) ?? "Unknown User" - }**` : ""} + ${x.status === OrderStatus.Unprepared ? "- **UNCLAIMED**" : x.status === OrderStatus.Preparing ? `- **Claimed by ${(x.claimer ? client.users.cache.get(x.claimer)?.tag : undefined) ?? "Unknown User" + }**` : ""} `) .join("\n") || `${txt.empty}`}` ); diff --git a/src/commands/orders/worker/unclaim.ts b/src/commands/orders/worker/unclaim.ts index d4637d8..653b5a8 100644 --- a/src/commands/orders/worker/unclaim.ts +++ b/src/commands/orders/worker/unclaim.ts @@ -1,29 +1,101 @@ -import { OrderStatus } from "@prisma/client"; +/* eslint-disable quotes */ +import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; +import { Command } from "../../../structures/Command"; +import { permissions } from "../../../providers/permissions"; +import { OrderStatus, getClaimedOrder, } from "../../../database/orders"; import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus } from "../../../database/order"; +import { text } from "../../../providers/config"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; -export const command = new Command("unclaim", "Allows you to unclaim a order.") +export const command = new Command("unclaim", "Allows you to unclaim an order.") .addPermission(permissions.employee) - .addOption("string", o => o.setRequired(true).setName("order").setDescription("Here u can unclaim the order.")) - .setExecutor(async int => { - - const match = int.options.getString("order", true); - const order = await matchOrderStatus(match, OrderStatus.Preparing); - if (order === null) { - await int.reply(text.common.invalidOrderId); + .setExecutor(async (int: CommandInteraction) => { + const claimedOrder = await getClaimedOrder(int.user); + if (!claimedOrder) { + await int.reply({ content: text.commands.unclaim.notClaimed, ephemeral: true }); return; } - if (order.user === int.user.id && !permissions.developer.hasPermission(int.user)) { - await int.reply(text.common.interactOwn); + + const order = await db.orders.findUnique({ + where: { + id: claimedOrder.id, + }, + select: { + id: true, + user: true, + details: true, // Include the 'details' property + }, + }); + + if (!order) { + await int.reply({ content: "Invalid order selected.", ephemeral: true }); return; } - await db.order.update({ where: { id: order.id }, data: { claimer: null, status: OrderStatus.Unprepared } }); - await int.reply(text.commands.unclaim.success); - + + const selectMenu = new StringSelectMenuBuilder() + .setCustomId("unclaim_order") + .setPlaceholder("Select the order to unclaim") + .addOptions([ + { + label: order.id, + description: `Details: ${order.details}\nUser: ${order.user}}`, // Include the 'details' property + value: order.id, + }, + ]); + + const actionRow = { + type: ComponentType.ActionRow, + components: [selectMenu], + }; + + const embed = new EmbedBuilder() + .setDescription("Please select the order to unclaim.") + .setColor("#FF0000"); + + await int.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true, + }); }); + +// Interaction Create Event (for handling select menu interaction) +client.on("interactionCreate", async (interaction) => { + if (!interaction.isStringSelectMenu()) return; + + const componentId = interaction.customId; + if (componentId === "unclaim_order") { + const orderId = interaction.values[0]; + + const order = await db.orders.findUnique({ + where: { + id: orderId, + }, + select: { + id: true, + user: true, + claimer: true, + }, + }); + + if (!order) { + await interaction.reply({ content: "Invalid order selected.", ephemeral: true }); + return; + } + + if (order.claimer !== interaction.user.id) { + await interaction.reply({ content: text.commands.unclaim.notClaimed, ephemeral: true }); + return; + } + + await db.orders.update({ + where: { id: orderId }, + data: { claimer: null, status: OrderStatus.Unprepared }, + }); + + await interaction.reply({ + content: text.commands.unclaim.success.replace('{id}', order.id), + ephemeral: false, + }); + } +}); diff --git a/src/commands/public/expboard.ts b/src/commands/public/expboard.ts new file mode 100644 index 0000000..e8ef19b --- /dev/null +++ b/src/commands/public/expboard.ts @@ -0,0 +1,51 @@ +import { CommandInteraction, EmbedBuilder } from "discord.js"; +import { Command } from "../../structures/Command"; +import { PrismaClient } from "@prisma/client"; + +const prisma = new PrismaClient(); + +export const command = new Command("expboard", "Shows the leaderboard.") + .setExecutor(async (int: CommandInteraction) => { + // Check if the interaction is from a guild + if (!int.guild) { + await int.reply("This command can only be used in a server."); + return; + } + + // Get all users in the guild + const users = await prisma.userInfo.findMany(); + + // Parse the guildsxp field and add the level and exp for the current guild to the user objects + const usersWithLevels = users.map(user => { + const guildsxp = typeof user.guildsxp === 'string' ? JSON.parse(user.guildsxp) : {}; + return { + ...user, + level: guildsxp[int.guild.id]?.level ?? 0, + exp: guildsxp[int.guild.id]?.exp ?? 0 + }; + }); + + // Sort the users by level and exp + usersWithLevels.sort((a, b) => b.level - a.level || b.exp - a.exp); + + // Take the top 10 users + const leaderboard = usersWithLevels.slice(0, 10); + + // Format the leaderboard into a string + let leaderboardString = leaderboard.map((user, index) => { + return `${index + 1}. <@${user.id}> - Level ${user.level}`; + }).join('\n'); + + // Check if the leaderboard is empty + if (leaderboardString === '') { + leaderboardString = 'No users in the leaderboard yet.'; + } + + // Create a new embed + const embed = new EmbedBuilder() + .setTitle("Leaderboard") + .setDescription(leaderboardString) + .setColor("#0099ff"); + + await int.reply({ embeds: [embed] }); + }); diff --git a/src/commands/public/profile.ts b/src/commands/public/profile.ts new file mode 100644 index 0000000..7b2d3e1 --- /dev/null +++ b/src/commands/public/profile.ts @@ -0,0 +1,51 @@ +import { CommandInteraction, EmbedBuilder } from "discord.js"; +import { Command } from "../../structures/Command"; +import { PrismaClient } from "@prisma/client"; + +const prisma = new PrismaClient(); + +export const command = new Command("profile", "Shows your profile.") + .setExecutor(async (int: CommandInteraction) => { + // Check if the interaction is from a guild + if (!int.guild) { + await int.reply("This command can only be used in a server."); + return; + } + + try { + const userData = await prisma.userInfo.findUnique({ + where: { + id: int.user.id, + }, + }); + + if (!userData) { + await int.reply("You don't have a profile yet."); + return; + } + + let guildsxp: Record = {}; + if (typeof userData.guildsxp === 'string') { + guildsxp = JSON.parse(userData.guildsxp); + } + + const userGuildData = guildsxp[int.guild.id] || { xp: 0, level: 1 }; + const nextLevelExp = userGuildData.level * 100; + const level = userGuildData.level; + + // Create a new embed using EmbedBuilder + const embed = new EmbedBuilder() + .setTitle(`${int.user.username}'s Profile`) + .setThumbnail(int.user.displayAvatarURL()) + .addFields( + { name: "Experience", value: `${userGuildData.xp}/${nextLevelExp}`, inline: true }, + { name: "Level", value: `${level}`, inline: true } + ) + .setColor("#0099ff"); + + await int.reply({ embeds: [embed] }); + } catch (error) { + console.error('Error retrieving user data:', error); + return; + } + }); \ No newline at end of file diff --git a/src/database/order.ts b/src/database/order.ts index e46b76a..52f8c64 100644 --- a/src/database/order.ts +++ b/src/database/order.ts @@ -1,40 +1,41 @@ -import type { Order } from "@prisma/client"; -import { OrderStatus } from "@prisma/client"; -import type { User, UserResolvable, AnyChannel } from "discord.js"; -import { MessageEmbed, Channel, GuildChannel } from "discord.js"; +import type { Order, } from "@prisma/client"; +import { CafeStatus, CafeOrders, PrismaClient } from "@prisma/client"; +import type { Client, User, UserResolvable, Channel } from "discord.js"; +import { EmbedBuilder, GuildChannel } from "discord.js"; import { client } from "../providers/client"; import { text } from "../providers/config"; import { resolveUserId } from "../utils/id"; import { format } from "../utils/string"; import { db } from "./database"; - -export const activeOrderStatus = [ - OrderStatus.Unprepared, - OrderStatus.Preparing, - OrderStatus.Brewing, - OrderStatus.Fermenting, - OrderStatus.PendingDelivery, - OrderStatus.Delivering, +import type { EmbedField } from "discord.js"; +const prisma = new PrismaClient(); +export const activeCafeStatus = [ + CafeStatus.Unprepared, + CafeStatus.Preparing, + CafeStatus.Brewing, + CafeStatus.Fermenting, + CafeStatus.PendingDelivery, + CafeStatus.Delivering, ]; export const hasActiveOrder = async (user: UserResolvable) => - (await db.order.count({ + (await db.cafeOrders.count({ where: { user: resolveUserId(user), - status: { in: activeOrderStatus }, + status: { in: activeCafeStatus }, }, })) > 0; export const getUserActiveOrder = async (user: UserResolvable) => - await db.order.findFirst({ + await db.cafeOrders.findFirst({ where: { user: resolveUserId(user), - status: { in: activeOrderStatus }, + status: { in: activeCafeStatus }, }, }); export const orderExists = async (id: string) => - (await db.order.count({ + (await db.cafeOrders.count({ where: { id, }, @@ -50,43 +51,60 @@ export const generateOrderId = async () => { throw new Error("This error should never appear. If it does, please buy a lottery ticket."); }; -export const getAllActiveOrders = async () => db.order.findMany({ where: { status: { in: activeOrderStatus } } }); +const dishIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); + +export const generateDishId = async () => { + for (let i = 0; i < 1000; i++) { + const generated = [...Array(7)].map(() => dishIdChars[Math.floor(Math.random() * dishIdChars.length)]).join(""); + if (!(await dishExists(generated))) return generated; + } + throw new Error("Failed to generate a unique dish ID."); +}; + +const dishExists = async (id: string) => + (await prisma.dishes.count({ + where: { + id, + }, + })) > 0; + + +export const getAllActiveOrders = async () => db.cafeOrders.findMany({ where: { status: { in: activeCafeStatus } } }); -export const matchOrderStatus = async (id: string, status: OrderStatus) => - db.order.findFirst({ where: { id: { startsWith: id }, status } }); +export const matchCafeStatus = async (id: string, status: CafeStatus) => + db.cafeOrders.findFirst({ where: { id: { startsWith: id }, status } }); export const matchActiveOrder = async (id: string) => - db.order.findFirst({ where: { id: { startsWith: id.toLowerCase() }, status: { in: activeOrderStatus } } }); + db.cafeOrders.findFirst({ where: { id: { startsWith: id.toLowerCase() }, status: { in: activeCafeStatus } } }); export const getClaimedOrder = async (user: UserResolvable) => - db.order.findFirst({ where: { claimer: resolveUserId(user), status: OrderStatus.Preparing } }); + db.cafeOrders.findFirst({ where: { claimer: resolveUserId(user), status: CafeStatus.Preparing } }); export const getOrder = async (id: string) => - db.order.findFirst({ where: { id } }); + db.cafeOrders.findFirst({ where: { id } }); export const getLatestOrder = async (user: UserResolvable) => - db.order.findFirst({ where: { user: resolveUserId(user), status: OrderStatus.Delivered }, orderBy: { createdAt: "desc" } }); + db.cafeOrders.findFirst({ where: { user: resolveUserId(user), status: CafeStatus.Delivered }, orderBy: { createdAt: "desc" } }); const embedText = text.common.orderEmbed; +const embedFields = text.common.orderEmbed.fields; const rawOrderEmbed = (order: Order) => - new MessageEmbed() + new EmbedBuilder() .setTitle(format(embedText.title, order.id)) .setDescription(format(embedText.description, order.id)) - .addField(embedText.fields.id, `\`${order.id}\``, true) - .addField(embedText.fields.details, `${order.details}`, true) - .addField(embedText.fields.status, `${text.statuses[order.status] ?? order.status}`, true) - .addField( - embedText.fields.orderedAt, - ` ()` - ) + .addFields({ name: format(embedFields.id), value: `\`${order.id}\``, inline: true }) + .addFields({ name: embedFields.details, value: `${order.details}`, inline: true }) + .addFields({ name: embedFields.status, value: `${text.statuses[order.status] ?? order.status}`, inline: true }) + .addFields({ name: embedFields.orderedAt, value: ` ()`, inline: true }) .setTimestamp(); + const formatIdentified = (identified: { id: string; name: string } | string) => format(text.common.identified, typeof identified === "string" ? { id: identified, name: "Unknown" } : identified); const formatUser = (user: User | string) => formatIdentified(typeof user === "string" ? user : { name: user.username, id: user.id }); -const formatChannel = (channel: AnyChannel | string) => +const formatChannel = (channel: Channel | string) => formatIdentified( channel instanceof GuildChannel ? { name: `#${channel.name}`, id: channel.id } @@ -95,47 +113,48 @@ const formatChannel = (channel: AnyChannel | string) => : channel.id ); -export const orderEmbedSync = (order: Order) => { +export const orderEmbedSync = async (order: CafeOrders, client: Client) => { const embed = rawOrderEmbed(order) - .addField(embedText.fields.customer, formatUser(client.users.cache.get(order.user) ?? order.user), true) - .addField(embedText.fields.channel, formatChannel(client.channels.cache.get(order.channel) ?? order.channel), true) - .addField(embedText.fields.guild, formatIdentified(client.guilds.cache.get(order.guild) ?? order.guild), true); + .addFields({ name: embedFields.customer, value: formatUser((await client.users.fetch(order.user).catch(() => null)) ?? order.user), inline: true }) + .addFields({ name: embedFields.channel, value: formatChannel((await client.channels.fetch(order.channel).catch(() => null)) ?? order.channel), inline: true }) + .addFields({ name: embedFields.guild, value: formatIdentified((await client.guilds.fetch(order.guild).catch(() => null)) ?? order.guild), inline: true }); if (order.claimer) - embed.addField(embedText.fields.claimer, formatUser(client.users.cache.get(order.claimer) ?? order.claimer), true); + embed.addFields({ name: embedFields.claimer, value: formatUser((await client.users.fetch(order.claimer).catch(() => null)) ?? order.claimer), inline: true }); return embed; }; const nulli = () => null; -export const orderEmbedAsync = async (order: Order) => { +export const orderEmbedAsync = async (order: CafeOrders, client: Client): Promise => { + const user = await client.users.fetch(order.user).catch(() => null); + const channel = await client.channels.fetch(order.channel).catch(() => null); + const guild = await client.guilds.fetch(order.guild).catch(() => null); + const embed = rawOrderEmbed(order) - .addField( - embedText.fields.customer, - formatUser((await client.users.fetch(order.user).catch(nulli)) ?? order.user), - true + .addFields( + { name: "Customer", value: formatUser(user ?? order.user), inline: true } ) - .addField( - embedText.fields.channel, - formatChannel((await client.channels.fetch(order.channel).catch(nulli)) ?? order.channel), - true + .addFields( + { name: "Channel", value: formatChannel(channel ?? order.channel), inline: true } ) - .addField( - embedText.fields.guild, - formatIdentified((await client.guilds.fetch(order.guild).catch(nulli)) ?? order.guild), - true - ); - if (order.claimer) - embed.addField( - embedText.fields.claimer, - formatUser((await client.users.fetch(order.claimer).catch(nulli)) ?? order.claimer), - true + .addFields( + { name: "Guild", value: formatIdentified(guild ?? order.guild), inline: true } ); + + if (order.claimer) { + const claimer = await client.users.fetch(order.claimer).catch(() => null); + if (claimer) { + embed.addFields( + { name: "Claimer", value: formatUser(claimer), inline: true } + ); + } + } + return embed; }; - export const requiredOrderPlaceholders = ["mention", "image"]; -export const orderPlaceholders = async(order: Order) => Object.assign(Object.create(null), { +export const orderPlaceholders = async (order: CafeOrders) => Object.assign(Object.create(null), { preparer: order.claimer ? formatUser((await client.users.fetch(order.claimer).catch(nulli)) ?? order.claimer) : "Unknown", deliverer: order.deliverer ? formatUser((await client.users.fetch(order.deliverer).catch(nulli)) ?? order.deliverer) : "Unknown", id: order.id, @@ -148,4 +167,7 @@ export const orderPlaceholders = async(order: Order) => Object.assign(Object.cre export const OrderFlags = { FeedbackGiven: 0b1, Tipped: 0b10, -}; \ No newline at end of file + Rated: 0b100, +}; + +export { CafeStatus }; diff --git a/src/database/orders.ts b/src/database/orders.ts new file mode 100644 index 0000000..20bc00f --- /dev/null +++ b/src/database/orders.ts @@ -0,0 +1,172 @@ + +import { OrderStatus, Orders, PrismaClient } from "@prisma/client"; +import type { Client, User, UserResolvable, Channel } from "discord.js"; +import { EmbedBuilder, GuildChannel } from "discord.js"; +import { client } from "../providers/client"; +import { text } from "../providers/config"; +import { resolveUserId } from "../utils/id"; +import { format } from "../utils/string"; +import { db } from "./database"; +const prisma = new PrismaClient(); +export const activeOrderStatus = [ + OrderStatus.Unprepared, + OrderStatus.Preparing, + OrderStatus.Brewing, + OrderStatus.Fermenting, + OrderStatus.PendingDelivery, + OrderStatus.Delivering, +]; + +export const hasActiveOrder = async (user: UserResolvable) => + (await db.orders.count({ + where: { + user: resolveUserId(user), + status: { in: activeOrderStatus }, + }, + })) > 0; + +export const getUserActiveOrder = async (user: UserResolvable) => + await db.orders.findFirst({ + where: { + user: resolveUserId(user), + status: { in: activeOrderStatus }, + }, + }); + +export const orderExists = async (id: string) => + (await db.orders.count({ + where: { + id, + }, + })) > 0; + +const orderIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); + +export const generateOrderId = async () => { + for (let i = 0; i < 1000; i++) { + const generated = [...Array(7)].map(() => orderIdChars[Math.floor(Math.random() * orderIdChars.length)]).join(""); + if (!(await orderExists(generated))) return generated; + } + throw new Error("This error should never appear. If it does, please buy a lottery ticket."); +}; + +const dishIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); + +export const generateDishId = async () => { + for (let i = 0; i < 1000; i++) { + const generated = [...Array(7)].map(() => dishIdChars[Math.floor(Math.random() * dishIdChars.length)]).join(""); + if (!(await dishExists(generated))) return generated; + } + throw new Error("Failed to generate a unique dish ID."); +}; + +const dishExists = async (id: string) => + (await prisma.dishes.count({ + where: { + id, + }, + })) > 0; + + +export const getAllActiveOrders = async () => db.orders.findMany({ where: { status: { in: activeOrderStatus } } }); + +export const matchOrderStatus = async (id: string, status: OrderStatus) => + db.orders.findFirst({ where: { id: { startsWith: id }, status } }); + +export const matchActiveOrder = async (id: string) => + db.orders.findFirst({ where: { id: { startsWith: id.toLowerCase() }, status: { in: activeOrderStatus } } }); + +export const getClaimedOrder = async (user: UserResolvable) => + db.orders.findFirst({ where: { claimer: resolveUserId(user), status: OrderStatus.Preparing } }); + +export const getOrder = async (id: string) => + db.orders.findFirst({ where: { id } }); + +export const getLatestOrder = async (user: UserResolvable) => + db.orders.findFirst({ where: { user: resolveUserId(user), status: OrderStatus.Delivered }, orderBy: { createdAt: "desc" } }); + +const embedText = text.common.orderEmbed; +const embedFields = text.common.orderEmbed.fields; + +const rawOrderEmbed = (order: Orders) => + new EmbedBuilder() + .setTitle(format(embedText.title, order.id)) + .setDescription(format(embedText.description, order.id)) + .addFields({ name: format(embedFields.id), value: `\`${order.id}\``, inline: true }) + .addFields({ name: embedFields.details, value: `${order.details}`, inline: true }) + .addFields({ name: embedFields.status, value: `${text.statuses[order.status] ?? order.status}`, inline: true }) + .addFields({ name: embedFields.orderedAt, value: ` ()`, inline: true }) + .setTimestamp(); + + +const formatIdentified = (identified: { id: string; name: string } | string) => + format(text.common.identified, typeof identified === "string" ? { id: identified, name: "Unknown" } : identified); +const formatUser = (user: User | string) => + formatIdentified(typeof user === "string" ? user : { name: user.username, id: user.id }); +const formatChannel = (channel: Channel | string) => + formatIdentified( + channel instanceof GuildChannel + ? { name: `#${channel.name}`, id: channel.id } + : typeof channel === "string" + ? channel + : channel.id + ); + +export const orderEmbedSync = async (order: Orders, client: Client) => { + const embed = rawOrderEmbed(order) + .addFields({ name: embedFields.customer, value: formatUser((await client.users.fetch(order.user).catch(() => null)) ?? order.user), inline: true }) + .addFields({ name: embedFields.channel, value: formatChannel((await client.channels.fetch(order.channel).catch(() => null)) ?? order.channel), inline: true }) + .addFields({ name: embedFields.guild, value: formatIdentified((await client.guilds.fetch(order.guild).catch(() => null)) ?? order.guild), inline: true }); + if (order.claimer) + embed.addFields({ name: embedFields.claimer, value: formatUser((await client.users.fetch(order.claimer).catch(() => null)) ?? order.claimer), inline: true }); + return embed; +}; + +const nulli = () => null; + +export const orderEmbedAsync = async (order: Orders, client: Client): Promise => { + const user = await client.users.fetch(order.user).catch(() => null); + const channel = await client.channels.fetch(order.channel).catch(() => null); + const guild = await client.guilds.fetch(order.guild).catch(() => null); + + const embed = rawOrderEmbed(order) + .addFields( + { name: "Customer", value: formatUser(user ?? order.user), inline: true } + ) + .addFields( + { name: "Channel", value: formatChannel(channel ?? order.channel), inline: true } + ) + .addFields( + { name: "Guild", value: formatIdentified(guild ?? order.guild), inline: true } + ); + + if (order.claimer) { + const claimer = await client.users.fetch(order.claimer).catch(() => null); + if (claimer) { + embed.addFields( + { name: "Claimer", value: formatUser(claimer), inline: true } + ); + } + } + + return embed; +}; +export const requiredOrderPlaceholders = ["mention", "image"]; + +export const orderPlaceholders = async (order: Orders) => Object.assign(Object.create(null), { + preparer: order.claimer ? formatUser((await client.users.fetch(order.claimer).catch(nulli)) ?? order.claimer) : "Unknown", + deliverer: order.deliverer ? formatUser((await client.users.fetch(order.deliverer).catch(nulli)) ?? order.deliverer) : "Unknown", + id: order.id, + details: order.details, + mention: `<@${order.user}>`, + user: formatUser((await client.users.fetch(order.user).catch(nulli)) ?? order.user), + image: order.image ?? "No image was found, this is very bad." +}); + +export const OrderFlags = { + FeedbackGiven: 0b1, + Tipped: 0b10, + Rated: 0b100, +}; + +export { OrderStatus }; diff --git a/src/database/userInfo.ts b/src/database/userInfo.ts index e6bf5eb..b6afd06 100644 --- a/src/database/userInfo.ts +++ b/src/database/userInfo.ts @@ -1,13 +1,58 @@ -import type { UserResolvable } from "discord.js"; -import { resolveUserId } from "../utils/id"; -import { db } from "./database"; +import { PrismaClient, UserInfo } from '@prisma/client'; +import type { UserResolvable } from 'discord.js'; +import { resolveUserId } from '../utils/id'; + +const prisma = new PrismaClient(); + +export const getUserInfo = async (user: UserResolvable) => + prisma.userInfo.findFirst({ where: { id: resolveUserId(user) } }); -export const getUserInfo = async (user: UserResolvable) => db.userInfo.findFirst({ where: { id: resolveUserId(user) } }); export const upsertUserInfo = async (user: UserResolvable) => - db.userInfo.upsert({ + prisma.userInfo.upsert({ where: { id: resolveUserId(user) }, create: { - id: resolveUserId(user) + id: resolveUserId(user), + guildsxp: '0', // Provide a default value for guildsxp + }, + update: {}, + }); + +export const getUserBalance = async (user: UserResolvable): Promise<{ balance: number; donuts: number }> => { + const userInfo = await prisma.userInfo.findUnique({ + where: { + id: resolveUserId(user), + }, + select: { + balance: true, + donuts: true, }, - update: {} }); + + const balance = userInfo?.balance ?? 0; + const donuts = userInfo?.donuts ?? 0; + + return { balance, donuts }; +}; + +export const updateBalance = async ( + user: UserResolvable, + newBalance: number, + newDonuts: number +): Promise => { + const balance = Math.floor(newBalance); + const donuts = Math.floor(newDonuts); + + const updatedUserInfo = await prisma.userInfo.update({ + where: { + id: resolveUserId(user), + }, + data: { + balance: balance, + donuts: donuts, + }, + }); + + return updatedUserInfo; +}; +export { resolveUserId }; + diff --git a/src/database/workerInfo.ts b/src/database/workerInfo.ts index fa82851..fdb3ef1 100644 --- a/src/database/workerInfo.ts +++ b/src/database/workerInfo.ts @@ -1,8 +1,10 @@ +import { WorkerInfo } from "@prisma/client"; import type { UserResolvable } from "discord.js"; import { resolveUserId } from "../utils/id"; import { db } from "./database"; export const getWorkerInfo = async (user: UserResolvable) => db.workerInfo.findFirst({ where: { id: resolveUserId(user) } }); + export const upsertWorkerInfo = async (user: UserResolvable) => db.workerInfo.upsert({ where: { id: resolveUserId(user) }, @@ -11,3 +13,10 @@ export const upsertWorkerInfo = async (user: UserResolvable) => }, update: {} }); + +export async function getWorkerInfos(): Promise { + const workerInfos = await db.workerInfo.findMany(); + return workerInfos + .filter(workerInfo => workerInfo.deliveries > 0 || workerInfo.preparations > 0) + .sort((a, b) => (b.deliveries + b.preparations) - (a.deliveries + a.preparations)); +} diff --git a/src/events/ExpCreate.ts b/src/events/ExpCreate.ts new file mode 100644 index 0000000..c527c32 --- /dev/null +++ b/src/events/ExpCreate.ts @@ -0,0 +1,86 @@ +import { PrismaClient } from "@prisma/client"; +import { client } from "../providers/client"; + +const prisma = new PrismaClient(); + +// Map to hold cooldown Sets per guild +const cooldowns = new Map>(); + +client.on('messageCreate', async (message) => { + // Ignore messages from bots or from DMs + if (message.author.bot || !message.guild) return; + + const guildId = message.guild.id; + const userId = message.author.id; + + // If the user is in the cooldown Set for the guild, ignore this message + if (cooldowns.get(guildId)?.has(userId)) return; + + // Create a Set for the guild if it doesn't exist + if (!cooldowns.has(guildId)) { + cooldowns.set(guildId, new Set()); + } + + // Add the user to the cooldown Set for the guild + cooldowns.get(guildId)?.add(userId); + + // Remove the user from the cooldown Set after 60 seconds + setTimeout(() => { + cooldowns.get(guildId)?.delete(userId); + }, 60000); // 60000 milliseconds = 60 seconds + + try { + // Create or retrieve the user's data from the database + let userData = await prisma.userInfo.findUnique({ + where: { + id: userId, + }, + }); + if (!userData) { + // If the user doesn't exist in the database, create a new entry + userData = await prisma.userInfo.create({ + data: { + id: userId, + guildsxp: JSON.stringify({}), + }, + }); + } + + let guildsxp: Record = {}; + if (typeof userData.guildsxp === 'string') { + guildsxp = JSON.parse(userData.guildsxp); + } + + if (!guildsxp[guildId]) { + // If they don't, initialize it + guildsxp[guildId] = { xp: Math.floor(Math.random() * 20) + 1, level: 1 }; + } else { + // Increase their XP + guildsxp[guildId].xp += Math.floor(Math.random() * 20) + 1; + // Check if the user has enough XP to level up + if (guildsxp[guildId].xp >= guildsxp[guildId].level * 100) { + // If they do, increase their level and reset their XP + guildsxp[guildId].level += 1; + guildsxp[guildId].xp = 0; + // Send a message to the user to notify them of the level up + message.reply(`Congratulations! You have leveled up to level ${guildsxp[guildId].level}!`); + } + } + + // Update the user's data in the database + await prisma.userInfo.update({ + where: { + id: userId, + }, + data: { guildsxp: JSON.stringify(guildsxp) }, + }); + } catch (error) { + console.error('Error handling user data:', error); + return; + } +}); + +// Close the Prisma connection when the script is exiting +process.on('beforeExit', () => { + prisma.$disconnect(); +}); \ No newline at end of file diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index eca84b6..9ffc5a1 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -1,18 +1,10 @@ -import type { InteractionByType } from "../utils/components"; import { client } from "../providers/client"; import { commandRegistry } from "../providers/commandManager"; -import { constants, text } from "../providers/config"; -import { LifetimeMap } from "../structures/LifetimeMap"; -import type { Awaitable } from "discord.js"; -import { StopCommandExecution } from "../utils/error"; +import { text } from "../providers/config"; import { blacklist } from "../database/blacklist"; +import { StopCommandExecution } from "../utils/error"; -export const componentCallbacks = new LifetimeMap Awaitable>( - constants.interactionExpiryTimeMs -); - -client.on("interactionCreate", async int => { - +client.on("interactionCreate", async (int) => { try { if (!int.inCachedGuild()) { if (int.isCommand()) int.reply("Error B417"); @@ -27,15 +19,10 @@ client.on("interactionCreate", async int => { // TODO remove this and use discord builtin when permissions get better for (const perm of command.permissions) await perm.check(int); await command.executor(int); - } else if (int.isMessageComponent()) { - if (componentCallbacks.has(int.customId)) - await componentCallbacks.get(int.customId)?.(int as InteractionByType); - else if (int.customId.startsWith("DB_CB__")) - if (int.isButton()) await int.followUp({ content: "This interaction has expired.", ephemeral: true }); } } catch (e) { if (!(e instanceof StopCommandExecution)) { - if (int.isApplicationCommand()) int.reply({ content: text.errors.exception, ephemeral: true }).catch(); + if (int.isCommand()) int.reply({ content: text.errors.exception, ephemeral: true }).catch(); console.error(e); } } diff --git a/src/providers/client.ts b/src/providers/client.ts index 702c7a3..ce1c107 100644 --- a/src/providers/client.ts +++ b/src/providers/client.ts @@ -1,28 +1,34 @@ import { REST } from "@discordjs/rest"; -import { Client } from "discord.js"; -import { config, text } from "./config"; -import { join, posix, win32 } from "path"; +import { Client, Partials } from "discord.js"; +import { config } from "./config"; +import { join } from "path"; import { sync } from "fast-glob"; -import { development } from "./env"; -import { production } from "./env"; +import { GatewayIntentBits } from "discord.js"; + if (globalThis._$clientLoaded) throw new Error("The client was loaded twice. This should never happen."); globalThis._$clientLoaded = true; -export const client = new Client({ - shards: "auto", - intents: ["GUILD_MEMBERS", "GUILDS"], - presence: { - activities: [text.bot.status], - status: production ? "online" : "online", - }, - partials: [ - "CHANNEL", "USER" - ] +export const client = new Client({ + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildMessages, + //GatewayIntentBits.MessageContent, + GatewayIntentBits.GuildMembers, + ], + partials: [Partials.User, Partials.Channel, Partials.GuildMember, Partials.Message] +}); + +client.on("ready", () => { + console.log(`Logged in as ${client.user?.tag}!`); + client.user?.setPresence({ + activities: [{ name: "with Discord.js" }], + status: "online", // Online , idle , dnd (Do Not Disturb), invisible , offline + }); }); export const rest = new REST({ version: "9" }).setToken(config.token); client.login(config.token); -const eventsFolder = join(__dirname, "../events/**/*.js").replaceAll(win32.sep, posix.sep); -sync(eventsFolder).forEach(x => import(x) as unknown); +const eventsFolder = join(__dirname, "../events/**/*.js").replace(/\\/g, "/"); +sync(eventsFolder).forEach((x) => import(x) as unknown); diff --git a/src/providers/commandManager.ts b/src/providers/commandManager.ts index 0380efc..b1a7b35 100644 --- a/src/providers/commandManager.ts +++ b/src/providers/commandManager.ts @@ -22,13 +22,13 @@ export const applicationCommandRegistry = new Collection, - { - guild: GuildResolvable; - }, - null + ApplicationCommand<{ + guild: GuildResolvable; + }>, + { + guild: GuildResolvable; + }, + null > = notInitialized("applicationCommandManager"); const registerCommands = async (commands: Command[]) => { diff --git a/src/providers/config.ts b/src/providers/config.ts index 9d17778..09aef0c 100644 --- a/src/providers/config.ts +++ b/src/providers/config.ts @@ -1,31 +1,36 @@ import HJSON from "hjson"; import fs from "fs"; import path from "path"; -import type { ZodRawShape } from "zod"; import { z } from "zod"; import type { NamedFormattable, PositionalFormattable } from "../utils/string"; import { formatZodError } from "../utils/zod"; import pc from "picocolors"; -import { arraysSimilar } from "../utils/array"; import { IllegalStateError } from "../utils/error"; import { OrderStatus } from "@prisma/client"; +export const snowflake = z.union([ + z.string().length(18).regex(/^\d+$/), + z.string().length(19).regex(/^\d+$/), +]); -export const snowflake = z.string().length(18).regex(/^\d+$/); const pFormattable = (n: T = 1 as T) => z.string().refine(x => x.split("{}").length - 1 === n, { message: `Formattable must contain ${n} placeholders`, }) as z.ZodType>; + const nFormattable = (...keys: T) => z.string().refine( - x => - arraysSimilar( - [...x.matchAll(/\{(\w+)\}/g)].map(x => x[1]), - keys - ), + x => { + for (const key of keys) { + if (!x.includes(`{${key}}`)) { + return false; + } + } + return true; + }, { - message: `Formattable must contain the placeholders ${keys.join(", ")}`, - } - ) as z.ZodType>; + message: `Formattable must contain ${keys.join(", ")}`, + }, + ) as z.ZodType>;; const textSchema = z .object({ @@ -66,9 +71,11 @@ const textSchema = z }), commands: z.object({ order: z.object({ - success: nFormattable("details", "id"), exists: z.string(), + success: nFormattable("details", "id"), created: nFormattable("details", "duty", "id", "tag"), + success1: nFormattable("details", "id"), + success_tab: nFormattable("details", "id"), }), list: z.object({ title: z.string(), @@ -84,10 +91,11 @@ const textSchema = z }), claim: z.object({ existing: z.string(), - success: z.string(), + success: nFormattable("id"), }), unclaim: z.object({ - success: z.string(), + success: nFormattable("id"), + notClaimed: z.string(), // Add this line for the error message }), cancel: z.object({ success: z.string(), @@ -118,6 +126,7 @@ const textSchema = z }), balance: z.object({ success: pFormattable(), + success1: pFormattable(), }), work: z.object({ responses: z.array(pFormattable()), @@ -136,6 +145,7 @@ const textSchema = z title: pFormattable(), footer: pFormattable(), }), + }), tip: z.object({ success: pFormattable(2), @@ -152,8 +162,18 @@ const textSchema = z }), delete: z.object({ success: z.string(), - dm: pFormattable(2), + dm: z.string(), + userDmDisabled: z.string(), + dmFailed: z.string(), + userNotFound: z.string(), }), + + rate: z.object({ + success: z.string(), + alreadyRated: z.string(), + invalidRating: z.string(), + }).passthrough(), + drinkingr: z.object({ drinks: z.array(pFormattable()), }), @@ -187,6 +207,7 @@ const configSchema = z duty: snowflake, moderator: snowflake, dutyd: snowflake, + admin: snowflake, }), channels: z.object({ brewery: snowflake, @@ -200,6 +221,7 @@ const configSchema = z const constantsSchema = z .object({ interactionExpiryTimeMs: z.number(), + bakeTimeRangeMs: z.tuple([z.number(), z.number()]), brewTimeRangeMs: z.tuple([z.number(), z.number()]), work: z.object({ amountRange: z.tuple([z.number(), z.number()]), diff --git a/src/providers/customCommands.ts b/src/providers/customCommands.ts new file mode 100644 index 0000000..d1e87f6 --- /dev/null +++ b/src/providers/customCommands.ts @@ -0,0 +1,29 @@ +import { Command } from "../structures/Command"; +import { permissions } from "../providers/permissions"; +import { CommandInteraction } from "discord.js"; + +export const customCommands = { + enableXpCommand: new Command("enablexp", "Enable XP/levels in a channel.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Command logic... + }), + + disableXpCommand: new Command("disablexp", "Disable XP/levels in a channel.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Command logic... + }), + + enableLevelNotificationsCommand: new Command("enablelevelnotifications", "Enable level notifications in a channel.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Command logic... + }), + + disableLevelNotificationsCommand: new Command("disablelevelnotifications", "Disable level notifications.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Command logic... + }), +}; diff --git a/src/providers/drink.ts b/src/providers/drink.ts new file mode 100644 index 0000000..0dca1de --- /dev/null +++ b/src/providers/drink.ts @@ -0,0 +1,25 @@ +// drink.ts + +import { PrismaClient, Drink } from "@prisma/client"; + +const prisma = new PrismaClient(); + +// Function to retrieve all drinks +export async function getAllDrinks(): Promise { + return prisma.drink.findMany(); +} + +// Function to create a new drink +export async function createDrink(data: Partial): Promise { + return prisma.drink.create({ data }); +} + +// Function to update an existing drink +export async function updateDrink(id: number, data: Partial): Promise { + return prisma.drink.update({ where: { id }, data }); +} + +// Function to delete a drink +export async function deleteDrink(id: number): Promise { + return prisma.drink.delete({ where: { id } }); +} diff --git a/src/providers/orderManager.ts b/src/providers/orderManager.ts index 819348d..7a259d5 100644 --- a/src/providers/orderManager.ts +++ b/src/providers/orderManager.ts @@ -1,13 +1,14 @@ -import { OrderStatus } from "@prisma/client"; +import { CafeStatus } from "@prisma/client"; import { db } from "../database/database"; import { format } from "../utils/string"; import { text } from "./config"; import { mainChannels } from "./discord"; +import { OrderStatus } from "../database/orders"; export const startOrderTimeoutChecks = () => { setInterval(async () => { - const brewFinished = await db.order.findMany({ where: { timeout: { lte: new Date() }, status: OrderStatus.Brewing } }); - await db.order.updateMany({ + const brewFinished = await db.orders.findMany({ where: { timeout: { lte: new Date() }, status: OrderStatus.Brewing } }); + await db.orders.updateMany({ where: { id: { in: brewFinished.map(x => x.id) } }, data: { timeout: null, status: OrderStatus.PendingDelivery }, }); diff --git a/src/providers/permissions.ts b/src/providers/permissions.ts index 9e35748..8cb4179 100644 --- a/src/providers/permissions.ts +++ b/src/providers/permissions.ts @@ -20,6 +20,7 @@ const permissionsSchema = z developer: permissionSchema, employee: permissionSchema, moderator: permissionSchema, + admin: permissionSchema, }) .strict(); @@ -30,7 +31,7 @@ export class Permission { readonly children: readonly Permission[] = []; readonly roles: Record = {}; readonly users: Record = {}; - constructor(public name: string) {} + constructor(public name: string) { } addParent(permission: Permission) { (this.parents as Permission[]).push(permission); if (!permission.children.includes(this)) permission.addChild(this); diff --git a/src/structures/Command.ts b/src/structures/Command.ts index bb34111..4a5b1a9 100644 --- a/src/structures/Command.ts +++ b/src/structures/Command.ts @@ -1,7 +1,8 @@ -import type { ApplicationCommandPermissionData, CommandInteraction } from "discord.js"; import { SlashCommandBuilder } from "@discordjs/builders"; -import { capitalize } from "../utils/string"; +import type { CommandInteraction } from "discord.js"; +import { Attachment } from "discord.js"; import type { Permission } from "../providers/permissions"; +import { capitalize } from "../utils/string"; export type CommandExecutor = (interaction: CommandInteraction<"cached">) => void | Promise; @@ -19,10 +20,12 @@ export class Command { executor: CommandExecutor = i => i.reply("No executor was specified."); permissions: Permission[] = []; local = false; + aliases: string[] = []; + shortcuts: string[] = []; + syntax: { name: string; type: CommandOptionType; require: boolean }[] = []; constructor(public readonly name: string, public readonly description = "") { this.#slash.setName(this.name).setDescription(this.description).setDefaultPermission(true); - } setAccessible(accessible: boolean) { @@ -42,6 +45,12 @@ export class Command { return this; } + addAttachment(type: T, ...args: CommandOptionArgs) { + const fn = this.#slash[`add${capitalize(type)}Option`].bind(this.#slash) as (...a: typeof args) => void; + fn(...args); + return this; + } + addSubCommand(...args: Parameters) { this.#slash.addSubcommand(...args); return this; @@ -62,5 +71,27 @@ export class Command { return this; } - readonly toJSON: SlashCommandBuilder["toJSON"] = this.#slash.toJSON.bind(this.#slash); -} \ No newline at end of file + addShortcuts(...args: string[]) { + this.shortcuts = this.shortcuts.concat(args); + return this; + } + + addAlias(alias: string) { + this.aliases.push(alias); + return this; + } + + addAliases(...args: string[]) { + this.aliases = this.aliases.concat(args); + return this; + } + + addSyntax(name: string, type: CommandOptionType, require = false) { + this.syntax.push({ name, type, require }); + return this; + } + + toJSON() { + return this.#slash.toJSON(); + } +} diff --git a/src/structures/CustomDrinkData.ts b/src/structures/CustomDrinkData.ts new file mode 100644 index 0000000..4ef2159 --- /dev/null +++ b/src/structures/CustomDrinkData.ts @@ -0,0 +1,6 @@ +export const CustomdrinksData = [ + { name: "Drink1", type: "custom", price: 10 }, + { name: "Drink2", type: "custom", price: 8 }, + { name: "Drink3", type: "custom", price: 13 }, + { name: "Drink4", type: "custom", price: 10.99 }, +]; \ No newline at end of file diff --git a/src/structures/DrinksData.ts b/src/structures/DrinksData.ts new file mode 100644 index 0000000..41b69d3 --- /dev/null +++ b/src/structures/DrinksData.ts @@ -0,0 +1,6 @@ +export const drinksData = [ + { name: "Drink11", type: "normal", price: 10 }, + { name: "Drink22", type: "normal", price: 8 }, + { name: "Drink33", type: "normal", price: 12 }, + { name: "Drink32", type: "normal", price: 13 }, +]; \ No newline at end of file diff --git a/src/utils/serverconfig.ts b/src/utils/serverconfig.ts new file mode 100644 index 0000000..e62054f --- /dev/null +++ b/src/utils/serverconfig.ts @@ -0,0 +1,11 @@ +export const serverConfigSchema = { + name: "ServerConfig", + fields: { + id: { type: "String", id: true }, + prefix: { type: "String" }, + welcomeMessageEnabled: { type: "Boolean" }, + welcomeMessageChannel: { type: "String", nullable: true }, + xpEnabledChannels: { type: "String[]", nullable: true }, + levelNotificationChannelId: { type: "String", nullable: true }, + }, +}; \ No newline at end of file diff --git a/src/utils/string.ts b/src/utils/string.ts index d6a4814..34c623b 100644 --- a/src/utils/string.ts +++ b/src/utils/string.ts @@ -1,10 +1,11 @@ import type { L, A, N, S } from "ts-toolbelt"; import { mainEmojis } from "../providers/discord"; -export const capitalize = (str: T) => (str[0].toUpperCase() + str.slice(1)) as Capitalize; +export const capitalize = (str?: T) => str ? (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize : str; + export type PositionalFormattable = `${string}${S.Join, string>}${string}`; -export type NamedFormattable = `${string}${S.Join<{ [k in keyof T]: T[k] extends string ? `{${T[k]}}` : never}, string>}${string}`; +export type NamedFormattable = `${string}${S.Join<{ [k in keyof T]: T[k] extends string ? `{${T[k]}}` : never }, string>}${string}`; type ExtractPlaceholders = T extends "" ? A diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..a8ed3a1 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1934 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@discordjs/builders@^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/builders@^1.6.3": + version "1.6.3" + resolved "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.3.tgz" + integrity sha512-CTCh8NqED3iecTNuiz49mwSsrc2iQb4d0MjMdmS/8pb69Y4IlzJ/DIy/p5GFlgOrFbNO2WzMHkWKQSiJ3VNXaw== + dependencies: + "@discordjs/formatters" "^0.3.1" + "@discordjs/util" "^0.3.1" + "@sapphire/shapeshift" "^3.8.2" + discord-api-types "^0.37.41" + fast-deep-equal "^3.1.3" + ts-mixer "^6.0.3" + tslib "^2.5.0" + +"@discordjs/collection@^0.4.0": + version "0.4.0" + resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz" + integrity sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw== + +"@discordjs/collection@^1.5.1": + version "1.5.1" + resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.1.tgz" + integrity sha512-aWEc9DCf3TMDe9iaJoOnO2+JVAjeRNuRxPZQA6GVvBf+Z3gqUuWYBy2NWh4+5CLYq5uoc3MOvUQ5H5m8CJBqOA== + +"@discordjs/formatters@^0.3.1": + version "0.3.1" + resolved "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.1.tgz" + integrity sha512-M7X4IGiSeh4znwcRGcs+49B5tBkNDn4k5bmhxJDAUhRxRHTiFAOTVUNQ6yAKySu5jZTnCbSvTYHW3w0rAzV1MA== + dependencies: + discord-api-types "^0.37.41" + +"@discordjs/rest@^0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz" + integrity sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q== + dependencies: + "@discordjs/collection" "^0.4.0" + "@sapphire/async-queue" "^1.1.9" + "@sapphire/snowflake" "^3.0.1" + discord-api-types "^0.26.1" + form-data "^4.0.0" + node-fetch "^2.6.5" + tslib "^2.3.1" + +"@discordjs/rest@^1.7.1": + version "1.7.1" + resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.1.tgz" + integrity sha512-Ofa9UqT0U45G/eX86cURQnX7gzOJLG2oC28VhIk/G6IliYgQF7jFByBJEykPSHE4MxPhqCleYvmsrtfKh1nYmQ== + dependencies: + "@discordjs/collection" "^1.5.1" + "@discordjs/util" "^0.3.0" + "@sapphire/async-queue" "^1.5.0" + "@sapphire/snowflake" "^3.4.2" + discord-api-types "^0.37.41" + file-type "^18.3.0" + tslib "^2.5.0" + undici "^5.22.0" + +"@discordjs/util@^0.3.0", "@discordjs/util@^0.3.1": + version "0.3.1" + resolved "https://registry.npmjs.org/@discordjs/util/-/util-0.3.1.tgz" + integrity sha512-HxXKYKg7vohx2/OupUN/4Sd02Ev3PBJ5q0gtjdcvXb0ErCva8jNHWfe/v5sU3UKjIB/uxOhc+TDOnhqffj9pRA== + +"@discordjs/ws@^0.8.3": + version "0.8.3" + resolved "https://registry.npmjs.org/@discordjs/ws/-/ws-0.8.3.tgz" + integrity sha512-hcYtppanjHecbdNyCKQNH2I4RP9UrphDgmRgLYrATEQF1oo4sYSve7ZmGsBEXSzH72MO2tBPdWSThunbxUVk0g== + dependencies: + "@discordjs/collection" "^1.5.1" + "@discordjs/rest" "^1.7.1" + "@discordjs/util" "^0.3.1" + "@sapphire/async-queue" "^1.5.0" + "@types/ws" "^8.5.4" + "@vladfrangu/async_event_emitter" "^2.2.1" + discord-api-types "^0.37.41" + tslib "^2.5.0" + ws "^8.13.0" + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0": + version "4.5.1" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz" + integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== + +"@eslint/eslintrc@^2.0.3": + version "2.0.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz" + integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.5.2" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.41.0": + version "8.41.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz" + integrity sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA== + +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@noble/hashes@^1.1.5": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@paralleldrive/cuid2@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.2.1.tgz#e7c11bad9452b36ef5ad1a834b14910eb0fe4cec" + integrity sha512-GJhHYlMhyT2gWemDL7BGMWfTNhspJKkikLKh9wAy3z4GTTINvTYALkUd+eGQK7aLeVkVzPuSA0VCT3H5eEWbbw== + dependencies: + "@noble/hashes" "^1.1.5" + +"@prisma/client@latest": + version "4.15.0" + resolved "https://registry.npmjs.org/@prisma/client/-/client-4.15.0.tgz" + integrity sha512-xnROvyABcGiwqRNdrObHVZkD9EjkJYHOmVdlKy1yGgI+XOzvMzJ4tRg3dz1pUlsyhKxXGCnjIQjWW+2ur+YXuw== + dependencies: + "@prisma/engines-version" "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" + +"@prisma/engines-version@4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944": + version "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" + resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944.tgz" + integrity sha512-sVOig4tjGxxlYaFcXgE71f/rtFhzyYrfyfNFUsxCIEJyVKU9rdOWIlIwQ2NQ7PntvGnn+x0XuFo4OC1jvPJKzg== + +"@prisma/engines@4.15.0": + version "4.15.0" + resolved "https://registry.npmjs.org/@prisma/engines/-/engines-4.15.0.tgz" + integrity sha512-FTaOCGs0LL0OW68juZlGxFtYviZa4xdQj/rQEdat2txw0s3Vu/saAPKjNVXfIgUsGXmQ72HPgNr6935/P8FNAA== + +"@sapphire/async-queue@^1.1.9", "@sapphire/async-queue@^1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz" + integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== + +"@sapphire/shapeshift@^3.8.1", "@sapphire/shapeshift@^3.8.2": + version "3.9.0" + resolved "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.0.tgz" + integrity sha512-iJpHmjAdwX9aSL6MvFpVyo+tkokDtInmSjoJHbz/k4VJfnim3DjvG0hgGEKWtWZgCu45RaLgcoNgR1fCPdIz3w== + dependencies: + fast-deep-equal "^3.1.3" + lodash "^4.17.21" + +"@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.4.2": + version "3.5.1" + resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz" + integrity sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA== + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@^17.0.42": + version "17.0.45" + resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +"@types/semver@^7.3.12": + version "7.5.0" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + +"@types/uuid@^9.0.1": + version "9.0.1" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz" + integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== + +"@types/ws@^8.5.4": + version "8.5.4" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^5.16.0": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz" + integrity sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.59.7" + "@typescript-eslint/type-utils" "5.59.7" + "@typescript-eslint/utils" "5.59.7" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.16.0": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz" + integrity sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ== + dependencies: + "@typescript-eslint/scope-manager" "5.59.7" + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/typescript-estree" "5.59.7" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz" + integrity sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ== + dependencies: + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/visitor-keys" "5.59.7" + +"@typescript-eslint/type-utils@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz" + integrity sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ== + dependencies: + "@typescript-eslint/typescript-estree" "5.59.7" + "@typescript-eslint/utils" "5.59.7" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz" + integrity sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A== + +"@typescript-eslint/typescript-estree@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz" + integrity sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ== + dependencies: + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/visitor-keys" "5.59.7" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz" + integrity sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.7" + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/typescript-estree" "5.59.7" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz" + integrity sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ== + dependencies: + "@typescript-eslint/types" "5.59.7" + eslint-visitor-keys "^3.3.0" + +"@vladfrangu/async_event_emitter@^2.2.1": + version "2.2.2" + resolved "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz" + integrity sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +atomic-sleep@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +comment-parser@^1.1.2: + version "1.3.1" + resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz" + integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + +cross-spawn@^7.0.1, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +discord-api-types@^0.26.1: + version "0.26.1" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz" + integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== + +discord-api-types@^0.37.35, discord-api-types@^0.37.41: + version "0.37.42" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.42.tgz" + integrity sha512-1Huaj9cQ1W7/uryS8MZs/tZemnoKB94thM1cE40lep3rpU3q7WHqkdjN/veX0prTkYlPhcyLd/DeF/pBO8X8oQ== + +discord.js@^14.8.0: + version "14.11.0" + resolved "https://registry.npmjs.org/discord.js/-/discord.js-14.11.0.tgz" + integrity sha512-CkueWYFQ28U38YPR8HgsBR/QT35oPpMbEsTNM30Fs8loBIhnA4s70AwQEoy6JvLcpWWJO7GY0y2BUzZmuBMepQ== + dependencies: + "@discordjs/builders" "^1.6.3" + "@discordjs/collection" "^1.5.1" + "@discordjs/formatters" "^0.3.1" + "@discordjs/rest" "^1.7.1" + "@discordjs/util" "^0.3.1" + "@discordjs/ws" "^0.8.3" + "@sapphire/snowflake" "^3.4.2" + "@types/ws" "^8.5.4" + discord-api-types "^0.37.41" + fast-deep-equal "^3.1.3" + lodash.snakecase "^4.1.1" + tslib "^2.5.0" + undici "^5.22.0" + ws "^8.13.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +duplexify@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz" + integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-plugin-regexp@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz" + integrity sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + comment-parser "^1.1.2" + grapheme-splitter "^1.0.4" + jsdoctypeparser "^9.0.0" + refa "^0.11.0" + regexp-ast-analysis "^0.6.0" + scslre "^0.2.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== + +eslint@^8.12.0: + version "8.41.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz" + integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.3" + "@eslint/js" "8.41.0" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.1" + espree "^9.5.2" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.5.2: + version "9.5.2" + resolved "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz" + integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-redact@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz" + integrity sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-type@^18.3.0: + version "18.4.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-18.4.0.tgz" + integrity sha512-o6MQrZKTAK6WpvmQk3jqTVUmqxYBxW5bloUfrdH1ZnRFDvvAPNr+l+rgOxM3nkqWT+3khaj3FRMDydWe0xhu+w== + dependencies: + readable-web-to-node-stream "^3.0.2" + strtok3 "^7.0.0" + token-types "^5.0.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +got@^11.8.3: + version "11.8.6" + resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +hjson@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" + integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdoctypeparser@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz" + integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.2: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +keyv@^4.0.0: + version "4.5.2" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== + dependencies: + json-buffer "3.0.1" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +nekos.life@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/nekos.life/-/nekos.life-3.0.0.tgz" + integrity sha512-7LbvSqLtfK4XRA91nJaGOWthrNADmG7Vx9d54TC77Hx5qFvRCssFUaHraI6bZGjVENBCUaF7CreisoFX+8mnKQ== + +node-fetch@^2.6.5: + version "2.6.11" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== + dependencies: + whatwg-url "^5.0.0" + +nodemon@^2.0.20: + version "2.0.22" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz" + integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== + dependencies: + chokidar "^3.5.2" + debug "^3.2.7" + ignore-by-default "^1.0.1" + minimatch "^3.1.2" + pstree.remy "^1.1.8" + semver "^5.7.1" + simple-update-notifier "^1.0.7" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.5" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +on-exit-leak-free@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz" + integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +peek-readable@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz" + integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pino-abstract-transport@v0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz" + integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== + dependencies: + duplexify "^4.1.2" + split2 "^4.0.0" + +pino-std-serializers@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz" + integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== + +pino@^7.9.2: + version "7.11.0" + resolved "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz" + integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== + dependencies: + atomic-sleep "^1.0.0" + fast-redact "^3.0.0" + on-exit-leak-free "^0.2.0" + pino-abstract-transport v0.5.0 + pino-std-serializers "^4.0.0" + process-warning "^1.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.1.0" + safe-stable-stringify "^2.1.0" + sonic-boom "^2.2.1" + thread-stream "^0.15.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +pretty-ms@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz" + integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== + dependencies: + parse-ms "^2.1.0" + +prisma@latest: + version "4.15.0" + resolved "https://registry.npmjs.org/prisma/-/prisma-4.15.0.tgz" + integrity sha512-iKZZpobPl48gTcSZVawLMQ3lEy6BnXwtoMj7hluoGFYu2kQ6F9LBuBrUyF95zRVnNo8/3KzLXJXJ5TEnLSJFiA== + dependencies: + "@prisma/engines" "4.15.0" + +process-warning@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz" + integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== + +pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-format-unescaped@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" + integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-web-to-node-stream@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz" + integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== + dependencies: + readable-stream "^3.6.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +real-require@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz" + integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== + +refa@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz" + integrity sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ== + dependencies: + "@eslint-community/regexpp" "^4.5.0" + +regexp-ast-analysis@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz" + integrity sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ== + dependencies: + "@eslint-community/regexpp" "^4.5.0" + refa "^0.11.0" + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-stable-stringify@^2.1.0: + version "2.4.3" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + +scslre@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz" + integrity sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w== + dependencies: + "@eslint-community/regexpp" "^4.5.0" + refa "^0.11.0" + regexp-ast-analysis "^0.6.0" + +semver@^5.7.1: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^7.3.7: + version "7.5.1" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz" + integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + dependencies: + lru-cache "^6.0.0" + +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +simple-update-notifier@^1.0.7: + version "1.1.0" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz" + integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== + dependencies: + semver "~7.0.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +sonic-boom@^2.2.1: + version "2.8.0" + resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz" + integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== + dependencies: + atomic-sleep "^1.0.0" + +source-map-support@^0.5.21: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strtok3@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz" + integrity sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^5.0.0" + +supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thread-stream@^0.15.1: + version "0.15.2" + resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz" + integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== + dependencies: + real-require "^0.1.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +token-types@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz" + integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-mixer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz" + integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ== + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +ts-toolbelt@^9.6.0: + version "9.6.0" + resolved "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz" + integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== + +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.3.1, tslib@^2.5.0: + version "2.5.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typescript-memoize@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz" + integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== + +typescript@^4.9.5: + version "4.9.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + +undici@^5.22.0: + version "5.22.1" + resolved "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz" + integrity sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw== + dependencies: + busboy "^1.6.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yarn@^1.22.18: + version "1.22.19" + resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" + integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.14.3: + version "3.21.4" + resolved "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz" + integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== From b098613c6a46fb6e9ffde41da454295e51884d4d Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 13 Jun 2023 09:29:27 -0600 Subject: [PATCH 02/79] Remove Trees --- prisma/schema.prisma | 9 --------- 1 file changed, 9 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 45ee1ae..ff00ea8 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -28,15 +28,6 @@ model UserInfo { } -model Tree { - id String @id - age Int - water DateTime - maxAge Int - - @@map(name: "trees") -} - model ServerInfo { id String @id @db.VarChar(30) createdAt DateTime @default(now()) From f452b7e96a8c63a9ab20b3f72508571fa76cb201 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 13 Jun 2023 22:26:48 -0600 Subject: [PATCH 03/79] Oops --- src/commands/orders/tip.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/orders/tip.ts b/src/commands/orders/tip.ts index b56c061..5b7271e 100644 --- a/src/commands/orders/tip.ts +++ b/src/commands/orders/tip.ts @@ -41,7 +41,7 @@ export const command = new Command("tip", "Tip your last order.") .setFooter({ text: format(tcte.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), ], }); - await db.cafeOrders.update({ + await db.orders.update({ where: { id: lastOrder.id }, data: { flags: lastOrder.flags | OrderFlags.Tipped }, }); From c4677e430eaeac10c99c447f153cd8c8d5f64565 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Wed, 14 Jun 2023 08:19:41 -0600 Subject: [PATCH 04/79] Adding length --- src/commands/orders/order.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/commands/orders/order.ts b/src/commands/orders/order.ts index 6d967c7..4699a7d 100644 --- a/src/commands/orders/order.ts +++ b/src/commands/orders/order.ts @@ -25,6 +25,14 @@ export const command = new Command("order", "Orders a drink.") } const drink = int.options.getString("drink", true); + + // Check the length of the drink description + const maxDescriptionLength = 100; // Adjust this value as needed + if (drink.length > maxDescriptionLength) { + await int.reply(`Your order details are too long. Please limit them to ${maxDescriptionLength} characters.`); + return; + } + const order = await db.orders.create({ data: { id: await generateOrderId(), From 81fad5768d21a972b683968af6e157d48a32fcb3 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Wed, 14 Jun 2023 08:20:09 -0600 Subject: [PATCH 05/79] Length --- src/commands/orders/worker/claim.ts | 16 ++++++++++------ src/commands/orders/worker/unclaim.ts | 5 +++-- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/commands/orders/worker/claim.ts b/src/commands/orders/worker/claim.ts index 9a01acb..fcc9c07 100644 --- a/src/commands/orders/worker/claim.ts +++ b/src/commands/orders/worker/claim.ts @@ -31,13 +31,17 @@ export const command = new Command("claim", "Claims an order.") return; } - const options = orders.map(order => ({ - label: order.id, - description: `Details: ${order.details}\nUser: ${order.user}`, // Include the 'details' property in the description - value: order.id, - details: order.details - })); + const options = orders.map(order => { + const details = order.details.length > 50 ? order.details.substring(0, 47) + "..." : order.details; + const user = order.user.length > 50 ? order.user.substring(0, 47) + "..." : order.user; + return { + label: order.id, + description: `Details: ${details}\nUser: ${user}`, + value: order.id, + details: order.details + }; + }); const selectMenu = new StringSelectMenuBuilder() .setCustomId("claim_order") .setPlaceholder("Select an order to claim") diff --git a/src/commands/orders/worker/unclaim.ts b/src/commands/orders/worker/unclaim.ts index 653b5a8..332c5c1 100644 --- a/src/commands/orders/worker/unclaim.ts +++ b/src/commands/orders/worker/unclaim.ts @@ -31,6 +31,8 @@ export const command = new Command("unclaim", "Allows you to unclaim an order.") await int.reply({ content: "Invalid order selected.", ephemeral: true }); return; } + const details = order.details.length > 50 ? order.details.substring(0, 47) + "..." : order.details; + const user = order.user.length > 50 ? order.user.substring(0, 47) + "..." : order.user; const selectMenu = new StringSelectMenuBuilder() .setCustomId("unclaim_order") @@ -38,11 +40,10 @@ export const command = new Command("unclaim", "Allows you to unclaim an order.") .addOptions([ { label: order.id, - description: `Details: ${order.details}\nUser: ${order.user}}`, // Include the 'details' property + description: `Details: ${details}\nUser: ${user}`, value: order.id, }, ]); - const actionRow = { type: ComponentType.ActionRow, components: [selectMenu], From a70b1ac169c35e8b98ffb24a3a279f317d6bc855 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Wed, 14 Jun 2023 09:54:24 -0600 Subject: [PATCH 06/79] Fixed --- config/text.hjson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/text.hjson b/config/text.hjson index 14e36fb..330904e 100644 --- a/config/text.hjson +++ b/config/text.hjson @@ -70,7 +70,7 @@ brew: { invalidUrl: "[no] Please specify a valid URL." success: "[yes] The order is now brewing." - ready: <@&1053887156701118485>he order{} {} {} finished brewing and {} now available for delivery. + ready: <@&1053887156701118485>the order{} {} {} finished brewing and {} now available for delivery. } deliver: { noMessage: âš ī¸ You do not have a delivery message set, and the default message was used. Make to set one with `/deliverymessage`! From 106cbed7db2f2a0434bbf3029d9a506b142f9de9 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 16 Jun 2023 19:15:41 -0600 Subject: [PATCH 07/79] -coughs- --- src/commands/public/expboard.ts | 25 +++++++++++-------------- src/commands/public/profile.ts | 20 ++++++++++---------- 2 files changed, 21 insertions(+), 24 deletions(-) diff --git a/src/commands/public/expboard.ts b/src/commands/public/expboard.ts index e8ef19b..7f1da27 100644 --- a/src/commands/public/expboard.ts +++ b/src/commands/public/expboard.ts @@ -1,3 +1,6 @@ +//expboard +/* eslint-disable quotes */ +/* eslint-disable indent */ import { CommandInteraction, EmbedBuilder } from "discord.js"; import { Command } from "../../structures/Command"; import { PrismaClient } from "@prisma/client"; @@ -13,27 +16,21 @@ export const command = new Command("expboard", "Shows the leaderboard.") } // Get all users in the guild - const users = await prisma.userInfo.findMany(); - - // Parse the guildsxp field and add the level and exp for the current guild to the user objects - const usersWithLevels = users.map(user => { - const guildsxp = typeof user.guildsxp === 'string' ? JSON.parse(user.guildsxp) : {}; - return { - ...user, - level: guildsxp[int.guild.id]?.level ?? 0, - exp: guildsxp[int.guild.id]?.exp ?? 0 - }; + const users = await prisma.guildsXP.findMany({ + where: { + guildId: int.guild.id, + }, }); // Sort the users by level and exp - usersWithLevels.sort((a, b) => b.level - a.level || b.exp - a.exp); + users.sort((a, b) => b.level - a.level || b.exp - a.exp); // Take the top 10 users - const leaderboard = usersWithLevels.slice(0, 10); + const leaderboard = users.slice(0, 10); // Format the leaderboard into a string let leaderboardString = leaderboard.map((user, index) => { - return `${index + 1}. <@${user.id}> - Level ${user.level}`; + return `${index + 1}. <@${user.userId}> - Level ${user.level}`; }).join('\n'); // Check if the leaderboard is empty @@ -48,4 +45,4 @@ export const command = new Command("expboard", "Shows the leaderboard.") .setColor("#0099ff"); await int.reply({ embeds: [embed] }); - }); + }); \ No newline at end of file diff --git a/src/commands/public/profile.ts b/src/commands/public/profile.ts index 7b2d3e1..3808fba 100644 --- a/src/commands/public/profile.ts +++ b/src/commands/public/profile.ts @@ -1,3 +1,6 @@ +//profile.ts +/* eslint-disable quotes */ +/* eslint-disable indent */ import { CommandInteraction, EmbedBuilder } from "discord.js"; import { Command } from "../../structures/Command"; import { PrismaClient } from "@prisma/client"; @@ -13,23 +16,20 @@ export const command = new Command("profile", "Shows your profile.") } try { - const userData = await prisma.userInfo.findUnique({ + const userGuildData = await prisma.guildsXP.findUnique({ where: { - id: int.user.id, + userId_guildId: { + userId: int.user.id, + guildId: int.guild.id, + }, }, }); - if (!userData) { + if (!userGuildData) { await int.reply("You don't have a profile yet."); return; } - let guildsxp: Record = {}; - if (typeof userData.guildsxp === 'string') { - guildsxp = JSON.parse(userData.guildsxp); - } - - const userGuildData = guildsxp[int.guild.id] || { xp: 0, level: 1 }; const nextLevelExp = userGuildData.level * 100; const level = userGuildData.level; @@ -38,7 +38,7 @@ export const command = new Command("profile", "Shows your profile.") .setTitle(`${int.user.username}'s Profile`) .setThumbnail(int.user.displayAvatarURL()) .addFields( - { name: "Experience", value: `${userGuildData.xp}/${nextLevelExp}`, inline: true }, + { name: "Experience", value: `${userGuildData.exp}/${nextLevelExp}`, inline: true }, { name: "Level", value: `${level}`, inline: true } ) .setColor("#0099ff"); From d0e7ad1714820204d0114a74685eda5ee8e17e3f Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 16 Jun 2023 19:16:15 -0600 Subject: [PATCH 08/79] =?UTF-8?q?(=E2=95=AF=C2=B0=E2=96=A1=C2=B0=EF=BC=89?= =?UTF-8?q?=E2=95=AF=EF=B8=B5=20=E2=94=BB=E2=94=81=E2=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/events/ExpCreate.ts | 66 +++++++++++++++++++++-------------------- 1 file changed, 34 insertions(+), 32 deletions(-) diff --git a/src/events/ExpCreate.ts b/src/events/ExpCreate.ts index c527c32..89e49b7 100644 --- a/src/events/ExpCreate.ts +++ b/src/events/ExpCreate.ts @@ -1,3 +1,6 @@ +//ExpCreate.ts +/* eslint-disable quotes */ +/* eslint-disable indent */ import { PrismaClient } from "@prisma/client"; import { client } from "../providers/client"; @@ -31,48 +34,47 @@ client.on('messageCreate', async (message) => { try { // Create or retrieve the user's data from the database - let userData = await prisma.userInfo.findUnique({ + const guildsXPData = await prisma.guildsXP.upsert({ where: { - id: userId, + userId_guildId: { + userId: userId, + guildId: guildId, + }, + }, + create: { + userId: userId, + guildId: guildId, + userName: message.author.username, + level: 0, + exp: 0, }, + update: {}, }); - if (!userData) { - // If the user doesn't exist in the database, create a new entry - userData = await prisma.userInfo.create({ - data: { - id: userId, - guildsxp: JSON.stringify({}), - }, - }); - } - let guildsxp: Record = {}; - if (typeof userData.guildsxp === 'string') { - guildsxp = JSON.parse(userData.guildsxp); - } + // Increase their XP + guildsXPData.exp += Math.floor(Math.random() * 20) + 1; - if (!guildsxp[guildId]) { - // If they don't, initialize it - guildsxp[guildId] = { xp: Math.floor(Math.random() * 20) + 1, level: 1 }; - } else { - // Increase their XP - guildsxp[guildId].xp += Math.floor(Math.random() * 20) + 1; - // Check if the user has enough XP to level up - if (guildsxp[guildId].xp >= guildsxp[guildId].level * 100) { - // If they do, increase their level and reset their XP - guildsxp[guildId].level += 1; - guildsxp[guildId].xp = 0; - // Send a message to the user to notify them of the level up - message.reply(`Congratulations! You have leveled up to level ${guildsxp[guildId].level}!`); - } + // Check if the user has enough XP to level up + if (guildsXPData.exp >= guildsXPData.level * 100) { + // If they do, increase their level and reset their XP + guildsXPData.level += 1; + guildsXPData.exp = 0; + // Send a message to the user to notify them of the level up + message.reply(`Congratulations! You have leveled up to level ${guildsXPData.level}!`); } // Update the user's data in the database - await prisma.userInfo.update({ + await prisma.guildsXP.update({ where: { - id: userId, + userId_guildId: { + userId: userId, + guildId: guildId, + }, + }, + data: { + level: guildsXPData.level, + exp: guildsXPData.exp, }, - data: { guildsxp: JSON.stringify(guildsxp) }, }); } catch (error) { console.error('Error handling user data:', error); From fefabb10c39735d791520fe75d7b7869499cea46 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 16 Jun 2023 19:16:49 -0600 Subject: [PATCH 09/79] =?UTF-8?q?(=E2=94=AC=E2=94=AC=EF=B9=8F=E2=94=AC?= =?UTF-8?q?=E2=94=AC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/database/userInfo.ts | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/src/database/userInfo.ts b/src/database/userInfo.ts index b6afd06..2dd1503 100644 --- a/src/database/userInfo.ts +++ b/src/database/userInfo.ts @@ -1,5 +1,6 @@ +/* eslint-disable quotes */ import { PrismaClient, UserInfo } from '@prisma/client'; -import type { UserResolvable } from 'discord.js'; +import type { User, UserResolvable } from 'discord.js'; import { resolveUserId } from '../utils/id'; const prisma = new PrismaClient(); @@ -7,16 +8,34 @@ const prisma = new PrismaClient(); export const getUserInfo = async (user: UserResolvable) => prisma.userInfo.findFirst({ where: { id: resolveUserId(user) } }); -export const upsertUserInfo = async (user: UserResolvable) => - prisma.userInfo.upsert({ - where: { id: resolveUserId(user) }, - create: { +export const upsertUserInfo = async (user: User, guildId: string): Promise => { + const existingUserInfo = await prisma.userInfo.findUnique({ + where: { + id: resolveUserId(user), + }, + }); + + if (existingUserInfo) { + return existingUserInfo; + } + + const createdUserInfo = await prisma.userInfo.create({ + data: { id: resolveUserId(user), - guildsxp: '0', // Provide a default value for guildsxp + userId: user.id, + userName: user.username, + guildId: guildId, }, - update: {}, }); + return createdUserInfo; +}; + + + + + + export const getUserBalance = async (user: UserResolvable): Promise<{ balance: number; donuts: number }> => { const userInfo = await prisma.userInfo.findUnique({ where: { @@ -54,5 +73,3 @@ export const updateBalance = async ( return updatedUserInfo; }; -export { resolveUserId }; - From cf979a05a002bf4d424c114e9b35cf1a19ed1b38 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 16 Jun 2023 19:17:53 -0600 Subject: [PATCH 10/79] (T_T) --- src/commands/crime.ts | 40 ++++++++++++++++++++++++++++++++++++++++ src/commands/daily.ts | 27 +++++++++++++++++++++++++++ src/commands/work.ts | 29 +++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 src/commands/crime.ts create mode 100644 src/commands/daily.ts create mode 100644 src/commands/work.ts diff --git a/src/commands/crime.ts b/src/commands/crime.ts new file mode 100644 index 0000000..374715b --- /dev/null +++ b/src/commands/crime.ts @@ -0,0 +1,40 @@ +//crime.ts +import { db } from "../../database/database"; +import { upsertUserInfo } from "../../database/userInfo"; +import { constants, text } from "../../providers/config"; +import { Command } from "../../structures/Command"; +import { format } from "../../utils/string"; +import pms from "pretty-ms"; +import { randRange, sampleArray } from "../../utils/utils"; +const cooldowns: Record = {}; + +export const command = new Command("crime", "Try your chances on doing crime!") + .setExecutor(async int => { + if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { + await int.reply( + format( + text.errors.cooldown, + pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) + ) + ); + return; + } + const result = [ + "Succesful", + "Failure" + ]; + const awnser = result[Math.floor(Math.random() * result.length)]; + if (awnser === "Failure") { + const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const obtained = randRange(...constants.crime.amountRange); + cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; + await db.userInfo.update({ where: { id: info.id }, data: { balance: { decrement: obtained } } }); + await int.reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); + } else { + const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const obtained = randRange(...constants.crime.amountRange); + cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; + await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); + await int.reply(format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``)); + } + }); diff --git a/src/commands/daily.ts b/src/commands/daily.ts new file mode 100644 index 0000000..532f62d --- /dev/null +++ b/src/commands/daily.ts @@ -0,0 +1,27 @@ +//daily.ts +import { db } from "../../database/database"; +import { upsertUserInfo } from "../../database/userInfo"; +import { constants, text } from "../../providers/config"; +import { Command } from "../../structures/Command"; +import { format } from "../../utils/string"; +import pms from "pretty-ms"; +import { randRange, sampleArray } from "../../utils/utils"; +const cooldowns: Record = {}; + +export const command = new Command("daily", "Get your daily income!.") + .setExecutor(async int => { + if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { + await int.reply( + format( + text.errors.cooldown, + pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) + ) + ); + return; + } + const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const obtained = randRange(...constants.daily.amountRange); + cooldowns[int.user.id] = Date.now() + constants.daily.cooldownMs; + await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); + await int.reply(format(sampleArray(text.commands.daily.responses), `\`$${obtained}\``)); + }); \ No newline at end of file diff --git a/src/commands/work.ts b/src/commands/work.ts new file mode 100644 index 0000000..7361990 --- /dev/null +++ b/src/commands/work.ts @@ -0,0 +1,29 @@ +/* eslint-disable quotes */ +/* eslint-disable linebreak-style */ +//work.ts +import { db } from "../../database/database"; +import { upsertUserInfo } from "../../database/userInfo"; +import { constants, text } from "../../providers/config"; +import { Command } from "../../structures/Command"; +import { format } from "../../utils/string"; +import pms from "pretty-ms"; +import { randRange, sampleArray } from "../../utils/utils"; +const cooldowns: Record = {}; + +export const command = new Command("work", "Gets you some money.") + .setExecutor(async int => { + if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { + await int.reply( + format( + text.errors.cooldown, + pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) + ) + ); + return; + } + const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const obtained = randRange(...constants.work.amountRange); + cooldowns[int.user.id] = Date.now() + constants.work.cooldownMs; + await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); + await int.reply(format(sampleArray(text.commands.work.responses), `\`$${obtained}\``)); + }); From aba8bcdbf0dec86ae5e672bbcfde01df20ff464a Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 16 Jun 2023 19:20:16 -0600 Subject: [PATCH 11/79] =?UTF-8?q?=F0=9F=92=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prisma/schema.prisma | 74 +++++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 32 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ff00ea8..d382244 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -9,35 +9,32 @@ datasource db { } model WorkerInfo { - id String @id @db.VarChar(20) - createdAt DateTime @default(now()) - preparations Int @default(0) - deliveries Int @default(0) + id String @id @db.VarChar(20) + createdAt DateTime @default(now()) + preparations Int @default(0) + deliveries Int @default(0) deliveryMessage String? } model UserInfo { - id String @id @db.VarChar(30) - createdAt DateTime @default(now()) - balance Int @default(0) - newBalance Int? - tabLimit Float @default(0) - guildsxp Json @default("{}") - tab Tab? - donuts Int @default(0) + id String @id @db.VarChar(30) + createdAt DateTime @default(now()) + balance Int @default(0) + newBalance Int? + tabLimit Float @default(0) + tab Tab? + donuts Int @default(0) + guildsxp Json @default("{}") + guildsxpData GuildsXP[] } - -model ServerInfo { - id String @id @db.VarChar(30) - createdAt DateTime @default(now()) - data Json -} +model Tree { + id String @id + age Int + water DateTime + maxAge Int -model ServerConfig { - id String @id @db.VarChar(30) - xpEnabledChannels Json @default("[]") - levelNotificationChannelId String? + @@map(name: "trees") } model Tab { @@ -79,26 +76,28 @@ model CafeOrders { putOnTab Boolean? amount Float? } - model Orders { - id String @id @db.VarChar(10) - createdAt DateTime @default(now()) - user String @db.VarChar(20) + +model Orders { + id String @id @db.VarChar(10) + createdAt DateTime @default(now()) + user String @db.VarChar(20) details String status OrderStatus @default(Unprepared) - channel String @db.VarChar(20) - guild String @db.VarChar(20) - claimer String? @db.VarChar(20) - deliverer String? @db.VarChar(20) + channel String @db.VarChar(20) + guild String @db.VarChar(20) + claimer String? @db.VarChar(20) + deliverer String? @db.VarChar(20) image String? timeout DateTime? deleteReason String? bakeRating Int? prepRating Int? deliveryRating Int? - flags Int @default(0) + flags Int @default(0) putOnTab Boolean? amount Float? } + model dishes { id String @id @db.VarChar(1234) status Int @@ -124,7 +123,7 @@ model CustomDrink { updatedAt DateTime @updatedAt } -enum CafeStatus { //Cafe Status used to be OrderStatus. +enum CafeStatus { Unprepared Preparing Brewing @@ -148,4 +147,15 @@ enum OrderStatus { Cancelled Deleted Failed +} + +model GuildsXP { + userId String + guildId String + userName String // Add the userName field + level Int @default(0) + exp Int @default(0) + user UserInfo @relation(fields: [userId], references: [id]) + + @@unique([userId, guildId]) } \ No newline at end of file From 54fa3073011f8a6d8e0a131a4bfebc03cf6d68b2 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Thu, 22 Jun 2023 11:42:49 -0600 Subject: [PATCH 12/79] Stuffs --- prisma/schema.prisma | 35 ++++----- src/commands/Devs/Select.ts | 56 ++++++++++++++ src/commands/Devs/button.ts | 39 ++++++++++ src/commands/Devs/transfer.ts | 90 +++++++++++++++++++++++ src/commands/economy/balance.ts | 3 +- src/commands/economy/crime.ts | 11 +-- src/commands/economy/daily.ts | 5 +- src/commands/economy/work.ts | 5 +- src/commands/orders/worker/deliver.ts | 2 +- src/commands/orders/worker/dishs.ts | 29 ++++++++ src/commands/orders/worker/wash.ts | 54 ++++++++++++++ src/commands/orders/worker/workerstats.ts | 50 +++++++++++++ src/commands/public/notifi.ts | 49 ++++++++++++ src/commands/public/profile.ts | 39 ++++++++-- src/database/userInfo.ts | 4 - src/events/ExpCreate.ts | 17 ++++- 16 files changed, 447 insertions(+), 41 deletions(-) create mode 100644 src/commands/Devs/Select.ts create mode 100644 src/commands/Devs/button.ts create mode 100644 src/commands/Devs/transfer.ts create mode 100644 src/commands/orders/worker/dishs.ts create mode 100644 src/commands/orders/worker/wash.ts create mode 100644 src/commands/orders/worker/workerstats.ts create mode 100644 src/commands/public/notifi.ts diff --git a/prisma/schema.prisma b/prisma/schema.prisma index d382244..339fe18 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -17,15 +17,16 @@ model WorkerInfo { } model UserInfo { - id String @id @db.VarChar(30) - createdAt DateTime @default(now()) - balance Int @default(0) - newBalance Int? - tabLimit Float @default(0) - tab Tab? - donuts Int @default(0) - guildsxp Json @default("{}") - guildsxpData GuildsXP[] + id String @id @db.VarChar(30) + createdAt DateTime @default(now()) + balance Int @default(0) + newBalance Int? + tabLimit Float @default(0) + tab Tab? + donuts Int @default(0) + guildsxp Json @default("{}") + guildsxpData GuildsXP[] + } model Tree { @@ -150,12 +151,12 @@ enum OrderStatus { } model GuildsXP { - userId String - guildId String - userName String // Add the userName field - level Int @default(0) - exp Int @default(0) - user UserInfo @relation(fields: [userId], references: [id]) - + userId String + guildId String + userName String // Add the userName field + level Int @default(0) + exp Int @default(0) + user UserInfo @relation(fields: [userId], references: [id]) + notificationChannelId String? // New field for notification channel ID @@unique([userId, guildId]) -} \ No newline at end of file +} diff --git a/src/commands/Devs/Select.ts b/src/commands/Devs/Select.ts new file mode 100644 index 0000000..a3f400d --- /dev/null +++ b/src/commands/Devs/Select.ts @@ -0,0 +1,56 @@ +import { development } from "../../providers/env"; +import { execSync } from "child_process"; +import { format } from "../../utils/string"; +import { transpile } from "typescript"; +import { permissions } from "../../providers/permissions"; +import { Command } from "../../structures/Command"; +import { client } from "../../providers/client"; +import { channel } from "diagnostics_channel"; +import { StringSelectMenuBuilder, EmbedBuilder } from "discord.js"; + +export const command = new Command("select", "Select Menu Example") + .addPermission(permissions.developer) // add permission here + .setExecutor(async (interaction) => { + const select = new StringSelectMenuBuilder() + .setCustomId("select") + .setPlaceholder("Choose an option") + .addOptions([ + { + label: "Option 1", + value: "option_1", + description: "The first option", + type: 3 // changed from "SELECT_MENU" to 3 + }, + { + label: "Option 2", + value: "option_2", + description: "The second option", + type: 3 // changed from "SELECT_MENU" to 3 + }, + { + label: "Option 3", + value: "option_3", + description: "The third option", + type: 3 // changed from "SELECT_MENU" to 3 + }, + ]); + + const embed = new EmbedBuilder() + .setColor("#0099ff") + .setTitle("Select Menu Example") + .setDescription("Please select an option:") + .addFields( + { name: "Option 1", value: "The first option" }, + { name: "Option 2", value: "The second option" }, + { name: "Option 3", value: "The third option" } + ); + await interaction.reply({ + embeds: [embed], + components: [{ + type: 1, // changed from "ACTION_ROW" to 1 + components: [select] + }], + }); + }); + +module.exports = { command }; diff --git a/src/commands/Devs/button.ts b/src/commands/Devs/button.ts new file mode 100644 index 0000000..0279ba6 --- /dev/null +++ b/src/commands/Devs/button.ts @@ -0,0 +1,39 @@ +import { development } from "../../providers/env"; +import { execSync } from "child_process"; +import { format } from "../../utils/string"; +import { transpile } from "typescript"; +import { permissions } from "../../providers/permissions"; +import { Command } from "../../structures/Command"; +import { client } from "../../providers/client"; +import { channel } from "diagnostics_channel"; +import { ButtonBuilder } from "discord.js"; +import { ButtonStyle, ActionRowBuilder } from "discord.js"; + +export const command = new Command("but", "hm.") + .addPermission(permissions.developer) // add permission here + .setExecutor(async int => { + const button1 = new ButtonBuilder() + .setLabel("Click me!") + .setStyle(ButtonStyle.Link) //Button Styles: Primary, Secondary, Success, Danger, Link + .setURL("https://drunk-bartender.org/Policy"); + + const button2 = new ButtonBuilder() + .setLabel("Click me too!") + .setStyle(ButtonStyle.Primary) + .setCustomId("2"); + + const button3 = new ButtonBuilder() + .setLabel("Click me as well!") + .setStyle(ButtonStyle.Success) + .setCustomId("3"); + + const row = new ActionRowBuilder() + .addComponents(button1, button2, button3,); + + await int.reply({ + content: "Here are three buttons:", + components: [row], + }); + }); + +module.exports = { command }; diff --git a/src/commands/Devs/transfer.ts b/src/commands/Devs/transfer.ts new file mode 100644 index 0000000..531ecb8 --- /dev/null +++ b/src/commands/Devs/transfer.ts @@ -0,0 +1,90 @@ +/* eslint-disable indent */ +import { PrismaClient } from "@prisma/client"; +import { CommandInteraction } from "discord.js"; +import { permissions } from "../../providers/permissions"; +import { Command } from "../../structures/Command"; + +const prisma = new PrismaClient(); + +export const command = new Command("transfer", "Transfers data from the old schema to the new schema.") + .addPermission(permissions.admin) + .setExecutor(async (int: CommandInteraction) => { + try { + // Retrieve all the existing user data + const usersData = await prisma.userInfo.findMany(); + + console.log(`Total user data count: ${usersData.length}`); + + // Transfer the data to the new schema + for (const data of usersData) { + const userId = data.id; + const guildsXPData = data.guildsxp; + + console.log(`Transferring data for user with ID: ${userId}`); + + const guildsXPDataObject = parseGuildsXPData(guildsXPData); + + console.log(`GuildsXPDataObject: ${JSON.stringify(guildsXPDataObject)}`); + + for (const guildId in guildsXPDataObject) { + const { id } = guildsXPDataObject[guildId]; + + console.log(`Transferring data for guild with ID: ${guildId}`); + + // Create or update the guildsXP data in the new schema + await prisma.guildsXP.upsert({ + where: { userId_guildId: { userId, guildId } }, + create: { + guildId: guildId, + userName: "", // Set userName as empty string for now + level: guildsXPDataObject[guildId].level, + exp: guildsXPDataObject[guildId].xp, + user: { connect: { id: userId } }, + }, + update: { + userName: "", // Set userName as empty string for now + level: guildsXPDataObject[guildId].level, + exp: guildsXPDataObject[guildId].xp, + }, + }); + + console.log(`Data transferred for guild with ID: ${guildId}`); + } + + // Update the guildsxp field to be empty + await prisma.userInfo.update({ + where: { id: userId }, + data: { guildsxp: "{}" }, + }); + + console.log(`Data transferred for user with ID: ${userId}`); + } + + await int.reply("Data transfer completed successfully."); + } catch (error) { + console.error("Error transferring data:", error); + await int.reply("Error transferring data. Please check the logs for more information."); + } finally { + await prisma.$disconnect(); + } + }); + +// Function to parse the guildsXPData string and handle potential errors +function parseGuildsXPData(guildsXPData: string | null): Record { + try { + if (guildsXPData === null) { + // Handle the case where guildsXPData is null + return {}; + } + + const parsedData = JSON.parse(guildsXPData); + + if (typeof parsedData === "object" && !Array.isArray(parsedData)) { + return parsedData; + } + } catch (error) { + console.error("Error parsing guildsXPData:", error); + } + + return {}; +} diff --git a/src/commands/economy/balance.ts b/src/commands/economy/balance.ts index 22abc7b..1d67bcf 100644 --- a/src/commands/economy/balance.ts +++ b/src/commands/economy/balance.ts @@ -1,3 +1,4 @@ +/* eslint-disable linebreak-style */ import { getUserInfo } from "../../database/userInfo"; import { text } from "../../providers/config"; import { Command } from "../../structures/Command"; @@ -8,7 +9,7 @@ export const command = new Command("balance", "Checks your balance.") const info = await getUserInfo(int.user); const balance = info?.balance ?? 0; //const donuts = info?.donuts ?? 0; - const replyMessage = format(text.commands.balance.success, balance) //+ "\n" + + const replyMessage = format(text.commands.balance.success, balance); //+ "\n" + //format(text.commands.balance.success1, donuts); await int.reply(replyMessage); }); diff --git a/src/commands/economy/crime.ts b/src/commands/economy/crime.ts index ccf3df2..374715b 100644 --- a/src/commands/economy/crime.ts +++ b/src/commands/economy/crime.ts @@ -1,3 +1,4 @@ +//crime.ts import { db } from "../../database/database"; import { upsertUserInfo } from "../../database/userInfo"; import { constants, text } from "../../providers/config"; @@ -21,16 +22,16 @@ export const command = new Command("crime", "Try your chances on doing crime!") const result = [ "Succesful", "Failure" - ] - let awnser = result[Math.floor(Math.random() * result.length)]; + ]; + const awnser = result[Math.floor(Math.random() * result.length)]; if (awnser === "Failure") { - const info = await upsertUserInfo(int.user); + const info = await upsertUserInfo(int.user, int.guild?.id || ''); const obtained = randRange(...constants.crime.amountRange); cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: -obtained } } }); + await db.userInfo.update({ where: { id: info.id }, data: { balance: { decrement: obtained } } }); await int.reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); } else { - const info = await upsertUserInfo(int.user); + const info = await upsertUserInfo(int.user, int.guild?.id || ''); const obtained = randRange(...constants.crime.amountRange); cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); diff --git a/src/commands/economy/daily.ts b/src/commands/economy/daily.ts index 1b2fd2f..532f62d 100644 --- a/src/commands/economy/daily.ts +++ b/src/commands/economy/daily.ts @@ -1,3 +1,4 @@ +//daily.ts import { db } from "../../database/database"; import { upsertUserInfo } from "../../database/userInfo"; import { constants, text } from "../../providers/config"; @@ -18,9 +19,9 @@ export const command = new Command("daily", "Get your daily income!.") ); return; } - const info = await upsertUserInfo(int.user); + const info = await upsertUserInfo(int.user, int.guild?.id || ''); const obtained = randRange(...constants.daily.amountRange); cooldowns[int.user.id] = Date.now() + constants.daily.cooldownMs; await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); await int.reply(format(sampleArray(text.commands.daily.responses), `\`$${obtained}\``)); - }); + }); \ No newline at end of file diff --git a/src/commands/economy/work.ts b/src/commands/economy/work.ts index 5796149..7361990 100644 --- a/src/commands/economy/work.ts +++ b/src/commands/economy/work.ts @@ -1,3 +1,6 @@ +/* eslint-disable quotes */ +/* eslint-disable linebreak-style */ +//work.ts import { db } from "../../database/database"; import { upsertUserInfo } from "../../database/userInfo"; import { constants, text } from "../../providers/config"; @@ -18,7 +21,7 @@ export const command = new Command("work", "Gets you some money.") ); return; } - const info = await upsertUserInfo(int.user); + const info = await upsertUserInfo(int.user, int.guild?.id || ''); const obtained = randRange(...constants.work.amountRange); cooldowns[int.user.id] = Date.now() + constants.work.cooldownMs; await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); diff --git a/src/commands/orders/worker/deliver.ts b/src/commands/orders/worker/deliver.ts index 5f6fae2..cc861ab 100644 --- a/src/commands/orders/worker/deliver.ts +++ b/src/commands/orders/worker/deliver.ts @@ -1,3 +1,4 @@ +/* eslint-disable quotes */ // Main code import { v4 as uuidv4 } from 'uuid'; import { CafeStatus, OrderStatus } from "@prisma/client"; @@ -66,7 +67,6 @@ export const command = new Command( }); }); -// Interaction Create Event (for handling select menu interaction) // Interaction Create Event (for handling select menu interaction) client.on("interactionCreate", async (interaction) => { if (!interaction.isStringSelectMenu()) return; diff --git a/src/commands/orders/worker/dishs.ts b/src/commands/orders/worker/dishs.ts new file mode 100644 index 0000000..e4b487d --- /dev/null +++ b/src/commands/orders/worker/dishs.ts @@ -0,0 +1,29 @@ +import { CommandInteraction, EmbedBuilder } from 'discord.js'; +import { PrismaClient } from '@prisma/client'; +import { permissions } from "../../../providers/permissions"; +import { Command } from "../../../structures/Command"; + +const prisma = new PrismaClient(); + +export const command = new Command('dishes', 'Get a list of all dirty dishes.') + .addAlias('plates') + .addShortcuts('dsh') + .addPermission(permissions.employee) + .setExecutor(async (interaction: CommandInteraction) => { + const dishes = await prisma.dishes.findMany(); + const statuses = ['Filthy', 'Smells Weird', 'Literally Ancient', 'Mildly Dirty']; + + const embed = new EmbedBuilder() + .setTitle('đŸŊ Dishes') + .setFooter({ text: 'Run /wash [id] to wash a dish!' }); + + if (dishes.length === 0) { + embed.setDescription('No dishes to wash right now.'); + } else { + for (const dish of dishes) { + embed.addFields({ name: `Dish ID: ${dish.id}`, value: `Status: ${statuses[dish.status]}`, inline: true }); + } + } + + await interaction.reply({ embeds: [embed] }); + }); diff --git a/src/commands/orders/worker/wash.ts b/src/commands/orders/worker/wash.ts new file mode 100644 index 0000000..983d4a0 --- /dev/null +++ b/src/commands/orders/worker/wash.ts @@ -0,0 +1,54 @@ +import { CommandInteraction } from 'discord.js'; +import { PrismaClient } from '@prisma/client'; +import { permissions } from "../../../providers/permissions"; +import { Command } from "../../../structures/Command"; +import { getUserBalance, updateBalance } from "../../../database/userInfo"; + +const prisma = new PrismaClient(); + +export const command = new Command('wash', 'Wash a dish.') + .addAlias('clean') + .addPermission(permissions.employee) + .addOption("string", (o) => o + .setRequired(true) + .setName("wash") + .setDescription( + "The ID of the dish to wash." + ) + ) + .addOption("boolean", (o) => + o.setName("inactive").setDescription("Include inactive orders too.") + ) + .setExecutor(async (interaction: CommandInteraction) => { + const all = await prisma.dishes.findMany({ take: 10 }); + if (!all.length) { + await interaction.reply("There are currently no dishes to wash."); + return; + } + + // Get the dish ID from the interaction options + const dishId = interaction.options.getString('wash'); + if (!dishId) { + await interaction.reply("You must specify a dish ID to wash."); + return; + } + + const dish = all.find(x => x.id === dishId); + if (!dish) { + await interaction.reply("That is not a valid dish."); + return; + } + + const time = Math.floor(Math.random() * 12) + 12; + await interaction.reply(`Washing dish \`${dish.id}\`, this will take ${time} seconds.`); + + await prisma.dishes.delete({ where: { id: dish.id } }); + + setTimeout(async () => { + const userInfo = await getUserBalance(interaction.user); + const donuts = userInfo.donuts + 60; + await updateBalance(interaction.user, userInfo.balance, donuts); + + await interaction.followUp(`${interaction.user}, dish ${dish.id} has finished washing. You received 60 donuts.`); + }, time * 1000); + }); \ No newline at end of file diff --git a/src/commands/orders/worker/workerstats.ts b/src/commands/orders/worker/workerstats.ts new file mode 100644 index 0000000..b8f7aea --- /dev/null +++ b/src/commands/orders/worker/workerstats.ts @@ -0,0 +1,50 @@ +import { CommandInteraction, EmbedBuilder } from "discord.js"; +import { permissions } from "../../../providers/permissions"; +import { Command } from "../../../structures/Command"; +import { PrismaClient, Prisma } from '@prisma/client'; +import { getWorkerInfo, getWorkerInfos } from "../../../database/workerInfo"; + +const prisma = new PrismaClient(); + +export const command = new Command("workerstats", "Checks the global worker stats.") + .addSyntax("monthly", "text") + .addPermission(permissions.employee) + .addShortcuts("ws") + .setExecutor(async (int: CommandInteraction) => { + const args = int.options.getString("monthly")?.includes("m") ? ["monthly", ...int.options.getString("monthly").split(" ").slice(1)] : []; + const workerInfos = await getWorkerInfos(); // Retrieve the workerInfos + let data = workerInfos; + let isMonthly = false; + if (args[0] && args[0].includes("m")) { + data = workerInfos; + args.shift(); + isMonthly = true; + } + let sumc = data.reduce((acc, info) => acc + info.preparations, 0); // Calculate sum of cooks + let sumd = data.reduce((acc, info) => acc + info.deliveries, 0); // Calculate sum of delivers + let sum = sumc + sumd; + let avgc = sumc / data.length; // Calculate average cooks + let avgd = sumd / data.length; // Calculate average delivers + let avg = avgc + avgd; + const li = [sumc, sumd, sum, avgc, avgd, avg].map(item => { + if (isNaN(item)) return 0; + return item; + }); + sumc = li[0]; + sumd = li[1]; + sum = li[2]; + avgc = li[3]; + avgd = li[4]; + const embed = new EmbedBuilder() + .setTitle(`The Global ${isMonthly ? "Monthly " : ""}Worker Stats`) + .addFields( + { name: "Total preps", value: `${sumc} preps`, inline: true }, + { name: "Average preps", value: `${avgc} preps`, inline: true }, + { name: "Total deliveries", value: `${sumd} delivers`, inline: true }, + { name: "Average deliveries", value: `${avgd} deliveries`, inline: true }, + { name: "Total", value: `${sum} preps and deliveries`, inline: true }, + { name: "Average", value: `${avg} preps and deliveries`, inline: true } + ) + .setThumbnail("https://images.emojiterra.com/twitter/512px/1f4ca.png"); + int.reply({ embeds: [embed] }); + }); diff --git a/src/commands/public/notifi.ts b/src/commands/public/notifi.ts new file mode 100644 index 0000000..41a76b5 --- /dev/null +++ b/src/commands/public/notifi.ts @@ -0,0 +1,49 @@ +/* eslint-disable quotes */ +/* eslint-disable indent */ +import { PrismaClient } from "@prisma/client"; +import { Command } from "../../structures/Command"; +import { permissions } from "../../providers/permissions"; + +const prisma = new PrismaClient(); + +export const command = new Command("notifi", + "Sets the channel for notifications.") + .addPermission(permissions.employee) + .addOption("channel", (o) => + o.setName("channel").setDescription("The channel to set for notifications.").setRequired(true) + ) + .setExecutor(async (int) => { + // Ignore interactions from bots or from DMs + if (int.user.bot || !int.guild) return; + + // Get the ID of the channel from the command option + const channelId = int.options.getChannel('channel')?.id; + if (!channelId) { + int.reply('Please provide a valid channel.'); + return; + } + + // Update the notification channel in the database + await prisma.guildsXP.upsert({ + where: { + userId_guildId: { + userId: int.user.id, + guildId: int.guild.id, + }, + }, + create: { + userId: int.user.id, + guildId: int.guild.id, + userName: int.user.username, + level: 0, + exp: 0, + location: 'default', + notificationChannelId: channelId, // Set the notification channel ID + }, + update: { + notificationChannelId: channelId, // Update the notification channel ID + }, + }); + + int.reply(`Notification channel set to <#${channelId}>.`); + }); diff --git a/src/commands/public/profile.ts b/src/commands/public/profile.ts index 3808fba..84782c8 100644 --- a/src/commands/public/profile.ts +++ b/src/commands/public/profile.ts @@ -1,4 +1,3 @@ -//profile.ts /* eslint-disable quotes */ /* eslint-disable indent */ import { CommandInteraction, EmbedBuilder } from "discord.js"; @@ -16,18 +15,44 @@ export const command = new Command("profile", "Shows your profile.") } try { - const userGuildData = await prisma.guildsXP.findUnique({ + const userId = int.user.id; + const guildId = int.guild.id; + + // Check if the user's guildsXP data exists in the database + let userGuildData = await prisma.guildsXP.findUnique({ where: { userId_guildId: { - userId: int.user.id, - guildId: int.guild.id, + userId: userId, + guildId: guildId, }, }, }); if (!userGuildData) { - await int.reply("You don't have a profile yet."); - return; + // If the data doesn't exist, create it in the database + userGuildData = await prisma.guildsXP.create({ + data: { + userId: userId, + guildId: guildId, + userName: int.user.username, + level: 0, + exp: 0, + user: { connect: { id: userId } }, // Connect the guildsXP to the UserInfo + }, + }); + } else if (!userGuildData.userName) { + // If the userName is blank, update it with the user's username + userGuildData = await prisma.guildsXP.update({ + where: { + userId_guildId: { + userId: userId, + guildId: guildId, + }, + }, + data: { + userName: int.user.username, + }, + }); } const nextLevelExp = userGuildData.level * 100; @@ -48,4 +73,4 @@ export const command = new Command("profile", "Shows your profile.") console.error('Error retrieving user data:', error); return; } - }); \ No newline at end of file + }); diff --git a/src/database/userInfo.ts b/src/database/userInfo.ts index 2dd1503..2635356 100644 --- a/src/database/userInfo.ts +++ b/src/database/userInfo.ts @@ -32,10 +32,6 @@ export const upsertUserInfo = async (user: User, guildId: string): Promise => { const userInfo = await prisma.userInfo.findUnique({ where: { diff --git a/src/events/ExpCreate.ts b/src/events/ExpCreate.ts index 89e49b7..c601188 100644 --- a/src/events/ExpCreate.ts +++ b/src/events/ExpCreate.ts @@ -59,8 +59,19 @@ client.on('messageCreate', async (message) => { // If they do, increase their level and reset their XP guildsXPData.level += 1; guildsXPData.exp = 0; - // Send a message to the user to notify them of the level up - message.reply(`Congratulations! You have leveled up to level ${guildsXPData.level}!`); + + // Get the ID of the notification channel from the database + const notificationChannelId = guildsXPData.notificationChannelId; + if (notificationChannelId) { + // Get the channel from the client + const notificationChannel = client.channels.cache.get(notificationChannelId); + + // Check if the channel exists and is a text channel + if (notificationChannel && notificationChannel.isTextBased()) { + // Send a notification to the channel + notificationChannel.send(`${message.author.username} has leveled up to level ${guildsXPData.level}!`); + } + } } // Update the user's data in the database @@ -85,4 +96,4 @@ client.on('messageCreate', async (message) => { // Close the Prisma connection when the script is exiting process.on('beforeExit', () => { prisma.$disconnect(); -}); \ No newline at end of file +}); From 928c80889769014fbdbdfa44440aa9affa2a5731 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Thu, 22 Jun 2023 11:47:24 -0600 Subject: [PATCH 13/79] Update README.md --- README.md | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 60ef8dc..686f2f9 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,73 @@ -# Cafe -An Brand new cafe! +[![Patreon](https://img.shields.io/badge/Patreon-F96854?style=for-the-badge&logo=patreon&logoColor=white)](https://www.patreon.com/drunkbartender) +[![Discord](https://img.shields.io/badge/Discord-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https://discord.com/invite/pY6hNVs) +[![Github](https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white)](https://github.com/shadow6060/DBRewrite) +[![Typescript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/) +[![Website](https://img.shields.io/badge/-Website-blueviolet?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGF2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDg4LCAyMDIwLzA3LzEwLTIyOjA2OjUzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIyLTEyLTI1VDEyOjU1OjE1WiIgeG1wOk1vZGlmeURhdGU9IjIwMjItMTItMjVUMTM6MDE6NDJaIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIyLTEyLTI1VDEzOjAxOjQyWiIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Yjc2ODI5ZTQtY2RhMC0zZjQxLThlNWItMzNkY2Q5Nzc3NmJiIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTU4Nzc3ODAtZTE5ZS1kZDRiLWIwYjItY2VkN2UyYjVlN2NiIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6N2FhMjBmYmItNzEwNy05NTQ4LTgxZmUtODFjZTMxZGY2M2M5Ij4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3YWEyMGZiYi03MTA3LTk1NDgtODFmZS04MWNlMzFkZjYzYzkiIHN0RXZ0OndoZW49IjIwMjItMTItMjVUMTI6NTU6MTVaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMCAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Yjc2ODI5ZTQtY2RhMC0zZjQxLThlNWItMzNkY2Q5Nzc3NmJiIiBzdEV2dDp3aGVuPSIyMDIyLTEyLTI1VDEzOjAxOjQyWiIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pnios6IAAAJaSURBVCiRndLLS5RRHIfx7++cd5x3HGfSGUZR8zqFlWZONyy7aEHRIozAIiJaGeiiIDAoENqE4C4QKkgoyS4QKegiWmWIl02hpQaZMU5iMZrXmffMO+85p//BZ//ZPaS1xlYy+gbev7ZFShLnNoHWRkaHx3qfPe/P8rnFiZOn6hsbL7YKkXIYY8SYTk18nR6dGP/0wvBHRy5nMAmPocDNTOTn27ecqkB318ep5vq9c+HSxHSTcNLI8rrA3S6U7/NdT05tRmj2boYW5KTGZtVcIIjM/UUoycr1oOGBOBwp08UPW9xvF5a41f7E6Skv5NtuN+JS3EKChXc4WLTUQss7XGjuxdmMEBaDxQKFQUQMH1R2hYMUTyW+RO32pLQ6XQXWmj/PMo20zcDcTJWF5HpdISwuKKFtDoM5blIA1gmlpTz70X16U2SqYGg75bx6jGF286XqiC9rd10pzDtnGBOCEZEC4xoiwYE0wFJkVISNhkAuq4bDULmb3Gzou773dEi2xFYQ7/oshTY0wDWkQ+BcAT6F6JJaq71mHz/XJmtnfshfp4/hkDF4A0fTxOOWS9cMR7HT61MhmMDqphZFYQCrBHtDqivnDefIHpJcpiVIwwhlsw9pglYuUGsFeZnJEJvXzkxMjh+MYBf8DNWVyCnIZ/3BXJZpBrhvZd6BIYi8iaSG6SesWkz9/I2Nth7Z+S+BSW6wmuW/JFNCwfQ4eRubLsRhWB3doo+aDqBDatLEoW3JnNkl9W1mXg+aHljlBVRVXYKryXXA7SOtGcOfFR0bn5QDtNVX2ZYUgP/eWQ654oa7+gAAAABJRU5ErkJggg==)](https://drunk-bartender.org) +

+ +

+ +

Drunk Bartender

+
+

❓ What is Drunk Bartender

+
+Drunk bartender is a bot that was created in August of 2019, + +We are a part of an independent group of developers who have been working on this for the longest time with the same original team as in the beginning We have some commands and recently moved over to Slash Commands to follow Discord Requirements to continue operating and work with most other bots that follow it, and we are currently working on moving into Discord.js v14 + +We can also be reached at anytime and we we have always worked hard on providing premium support to anyone who reaches out to us as that is the most important to us as your time is valuable so we do our best to make your experience the best so you can have more enjoyment with your time with us that is what keeps us going with this project and will always work our hardest to bring you the best new features we can and bring more fun commands + +And we are always open to hearing suggestions from the community about new features and love to hear your feedback on things we are glad that you have decided to spend some time with us as that is really important to us and if you want you also get to know us as most of our dms are open and are always ready to answer any questions +
+

ℹ Commands

+ +| Commands | Usage | Permissions | +| :--- | :---: | ---: | +| /balance | Gets a user's balance. | Global 🌐 | +| /work | Work to get money. | Global 🌐 | +| /crime | Commit a crime for money. | Global 🌐 | +| /daily | Gets money daily. | Global 🌐 | +| /order | Orders a drink. | Global 🌐 | +| /tip | Tip's a bartender. | Global 🌐 | +| /status | Gets the status of an order. | Global 🌐 | +| /cancel | Cancel's an order. | Global 🌐 | +| /feedback | Sends a feedback. | Global 🌐 | +| /doggo | Cute images of dogs. | Global 🌐 | +| /goose | Cool images of goose. | Global 🌐 | +| /meow | Wow images of cats. | Global 🌐 | +| /memes | Get some very funny memes. | Global 🌐 | +| /pat | Pat someone. | Global 🌐 | +| /tickle | Tickle your friends. | Global 🌐 | +| /hug | Give someone a big old hug. | Global 🌐 | +| /slap | Slap a very naughty person. | Global 🌐 | +| /status | Get a status of your order. | Global 🌐 | +| /blacklist | Blacklist's a user. | Admin 🛠 | +| /unblacklist | Unblacklist's a user. | Admin 🛠 | +| /list | List's all available orders. | Staff 🛠 | +| /claim | Claim's a user's order. | Staff 🛠 | +| /unclaim | Unclaim's a user's order. | Staff 🛠 | +| /fetch | Fetches the status of an order. | Staff 🛠 | +| /duty | Gives the on-duty role. | Staff 🛠 | +| /deliverymessage set | Sets a delivery message. | Staff 🛠 | +| /deliverymessage fetch | Gets your delivery message. | Staff 🛠 | +| /deliverymessage placeholders | Gets your delivery message placeholders. | Staff 🛠 | +| /brew | Brew's an order. | Staff 🛠 | +| /delete | Delete's a order. | Staff 🛠 | + +
+

🔗 Links

+ +- [GitHub](https://github.com/shadow6060/DBRewrite) +
+ +- [Website](https://drunk-bartender.org) +
+ +- [Patreon](https://www.patreon.com/drunkbartender) +
+ +- [Discord](https://discord.gg/pY6hNVs) +
+ +- [Appeals](https://www.drunk-bartender.org/Appeals) +
From a1fe218a3727579143c44b9e926445b5de870025 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 23 Jun 2023 12:49:36 -0600 Subject: [PATCH 14/79] Fixs --- src/commands/orders/worker/delete.ts | 6 ++--- src/commands/orders/worker/deliver.ts | 30 ++--------------------- src/commands/orders/worker/workerstats.ts | 2 ++ 3 files changed, 7 insertions(+), 31 deletions(-) diff --git a/src/commands/orders/worker/delete.ts b/src/commands/orders/worker/delete.ts index 79eb203..99fb8ac 100644 --- a/src/commands/orders/worker/delete.ts +++ b/src/commands/orders/worker/delete.ts @@ -30,9 +30,8 @@ export const command = new Command("delete", "Deletes an order.") try { await user.send(format(text.commands.delete.dm, order.details, reason)); } catch (error) { - // Failed to send DM to the user - await int.reply(text.commands.delete.dmFailed); - return; + // Failed to send DM to the user, continue deletion process anyway + //await int.reply(text.commands.delete.dmFailed); } await db.orders.update({ @@ -42,3 +41,4 @@ export const command = new Command("delete", "Deletes an order.") await int.reply(text.commands.delete.success); }); + diff --git a/src/commands/orders/worker/deliver.ts b/src/commands/orders/worker/deliver.ts index cc861ab..d60e0be 100644 --- a/src/commands/orders/worker/deliver.ts +++ b/src/commands/orders/worker/deliver.ts @@ -1,19 +1,17 @@ +/* eslint-disable no-constant-condition */ /* eslint-disable quotes */ // Main code -import { v4 as uuidv4 } from 'uuid'; import { CafeStatus, OrderStatus } from "@prisma/client"; import { ChannelType, GuildChannel, StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; import { db } from "../../../database/database"; -import { orderPlaceholders, generateOrderId, generateDishId, } from "../../../database/orders"; +import { orderPlaceholders, generateOrderId } from "../../../database/orders"; import { upsertWorkerInfo } from "../../../database/workerInfo"; import { client } from "../../../providers/client"; import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; -import { PrismaClient } from '@prisma/client'; -const prisma = new PrismaClient(); export const command = new Command( "deliver", "Delivers an order." @@ -110,30 +108,6 @@ client.on("interactionCreate", async (interaction) => { }, }); - // Create a new dish in the database each time an order is delivered - const statuses = ['Filthy', 'Smells Weird', 'Literally Ancient', 'Mildly Dirty']; - let uniqueId; - do { - uniqueId = await generateOrderId(); // Generate a unique ID for the dish - const existingDish = await prisma.dishes.findUnique({ - where: { - id: uniqueId - } - }); - if (!existingDish) break; // If there's no existing dish with this ID, we can use it - } while (true); - - await prisma.dishes.create({ - data: { - id: uniqueId, - status: Math.floor(Math.random() * statuses.length), - createdAt: new Date(), - updatedAt: new Date(), - }, - }); - - - const channel = client.channels.cache.get(order.channel) ?? await client.channels.fetch(order.channel).catch(() => null) ?? client.users.cache.get(order.user); if (!channel || (channel instanceof GuildChannel && channel.type !== ChannelType.GuildText)) { await interaction.reply({ content: text.commands.deliver.noChannel, ephemeral: true }); // Set ephemeral to true diff --git a/src/commands/orders/worker/workerstats.ts b/src/commands/orders/worker/workerstats.ts index b8f7aea..1c07365 100644 --- a/src/commands/orders/worker/workerstats.ts +++ b/src/commands/orders/worker/workerstats.ts @@ -1,3 +1,5 @@ +/* eslint-disable quotes */ +/* eslint-disable indent */ import { CommandInteraction, EmbedBuilder } from "discord.js"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; From aa648ccd1fc784c529abb8e169313a28964c5f0e Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 23 Jun 2023 17:41:41 -0600 Subject: [PATCH 15/79] Some fixs --- package.json | 2 +- src/commands/Devs/transfer.ts | 12 ++++++------ src/commands/orders/worker/leaderboard.ts | 1 + src/commands/public/profile.ts | 12 ++++++++++++ src/events/ExpCreate.ts | 13 ++++++++++++- src/providers/client.ts | 2 +- 6 files changed, 33 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 16e7319..1138696 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dbrewrite", - "version": "1.2.5", + "version": "1.3.1", "description": "", "main": "index.js", "scripts": { diff --git a/src/commands/Devs/transfer.ts b/src/commands/Devs/transfer.ts index 531ecb8..3308e67 100644 --- a/src/commands/Devs/transfer.ts +++ b/src/commands/Devs/transfer.ts @@ -13,23 +13,23 @@ export const command = new Command("transfer", "Transfers data from the old sche // Retrieve all the existing user data const usersData = await prisma.userInfo.findMany(); - console.log(`Total user data count: ${usersData.length}`); + //console.log(`Total user data count: ${usersData.length}`); // Transfer the data to the new schema for (const data of usersData) { const userId = data.id; const guildsXPData = data.guildsxp; - console.log(`Transferring data for user with ID: ${userId}`); + //console.log(`Transferring data for user with ID: ${userId}`); const guildsXPDataObject = parseGuildsXPData(guildsXPData); - console.log(`GuildsXPDataObject: ${JSON.stringify(guildsXPDataObject)}`); + //console.log(`GuildsXPDataObject: ${JSON.stringify(guildsXPDataObject)}`); for (const guildId in guildsXPDataObject) { const { id } = guildsXPDataObject[guildId]; - console.log(`Transferring data for guild with ID: ${guildId}`); + // console.log(`Transferring data for guild with ID: ${guildId}`); // Create or update the guildsXP data in the new schema await prisma.guildsXP.upsert({ @@ -48,7 +48,7 @@ export const command = new Command("transfer", "Transfers data from the old sche }, }); - console.log(`Data transferred for guild with ID: ${guildId}`); + // console.log(`Data transferred for guild with ID: ${guildId}`); } // Update the guildsxp field to be empty @@ -57,7 +57,7 @@ export const command = new Command("transfer", "Transfers data from the old sche data: { guildsxp: "{}" }, }); - console.log(`Data transferred for user with ID: ${userId}`); + //console.log(`Data transferred for user with ID: ${userId}`); } await int.reply("Data transfer completed successfully."); diff --git a/src/commands/orders/worker/leaderboard.ts b/src/commands/orders/worker/leaderboard.ts index 58d2dea..52969f1 100644 --- a/src/commands/orders/worker/leaderboard.ts +++ b/src/commands/orders/worker/leaderboard.ts @@ -1,3 +1,4 @@ +/* eslint-disable indent */ import { permissions } from "../../../providers/permissions"; import { CommandInteraction, EmbedBuilder, Message } from "discord.js"; import { ButtonBuilder, ButtonStyle, ActionRowBuilder } from "discord.js"; diff --git a/src/commands/public/profile.ts b/src/commands/public/profile.ts index 84782c8..294f93e 100644 --- a/src/commands/public/profile.ts +++ b/src/commands/public/profile.ts @@ -18,6 +18,18 @@ export const command = new Command("profile", "Shows your profile.") const userId = int.user.id; const guildId = int.guild.id; + // Check if the user exists in the userInfo table + const userInfo = await prisma.userInfo.findUnique({ + where: { + id: userId, + }, + }); + + if (!userInfo) { + await int.reply("You don't have a profile yet."); + return; + } + // Check if the user's guildsXP data exists in the database let userGuildData = await prisma.guildsXP.findUnique({ where: { diff --git a/src/events/ExpCreate.ts b/src/events/ExpCreate.ts index c601188..f0d5996 100644 --- a/src/events/ExpCreate.ts +++ b/src/events/ExpCreate.ts @@ -1,4 +1,3 @@ -//ExpCreate.ts /* eslint-disable quotes */ /* eslint-disable indent */ import { PrismaClient } from "@prisma/client"; @@ -33,6 +32,18 @@ client.on('messageCreate', async (message) => { }, 60000); // 60000 milliseconds = 60 seconds try { + // Check if the user exists in the userInfo table + const userInfo = await prisma.userInfo.findUnique({ + where: { + id: userId, + }, + }); + + if (!userInfo) { + console.log(`User with ID ${userId} does not exist in the userInfo table.`); + return; + } + // Create or retrieve the user's data from the database const guildsXPData = await prisma.guildsXP.upsert({ where: { diff --git a/src/providers/client.ts b/src/providers/client.ts index ce1c107..95279aa 100644 --- a/src/providers/client.ts +++ b/src/providers/client.ts @@ -21,7 +21,7 @@ export const client = new Client({ client.on("ready", () => { console.log(`Logged in as ${client.user?.tag}!`); client.user?.setPresence({ - activities: [{ name: "with Discord.js" }], + activities: [{ name: "We are online! Use slash cmds to order /order & You get money through /work" }], status: "online", // Online , idle , dnd (Do Not Disturb), invisible , offline }); }); From 9ebb5670fbf573aa95f5dab63caaf4825a4b5d9b Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 23 Jun 2023 19:21:13 -0600 Subject: [PATCH 16/79] DMs --- src/providers/config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/providers/config.ts b/src/providers/config.ts index 09aef0c..02efa1e 100644 --- a/src/providers/config.ts +++ b/src/providers/config.ts @@ -166,6 +166,7 @@ const textSchema = z userDmDisabled: z.string(), dmFailed: z.string(), userNotFound: z.string(), + successNoDm: z.string(), }), rate: z.object({ From f068c84ba907144ce10708c49f7fb136c3dde264 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 23 Jun 2023 19:21:45 -0600 Subject: [PATCH 17/79] Fixs --- config/text.hjson | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/config/text.hjson b/config/text.hjson index 330904e..83e4e76 100644 --- a/config/text.hjson +++ b/config/text.hjson @@ -70,7 +70,7 @@ brew: { invalidUrl: "[no] Please specify a valid URL." success: "[yes] The order is now brewing." - ready: <@&1053887156701118485>the order{} {} {} finished brewing and {} now available for delivery. + ready: <@&1053887156701118485>he order{} {} {} finished brewing and {} now available for delivery. } deliver: { noMessage: âš ī¸ You do not have a delivery message set, and the default message was used. Make to set one with `/deliverymessage`! @@ -207,8 +207,9 @@ userDmDisabled: "[no] Unable to send a direct message to the user. Their DMs are disabled.", dmFailed: "[no] Failed to send a direct message to the user. Please try again later.", "userNotFound": "[no] User not found. Please try again.", + successNoDm: "[yes] The order was successfully deleted, but we couldn't send a DM to the user because their DMs are off.", } - + blacklist: { success: "[yes] The ID has been successfully blacklisted." existing: "[no] The ID is already blacklisted." From a05b3df0e51fe3678e2f1ffc01b191bc3c7908ed Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 23 Jun 2023 19:22:34 -0600 Subject: [PATCH 18/79] Updated DMS --- src/commands/orders/worker/delete.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/commands/orders/worker/delete.ts b/src/commands/orders/worker/delete.ts index 99fb8ac..2b96f1b 100644 --- a/src/commands/orders/worker/delete.ts +++ b/src/commands/orders/worker/delete.ts @@ -27,11 +27,12 @@ export const command = new Command("delete", "Deletes an order.") return; } + let messageSent = false; try { await user.send(format(text.commands.delete.dm, order.details, reason)); + messageSent = true; } catch (error) { // Failed to send DM to the user, continue deletion process anyway - //await int.reply(text.commands.delete.dmFailed); } await db.orders.update({ @@ -39,6 +40,9 @@ export const command = new Command("delete", "Deletes an order.") data: { claimer: int.user.id, status: OrderStatus.Deleted, deleteReason: reason }, }); - await int.reply(text.commands.delete.success); + if (messageSent) { + await int.reply(text.commands.delete.success); + } else { + await int.reply(text.commands.delete.successNoDm); + } }); - From f467e131fb73b00f1c210bf243ab435a586b2efd Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 23 Jun 2023 19:26:16 -0600 Subject: [PATCH 19/79] Removed Console log --- src/events/ExpCreate.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/events/ExpCreate.ts b/src/events/ExpCreate.ts index f0d5996..d4435e9 100644 --- a/src/events/ExpCreate.ts +++ b/src/events/ExpCreate.ts @@ -33,15 +33,23 @@ client.on('messageCreate', async (message) => { try { // Check if the user exists in the userInfo table - const userInfo = await prisma.userInfo.findUnique({ + let userInfo = await prisma.userInfo.findUnique({ where: { id: userId, }, }); if (!userInfo) { - console.log(`User with ID ${userId} does not exist in the userInfo table.`); - return; + // If user does not exist, create a new userInfo record + userInfo = await prisma.userInfo.create({ + data: { + id: userId, + balance: 0, + tabLimit: 0.0, + donuts: 0, + guildsxp: "{}", + }, + }); } // Create or retrieve the user's data from the database @@ -104,6 +112,7 @@ client.on('messageCreate', async (message) => { } }); + // Close the Prisma connection when the script is exiting process.on('beforeExit', () => { prisma.$disconnect(); From 98e02b4bcd18c84128c5395d462474289492a66e Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 23 Jun 2023 20:17:13 -0600 Subject: [PATCH 20/79] update --- prisma/schema.prisma | 1 + 1 file changed, 1 insertion(+) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 339fe18..d86cf7b 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -157,6 +157,7 @@ model GuildsXP { level Int @default(0) exp Int @default(0) user UserInfo @relation(fields: [userId], references: [id]) + location String? notificationChannelId String? // New field for notification channel ID @@unique([userId, guildId]) } From e5d10e7e206664f598d0e92c943d10dea95707d5 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Sat, 24 Jun 2023 07:07:36 -0600 Subject: [PATCH 21/79] Add files via upload --- src/commands/orders/worker/workerinfo.ts | 38 ++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/commands/orders/worker/workerinfo.ts diff --git a/src/commands/orders/worker/workerinfo.ts b/src/commands/orders/worker/workerinfo.ts new file mode 100644 index 0000000..edbbd52 --- /dev/null +++ b/src/commands/orders/worker/workerinfo.ts @@ -0,0 +1,38 @@ +/* eslint-disable indent */ +import { CommandInteraction, User } from "discord.js"; +import { permissions } from "../../providers/permissions"; +import { Command } from "../../structures/Command"; +import { PrismaClient, CafeStatus, OrderStatus } from "@prisma/client"; + +const prisma = new PrismaClient(); + +export const command = new Command("workerinfo", + "Tracks the number of orders an employee has delivered.") + .addPermission(permissions.employee) + .addOption("user", (o) => + o.setName("employee") + .setDescription("The employee whose stats to check.") + .setRequired(false) + ) + .setExecutor(async (int: CommandInteraction) => { + let employeeId = int.user.id; // assuming the employee's ID is the user's ID + + // If an employee is specified, use their ID instead + const employeeOption = int.options.getUser("employee"); + if (employeeOption) { + employeeId = employeeOption.id; + } + + // Get the number of orders the employee has delivered + const deliveredOrders = await prisma.orders.count({ + where: { + deliverer: employeeId, + status: OrderStatus.Delivered, + }, + }); + + // Get the user's username for the reply + const username = employeeOption ? employeeOption.username : int.user.username; + + await int.reply(`${username} has delivered ${deliveredOrders} orders.`); + }); From 8845eb853760b9fec5b8accfdd4406419fcc372c Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Sat, 24 Jun 2023 07:21:06 -0600 Subject: [PATCH 22/79] Update workerinfo.ts --- src/commands/orders/worker/workerinfo.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commands/orders/worker/workerinfo.ts b/src/commands/orders/worker/workerinfo.ts index edbbd52..0d912d5 100644 --- a/src/commands/orders/worker/workerinfo.ts +++ b/src/commands/orders/worker/workerinfo.ts @@ -1,7 +1,7 @@ /* eslint-disable indent */ import { CommandInteraction, User } from "discord.js"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; +import { permissions } from "../../../providers/permissions"; +import { Command } from "../../../structures/Command"; import { PrismaClient, CafeStatus, OrderStatus } from "@prisma/client"; const prisma = new PrismaClient(); From 8b441f1bd90c8585f4d03709d94475f837e959e4 Mon Sep 17 00:00:00 2001 From: goose Date: Mon, 26 Jun 2023 20:41:05 +0700 Subject: [PATCH 23/79] slight changes to work/crime responses --- config/text.hjson | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/config/text.hjson b/config/text.hjson index 83e4e76..da8a2b8 100644 --- a/config/text.hjson +++ b/config/text.hjson @@ -13,8 +13,8 @@ common: { invalidOrderId: "[no] No order was found by that ID. Try checking your capitalization and numbers." noActiveOrder: "[no] You do not have an active order. Order one with `/order`!" - noClaimedOrder: "[no] You do not have an order claimed currently." - noOrders: "[no] You have not any orders yet." + noClaimedOrder: "[no] You do not have an order claimed at the moment." + noOrders: "[no] You don't have any orders yet." identified: **{name}** (`{id}`) orderEmbed: { title: Order Information for `{}` @@ -30,7 +30,7 @@ orderedAt: ⏰ Ordered At } } - invalidNatural: "[no] Invalid number provided. The number must be an integer greater than 0." + invalidNatural: "[no] Invalid number provided; the number must be an integer greater than 0." notEnoughBalance: "[no] You do not have enough money." interactOwn: "[no] You cannot interact with your own orders." mainGuildOnly: "[no] This command can only be used in the main server." @@ -145,25 +145,25 @@ ] } crime: { + sucess: [ You stole from Drunk Bartender and got {}. You fought an old lady and got {}. - You decided to go to the corner shop and rob them you got {}. - You robbed an atm and got {}. + You decided to go to the corner shop and rob them. You got {}. + You robbed an ATM and got {}. You robbed Tofu and got {}. - a kid spat on you, you got {} for selling it to child predators. - You burnt down someones mansion you got {}. - You kiddnapped someones dog they needed to pay you {} to get the dog back. - You stole someones jewerly you sold it for {}. - + A kid spat on you, you got {} for selling it to child predators. + You burnt down someones mansion and got {}. + You kiddnapped someones dog. They paid you {} to get the dog back. + You stole someones jewelry and sold it for {}. ] failure: [ You tried to steal from Drunk Bartender and lost {}. - You tried to fight an old lady and lost then got robbed for {}. + You tried to fight an old lady, lost, then got robbed for {}. You tried to rob the corner shop and lost {}. - You tried robbing an atm and ended up being scammed for {}. + You tried robbing an ATM and ended up being scammed for {}. You attempted to rob Tofu but ended up being robbed by Tofu for {}. - You stole someones purse when they were walking their dog , and the dog started chasing you so you runned from fear. but you dropped her purse and your {} dollars. + You stole someones purse when they were walking their dog and the dog started chasing you. You dropped her purse and an extra {} while running away. ] } daily: { From be65fbd1e7f38bfc33cb33147a7cb6fc736283f5 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Wed, 4 Oct 2023 14:54:33 -0400 Subject: [PATCH 24/79] Update1 --- README.md | 95 +-- package.json | 17 +- start Cafe.bat | 3 + yarn-error.log | 2019 ++++++++++++++++++++++++++++++++++++++++++++++++ yarn.lock | 1934 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 3969 insertions(+), 99 deletions(-) create mode 100644 start Cafe.bat create mode 100644 yarn-error.log create mode 100644 yarn.lock diff --git a/README.md b/README.md index 4284655..686f2f9 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ [![Github](https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white)](https://github.com/shadow6060/DBRewrite) [![Typescript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)](https://www.typescriptlang.org/) [![Website](https://img.shields.io/badge/-Website-blueviolet?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGF2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNi4wLWMwMDIgNzkuMTY0NDg4LCAyMDIwLzA3LzEwLTIyOjA2OjUzICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjIuMCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIyLTEyLTI1VDEyOjU1OjE1WiIgeG1wOk1vZGlmeURhdGU9IjIwMjItMTItMjVUMTM6MDE6NDJaIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIyLTEyLTI1VDEzOjAxOjQyWiIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Yjc2ODI5ZTQtY2RhMC0zZjQxLThlNWItMzNkY2Q5Nzc3NmJiIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6ZTU4Nzc3ODAtZTE5ZS1kZDRiLWIwYjItY2VkN2UyYjVlN2NiIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6N2FhMjBmYmItNzEwNy05NTQ4LTgxZmUtODFjZTMxZGY2M2M5Ij4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo3YWEyMGZiYi03MTA3LTk1NDgtODFmZS04MWNlMzFkZjYzYzkiIHN0RXZ0OndoZW49IjIwMjItMTItMjVUMTI6NTU6MTVaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjIuMCAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNvbnZlcnRlZCIgc3RFdnQ6cGFyYW1ldGVycz0iZnJvbSBhcHBsaWNhdGlvbi92bmQuYWRvYmUucGhvdG9zaG9wIHRvIGltYWdlL3BuZyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Yjc2ODI5ZTQtY2RhMC0zZjQxLThlNWItMzNkY2Q5Nzc3NmJiIiBzdEV2dDp3aGVuPSIyMDIyLTEyLTI1VDEzOjAxOjQyWiIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIyLjAgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pnios6IAAAJaSURBVCiRndLLS5RRHIfx7++cd5x3HGfSGUZR8zqFlWZONyy7aEHRIozAIiJaGeiiIDAoENqE4C4QKkgoyS4QKegiWmWIl02hpQaZMU5iMZrXmffMO+85p//BZ//ZPaS1xlYy+gbev7ZFShLnNoHWRkaHx3qfPe/P8rnFiZOn6hsbL7YKkXIYY8SYTk18nR6dGP/0wvBHRy5nMAmPocDNTOTn27ecqkB318ep5vq9c+HSxHSTcNLI8rrA3S6U7/NdT05tRmj2boYW5KTGZtVcIIjM/UUoycr1oOGBOBwp08UPW9xvF5a41f7E6Skv5NtuN+JS3EKChXc4WLTUQss7XGjuxdmMEBaDxQKFQUQMH1R2hYMUTyW+RO32pLQ6XQXWmj/PMo20zcDcTJWF5HpdISwuKKFtDoM5blIA1gmlpTz70X16U2SqYGg75bx6jGF286XqiC9rd10pzDtnGBOCEZEC4xoiwYE0wFJkVISNhkAuq4bDULmb3Gzou773dEi2xFYQ7/oshTY0wDWkQ+BcAT6F6JJaq71mHz/XJmtnfshfp4/hkDF4A0fTxOOWS9cMR7HT61MhmMDqphZFYQCrBHtDqivnDefIHpJcpiVIwwhlsw9pglYuUGsFeZnJEJvXzkxMjh+MYBf8DNWVyCnIZ/3BXJZpBrhvZd6BIYi8iaSG6SesWkz9/I2Nth7Z+S+BSW6wmuW/JFNCwfQ4eRubLsRhWB3doo+aDqBDatLEoW3JnNkl9W1mXg+aHljlBVRVXYKryXXA7SOtGcOfFR0bn5QDtNVX2ZYUgP/eWQ654oa7+gAAAABJRU5ErkJggg==)](https://drunk-bartender.org) -

@@ -54,100 +53,8 @@ And we are always open to hearing suggestions from the community about new featu | /deliverymessage placeholders | Gets your delivery message placeholders. | Staff 🛠 | | /brew | Brew's an order. | Staff 🛠 | | /delete | Delete's a order. | Staff 🛠 | -  -  -

â„šī¸ Installation

- -Make sure you got Node.js -And the following packages. - - - @discordjs/builders - - @discordjs/rest - - @prisma/client - - cross-env - - discord-api-types - - discord.js - - fast-glob - - got - - hjson - - nekos.life - - pincolors - - pino - - pretty-ms - - source-map-support - - typescript - - typescript-memoize - - yarn - - zod - - ts-toolbelt - - prisma - - eslint - - Once you got all these then you can finally start with setting up your database. - It has to be with postgres unless you want to switch it to another type. - But keep in mind then we can't provide you with support. - -You will have to make the postgres database yourself and connect the bot to it. -The tables will be made by the bot. - - -If you do not know how to create a bot. -Then follow these steps. - 1. Go to https://discord.com/developers/applications - 2. Click on New Application - 3. And create a name for the Application - 4. Then click on "Bot" - 5. And click on "Add Bot" - 6. Then click on "Reset Token" - 7. Copy the token and place it into the config.hjson in the config folder. - - -Then you want to open a terminal and run tsc. -And then proceed to open the dist folder and start the bot by running - - node index.js - - then if that brings you some errors then - you can always contact us for support. - But if you got the database up and running. - Then this should work if you follow these steps. - But make sure you change the configs for roles, and channels. - So you can use it in your server! - and experience all the fun with your friends. -But some of the channel configs are in the employee commands. - -You may have a get an error like this one - - Issue(s) found when scanning config config.hjson. - 9 issue(s) found. - Error at mainServer: String must contain at most 18 character(s) - Error at roles.employee: String must contain at most 18 character(s) - Error at roles.duty: String must contain at most 18 character(s) - Error at roles.moderator: String must contain at most 18 character(s) - Error at roles.dutyd: String must contain at most 18 character(s) - Error at channels.brewery: String must contain at most 18 character(s) - Error at channels.delivery: String must contain at most 18 character(s) - Error at channels.feedback: String must contain at most 18 character(s) - Error at channels.tips: String must contain at most 18 character(s) - C:\Users\desktop\db\dist\providers\config.js:202 - throw new error_1.IllegalStateError(`${file} is invalid.`); - ^ - -To solve it go to -src/providers/config.ts -and go to - - export const snowflake = z.string().length(18).regex(/^\d+$/); - and change it from 18 to 19 - then run tsc and it should be fixed. - -## -

Contributors ✨

- - -## - +

🔗 Links

- [GitHub](https://github.com/shadow6060/DBRewrite) diff --git a/package.json b/package.json index 680b62f..1138696 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dbrewrite", - "version": "1.2.0", + "version": "1.3.1", "description": "", "main": "index.js", "scripts": { @@ -24,30 +24,37 @@ "homepage": "https://github.com/MelnCat/DBRewrite#readme", "devDependencies": { "@types/node": "^17.0.42", + "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^5.16.0", "@typescript-eslint/parser": "^5.16.0", + "discord-api-types": "^0.37.35", "eslint": "^8.12.0", "eslint-plugin-regexp": "^1.6.0", "prisma": "latest", + "ts-node": "^10.9.1", "ts-toolbelt": "^9.6.0", - "typescript": "^4.7.0-beta" + "tsconfig-paths": "^4.1.2", + "typescript": "^4.9.5" }, "dependencies": { - "@discordjs/builders": "^0.12.0", + "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/rest": "^0.3.0", + "@paralleldrive/cuid2": "^2.2.1", "@prisma/client": "latest", + "@sapphire/shapeshift": "^3.8.1", "cross-env": "^7.0.3", - "discord-api-types": "^0.30.0", - "discord.js": "^13.6.0", + "discord.js": "^14.8.0", "fast-glob": "^3.2.11", "got": "^11.8.3", "hjson": "^3.2.2", "nekos.life": "^3.0.0", + "nodemon": "^2.0.20", "picocolors": "^1.0.0", "pino": "^7.9.2", "pretty-ms": "^7.0.1", "source-map-support": "^0.5.21", "typescript-memoize": "^1.1.0", + "uuid": "^9.0.0", "yarn": "^1.22.18", "zod": "^3.14.3" } diff --git a/start Cafe.bat b/start Cafe.bat new file mode 100644 index 0000000..96256fa --- /dev/null +++ b/start Cafe.bat @@ -0,0 +1,3 @@ +cd C:\Somewhere\AnotherFolder\Test\DB\dist +nodemon index.js +pause \ No newline at end of file diff --git a/yarn-error.log b/yarn-error.log new file mode 100644 index 0000000..69daa46 --- /dev/null +++ b/yarn-error.log @@ -0,0 +1,2019 @@ +Arguments: + /home/mystic/.nvm/versions/node/v18.16.1/bin/node /usr/share/yarn/bin/yarn.js + +PATH: + /home/mystic/.local/bin:/home/mystic/.nvm/versions/node/v18.16.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files/Eclipse Adoptium/jdk-17.0.7.7-hotspot/bin:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/c/Program Files/NVIDIA Corporation/NVIDIA NvDLISR:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program Files/PuTTY/:/mnt/c/Program Files/nodejs/:/mnt/c/Users/these/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/these/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/these/AppData/Roaming/npm:/snap/bin + +Yarn version: + 1.22.19 + +Node version: + 18.16.1 + +Platform: + linux x64 + +Trace: + Error: EPERM: operation not permitted, copyfile '/home/mystic/.cache/yarn/v6/npm-@discordjs-builders-1.6.3-integrity/node_modules/@discordjs/builders/CHANGELOG.md' -> '/mnt/c/Somewhere/AnotherFolder/Test/DB/node_modules/@discordjs/builders/CHANGELOG.md' + +npm manifest: + { + "name": "dbrewrite", + "version": "1.3.1", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "tsc", + "start": "cross-env NODE_ENV=production node dist/", + "dev": "tsc && node dist/", + "prisma:generate": "prisma generate", + "prisma:push": "prisma db push", + "project:setup": "$npm_execpath run prisma:generate && $npm_execpath run prisma:push" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/MelnCat/DBRewrite.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/MelnCat/DBRewrite/issues" + }, + "homepage": "https://github.com/MelnCat/DBRewrite#readme", + "devDependencies": { + "@types/node": "^17.0.42", + "@types/uuid": "^9.0.1", + "@typescript-eslint/eslint-plugin": "^5.16.0", + "@typescript-eslint/parser": "^5.16.0", + "discord-api-types": "^0.37.35", + "eslint": "^8.12.0", + "eslint-plugin-regexp": "^1.6.0", + "prisma": "latest", + "ts-node": "^10.9.1", + "ts-toolbelt": "^9.6.0", + "tsconfig-paths": "^4.1.2", + "typescript": "^4.9.5" + }, + "dependencies": { + "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", + "@discordjs/rest": "^0.3.0", + "@paralleldrive/cuid2": "^2.2.1", + "@prisma/client": "latest", + "@sapphire/shapeshift": "^3.8.1", + "cross-env": "^7.0.3", + "discord.js": "^14.8.0", + "fast-glob": "^3.2.11", + "got": "^11.8.3", + "hjson": "^3.2.2", + "nekos.life": "^3.0.0", + "nodemon": "^2.0.20", + "picocolors": "^1.0.0", + "pino": "^7.9.2", + "pretty-ms": "^7.0.1", + "source-map-support": "^0.5.21", + "typescript-memoize": "^1.1.0", + "uuid": "^9.0.0", + "yarn": "^1.22.18", + "zod": "^3.14.3" + } + } + +yarn manifest: + No manifest + +Lockfile: + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + # yarn lockfile v1 + + + "@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + + "@discordjs/builders@^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/builders@^1.6.3": + version "1.6.3" + resolved "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.3.tgz" + integrity sha512-CTCh8NqED3iecTNuiz49mwSsrc2iQb4d0MjMdmS/8pb69Y4IlzJ/DIy/p5GFlgOrFbNO2WzMHkWKQSiJ3VNXaw== + dependencies: + "@discordjs/formatters" "^0.3.1" + "@discordjs/util" "^0.3.1" + "@sapphire/shapeshift" "^3.8.2" + discord-api-types "^0.37.41" + fast-deep-equal "^3.1.3" + ts-mixer "^6.0.3" + tslib "^2.5.0" + + "@discordjs/collection@^0.4.0": + version "0.4.0" + resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz" + integrity sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw== + + "@discordjs/collection@^1.5.1": + version "1.5.1" + resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.1.tgz" + integrity sha512-aWEc9DCf3TMDe9iaJoOnO2+JVAjeRNuRxPZQA6GVvBf+Z3gqUuWYBy2NWh4+5CLYq5uoc3MOvUQ5H5m8CJBqOA== + + "@discordjs/formatters@^0.3.1": + version "0.3.1" + resolved "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.1.tgz" + integrity sha512-M7X4IGiSeh4znwcRGcs+49B5tBkNDn4k5bmhxJDAUhRxRHTiFAOTVUNQ6yAKySu5jZTnCbSvTYHW3w0rAzV1MA== + dependencies: + discord-api-types "^0.37.41" + + "@discordjs/rest@^0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz" + integrity sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q== + dependencies: + "@discordjs/collection" "^0.4.0" + "@sapphire/async-queue" "^1.1.9" + "@sapphire/snowflake" "^3.0.1" + discord-api-types "^0.26.1" + form-data "^4.0.0" + node-fetch "^2.6.5" + tslib "^2.3.1" + + "@discordjs/rest@^1.7.1": + version "1.7.1" + resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.1.tgz" + integrity sha512-Ofa9UqT0U45G/eX86cURQnX7gzOJLG2oC28VhIk/G6IliYgQF7jFByBJEykPSHE4MxPhqCleYvmsrtfKh1nYmQ== + dependencies: + "@discordjs/collection" "^1.5.1" + "@discordjs/util" "^0.3.0" + "@sapphire/async-queue" "^1.5.0" + "@sapphire/snowflake" "^3.4.2" + discord-api-types "^0.37.41" + file-type "^18.3.0" + tslib "^2.5.0" + undici "^5.22.0" + + "@discordjs/util@^0.3.0", "@discordjs/util@^0.3.1": + version "0.3.1" + resolved "https://registry.npmjs.org/@discordjs/util/-/util-0.3.1.tgz" + integrity sha512-HxXKYKg7vohx2/OupUN/4Sd02Ev3PBJ5q0gtjdcvXb0ErCva8jNHWfe/v5sU3UKjIB/uxOhc+TDOnhqffj9pRA== + + "@discordjs/ws@^0.8.3": + version "0.8.3" + resolved "https://registry.npmjs.org/@discordjs/ws/-/ws-0.8.3.tgz" + integrity sha512-hcYtppanjHecbdNyCKQNH2I4RP9UrphDgmRgLYrATEQF1oo4sYSve7ZmGsBEXSzH72MO2tBPdWSThunbxUVk0g== + dependencies: + "@discordjs/collection" "^1.5.1" + "@discordjs/rest" "^1.7.1" + "@discordjs/util" "^0.3.1" + "@sapphire/async-queue" "^1.5.0" + "@types/ws" "^8.5.4" + "@vladfrangu/async_event_emitter" "^2.2.1" + discord-api-types "^0.37.41" + tslib "^2.5.0" + ws "^8.13.0" + + "@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + + "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0": + version "4.5.1" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz" + integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== + + "@eslint/eslintrc@^2.0.3": + version "2.0.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz" + integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.5.2" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + + "@eslint/js@8.41.0": + version "8.41.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz" + integrity sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA== + + "@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + + "@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + + "@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + + "@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + + "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + + "@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + + "@noble/hashes@^1.1.5": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== + + "@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + + "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + + "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + + "@paralleldrive/cuid2@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.2.1.tgz#e7c11bad9452b36ef5ad1a834b14910eb0fe4cec" + integrity sha512-GJhHYlMhyT2gWemDL7BGMWfTNhspJKkikLKh9wAy3z4GTTINvTYALkUd+eGQK7aLeVkVzPuSA0VCT3H5eEWbbw== + dependencies: + "@noble/hashes" "^1.1.5" + + "@prisma/client@latest": + version "4.15.0" + resolved "https://registry.npmjs.org/@prisma/client/-/client-4.15.0.tgz" + integrity sha512-xnROvyABcGiwqRNdrObHVZkD9EjkJYHOmVdlKy1yGgI+XOzvMzJ4tRg3dz1pUlsyhKxXGCnjIQjWW+2ur+YXuw== + dependencies: + "@prisma/engines-version" "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" + + "@prisma/engines-version@4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944": + version "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" + resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944.tgz" + integrity sha512-sVOig4tjGxxlYaFcXgE71f/rtFhzyYrfyfNFUsxCIEJyVKU9rdOWIlIwQ2NQ7PntvGnn+x0XuFo4OC1jvPJKzg== + + "@prisma/engines@4.15.0": + version "4.15.0" + resolved "https://registry.npmjs.org/@prisma/engines/-/engines-4.15.0.tgz" + integrity sha512-FTaOCGs0LL0OW68juZlGxFtYviZa4xdQj/rQEdat2txw0s3Vu/saAPKjNVXfIgUsGXmQ72HPgNr6935/P8FNAA== + + "@sapphire/async-queue@^1.1.9", "@sapphire/async-queue@^1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz" + integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== + + "@sapphire/shapeshift@^3.8.1", "@sapphire/shapeshift@^3.8.2": + version "3.9.0" + resolved "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.0.tgz" + integrity sha512-iJpHmjAdwX9aSL6MvFpVyo+tkokDtInmSjoJHbz/k4VJfnim3DjvG0hgGEKWtWZgCu45RaLgcoNgR1fCPdIz3w== + dependencies: + fast-deep-equal "^3.1.3" + lodash "^4.17.21" + + "@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.4.2": + version "3.5.1" + resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz" + integrity sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA== + + "@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + + "@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + + "@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + + "@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + + "@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + + "@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + + "@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + + "@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + + "@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + + "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + + "@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + + "@types/node@*", "@types/node@^17.0.42": + version "17.0.45" + resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + + "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + + "@types/semver@^7.3.12": + version "7.5.0" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + + "@types/uuid@^9.0.1": + version "9.0.1" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz" + integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== + + "@types/ws@^8.5.4": + version "8.5.4" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + dependencies: + "@types/node" "*" + + "@typescript-eslint/eslint-plugin@^5.16.0": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz" + integrity sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.59.7" + "@typescript-eslint/type-utils" "5.59.7" + "@typescript-eslint/utils" "5.59.7" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + + "@typescript-eslint/parser@^5.16.0": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz" + integrity sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ== + dependencies: + "@typescript-eslint/scope-manager" "5.59.7" + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/typescript-estree" "5.59.7" + debug "^4.3.4" + + "@typescript-eslint/scope-manager@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz" + integrity sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ== + dependencies: + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/visitor-keys" "5.59.7" + + "@typescript-eslint/type-utils@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz" + integrity sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ== + dependencies: + "@typescript-eslint/typescript-estree" "5.59.7" + "@typescript-eslint/utils" "5.59.7" + debug "^4.3.4" + tsutils "^3.21.0" + + "@typescript-eslint/types@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz" + integrity sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A== + + "@typescript-eslint/typescript-estree@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz" + integrity sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ== + dependencies: + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/visitor-keys" "5.59.7" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + + "@typescript-eslint/utils@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz" + integrity sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.7" + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/typescript-estree" "5.59.7" + eslint-scope "^5.1.1" + semver "^7.3.7" + + "@typescript-eslint/visitor-keys@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz" + integrity sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ== + dependencies: + "@typescript-eslint/types" "5.59.7" + eslint-visitor-keys "^3.3.0" + + "@vladfrangu/async_event_emitter@^2.2.1": + version "2.2.2" + resolved "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz" + integrity sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ== + + abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + + acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + + acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + + acorn@^8.4.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + + ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + + ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + + ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + + anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + + arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + + argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + + array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + + asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + + atomic-sleep@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + + balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + + binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + + brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + + braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + + buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + + busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + + cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + + cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + + callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + + chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + + chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + + clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + + color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + + color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + + combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + + comment-parser@^1.1.2: + version "1.3.1" + resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz" + integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== + + concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + + create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + + cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + + cross-spawn@^7.0.1, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + + debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + + debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + + decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + + deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + + defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + + delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + + diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + + dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + + discord-api-types@^0.26.1: + version "0.26.1" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz" + integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== + + discord-api-types@^0.37.35, discord-api-types@^0.37.41: + version "0.37.42" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.42.tgz" + integrity sha512-1Huaj9cQ1W7/uryS8MZs/tZemnoKB94thM1cE40lep3rpU3q7WHqkdjN/veX0prTkYlPhcyLd/DeF/pBO8X8oQ== + + discord.js@^14.8.0: + version "14.11.0" + resolved "https://registry.npmjs.org/discord.js/-/discord.js-14.11.0.tgz" + integrity sha512-CkueWYFQ28U38YPR8HgsBR/QT35oPpMbEsTNM30Fs8loBIhnA4s70AwQEoy6JvLcpWWJO7GY0y2BUzZmuBMepQ== + dependencies: + "@discordjs/builders" "^1.6.3" + "@discordjs/collection" "^1.5.1" + "@discordjs/formatters" "^0.3.1" + "@discordjs/rest" "^1.7.1" + "@discordjs/util" "^0.3.1" + "@discordjs/ws" "^0.8.3" + "@sapphire/snowflake" "^3.4.2" + "@types/ws" "^8.5.4" + discord-api-types "^0.37.41" + fast-deep-equal "^3.1.3" + lodash.snakecase "^4.1.1" + tslib "^2.5.0" + undici "^5.22.0" + ws "^8.13.0" + + doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + + duplexify@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz" + integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + + end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + + escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + + eslint-plugin-regexp@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz" + integrity sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + comment-parser "^1.1.2" + grapheme-splitter "^1.0.4" + jsdoctypeparser "^9.0.0" + refa "^0.11.0" + regexp-ast-analysis "^0.6.0" + scslre "^0.2.0" + + eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + + eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + + eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== + + eslint@^8.12.0: + version "8.41.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz" + integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.3" + "@eslint/js" "8.41.0" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.1" + espree "^9.5.2" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + + espree@^9.5.2: + version "9.5.2" + resolved "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz" + integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + + esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + + esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + + estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + + estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + + esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + + fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + + fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + + fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + + fast-redact@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz" + integrity sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw== + + fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + + file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + + file-type@^18.3.0: + version "18.4.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-18.4.0.tgz" + integrity sha512-o6MQrZKTAK6WpvmQk3jqTVUmqxYBxW5bloUfrdH1ZnRFDvvAPNr+l+rgOxM3nkqWT+3khaj3FRMDydWe0xhu+w== + dependencies: + readable-web-to-node-stream "^3.0.2" + strtok3 "^7.0.0" + token-types "^5.0.1" + + fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + + find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + + flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + + flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + + form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + + fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + + fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + + get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + + glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + + glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + + glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + + globals@^13.19.0: + version "13.20.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + dependencies: + type-fest "^0.20.2" + + globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + + got@^11.8.3: + version "11.8.6" + resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + + grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + + graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + + has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + + has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + + hjson@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" + integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== + + http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + + http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + + ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + + ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + + ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + + import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + + imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + + inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + + inherits@2, inherits@^2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + + is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + + is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + + is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + + is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + + isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + + js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + + jsdoctypeparser@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz" + integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== + + json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + + json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + + json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + + json5@^2.2.2: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + + keyv@^4.0.0: + version "4.5.2" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== + dependencies: + json-buffer "3.0.1" + + levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + + locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + + lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + + lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + + lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + + lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + + lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + + make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + + merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + + micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + + mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + + mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + + mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + + mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + + minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + + minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + + ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + + ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + + natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + + natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + + nekos.life@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/nekos.life/-/nekos.life-3.0.0.tgz" + integrity sha512-7LbvSqLtfK4XRA91nJaGOWthrNADmG7Vx9d54TC77Hx5qFvRCssFUaHraI6bZGjVENBCUaF7CreisoFX+8mnKQ== + + node-fetch@^2.6.5: + version "2.6.11" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== + dependencies: + whatwg-url "^5.0.0" + + nodemon@^2.0.20: + version "2.0.22" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz" + integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== + dependencies: + chokidar "^3.5.2" + debug "^3.2.7" + ignore-by-default "^1.0.1" + minimatch "^3.1.2" + pstree.remy "^1.1.8" + semver "^5.7.1" + simple-update-notifier "^1.0.7" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.5" + + nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== + dependencies: + abbrev "1" + + normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + + normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + + on-exit-leak-free@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz" + integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== + + once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + + optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + + p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + + p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + + p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + + parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + + parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + + path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + + path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + + path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + + path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + + peek-readable@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz" + integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A== + + picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + + picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + + pino-abstract-transport@v0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz" + integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== + dependencies: + duplexify "^4.1.2" + split2 "^4.0.0" + + pino-std-serializers@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz" + integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== + + pino@^7.9.2: + version "7.11.0" + resolved "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz" + integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== + dependencies: + atomic-sleep "^1.0.0" + fast-redact "^3.0.0" + on-exit-leak-free "^0.2.0" + pino-abstract-transport v0.5.0 + pino-std-serializers "^4.0.0" + process-warning "^1.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.1.0" + safe-stable-stringify "^2.1.0" + sonic-boom "^2.2.1" + thread-stream "^0.15.1" + + prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + + pretty-ms@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz" + integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== + dependencies: + parse-ms "^2.1.0" + + prisma@latest: + version "4.15.0" + resolved "https://registry.npmjs.org/prisma/-/prisma-4.15.0.tgz" + integrity sha512-iKZZpobPl48gTcSZVawLMQ3lEy6BnXwtoMj7hluoGFYu2kQ6F9LBuBrUyF95zRVnNo8/3KzLXJXJ5TEnLSJFiA== + dependencies: + "@prisma/engines" "4.15.0" + + process-warning@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz" + integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== + + pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + + pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + + punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + + queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + + quick-format-unescaped@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" + integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== + + quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + + readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + + readable-web-to-node-stream@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz" + integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== + dependencies: + readable-stream "^3.6.0" + + readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + + real-require@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz" + integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== + + refa@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz" + integrity sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ== + dependencies: + "@eslint-community/regexpp" "^4.5.0" + + regexp-ast-analysis@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz" + integrity sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ== + dependencies: + "@eslint-community/regexpp" "^4.5.0" + refa "^0.11.0" + + resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + + resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + + responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + + reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + + rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + + run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + + safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + + safe-stable-stringify@^2.1.0: + version "2.4.3" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + + scslre@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz" + integrity sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w== + dependencies: + "@eslint-community/regexpp" "^4.5.0" + refa "^0.11.0" + regexp-ast-analysis "^0.6.0" + + semver@^5.7.1: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + + semver@^7.3.7: + version "7.5.1" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz" + integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + dependencies: + lru-cache "^6.0.0" + + semver@~7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + + shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + + shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + + simple-update-notifier@^1.0.7: + version "1.1.0" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz" + integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== + dependencies: + semver "~7.0.0" + + slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + + sonic-boom@^2.2.1: + version "2.8.0" + resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz" + integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== + dependencies: + atomic-sleep "^1.0.0" + + source-map-support@^0.5.21: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + + source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + + split2@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + + stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + + streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + + string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + + strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + + strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + + strtok3@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz" + integrity sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^5.0.0" + + supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + + supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + + text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + + thread-stream@^0.15.1: + version "0.15.2" + resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz" + integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== + dependencies: + real-require "^0.1.0" + + to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + + token-types@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz" + integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + + touch@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + + tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + + ts-mixer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz" + integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ== + + ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + + ts-toolbelt@^9.6.0: + version "9.6.0" + resolved "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz" + integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== + + tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + + tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + + tslib@^2.3.1, tslib@^2.5.0: + version "2.5.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + + tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + + type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + + type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + + typescript-memoize@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz" + integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== + + typescript@^4.9.5: + version "4.9.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + + undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + + undici@^5.22.0: + version "5.22.1" + resolved "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz" + integrity sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw== + dependencies: + busboy "^1.6.0" + + uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + + util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + + uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + + v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + + webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + + whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + + which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + + word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + + wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + + ws@^8.13.0: + version "8.13.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + + yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + + yarn@^1.22.18: + version "1.22.19" + resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" + integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== + + yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + + yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + + zod@^3.14.3: + version "3.21.4" + resolved "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz" + integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..a8ed3a1 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,1934 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@discordjs/builders@^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/builders@^1.6.3": + version "1.6.3" + resolved "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.3.tgz" + integrity sha512-CTCh8NqED3iecTNuiz49mwSsrc2iQb4d0MjMdmS/8pb69Y4IlzJ/DIy/p5GFlgOrFbNO2WzMHkWKQSiJ3VNXaw== + dependencies: + "@discordjs/formatters" "^0.3.1" + "@discordjs/util" "^0.3.1" + "@sapphire/shapeshift" "^3.8.2" + discord-api-types "^0.37.41" + fast-deep-equal "^3.1.3" + ts-mixer "^6.0.3" + tslib "^2.5.0" + +"@discordjs/collection@^0.4.0": + version "0.4.0" + resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz" + integrity sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw== + +"@discordjs/collection@^1.5.1": + version "1.5.1" + resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.1.tgz" + integrity sha512-aWEc9DCf3TMDe9iaJoOnO2+JVAjeRNuRxPZQA6GVvBf+Z3gqUuWYBy2NWh4+5CLYq5uoc3MOvUQ5H5m8CJBqOA== + +"@discordjs/formatters@^0.3.1": + version "0.3.1" + resolved "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.1.tgz" + integrity sha512-M7X4IGiSeh4znwcRGcs+49B5tBkNDn4k5bmhxJDAUhRxRHTiFAOTVUNQ6yAKySu5jZTnCbSvTYHW3w0rAzV1MA== + dependencies: + discord-api-types "^0.37.41" + +"@discordjs/rest@^0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz" + integrity sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q== + dependencies: + "@discordjs/collection" "^0.4.0" + "@sapphire/async-queue" "^1.1.9" + "@sapphire/snowflake" "^3.0.1" + discord-api-types "^0.26.1" + form-data "^4.0.0" + node-fetch "^2.6.5" + tslib "^2.3.1" + +"@discordjs/rest@^1.7.1": + version "1.7.1" + resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.1.tgz" + integrity sha512-Ofa9UqT0U45G/eX86cURQnX7gzOJLG2oC28VhIk/G6IliYgQF7jFByBJEykPSHE4MxPhqCleYvmsrtfKh1nYmQ== + dependencies: + "@discordjs/collection" "^1.5.1" + "@discordjs/util" "^0.3.0" + "@sapphire/async-queue" "^1.5.0" + "@sapphire/snowflake" "^3.4.2" + discord-api-types "^0.37.41" + file-type "^18.3.0" + tslib "^2.5.0" + undici "^5.22.0" + +"@discordjs/util@^0.3.0", "@discordjs/util@^0.3.1": + version "0.3.1" + resolved "https://registry.npmjs.org/@discordjs/util/-/util-0.3.1.tgz" + integrity sha512-HxXKYKg7vohx2/OupUN/4Sd02Ev3PBJ5q0gtjdcvXb0ErCva8jNHWfe/v5sU3UKjIB/uxOhc+TDOnhqffj9pRA== + +"@discordjs/ws@^0.8.3": + version "0.8.3" + resolved "https://registry.npmjs.org/@discordjs/ws/-/ws-0.8.3.tgz" + integrity sha512-hcYtppanjHecbdNyCKQNH2I4RP9UrphDgmRgLYrATEQF1oo4sYSve7ZmGsBEXSzH72MO2tBPdWSThunbxUVk0g== + dependencies: + "@discordjs/collection" "^1.5.1" + "@discordjs/rest" "^1.7.1" + "@discordjs/util" "^0.3.1" + "@sapphire/async-queue" "^1.5.0" + "@types/ws" "^8.5.4" + "@vladfrangu/async_event_emitter" "^2.2.1" + discord-api-types "^0.37.41" + tslib "^2.5.0" + ws "^8.13.0" + +"@eslint-community/eslint-utils@^4.2.0": + version "4.4.0" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0": + version "4.5.1" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz" + integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== + +"@eslint/eslintrc@^2.0.3": + version "2.0.3" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz" + integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.5.2" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.41.0": + version "8.41.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz" + integrity sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA== + +"@humanwhocodes/config-array@^0.11.8": + version "0.11.8" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" + integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== + dependencies: + "@humanwhocodes/object-schema" "^1.2.1" + debug "^4.1.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@noble/hashes@^1.1.5": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" + integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@paralleldrive/cuid2@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.2.1.tgz#e7c11bad9452b36ef5ad1a834b14910eb0fe4cec" + integrity sha512-GJhHYlMhyT2gWemDL7BGMWfTNhspJKkikLKh9wAy3z4GTTINvTYALkUd+eGQK7aLeVkVzPuSA0VCT3H5eEWbbw== + dependencies: + "@noble/hashes" "^1.1.5" + +"@prisma/client@latest": + version "4.15.0" + resolved "https://registry.npmjs.org/@prisma/client/-/client-4.15.0.tgz" + integrity sha512-xnROvyABcGiwqRNdrObHVZkD9EjkJYHOmVdlKy1yGgI+XOzvMzJ4tRg3dz1pUlsyhKxXGCnjIQjWW+2ur+YXuw== + dependencies: + "@prisma/engines-version" "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" + +"@prisma/engines-version@4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944": + version "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" + resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944.tgz" + integrity sha512-sVOig4tjGxxlYaFcXgE71f/rtFhzyYrfyfNFUsxCIEJyVKU9rdOWIlIwQ2NQ7PntvGnn+x0XuFo4OC1jvPJKzg== + +"@prisma/engines@4.15.0": + version "4.15.0" + resolved "https://registry.npmjs.org/@prisma/engines/-/engines-4.15.0.tgz" + integrity sha512-FTaOCGs0LL0OW68juZlGxFtYviZa4xdQj/rQEdat2txw0s3Vu/saAPKjNVXfIgUsGXmQ72HPgNr6935/P8FNAA== + +"@sapphire/async-queue@^1.1.9", "@sapphire/async-queue@^1.5.0": + version "1.5.0" + resolved "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz" + integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== + +"@sapphire/shapeshift@^3.8.1", "@sapphire/shapeshift@^3.8.2": + version "3.9.0" + resolved "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.0.tgz" + integrity sha512-iJpHmjAdwX9aSL6MvFpVyo+tkokDtInmSjoJHbz/k4VJfnim3DjvG0hgGEKWtWZgCu45RaLgcoNgR1fCPdIz3w== + dependencies: + fast-deep-equal "^3.1.3" + lodash "^4.17.21" + +"@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.4.2": + version "3.5.1" + resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz" + integrity sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA== + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@^17.0.42": + version "17.0.45" + resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +"@types/semver@^7.3.12": + version "7.5.0" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" + integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + +"@types/uuid@^9.0.1": + version "9.0.1" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz" + integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== + +"@types/ws@^8.5.4": + version "8.5.4" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + dependencies: + "@types/node" "*" + +"@typescript-eslint/eslint-plugin@^5.16.0": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz" + integrity sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA== + dependencies: + "@eslint-community/regexpp" "^4.4.0" + "@typescript-eslint/scope-manager" "5.59.7" + "@typescript-eslint/type-utils" "5.59.7" + "@typescript-eslint/utils" "5.59.7" + debug "^4.3.4" + grapheme-splitter "^1.0.4" + ignore "^5.2.0" + natural-compare-lite "^1.4.0" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/parser@^5.16.0": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz" + integrity sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ== + dependencies: + "@typescript-eslint/scope-manager" "5.59.7" + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/typescript-estree" "5.59.7" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz" + integrity sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ== + dependencies: + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/visitor-keys" "5.59.7" + +"@typescript-eslint/type-utils@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz" + integrity sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ== + dependencies: + "@typescript-eslint/typescript-estree" "5.59.7" + "@typescript-eslint/utils" "5.59.7" + debug "^4.3.4" + tsutils "^3.21.0" + +"@typescript-eslint/types@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz" + integrity sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A== + +"@typescript-eslint/typescript-estree@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz" + integrity sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ== + dependencies: + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/visitor-keys" "5.59.7" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + +"@typescript-eslint/utils@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz" + integrity sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.59.7" + "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/typescript-estree" "5.59.7" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.59.7": + version "5.59.7" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz" + integrity sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ== + dependencies: + "@typescript-eslint/types" "5.59.7" + eslint-visitor-keys "^3.3.0" + +"@vladfrangu/async_event_emitter@^2.2.1": + version "2.2.2" + resolved "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz" + integrity sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.4.1, acorn@^8.8.0: + version "8.8.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +atomic-sleep@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +busboy@^1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +chalk@^4.0.0: + version "4.1.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +comment-parser@^1.1.2: + version "1.3.1" + resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz" + integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-env@^7.0.3: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" + integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== + dependencies: + cross-spawn "^7.0.1" + +cross-spawn@^7.0.1, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +discord-api-types@^0.26.1: + version "0.26.1" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz" + integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== + +discord-api-types@^0.37.35, discord-api-types@^0.37.41: + version "0.37.42" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.42.tgz" + integrity sha512-1Huaj9cQ1W7/uryS8MZs/tZemnoKB94thM1cE40lep3rpU3q7WHqkdjN/veX0prTkYlPhcyLd/DeF/pBO8X8oQ== + +discord.js@^14.8.0: + version "14.11.0" + resolved "https://registry.npmjs.org/discord.js/-/discord.js-14.11.0.tgz" + integrity sha512-CkueWYFQ28U38YPR8HgsBR/QT35oPpMbEsTNM30Fs8loBIhnA4s70AwQEoy6JvLcpWWJO7GY0y2BUzZmuBMepQ== + dependencies: + "@discordjs/builders" "^1.6.3" + "@discordjs/collection" "^1.5.1" + "@discordjs/formatters" "^0.3.1" + "@discordjs/rest" "^1.7.1" + "@discordjs/util" "^0.3.1" + "@discordjs/ws" "^0.8.3" + "@sapphire/snowflake" "^3.4.2" + "@types/ws" "^8.5.4" + discord-api-types "^0.37.41" + fast-deep-equal "^3.1.3" + lodash.snakecase "^4.1.1" + tslib "^2.5.0" + undici "^5.22.0" + ws "^8.13.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +duplexify@^4.1.2: + version "4.1.2" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz" + integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.0" + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-plugin-regexp@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz" + integrity sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + comment-parser "^1.1.2" + grapheme-splitter "^1.0.4" + jsdoctypeparser "^9.0.0" + refa "^0.11.0" + regexp-ast-analysis "^0.6.0" + scslre "^0.2.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-scope@^7.2.0: + version "7.2.0" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz" + integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: + version "3.4.1" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" + integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== + +eslint@^8.12.0: + version "8.41.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz" + integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.4.0" + "@eslint/eslintrc" "^2.0.3" + "@eslint/js" "8.41.0" + "@humanwhocodes/config-array" "^0.11.8" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.0" + eslint-visitor-keys "^3.4.1" + espree "^9.5.2" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.1" + strip-ansi "^6.0.1" + strip-json-comments "^3.1.0" + text-table "^0.2.0" + +espree@^9.5.2: + version "9.5.2" + resolved "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz" + integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== + dependencies: + acorn "^8.8.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-redact@^3.0.0: + version "3.2.0" + resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz" + integrity sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw== + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-type@^18.3.0: + version "18.4.0" + resolved "https://registry.npmjs.org/file-type/-/file-type-18.4.0.tgz" + integrity sha512-o6MQrZKTAK6WpvmQk3jqTVUmqxYBxW5bloUfrdH1ZnRFDvvAPNr+l+rgOxM3nkqWT+3khaj3FRMDydWe0xhu+w== + dependencies: + readable-web-to-node-stream "^3.0.2" + strtok3 "^7.0.0" + token-types "^5.0.1" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.2.7" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" + integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^13.19.0: + version "13.20.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" + integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + dependencies: + type-fest "^0.20.2" + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +got@^11.8.3: + version "11.8.6" + resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +hjson@^3.2.2: + version "3.2.2" + resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" + integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + +ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsdoctypeparser@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz" + integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json5@^2.2.2: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +keyv@^4.0.0: + version "4.5.2" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz" + integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== + dependencies: + json-buffer "3.0.1" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +natural-compare-lite@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" + integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +nekos.life@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/nekos.life/-/nekos.life-3.0.0.tgz" + integrity sha512-7LbvSqLtfK4XRA91nJaGOWthrNADmG7Vx9d54TC77Hx5qFvRCssFUaHraI6bZGjVENBCUaF7CreisoFX+8mnKQ== + +node-fetch@^2.6.5: + version "2.6.11" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" + integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== + dependencies: + whatwg-url "^5.0.0" + +nodemon@^2.0.20: + version "2.0.22" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz" + integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== + dependencies: + chokidar "^3.5.2" + debug "^3.2.7" + ignore-by-default "^1.0.1" + minimatch "^3.1.2" + pstree.remy "^1.1.8" + semver "^5.7.1" + simple-update-notifier "^1.0.7" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.5" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +on-exit-leak-free@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz" + integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +peek-readable@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz" + integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pino-abstract-transport@v0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz" + integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== + dependencies: + duplexify "^4.1.2" + split2 "^4.0.0" + +pino-std-serializers@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz" + integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== + +pino@^7.9.2: + version "7.11.0" + resolved "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz" + integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== + dependencies: + atomic-sleep "^1.0.0" + fast-redact "^3.0.0" + on-exit-leak-free "^0.2.0" + pino-abstract-transport v0.5.0 + pino-std-serializers "^4.0.0" + process-warning "^1.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.1.0" + safe-stable-stringify "^2.1.0" + sonic-boom "^2.2.1" + thread-stream "^0.15.1" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +pretty-ms@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz" + integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== + dependencies: + parse-ms "^2.1.0" + +prisma@latest: + version "4.15.0" + resolved "https://registry.npmjs.org/prisma/-/prisma-4.15.0.tgz" + integrity sha512-iKZZpobPl48gTcSZVawLMQ3lEy6BnXwtoMj7hluoGFYu2kQ6F9LBuBrUyF95zRVnNo8/3KzLXJXJ5TEnLSJFiA== + dependencies: + "@prisma/engines" "4.15.0" + +process-warning@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz" + integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== + +pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-format-unescaped@^4.0.3: + version "4.0.4" + resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" + integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +readable-stream@^3.1.1, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-web-to-node-stream@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz" + integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== + dependencies: + readable-stream "^3.6.0" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +real-require@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz" + integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== + +refa@^0.11.0: + version "0.11.0" + resolved "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz" + integrity sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ== + dependencies: + "@eslint-community/regexpp" "^4.5.0" + +regexp-ast-analysis@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz" + integrity sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ== + dependencies: + "@eslint-community/regexpp" "^4.5.0" + refa "^0.11.0" + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-stable-stringify@^2.1.0: + version "2.4.3" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" + integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== + +scslre@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz" + integrity sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w== + dependencies: + "@eslint-community/regexpp" "^4.5.0" + refa "^0.11.0" + regexp-ast-analysis "^0.6.0" + +semver@^5.7.1: + version "5.7.1" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^7.3.7: + version "7.5.1" + resolved "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz" + integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + dependencies: + lru-cache "^6.0.0" + +semver@~7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +simple-update-notifier@^1.0.7: + version "1.1.0" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz" + integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== + dependencies: + semver "~7.0.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +sonic-boom@^2.2.1: + version "2.8.0" + resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz" + integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== + dependencies: + atomic-sleep "^1.0.0" + +source-map-support@^0.5.21: + version "0.5.21" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +stream-shift@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strtok3@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz" + integrity sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^5.0.0" + +supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thread-stream@^0.15.1: + version "0.15.2" + resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz" + integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== + dependencies: + real-require "^0.1.0" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +token-types@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz" + integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +ts-mixer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz" + integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ== + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +ts-toolbelt@^9.6.0: + version "9.6.0" + resolved "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz" + integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== + +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.3.1, tslib@^2.5.0: + version "2.5.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz" + integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +typescript-memoize@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz" + integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== + +typescript@^4.9.5: + version "4.9.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + +undici@^5.22.0: + version "5.22.1" + resolved "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz" + integrity sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw== + dependencies: + busboy "^1.6.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +util-deprecate@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yarn@^1.22.18: + version "1.22.19" + resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" + integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.14.3: + version "3.21.4" + resolved "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz" + integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== From b79483e928669d0edd460d6aa71b7cea0c50c9e7 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Wed, 4 Oct 2023 14:54:57 -0400 Subject: [PATCH 25/79] Add files via upload --- prisma/schema.prisma | 236 ++++++++++++++++++++++++++++++------------- 1 file changed, 168 insertions(+), 68 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 49a66fe..d9939d8 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,68 +1,168 @@ -generator client { - provider = "prisma-client-js" - binaryTargets = ["native"] -} - -datasource db { - provider = "postgresql" - url = env("DATABASE_URL") -} - -model Order { - id String @id @db.VarChar(10) - createdAt DateTime @default(now()) - user String @db.VarChar(20) - details String - status OrderStatus @default(Unprepared) - channel String @db.VarChar(20) - guild String @db.VarChar(20) - - claimer String? @db.VarChar(20) - deliverer String? @db.VarChar(20) - image String? - timeout DateTime? - - deleteReason String? - - // 0bAB - // A - Feedback Given - // B - Tipped - flags Int @default(0) -} - -enum OrderStatus { - Unprepared - Preparing - Brewing - Fermenting // Unused - PendingDelivery - Delivering - Delivered - Cancelled - Deleted - Failed -} - -model WorkerInfo { - id String @id @db.VarChar(20) - createdAt DateTime @default(now()) - - preparations Int @default(0) - deliveries Int @default(0) - - deliveryMessage String? -} - -model UserInfo { - id String @id @db.VarChar(20) - createdAt DateTime @default(now()) - - balance Int @default(0) -} - -model Blacklist { - id String @id @db.VarChar(20) - createdAt DateTime @default(now()) - reason String - blacklister String @db.VarChar(20) -} +generator client { + provider = "prisma-client-js" + binaryTargets = ["native", "windows"] +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model WorkerInfo { + id String @id @db.VarChar(20) + createdAt DateTime @default(now()) + preparations Int @default(0) + deliveries Int @default(0) + deliveryMessage String? + lastCommandUsage DateTime? // New field to track the last command usage time + commandUsageCount Int // New field to track the command usage count + lastCommandName String? // New field to track the last command name + claimUsageCount Int @default(0) // Usage count for "claim" command + brewUsageCount Int @default(0) // Usage count for "brew" command +} + +model UserInfo { + id String @id @db.VarChar(30) + createdAt DateTime @default(now()) + balance Int @default(0) + newBalance Int? + tabLimit Float @default(0) + tab Tab? + donuts Int @default(0) + guildsxp Json @default("{}") + guildsxpData GuildsXP[] + +} + +model Tree { + id String @id + age Int + water DateTime + maxAge Int + + @@map(name: "trees") +} + +model Tab { + id Int @id @default(autoincrement()) + userId String @unique @db.VarChar(20) + createdAt DateTime @default(now()) + paidAt DateTime? + amount Float + tabLimit Float @default(0) + amountNeeded Float @default(0) + amountRemaining Float @default(0) + user UserInfo @relation(fields: [userId], references: [id]) +} + +model Blacklist { + id String @id @db.VarChar(20) + createdAt DateTime @default(now()) + reason String + blacklister String @db.VarChar(20) +} + +model CafeOrders { + id String @id @db.VarChar(10) + createdAt DateTime @default(now()) + user String @db.VarChar(20) + details String + status CafeStatus @default(Unprepared) + channel String @db.VarChar(20) + guild String @db.VarChar(20) + claimer String? @db.VarChar(20) + deliverer String? @db.VarChar(20) + image String? + timeout DateTime? + deleteReason String? + bakeRating Int? + prepRating Int? + deliveryRating Int? + flags Int @default(0) + putOnTab Boolean? + amount Float? +} + +model Orders { + id String @id @db.VarChar(10) + createdAt DateTime @default(now()) + user String @db.VarChar(20) + details String + status OrderStatus @default(Unprepared) + channel String @db.VarChar(20) + guild String @db.VarChar(20) + claimer String? @db.VarChar(20) + deliverer String? @db.VarChar(20) + image String? + timeout DateTime? + deleteReason String? + bakeRating Int? + prepRating Int? + deliveryRating Int? + flags Int @default(0) + putOnTab Boolean? + amount Float? +} + +model dishes { + id String @id @db.VarChar(1234) + status Int + createdAt DateTime @db.Timestamp(6) + updatedAt DateTime @db.Timestamp(6) +} + +model Drink { + id Int @id @default(autoincrement()) + name String @unique + type String + price Float + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model CustomDrink { + id Int @id @default(autoincrement()) + name String @unique + type String + price Float + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +enum CafeStatus { + Unprepared + Preparing + Brewing + Fermenting + PendingDelivery + Delivering + Delivered + Cancelled + Deleted + Failed +} + +enum OrderStatus { + Unprepared + Preparing + Brewing + Fermenting + PendingDelivery + Delivering + Delivered + Cancelled + Deleted + Failed +} + +model GuildsXP { + userId String + guildId String + userName String // Add the userName field + level Int @default(0) + exp Int @default(0) + user UserInfo @relation(fields: [userId], references: [id]) + location String? + notificationChannelId String? // New field for notification channel ID + @@unique([userId, guildId]) +} From 87741063af995c555f4617471a5e4bc3dca0e23a Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Wed, 4 Oct 2023 14:56:12 -0400 Subject: [PATCH 26/79] Add files via upload --- src/commands/Devs/Select.ts | 56 ++++ src/commands/Devs/botinfo.ts | 37 +++ src/commands/Devs/button.ts | 39 +++ src/commands/Devs/policy.ts | 7 - src/commands/Devs/terms.ts | 7 - src/commands/Devs/userinfo.ts | 63 +++++ src/commands/Devs/workst.ts | 41 +++ src/commands/economy/balance.ts | 15 +- src/commands/economy/crime.ts | 54 ++-- src/commands/economy/daily.ts | 22 +- src/commands/economy/drinkroullete.ts | 27 +- src/commands/economy/give.ts | 18 +- src/commands/economy/work.ts | 22 +- src/commands/fun/doggo.ts | 5 +- src/commands/fun/goose.ts | 5 +- src/commands/fun/hug.ts | 5 +- src/commands/fun/meme.ts | 7 +- src/commands/fun/meow.ts | 5 +- src/commands/fun/pat.ts | 5 +- src/commands/fun/slap.ts | 7 +- src/commands/fun/tickle.ts | 5 +- src/commands/moderation/blacklist.ts | 18 +- src/commands/orders/cancel.ts | 7 +- src/commands/orders/feedback.ts | 10 +- src/commands/orders/order.ts | 39 ++- src/commands/orders/status.ts | 18 +- src/commands/orders/tip.ts | 8 +- src/commands/orders/worker/brew.ts | 257 +++++++++++++++--- src/commands/orders/worker/claim.ts | 160 ++++++++--- src/commands/orders/worker/claimed.ts | 21 +- src/commands/orders/worker/delete.ts | 33 ++- src/commands/orders/worker/deliver.ts | 211 ++++++++++++-- src/commands/orders/worker/deliverymessage.ts | 15 +- src/commands/orders/worker/duty.ts | 17 +- src/commands/orders/worker/editstatus.ts | 56 ++++ src/commands/orders/worker/fetch.ts | 49 ++-- src/commands/orders/worker/leaderboard.ts | 174 ++++++++++++ src/commands/orders/worker/list.ts | 14 +- src/commands/orders/worker/unclaim.ts | 113 ++++++-- src/commands/orders/worker/workerinfo.ts | 49 ++++ src/commands/orders/worker/workerstats.ts | 52 ++++ src/commands/public/expboard.ts | 48 ++++ src/commands/public/notifi.ts | 49 ++++ src/commands/public/profile.ts | 88 ++++++ src/database/order.ts | 142 ++++++---- src/database/orders.ts | 172 ++++++++++++ src/database/userInfo.ts | 78 +++++- src/database/workerInfo.ts | 50 +++- src/events/CommandUsage.ts | 0 src/events/ExpCreate.ts | 119 ++++++++ src/events/ServerConfig.ts | 46 ++++ src/events/interactionCreate.ts | 21 +- src/providers/client.ts | 40 +-- src/providers/commandManager.ts | 14 +- src/providers/config.ts | 56 +++- src/providers/customCommands.ts | 29 ++ src/providers/drink.ts | 25 ++ src/providers/orderManager.ts | 7 +- src/providers/permissions.ts | 3 +- src/structures/Command.ts | 41 ++- src/structures/CustomDrinkData.ts | 6 + src/structures/DrinksData.ts | 6 + src/utils/serverconfig.ts | 11 + src/utils/string.ts | 5 +- 64 files changed, 2296 insertions(+), 533 deletions(-) create mode 100644 src/commands/Devs/Select.ts create mode 100644 src/commands/Devs/botinfo.ts create mode 100644 src/commands/Devs/button.ts create mode 100644 src/commands/Devs/userinfo.ts create mode 100644 src/commands/Devs/workst.ts create mode 100644 src/commands/orders/worker/editstatus.ts create mode 100644 src/commands/orders/worker/leaderboard.ts create mode 100644 src/commands/orders/worker/workerinfo.ts create mode 100644 src/commands/orders/worker/workerstats.ts create mode 100644 src/commands/public/expboard.ts create mode 100644 src/commands/public/notifi.ts create mode 100644 src/commands/public/profile.ts create mode 100644 src/database/orders.ts create mode 100644 src/events/CommandUsage.ts create mode 100644 src/events/ExpCreate.ts create mode 100644 src/events/ServerConfig.ts create mode 100644 src/providers/customCommands.ts create mode 100644 src/providers/drink.ts create mode 100644 src/structures/CustomDrinkData.ts create mode 100644 src/structures/DrinksData.ts create mode 100644 src/utils/serverconfig.ts diff --git a/src/commands/Devs/Select.ts b/src/commands/Devs/Select.ts new file mode 100644 index 0000000..a3f400d --- /dev/null +++ b/src/commands/Devs/Select.ts @@ -0,0 +1,56 @@ +import { development } from "../../providers/env"; +import { execSync } from "child_process"; +import { format } from "../../utils/string"; +import { transpile } from "typescript"; +import { permissions } from "../../providers/permissions"; +import { Command } from "../../structures/Command"; +import { client } from "../../providers/client"; +import { channel } from "diagnostics_channel"; +import { StringSelectMenuBuilder, EmbedBuilder } from "discord.js"; + +export const command = new Command("select", "Select Menu Example") + .addPermission(permissions.developer) // add permission here + .setExecutor(async (interaction) => { + const select = new StringSelectMenuBuilder() + .setCustomId("select") + .setPlaceholder("Choose an option") + .addOptions([ + { + label: "Option 1", + value: "option_1", + description: "The first option", + type: 3 // changed from "SELECT_MENU" to 3 + }, + { + label: "Option 2", + value: "option_2", + description: "The second option", + type: 3 // changed from "SELECT_MENU" to 3 + }, + { + label: "Option 3", + value: "option_3", + description: "The third option", + type: 3 // changed from "SELECT_MENU" to 3 + }, + ]); + + const embed = new EmbedBuilder() + .setColor("#0099ff") + .setTitle("Select Menu Example") + .setDescription("Please select an option:") + .addFields( + { name: "Option 1", value: "The first option" }, + { name: "Option 2", value: "The second option" }, + { name: "Option 3", value: "The third option" } + ); + await interaction.reply({ + embeds: [embed], + components: [{ + type: 1, // changed from "ACTION_ROW" to 1 + components: [select] + }], + }); + }); + +module.exports = { command }; diff --git a/src/commands/Devs/botinfo.ts b/src/commands/Devs/botinfo.ts new file mode 100644 index 0000000..e33f6f3 --- /dev/null +++ b/src/commands/Devs/botinfo.ts @@ -0,0 +1,37 @@ +import { CommandInteraction, EmbedBuilder } from "discord.js"; +import os from "os"; +import { client } from "../../providers/client"; +import { permissions } from "../../providers/permissions"; +import { Command } from "../../structures/Command"; + +export const command = new Command("botinfo", "Displays information about the bot.") + .addPermission(permissions.developer) + .setExecutor(async (interaction: CommandInteraction) => { + // Get the number of guilds (servers) the bot is in + const guildsSize = client.guilds.cache.size.toString(); + + // Get the bot's uptime + const uptime = process.uptime(); + const uptimeString = `${Math.floor(uptime / 3600)}h ${Math.floor((uptime % 3600) / 60)}m ${Math.floor(uptime % 60)}s`; + + // Get the bot's memory usage + const memoryUsage = (process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2); + + // Get the bot's CPU usage + const cpuUsage = os.loadavg()[0].toFixed(2); + + // Create an embed to display the bot information + const botInfoEmbed = new EmbedBuilder() + .setColor("#00ff00") + .setTitle("Bot Information") + .addFields( + { name: "Name", value: client.user?.tag || "Unknown", inline: true }, + { name: "Version", value: "1.0.0", inline: true }, + { name: "Guilds", value: guildsSize, inline: true }, + { name: "Uptime", value: uptimeString, inline: true }, + { name: "Memory Usage", value: `${memoryUsage} MB`, inline: true }, + ); + + // Send the embed to the user who used the command + await interaction.reply({ embeds: [botInfoEmbed] }); + }); diff --git a/src/commands/Devs/button.ts b/src/commands/Devs/button.ts new file mode 100644 index 0000000..0279ba6 --- /dev/null +++ b/src/commands/Devs/button.ts @@ -0,0 +1,39 @@ +import { development } from "../../providers/env"; +import { execSync } from "child_process"; +import { format } from "../../utils/string"; +import { transpile } from "typescript"; +import { permissions } from "../../providers/permissions"; +import { Command } from "../../structures/Command"; +import { client } from "../../providers/client"; +import { channel } from "diagnostics_channel"; +import { ButtonBuilder } from "discord.js"; +import { ButtonStyle, ActionRowBuilder } from "discord.js"; + +export const command = new Command("but", "hm.") + .addPermission(permissions.developer) // add permission here + .setExecutor(async int => { + const button1 = new ButtonBuilder() + .setLabel("Click me!") + .setStyle(ButtonStyle.Link) //Button Styles: Primary, Secondary, Success, Danger, Link + .setURL("https://drunk-bartender.org/Policy"); + + const button2 = new ButtonBuilder() + .setLabel("Click me too!") + .setStyle(ButtonStyle.Primary) + .setCustomId("2"); + + const button3 = new ButtonBuilder() + .setLabel("Click me as well!") + .setStyle(ButtonStyle.Success) + .setCustomId("3"); + + const row = new ActionRowBuilder() + .addComponents(button1, button2, button3,); + + await int.reply({ + content: "Here are three buttons:", + components: [row], + }); + }); + +module.exports = { command }; diff --git a/src/commands/Devs/policy.ts b/src/commands/Devs/policy.ts index 7d48a0d..b74f8bb 100644 --- a/src/commands/Devs/policy.ts +++ b/src/commands/Devs/policy.ts @@ -1,11 +1,4 @@ -import { development } from "./../../providers/env"; -import { execSync } from "child_process"; -import { format } from "../../utils/string"; -import { transpile } from "typescript"; -import { permissions } from "../../providers/permissions"; import { Command } from "../../structures/Command"; -import { client } from "../../providers/client"; -import { channel } from "diagnostics_channel"; export const command = new Command("policy", "Gives you a link to our policy.") .setExecutor(async int => { int.channel.send("https://drunk-bartender.org/Policy"); diff --git a/src/commands/Devs/terms.ts b/src/commands/Devs/terms.ts index 6a17749..9e2920c 100644 --- a/src/commands/Devs/terms.ts +++ b/src/commands/Devs/terms.ts @@ -1,11 +1,4 @@ -import { development } from "./../../providers/env"; -import { execSync } from "child_process"; -import { format } from "../../utils/string"; -import { transpile } from "typescript"; -import { permissions } from "../../providers/permissions"; import { Command } from "../../structures/Command"; -import { client } from "../../providers/client"; -import { channel } from "diagnostics_channel"; export const command = new Command("tos", "Gives you a link to our tos.") .setExecutor(async int => { int.channel.send("https://drunk-bartender.org/Terms_of_Service"); diff --git a/src/commands/Devs/userinfo.ts b/src/commands/Devs/userinfo.ts new file mode 100644 index 0000000..83463ec --- /dev/null +++ b/src/commands/Devs/userinfo.ts @@ -0,0 +1,63 @@ +/* eslint-disable indent */ +import { db } from "../../database/database"; +import { Command } from "../../structures/Command"; + +export const command = new Command("userinfo", "Show user information including ratings.") + .setExecutor(async int => { + const userId = int.user.id; + const userOrders = await db.cafeOrders.findMany({ + where: { + user: userId, + bakeRating: { not: null }, + prepRating: { not: null }, + deliveryRating: { not: null } + }, + select: { + bakeRating: true, + prepRating: true, + deliveryRating: true + } + }); + + if (userOrders.length === 0) { + await int.reply("You have no ratings yet."); + return; + } + + let totalRatings = 0; + let totalBakeRating = 0; + let totalPrepRating = 0; + let totalDeliveryRating = 0; + + for (const order of userOrders) { + if (order.bakeRating && order.prepRating && order.deliveryRating) { + totalRatings++; + totalBakeRating += order.bakeRating; + totalPrepRating += order.prepRating; + totalDeliveryRating += order.deliveryRating; + } + } + + if (totalRatings === 0) { + await int.reply("You have no ratings yet."); + return; + } + + const averageBakeRating = totalBakeRating / totalRatings; + const averagePrepRating = totalPrepRating / totalRatings; + const averageDeliveryRating = totalDeliveryRating / totalRatings; + + const bakeRatingStars = "⭐".repeat(Math.round(averageBakeRating)); + const prepRatingStars = "⭐".repeat(Math.round(averagePrepRating)); + const deliveryRatingStars = "⭐".repeat(Math.round(averageDeliveryRating)); + + let response = `Your average bake rating: ${averageBakeRating.toFixed(1)} (${bakeRatingStars})\n`; + response += `Your average prep rating: ${averagePrepRating.toFixed(1)} (${prepRatingStars})\n`; + response += `Your average delivery rating: ${averageDeliveryRating.toFixed(1)} (${deliveryRatingStars})\n`; + + if (totalRatings > 0) { + response += `Total ratings: ${totalRatings}`; + } + + await int.reply(response); + }); diff --git a/src/commands/Devs/workst.ts b/src/commands/Devs/workst.ts new file mode 100644 index 0000000..547fd37 --- /dev/null +++ b/src/commands/Devs/workst.ts @@ -0,0 +1,41 @@ +/* eslint-disable indent */ +import { WorkerInfo } from "@prisma/client"; +import { permissions } from "../../providers/permissions"; +import { Command } from "../../structures/Command"; +import { getWorkerInfo } from "../../database/workerInfo"; // Update with the correct path +import { CommandInteraction, EmbedBuilder } from "discord.js"; + +export const command = new Command("workst", "view a worker's stats by their id.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + try { + const userId = int.options.getString("user_id"); + + if (!userId) { + await int.reply({ content: "Please provide a user ID.", ephemeral: true }); + return; + } + + const workerInfo = await getWorkerInfo(userId); + + if (!workerInfo) { + await int.reply({ content: "Worker not found.", ephemeral: true }); + return; + } + + const embed = new EmbedBuilder() + .setTitle(`Worker Stats for ID: ${workerInfo.id}`) + .addFields([ + { name: "Preparations", value: workerInfo.preparations.toString(), inline: true }, + { name: "Deliveries", value: workerInfo.deliveries.toString(), inline: true }, + { name: "Claim Usage Count", value: workerInfo.claimUsageCount.toString(), inline: true }, + { name: "Brew Usage Count", value: workerInfo.brewUsageCount.toString(), inline: true } + ]) + .setTimestamp(); + + await int.reply({ embeds: [embed] }); + } catch (error) { + console.error("Error in workerinfo command:", error); + await int.reply({ content: "An error occurred while fetching worker information.", ephemeral: true }); + } + }); diff --git a/src/commands/economy/balance.ts b/src/commands/economy/balance.ts index 3c9514f..1d67bcf 100644 --- a/src/commands/economy/balance.ts +++ b/src/commands/economy/balance.ts @@ -1,16 +1,15 @@ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../database/database"; -import { generateOrderId, getClaimedOrder, getUserActiveOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus, orderEmbedAsync } from "../../database/order"; +/* eslint-disable linebreak-style */ import { getUserInfo } from "../../database/userInfo"; -import { client } from "../../providers/client"; -import { config, text } from "../../providers/config"; -import { mainGuild } from "../../providers/discord"; -import { permissions } from "../../providers/permissions"; +import { text } from "../../providers/config"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; export const command = new Command("balance", "Checks your balance.") .setExecutor(async int => { const info = await getUserInfo(int.user); - await int.reply(format(text.commands.balance.success, info?.balance ?? 0)); + const balance = info?.balance ?? 0; + //const donuts = info?.donuts ?? 0; + const replyMessage = format(text.commands.balance.success, balance); //+ "\n" + + //format(text.commands.balance.success1, donuts); + await int.reply(replyMessage); }); diff --git a/src/commands/economy/crime.ts b/src/commands/economy/crime.ts index b46d54b..374715b 100644 --- a/src/commands/economy/crime.ts +++ b/src/commands/economy/crime.ts @@ -1,19 +1,7 @@ -import { OrderStatus } from "@prisma/client"; +//crime.ts import { db } from "../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getUserActiveOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../database/order"; -import { getUserInfo, upsertUserInfo } from "../../database/userInfo"; -import { client } from "../../providers/client"; -import { config, constants, text } from "../../providers/config"; -import { mainGuild } from "../../providers/discord"; -import { permissions } from "../../providers/permissions"; +import { upsertUserInfo } from "../../database/userInfo"; +import { constants, text } from "../../providers/config"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import pms from "pretty-ms"; @@ -31,22 +19,22 @@ export const command = new Command("crime", "Try your chances on doing crime!") ); return; } - const result = [ - "Succesful", - "Failure" - ] - let awnser = result[Math.floor(Math.random() * result.length)]; - if (awnser === "Failure") { - const info = await upsertUserInfo(int.user); - const obtained = randRange(...constants.crime.amountRange); - cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: -obtained } } }); - await int.reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); - } else { - const info = await upsertUserInfo(int.user); - const obtained = randRange(...constants.crime.amountRange); - cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); - await int.reply(format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``)); - } + const result = [ + "Succesful", + "Failure" + ]; + const awnser = result[Math.floor(Math.random() * result.length)]; + if (awnser === "Failure") { + const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const obtained = randRange(...constants.crime.amountRange); + cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; + await db.userInfo.update({ where: { id: info.id }, data: { balance: { decrement: obtained } } }); + await int.reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); + } else { + const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const obtained = randRange(...constants.crime.amountRange); + cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; + await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); + await int.reply(format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``)); + } }); diff --git a/src/commands/economy/daily.ts b/src/commands/economy/daily.ts index 550fc6f..532f62d 100644 --- a/src/commands/economy/daily.ts +++ b/src/commands/economy/daily.ts @@ -1,19 +1,7 @@ -import { OrderStatus } from "@prisma/client"; +//daily.ts import { db } from "../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getUserActiveOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../database/order"; -import { getUserInfo, upsertUserInfo } from "../../database/userInfo"; -import { client } from "../../providers/client"; -import { config, constants, text } from "../../providers/config"; -import { mainGuild } from "../../providers/discord"; -import { permissions } from "../../providers/permissions"; +import { upsertUserInfo } from "../../database/userInfo"; +import { constants, text } from "../../providers/config"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import pms from "pretty-ms"; @@ -31,9 +19,9 @@ export const command = new Command("daily", "Get your daily income!.") ); return; } - const info = await upsertUserInfo(int.user); + const info = await upsertUserInfo(int.user, int.guild?.id || ''); const obtained = randRange(...constants.daily.amountRange); cooldowns[int.user.id] = Date.now() + constants.daily.cooldownMs; await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); await int.reply(format(sampleArray(text.commands.daily.responses), `\`$${obtained}\``)); - }); + }); \ No newline at end of file diff --git a/src/commands/economy/drinkroullete.ts b/src/commands/economy/drinkroullete.ts index 10eccfc..ce284de 100644 --- a/src/commands/economy/drinkroullete.ts +++ b/src/commands/economy/drinkroullete.ts @@ -1,32 +1,19 @@ -import { OrderStatus } from "@prisma/client"; import { db } from "../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getUserActiveOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../database/order"; -import { getUserInfo, upsertUserInfo } from "../../database/userInfo"; -import { client } from "../../providers/client"; -import { config, constants, text } from "../../providers/config"; -import { mainGuild, mainChannels, mainRoles } from "../../providers/discord"; -import { permissions, mainChannels, mainRoles } from "../../providers/permissions"; +import { generateOrderId, hasActiveOrder, } from "../../database/orders"; +import { text } from "../../providers/config"; +import { mainChannels, mainRoles } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; -import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; +import { sampleArray } from "../../utils/utils"; export const command = new Command("drinkroullete", "Get a random drink ordered!") .setExecutor(async int => { - if (await hasActiveOrder(int.user)) { + if (await hasActiveOrder(int.user)) { await int.reply(text.commands.order.exists); - return; + return; } const drink = format(sampleArray(text.commands.drinkingr.drinks)); - const order = await db.order.create({ + const order = await db.orders.create({ data: { id: await generateOrderId(), user: int.user.id, diff --git a/src/commands/economy/give.ts b/src/commands/economy/give.ts index 748b0e5..5dc7957 100644 --- a/src/commands/economy/give.ts +++ b/src/commands/economy/give.ts @@ -1,34 +1,30 @@ -import { MessageEmbed } from "discord.js"; import { db } from "../../database/database"; -import { generateOrderId, getLatestOrder, hasActiveOrder, OrderFlags } from "../../database/order"; import { getUserInfo } from "../../database/userInfo"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; export const command = new Command("give", "Give someone some money.") .addOption("integer", o => o.setName("money").setDescription("The amount to give.").setRequired(true)) - .addOption("string", o => o.setName("receiver ").setDescription("Please use their id").setRequired(true)) + .addOption("string", o => o.setName("receiver").setDescription("Please use their id").setRequired(true)) .setExecutor(async int => { const user = int.user; const tip = int.options.getInteger("money", true); - const receiver = int.options.getString("receiver", true); + const receiver = int.options.getString("receiver", true); const info = await getUserInfo(int.user); if (!info || info.balance < tip) { await int.reply(text.common.notEnoughBalance); return; } - if (tip > 5000) return int.reply("Funny this safety thing stopping your transaction of 5000+"); - await db.userInfo.update({ + if (tip > 5000) return int.reply("Funny this safety thing stopping your transaction of 5000+"); + await db.userInfo.update({ where: { id: int.user.id }, data: { balance: { decrement: tip } } }); - await db.userInfo.update({ + await db.userInfo.update({ where: { id: receiver }, data: { balance: { increment: tip } } - }); + }); - int.reply(`You sucessfully transfered ${tip} to <@${receiver}>`) + int.reply(`You sucessfully transfered ${tip} to <@${receiver}>`); }); diff --git a/src/commands/economy/work.ts b/src/commands/economy/work.ts index f973250..7361990 100644 --- a/src/commands/economy/work.ts +++ b/src/commands/economy/work.ts @@ -1,19 +1,9 @@ -import { OrderStatus } from "@prisma/client"; +/* eslint-disable quotes */ +/* eslint-disable linebreak-style */ +//work.ts import { db } from "../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getUserActiveOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../database/order"; -import { getUserInfo, upsertUserInfo } from "../../database/userInfo"; -import { client } from "../../providers/client"; -import { config, constants, text } from "../../providers/config"; -import { mainGuild } from "../../providers/discord"; -import { permissions } from "../../providers/permissions"; +import { upsertUserInfo } from "../../database/userInfo"; +import { constants, text } from "../../providers/config"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import pms from "pretty-ms"; @@ -31,7 +21,7 @@ export const command = new Command("work", "Gets you some money.") ); return; } - const info = await upsertUserInfo(int.user); + const info = await upsertUserInfo(int.user, int.guild?.id || ''); const obtained = randRange(...constants.work.amountRange); cooldowns[int.user.id] = Date.now() + constants.work.cooldownMs; await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); diff --git a/src/commands/fun/doggo.ts b/src/commands/fun/doggo.ts index bcf68fe..10a3d2e 100644 --- a/src/commands/fun/doggo.ts +++ b/src/commands/fun/doggo.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -13,7 +12,7 @@ export const command = new Command("doggo", "Get cute doggos.") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("Bam someone got doggoed") .setImage(yeeeee.url) .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), diff --git a/src/commands/fun/goose.ts b/src/commands/fun/goose.ts index 0329219..190c04a 100644 --- a/src/commands/fun/goose.ts +++ b/src/commands/fun/goose.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -14,7 +13,7 @@ export const command = new Command("goose", "See cute gooseeeeeeeeee") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("Hoooonk") .setImage(yeeeee.url) .setDescription(`${goose} got honked at by ${int.user.tag}`) diff --git a/src/commands/fun/hug.ts b/src/commands/fun/hug.ts index 68cea01..d20a3cc 100644 --- a/src/commands/fun/hug.ts +++ b/src/commands/fun/hug.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -14,7 +13,7 @@ export const command = new Command("hug", "Give your friends a good hug.") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("Bam someone got hugged") .setImage(yeeeee.url) .setDescription(`${slapped} got hugged by ${int.user.tag}`) diff --git a/src/commands/fun/meme.ts b/src/commands/fun/meme.ts index 51410e5..34b3401 100644 --- a/src/commands/fun/meme.ts +++ b/src/commands/fun/meme.ts @@ -1,9 +1,6 @@ import got from "got"; -import { MessageEmbed } from "discord.js"; -import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; +import { EmbedBuilder } from "discord.js"; import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; export const command = new Command("memes", "memes!") .setExecutor(async int => { got('https://www.reddit.com/r/memes/random/.json') @@ -19,7 +16,7 @@ export const command = new Command("memes", "memes!") const memeNumComments = post.data.num_comments; int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setImage(memeImage) .setDescription(`${int.user.tag} Has summoned a meme!`) .setFooter({ text: memeUrl, memeUpvotes, }), diff --git a/src/commands/fun/meow.ts b/src/commands/fun/meow.ts index bbbf7cb..c4f3410 100644 --- a/src/commands/fun/meow.ts +++ b/src/commands/fun/meow.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -12,7 +11,7 @@ export const command = new Command("meow", "Cute kittens.") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("You Summoned a kitten!") .setImage(yeeeee.url) .setDescription(`${int.user.tag} Has summoned an kitten!`) diff --git a/src/commands/fun/pat.ts b/src/commands/fun/pat.ts index 6be7a70..8cef3c5 100644 --- a/src/commands/fun/pat.ts +++ b/src/commands/fun/pat.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -14,7 +13,7 @@ export const command = new Command("pat", "Give your friends a good Pat.") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("Bam someone got patted") .setImage(yeeeee.url) .setDescription(`${slapped} got patted by ${int.user.tag}`) diff --git a/src/commands/fun/slap.ts b/src/commands/fun/slap.ts index bfeefb8..30fb727 100644 --- a/src/commands/fun/slap.ts +++ b/src/commands/fun/slap.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -14,7 +13,7 @@ export const command = new Command("slap", "Give your friends a good slap.") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("Bam someone got slapped") .setImage(yeeeee.url) .setDescription(`${slapped} got slapped by ${int.user.tag}`) @@ -22,4 +21,4 @@ export const command = new Command("slap", "Give your friends a good slap.") ], }); - }); \ No newline at end of file + }); diff --git a/src/commands/fun/tickle.ts b/src/commands/fun/tickle.ts index 8bea5fc..89c864b 100644 --- a/src/commands/fun/tickle.ts +++ b/src/commands/fun/tickle.ts @@ -1,6 +1,5 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import Client from "nekos.life"; @@ -14,7 +13,7 @@ export const command = new Command("tickle", "Give your friends a good tickle.") const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle("Bam someone got tickled") .setImage(yeeeee.url) .setDescription(`${tickled} got tickled by ${int.user.tag}`) diff --git a/src/commands/moderation/blacklist.ts b/src/commands/moderation/blacklist.ts index 94bd1e3..4080c25 100644 --- a/src/commands/moderation/blacklist.ts +++ b/src/commands/moderation/blacklist.ts @@ -1,23 +1,7 @@ -import { OrderStatus } from "@prisma/client"; import { db } from "../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getUserActiveOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../database/order"; -import { getUserInfo, upsertUserInfo } from "../../database/userInfo"; -import { client } from "../../providers/client"; -import { config, constants, text } from "../../providers/config"; -import { mainGuild } from "../../providers/discord"; +import { text } from "../../providers/config"; import { permissions } from "../../providers/permissions"; import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; -import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; import { blacklist, createBlacklist } from "../../database/blacklist"; export const command = new Command("blacklist", "Blacklists a user, server, or channel.") diff --git a/src/commands/orders/cancel.ts b/src/commands/orders/cancel.ts index e0593e1..7d80b16 100644 --- a/src/commands/orders/cancel.ts +++ b/src/commands/orders/cancel.ts @@ -1,10 +1,9 @@ -import { OrderStatus } from "@prisma/client"; +import { CafeStatus, OrderStatus } from "@prisma/client"; import { db } from "../../database/database"; import { mainChannels } from "../../providers/discord"; -import { generateOrderId, getUserActiveOrder, hasActiveOrder } from "../../database/order"; +import { getUserActiveOrder } from "../../database/orders"; import { text } from "../../providers/config"; import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; export const command = new Command("cancel", "Cancels your active order.") .setExecutor(async int => { @@ -13,7 +12,7 @@ export const command = new Command("cancel", "Cancels your active order.") await int.reply(text.common.noActiveOrder); return; } - await db.order.update({ + await db.orders.update({ where: { id: order.id }, diff --git a/src/commands/orders/feedback.ts b/src/commands/orders/feedback.ts index d1e1a17..57fae50 100644 --- a/src/commands/orders/feedback.ts +++ b/src/commands/orders/feedback.ts @@ -1,6 +1,6 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { db } from "../../database/database"; -import { generateOrderId, getLatestOrder, hasActiveOrder, OrderFlags } from "../../database/order"; +import { getLatestOrder, OrderFlags } from "../../database/orders"; import { text } from "../../providers/config"; import { mainChannels } from "../../providers/discord"; import { Command } from "../../structures/Command"; @@ -24,13 +24,13 @@ export const command = new Command("feedback", "Give feedback on your last order const tcfe = text.commands.feedback.embed; await mainChannels.feedback.send({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle(format(tcfe.title, lastOrder.id)) .setDescription(feedback) - .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), + .setFooter({ text: format(tcfe.footer, int.user.username), iconURL: int.user.displayAvatarURL() }), ], }); - await db.order.update({ + await db.orders.update({ where: { id: lastOrder.id }, data: { flags: lastOrder.flags | OrderFlags.FeedbackGiven } }); diff --git a/src/commands/orders/order.ts b/src/commands/orders/order.ts index c54eb3c..6010b9f 100644 --- a/src/commands/orders/order.ts +++ b/src/commands/orders/order.ts @@ -1,19 +1,39 @@ import { db } from "../../database/database"; -import { generateOrderId, hasActiveOrder } from "../../database/order"; +import { generateOrderId, hasActiveOrder } from "../../database/orders"; import { text } from "../../providers/config"; import { mainChannels, mainRoles } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; export const command = new Command("order", "Orders a drink.") - .addOption("string", o => o.setName("drink").setDescription("The drink to order.").setRequired(true)) - .setExecutor(async int => { + .addOption("string", (o) => + o.setName("drink").setDescription("The drink to order.").setRequired(true) + ) + .setExecutor(async (int) => { if (await hasActiveOrder(int.user)) { await int.reply(text.commands.order.exists); return; } - const drink = int.options.getString("drink", true); // Why the FUCK do options not default to required - const order = await db.order.create({ + + // Check the number of existing orders + const orderCount = await db.orders.count(); + const maxOrderLimit = 25; + + if (orderCount >= maxOrderLimit) { + await int.reply(`The maximum order limit of ${maxOrderLimit} has been reached. Try again later.`); + return; + } + + const drink = int.options.getString("drink", true); + + // Check the length of the drink description + const maxDescriptionLength = 100; // Adjust this value as needed + if (drink.length > maxDescriptionLength) { + await int.reply(`Your order details are too long. Please limit them to ${maxDescriptionLength} characters.`); + return; + } + + const order = await db.orders.create({ data: { id: await generateOrderId(), user: int.user.id, @@ -22,14 +42,19 @@ export const command = new Command("order", "Orders a drink.") guild: int.guildId, }, }); + await int.reply(format(text.commands.order.success, { id: order.id, details: drink })); - if (int.member.nickname?.toLowerCase() === "bart") int.followUp("i will end you"); + + if (int.member.nickname?.toLowerCase() === "bart") { + await int.followUp("I will end you"); + } + await mainChannels.brewery.send( format(text.commands.order.created, { details: drink, duty: mainRoles.duty.toString(), id: order.id, - tag: int.user.tag, + tag: int.user.username, }) ); }); diff --git a/src/commands/orders/status.ts b/src/commands/orders/status.ts index e8f67c5..c93e7ef 100644 --- a/src/commands/orders/status.ts +++ b/src/commands/orders/status.ts @@ -1,12 +1,8 @@ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../database/database"; -import { generateOrderId, getClaimedOrder, getUserActiveOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus, orderEmbedAsync } from "../../database/order"; -import { client } from "../../providers/client"; -import { config, text } from "../../providers/config"; -import { mainGuild } from "../../providers/discord"; +import { getUserActiveOrder } from "../../database/orders"; +import { text } from "../../providers/config"; import { permissions } from "../../providers/permissions"; import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import { EmbedBuilder } from "discord.js"; export const command = new Command("status", "Checks the status of your current order.") .addPermission(permissions.employee) @@ -16,7 +12,9 @@ export const command = new Command("status", "Checks the status of your current await int.reply(text.common.noActiveOrder); return; } - await int.reply({ - embeds: [await orderEmbedAsync(order)] - }); + const embed = new EmbedBuilder() + .setColor("#0099ff") + .setTitle("Order Status") + .setDescription(`The status of your order is ${order.status}.`); + await int.reply({ embeds: [embed] }); }); diff --git a/src/commands/orders/tip.ts b/src/commands/orders/tip.ts index 8d9db51..5b7271e 100644 --- a/src/commands/orders/tip.ts +++ b/src/commands/orders/tip.ts @@ -1,6 +1,6 @@ -import { MessageEmbed } from "discord.js"; +import { EmbedBuilder } from "discord.js"; import { db } from "../../database/database"; -import { generateOrderId, getLatestOrder, hasActiveOrder, OrderFlags } from "../../database/order"; +import { getLatestOrder, OrderFlags } from "../../database/orders"; import { getUserInfo } from "../../database/userInfo"; import { text } from "../../providers/config"; import { mainChannels } from "../../providers/discord"; @@ -33,7 +33,7 @@ export const command = new Command("tip", "Tip your last order.") const tcte = text.commands.tip.embed; await mainChannels.tips.send({ embeds: [ - new MessageEmbed() + new EmbedBuilder() .setTitle(tcte.title) .setDescription( format(tcte.description, lastOrder.id, tip, `<@${lastOrder.claimer}>`, `<@${lastOrder.deliverer}>`) @@ -41,7 +41,7 @@ export const command = new Command("tip", "Tip your last order.") .setFooter({ text: format(tcte.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), ], }); - await db.order.update({ + await db.orders.update({ where: { id: lastOrder.id }, data: { flags: lastOrder.flags | OrderFlags.Tipped }, }); diff --git a/src/commands/orders/worker/brew.ts b/src/commands/orders/worker/brew.ts index 9fe22c5..ccd5e8b 100644 --- a/src/commands/orders/worker/brew.ts +++ b/src/commands/orders/worker/brew.ts @@ -1,6 +1,8 @@ +/* eslint-disable indent */ +/* eslint-disable quotes */ import { OrderStatus } from "@prisma/client"; import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus } from "../../../database/order"; +import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder } from "../../../database/orders"; import { upsertWorkerInfo } from "../../../database/workerInfo"; import { client } from "../../../providers/client"; import { config, constants, text } from "../../../providers/config"; @@ -9,40 +11,221 @@ import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; import { randRange } from "../../../utils/utils"; +import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; -export const command = new Command("brew", "Brews your claimed order.") - .addPermission(permissions.employee) - .addOption("string", o => o.setRequired(true).setName("image").setDescription("The image to attach.")) - .setExecutor(async int => { - const order = await getClaimedOrder(int.user); - if (!order) { - await int.reply(text.common.noClaimedOrder); - return; - } - const image = int.options.getString("image", true); - if (!/https?:\/\//.test(image)) { - await int.reply(text.commands.brew.invalidUrl); - return; - } - const time = randRange(...constants.brewTimeRangeMs); - await db.order.update({ - where: { - id: order.id, - }, - data: { - status: OrderStatus.Brewing, - image, - timeout: new Date(Date.now() + time), - }, - }); - await upsertWorkerInfo(int.user); - await db.workerInfo.update({ - where: { - id: int.user.id, - }, - data: { - preparations: { increment: 1 }, - }, - }); - await int.reply(text.commands.brew.success); - }); +export const command = new Command( + "brew", + "Brews your claimed order." +) + .addSubCommand((subcommand) => + subcommand + .setName("attach") + .setDescription("Attach an image to your order.") + .addAttachmentOption((option) => + option + .setName("attachment") + .setDescription("The image to attach to the order.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("url") + .setDescription("Attach an image to your order by URL.") + .addStringOption((option) => + option + .setName("url") + .setDescription("The URL of the image to attach to the order.") + .setRequired(true) + ) + ) + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + const commandName = 'brew'; // Command name is "brew" in this case + + // Track command usage + await upsertWorkerInfo(int.user, commandName); + + const order = await getClaimedOrder(int.user); + if (!order) { + await int.reply({ content: "You don't have a claimed order." }); + return; + } + + const subcommand = int.options.getSubcommand(true); + let imageUrl: string | undefined; + + if (subcommand === "attach") { + const attachment = int.options.get("attachment", true)?.attachment; + if (!attachment) { + await int.reply({ content: "Attachment is missing or not valid." }); + return; + } + imageUrl = attachment.url; + + // Create an embed with the image preview + const imagePreviewEmbed = new EmbedBuilder() + .setTitle("Image Preview") + .setImage(imageUrl) // Set the image URL as the preview + .toJSON(); + + const confirmationDescription = `Order Details: ${order.details}`; + + const confirmSelectMenu = new StringSelectMenuBuilder() + .setCustomId("confirm_brew") + .setPlaceholder("Select an option") + .addOptions([ + { + label: "Yes", + description: "Proceed with brewing the order", + value: "yes", + }, + { + label: "No", + description: "Cancel the brewing process", + value: "no", + }, + ]) + .toJSON(); + + const confirmActionRow = { + type: ComponentType.ActionRow, + components: [confirmSelectMenu], + }; + + await int.reply({ + content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, + embeds: [imagePreviewEmbed], // Include the image preview in the message + components: [confirmActionRow], + ephemeral: true, + }); + + const confirmFilter = (i) => i.customId === "confirm_brew" && i.user.id === int.user.id; + const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); + + confirmCollector.on("collect", async (confirmInteraction) => { + if (confirmInteraction.isStringSelectMenu()) { + const selectedValue = confirmInteraction.values[0]; + if (selectedValue === "yes") { + await confirmInteraction.update({ + content: "You chose to proceed with brewing the order.", + components: [], + }); + + const time = randRange(...constants.brewTimeRangeMs); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Brewing, + image: imageUrl ?? "default.png", + timeout: new Date(Date.now() + time), + }, + }); + await upsertWorkerInfo(int.user); + + await int.followUp({ + content: "Brewing process started.", + files: imageUrl ? [{ attachment: imageUrl }] : undefined, + }); + } else if (selectedValue === "no") { + await confirmInteraction.update({ + content: "You chose to cancel the brewing process.", + components: [], + }); + } + } + }); + + confirmCollector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't make a selection in time."); + } + }); + } else if (subcommand === "url") { + const url = int.options.getString("url", true); + imageUrl = url; + + // Create an embed with the image preview + const imagePreviewEmbed = new EmbedBuilder() + .setTitle("Image Preview") + .setImage(imageUrl) // Set the image URL as the preview + .toJSON(); + + const confirmationDescription = `Order Details: ${order.details}`; + + const confirmSelectMenu = new StringSelectMenuBuilder() + .setCustomId("confirm_brew_url") + .setPlaceholder("Select an option") + .addOptions([ + { + label: "Yes", + description: "Proceed with brewing the order", + value: "yes", + }, + { + label: "No", + description: "Cancel the brewing process", + value: "no", + }, + ]) + .toJSON(); + + const confirmActionRow = { + type: ComponentType.ActionRow, + components: [confirmSelectMenu], + }; + + await int.reply({ + content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, + embeds: [imagePreviewEmbed], // Include the image preview in the message + components: [confirmActionRow], + ephemeral: true, + }); + + const confirmFilter = (i) => i.customId === "confirm_brew_url" && i.user.id === int.user.id; + const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); + + confirmCollector.on("collect", async (confirmInteraction) => { + if (confirmInteraction.isStringSelectMenu()) { + const selectedValue = confirmInteraction.values[0]; + if (selectedValue === "yes") { + await confirmInteraction.update({ + content: "You chose to proceed with brewing the order.", + components: [], + }); + + const time = randRange(...constants.brewTimeRangeMs); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Brewing, + image: imageUrl ?? "default.png", + timeout: new Date(Date.now() + time), + }, + }); + await upsertWorkerInfo(int.user); + + await int.followUp({ + content: "Brewing process started.", + files: imageUrl ? [{ attachment: imageUrl }] : undefined, + }); + } else if (selectedValue === "no") { + await confirmInteraction.update({ + content: "You chose to cancel the brewing process.", + components: [], + }); + } + } + }); + + confirmCollector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't make a selection in time."); + } + }); + } + }); diff --git a/src/commands/orders/worker/claim.ts b/src/commands/orders/worker/claim.ts index 7b9a23c..e2bfa72 100644 --- a/src/commands/orders/worker/claim.ts +++ b/src/commands/orders/worker/claim.ts @@ -1,35 +1,133 @@ -import { OrderStatus } from "@prisma/client"; +/* eslint-disable indent */ +import { upsertWorkerInfo } from "../../../database/workerInfo"; +import { Command } from "../../../structures/Command"; +import { permissions } from "../../../providers/permissions"; +import { OrderStatus, getClaimedOrder } from "../../../database/orders"; import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus } from "../../../database/order"; +import { text } from "../../../providers/config"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; +import { CommandInteraction, StringSelectMenuBuilder, ComponentType, EmbedBuilder } from "discord.js"; + +const claimedOrderLocks = new Map(); // Map to store claim locks for each order ID +const claimedOrders = new Set(); // Set to store claimed order IDs export const command = new Command("claim", "Claims an order.") - .addPermission(permissions.employee) - .addOption("string", o => o.setRequired(true).setName("order").setDescription("The order to claim.")) - .setExecutor(async int => { - if (await getClaimedOrder(int.user)) { - await int.reply(text.commands.claim.existing); - return; - } - //if (await getClaimedOrder(int.user) !== int.user.id) - //return int.reply("Sorry you may not claim ur own order.") - - const match = int.options.getString("order", true); - const order = await matchOrderStatus(match, OrderStatus.Unprepared); - if (order === null) { - await int.reply(text.common.invalidOrderId); - return; - } - if (order.user === int.user.id && !permissions.developer.hasPermission(int.user)) { - await int.reply(text.common.interactOwn); - return; - } - await db.order.update({ where: { id: order.id }, data: { claimer: int.user.id, status: OrderStatus.Preparing } }); - await int.reply(text.commands.claim.success); - - }); + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + if (await getClaimedOrder(int.user)) { + await int.reply({ content: text.commands.claim.existing, ephemeral: false }); + return; + } + + const orders = await db.orders.findMany({ + where: { + status: OrderStatus.Unprepared, + }, + select: { + id: true, + user: true, + details: true, + }, + }); + + if (orders.length === 0) { + await int.reply({ content: "There are no available orders to claim.", ephemeral: true }); + return; + } + + const options = orders.map(order => { + const details = order.details.length > 50 ? `${order.details.substring(0, 47)}...` : order.details; + const user = order.user.length > 50 ? `${order.user.substring(0, 47)}...` : order.user; + + return { + label: order.id, + description: `Details: ${details}\nUser: ${user}`, + value: order.id, + details: order.details, + }; + }); + + const selectMenu = new StringSelectMenuBuilder() + .setCustomId("claim_order") + .setPlaceholder("Select an order to claim") + .addOptions(options); + + const actionRow = { + type: ComponentType.ActionRow, + components: [selectMenu], + }; + + const embed = new EmbedBuilder() + .setDescription("Please select an order to claim.") + .setColor("#00FF00"); + + await int.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true, + }); + + // Call the function to update command usage for the user + await upsertWorkerInfo(int.user, "claim"); + }); + +client.on("interactionCreate", async (interaction) => { + if (!interaction.isStringSelectMenu()) return; + + const componentId = interaction.customId; + if (componentId === "claim_order") { + const orderId = interaction.values[0]; + + if (claimedOrders.has(orderId)) { + await interaction.reply({ content: "This order has already been claimed.", ephemeral: true }); + return; + } + + // Check if a claim lock exists for this order + if (claimedOrderLocks.has(orderId) && claimedOrderLocks.get(orderId)) { + await interaction.reply({ content: "Another user is currently claiming this order. Please try again later.", ephemeral: true }); + return; + } + + // Set a claim lock for this order + claimedOrderLocks.set(orderId, true); + + const order = await db.orders.findUnique({ + where: { + id: orderId, + }, + select: { + id: true, + user: true, + details: true, + }, + }); + + if (!order) { + // Release the claim lock + claimedOrderLocks.delete(orderId); + await interaction.reply({ content: "Invalid order selected.", ephemeral: true }); + return; + } + + if (order.user === interaction.user.id && !permissions.developer.hasPermission(interaction.user)) { + // Release the claim lock + claimedOrderLocks.delete(orderId); + await interaction.reply({ content: text.common.interactOwn, ephemeral: true }); + return; + } + + // Update the claimed order and release the claim lock + await db.orders.update({ + where: { id: orderId }, + data: { claimer: interaction.user.id, status: OrderStatus.Preparing }, + }); + + claimedOrders.add(orderId); + + await interaction.reply({ + content: `${text.commands.claim.success.replace("{id}", order.id)}`, + ephemeral: false, + }); + } +}); diff --git a/src/commands/orders/worker/claimed.ts b/src/commands/orders/worker/claimed.ts index 64f0f51..950878d 100644 --- a/src/commands/orders/worker/claimed.ts +++ b/src/commands/orders/worker/claimed.ts @@ -1,22 +1,19 @@ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus, orderEmbedAsync } from "../../../database/order"; -import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; +import { getClaimedOrder, orderEmbedAsync } from "../../../database/orders"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; - +import type { CommandInteraction } from "discord.js"; export const command = new Command("claimed", "Checks your claimed order.") .addPermission(permissions.employee) - .setExecutor(async int => { + .setExecutor(async (int: CommandInteraction) => { const order = await getClaimedOrder(int.user); if (!order) { - await int.reply(text.common.noClaimedOrder); + await int.reply("You have not claimed an order."); return; } + + const embed = await orderEmbedAsync(order, int.client); + await int.reply({ - embeds: [await orderEmbedAsync(order)] + embeds: [embed] }); - }); + }); \ No newline at end of file diff --git a/src/commands/orders/worker/delete.ts b/src/commands/orders/worker/delete.ts index 2fc27a2..2b96f1b 100644 --- a/src/commands/orders/worker/delete.ts +++ b/src/commands/orders/worker/delete.ts @@ -1,9 +1,8 @@ -import { OrderStatus } from "@prisma/client"; +import { CafeStatus, OrderStatus } from "@prisma/client"; import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus } from "../../../database/order"; +import { matchActiveOrder } from "../../../database/orders"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; +import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; @@ -20,10 +19,30 @@ export const command = new Command("delete", "Deletes an order.") await int.reply(text.common.invalidOrderId); return; } - await (await client.users.fetch(order.user)).send(format(text.commands.delete.dm, order.details, reason)); - await db.order.update({ + + const user = await client.users.fetch(order.user); + if (!user) { + // User not found + await int.reply(text.commands.delete.userNotFound); + return; + } + + let messageSent = false; + try { + await user.send(format(text.commands.delete.dm, order.details, reason)); + messageSent = true; + } catch (error) { + // Failed to send DM to the user, continue deletion process anyway + } + + await db.orders.update({ where: { id: order.id }, data: { claimer: int.user.id, status: OrderStatus.Deleted, deleteReason: reason }, }); - await int.reply(text.commands.delete.success); + + if (messageSent) { + await int.reply(text.commands.delete.success); + } else { + await int.reply(text.commands.delete.successNoDm); + } }); diff --git a/src/commands/orders/worker/deliver.ts b/src/commands/orders/worker/deliver.ts index c981051..8554f40 100644 --- a/src/commands/orders/worker/deliver.ts +++ b/src/commands/orders/worker/deliver.ts @@ -1,44 +1,209 @@ -import { OrderStatus } from "@prisma/client"; -import { CategoryChannel, GuildChannel } from "discord.js"; +/* eslint-disable no-constant-condition */ +/* eslint-disable quotes */ +// Main code +import { CafeStatus, OrderStatus } from "@prisma/client"; +import { ChannelType, GuildChannel, StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus, orderPlaceholders } from "../../../database/order"; -import { getWorkerInfo, upsertWorkerInfo } from "../../../database/workerInfo"; +import { orderPlaceholders, generateOrderId } from "../../../database/orders"; +import { upsertWorkerInfo } from "../../../database/workerInfo"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; +import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; -export const command = new Command("deliver", "Delivers an order.") +export const command = new Command( + "deliver", + "Delivers an order." +) .addPermission(permissions.employee) - .addOption("string", o => o.setRequired(true).setName("order").setDescription("The order to deliver.")) - .setExecutor(async int => { - const match = int.options.getString("order", true); - const order = await matchOrderStatus(match, OrderStatus.PendingDelivery); - if (order === null) { - await int.reply(text.common.invalidOrderId); + .setExecutor(async (int: CommandInteraction) => { + const selectMenu = new StringSelectMenuBuilder() + .setCustomId("deliver_option") + .setPlaceholder("Select a delivery option") + .addOptions({ + label: "Single Order", + description: "Deliver a single order", + value: "single", + }) + .addOptions({ + label: "Multiple Orders", + description: "Deliver multiple orders", + value: "multiple", + }); + + const actionRow = { + type: ComponentType.ActionRow, + components: [selectMenu], + }; + + const embed = new EmbedBuilder() + .setDescription("Please select a delivery option.") + .setColor("#00FF00"); + + await int.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true, + }); + }); + +// Interaction Create Event (for handling select menu interaction) +client.on("interactionCreate", async (interaction) => { + if (!interaction.isStringSelectMenu()) return; + + const componentId = interaction.customId; + + if (componentId === "deliver_option") { + const selectedOption = interaction.values[0]; + + if (selectedOption === "single" || selectedOption === "multiple") { + console.log(`Handling ${selectedOption} order(s)...`); + + const selectMenu = new StringSelectMenuBuilder() + .setCustomId(selectedOption === "single" ? "deliver_order" : "deliver_multiple_orders") + .setPlaceholder(`Select ${selectedOption === "single" ? "an" : "multiple"} order${selectedOption === "single" ? "" : "s"} to deliver`); + + const orders = await db.orders.findMany({ + where: { + status: OrderStatus.PendingDelivery, + }, + select: { + id: true, + user: true, + }, + }); + + if (orders.length === 0) { + await interaction.reply({ content: "No orders available for delivery.", ephemeral: false }); + return; + } + + if (orders.length > 25) { + orders.splice(25); // Limit the number of orders to 25 + } + + for (const order of orders) { + selectMenu.addOptions({ + label: order.id, + description: `User: ${order.user}`, + value: order.id, + }); + } + + const actionRow = { + type: ComponentType.ActionRow, + components: [selectMenu], + }; + + const embed = new EmbedBuilder() + .setDescription(`Please select ${selectedOption === "single" ? "an" : "multiple"} order${selectedOption === "single" ? "" : "s"} to deliver.`) + .setColor("#00FF00"); + + await interaction.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true, + }); + return; + } + } + + if (componentId === "deliver_order") { + const orderId = interaction.values[0]; + + const order = await db.orders.findUnique({ + where: { + id: orderId, + }, + }); + + if (!order) { + await interaction.reply({ content: "Invalid order selected.", ephemeral: true }); return; } - if (order.user === int.user.id && !permissions.developer.hasPermission(int.user)) { - await int.reply(text.common.interactOwn); + + if (order.user === interaction.user.id && !permissions.developer.hasPermission(interaction.user)) { + await interaction.reply({ content: text.common.interactOwn, ephemeral: false }); return; } - const info = await upsertWorkerInfo(int.user); + + const info = await upsertWorkerInfo(interaction.user); await db.workerInfo.update({ where: { - id: int.user.id, + id: interaction.user.id, }, data: { deliveries: { increment: 1 }, }, }); - await db.order.update({ where: { id: order.id }, data: { status: OrderStatus.Delivered, deliverer: int.user.id } }); + await db.orders.update({ + where: { + id: orderId, + }, + data: { + status: OrderStatus.Delivered, + deliverer: interaction.user.id, + }, + }); + const channel = client.channels.cache.get(order.channel) ?? await client.channels.fetch(order.channel).catch(() => null) ?? client.users.cache.get(order.user); - if (!channel || (channel instanceof GuildChannel && !channel.isText())) { - await int.reply(text.commands.deliver.noChannel); + if (!channel || (channel instanceof GuildChannel && channel.type !== ChannelType.GuildText)) { + await interaction.reply({ content: text.commands.deliver.noChannel, ephemeral: true }); return; } - await int.reply(`${text.commands.deliver.success}${info?.deliveryMessage ? "" : `\n${text.commands.deliver.noMessage}`}`); - await channel.send(format(info?.deliveryMessage ?? text.commands.deliver.default, await orderPlaceholders(order))); - }); + + await interaction.reply({ content: `${text.commands.deliver.success}${info?.deliveryMessage ? "" : `\n${text.commands.deliver.noMessage}`}`, ephemeral: false }); + await channel.send(format(info?.deliveryMessage || text.commands.deliver.default, await orderPlaceholders(order))); + } + + if (componentId === "deliver_multiple_orders") { + const orderIds = interaction.values; + + const selectedOrders = await db.orders.findMany({ + where: { + id: { in: orderIds }, + status: OrderStatus.PendingDelivery, + }, + }); + + if (selectedOrders.length === 0) { + await interaction.reply({ content: "No valid orders selected.", ephemeral: true }); + return; + } + + const info = await upsertWorkerInfo(interaction.user); + + const message = `Delivering ${selectedOrders.length} order(s)...`; + + for (let i = 0; i < selectedOrders.length; i++) { + const order = selectedOrders[i]; + + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Delivered, + deliverer: interaction.user.id, + }, + }); + + const channel = client.channels.cache.get(order.channel) ?? await client.channels.fetch(order.channel).catch(() => null); + if (channel && (channel instanceof GuildChannel && channel.type === ChannelType.GuildText)) { + await channel.send(format(info?.deliveryMessage || text.commands.deliver.default, await orderPlaceholders(order))); + } + } + + await db.workerInfo.update({ + where: { + id: interaction.user.id, + }, + data: { + deliveries: { increment: selectedOrders.length }, + }, + }); + + await interaction.reply({ content: `${text.commands.deliver.multiSuccess.replace("{count}", selectedOrders.length.toString())}${info?.deliveryMessage ? "" : `\n${text.commands.deliver.noMessage}`}`, ephemeral: true }); + } +}); diff --git a/src/commands/orders/worker/deliverymessage.ts b/src/commands/orders/worker/deliverymessage.ts index 3bd1c44..bca33a5 100644 --- a/src/commands/orders/worker/deliverymessage.ts +++ b/src/commands/orders/worker/deliverymessage.ts @@ -1,19 +1,8 @@ -import { OrderStatus } from "@prisma/client"; -import { CategoryChannel, GuildChannel } from "discord.js"; import { db } from "../../../database/database"; -import { - generateOrderId, - getClaimedOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderPlaceholders, - requiredOrderPlaceholders, -} from "../../../database/order"; +import { requiredOrderPlaceholders } from "../../../database/orders"; import { getWorkerInfo, upsertWorkerInfo } from "../../../database/workerInfo"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; +import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; diff --git a/src/commands/orders/worker/duty.ts b/src/commands/orders/worker/duty.ts index 445a5c9..0a9cf4a 100644 --- a/src/commands/orders/worker/duty.ts +++ b/src/commands/orders/worker/duty.ts @@ -1,20 +1,7 @@ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../../database/order"; -import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; +import { text } from "../../../providers/config"; import { mainGuild, mainRoles } from "../../../providers/discord"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; export const command = new Command("duty", "Toggles your on-duty status.") .addPermission(permissions.employee) @@ -30,4 +17,4 @@ export const command = new Command("duty", "Toggles your on-duty status.") if (hass) await int.member.roles.remove(mainRoles.dutyd); else await int.member.roles.add(mainRoles.dutyd); await int.reply(has ? text.commands.duty.disabled : text.commands.duty.enabled); - }); + }); \ No newline at end of file diff --git a/src/commands/orders/worker/editstatus.ts b/src/commands/orders/worker/editstatus.ts new file mode 100644 index 0000000..09a0b52 --- /dev/null +++ b/src/commands/orders/worker/editstatus.ts @@ -0,0 +1,56 @@ +/* eslint-disable indent */ +import { OrderStatus } from "@prisma/client"; +import { db } from "../../../database/database"; +import { getClaimedOrder } from "../../../database/orders"; +import { text } from "../../../providers/config"; +import { permissions } from "../../../providers/permissions"; +import { Command } from "../../../structures/Command"; +import { CommandInteraction } from "discord.js"; + +export const command = new Command( + "editstatus", + "Edit the status of an order." +) + .addPermission(permissions.moderator) + .addOption("string", (option) => + option + .setName("order_id") + .setDescription("The ID of the order to edit.") + .setRequired(true) + ) + .addOption("string", (option) => + option + .setName("status") + .setDescription("The status to set.") + .setRequired(true) + .addChoices( + { name: "Preparing", value: OrderStatus.Preparing }, + { name: "Unprepared", value: OrderStatus.Unprepared }, + { name: "PendingDelivery", value: OrderStatus.PendingDelivery }, + + // Add other choices here if needed + ) + ) + .setExecutor(async (int: CommandInteraction) => { + const orderId = int.options.getString("order_id", true); + const newStatus = int.options.getString("status", true); + + const order = await getClaimedOrder(orderId); + if (!order) { + await int.reply({ content: "Order not found for the specified ID." }); + return; + } + + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: newStatus, + }, + }); + + await int.reply({ content: `Order status for order (${orderId}) has been updated to ${newStatus}.` }); + }); + +module.exports = { command }; diff --git a/src/commands/orders/worker/fetch.ts b/src/commands/orders/worker/fetch.ts index 952a6d2..bc029f0 100644 --- a/src/commands/orders/worker/fetch.ts +++ b/src/commands/orders/worker/fetch.ts @@ -1,43 +1,32 @@ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../../database/database"; -import { - generateOrderId, - getClaimedOrder, - getOrder, - hasActiveOrder, - matchActiveOrder, - matchOrderStatus, - orderEmbedAsync, -} from "../../../database/order"; +import { getOrder, matchActiveOrder, orderEmbedAsync } from "../../../database/orders"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; +import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; -export const command = new Command("fetch", "Fetches the status of an order.") +export const command = new Command( + "fetch", + "Fetches the status of an order." +) .addPermission(permissions.employee) - .addOption("string", o => - o - .setRequired(true) - .setName("order") - .setDescription("The order to fetch. Requires the entire ID when checking inactive orders.") + .addOption("string", (o) => o + .setRequired(true) + .setName("order") + .setDescription( + "The order to fetch. Requires the entire ID when checking inactive orders." + ) ) - .addOption("boolean", o => - o - .setName("inactive") - .setDescription("Include inactive orders too.") + .addOption("boolean", (o) => + o.setName("inactive").setDescription("Include inactive orders too.") ) - .setExecutor(async int => { - const match = int.options.getString("order", true); - const inactive = int.options.getBoolean("inactive") ?? false; + .setExecutor(async (int) => { + const match = int.options.get("order")?.value; + const inactive = int.options.get("inactive")?.value; const order = inactive ? await getOrder(match) : await matchActiveOrder(match); if (!order) { await int.reply(text.common.invalidOrderId); return; + } else { + await int.reply({ embeds: [await orderEmbedAsync(order, client)] }); } - await int.reply({ - embeds: [await orderEmbedAsync(order)] - }); }); diff --git a/src/commands/orders/worker/leaderboard.ts b/src/commands/orders/worker/leaderboard.ts new file mode 100644 index 0000000..52969f1 --- /dev/null +++ b/src/commands/orders/worker/leaderboard.ts @@ -0,0 +1,174 @@ +/* eslint-disable indent */ +import { permissions } from "../../../providers/permissions"; +import { CommandInteraction, EmbedBuilder, Message } from "discord.js"; +import { ButtonBuilder, ButtonStyle, ActionRowBuilder } from "discord.js"; +import { Command } from "../../../structures/Command"; +import { getWorkerInfos } from "../../../database/workerInfo"; +const PAGE_SIZE = 5; // Number of workers per page + +async function refreshWorkerInfos() { + // Refresh worker infos from the database + await getWorkerInfos(true); + // Wait for 1 second before retrieving the worker infos again + await new Promise((resolve) => setTimeout(resolve, 1000)); +} + +export const command = new Command("leaderboard", "hm.") + .addPermission(permissions.developer) + .setExecutor(async (int: CommandInteraction) => { + // Refresh worker infos from the database + await refreshWorkerInfos(); + + // Get worker infos from database + const workerInfos = await getWorkerInfos(); + + // Filter out workers who have not delivered or prepared any orders + const activeWorkerInfos = workerInfos.filter( + (workerInfo) => + workerInfo.deliveries > 0 || workerInfo.preparations > 0 + ); + + // Sort worker infos by delivered and prepared orders + activeWorkerInfos.sort( + (a, b) => + b.deliveries + b.preparations - (a.deliveries + a.preparations) + ); + + // Calculate the number of pages required + const totalPages = Math.ceil(activeWorkerInfos.length / PAGE_SIZE); + + // Get the current page number from the command options (defaults to page 1) + const currentPage = int.options.getInteger("page") ?? 1; + + // Calculate the start and end index for the workers on the current page + const startIndex = (currentPage - 1) * PAGE_SIZE; + const endIndex = Math.min(startIndex + PAGE_SIZE, activeWorkerInfos.length); + + // Create the embed + const embed = new EmbedBuilder() + .setTitle("Delivery Leaderboard") + .setColor("Aqua"); + + // Add fields for each worker info on the current page + if (activeWorkerInfos.length > 0) { + for (let i = startIndex; i < endIndex; i++) { + const workerInfo = activeWorkerInfos[i]; + const isTopThree = i < 3; + const emoji = + i === 0 + ? "đŸĨ‡" + : i === 1 + ? "đŸĨˆ" + : i === 2 + ? "đŸĨ‰" + : ""; + + embed.addFields({ + name: `${isTopThree ? emoji : ""} ${i + 1}. ${workerInfo.id}`, + value: `Delivered: ${workerInfo.deliveries} | Preparations: ${workerInfo.preparations}`, + }); + } + + // Add page information to the embed + embed.setFooter({ text: `Page ${currentPage}/${totalPages}` }); + } else { + // Display a message if there are no active worker infos + embed.setDescription("No active workers found."); + } + + // Send the initial embed + const reply = await int.reply({ embeds: [embed], fetchReply: true }) as Message; + + // Function to update the embed based on the current page + const updateEmbed = async (pageNumber: number) => { + // Calculate the start and end index for the workers on the updated page + const startIndex = (pageNumber - 1) * PAGE_SIZE; + const endIndex = Math.min( + startIndex + PAGE_SIZE, + activeWorkerInfos.length + ); + + // Clear the fields in the embed + embed.setFields([]); + + // Add fields for each worker info on the updated page + for (let i = startIndex; i < endIndex; i++) { + const workerInfo = activeWorkerInfos[i]; + const isTopThree = i < 3; + const emoji = + i === 0 + ? "đŸĨ‡" + : i === 1 + ? "đŸĨˆ" + : i === 2 + ? "đŸĨ‰" + : ""; + + embed.addFields({ + name: `${isTopThree ? emoji : ""} ${i + 1}. ${workerInfo.id}`, + value: `Delivered: ${workerInfo.deliveries} | Preparations: ${workerInfo.preparations}`, + }); + } + + // Update the embed's page information + embed.setFooter({ text: `Page ${pageNumber}/${totalPages}` }); + + // Update the message with the updated embed + await reply.edit({ embeds: [embed] }); + }; + + // Add pagination buttons if there is more than one page + if (totalPages > 1) { + // Create the previous button + const previousButton = new ButtonBuilder() + .setCustomId("previous") + .setLabel("Previous") + .setStyle(ButtonStyle.Secondary); + + // Create the next button + const nextButton = new ButtonBuilder() + .setCustomId("next") + .setLabel("Next") + .setStyle(ButtonStyle.Secondary); + + // Create the action row with the pagination buttons + const actionRow = new ActionRowBuilder() + .addComponents(previousButton, nextButton); + + // Await the interaction with the pagination buttons + const collector = reply.createMessageComponentCollector({ + filter: (interaction) => + interaction.user.id === int.user.id && + (interaction.customId === "previous" || + interaction.customId === "next"), + time: 60000, + }); + + collector.on("collect", async (interaction) => { + const { customId } = interaction; + + if (customId === "previous") { + // Handle the previous button + const newPage = Math.max(currentPage - 1, 1); + await updateEmbed(newPage); + } else if (customId === "next") { + // Handle the next button + const newPage = Math.min(currentPage + 1, totalPages); + await updateEmbed(newPage); + } + + // Update the message with the updated embed and action row + await (interaction as any).update({ embeds: [embed], components: [actionRow.toJSON() as any] }); + }); + + collector.on("end", () => { + // Remove the action row from the message after the collector ends + reply.edit({ components: [] }); + }); + + // Update the message with the initial embed and action row + await reply.edit({ embeds: [embed], components: [actionRow.toJSON() as any] }); + } + }); + +export { command as leaderboard }; \ No newline at end of file diff --git a/src/commands/orders/worker/list.ts b/src/commands/orders/worker/list.ts index a3c50cb..5965f24 100644 --- a/src/commands/orders/worker/list.ts +++ b/src/commands/orders/worker/list.ts @@ -1,13 +1,12 @@ -import { db } from "../../../database/database"; -import { generateOrderId, getAllActiveOrders, hasActiveOrder } from "../../../database/order"; +/* eslint-disable indent */ +import { getAllActiveOrders } from "../../../database/orders"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; +import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; import pms from "pretty-ms"; -import { OrderStatus } from "@prisma/client"; +import { CafeStatus, OrderStatus } from "@prisma/client"; export const command = new Command("list", "Lists active orders.") .addPermission(permissions.employee) @@ -20,9 +19,8 @@ export const command = new Command("list", "Lists active orders.") ${format(txt.parts.status, text.statuses[x.status] ?? x.status)}\ - ${format(txt.parts.details, x.details)}\ - ${format(txt.parts.time, `${pms(Date.now() - x.createdAt.getTime(), { verbose: true, unitCount: 1 })} ago`)}\ - ${x.status === OrderStatus.Unprepared ? "- **UNCLAIMED**" : x.status === OrderStatus.Preparing ? `- **Claimed by ${ - (x.claimer ? client.users.cache.get(x.claimer)?.tag : undefined) ?? "Unknown User" - }**` : ""} + ${x.status === OrderStatus.Unprepared ? "- **UNCLAIMED**" : x.status === OrderStatus.Preparing ? `- **Claimed by ${(x.claimer ? client.users.cache.get(x.claimer)?.tag : undefined) ?? "Unknown User" + }**` : ""} `) .join("\n") || `${txt.empty}`}` ); diff --git a/src/commands/orders/worker/unclaim.ts b/src/commands/orders/worker/unclaim.ts index d4637d8..332c5c1 100644 --- a/src/commands/orders/worker/unclaim.ts +++ b/src/commands/orders/worker/unclaim.ts @@ -1,29 +1,102 @@ -import { OrderStatus } from "@prisma/client"; +/* eslint-disable quotes */ +import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; +import { Command } from "../../../structures/Command"; +import { permissions } from "../../../providers/permissions"; +import { OrderStatus, getClaimedOrder, } from "../../../database/orders"; import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder, matchOrderStatus } from "../../../database/order"; +import { text } from "../../../providers/config"; import { client } from "../../../providers/client"; -import { config, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; -export const command = new Command("unclaim", "Allows you to unclaim a order.") +export const command = new Command("unclaim", "Allows you to unclaim an order.") .addPermission(permissions.employee) - .addOption("string", o => o.setRequired(true).setName("order").setDescription("Here u can unclaim the order.")) - .setExecutor(async int => { - - const match = int.options.getString("order", true); - const order = await matchOrderStatus(match, OrderStatus.Preparing); - if (order === null) { - await int.reply(text.common.invalidOrderId); + .setExecutor(async (int: CommandInteraction) => { + const claimedOrder = await getClaimedOrder(int.user); + if (!claimedOrder) { + await int.reply({ content: text.commands.unclaim.notClaimed, ephemeral: true }); return; } - if (order.user === int.user.id && !permissions.developer.hasPermission(int.user)) { - await int.reply(text.common.interactOwn); + + const order = await db.orders.findUnique({ + where: { + id: claimedOrder.id, + }, + select: { + id: true, + user: true, + details: true, // Include the 'details' property + }, + }); + + if (!order) { + await int.reply({ content: "Invalid order selected.", ephemeral: true }); return; } - await db.order.update({ where: { id: order.id }, data: { claimer: null, status: OrderStatus.Unprepared } }); - await int.reply(text.commands.unclaim.success); - + const details = order.details.length > 50 ? order.details.substring(0, 47) + "..." : order.details; + const user = order.user.length > 50 ? order.user.substring(0, 47) + "..." : order.user; + + const selectMenu = new StringSelectMenuBuilder() + .setCustomId("unclaim_order") + .setPlaceholder("Select the order to unclaim") + .addOptions([ + { + label: order.id, + description: `Details: ${details}\nUser: ${user}`, + value: order.id, + }, + ]); + const actionRow = { + type: ComponentType.ActionRow, + components: [selectMenu], + }; + + const embed = new EmbedBuilder() + .setDescription("Please select the order to unclaim.") + .setColor("#FF0000"); + + await int.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true, + }); }); + +// Interaction Create Event (for handling select menu interaction) +client.on("interactionCreate", async (interaction) => { + if (!interaction.isStringSelectMenu()) return; + + const componentId = interaction.customId; + if (componentId === "unclaim_order") { + const orderId = interaction.values[0]; + + const order = await db.orders.findUnique({ + where: { + id: orderId, + }, + select: { + id: true, + user: true, + claimer: true, + }, + }); + + if (!order) { + await interaction.reply({ content: "Invalid order selected.", ephemeral: true }); + return; + } + + if (order.claimer !== interaction.user.id) { + await interaction.reply({ content: text.commands.unclaim.notClaimed, ephemeral: true }); + return; + } + + await db.orders.update({ + where: { id: orderId }, + data: { claimer: null, status: OrderStatus.Unprepared }, + }); + + await interaction.reply({ + content: text.commands.unclaim.success.replace('{id}', order.id), + ephemeral: false, + }); + } +}); diff --git a/src/commands/orders/worker/workerinfo.ts b/src/commands/orders/worker/workerinfo.ts new file mode 100644 index 0000000..96b85be --- /dev/null +++ b/src/commands/orders/worker/workerinfo.ts @@ -0,0 +1,49 @@ +/* eslint-disable quotes */ +/* eslint-disable indent */ +import { CommandInteraction, User } from "discord.js"; +import { permissions } from "../../../providers/permissions"; +import { Command } from "../../../structures/Command"; +import { PrismaClient, CafeStatus, OrderStatus } from "@prisma/client"; + +const prisma = new PrismaClient(); + +export const command = new Command("workerinfo", + "Tracks the number of orders an employee has prepared and delivered.") + .addPermission(permissions.employee) + .addOption("user", (o) => + o.setName("employee") + .setDescription("The employee whose stats to check.") + .setRequired(false) + ) + .setExecutor(async (int: CommandInteraction) => { + let employeeId = int.user.id; // assuming the employee's ID is the user's ID + + // If an employee is specified, use their ID instead + const employeeOption = int.options.getUser("employee"); + if (employeeOption) { + employeeId = employeeOption.id; + } + + // Get the total number of orders the employee has prepared + const totalPreparations = await prisma.orders.count({ + where: { + claimer: employeeId, + status: { + not: OrderStatus.Unprepared + }, + }, + }); + + // Get the total number of orders the employee has delivered + const totalDeliveries = await prisma.orders.count({ + where: { + deliverer: employeeId, + status: OrderStatus.Delivered, + }, + }); + + // Get the user's username for the reply + const username = employeeOption ? employeeOption.username : int.user.username; + + await int.reply(`${username} has prepared ${totalPreparations} orders and delivered ${totalDeliveries} orders.`); + }); \ No newline at end of file diff --git a/src/commands/orders/worker/workerstats.ts b/src/commands/orders/worker/workerstats.ts new file mode 100644 index 0000000..1c07365 --- /dev/null +++ b/src/commands/orders/worker/workerstats.ts @@ -0,0 +1,52 @@ +/* eslint-disable quotes */ +/* eslint-disable indent */ +import { CommandInteraction, EmbedBuilder } from "discord.js"; +import { permissions } from "../../../providers/permissions"; +import { Command } from "../../../structures/Command"; +import { PrismaClient, Prisma } from '@prisma/client'; +import { getWorkerInfo, getWorkerInfos } from "../../../database/workerInfo"; + +const prisma = new PrismaClient(); + +export const command = new Command("workerstats", "Checks the global worker stats.") + .addSyntax("monthly", "text") + .addPermission(permissions.employee) + .addShortcuts("ws") + .setExecutor(async (int: CommandInteraction) => { + const args = int.options.getString("monthly")?.includes("m") ? ["monthly", ...int.options.getString("monthly").split(" ").slice(1)] : []; + const workerInfos = await getWorkerInfos(); // Retrieve the workerInfos + let data = workerInfos; + let isMonthly = false; + if (args[0] && args[0].includes("m")) { + data = workerInfos; + args.shift(); + isMonthly = true; + } + let sumc = data.reduce((acc, info) => acc + info.preparations, 0); // Calculate sum of cooks + let sumd = data.reduce((acc, info) => acc + info.deliveries, 0); // Calculate sum of delivers + let sum = sumc + sumd; + let avgc = sumc / data.length; // Calculate average cooks + let avgd = sumd / data.length; // Calculate average delivers + let avg = avgc + avgd; + const li = [sumc, sumd, sum, avgc, avgd, avg].map(item => { + if (isNaN(item)) return 0; + return item; + }); + sumc = li[0]; + sumd = li[1]; + sum = li[2]; + avgc = li[3]; + avgd = li[4]; + const embed = new EmbedBuilder() + .setTitle(`The Global ${isMonthly ? "Monthly " : ""}Worker Stats`) + .addFields( + { name: "Total preps", value: `${sumc} preps`, inline: true }, + { name: "Average preps", value: `${avgc} preps`, inline: true }, + { name: "Total deliveries", value: `${sumd} delivers`, inline: true }, + { name: "Average deliveries", value: `${avgd} deliveries`, inline: true }, + { name: "Total", value: `${sum} preps and deliveries`, inline: true }, + { name: "Average", value: `${avg} preps and deliveries`, inline: true } + ) + .setThumbnail("https://images.emojiterra.com/twitter/512px/1f4ca.png"); + int.reply({ embeds: [embed] }); + }); diff --git a/src/commands/public/expboard.ts b/src/commands/public/expboard.ts new file mode 100644 index 0000000..7f1da27 --- /dev/null +++ b/src/commands/public/expboard.ts @@ -0,0 +1,48 @@ +//expboard +/* eslint-disable quotes */ +/* eslint-disable indent */ +import { CommandInteraction, EmbedBuilder } from "discord.js"; +import { Command } from "../../structures/Command"; +import { PrismaClient } from "@prisma/client"; + +const prisma = new PrismaClient(); + +export const command = new Command("expboard", "Shows the leaderboard.") + .setExecutor(async (int: CommandInteraction) => { + // Check if the interaction is from a guild + if (!int.guild) { + await int.reply("This command can only be used in a server."); + return; + } + + // Get all users in the guild + const users = await prisma.guildsXP.findMany({ + where: { + guildId: int.guild.id, + }, + }); + + // Sort the users by level and exp + users.sort((a, b) => b.level - a.level || b.exp - a.exp); + + // Take the top 10 users + const leaderboard = users.slice(0, 10); + + // Format the leaderboard into a string + let leaderboardString = leaderboard.map((user, index) => { + return `${index + 1}. <@${user.userId}> - Level ${user.level}`; + }).join('\n'); + + // Check if the leaderboard is empty + if (leaderboardString === '') { + leaderboardString = 'No users in the leaderboard yet.'; + } + + // Create a new embed + const embed = new EmbedBuilder() + .setTitle("Leaderboard") + .setDescription(leaderboardString) + .setColor("#0099ff"); + + await int.reply({ embeds: [embed] }); + }); \ No newline at end of file diff --git a/src/commands/public/notifi.ts b/src/commands/public/notifi.ts new file mode 100644 index 0000000..0a4019b --- /dev/null +++ b/src/commands/public/notifi.ts @@ -0,0 +1,49 @@ +/* eslint-disable quotes */ +/* eslint-disable indent */ +import { PrismaClient } from "@prisma/client"; +import { Command } from "../../structures/Command"; +import { permissions } from "../../providers/permissions"; + +const prisma = new PrismaClient(); + +export const command = new Command("notifi", + "Sets the channel for notifications.") + //.addPermission(permissions.employee) + .addOption("channel", (o) => + o.setName("channel").setDescription("The channel to set for notifications.").setRequired(true) + ) + .setExecutor(async (int) => { + // Ignore interactions from bots or from DMs + if (int.user.bot || !int.guild) return; + + // Get the ID of the channel from the command option + const channelId = int.options.getChannel('channel')?.id; + if (!channelId) { + int.reply('Please provide a valid channel.'); + return; + } + + // Update the notification channel in the database + await prisma.guildsXP.upsert({ + where: { + userId_guildId: { + userId: int.user.id, + guildId: int.guild.id, + }, + }, + create: { + userId: int.user.id, + guildId: int.guild.id, + userName: int.user.username, + level: 0, + exp: 0, + location: 'default', + notificationChannelId: channelId, // Set the notification channel ID + }, + update: { + notificationChannelId: channelId, // Update the notification channel ID + }, + }); + + int.reply(`Notification channel set to <#${channelId}>.`); + }); diff --git a/src/commands/public/profile.ts b/src/commands/public/profile.ts new file mode 100644 index 0000000..294f93e --- /dev/null +++ b/src/commands/public/profile.ts @@ -0,0 +1,88 @@ +/* eslint-disable quotes */ +/* eslint-disable indent */ +import { CommandInteraction, EmbedBuilder } from "discord.js"; +import { Command } from "../../structures/Command"; +import { PrismaClient } from "@prisma/client"; + +const prisma = new PrismaClient(); + +export const command = new Command("profile", "Shows your profile.") + .setExecutor(async (int: CommandInteraction) => { + // Check if the interaction is from a guild + if (!int.guild) { + await int.reply("This command can only be used in a server."); + return; + } + + try { + const userId = int.user.id; + const guildId = int.guild.id; + + // Check if the user exists in the userInfo table + const userInfo = await prisma.userInfo.findUnique({ + where: { + id: userId, + }, + }); + + if (!userInfo) { + await int.reply("You don't have a profile yet."); + return; + } + + // Check if the user's guildsXP data exists in the database + let userGuildData = await prisma.guildsXP.findUnique({ + where: { + userId_guildId: { + userId: userId, + guildId: guildId, + }, + }, + }); + + if (!userGuildData) { + // If the data doesn't exist, create it in the database + userGuildData = await prisma.guildsXP.create({ + data: { + userId: userId, + guildId: guildId, + userName: int.user.username, + level: 0, + exp: 0, + user: { connect: { id: userId } }, // Connect the guildsXP to the UserInfo + }, + }); + } else if (!userGuildData.userName) { + // If the userName is blank, update it with the user's username + userGuildData = await prisma.guildsXP.update({ + where: { + userId_guildId: { + userId: userId, + guildId: guildId, + }, + }, + data: { + userName: int.user.username, + }, + }); + } + + const nextLevelExp = userGuildData.level * 100; + const level = userGuildData.level; + + // Create a new embed using EmbedBuilder + const embed = new EmbedBuilder() + .setTitle(`${int.user.username}'s Profile`) + .setThumbnail(int.user.displayAvatarURL()) + .addFields( + { name: "Experience", value: `${userGuildData.exp}/${nextLevelExp}`, inline: true }, + { name: "Level", value: `${level}`, inline: true } + ) + .setColor("#0099ff"); + + await int.reply({ embeds: [embed] }); + } catch (error) { + console.error('Error retrieving user data:', error); + return; + } + }); diff --git a/src/database/order.ts b/src/database/order.ts index e46b76a..52f8c64 100644 --- a/src/database/order.ts +++ b/src/database/order.ts @@ -1,40 +1,41 @@ -import type { Order } from "@prisma/client"; -import { OrderStatus } from "@prisma/client"; -import type { User, UserResolvable, AnyChannel } from "discord.js"; -import { MessageEmbed, Channel, GuildChannel } from "discord.js"; +import type { Order, } from "@prisma/client"; +import { CafeStatus, CafeOrders, PrismaClient } from "@prisma/client"; +import type { Client, User, UserResolvable, Channel } from "discord.js"; +import { EmbedBuilder, GuildChannel } from "discord.js"; import { client } from "../providers/client"; import { text } from "../providers/config"; import { resolveUserId } from "../utils/id"; import { format } from "../utils/string"; import { db } from "./database"; - -export const activeOrderStatus = [ - OrderStatus.Unprepared, - OrderStatus.Preparing, - OrderStatus.Brewing, - OrderStatus.Fermenting, - OrderStatus.PendingDelivery, - OrderStatus.Delivering, +import type { EmbedField } from "discord.js"; +const prisma = new PrismaClient(); +export const activeCafeStatus = [ + CafeStatus.Unprepared, + CafeStatus.Preparing, + CafeStatus.Brewing, + CafeStatus.Fermenting, + CafeStatus.PendingDelivery, + CafeStatus.Delivering, ]; export const hasActiveOrder = async (user: UserResolvable) => - (await db.order.count({ + (await db.cafeOrders.count({ where: { user: resolveUserId(user), - status: { in: activeOrderStatus }, + status: { in: activeCafeStatus }, }, })) > 0; export const getUserActiveOrder = async (user: UserResolvable) => - await db.order.findFirst({ + await db.cafeOrders.findFirst({ where: { user: resolveUserId(user), - status: { in: activeOrderStatus }, + status: { in: activeCafeStatus }, }, }); export const orderExists = async (id: string) => - (await db.order.count({ + (await db.cafeOrders.count({ where: { id, }, @@ -50,43 +51,60 @@ export const generateOrderId = async () => { throw new Error("This error should never appear. If it does, please buy a lottery ticket."); }; -export const getAllActiveOrders = async () => db.order.findMany({ where: { status: { in: activeOrderStatus } } }); +const dishIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); + +export const generateDishId = async () => { + for (let i = 0; i < 1000; i++) { + const generated = [...Array(7)].map(() => dishIdChars[Math.floor(Math.random() * dishIdChars.length)]).join(""); + if (!(await dishExists(generated))) return generated; + } + throw new Error("Failed to generate a unique dish ID."); +}; + +const dishExists = async (id: string) => + (await prisma.dishes.count({ + where: { + id, + }, + })) > 0; + + +export const getAllActiveOrders = async () => db.cafeOrders.findMany({ where: { status: { in: activeCafeStatus } } }); -export const matchOrderStatus = async (id: string, status: OrderStatus) => - db.order.findFirst({ where: { id: { startsWith: id }, status } }); +export const matchCafeStatus = async (id: string, status: CafeStatus) => + db.cafeOrders.findFirst({ where: { id: { startsWith: id }, status } }); export const matchActiveOrder = async (id: string) => - db.order.findFirst({ where: { id: { startsWith: id.toLowerCase() }, status: { in: activeOrderStatus } } }); + db.cafeOrders.findFirst({ where: { id: { startsWith: id.toLowerCase() }, status: { in: activeCafeStatus } } }); export const getClaimedOrder = async (user: UserResolvable) => - db.order.findFirst({ where: { claimer: resolveUserId(user), status: OrderStatus.Preparing } }); + db.cafeOrders.findFirst({ where: { claimer: resolveUserId(user), status: CafeStatus.Preparing } }); export const getOrder = async (id: string) => - db.order.findFirst({ where: { id } }); + db.cafeOrders.findFirst({ where: { id } }); export const getLatestOrder = async (user: UserResolvable) => - db.order.findFirst({ where: { user: resolveUserId(user), status: OrderStatus.Delivered }, orderBy: { createdAt: "desc" } }); + db.cafeOrders.findFirst({ where: { user: resolveUserId(user), status: CafeStatus.Delivered }, orderBy: { createdAt: "desc" } }); const embedText = text.common.orderEmbed; +const embedFields = text.common.orderEmbed.fields; const rawOrderEmbed = (order: Order) => - new MessageEmbed() + new EmbedBuilder() .setTitle(format(embedText.title, order.id)) .setDescription(format(embedText.description, order.id)) - .addField(embedText.fields.id, `\`${order.id}\``, true) - .addField(embedText.fields.details, `${order.details}`, true) - .addField(embedText.fields.status, `${text.statuses[order.status] ?? order.status}`, true) - .addField( - embedText.fields.orderedAt, - ` ()` - ) + .addFields({ name: format(embedFields.id), value: `\`${order.id}\``, inline: true }) + .addFields({ name: embedFields.details, value: `${order.details}`, inline: true }) + .addFields({ name: embedFields.status, value: `${text.statuses[order.status] ?? order.status}`, inline: true }) + .addFields({ name: embedFields.orderedAt, value: ` ()`, inline: true }) .setTimestamp(); + const formatIdentified = (identified: { id: string; name: string } | string) => format(text.common.identified, typeof identified === "string" ? { id: identified, name: "Unknown" } : identified); const formatUser = (user: User | string) => formatIdentified(typeof user === "string" ? user : { name: user.username, id: user.id }); -const formatChannel = (channel: AnyChannel | string) => +const formatChannel = (channel: Channel | string) => formatIdentified( channel instanceof GuildChannel ? { name: `#${channel.name}`, id: channel.id } @@ -95,47 +113,48 @@ const formatChannel = (channel: AnyChannel | string) => : channel.id ); -export const orderEmbedSync = (order: Order) => { +export const orderEmbedSync = async (order: CafeOrders, client: Client) => { const embed = rawOrderEmbed(order) - .addField(embedText.fields.customer, formatUser(client.users.cache.get(order.user) ?? order.user), true) - .addField(embedText.fields.channel, formatChannel(client.channels.cache.get(order.channel) ?? order.channel), true) - .addField(embedText.fields.guild, formatIdentified(client.guilds.cache.get(order.guild) ?? order.guild), true); + .addFields({ name: embedFields.customer, value: formatUser((await client.users.fetch(order.user).catch(() => null)) ?? order.user), inline: true }) + .addFields({ name: embedFields.channel, value: formatChannel((await client.channels.fetch(order.channel).catch(() => null)) ?? order.channel), inline: true }) + .addFields({ name: embedFields.guild, value: formatIdentified((await client.guilds.fetch(order.guild).catch(() => null)) ?? order.guild), inline: true }); if (order.claimer) - embed.addField(embedText.fields.claimer, formatUser(client.users.cache.get(order.claimer) ?? order.claimer), true); + embed.addFields({ name: embedFields.claimer, value: formatUser((await client.users.fetch(order.claimer).catch(() => null)) ?? order.claimer), inline: true }); return embed; }; const nulli = () => null; -export const orderEmbedAsync = async (order: Order) => { +export const orderEmbedAsync = async (order: CafeOrders, client: Client): Promise => { + const user = await client.users.fetch(order.user).catch(() => null); + const channel = await client.channels.fetch(order.channel).catch(() => null); + const guild = await client.guilds.fetch(order.guild).catch(() => null); + const embed = rawOrderEmbed(order) - .addField( - embedText.fields.customer, - formatUser((await client.users.fetch(order.user).catch(nulli)) ?? order.user), - true + .addFields( + { name: "Customer", value: formatUser(user ?? order.user), inline: true } ) - .addField( - embedText.fields.channel, - formatChannel((await client.channels.fetch(order.channel).catch(nulli)) ?? order.channel), - true + .addFields( + { name: "Channel", value: formatChannel(channel ?? order.channel), inline: true } ) - .addField( - embedText.fields.guild, - formatIdentified((await client.guilds.fetch(order.guild).catch(nulli)) ?? order.guild), - true - ); - if (order.claimer) - embed.addField( - embedText.fields.claimer, - formatUser((await client.users.fetch(order.claimer).catch(nulli)) ?? order.claimer), - true + .addFields( + { name: "Guild", value: formatIdentified(guild ?? order.guild), inline: true } ); + + if (order.claimer) { + const claimer = await client.users.fetch(order.claimer).catch(() => null); + if (claimer) { + embed.addFields( + { name: "Claimer", value: formatUser(claimer), inline: true } + ); + } + } + return embed; }; - export const requiredOrderPlaceholders = ["mention", "image"]; -export const orderPlaceholders = async(order: Order) => Object.assign(Object.create(null), { +export const orderPlaceholders = async (order: CafeOrders) => Object.assign(Object.create(null), { preparer: order.claimer ? formatUser((await client.users.fetch(order.claimer).catch(nulli)) ?? order.claimer) : "Unknown", deliverer: order.deliverer ? formatUser((await client.users.fetch(order.deliverer).catch(nulli)) ?? order.deliverer) : "Unknown", id: order.id, @@ -148,4 +167,7 @@ export const orderPlaceholders = async(order: Order) => Object.assign(Object.cre export const OrderFlags = { FeedbackGiven: 0b1, Tipped: 0b10, -}; \ No newline at end of file + Rated: 0b100, +}; + +export { CafeStatus }; diff --git a/src/database/orders.ts b/src/database/orders.ts new file mode 100644 index 0000000..20bc00f --- /dev/null +++ b/src/database/orders.ts @@ -0,0 +1,172 @@ + +import { OrderStatus, Orders, PrismaClient } from "@prisma/client"; +import type { Client, User, UserResolvable, Channel } from "discord.js"; +import { EmbedBuilder, GuildChannel } from "discord.js"; +import { client } from "../providers/client"; +import { text } from "../providers/config"; +import { resolveUserId } from "../utils/id"; +import { format } from "../utils/string"; +import { db } from "./database"; +const prisma = new PrismaClient(); +export const activeOrderStatus = [ + OrderStatus.Unprepared, + OrderStatus.Preparing, + OrderStatus.Brewing, + OrderStatus.Fermenting, + OrderStatus.PendingDelivery, + OrderStatus.Delivering, +]; + +export const hasActiveOrder = async (user: UserResolvable) => + (await db.orders.count({ + where: { + user: resolveUserId(user), + status: { in: activeOrderStatus }, + }, + })) > 0; + +export const getUserActiveOrder = async (user: UserResolvable) => + await db.orders.findFirst({ + where: { + user: resolveUserId(user), + status: { in: activeOrderStatus }, + }, + }); + +export const orderExists = async (id: string) => + (await db.orders.count({ + where: { + id, + }, + })) > 0; + +const orderIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); + +export const generateOrderId = async () => { + for (let i = 0; i < 1000; i++) { + const generated = [...Array(7)].map(() => orderIdChars[Math.floor(Math.random() * orderIdChars.length)]).join(""); + if (!(await orderExists(generated))) return generated; + } + throw new Error("This error should never appear. If it does, please buy a lottery ticket."); +}; + +const dishIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); + +export const generateDishId = async () => { + for (let i = 0; i < 1000; i++) { + const generated = [...Array(7)].map(() => dishIdChars[Math.floor(Math.random() * dishIdChars.length)]).join(""); + if (!(await dishExists(generated))) return generated; + } + throw new Error("Failed to generate a unique dish ID."); +}; + +const dishExists = async (id: string) => + (await prisma.dishes.count({ + where: { + id, + }, + })) > 0; + + +export const getAllActiveOrders = async () => db.orders.findMany({ where: { status: { in: activeOrderStatus } } }); + +export const matchOrderStatus = async (id: string, status: OrderStatus) => + db.orders.findFirst({ where: { id: { startsWith: id }, status } }); + +export const matchActiveOrder = async (id: string) => + db.orders.findFirst({ where: { id: { startsWith: id.toLowerCase() }, status: { in: activeOrderStatus } } }); + +export const getClaimedOrder = async (user: UserResolvable) => + db.orders.findFirst({ where: { claimer: resolveUserId(user), status: OrderStatus.Preparing } }); + +export const getOrder = async (id: string) => + db.orders.findFirst({ where: { id } }); + +export const getLatestOrder = async (user: UserResolvable) => + db.orders.findFirst({ where: { user: resolveUserId(user), status: OrderStatus.Delivered }, orderBy: { createdAt: "desc" } }); + +const embedText = text.common.orderEmbed; +const embedFields = text.common.orderEmbed.fields; + +const rawOrderEmbed = (order: Orders) => + new EmbedBuilder() + .setTitle(format(embedText.title, order.id)) + .setDescription(format(embedText.description, order.id)) + .addFields({ name: format(embedFields.id), value: `\`${order.id}\``, inline: true }) + .addFields({ name: embedFields.details, value: `${order.details}`, inline: true }) + .addFields({ name: embedFields.status, value: `${text.statuses[order.status] ?? order.status}`, inline: true }) + .addFields({ name: embedFields.orderedAt, value: ` ()`, inline: true }) + .setTimestamp(); + + +const formatIdentified = (identified: { id: string; name: string } | string) => + format(text.common.identified, typeof identified === "string" ? { id: identified, name: "Unknown" } : identified); +const formatUser = (user: User | string) => + formatIdentified(typeof user === "string" ? user : { name: user.username, id: user.id }); +const formatChannel = (channel: Channel | string) => + formatIdentified( + channel instanceof GuildChannel + ? { name: `#${channel.name}`, id: channel.id } + : typeof channel === "string" + ? channel + : channel.id + ); + +export const orderEmbedSync = async (order: Orders, client: Client) => { + const embed = rawOrderEmbed(order) + .addFields({ name: embedFields.customer, value: formatUser((await client.users.fetch(order.user).catch(() => null)) ?? order.user), inline: true }) + .addFields({ name: embedFields.channel, value: formatChannel((await client.channels.fetch(order.channel).catch(() => null)) ?? order.channel), inline: true }) + .addFields({ name: embedFields.guild, value: formatIdentified((await client.guilds.fetch(order.guild).catch(() => null)) ?? order.guild), inline: true }); + if (order.claimer) + embed.addFields({ name: embedFields.claimer, value: formatUser((await client.users.fetch(order.claimer).catch(() => null)) ?? order.claimer), inline: true }); + return embed; +}; + +const nulli = () => null; + +export const orderEmbedAsync = async (order: Orders, client: Client): Promise => { + const user = await client.users.fetch(order.user).catch(() => null); + const channel = await client.channels.fetch(order.channel).catch(() => null); + const guild = await client.guilds.fetch(order.guild).catch(() => null); + + const embed = rawOrderEmbed(order) + .addFields( + { name: "Customer", value: formatUser(user ?? order.user), inline: true } + ) + .addFields( + { name: "Channel", value: formatChannel(channel ?? order.channel), inline: true } + ) + .addFields( + { name: "Guild", value: formatIdentified(guild ?? order.guild), inline: true } + ); + + if (order.claimer) { + const claimer = await client.users.fetch(order.claimer).catch(() => null); + if (claimer) { + embed.addFields( + { name: "Claimer", value: formatUser(claimer), inline: true } + ); + } + } + + return embed; +}; +export const requiredOrderPlaceholders = ["mention", "image"]; + +export const orderPlaceholders = async (order: Orders) => Object.assign(Object.create(null), { + preparer: order.claimer ? formatUser((await client.users.fetch(order.claimer).catch(nulli)) ?? order.claimer) : "Unknown", + deliverer: order.deliverer ? formatUser((await client.users.fetch(order.deliverer).catch(nulli)) ?? order.deliverer) : "Unknown", + id: order.id, + details: order.details, + mention: `<@${order.user}>`, + user: formatUser((await client.users.fetch(order.user).catch(nulli)) ?? order.user), + image: order.image ?? "No image was found, this is very bad." +}); + +export const OrderFlags = { + FeedbackGiven: 0b1, + Tipped: 0b10, + Rated: 0b100, +}; + +export { OrderStatus }; diff --git a/src/database/userInfo.ts b/src/database/userInfo.ts index e6bf5eb..2635356 100644 --- a/src/database/userInfo.ts +++ b/src/database/userInfo.ts @@ -1,13 +1,71 @@ -import type { UserResolvable } from "discord.js"; -import { resolveUserId } from "../utils/id"; -import { db } from "./database"; +/* eslint-disable quotes */ +import { PrismaClient, UserInfo } from '@prisma/client'; +import type { User, UserResolvable } from 'discord.js'; +import { resolveUserId } from '../utils/id'; -export const getUserInfo = async (user: UserResolvable) => db.userInfo.findFirst({ where: { id: resolveUserId(user) } }); -export const upsertUserInfo = async (user: UserResolvable) => - db.userInfo.upsert({ - where: { id: resolveUserId(user) }, - create: { - id: resolveUserId(user) +const prisma = new PrismaClient(); + +export const getUserInfo = async (user: UserResolvable) => + prisma.userInfo.findFirst({ where: { id: resolveUserId(user) } }); + +export const upsertUserInfo = async (user: User, guildId: string): Promise => { + const existingUserInfo = await prisma.userInfo.findUnique({ + where: { + id: resolveUserId(user), + }, + }); + + if (existingUserInfo) { + return existingUserInfo; + } + + const createdUserInfo = await prisma.userInfo.create({ + data: { + id: resolveUserId(user), + userId: user.id, + userName: user.username, + guildId: guildId, + }, + }); + + return createdUserInfo; +}; + + +export const getUserBalance = async (user: UserResolvable): Promise<{ balance: number; donuts: number }> => { + const userInfo = await prisma.userInfo.findUnique({ + where: { + id: resolveUserId(user), + }, + select: { + balance: true, + donuts: true, + }, + }); + + const balance = userInfo?.balance ?? 0; + const donuts = userInfo?.donuts ?? 0; + + return { balance, donuts }; +}; + +export const updateBalance = async ( + user: UserResolvable, + newBalance: number, + newDonuts: number +): Promise => { + const balance = Math.floor(newBalance); + const donuts = Math.floor(newDonuts); + + const updatedUserInfo = await prisma.userInfo.update({ + where: { + id: resolveUserId(user), + }, + data: { + balance: balance, + donuts: donuts, }, - update: {} }); + + return updatedUserInfo; +}; diff --git a/src/database/workerInfo.ts b/src/database/workerInfo.ts index fa82851..45a3592 100644 --- a/src/database/workerInfo.ts +++ b/src/database/workerInfo.ts @@ -1,13 +1,49 @@ +/* eslint-disable quotes */ +import { WorkerInfo } from "@prisma/client"; import type { UserResolvable } from "discord.js"; import { resolveUserId } from "../utils/id"; import { db } from "./database"; export const getWorkerInfo = async (user: UserResolvable) => db.workerInfo.findFirst({ where: { id: resolveUserId(user) } }); -export const upsertWorkerInfo = async (user: UserResolvable) => - db.workerInfo.upsert({ - where: { id: resolveUserId(user) }, - create: { - id: resolveUserId(user) - }, - update: {} + +export const upsertWorkerInfo = async (user: UserResolvable, lastCommandName?: string) => { + const userId = resolveUserId(user); + + // Check if the worker info exists + const existingWorkerInfo = await db.workerInfo.findUnique({ + where: { id: userId }, }); + + if (existingWorkerInfo) { + // Update existing worker info + return db.workerInfo.update({ + where: { id: userId }, + data: { + lastCommandUsage: lastCommandName ? new Date() : existingWorkerInfo.lastCommandUsage, + lastCommandName: lastCommandName || existingWorkerInfo.lastCommandName, + commandUsageCount: lastCommandName ? existingWorkerInfo.commandUsageCount + 1 : existingWorkerInfo.commandUsageCount, + claimUsageCount: lastCommandName && lastCommandName.toLowerCase() === 'claim' ? existingWorkerInfo.claimUsageCount + 1 : existingWorkerInfo.claimUsageCount, + brewUsageCount: lastCommandName && lastCommandName.toLowerCase() === 'brew' ? existingWorkerInfo.brewUsageCount + 1 : existingWorkerInfo.brewUsageCount, + }, + }); + } else { + // Create new worker info with default values + return db.workerInfo.create({ + data: { + id: userId, + lastCommandUsage: lastCommandName ? new Date() : null, + lastCommandName: lastCommandName || null, + commandUsageCount: lastCommandName ? 1 : 0, + claimUsageCount: lastCommandName && lastCommandName.toLowerCase() === 'claim' ? 1 : 0, + brewUsageCount: lastCommandName && lastCommandName.toLowerCase() === 'brew' ? 1 : 0, + }, + }); + } +}; + +export async function getWorkerInfos(): Promise { + const workerInfos = await db.workerInfo.findMany(); + return workerInfos + .filter(workerInfo => workerInfo.deliveries > 0 || workerInfo.preparations > 0) + .sort((a, b) => (b.deliveries + b.preparations) - (a.deliveries + a.preparations)); +} diff --git a/src/events/CommandUsage.ts b/src/events/CommandUsage.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/events/ExpCreate.ts b/src/events/ExpCreate.ts new file mode 100644 index 0000000..d4435e9 --- /dev/null +++ b/src/events/ExpCreate.ts @@ -0,0 +1,119 @@ +/* eslint-disable quotes */ +/* eslint-disable indent */ +import { PrismaClient } from "@prisma/client"; +import { client } from "../providers/client"; + +const prisma = new PrismaClient(); + +// Map to hold cooldown Sets per guild +const cooldowns = new Map>(); + +client.on('messageCreate', async (message) => { + // Ignore messages from bots or from DMs + if (message.author.bot || !message.guild) return; + + const guildId = message.guild.id; + const userId = message.author.id; + + // If the user is in the cooldown Set for the guild, ignore this message + if (cooldowns.get(guildId)?.has(userId)) return; + + // Create a Set for the guild if it doesn't exist + if (!cooldowns.has(guildId)) { + cooldowns.set(guildId, new Set()); + } + + // Add the user to the cooldown Set for the guild + cooldowns.get(guildId)?.add(userId); + + // Remove the user from the cooldown Set after 60 seconds + setTimeout(() => { + cooldowns.get(guildId)?.delete(userId); + }, 60000); // 60000 milliseconds = 60 seconds + + try { + // Check if the user exists in the userInfo table + let userInfo = await prisma.userInfo.findUnique({ + where: { + id: userId, + }, + }); + + if (!userInfo) { + // If user does not exist, create a new userInfo record + userInfo = await prisma.userInfo.create({ + data: { + id: userId, + balance: 0, + tabLimit: 0.0, + donuts: 0, + guildsxp: "{}", + }, + }); + } + + // Create or retrieve the user's data from the database + const guildsXPData = await prisma.guildsXP.upsert({ + where: { + userId_guildId: { + userId: userId, + guildId: guildId, + }, + }, + create: { + userId: userId, + guildId: guildId, + userName: message.author.username, + level: 0, + exp: 0, + }, + update: {}, + }); + + // Increase their XP + guildsXPData.exp += Math.floor(Math.random() * 20) + 1; + + // Check if the user has enough XP to level up + if (guildsXPData.exp >= guildsXPData.level * 100) { + // If they do, increase their level and reset their XP + guildsXPData.level += 1; + guildsXPData.exp = 0; + + // Get the ID of the notification channel from the database + const notificationChannelId = guildsXPData.notificationChannelId; + if (notificationChannelId) { + // Get the channel from the client + const notificationChannel = client.channels.cache.get(notificationChannelId); + + // Check if the channel exists and is a text channel + if (notificationChannel && notificationChannel.isTextBased()) { + // Send a notification to the channel + notificationChannel.send(`${message.author.username} has leveled up to level ${guildsXPData.level}!`); + } + } + } + + // Update the user's data in the database + await prisma.guildsXP.update({ + where: { + userId_guildId: { + userId: userId, + guildId: guildId, + }, + }, + data: { + level: guildsXPData.level, + exp: guildsXPData.exp, + }, + }); + } catch (error) { + console.error('Error handling user data:', error); + return; + } +}); + + +// Close the Prisma connection when the script is exiting +process.on('beforeExit', () => { + prisma.$disconnect(); +}); diff --git a/src/events/ServerConfig.ts b/src/events/ServerConfig.ts new file mode 100644 index 0000000..22522d7 --- /dev/null +++ b/src/events/ServerConfig.ts @@ -0,0 +1,46 @@ +/* eslint-disable indent */ +import * as fs from "fs"; + +interface GuildConfig { + orderChannelId?: string; +} + +interface ServerConfig { + guilds: Record; +} + +export class ServerConfig { + private static readonly configFile = "config.json"; + private config: ServerConfig; + + constructor() { + this.config = this.loadConfig(); + } + + private loadConfig(): ServerConfig { + try { + const data = fs.readFileSync(ServerConfig.configFile, "utf-8"); + return JSON.parse(data); + } catch (error) { + console.error("Error loading config file:", error); + return { guilds: {} }; + } + } + + public getOrderChannel(guildId: string): string | undefined { + return this.config.guilds[guildId]?.orderChannelId; + } + + public setOrderChannel(guildId: string, channelId: string): void { + if (!this.config.guilds[guildId]) { + this.config.guilds[guildId] = {}; + } + this.config.guilds[guildId].orderChannelId = channelId; + this.saveConfig(); + } + + private saveConfig(): void { + const configString = JSON.stringify(this.config, null, 2); + fs.writeFileSync(ServerConfig.configFile, configString, "utf-8"); + } +} \ No newline at end of file diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index eca84b6..9ffc5a1 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -1,18 +1,10 @@ -import type { InteractionByType } from "../utils/components"; import { client } from "../providers/client"; import { commandRegistry } from "../providers/commandManager"; -import { constants, text } from "../providers/config"; -import { LifetimeMap } from "../structures/LifetimeMap"; -import type { Awaitable } from "discord.js"; -import { StopCommandExecution } from "../utils/error"; +import { text } from "../providers/config"; import { blacklist } from "../database/blacklist"; +import { StopCommandExecution } from "../utils/error"; -export const componentCallbacks = new LifetimeMap Awaitable>( - constants.interactionExpiryTimeMs -); - -client.on("interactionCreate", async int => { - +client.on("interactionCreate", async (int) => { try { if (!int.inCachedGuild()) { if (int.isCommand()) int.reply("Error B417"); @@ -27,15 +19,10 @@ client.on("interactionCreate", async int => { // TODO remove this and use discord builtin when permissions get better for (const perm of command.permissions) await perm.check(int); await command.executor(int); - } else if (int.isMessageComponent()) { - if (componentCallbacks.has(int.customId)) - await componentCallbacks.get(int.customId)?.(int as InteractionByType); - else if (int.customId.startsWith("DB_CB__")) - if (int.isButton()) await int.followUp({ content: "This interaction has expired.", ephemeral: true }); } } catch (e) { if (!(e instanceof StopCommandExecution)) { - if (int.isApplicationCommand()) int.reply({ content: text.errors.exception, ephemeral: true }).catch(); + if (int.isCommand()) int.reply({ content: text.errors.exception, ephemeral: true }).catch(); console.error(e); } } diff --git a/src/providers/client.ts b/src/providers/client.ts index 702c7a3..95279aa 100644 --- a/src/providers/client.ts +++ b/src/providers/client.ts @@ -1,28 +1,34 @@ import { REST } from "@discordjs/rest"; -import { Client } from "discord.js"; -import { config, text } from "./config"; -import { join, posix, win32 } from "path"; +import { Client, Partials } from "discord.js"; +import { config } from "./config"; +import { join } from "path"; import { sync } from "fast-glob"; -import { development } from "./env"; -import { production } from "./env"; +import { GatewayIntentBits } from "discord.js"; + if (globalThis._$clientLoaded) throw new Error("The client was loaded twice. This should never happen."); globalThis._$clientLoaded = true; -export const client = new Client({ - shards: "auto", - intents: ["GUILD_MEMBERS", "GUILDS"], - presence: { - activities: [text.bot.status], - status: production ? "online" : "online", - }, - partials: [ - "CHANNEL", "USER" - ] +export const client = new Client({ + intents: [ + GatewayIntentBits.Guilds, + GatewayIntentBits.GuildMessages, + //GatewayIntentBits.MessageContent, + GatewayIntentBits.GuildMembers, + ], + partials: [Partials.User, Partials.Channel, Partials.GuildMember, Partials.Message] +}); + +client.on("ready", () => { + console.log(`Logged in as ${client.user?.tag}!`); + client.user?.setPresence({ + activities: [{ name: "We are online! Use slash cmds to order /order & You get money through /work" }], + status: "online", // Online , idle , dnd (Do Not Disturb), invisible , offline + }); }); export const rest = new REST({ version: "9" }).setToken(config.token); client.login(config.token); -const eventsFolder = join(__dirname, "../events/**/*.js").replaceAll(win32.sep, posix.sep); -sync(eventsFolder).forEach(x => import(x) as unknown); +const eventsFolder = join(__dirname, "../events/**/*.js").replace(/\\/g, "/"); +sync(eventsFolder).forEach((x) => import(x) as unknown); diff --git a/src/providers/commandManager.ts b/src/providers/commandManager.ts index 0380efc..b1a7b35 100644 --- a/src/providers/commandManager.ts +++ b/src/providers/commandManager.ts @@ -22,13 +22,13 @@ export const applicationCommandRegistry = new Collection, - { - guild: GuildResolvable; - }, - null + ApplicationCommand<{ + guild: GuildResolvable; + }>, + { + guild: GuildResolvable; + }, + null > = notInitialized("applicationCommandManager"); const registerCommands = async (commands: Command[]) => { diff --git a/src/providers/config.ts b/src/providers/config.ts index 9d17778..7367cc6 100644 --- a/src/providers/config.ts +++ b/src/providers/config.ts @@ -1,31 +1,36 @@ import HJSON from "hjson"; import fs from "fs"; import path from "path"; -import type { ZodRawShape } from "zod"; import { z } from "zod"; import type { NamedFormattable, PositionalFormattable } from "../utils/string"; import { formatZodError } from "../utils/zod"; import pc from "picocolors"; -import { arraysSimilar } from "../utils/array"; import { IllegalStateError } from "../utils/error"; import { OrderStatus } from "@prisma/client"; +export const snowflake = z.union([ + z.string().length(18).regex(/^\d+$/), + z.string().length(19).regex(/^\d+$/), +]); -export const snowflake = z.string().length(18).regex(/^\d+$/); const pFormattable = (n: T = 1 as T) => z.string().refine(x => x.split("{}").length - 1 === n, { message: `Formattable must contain ${n} placeholders`, }) as z.ZodType>; + const nFormattable = (...keys: T) => z.string().refine( - x => - arraysSimilar( - [...x.matchAll(/\{(\w+)\}/g)].map(x => x[1]), - keys - ), + x => { + for (const key of keys) { + if (!x.includes(`{${key}}`)) { + return false; + } + } + return true; + }, { - message: `Formattable must contain the placeholders ${keys.join(", ")}`, - } - ) as z.ZodType>; + message: `Formattable must contain ${keys.join(", ")}`, + }, + ) as z.ZodType>;; const textSchema = z .object({ @@ -66,9 +71,12 @@ const textSchema = z }), commands: z.object({ order: z.object({ - success: nFormattable("details", "id"), exists: z.string(), + success: nFormattable("details", "id"), created: nFormattable("details", "duty", "id", "tag"), + success1: nFormattable("details", "id"), + success_tab: nFormattable("details", "id"), + }), list: z.object({ title: z.string(), @@ -84,10 +92,11 @@ const textSchema = z }), claim: z.object({ existing: z.string(), - success: z.string(), + success: nFormattable("id"), }), unclaim: z.object({ - success: z.string(), + success: nFormattable("id"), + notClaimed: z.string(), // Add this line for the error message }), cancel: z.object({ success: z.string(), @@ -102,6 +111,8 @@ const textSchema = z noChannel: z.string(), success: z.string(), default: z.string(), + multiSuccess: z.string(), + }), deliverymessage: z.object({ get: z.string(), @@ -118,6 +129,7 @@ const textSchema = z }), balance: z.object({ success: pFormattable(), + success1: pFormattable(), }), work: z.object({ responses: z.array(pFormattable()), @@ -136,6 +148,7 @@ const textSchema = z title: pFormattable(), footer: pFormattable(), }), + }), tip: z.object({ success: pFormattable(2), @@ -152,8 +165,19 @@ const textSchema = z }), delete: z.object({ success: z.string(), - dm: pFormattable(2), + dm: z.string(), + userDmDisabled: z.string(), + dmFailed: z.string(), + userNotFound: z.string(), + successNoDm: z.string(), }), + + rate: z.object({ + success: z.string(), + alreadyRated: z.string(), + invalidRating: z.string(), + }).passthrough(), + drinkingr: z.object({ drinks: z.array(pFormattable()), }), @@ -187,6 +211,7 @@ const configSchema = z duty: snowflake, moderator: snowflake, dutyd: snowflake, + admin: snowflake, }), channels: z.object({ brewery: snowflake, @@ -200,6 +225,7 @@ const configSchema = z const constantsSchema = z .object({ interactionExpiryTimeMs: z.number(), + bakeTimeRangeMs: z.tuple([z.number(), z.number()]), brewTimeRangeMs: z.tuple([z.number(), z.number()]), work: z.object({ amountRange: z.tuple([z.number(), z.number()]), diff --git a/src/providers/customCommands.ts b/src/providers/customCommands.ts new file mode 100644 index 0000000..d1e87f6 --- /dev/null +++ b/src/providers/customCommands.ts @@ -0,0 +1,29 @@ +import { Command } from "../structures/Command"; +import { permissions } from "../providers/permissions"; +import { CommandInteraction } from "discord.js"; + +export const customCommands = { + enableXpCommand: new Command("enablexp", "Enable XP/levels in a channel.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Command logic... + }), + + disableXpCommand: new Command("disablexp", "Disable XP/levels in a channel.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Command logic... + }), + + enableLevelNotificationsCommand: new Command("enablelevelnotifications", "Enable level notifications in a channel.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Command logic... + }), + + disableLevelNotificationsCommand: new Command("disablelevelnotifications", "Disable level notifications.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Command logic... + }), +}; diff --git a/src/providers/drink.ts b/src/providers/drink.ts new file mode 100644 index 0000000..0dca1de --- /dev/null +++ b/src/providers/drink.ts @@ -0,0 +1,25 @@ +// drink.ts + +import { PrismaClient, Drink } from "@prisma/client"; + +const prisma = new PrismaClient(); + +// Function to retrieve all drinks +export async function getAllDrinks(): Promise { + return prisma.drink.findMany(); +} + +// Function to create a new drink +export async function createDrink(data: Partial): Promise { + return prisma.drink.create({ data }); +} + +// Function to update an existing drink +export async function updateDrink(id: number, data: Partial): Promise { + return prisma.drink.update({ where: { id }, data }); +} + +// Function to delete a drink +export async function deleteDrink(id: number): Promise { + return prisma.drink.delete({ where: { id } }); +} diff --git a/src/providers/orderManager.ts b/src/providers/orderManager.ts index 819348d..7a259d5 100644 --- a/src/providers/orderManager.ts +++ b/src/providers/orderManager.ts @@ -1,13 +1,14 @@ -import { OrderStatus } from "@prisma/client"; +import { CafeStatus } from "@prisma/client"; import { db } from "../database/database"; import { format } from "../utils/string"; import { text } from "./config"; import { mainChannels } from "./discord"; +import { OrderStatus } from "../database/orders"; export const startOrderTimeoutChecks = () => { setInterval(async () => { - const brewFinished = await db.order.findMany({ where: { timeout: { lte: new Date() }, status: OrderStatus.Brewing } }); - await db.order.updateMany({ + const brewFinished = await db.orders.findMany({ where: { timeout: { lte: new Date() }, status: OrderStatus.Brewing } }); + await db.orders.updateMany({ where: { id: { in: brewFinished.map(x => x.id) } }, data: { timeout: null, status: OrderStatus.PendingDelivery }, }); diff --git a/src/providers/permissions.ts b/src/providers/permissions.ts index 9e35748..8cb4179 100644 --- a/src/providers/permissions.ts +++ b/src/providers/permissions.ts @@ -20,6 +20,7 @@ const permissionsSchema = z developer: permissionSchema, employee: permissionSchema, moderator: permissionSchema, + admin: permissionSchema, }) .strict(); @@ -30,7 +31,7 @@ export class Permission { readonly children: readonly Permission[] = []; readonly roles: Record = {}; readonly users: Record = {}; - constructor(public name: string) {} + constructor(public name: string) { } addParent(permission: Permission) { (this.parents as Permission[]).push(permission); if (!permission.children.includes(this)) permission.addChild(this); diff --git a/src/structures/Command.ts b/src/structures/Command.ts index bb34111..4a5b1a9 100644 --- a/src/structures/Command.ts +++ b/src/structures/Command.ts @@ -1,7 +1,8 @@ -import type { ApplicationCommandPermissionData, CommandInteraction } from "discord.js"; import { SlashCommandBuilder } from "@discordjs/builders"; -import { capitalize } from "../utils/string"; +import type { CommandInteraction } from "discord.js"; +import { Attachment } from "discord.js"; import type { Permission } from "../providers/permissions"; +import { capitalize } from "../utils/string"; export type CommandExecutor = (interaction: CommandInteraction<"cached">) => void | Promise; @@ -19,10 +20,12 @@ export class Command { executor: CommandExecutor = i => i.reply("No executor was specified."); permissions: Permission[] = []; local = false; + aliases: string[] = []; + shortcuts: string[] = []; + syntax: { name: string; type: CommandOptionType; require: boolean }[] = []; constructor(public readonly name: string, public readonly description = "") { this.#slash.setName(this.name).setDescription(this.description).setDefaultPermission(true); - } setAccessible(accessible: boolean) { @@ -42,6 +45,12 @@ export class Command { return this; } + addAttachment(type: T, ...args: CommandOptionArgs) { + const fn = this.#slash[`add${capitalize(type)}Option`].bind(this.#slash) as (...a: typeof args) => void; + fn(...args); + return this; + } + addSubCommand(...args: Parameters) { this.#slash.addSubcommand(...args); return this; @@ -62,5 +71,27 @@ export class Command { return this; } - readonly toJSON: SlashCommandBuilder["toJSON"] = this.#slash.toJSON.bind(this.#slash); -} \ No newline at end of file + addShortcuts(...args: string[]) { + this.shortcuts = this.shortcuts.concat(args); + return this; + } + + addAlias(alias: string) { + this.aliases.push(alias); + return this; + } + + addAliases(...args: string[]) { + this.aliases = this.aliases.concat(args); + return this; + } + + addSyntax(name: string, type: CommandOptionType, require = false) { + this.syntax.push({ name, type, require }); + return this; + } + + toJSON() { + return this.#slash.toJSON(); + } +} diff --git a/src/structures/CustomDrinkData.ts b/src/structures/CustomDrinkData.ts new file mode 100644 index 0000000..4ef2159 --- /dev/null +++ b/src/structures/CustomDrinkData.ts @@ -0,0 +1,6 @@ +export const CustomdrinksData = [ + { name: "Drink1", type: "custom", price: 10 }, + { name: "Drink2", type: "custom", price: 8 }, + { name: "Drink3", type: "custom", price: 13 }, + { name: "Drink4", type: "custom", price: 10.99 }, +]; \ No newline at end of file diff --git a/src/structures/DrinksData.ts b/src/structures/DrinksData.ts new file mode 100644 index 0000000..41b69d3 --- /dev/null +++ b/src/structures/DrinksData.ts @@ -0,0 +1,6 @@ +export const drinksData = [ + { name: "Drink11", type: "normal", price: 10 }, + { name: "Drink22", type: "normal", price: 8 }, + { name: "Drink33", type: "normal", price: 12 }, + { name: "Drink32", type: "normal", price: 13 }, +]; \ No newline at end of file diff --git a/src/utils/serverconfig.ts b/src/utils/serverconfig.ts new file mode 100644 index 0000000..e62054f --- /dev/null +++ b/src/utils/serverconfig.ts @@ -0,0 +1,11 @@ +export const serverConfigSchema = { + name: "ServerConfig", + fields: { + id: { type: "String", id: true }, + prefix: { type: "String" }, + welcomeMessageEnabled: { type: "Boolean" }, + welcomeMessageChannel: { type: "String", nullable: true }, + xpEnabledChannels: { type: "String[]", nullable: true }, + levelNotificationChannelId: { type: "String", nullable: true }, + }, +}; \ No newline at end of file diff --git a/src/utils/string.ts b/src/utils/string.ts index d6a4814..34c623b 100644 --- a/src/utils/string.ts +++ b/src/utils/string.ts @@ -1,10 +1,11 @@ import type { L, A, N, S } from "ts-toolbelt"; import { mainEmojis } from "../providers/discord"; -export const capitalize = (str: T) => (str[0].toUpperCase() + str.slice(1)) as Capitalize; +export const capitalize = (str?: T) => str ? (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize : str; + export type PositionalFormattable = `${string}${S.Join, string>}${string}`; -export type NamedFormattable = `${string}${S.Join<{ [k in keyof T]: T[k] extends string ? `{${T[k]}}` : never}, string>}${string}`; +export type NamedFormattable = `${string}${S.Join<{ [k in keyof T]: T[k] extends string ? `{${T[k]}}` : never }, string>}${string}`; type ExtractPlaceholders = T extends "" ? A From 84961757a20b2442bad799877ec561eb27742101 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Wed, 4 Oct 2023 14:57:47 -0400 Subject: [PATCH 27/79] Add files via upload --- config/config.hjson.example | 1 + config/constants.hjson | 4 +++ config/permissions.hjson | 7 +++- config/text.hjson | 68 ++++++++++++++++++++++++------------- 4 files changed, 56 insertions(+), 24 deletions(-) diff --git a/config/config.hjson.example b/config/config.hjson.example index deff0fc..a99bb6a 100644 --- a/config/config.hjson.example +++ b/config/config.hjson.example @@ -13,6 +13,7 @@ moderator: "" duty: "" dutyd: "" + admin: "" } channels: { brewery: "" diff --git a/config/constants.hjson b/config/constants.hjson index 8d542e9..3aeb5d0 100644 --- a/config/constants.hjson +++ b/config/constants.hjson @@ -1,5 +1,9 @@ { interactionExpiryTimeMs: 30000 // 30 seconds + bakeTimeRangeMs: [ + 20000 // 20 seconds + 90000 // 1.5 minutes + ] brewTimeRangeMs: [ 20000 // 20 seconds 90000 // 1.5 minutes diff --git a/config/permissions.hjson b/config/permissions.hjson index 3ff8a81..e89864a 100644 --- a/config/permissions.hjson +++ b/config/permissions.hjson @@ -28,4 +28,9 @@ moderator: true } } -} \ No newline at end of file + admin: { + roles: { + admin: true + } + } +} \ No newline at end of file diff --git a/config/text.hjson b/config/text.hjson index 0c7a34e..7eb9e68 100644 --- a/config/text.hjson +++ b/config/text.hjson @@ -13,9 +13,9 @@ common: { invalidOrderId: "[no] No order was found by that ID. Try checking your capitalization and numbers." noActiveOrder: "[no] You do not have an active order. Order one with `/order`!" - noClaimedOrder: "[no] You do not have an order claimed currently." - noOrders: "[no] You have not any orders yet." - identified: **{name}** (`{id}`) + noClaimedOrder: "[no] You do not have an order claimed at the moment." + noOrders: "[no] You don't have any orders yet." + identified: **{name}** (`{id}`) orderEmbed: { title: Order Information for `{}` description: Information about the order `{}`. @@ -30,16 +30,18 @@ orderedAt: ⏰ Ordered At } } - invalidNatural: "[no] Invalid number provided. The number must be an integer greater than 0." + invalidNatural: "[no] Invalid number provided; the number must be an integer greater than 0." notEnoughBalance: "[no] You do not have enough money." interactOwn: "[no] You cannot interact with your own orders." mainGuildOnly: "[no] This command can only be used in the main server." } commands: { order: { - success: "[yes] Your order for **{details}** has been placed! The order ID is `{id}`." - exists: "[no] You already have an active order." - created: "{duty} An order with the id `{id}` for **{details}** has been placed by {tag}." + success: "[yes] Your order for **{details}** has been placed! The order ID is `{id}`." + exists: "[no] You already have an active order.", + created: "{duty} An order with the id `{id}` for **{details}** has been placed by {tag}." + success1: "[yes] Your order for **{details}** has been placed! The price is `{price}`. The order ID is `{id}`." + success_tab: "Your tab order has been placed. Order ID: {id}, Details: {details}." } list: { title: **__Current Orders__** @@ -55,12 +57,12 @@ } claim: { existing: "[no] You already have an order claimed." - success: "[yes] You have successfully claimed the order." + success: "[yes] You have successfully claimed the order `{id}`." } unclaim: { - success: "[yes] You have successfully unclaimed the order." - - } + success: "[yes] You have successfully unclaimed the order `{id}` . ", + notClaimed: "[no] You haven't claimed any order.", // Add this line for the error message + }, cancel: { success: "[yes] Your order has been successfully cancelled." canned: "An order with the id `{id}` was cancelled!\n Order desc `{details}`\nPlaced by {tag}." @@ -69,12 +71,13 @@ brew: { invalidUrl: "[no] Please specify a valid URL." success: "[yes] The order is now brewing." - ready: <@&ROLEID>The order{} {} {} finished brewing and {} now available for delivery. + ready: <@&1053887156701118485>he order{} {} {} finished brewing and {} now available for delivery. } deliver: { noMessage: âš ī¸ You do not have a delivery message set, and the default message was used. Make to set one with `/deliverymessage`! noChannel: "[no] I wasn't able to access the channel for the order, and the order failed to deliver." success: "[yes] The order has been successfully delivered." + multiSuccess: "Successfully delivered {count} orders." default: ''' Hi, {mention}! Here is your {details}, delivered by {preparer}. Make sure to give feedback with `/feedback` and tip with `/tip`! @@ -116,7 +119,8 @@ } } balance: { - success: You currently have `${}`. + success: You currently have `${}` Balance!. + success1: You currently have `${}` Donuts!. } work: { responses: [ @@ -146,22 +150,22 @@ sucess: [ You stole from Drunk Bartender and got {}. You fought an old lady and got {}. - You decided to go to the corner shop and rob them you got {}. - You robbed an atm and got {}. + You decided to go to the corner shop and rob them. You got {}. + You robbed an ATM and got {}. You robbed Tofu and got {}. - a kid spat on you, you got {} for selling it to child predators. - You burnt down someones mansion you got {}. - You kiddnapped someones dog they needed to pay you {} to get the dog back. - You stole someones jewerly you sold it for {}. - + A kid spat on you, you got {} for selling it to child predators. + You burnt down someones mansion and got {}. + You kiddnapped someones dog. They paid you {} to get the dog back. + You stole someones jewelry and sold it for {}. + ] failure: [ You tried to steal from Drunk Bartender and lost {}. - You tried to fight an old lady and lost then got robbed for {}. + You tried to fight an old lady, lost, then got robbed for {}. You tried to rob the corner shop and lost {}. - You tried robbing an atm and ended up being scammed for {}. + You tried robbing an ATM and ended up being scammed for {}. You attempted to rob Tofu but ended up being robbed by Tofu for {}. - You stole someones purse when they were walking their dog , and the dog started chasing you so you runned from fear. but you dropped her purse and your {} dollars. + You stole someones purse when they were walking their dog and the dog started chasing you. You dropped her purse and an extra {} while running away. ] } daily: { @@ -180,6 +184,12 @@ footer: By {} } } + rate: { + success: "[yes] You have successfully rated the bake/prep/delivery process of your last order.", + alreadyRated: "[no] You have already rated the bake/prep/delivery process of your previous order. Try ordering another.", + invalidRating: "[no] Invalid rating. Please provide a rating between 1 and 5 for each process." + } + tip: { success: "[yes] You have successfully tipped `${}` on your order of `{}`." alreadyTipped: "[no] You have already tipped your previous order. Try ordering another." @@ -196,7 +206,12 @@ delete: { success: "[yes] The order was successfully deleted with the provided reason." dm: "[no] Your order of `{}` was deleted for `{}`. If you feel that this was a mistake, please contact us." + userDmDisabled: "[no] Unable to send a direct message to the user. Their DMs are disabled.", + dmFailed: "[no] Failed to send a direct message to the user. Please try again later.", + "userNotFound": "[no] User not found. Please try again.", + successNoDm: "[yes] The order was successfully deleted, but we couldn't send a DM to the user because their DMs are off.", } + blacklist: { success: "[yes] The ID has been successfully blacklisted." existing: "[no] The ID is already blacklisted." @@ -222,4 +237,11 @@ cooldown: ⏰ Please wait `{}` before using this command again. blacklisted: "[no] Either you or the server has been blacklisted from using this bot." } + //tab: //{ + //createConfirmation: "Tab creation confirmation message", + //createMaxLimit: "Tab creation maximum limit reached message", + //createCancelled: "Tab creation cancelled message", + //payConfirmation: "Tab payment confirmation message", + //payMaxLimit: "Tab payment maximum limit reached message", + //} } \ No newline at end of file From e96c26f9fce27475309db0ee2eae6da734f2ee43 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Sat, 7 Oct 2023 17:06:06 -0400 Subject: [PATCH 28/79] Update Can now modify Order statuses! --- src/commands/orders/worker/editstatus.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/commands/orders/worker/editstatus.ts b/src/commands/orders/worker/editstatus.ts index 09a0b52..18039b1 100644 --- a/src/commands/orders/worker/editstatus.ts +++ b/src/commands/orders/worker/editstatus.ts @@ -1,11 +1,10 @@ /* eslint-disable indent */ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../../database/database"; -import { getClaimedOrder } from "../../../database/orders"; +import { OrderStatus, matchActiveOrder } from "../../../database/orders"; import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { CommandInteraction } from "discord.js"; +import { db } from "../../../database/database"; export const command = new Command( "editstatus", @@ -26,8 +25,7 @@ export const command = new Command( .addChoices( { name: "Preparing", value: OrderStatus.Preparing }, { name: "Unprepared", value: OrderStatus.Unprepared }, - { name: "PendingDelivery", value: OrderStatus.PendingDelivery }, - + { name: "PendingDelivery", value: OrderStatus.PendingDelivery } // Add other choices here if needed ) ) @@ -35,7 +33,7 @@ export const command = new Command( const orderId = int.options.getString("order_id", true); const newStatus = int.options.getString("status", true); - const order = await getClaimedOrder(orderId); + const order = await matchActiveOrder(orderId); if (!order) { await int.reply({ content: "Order not found for the specified ID." }); return; @@ -50,7 +48,9 @@ export const command = new Command( }, }); - await int.reply({ content: `Order status for order (${orderId}) has been updated to ${newStatus}.` }); + await int.reply({ + content: `Order status for order (${orderId}) has been updated to ${newStatus}.`, + }); }); module.exports = { command }; From ace2e929057d426f83377235f207d6cf1d4b6d6f Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Sat, 7 Oct 2023 19:28:53 -0400 Subject: [PATCH 29/79] Update editstatus.ts Added Delete to the command. --- src/commands/orders/worker/editstatus.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/commands/orders/worker/editstatus.ts b/src/commands/orders/worker/editstatus.ts index 18039b1..2bc8ef2 100644 --- a/src/commands/orders/worker/editstatus.ts +++ b/src/commands/orders/worker/editstatus.ts @@ -26,6 +26,7 @@ export const command = new Command( { name: "Preparing", value: OrderStatus.Preparing }, { name: "Unprepared", value: OrderStatus.Unprepared }, { name: "PendingDelivery", value: OrderStatus.PendingDelivery } + { name: "Deleted", value: OrderStatus.Deleted }, // Add other choices here if needed ) ) From d5499cc0b1b721da8f2a6a953689ad935f0ca57f Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Mon, 13 Nov 2023 12:44:22 -0500 Subject: [PATCH 30/79] Update deliver.ts --- src/commands/orders/worker/deliver.ts | 151 ++++++-------------------- 1 file changed, 31 insertions(+), 120 deletions(-) diff --git a/src/commands/orders/worker/deliver.ts b/src/commands/orders/worker/deliver.ts index 8554f40..d60e0be 100644 --- a/src/commands/orders/worker/deliver.ts +++ b/src/commands/orders/worker/deliver.ts @@ -19,18 +19,35 @@ export const command = new Command( .addPermission(permissions.employee) .setExecutor(async (int: CommandInteraction) => { const selectMenu = new StringSelectMenuBuilder() - .setCustomId("deliver_option") - .setPlaceholder("Select a delivery option") - .addOptions({ - label: "Single Order", - description: "Deliver a single order", - value: "single", - }) - .addOptions({ - label: "Multiple Orders", - description: "Deliver multiple orders", - value: "multiple", + .setCustomId("deliver_order") + .setPlaceholder("Select an order to deliver"); + + const orders = await db.orders.findMany({ + where: { + status: OrderStatus.PendingDelivery, + }, + select: { + id: true, + user: true, + }, + }); + + if (orders.length === 0) { + await int.reply({ content: "No orders available for delivery.", ephemeral: false }); + return; + } + + if (orders.length > 25) { + orders.splice(25); // Limit the number of orders to 25 + } + + for (const order of orders) { + selectMenu.addOptions({ + label: order.id, + description: `User: ${order.user}`, + value: order.id, }); + } const actionRow = { type: ComponentType.ActionRow, @@ -38,13 +55,13 @@ export const command = new Command( }; const embed = new EmbedBuilder() - .setDescription("Please select a delivery option.") + .setDescription("Please select an order to deliver.") .setColor("#00FF00"); await int.reply({ embeds: [embed], components: [actionRow], - ephemeral: true, + ephemeral: true, // Set ephemeral to true by default }); }); @@ -53,62 +70,6 @@ client.on("interactionCreate", async (interaction) => { if (!interaction.isStringSelectMenu()) return; const componentId = interaction.customId; - - if (componentId === "deliver_option") { - const selectedOption = interaction.values[0]; - - if (selectedOption === "single" || selectedOption === "multiple") { - console.log(`Handling ${selectedOption} order(s)...`); - - const selectMenu = new StringSelectMenuBuilder() - .setCustomId(selectedOption === "single" ? "deliver_order" : "deliver_multiple_orders") - .setPlaceholder(`Select ${selectedOption === "single" ? "an" : "multiple"} order${selectedOption === "single" ? "" : "s"} to deliver`); - - const orders = await db.orders.findMany({ - where: { - status: OrderStatus.PendingDelivery, - }, - select: { - id: true, - user: true, - }, - }); - - if (orders.length === 0) { - await interaction.reply({ content: "No orders available for delivery.", ephemeral: false }); - return; - } - - if (orders.length > 25) { - orders.splice(25); // Limit the number of orders to 25 - } - - for (const order of orders) { - selectMenu.addOptions({ - label: order.id, - description: `User: ${order.user}`, - value: order.id, - }); - } - - const actionRow = { - type: ComponentType.ActionRow, - components: [selectMenu], - }; - - const embed = new EmbedBuilder() - .setDescription(`Please select ${selectedOption === "single" ? "an" : "multiple"} order${selectedOption === "single" ? "" : "s"} to deliver.`) - .setColor("#00FF00"); - - await interaction.reply({ - embeds: [embed], - components: [actionRow], - ephemeral: true, - }); - return; - } - } - if (componentId === "deliver_order") { const orderId = interaction.values[0]; @@ -149,61 +110,11 @@ client.on("interactionCreate", async (interaction) => { const channel = client.channels.cache.get(order.channel) ?? await client.channels.fetch(order.channel).catch(() => null) ?? client.users.cache.get(order.user); if (!channel || (channel instanceof GuildChannel && channel.type !== ChannelType.GuildText)) { - await interaction.reply({ content: text.commands.deliver.noChannel, ephemeral: true }); + await interaction.reply({ content: text.commands.deliver.noChannel, ephemeral: true }); // Set ephemeral to true return; } await interaction.reply({ content: `${text.commands.deliver.success}${info?.deliveryMessage ? "" : `\n${text.commands.deliver.noMessage}`}`, ephemeral: false }); await channel.send(format(info?.deliveryMessage || text.commands.deliver.default, await orderPlaceholders(order))); } - - if (componentId === "deliver_multiple_orders") { - const orderIds = interaction.values; - - const selectedOrders = await db.orders.findMany({ - where: { - id: { in: orderIds }, - status: OrderStatus.PendingDelivery, - }, - }); - - if (selectedOrders.length === 0) { - await interaction.reply({ content: "No valid orders selected.", ephemeral: true }); - return; - } - - const info = await upsertWorkerInfo(interaction.user); - - const message = `Delivering ${selectedOrders.length} order(s)...`; - - for (let i = 0; i < selectedOrders.length; i++) { - const order = selectedOrders[i]; - - await db.orders.update({ - where: { - id: order.id, - }, - data: { - status: OrderStatus.Delivered, - deliverer: interaction.user.id, - }, - }); - - const channel = client.channels.cache.get(order.channel) ?? await client.channels.fetch(order.channel).catch(() => null); - if (channel && (channel instanceof GuildChannel && channel.type === ChannelType.GuildText)) { - await channel.send(format(info?.deliveryMessage || text.commands.deliver.default, await orderPlaceholders(order))); - } - } - - await db.workerInfo.update({ - where: { - id: interaction.user.id, - }, - data: { - deliveries: { increment: selectedOrders.length }, - }, - }); - - await interaction.reply({ content: `${text.commands.deliver.multiSuccess.replace("{count}", selectedOrders.length.toString())}${info?.deliveryMessage ? "" : `\n${text.commands.deliver.noMessage}`}`, ephemeral: true }); - } }); From 6d783cbefdccb76e75cd20c28fd164437854c66b Mon Sep 17 00:00:00 2001 From: floof Date: Tue, 28 Nov 2023 22:40:38 -0600 Subject: [PATCH 31/79] minor bug squashing --- .gitignore | 5 ++++- HowToUse.yml | 1 + src/commands/orders/worker/editstatus.ts | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f96e548..468b707 100644 --- a/.gitignore +++ b/.gitignore @@ -105,4 +105,7 @@ dist config.hjson -logs/ \ No newline at end of file +logs/ + +# WebStorm +.idea/ \ No newline at end of file diff --git a/HowToUse.yml b/HowToUse.yml index 82ddd36..5bb9cb4 100644 --- a/HowToUse.yml +++ b/HowToUse.yml @@ -12,6 +12,7 @@ Starting the bot: Run These commands: Might only need to run these once Before Starting the bot - "yarn prisma:generate" // You'll need to Do this After you edit the schema.prisma File - "yarn prisma:push" // You'll use this to make the Database you defined Before startup +(don't forget to create a .env file, defining DATABASE_URL=) Then, - To start the bot go to the dist directory and start "index.js" with pm2 diff --git a/src/commands/orders/worker/editstatus.ts b/src/commands/orders/worker/editstatus.ts index 2bc8ef2..da68368 100644 --- a/src/commands/orders/worker/editstatus.ts +++ b/src/commands/orders/worker/editstatus.ts @@ -25,7 +25,7 @@ export const command = new Command( .addChoices( { name: "Preparing", value: OrderStatus.Preparing }, { name: "Unprepared", value: OrderStatus.Unprepared }, - { name: "PendingDelivery", value: OrderStatus.PendingDelivery } + { name: "PendingDelivery", value: OrderStatus.PendingDelivery }, { name: "Deleted", value: OrderStatus.Deleted }, // Add other choices here if needed ) From 5c504a9556f42bc0e9e09579f1ac119aeb798737 Mon Sep 17 00:00:00 2001 From: floof Date: Wed, 29 Nov 2023 00:35:00 -0600 Subject: [PATCH 32/79] Added JSDoc to exported utils typescript is so fun ahaha --- src/utils/components.ts | 1 + src/utils/error.ts | 9 ++- src/utils/id.ts | 16 ++++-- src/utils/serverconfig.ts | 20 +++---- src/utils/string.ts | 117 ++++++++++++++++++++++++++++++-------- src/utils/utils.ts | 62 +++++++++++++++++--- src/utils/zod.ts | 43 +++++++++++--- 7 files changed, 216 insertions(+), 52 deletions(-) diff --git a/src/utils/components.ts b/src/utils/components.ts index 99840db..2e8a837 100644 --- a/src/utils/components.ts +++ b/src/utils/components.ts @@ -1,3 +1,4 @@ +// TODO: discord has updated their typings, so this file is now broken, go cry about it import type { ButtonInteraction, Constructable, MessageActionRowComponent, MessageComponentInteraction, SelectMenuInteraction } from "discord.js"; import { MessageActionRow, MessageButton, MessageSelectMenu } from "discord.js"; import { componentCallbacks } from "../events/interactionCreate"; diff --git a/src/utils/error.ts b/src/utils/error.ts index 291ef5f..c0ee0ca 100644 --- a/src/utils/error.ts +++ b/src/utils/error.ts @@ -1,12 +1,19 @@ +/** + * Represents an error that occurs when the application is in an illegal state. + */ export class IllegalStateError extends Error { override name = "IllegalStateError"; constructor(message: string, options?: ErrorOptions) { super(message, options); } } + +/** + * Custom error that can be used to stop command execution. + */ export class StopCommandExecution extends Error { override name = "StopCommandExecution"; constructor(message?: string, options?: ErrorOptions) { super(message, options); } -} \ No newline at end of file +} diff --git a/src/utils/id.ts b/src/utils/id.ts index 2a21790..75e8622 100644 --- a/src/utils/id.ts +++ b/src/utils/id.ts @@ -1,7 +1,13 @@ -import type { UserResolvable } from "discord.js"; -import { ThreadMember } from "discord.js"; -import { GuildMember, Message, User } from "discord.js"; +import type {UserResolvable} from "discord.js"; +import {GuildMember, Message, ThreadMember, User} from "discord.js"; +/** + * Resolves the user ID from a UserResolvable object. + * + * @param user - The UserResolvable object. + * @returns The resolved user ID. + * @throws Error if an invalid argument is provided. + */ export const resolveUserId = (user: UserResolvable) => typeof user === "string" ? user @@ -13,4 +19,6 @@ export const resolveUserId = (user: UserResolvable) => ? user.id : user instanceof ThreadMember ? user.id - : (() => { throw new Error(`Invalid argument ${user} provided.`); })(); + : (() => { + throw new Error(`Invalid argument ${user} provided.`); + })(); diff --git a/src/utils/serverconfig.ts b/src/utils/serverconfig.ts index e62054f..ea4b6c9 100644 --- a/src/utils/serverconfig.ts +++ b/src/utils/serverconfig.ts @@ -1,11 +1,11 @@ export const serverConfigSchema = { - name: "ServerConfig", - fields: { - id: { type: "String", id: true }, - prefix: { type: "String" }, - welcomeMessageEnabled: { type: "Boolean" }, - welcomeMessageChannel: { type: "String", nullable: true }, - xpEnabledChannels: { type: "String[]", nullable: true }, - levelNotificationChannelId: { type: "String", nullable: true }, - }, -}; \ No newline at end of file + name: "ServerConfig", + fields: { + id: { type: "String", id: true }, + prefix: { type: "String" }, + welcomeMessageEnabled: { type: "Boolean" }, + welcomeMessageChannel: { type: "String", nullable: true }, + xpEnabledChannels: { type: "String[]", nullable: true }, + levelNotificationChannelId: { type: "String", nullable: true }, + }, +}; diff --git a/src/utils/string.ts b/src/utils/string.ts index 34c623b..66f0c44 100644 --- a/src/utils/string.ts +++ b/src/utils/string.ts @@ -1,33 +1,104 @@ -import type { L, A, N, S } from "ts-toolbelt"; -import { mainEmojis } from "../providers/discord"; +// shut up eslint +/* eslint-disable indent */ +import type {A, L, N, S} from "ts-toolbelt"; +import {mainEmojis} from "../providers/discord"; -export const capitalize = (str?: T) => str ? (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize : str; +/** + * Capitalizes the first letter of a string. + * + * @param str - The string to capitalize. + * @returns The capitalized string. + */ +export const capitalize = (str?: T) => + str ? ((str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize) : str; +/** + * Represents a string with positional placeholders. + * In the form of `<{} * T>`. + */ +export type PositionalFormattable = `${string}${S.Join< + L.Repeat<"{}", T>, + string +>}${string}`; -export type PositionalFormattable = `${string}${S.Join, string>}${string}`; -export type NamedFormattable = `${string}${S.Join<{ [k in keyof T]: T[k] extends string ? `{${T[k]}}` : never }, string>}${string}`; +/** + * Represents a string with named placeholders. + * In the form of `<{key} * T>`. + * For each item in T, `{key}` will either be surrounded by `{}` or not. + */ +export type NamedFormattable = `${string}${S.Join< + { [k in keyof T]: T[k] extends string ? `{${T[k]}}` : never }, + string +>}${string}`; -type ExtractPlaceholders = T extends "" - ? A - : S.Replace extends `${string}{${infer U}}${infer R}` - ? ExtractPlaceholders - : A; +/** + * Extracts the placeholders from a string. + * Utilizes recursion to extract all placeholders. + */ +type ExtractPlaceholders< + T extends string, + A extends string[] = [] +> = T extends "" + ? A // return A if T is empty + : S.Replace extends `${string}{${infer U}}${infer R}` // if T contains a placeholder + ? ExtractPlaceholders // recurse with the placeholder added to A + : A; // return A if T does not contain a placeholder -type CountStr = N.Sub["length"], 1>; +/** + * Counts the occurrences of a substring in a string. + */ +type CountStr = N.Sub< + S.Split["length"], + 1 +>; + +/** + * Represents a placeholder in a formatted string. + */ type Placeholder = string | number; -type FormatArguments = A.Equals extends 1 - ? Placeholder[] | Record[] - : N.Greater, 0> extends 1 - ? L.Repeat> - : N.Greater, 0> extends 1 - ? [Record[number], Placeholder>] - : string[] | [Record]; - -export const format = (str: T, ...arr: FormatArguments): string => + +/** + * Represents the arguments for formatting a string. + */ +type FormatArguments = A.Equals extends 1 // if T is a string + ? Placeholder[] | Record[] // return an array of placeholders or an array of records + : N.Greater, 0> extends 1 // if T contains a non-named placeholder ({}), but not a named placeholder ({key}) + ? L.Repeat> // return an array of placeholders + : N.Greater, 0> extends 1 // if T contains a named placeholder ({key}) + ? [Record[number], Placeholder>] // return the extracted placeholders as a record + : string[] | [Record]; // return an array of strings or a record + +/** + * Formats a string by replacing placeholders with provided values. + * + * @param str - The string to format. + * @param arr - The values to replace the placeholders with. + * @returns The formatted string. + */ +export const format = ( + str: T, + ...arr: FormatArguments +): string => str.includes("{}") - ? str.split("{}").reduce((l, c, i, a) => l + c + (i + 1 === a.length ? "" : arr[i] ?? "{}"), "") + ? str + .split("{}") + .reduce( + (l, c, i, a) => + l + c + (i + 1 === a.length ? "" : arr[i] ?? "{}"), + "" + ) : /\{\w+\}/.test(str) - ? str.replaceAll(/\{(\w+)\}/g, (_, k) => (arr[0] as Record)[k]) + ? str.replaceAll( + /\{(\w+)\}/g, + (_, k) => (arr[0] as Record)[k] + ) : str; -export const parseText = (str: string) => str.replaceAll(/\[(\w+)\]/g, (_, key) => mainEmojis[key]?.toString() ?? _); +/** + * Parses a text by replacing emoji placeholders with their corresponding emoji strings. + * + * @param str - The text to parse. + * @returns The parsed text. + */ +export const parseText = (str: string) => + str.replaceAll(/\[(\w+)\]/g, (_, key) => mainEmojis[key]?.toString() ?? _); diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 74d1aab..65e9cdf 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -1,9 +1,16 @@ import { IllegalStateError } from "./error"; const notInitializedSymbol = Symbol("notInitialized"); +/** + * Creates a value that throws an error when used. + * @param identifier The identifier of the value, used in the error message. + * @returns A value that throws an error when used. + */ export const notInitialized = (identifier?: string) => { const err = () => { - throw new IllegalStateError(`Value '${identifier}' was used before it was defined.`); + throw new IllegalStateError( + `Value '${identifier}' was used before it was defined.` + ); }; function val() { /* noop */ @@ -26,19 +33,60 @@ export const notInitialized = (identifier?: string) => { }) as unknown as NonNullable; }; +/** + * Checks if a value is not initialized. + * @param v - The value to check. + * @returns True if the value is not initialized, false otherwise. + */ export const isNotInitialized = (v: unknown) => - (v as Record)[notInitializedSymbol] === true; + (v as Record)[ + notInitializedSymbol + ] === true; +/** + * Returns an array of typed key-value pairs from an object. + * + * @template T - The type of the object. + * @param obj - The object to extract key-value pairs from. + * @returns An array of typed key-value pairs from the object. + */ export const typedEntries = (obj: T) => Object.entries(obj) as { [K in keyof T]: [K, T[K]]; }[keyof T][]; -export const typedFromEntries = (arr: readonly (readonly [K, V])[]) => - Object.fromEntries(arr) as { [k in K]: V }; +/** + * Converts an array of key-value pairs into an object with typed keys. + * @param arr - The array of key-value pairs. + * @returns An object with typed keys. + */ +export const typedFromEntries = ( + arr: readonly (readonly [K, V])[] +) => Object.fromEntries(arr) as { [k in K]: V }; -export const typedKeys = (obj: T) => Object.keys(obj) as (keyof T)[]; -export const sampleArray = (arr: T[]) => arr[Math.floor(Math.random() * arr.length)]; +/** + * Returns an array of keys from an object. + * @param obj - The object from which to extract the keys. + * @returns An array of keys from the object. + */ +export const typedKeys = (obj: T) => + Object.keys(obj) as (keyof T)[]; +/** + * Returns a random element from the given array. + * @template T The type of elements in the array. + * @param arr The array from which to select a random element. + * @returns A random element from the array. + */ +export const sampleArray = (arr: T[]) => + arr[Math.floor(Math.random() * arr.length)]; + +/** + * Generates a random number within the specified range. + * @param lowerInclusive - The lower bound of the range (inclusive). + * @param upperExclusive - The upper bound of the range (exclusive). + * @returns A random number within the specified range. + */ export const randRange = (lowerInclusive: number, upperExclusive: number) => - lowerInclusive + Math.floor(Math.random() * (upperExclusive - lowerInclusive)); + lowerInclusive + + Math.floor(Math.random() * (upperExclusive - lowerInclusive)); diff --git a/src/utils/zod.ts b/src/utils/zod.ts index 74a7f8f..412f93a 100644 --- a/src/utils/zod.ts +++ b/src/utils/zod.ts @@ -1,17 +1,46 @@ import type { ZodError, ZodIssue } from "zod"; import pc from "picocolors"; +/** + * Formats a ZodError object into a human-readable string representation. + * @param err The ZodError object to format. + * @returns A formatted string representation of the ZodError. + */ export const formatZodError = (err: ZodError) => - `${pc.red(`${err.issues.length} issue(s) found.`)}\n${err.issues.map(formatZodIssue).join("\n")}`; + `${pc.red(`${err.issues.length} issue(s) found.`)}\n${err.issues + .map(formatZodIssue) + .join("\n")}`; -export const formatZodIssue = (iss: ZodIssue) => - `${pc.red(`Error at ${pc.bold(iss.path.join(".")) || "Unknown"}: `)}${getZodIssueMessage(iss)}`; +/** + * Formats a ZodIssue into an error message string. + * + * @param iss - The ZodIssue to format. + * @returns The formatted error message string. + */ +export const formatZodIssue = (iss: ZodIssue) => + `${pc.red( + `Error at ${pc.bold(iss.path.join(".")) || "Unknown"}: ` + )}${getZodIssueMessage(iss)}`; +/** + * Returns an issue message based on the ZodIssue code. + * @param iss The ZodIssue object. + * @returns The corresponding issue message. + */ export const getZodIssueMessage = (iss: ZodIssue) => { switch (iss.code) { - case "invalid_type": return `Expected ${pc.green(iss.expected)}, received ${pc.yellow(iss.received)}`; - case "unrecognized_keys": return `Unrecognized keys: ${iss.keys.map(x => pc.yellow(x)).join(", ")}`; - case "invalid_enum_value": return `Invalid enum value. Valid entries are ${iss.options.map(x => pc.green(x)).join(", ")}`; + case "invalid_type": + return `Expected ${pc.green(iss.expected)}, received ${pc.yellow( + iss.received + )}`; + case "unrecognized_keys": + return `Unrecognized keys: ${iss.keys + .map((x) => pc.yellow(x)) + .join(", ")}`; + case "invalid_enum_value": + return `Invalid enum value. Valid entries are ${iss.options + .map((x) => pc.green(x)) + .join(", ")}`; } return iss.message; -}; \ No newline at end of file +}; From e289a6a10f4d3ec29b19b609d470250ce2671e37 Mon Sep 17 00:00:00 2001 From: floof Date: Wed, 29 Nov 2023 02:45:25 -0600 Subject: [PATCH 33/79] reverted back to v13 because i have v14 with a burning passion istg --- package.json | 2 +- src/events/interactionCreate.ts | 9 +- src/providers/client.ts | 7 ++ src/providers/discord.ts | 3 + yarn.lock | 204 ++++++++++---------------------- 5 files changed, 79 insertions(+), 146 deletions(-) diff --git a/package.json b/package.json index 1138696..4c7f885 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@prisma/client": "latest", "@sapphire/shapeshift": "^3.8.1", "cross-env": "^7.0.3", - "discord.js": "^14.8.0", + "discord.js": "13.6.0", "fast-glob": "^3.2.11", "got": "^11.8.3", "hjson": "^3.2.2", diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index 9ffc5a1..46d17a6 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -1,8 +1,15 @@ import { client } from "../providers/client"; import { commandRegistry } from "../providers/commandManager"; -import { text } from "../providers/config"; +import {constants, text} from "../providers/config"; import { blacklist } from "../database/blacklist"; import { StopCommandExecution } from "../utils/error"; +import {LifetimeMap} from "../structures/LifetimeMap"; +import type {InteractionByType} from "../utils/components"; +import type {Awaitable} from "discord.js"; + +export const componentCallbacks = new LifetimeMap Awaitable>( + constants.interactionExpiryTimeMs +); client.on("interactionCreate", async (int) => { try { diff --git a/src/providers/client.ts b/src/providers/client.ts index 95279aa..aeb6407 100644 --- a/src/providers/client.ts +++ b/src/providers/client.ts @@ -8,6 +8,9 @@ import { GatewayIntentBits } from "discord.js"; if (globalThis._$clientLoaded) throw new Error("The client was loaded twice. This should never happen."); globalThis._$clientLoaded = true; +/** + * The client instance. + */ export const client = new Client({ intents: [ GatewayIntentBits.Guilds, @@ -26,6 +29,10 @@ client.on("ready", () => { }); }); +/** + * Discord's REST API. + * @see https://discord.js.org/docs/packages/rest/main + */ export const rest = new REST({ version: "9" }).setToken(config.token); client.login(config.token); diff --git a/src/providers/discord.ts b/src/providers/discord.ts index 96a30ff..719a169 100644 --- a/src/providers/discord.ts +++ b/src/providers/discord.ts @@ -3,6 +3,9 @@ import { notInitialized, typedEntries, typedFromEntries } from "../utils/utils"; import { client } from "./client"; import { config } from "./config"; +/** + * The guild's main guild. + */ export let mainGuild = client.guilds.cache.get(config.mainServer) ?? notInitialized("mainGuild"); export const setMainGuild = (guild: Guild) => (mainGuild = guild); diff --git a/yarn.lock b/yarn.lock index a8ed3a1..8694c59 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,7 +9,18 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@discordjs/builders@^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/builders@^1.6.3": +"@discordjs/builders@^0.11.0": + version "0.11.0" + resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-0.11.0.tgz#4102abe3e0cd093501f3f71931df43eb92f5b0cc" + integrity sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg== + dependencies: + "@sindresorhus/is" "^4.2.0" + discord-api-types "^0.26.0" + ts-mixer "^6.0.0" + tslib "^2.3.1" + zod "^3.11.6" + +"@discordjs/builders@^1.5.0-dev.1677499471-ffdb197.0": version "1.6.3" resolved "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.3.tgz" integrity sha512-CTCh8NqED3iecTNuiz49mwSsrc2iQb4d0MjMdmS/8pb69Y4IlzJ/DIy/p5GFlgOrFbNO2WzMHkWKQSiJ3VNXaw== @@ -27,11 +38,6 @@ resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz" integrity sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw== -"@discordjs/collection@^1.5.1": - version "1.5.1" - resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.1.tgz" - integrity sha512-aWEc9DCf3TMDe9iaJoOnO2+JVAjeRNuRxPZQA6GVvBf+Z3gqUuWYBy2NWh4+5CLYq5uoc3MOvUQ5H5m8CJBqOA== - "@discordjs/formatters@^0.3.1": version "0.3.1" resolved "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.1.tgz" @@ -52,40 +58,11 @@ node-fetch "^2.6.5" tslib "^2.3.1" -"@discordjs/rest@^1.7.1": - version "1.7.1" - resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.1.tgz" - integrity sha512-Ofa9UqT0U45G/eX86cURQnX7gzOJLG2oC28VhIk/G6IliYgQF7jFByBJEykPSHE4MxPhqCleYvmsrtfKh1nYmQ== - dependencies: - "@discordjs/collection" "^1.5.1" - "@discordjs/util" "^0.3.0" - "@sapphire/async-queue" "^1.5.0" - "@sapphire/snowflake" "^3.4.2" - discord-api-types "^0.37.41" - file-type "^18.3.0" - tslib "^2.5.0" - undici "^5.22.0" - -"@discordjs/util@^0.3.0", "@discordjs/util@^0.3.1": +"@discordjs/util@^0.3.1": version "0.3.1" resolved "https://registry.npmjs.org/@discordjs/util/-/util-0.3.1.tgz" integrity sha512-HxXKYKg7vohx2/OupUN/4Sd02Ev3PBJ5q0gtjdcvXb0ErCva8jNHWfe/v5sU3UKjIB/uxOhc+TDOnhqffj9pRA== -"@discordjs/ws@^0.8.3": - version "0.8.3" - resolved "https://registry.npmjs.org/@discordjs/ws/-/ws-0.8.3.tgz" - integrity sha512-hcYtppanjHecbdNyCKQNH2I4RP9UrphDgmRgLYrATEQF1oo4sYSve7ZmGsBEXSzH72MO2tBPdWSThunbxUVk0g== - dependencies: - "@discordjs/collection" "^1.5.1" - "@discordjs/rest" "^1.7.1" - "@discordjs/util" "^0.3.1" - "@sapphire/async-queue" "^1.5.0" - "@types/ws" "^8.5.4" - "@vladfrangu/async_event_emitter" "^2.2.1" - discord-api-types "^0.37.41" - tslib "^2.5.0" - ws "^8.13.0" - "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" @@ -205,7 +182,7 @@ resolved "https://registry.npmjs.org/@prisma/engines/-/engines-4.15.0.tgz" integrity sha512-FTaOCGs0LL0OW68juZlGxFtYviZa4xdQj/rQEdat2txw0s3Vu/saAPKjNVXfIgUsGXmQ72HPgNr6935/P8FNAA== -"@sapphire/async-queue@^1.1.9", "@sapphire/async-queue@^1.5.0": +"@sapphire/async-queue@^1.1.9": version "1.5.0" resolved "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz" integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== @@ -218,12 +195,12 @@ fast-deep-equal "^3.1.3" lodash "^4.17.21" -"@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.4.2": +"@sapphire/snowflake@^3.0.1": version "3.5.1" resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz" integrity sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA== -"@sindresorhus/is@^4.0.0": +"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.2.0": version "4.6.0" resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== @@ -235,11 +212,6 @@ dependencies: defer-to-connect "^2.0.0" -"@tokenizer/token@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" - integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== - "@tsconfig/node10@^1.0.7": version "1.0.9" resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" @@ -287,6 +259,14 @@ dependencies: "@types/node" "*" +"@types/node-fetch@^2.5.12": + version "2.6.9" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.9.tgz#15f529d247f1ede1824f7e7acdaa192d5f28071e" + integrity sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA== + dependencies: + "@types/node" "*" + form-data "^4.0.0" + "@types/node@*", "@types/node@^17.0.42": version "17.0.45" resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" @@ -309,10 +289,10 @@ resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz" integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== -"@types/ws@^8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz" - integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== +"@types/ws@^8.2.2": + version "8.5.10" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" + integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== dependencies: "@types/node" "*" @@ -400,11 +380,6 @@ "@typescript-eslint/types" "5.59.7" eslint-visitor-keys "^3.3.0" -"@vladfrangu/async_event_emitter@^2.2.1": - version "2.2.2" - resolved "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz" - integrity sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ== - abbrev@1: version "1.1.1" resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" @@ -510,13 +485,6 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - cacheable-lookup@^5.0.3: version "5.0.4" resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" @@ -668,7 +636,7 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -discord-api-types@^0.26.1: +discord-api-types@^0.26.0, discord-api-types@^0.26.1: version "0.26.1" resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz" integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== @@ -678,25 +646,20 @@ discord-api-types@^0.37.35, discord-api-types@^0.37.41: resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.42.tgz" integrity sha512-1Huaj9cQ1W7/uryS8MZs/tZemnoKB94thM1cE40lep3rpU3q7WHqkdjN/veX0prTkYlPhcyLd/DeF/pBO8X8oQ== -discord.js@^14.8.0: - version "14.11.0" - resolved "https://registry.npmjs.org/discord.js/-/discord.js-14.11.0.tgz" - integrity sha512-CkueWYFQ28U38YPR8HgsBR/QT35oPpMbEsTNM30Fs8loBIhnA4s70AwQEoy6JvLcpWWJO7GY0y2BUzZmuBMepQ== +discord.js@13.6.0: + version "13.6.0" + resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-13.6.0.tgz#d8a8a591dbf25cbcf9c783d5ddf22c4694860475" + integrity sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g== dependencies: - "@discordjs/builders" "^1.6.3" - "@discordjs/collection" "^1.5.1" - "@discordjs/formatters" "^0.3.1" - "@discordjs/rest" "^1.7.1" - "@discordjs/util" "^0.3.1" - "@discordjs/ws" "^0.8.3" - "@sapphire/snowflake" "^3.4.2" - "@types/ws" "^8.5.4" - discord-api-types "^0.37.41" - fast-deep-equal "^3.1.3" - lodash.snakecase "^4.1.1" - tslib "^2.5.0" - undici "^5.22.0" - ws "^8.13.0" + "@discordjs/builders" "^0.11.0" + "@discordjs/collection" "^0.4.0" + "@sapphire/async-queue" "^1.1.9" + "@types/node-fetch" "^2.5.12" + "@types/ws" "^8.2.2" + discord-api-types "^0.26.0" + form-data "^4.0.0" + node-fetch "^2.6.1" + ws "^8.4.0" doctrine@^3.0.0: version "3.0.0" @@ -890,15 +853,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-type@^18.3.0: - version "18.4.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-18.4.0.tgz" - integrity sha512-o6MQrZKTAK6WpvmQk3jqTVUmqxYBxW5bloUfrdH1ZnRFDvvAPNr+l+rgOxM3nkqWT+3khaj3FRMDydWe0xhu+w== - dependencies: - readable-web-to-node-stream "^3.0.2" - strtok3 "^7.0.0" - token-types "^5.0.1" - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" @@ -1053,11 +1007,6 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" @@ -1187,11 +1136,6 @@ lodash.merge@^4.6.2: resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash.snakecase@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" - integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== - lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" @@ -1286,6 +1230,13 @@ nekos.life@^3.0.0: resolved "https://registry.npmjs.org/nekos.life/-/nekos.life-3.0.0.tgz" integrity sha512-7LbvSqLtfK4XRA91nJaGOWthrNADmG7Vx9d54TC77Hx5qFvRCssFUaHraI6bZGjVENBCUaF7CreisoFX+8mnKQ== +node-fetch@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-fetch@^2.6.5: version "2.6.11" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" @@ -1401,11 +1352,6 @@ path-type@^4.0.0: resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -peek-readable@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz" - integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A== - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" @@ -1503,7 +1449,7 @@ quick-lru@^5.1.1: resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== -readable-stream@^3.1.1, readable-stream@^3.6.0: +readable-stream@^3.1.1: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -1512,13 +1458,6 @@ readable-stream@^3.1.1, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-web-to-node-stream@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz" - integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== - dependencies: - readable-stream "^3.6.0" - readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -1672,11 +1611,6 @@ stream-shift@^1.0.0: resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" @@ -1701,14 +1635,6 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strtok3@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz" - integrity sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ== - dependencies: - "@tokenizer/token" "^0.3.0" - peek-readable "^5.0.0" - supports-color@^5.5.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" @@ -1742,14 +1668,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -token-types@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz" - integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== - dependencies: - "@tokenizer/token" "^0.3.0" - ieee754 "^1.2.1" - touch@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" @@ -1762,7 +1680,7 @@ tr46@~0.0.3: resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -ts-mixer@^6.0.3: +ts-mixer@^6.0.0, ts-mixer@^6.0.3: version "6.0.3" resolved "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz" integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ== @@ -1844,13 +1762,6 @@ undefsafe@^2.0.5: resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== -undici@^5.22.0: - version "5.22.1" - resolved "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz" - integrity sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw== - dependencies: - busboy "^1.6.0" - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" @@ -1903,10 +1814,10 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.13.0: - version "8.13.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== +ws@^8.4.0: + version "8.14.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== yallist@^4.0.0: version "4.0.0" @@ -1928,6 +1839,11 @@ yocto-queue@^0.1.0: resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +zod@^3.11.6: + version "3.22.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== + zod@^3.14.3: version "3.21.4" resolved "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz" From c7f1437ca69b31cde18e19685c828e4b8fdf210d Mon Sep 17 00:00:00 2001 From: floof Date: Wed, 29 Nov 2023 03:15:20 -0600 Subject: [PATCH 34/79] this is me throwing my hands up in defeat --- package.json | 6 +- src/commands/test.ts | 69 +-- src/utils/components.ts | 49 +- yarn.lock | 1074 +++++++++++++++++++++------------------ 4 files changed, 638 insertions(+), 560 deletions(-) diff --git a/package.json b/package.json index 4c7f885..1f62820 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "discord-api-types": "^0.37.35", "eslint": "^8.12.0", "eslint-plugin-regexp": "^1.6.0", - "prisma": "latest", + "prisma": "^5.6.0", "ts-node": "^10.9.1", "ts-toolbelt": "^9.6.0", "tsconfig-paths": "^4.1.2", @@ -40,10 +40,10 @@ "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/rest": "^0.3.0", "@paralleldrive/cuid2": "^2.2.1", - "@prisma/client": "latest", + "@prisma/client": "^5.6.0", "@sapphire/shapeshift": "^3.8.1", "cross-env": "^7.0.3", - "discord.js": "13.6.0", + "discord.js": "^14.14.1", "fast-glob": "^3.2.11", "got": "^11.8.3", "hjson": "^3.2.2", diff --git a/src/commands/test.ts b/src/commands/test.ts index 41754b3..d4bdadf 100644 --- a/src/commands/test.ts +++ b/src/commands/test.ts @@ -1,34 +1,35 @@ -import { Command } from "../structures/Command"; -import { actionRowOf, cbButton, cbSelectMenu } from "../utils/components"; - -export const command = new Command("test", "foo bar baz").setExecutor(async int => { - await int.reply({ - components: [ - actionRowOf( - cbButton(ctx => { - ctx.disable(); - }) - .setLabel("Testing BUtton") - .setEmoji("📈") - .setStyle("DANGER") - ), - actionRowOf( - cbSelectMenu(async ctx => { - await ctx.disable(); - await ctx.int.followUp(ctx.int.values.join(", ")); - }) - .setMaxValues(2) - .setMinValues(1) - .setPlaceholder("i am in severe pain") - .setOptions( - ...[...Array(10)].map((_, x) => ({ - label: `label ${x}`, - value: `${x}`, - description: `description ${x}`, - emoji: ["🕗", "♍", "🌎", "😑", "🔸", "💞", "🍤", "⛔", "🍊", "âŗ"][x], - })) - ) - ), - ], - }); -}); +// todo: uncomment when components are fixed +// import { Command } from "../structures/Command"; +// import { actionRowOf, cbButton, cbSelectMenu } from "../utils/components"; +// +// export const command = new Command("test", "foo bar baz").setExecutor(async int => { +// await int.reply({ +// components: [ +// actionRowOf( +// cbButton(ctx => { +// ctx.disable(); +// }) +// .setLabel("Testing BUtton") +// .setEmoji("📈") +// .setStyle("DANGER") +// ), +// actionRowOf( +// cbSelectMenu(async ctx => { +// await ctx.disable(); +// await ctx.int.followUp(ctx.int.values.join(", ")); +// }) +// .setMaxValues(2) +// .setMinValues(1) +// .setPlaceholder("i am in severe pain") +// .setOptions( +// ...[...Array(10)].map((_, x) => ({ +// label: `label ${x}`, +// value: `${x}`, +// description: `description ${x}`, +// emoji: ["🕗", "♍", "🌎", "😑", "🔸", "💞", "🍤", "⛔", "🍊", "âŗ"][x], +// })) +// ) +// ), +// ], +// }); +// }); diff --git a/src/utils/components.ts b/src/utils/components.ts index 2e8a837..1ecaf8a 100644 --- a/src/utils/components.ts +++ b/src/utils/components.ts @@ -1,11 +1,12 @@ // TODO: discord has updated their typings, so this file is now broken, go cry about it -import type { ButtonInteraction, Constructable, MessageActionRowComponent, MessageComponentInteraction, SelectMenuInteraction } from "discord.js"; -import { MessageActionRow, MessageButton, MessageSelectMenu } from "discord.js"; +import type { ButtonInteraction, MessageActionRowComponent, MessageComponentInteraction, SelectMenuInteraction } from "discord.js"; +import { ActionRowBuilder, ButtonBuilder, StringSelectMenuBuilder } from "discord.js"; import { componentCallbacks } from "../events/interactionCreate"; +import {IllegalStateError} from "./error"; -export type InteractionByType = C extends MessageButton +export type InteractionByType = C extends ButtonBuilder ? ButtonInteraction<"cached"> - : C extends MessageSelectMenu + : C extends StringSelectMenuBuilder ? SelectMenuInteraction<"cached"> : MessageComponentInteraction<"cached">; @@ -29,8 +30,13 @@ export class CallbackContext { async enableAll() { return this.#disableComponents(false); } + + /** + * it no work + */ async #disableComponents(disabled: boolean, filter?: (cmp: MessageActionRowComponent) => boolean) { - return this.#walkComponents(x => (filter === undefined || filter(x)) && x.setDisabled(disabled)); + throw new IllegalStateError("This method is currently broken because v14 is making me sad, please use the `disable` and `enable` methods instead."); + // return this.#walkComponents(x => (filter === undefined || filter(x)) && x.setDisabled(disabled)); } async #walkComponents(map: (cmp: MessageActionRowComponent) => void) { this.int.message.components.forEach(x => x.components.forEach(map)); @@ -39,19 +45,20 @@ export class CallbackContext { } } -const cbComponent = - ( - component: Constructable & (new () => T) - ) => - (cb: (ctx: CallbackContext) => void) => { - const id = `DB_CB__${component.name}_${Date.now()}`; - const cmp = new component().setCustomId(id) as T; - delete (cmp as Partial).setCustomId; - componentCallbacks.set(id, ((int: InteractionByType) => cb(new CallbackContext(int as InteractionByType, cmp)))); - return cmp; - }; - -export const cbButton = cbComponent(MessageButton); -export const cbSelectMenu = cbComponent(MessageSelectMenu); -export const actionRowOf = (...args: Parameters) => - new MessageActionRow().addComponents(...args); +// todo: this is hell in a handbasket, fix it LATER. +// const cbComponent = +// ( +// component: Constructable & (new () => T) +// ) => +// (cb: (ctx: CallbackContext) => void) => { +// const id = `DB_CB__${component.name}_${Date.now()}`; +// const cmp = new component() as T; +// delete (cmp as Partial).setCustomId; +// componentCallbacks.set(id, ((int: InteractionByType) => cb(new CallbackContext(int as InteractionByType, cmp)))); +// return cmp; +// }; +// +// export const cbButton = cbComponent(ButtonBuilder); +// export const cbSelectMenu = cbComponent(StringSelectMenuBuilder); +// export const actionRowOf = (...args: Parameters) => +// new ActionRowBuilder().addComponents(...args); diff --git a/yarn.lock b/yarn.lock index 8694c59..985212d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,52 +2,56 @@ # yarn lockfile v1 +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@discordjs/builders@^0.11.0": - version "0.11.0" - resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-0.11.0.tgz#4102abe3e0cd093501f3f71931df43eb92f5b0cc" - integrity sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg== - dependencies: - "@sindresorhus/is" "^4.2.0" - discord-api-types "^0.26.0" - ts-mixer "^6.0.0" - tslib "^2.3.1" - zod "^3.11.6" - -"@discordjs/builders@^1.5.0-dev.1677499471-ffdb197.0": - version "1.6.3" - resolved "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.3.tgz" - integrity sha512-CTCh8NqED3iecTNuiz49mwSsrc2iQb4d0MjMdmS/8pb69Y4IlzJ/DIy/p5GFlgOrFbNO2WzMHkWKQSiJ3VNXaw== +"@discordjs/builders@^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/builders@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.7.0.tgz#e2478c7e55b0f4c40837edb8f102bce977323a37" + integrity sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw== dependencies: - "@discordjs/formatters" "^0.3.1" - "@discordjs/util" "^0.3.1" - "@sapphire/shapeshift" "^3.8.2" - discord-api-types "^0.37.41" + "@discordjs/formatters" "^0.3.3" + "@discordjs/util" "^1.0.2" + "@sapphire/shapeshift" "^3.9.3" + discord-api-types "0.37.61" fast-deep-equal "^3.1.3" ts-mixer "^6.0.3" - tslib "^2.5.0" + tslib "^2.6.2" + +"@discordjs/collection@1.5.3": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.5.3.tgz#5a1250159ebfff9efa4f963cfa7e97f1b291be18" + integrity sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ== "@discordjs/collection@^0.4.0": version "0.4.0" - resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.4.0.tgz#b6488286a1cc7b41b644d7e6086f25a1c1e6f837" integrity sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw== -"@discordjs/formatters@^0.3.1": - version "0.3.1" - resolved "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.1.tgz" - integrity sha512-M7X4IGiSeh4znwcRGcs+49B5tBkNDn4k5bmhxJDAUhRxRHTiFAOTVUNQ6yAKySu5jZTnCbSvTYHW3w0rAzV1MA== +"@discordjs/collection@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-2.0.0.tgz#409b80c74eb8486cc4ee6a9b83426aaff1380f8c" + integrity sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w== + +"@discordjs/formatters@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.3.3.tgz#b16fdd79bb819680ab7e519193004e9dc124a749" + integrity sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w== dependencies: - discord-api-types "^0.37.41" + discord-api-types "0.37.61" "@discordjs/rest@^0.3.0": version "0.3.0" - resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz" + resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-0.3.0.tgz#89e06a42b168c91598891d6bf860353e28fba5d2" integrity sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q== dependencies: "@discordjs/collection" "^0.4.0" @@ -58,31 +62,61 @@ node-fetch "^2.6.5" tslib "^2.3.1" -"@discordjs/util@^0.3.1": - version "0.3.1" - resolved "https://registry.npmjs.org/@discordjs/util/-/util-0.3.1.tgz" - integrity sha512-HxXKYKg7vohx2/OupUN/4Sd02Ev3PBJ5q0gtjdcvXb0ErCva8jNHWfe/v5sU3UKjIB/uxOhc+TDOnhqffj9pRA== +"@discordjs/rest@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-2.2.0.tgz#f4ec00d3faff965c00a879b7e87bb4b6f4446966" + integrity sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A== + dependencies: + "@discordjs/collection" "^2.0.0" + "@discordjs/util" "^1.0.2" + "@sapphire/async-queue" "^1.5.0" + "@sapphire/snowflake" "^3.5.1" + "@vladfrangu/async_event_emitter" "^2.2.2" + discord-api-types "0.37.61" + magic-bytes.js "^1.5.0" + tslib "^2.6.2" + undici "5.27.2" + +"@discordjs/util@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-1.0.2.tgz#dc1896d764452b1bd9707eb9aa99ccfbb30bd1c0" + integrity sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw== + +"@discordjs/ws@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@discordjs/ws/-/ws-1.0.2.tgz#3933b12d4686aabf6a95dfe5fb6e744342a661d1" + integrity sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q== + dependencies: + "@discordjs/collection" "^2.0.0" + "@discordjs/rest" "^2.1.0" + "@discordjs/util" "^1.0.2" + "@sapphire/async-queue" "^1.5.0" + "@types/ws" "^8.5.9" + "@vladfrangu/async_event_emitter" "^2.2.2" + discord-api-types "0.37.61" + tslib "^2.6.2" + ws "^8.14.2" "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0": - version "4.5.1" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== +"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.0.3": - version "2.0.3" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz" - integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== +"@eslint/eslintrc@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" + integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.5.2" + espree "^9.6.0" globals "^13.19.0" ignore "^5.2.0" import-fresh "^3.2.1" @@ -90,56 +124,61 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.41.0": - version "8.41.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz" - integrity sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA== +"@eslint/js@8.54.0": + version "8.54.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.54.0.tgz#4fab9a2ff7860082c304f750e94acd644cf984cf" + integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== +"@fastify/busboy@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" + integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + +"@humanwhocodes/config-array@^0.11.13": + version "0.11.13" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" + integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== dependencies: - "@humanwhocodes/object-schema" "^1.2.1" + "@humanwhocodes/object-schema" "^2.0.1" debug "^4.1.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== +"@humanwhocodes/object-schema@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" + integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== "@jridgewell/resolve-uri@^3.0.3": version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" "@noble/hashes@^1.1.5": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" - integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" @@ -147,94 +186,94 @@ "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" "@paralleldrive/cuid2@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.2.1.tgz#e7c11bad9452b36ef5ad1a834b14910eb0fe4cec" - integrity sha512-GJhHYlMhyT2gWemDL7BGMWfTNhspJKkikLKh9wAy3z4GTTINvTYALkUd+eGQK7aLeVkVzPuSA0VCT3H5eEWbbw== + version "2.2.2" + resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz#7f91364d53b89e2c9cb9e02e8dd0f129e834455f" + integrity sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA== dependencies: "@noble/hashes" "^1.1.5" -"@prisma/client@latest": - version "4.15.0" - resolved "https://registry.npmjs.org/@prisma/client/-/client-4.15.0.tgz" - integrity sha512-xnROvyABcGiwqRNdrObHVZkD9EjkJYHOmVdlKy1yGgI+XOzvMzJ4tRg3dz1pUlsyhKxXGCnjIQjWW+2ur+YXuw== +"@prisma/client@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.6.0.tgz#1c15932250d5658fe0127e62faf4ecd96a877259" + integrity sha512-mUDefQFa1wWqk4+JhKPYq8BdVoFk9NFMBXUI8jAkBfQTtgx8WPx02U2HB/XbAz3GSUJpeJOKJQtNvaAIDs6sug== dependencies: - "@prisma/engines-version" "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" + "@prisma/engines-version" "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee" -"@prisma/engines-version@4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944": - version "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" - resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944.tgz" - integrity sha512-sVOig4tjGxxlYaFcXgE71f/rtFhzyYrfyfNFUsxCIEJyVKU9rdOWIlIwQ2NQ7PntvGnn+x0XuFo4OC1jvPJKzg== +"@prisma/engines-version@5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee": + version "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee" + resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee.tgz#57b003ab5e1ea1523b5cdd7f06b24ebcf5c7fd8c" + integrity sha512-UoFgbV1awGL/3wXuUK3GDaX2SolqczeeJ5b4FVec9tzeGbSWJboPSbT0psSrmgYAKiKnkOPFSLlH6+b+IyOwAw== -"@prisma/engines@4.15.0": - version "4.15.0" - resolved "https://registry.npmjs.org/@prisma/engines/-/engines-4.15.0.tgz" - integrity sha512-FTaOCGs0LL0OW68juZlGxFtYviZa4xdQj/rQEdat2txw0s3Vu/saAPKjNVXfIgUsGXmQ72HPgNr6935/P8FNAA== +"@prisma/engines@5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.6.0.tgz#82c445aa10633bbc0388aa2d6e411a0bd94c9439" + integrity sha512-Mt2q+GNJpU2vFn6kif24oRSBQv1KOkYaterQsi0k2/lA+dLvhRX6Lm26gon6PYHwUM8/h8KRgXIUMU0PCLB6bw== -"@sapphire/async-queue@^1.1.9": +"@sapphire/async-queue@^1.1.9", "@sapphire/async-queue@^1.5.0": version "1.5.0" - resolved "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz" + resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.0.tgz#2f255a3f186635c4fb5a2381e375d3dfbc5312d8" integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== -"@sapphire/shapeshift@^3.8.1", "@sapphire/shapeshift@^3.8.2": - version "3.9.0" - resolved "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.0.tgz" - integrity sha512-iJpHmjAdwX9aSL6MvFpVyo+tkokDtInmSjoJHbz/k4VJfnim3DjvG0hgGEKWtWZgCu45RaLgcoNgR1fCPdIz3w== +"@sapphire/shapeshift@^3.8.1", "@sapphire/shapeshift@^3.9.3": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-3.9.3.tgz#89d26713044bc21cc5e0845e61a8a328ca3c1a84" + integrity sha512-WzKJSwDYloSkHoBbE8rkRW8UNKJiSRJ/P8NqJ5iVq7U2Yr/kriIBx2hW+wj2Z5e5EnXL1hgYomgaFsdK6b+zqQ== dependencies: fast-deep-equal "^3.1.3" lodash "^4.17.21" -"@sapphire/snowflake@^3.0.1": +"@sapphire/snowflake@3.5.1", "@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.5.1": version "3.5.1" - resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz" + resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.5.1.tgz#254521c188b49e8b2d4cc048b475fb2b38737fec" integrity sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA== -"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.2.0": +"@sindresorhus/is@^4.0.0": version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== "@szmarczak/http-timer@^4.0.5": version "4.0.6" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== dependencies: defer-to-connect "^2.0.0" "@tsconfig/node10@^1.0.7": version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/cacheable-request@^6.0.1": version "6.0.3" - resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== dependencies: "@types/http-cache-semantics" "*" @@ -243,53 +282,59 @@ "@types/responselike" "^1.0.0" "@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/keyv@^3.1.4": version "3.1.4" - resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== dependencies: "@types/node" "*" -"@types/node-fetch@^2.5.12": - version "2.6.9" - resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.9.tgz#15f529d247f1ede1824f7e7acdaa192d5f28071e" - integrity sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA== +"@types/node@*": + version "20.10.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.0.tgz#16ddf9c0a72b832ec4fcce35b8249cf149214617" + integrity sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ== dependencies: - "@types/node" "*" - form-data "^4.0.0" + undici-types "~5.26.4" -"@types/node@*", "@types/node@^17.0.42": +"@types/node@^17.0.42": version "17.0.45" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== dependencies: "@types/node" "*" "@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== + version "7.5.6" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" + integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== "@types/uuid@^9.0.1": - version "9.0.1" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz" - integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== + version "9.0.7" + resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.7.tgz#b14cebc75455eeeb160d5fe23c2fcc0c64f724d8" + integrity sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g== + +"@types/ws@8.5.9": + version "8.5.9" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.9.tgz#384c489f99c83225a53f01ebc3eddf3b8e202a8c" + integrity sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg== + dependencies: + "@types/node" "*" -"@types/ws@^8.2.2": +"@types/ws@^8.5.9": version "8.5.10" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== @@ -297,112 +342,122 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin@^5.16.0": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz" - integrity sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA== + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== dependencies: "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.59.7" - "@typescript-eslint/type-utils" "5.59.7" - "@typescript-eslint/utils" "5.59.7" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/type-utils" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" - grapheme-splitter "^1.0.4" + graphemer "^1.4.0" ignore "^5.2.0" natural-compare-lite "^1.4.0" semver "^7.3.7" tsutils "^3.21.0" "@typescript-eslint/parser@^5.16.0": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz" - integrity sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ== + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== dependencies: - "@typescript-eslint/scope-manager" "5.59.7" - "@typescript-eslint/types" "5.59.7" - "@typescript-eslint/typescript-estree" "5.59.7" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz" - integrity sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ== +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: - "@typescript-eslint/types" "5.59.7" - "@typescript-eslint/visitor-keys" "5.59.7" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" -"@typescript-eslint/type-utils@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz" - integrity sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ== +"@typescript-eslint/type-utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== dependencies: - "@typescript-eslint/typescript-estree" "5.59.7" - "@typescript-eslint/utils" "5.59.7" + "@typescript-eslint/typescript-estree" "5.62.0" + "@typescript-eslint/utils" "5.62.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz" - integrity sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A== +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== -"@typescript-eslint/typescript-estree@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz" - integrity sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ== +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: - "@typescript-eslint/types" "5.59.7" - "@typescript-eslint/visitor-keys" "5.59.7" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz" - integrity sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ== +"@typescript-eslint/utils@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.7" - "@typescript-eslint/types" "5.59.7" - "@typescript-eslint/typescript-estree" "5.59.7" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" eslint-scope "^5.1.1" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz" - integrity sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ== +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: - "@typescript-eslint/types" "5.59.7" + "@typescript-eslint/types" "5.62.0" eslint-visitor-keys "^3.3.0" +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +"@vladfrangu/async_event_emitter@^2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz#84c5a3f8d648842cec5cc649b88df599af32ed88" + integrity sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ== + abbrev@1: version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + version "8.3.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" + integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== -acorn@^8.4.1, acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^8.4.1, acorn@^8.9.0: + version "8.11.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== -ajv@^6.10.0, ajv@^6.12.4: +ajv@^6.12.4: version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -412,19 +467,19 @@ ajv@^6.10.0, ajv@^6.12.4: ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -432,42 +487,42 @@ anymatch@~3.1.2: arg@^4.1.0: version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-union@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== atomic-sleep@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -475,25 +530,25 @@ brace-expansion@^1.1.7: braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== cacheable-lookup@^5.0.3: version "5.0.4" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== dependencies: clone-response "^1.0.2" get-stream "^5.1.0" @@ -505,12 +560,12 @@ cacheable-request@^7.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== chalk@^4.0.0: version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" @@ -518,7 +573,7 @@ chalk@^4.0.0: chokidar@^3.5.2: version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -533,55 +588,55 @@ chokidar@^3.5.2: clone-response@^1.0.2: version "1.0.3" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== dependencies: mimic-response "^1.0.0" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@~1.1.4: version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" comment-parser@^1.1.2: - version "1.3.1" - resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz" - integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== + version "1.4.1" + resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" + integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== create-require@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-env@^7.0.3: version "7.0.3" - resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: cross-spawn "^7.0.1" cross-spawn@^7.0.1, cross-spawn@^7.0.2: version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -590,87 +645,97 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2: debug@^3.2.7: version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== defer-to-connect@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== diff@^4.0.1: version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" -discord-api-types@^0.26.0, discord-api-types@^0.26.1: +discord-api-types@0.37.61: + version "0.37.61" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.61.tgz#9dd8e58c624237e6f1b23be2d29579af268b8c5b" + integrity sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw== + +discord-api-types@^0.26.1: version "0.26.1" - resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.26.1.tgz#726f766ddc37d60da95740991d22cb6ef2ed787b" integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== -discord-api-types@^0.37.35, discord-api-types@^0.37.41: - version "0.37.42" - resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.42.tgz" - integrity sha512-1Huaj9cQ1W7/uryS8MZs/tZemnoKB94thM1cE40lep3rpU3q7WHqkdjN/veX0prTkYlPhcyLd/DeF/pBO8X8oQ== - -discord.js@13.6.0: - version "13.6.0" - resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-13.6.0.tgz#d8a8a591dbf25cbcf9c783d5ddf22c4694860475" - integrity sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g== - dependencies: - "@discordjs/builders" "^0.11.0" - "@discordjs/collection" "^0.4.0" - "@sapphire/async-queue" "^1.1.9" - "@types/node-fetch" "^2.5.12" - "@types/ws" "^8.2.2" - discord-api-types "^0.26.0" - form-data "^4.0.0" - node-fetch "^2.6.1" - ws "^8.4.0" +discord-api-types@^0.37.35: + version "0.37.65" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.65.tgz#68dcf9eaece271fb550370c2ba7fe71e927c56b2" + integrity sha512-CQHW3Nu04LEHIj1Xps/sfGhTdrowilxnek2tirpLhwvrmgmLr1C6A+4JFLs+0kJMH2IX2QgDyA9GfNehqN+xPQ== + +discord.js@^14.14.1: + version "14.14.1" + resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.14.1.tgz#9a2bea23bba13819705ab87612837610abce9ee3" + integrity sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w== + dependencies: + "@discordjs/builders" "^1.7.0" + "@discordjs/collection" "1.5.3" + "@discordjs/formatters" "^0.3.3" + "@discordjs/rest" "^2.1.0" + "@discordjs/util" "^1.0.2" + "@discordjs/ws" "^1.0.2" + "@sapphire/snowflake" "3.5.1" + "@types/ws" "8.5.9" + discord-api-types "0.37.61" + fast-deep-equal "3.1.3" + lodash.snakecase "4.1.1" + tslib "2.6.2" + undici "5.27.2" + ws "8.14.2" doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" duplexify@^4.1.2: version "4.1.2" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== dependencies: end-of-stream "^1.4.1" @@ -680,19 +745,19 @@ duplexify@^4.1.2: end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-plugin-regexp@^1.6.0: version "1.15.0" - resolved "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz" + resolved "https://registry.yarnpkg.com/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz#2717cd4867418287b36d9569c72fca7d242c59b3" integrity sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag== dependencies: "@eslint-community/eslint-utils" "^4.2.0" @@ -706,46 +771,47 @@ eslint-plugin-regexp@^1.6.0: eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" estraverse "^4.1.1" -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.12.0: - version "8.41.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz" - integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== + version "8.54.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.54.0.tgz#588e0dd4388af91a2e8fa37ea64924074c783537" + integrity sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.3" - "@eslint/js" "8.41.0" - "@humanwhocodes/config-array" "^0.11.8" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.3" + "@eslint/js" "8.54.0" + "@humanwhocodes/config-array" "^0.11.13" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.3.2" doctrine "^3.0.0" escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.5.2" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" esquery "^1.4.2" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -755,7 +821,6 @@ eslint@^8.12.0: globals "^13.19.0" graphemer "^1.4.0" ignore "^5.2.0" - import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" is-path-inside "^3.0.3" @@ -765,58 +830,57 @@ eslint@^8.12.0: lodash.merge "^4.6.2" minimatch "^3.1.2" natural-compare "^1.4.0" - optionator "^0.9.1" + optionator "^0.9.3" strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" text-table "^0.2.0" -espree@^9.5.2: - version "9.5.2" - resolved "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz" - integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: - acorn "^8.8.0" + acorn "^8.9.0" acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" esquery@^1.4.2: version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: +fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -826,64 +890,65 @@ fast-glob@^3.2.11, fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-redact@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz" - integrity sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw== + version "3.3.0" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" + integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== fastq@^1.6.0: version "1.15.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== dependencies: reusify "^1.0.4" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-up@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" path-exists "^4.0.0" flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: - flatted "^3.1.0" + flatted "^3.2.9" + keyv "^4.5.3" rimraf "^3.0.2" -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== form-data@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -892,38 +957,38 @@ form-data@^4.0.0: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== get-stream@^5.1.0: version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" glob@^7.1.3: version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -934,15 +999,15 @@ glob@^7.1.3: path-is-absolute "^1.0.0" globals@^13.19.0: - version "13.20.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== + version "13.23.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" + integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== dependencies: type-fest "^0.20.2" globby@^11.1.0: version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -954,7 +1019,7 @@ globby@^11.1.0: got@^11.8.3: version "11.8.6" - resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== dependencies: "@sindresorhus/is" "^4.0.0" @@ -971,37 +1036,37 @@ got@^11.8.3: grapheme-splitter@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== hjson@^3.2.2: version "3.2.2" - resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" + resolved "https://registry.yarnpkg.com/hjson/-/hjson-3.2.2.tgz#a5a81138f4c0bb427e4b2ac917fafd4b454436cf" integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== http-cache-semantics@^4.0.0: version "4.1.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== dependencies: quick-lru "^5.1.1" @@ -1009,17 +1074,17 @@ http2-wrapper@^1.0.0-beta.5.2: ignore-by-default@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" + integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== -import-fresh@^3.0.0, import-fresh@^3.2.1: +import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -1027,12 +1092,12 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -1040,85 +1105,85 @@ inflight@^1.0.4: inherits@2, inherits@^2.0.3: version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsdoctypeparser@^9.0.0: version "9.0.0" - resolved "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz" + resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26" integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^2.2.2: version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== -keyv@^4.0.0: - version "4.5.2" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz" - integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" levn@^0.4.1: version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -1126,46 +1191,56 @@ levn@^0.4.1: locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== +lodash.snakecase@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + lodash@^4.17.21: version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== lowercase-keys@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" +magic-bytes.js@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/magic-bytes.js/-/magic-bytes.js-1.5.0.tgz#f5531ca53e1c8dab5692b8dcfb360f7ca6c6b6bc" + integrity sha512-wJkXvutRbNWcc37tt5j1HyOK1nosspdh3dj6LUYYAvF6JYNqs53IfRvK9oEpcwiDA1NdoIi64yAMfdivPeVAyw== + make-error@^1.1.1: version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -1173,80 +1248,73 @@ micromatch@^4.0.4: mime-db@1.52.0: version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12: version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mimic-response@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist@^1.2.6: version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== ms@2.1.2: version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@^2.1.1: version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== natural-compare-lite@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== nekos.life@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/nekos.life/-/nekos.life-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/nekos.life/-/nekos.life-3.0.0.tgz#91d944daad8dcbdff493cf430537639fa963b60e" integrity sha512-7LbvSqLtfK4XRA91nJaGOWthrNADmG7Vx9d54TC77Hx5qFvRCssFUaHraI6bZGjVENBCUaF7CreisoFX+8mnKQ== -node-fetch@^2.6.1: +node-fetch@^2.6.5: version "2.7.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" -node-fetch@^2.6.5: - version "2.6.11" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" - integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== - dependencies: - whatwg-url "^5.0.0" - nodemon@^2.0.20: version "2.0.22" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== dependencies: chokidar "^3.5.2" @@ -1262,109 +1330,109 @@ nodemon@^2.0.20: nopt@~1.0.10: version "1.0.10" - resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== dependencies: abbrev "1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@^6.0.1: version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== on-exit-leak-free@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" deep-is "^0.1.3" fast-levenshtein "^2.0.6" levn "^0.4.1" prelude-ls "^1.2.1" type-check "^0.4.0" - word-wrap "^1.2.3" p-cancelable@^2.0.0: version "2.1.1" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-ms@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pino-abstract-transport@v0.5.0: version "0.5.0" - resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0" integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== dependencies: duplexify "^4.1.2" @@ -1372,12 +1440,12 @@ pino-abstract-transport@v0.5.0: pino-std-serializers@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== pino@^7.9.2: version "7.11.0" - resolved "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz" + resolved "https://registry.yarnpkg.com/pino/-/pino-7.11.0.tgz#0f0ea5c4683dc91388081d44bff10c83125066f6" integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== dependencies: atomic-sleep "^1.0.0" @@ -1394,64 +1462,64 @@ pino@^7.9.2: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== pretty-ms@^7.0.1: version "7.0.1" - resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== dependencies: parse-ms "^2.1.0" -prisma@latest: - version "4.15.0" - resolved "https://registry.npmjs.org/prisma/-/prisma-4.15.0.tgz" - integrity sha512-iKZZpobPl48gTcSZVawLMQ3lEy6BnXwtoMj7hluoGFYu2kQ6F9LBuBrUyF95zRVnNo8/3KzLXJXJ5TEnLSJFiA== +prisma@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.6.0.tgz#ae2c27fdfb4d53be7f7dafb50d6b8b7f55c93aa5" + integrity sha512-EEaccku4ZGshdr2cthYHhf7iyvCcXqwJDvnoQRAJg5ge2Tzpv0e2BaMCp+CbbDUwoVTzwgOap9Zp+d4jFa2O9A== dependencies: - "@prisma/engines" "4.15.0" + "@prisma/engines" "5.6.0" process-warning@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== pstree.remy@^1.1.8: version "1.1.8" - resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== pump@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" once "^1.3.1" punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-format-unescaped@^4.0.3: version "4.0.4" - resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== quick-lru@^5.1.1: version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== readable-stream@^3.1.1: version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -1460,26 +1528,26 @@ readable-stream@^3.1.1: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" real-require@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== refa@^0.11.0: version "0.11.0" - resolved "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz" + resolved "https://registry.yarnpkg.com/refa/-/refa-0.11.0.tgz#07d57a9f5f3ee2dd58e0d145a6a489fda2591ed0" integrity sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ== dependencies: "@eslint-community/regexpp" "^4.5.0" regexp-ast-analysis@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz#c0b648728c85d266a409ce00a6440c01c9834c61" integrity sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ== dependencies: "@eslint-community/regexpp" "^4.5.0" @@ -1487,53 +1555,53 @@ regexp-ast-analysis@^0.6.0: resolve-alpn@^1.0.0: version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== responselike@^2.0.0: version "2.0.1" - resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== dependencies: lowercase-keys "^2.0.0" reusify@^1.0.4: version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-stable-stringify@^2.1.0: version "2.4.3" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== scslre@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/scslre/-/scslre-0.2.0.tgz#b604eedbab76f87003738d00de44d7601a78609e" integrity sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w== dependencies: "@eslint-community/regexpp" "^4.5.0" @@ -1541,56 +1609,56 @@ scslre@^0.2.0: regexp-ast-analysis "^0.6.0" semver@^5.7.1: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^7.3.7: - version "7.5.1" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" semver@~7.0.0: version "7.0.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== simple-update-notifier@^1.0.7: version "1.1.0" - resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== dependencies: semver "~7.0.0" slash@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== sonic-boom@^2.2.1: version "2.8.0" - resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== dependencies: atomic-sleep "^1.0.0" source-map-support@^0.5.21: version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -1598,96 +1666,96 @@ source-map-support@^0.5.21: source-map@^0.6.0: version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== split2@^4.0.0: version "4.2.0" - resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== stream-shift@^1.0.0: version "1.0.1" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: +strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" text-table@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thread-stream@^0.15.1: version "0.15.2" - resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.15.2.tgz#fb95ad87d2f1e28f07116eb23d85aba3bc0425f4" integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== dependencies: real-require "^0.1.0" to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" touch@^3.1.0: version "3.1.0" - resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== dependencies: nopt "~1.0.10" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -ts-mixer@^6.0.0, ts-mixer@^6.0.3: +ts-mixer@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.3.tgz#69bd50f406ff39daa369885b16c77a6194c7cae6" integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ== ts-node@^10.9.1: version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -1706,92 +1774,104 @@ ts-node@^10.9.1: ts-toolbelt@^9.6.0: version "9.6.0" - resolved "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz" + resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== tsconfig-paths@^4.1.2: version "4.2.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== dependencies: json5 "^2.2.2" minimist "^1.2.6" strip-bom "^3.0.0" +tslib@2.6.2, tslib@^2.3.1, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tslib@^1.8.1: version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.3.1, tslib@^2.5.0: - version "2.5.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz" - integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== - tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== typescript-memoize@^1.1.0: version "1.1.1" - resolved "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz" + resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.1.1.tgz#02737495d5df6ebf72c07ba0d002e8f4cf5ccfa0" integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== typescript@^4.9.5: version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== undefsafe@^2.0.5: version "2.0.5" - resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici@5.27.2: + version "5.27.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.27.2.tgz#a270c563aea5b46cc0df2550523638c95c5d4411" + integrity sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ== + dependencies: + "@fastify/busboy" "^2.0.0" + uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" util-deprecate@^1.0.1: version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -1799,52 +1879,42 @@ whatwg-url@^5.0.0: which@^2.0.1: version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - wrappy@1: version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.4.0: +ws@8.14.2, ws@^8.14.2: version "8.14.2" resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yarn@^1.22.18: - version "1.22.19" - resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" - integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== + version "1.22.21" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.21.tgz#1959a18351b811cdeedbd484a8f86c3cc3bbaf72" + integrity sha512-ynXaJsADJ9JiZ84zU25XkPGOvVMmZ5b7tmTSpKURYwgELdjucAOydqIOrOfTxVYcNXe91xvLZwcRh68SR3liCg== yn@3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== -zod@^3.11.6: +zod@^3.14.3: version "3.22.4" resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== - -zod@^3.14.3: - version "3.21.4" - resolved "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz" - integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== From 409d7d88186445f0fa4a309c87736231bcff53c3 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Wed, 13 Mar 2024 13:09:07 -0400 Subject: [PATCH 35/79] Backup Backup testing version 3/13/2024 --- config/text.hjson | 12 +- package.json | 2 +- prisma/schema.prisma | 25 +- src/commands/Devs/avatar.ts | 77 ++++++ src/commands/Devs/botinfo.ts | 1 + src/commands/Devs/userinfo.ts | 1 + src/commands/Devs/ws.ts | 45 ++++ src/commands/orders/feedback.ts | 2 +- src/commands/orders/order.ts | 11 +- src/commands/orders/worker/brew.ts | 297 +++++++++++++++++------ src/commands/orders/worker/claim.ts | 80 ++++-- src/commands/orders/worker/claimed.ts | 2 +- src/commands/orders/worker/delete.ts | 1 + src/commands/orders/worker/deliver.ts | 7 + src/commands/orders/worker/ebrew.ts | 261 ++++++++++++++++++++ src/commands/orders/worker/eclaim.ts | 163 +++++++++++++ src/commands/orders/worker/editstatus.ts | 58 +++++ src/commands/orders/worker/list.ts | 13 +- src/commands/orders/worker/nothing | 49 ++++ src/commands/orders/worker/unclaim.ts | 122 ++++++---- src/commands/orders/worker/workerinfo.ts | 21 +- src/database/order.ts | 2 +- src/database/orders.ts | 1 + src/database/preloadimage.ts | 0 src/database/workerInfo.ts | 3 +- src/database/workerstats.ts | 61 +++++ src/events/CommandUsage.ts | 0 src/events/ServerConfig.ts | 46 ++++ src/providers/client.ts | 29 ++- src/providers/commandManager.ts | 60 ++++- src/providers/config.ts | 3 + src/structures/Command.ts | 28 ++- src/structures/extendedCommand.ts | 26 ++ src/utils/serverconfig.ts | 1 + src/utils/string.ts | 2 +- 35 files changed, 1319 insertions(+), 193 deletions(-) create mode 100644 src/commands/Devs/avatar.ts create mode 100644 src/commands/Devs/ws.ts create mode 100644 src/commands/orders/worker/ebrew.ts create mode 100644 src/commands/orders/worker/eclaim.ts create mode 100644 src/commands/orders/worker/editstatus.ts create mode 100644 src/commands/orders/worker/nothing create mode 100644 src/database/preloadimage.ts create mode 100644 src/database/workerstats.ts create mode 100644 src/events/CommandUsage.ts create mode 100644 src/events/ServerConfig.ts create mode 100644 src/structures/extendedCommand.ts diff --git a/config/text.hjson b/config/text.hjson index da8a2b8..7eb9e68 100644 --- a/config/text.hjson +++ b/config/text.hjson @@ -37,11 +37,12 @@ } commands: { order: { - success: "[yes] Your order for **{details}** has been placed! The order ID is `{id}`.", + success: "[yes] Your order for **{details}** has been placed! The order ID is `{id}`." exists: "[no] You already have an active order.", - created: "{duty} An order with the id `{id}` for **{details}** has been placed by {tag}.", - success1: "[yes] Your order for **{details}** has been placed! The price is `{price}`. The order ID is `{id}`.", - success_tab: "Your tab order has been placed. Order ID: {id}, Details: {details}."} + created: "{duty} An order with the id `{id}` for **{details}** has been placed by {tag}." + success1: "[yes] Your order for **{details}** has been placed! The price is `{price}`. The order ID is `{id}`." + success_tab: "Your tab order has been placed. Order ID: {id}, Details: {details}." + } list: { title: **__Current Orders__** empty: *There are currently no active orders.* @@ -76,6 +77,7 @@ noMessage: âš ī¸ You do not have a delivery message set, and the default message was used. Make to set one with `/deliverymessage`! noChannel: "[no] I wasn't able to access the channel for the order, and the order failed to deliver." success: "[yes] The order has been successfully delivered." + multiSuccess: "Successfully delivered {count} orders." default: ''' Hi, {mention}! Here is your {details}, delivered by {preparer}. Make sure to give feedback with `/feedback` and tip with `/tip`! @@ -145,7 +147,6 @@ ] } crime: { - sucess: [ You stole from Drunk Bartender and got {}. You fought an old lady and got {}. @@ -156,6 +157,7 @@ You burnt down someones mansion and got {}. You kiddnapped someones dog. They paid you {} to get the dog back. You stole someones jewelry and sold it for {}. + ] failure: [ You tried to steal from Drunk Bartender and lost {}. diff --git a/package.json b/package.json index 1138696..835cdd3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dbrewrite", - "version": "1.3.1", + "version": "1.3.3", "description": "", "main": "index.js", "scripts": { diff --git a/prisma/schema.prisma b/prisma/schema.prisma index d86cf7b..79b3350 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -9,11 +9,16 @@ datasource db { } model WorkerInfo { - id String @id @db.VarChar(20) - createdAt DateTime @default(now()) - preparations Int @default(0) - deliveries Int @default(0) - deliveryMessage String? + id String @id @db.VarChar(20) + createdAt DateTime @default(now()) + preparations Int @default(0) + deliveries Int @default(0) + deliveryMessage String? + lastCommandUsage DateTime? // New field to track the last command usage time + commandUsageCount Int // New field to track the command usage count + lastCommandName String? // New field to track the last command name + claimUsageCount Int @default(0) // Usage count for "claim" command + brewUsageCount Int @default(0) // Usage count for "brew" command } model UserInfo { @@ -135,6 +140,7 @@ enum CafeStatus { Cancelled Deleted Failed + Claimed } enum OrderStatus { @@ -148,6 +154,7 @@ enum OrderStatus { Cancelled Deleted Failed + Claimed } model GuildsXP { @@ -161,3 +168,11 @@ model GuildsXP { notificationChannelId String? // New field for notification channel ID @@unique([userId, guildId]) } + +model WorkerStats { + id String @id + ordersBrewed Int + ordersDelivered Int + lastUsed DateTime + lastCommand String? +} diff --git a/src/commands/Devs/avatar.ts b/src/commands/Devs/avatar.ts new file mode 100644 index 0000000..7e161a6 --- /dev/null +++ b/src/commands/Devs/avatar.ts @@ -0,0 +1,77 @@ +import { ExtendedCommand } from "./../../structures/extendedCommand"; +/* eslint-disable quotes */ +/* eslint-disable indent */ +import { client } from "../../providers/client"; +import { permissions } from "../../providers/permissions"; +import { Command } from "../../structures/Command"; +import { CommandInteraction, EmbedBuilder } from "discord.js"; + +export const command = new ExtendedCommand({ name: "avatar", description: "Some info." }) + .addPermission(permissions.developer) // AnyRank + .addSubCommand((subcommand) => + subcommand + .setName("attach") + .setDescription("Attach an image to update the bot's avatar.") + .addAttachmentOption((option) => + option + .setName("attachment") + .setDescription("The image to attach for updating the avatar.") + .setRequired(true) + ) + ) + .setExecutor(async (int: CommandInteraction) => { + // Check the subcommand + const subcommand = int.options.getSubcommand(true); + + if (subcommand === "attach") { + // Defer the reply to avoid potential issues with the interaction being deleted + await int.deferReply({ ephemeral: true }); + + // Fetch the attachment from the options + const attachment = int.options.get("attachment", true)?.attachment; + + if (!attachment) { + await int.editReply({ content: "Attachment is missing or not valid." }); + return; + } + + try { + // Read the attachment and set it as the bot's avatar + const avatarBuffer = await fetch(attachment.url).then((res) => res.arrayBuffer()); + const buffer = Buffer.from(avatarBuffer); // Convert ArrayBuffer to Buffer + await client.user?.setAvatar(buffer); + + // Example: Respond with success message + const embed = new EmbedBuilder() + .setTitle('Bot Avatar Updated') + .setDescription('Bot avatar updated successfully!') + .setColor('#00ff00') // You can customize the color + .setAuthor({ name: int.user.username, iconURL: int.user.displayAvatarURL() }) + .setFooter({ text: 'Update Avatar Command', iconURL: client.user?.displayAvatarURL() }); + + // Reply with the success message and the image embed + await int.editReply({ embeds: [embed] }); + + // Extra logging: Print the bot's current avatar URL after the update + console.log("Bot's current avatar URL:", client.user?.displayAvatarURL()); + } catch (error) { + // Cast error to Error type + const errorObject = error as Error; + + // Example: Respond with error message + console.error('Failed to update avatar:', errorObject); + + const errorEmbed = new EmbedBuilder() + .setTitle('Error Updating Avatar') + .setDescription(`Failed to update bot avatar: ${errorObject.message}`) + .setColor('#ff0000') // You can customize the color + .setAuthor({ name: int.user.username, iconURL: int.user.displayAvatarURL() }) + .setFooter({ text: 'Update Avatar Command', iconURL: client.user?.displayAvatarURL() }); + + // Reply with the error message + await int.editReply({ embeds: [errorEmbed] }); + } + } else { + // Handle other subcommands or the default behavior here + } + }); diff --git a/src/commands/Devs/botinfo.ts b/src/commands/Devs/botinfo.ts index e33f6f3..0a7e373 100644 --- a/src/commands/Devs/botinfo.ts +++ b/src/commands/Devs/botinfo.ts @@ -1,3 +1,4 @@ +/* eslint-disable indent */ import { CommandInteraction, EmbedBuilder } from "discord.js"; import os from "os"; import { client } from "../../providers/client"; diff --git a/src/commands/Devs/userinfo.ts b/src/commands/Devs/userinfo.ts index d2fc024..83463ec 100644 --- a/src/commands/Devs/userinfo.ts +++ b/src/commands/Devs/userinfo.ts @@ -1,3 +1,4 @@ +/* eslint-disable indent */ import { db } from "../../database/database"; import { Command } from "../../structures/Command"; diff --git a/src/commands/Devs/ws.ts b/src/commands/Devs/ws.ts new file mode 100644 index 0000000..7242edb --- /dev/null +++ b/src/commands/Devs/ws.ts @@ -0,0 +1,45 @@ +/* eslint-disable quotes */ +/* eslint-disable indent */ +import { CommandInteraction, EmbedBuilder, UserResolvable } from "discord.js"; +import { db } from "../../database/database"; +import { getWorkerStats } from "../../database/workerstats"; +import { resolveUserId } from "../../utils/id"; +import { Command } from "../../structures/Command"; +import { permissions } from "../../providers/permissions"; + +export const command = new Command( + "ws", + "View worker statistics." + +) + .addPermission(permissions.admin) + .addUserOption((option) => + option + .setName("user") + .setDescription("The user to view statistics for.") + .setRequired(false) + ) + .setExecutor(async (int: CommandInteraction) => { + const targetUser = int.options.getUser("user", false); + + let userId: string; + if (targetUser) { + userId = resolveUserId(targetUser); + } else { + userId = int.user.id; + } + + const workerStats = await getWorkerStats(userId); + + const embed = new EmbedBuilder() + .setTitle(`${targetUser ? targetUser.tag : int.user.tag}'s Worker Statistics`) + .addFields([ + { name: "Orders Brewed", value: workerStats.ordersBrewed.toString(), inline: true }, + { name: "Orders Delivered", value: workerStats.ordersDelivered.toString(), inline: true }, + { name: "Last Used", value: workerStats.lastUsed.toLocaleString(), inline: true }, + { name: "Last Command", value: workerStats.lastCommand || "None", inline: true }, + ]) + .toJSON(); + + await int.reply({ embeds: [embed] }); + }); \ No newline at end of file diff --git a/src/commands/orders/feedback.ts b/src/commands/orders/feedback.ts index 37e551b..57fae50 100644 --- a/src/commands/orders/feedback.ts +++ b/src/commands/orders/feedback.ts @@ -27,7 +27,7 @@ export const command = new Command("feedback", "Give feedback on your last order new EmbedBuilder() .setTitle(format(tcfe.title, lastOrder.id)) .setDescription(feedback) - .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), + .setFooter({ text: format(tcfe.footer, int.user.username), iconURL: int.user.displayAvatarURL() }), ], }); await db.orders.update({ diff --git a/src/commands/orders/order.ts b/src/commands/orders/order.ts index 4699a7d..2554e56 100644 --- a/src/commands/orders/order.ts +++ b/src/commands/orders/order.ts @@ -15,15 +15,6 @@ export const command = new Command("order", "Orders a drink.") return; } - // Check the number of existing orders - const orderCount = await db.cafeOrders.count(); - const maxOrderLimit = 25; - - if (orderCount >= maxOrderLimit) { - await int.reply(`The maximum order limit of ${maxOrderLimit} has been reached. Try again later.`); - return; - } - const drink = int.options.getString("drink", true); // Check the length of the drink description @@ -54,7 +45,7 @@ export const command = new Command("order", "Orders a drink.") details: drink, duty: mainRoles.duty.toString(), id: order.id, - tag: int.user.tag, + tag: int.user.username, }) ); }); diff --git a/src/commands/orders/worker/brew.ts b/src/commands/orders/worker/brew.ts index cf32560..04ff878 100644 --- a/src/commands/orders/worker/brew.ts +++ b/src/commands/orders/worker/brew.ts @@ -1,3 +1,5 @@ +/* eslint-disable indent */ +/* eslint-disable quotes */ import { OrderStatus } from "@prisma/client"; import { db } from "../../../database/database"; import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder } from "../../../database/orders"; @@ -9,77 +11,230 @@ import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; import { randRange } from "../../../utils/utils"; - -import type { CommandInteraction } from "discord.js"; +import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; +import { upsertWorkerStats, handleBrew, handleDeliver } from "../../../database/workerstats"; // Import the workerstats functions export const command = new Command( - "brew", - "Brews your claimed order." + "brew", + "Brews your claimed order." ) - .addSubCommand((subcommand) => - subcommand - .setName("attach") - .setDescription("Attach an image to your order.") - .addAttachmentOption((option) => - option - .setName("attachment") - .setDescription("The image to attach to the order.") - .setRequired(true) - ) - ) - .addSubCommand((subcommand) => - subcommand - .setName("url") - .setDescription("Attach an image to your order by URL.") - .addStringOption((option) => - option - .setName("url") - .setDescription("The URL of the image to attach to the order.") - .setRequired(true) - ) - ) - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - const order = await getClaimedOrder(int.user); - if (!order) { - await int.reply({ content: text.common.noClaimedOrder }); - return; - } - const subcommand = int.options.getSubcommand(true); - let imageUrl: string | undefined; - if (subcommand === "attach") { - const attachment = int.options.get("attachment", true)?.attachment; - if (!attachment) { - await int.reply({ content: "Attachment is missing or not valid." }); - return; - } - imageUrl = attachment.url; - } else if (subcommand === "url") { - const url = int.options.getString("url", true); - imageUrl = url; - } - const time = randRange(...constants.brewTimeRangeMs); - await db.orders.update({ - where: { - id: order.id, - }, - data: { - status: OrderStatus.Brewing, - image: imageUrl ?? "default.png", - timeout: new Date(Date.now() + time), - }, - }); - await upsertWorkerInfo(int.user); - await db.workerInfo.update({ - where: { - id: int.user.id, - }, - data: { - preparations: { increment: 1 }, - }, - }); - await int.reply({ - content: text.commands.brew.success, - files: imageUrl ? [{ attachment: imageUrl }] : undefined, - }); - }); + .addSubCommand((subcommand) => + subcommand + .setName("attach") + .setDescription("Attach an image to your order.") + .addAttachmentOption((option) => + option + .setName("attachment") + .setDescription("The image to attach to the order.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("url") + .setDescription("Attach an image to your order by URL.") + .addStringOption((option) => + option + .setName("url") + .setDescription("The URL of the image to attach to the order.") + .setRequired(true) + ) + ) + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + const order = await getClaimedOrder(int.user); + if (!order) { + await int.reply({ content: "You don't have a claimed order." }); + return; + } + + // Set last command to "brew" when brewing + await upsertWorkerStats(int.user, { lastCommand: "brew" }); + + const subcommand = int.options.getSubcommand(true); + let imageUrl: string | undefined; + + if (subcommand === "attach") { + const attachment = int.options.get("attachment", true)?.attachment; + if (!attachment) { + await int.reply({ content: "Attachment is missing or not valid." }); + return; + } + imageUrl = attachment.url; + + // Create an embed with the image preview + const imagePreviewEmbed = new EmbedBuilder() + .setTitle("Image Preview") + .setImage(imageUrl) // Set the image URL as the preview + .toJSON(); + + const confirmationDescription = `Order Details: ${order.details}`; + + const confirmSelectMenu = new StringSelectMenuBuilder() + .setCustomId("confirm_brew") + .setPlaceholder("Select an option") + .addOptions([ + { + label: "Yes", + description: "Proceed with brewing the order", + value: "yes", + }, + { + label: "No", + description: "Cancel the brewing process", + value: "no", + }, + ]) + .toJSON(); + + const confirmActionRow = { + type: ComponentType.ActionRow, + components: [confirmSelectMenu], + }; + + await int.reply({ + content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, + embeds: [imagePreviewEmbed], // Include the image preview in the message + components: [confirmActionRow], + ephemeral: true, + }); + + const confirmFilter = (i) => i.customId === "confirm_brew" && i.user.id === int.user.id; + const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); + + confirmCollector.on("collect", async (confirmInteraction) => { + if (confirmInteraction.isStringSelectMenu()) { + const selectedValue = confirmInteraction.values[0]; + if (selectedValue === "yes") { + await confirmInteraction.update({ + content: "You chose to proceed with brewing the order.", + components: [], + }); + + const time = randRange(...constants.brewTimeRangeMs); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Brewing, + image: imageUrl ?? "default.png", + timeout: new Date(Date.now() + time), + }, + }); + + // Update worker stats when brewing an order + await handleBrew(int.user); + await upsertWorkerInfo(int.user); + + await int.followUp({ + content: "Brewing process started.", + files: imageUrl ? [{ attachment: imageUrl }] : undefined, + }); + } else if (selectedValue === "no") { + await confirmInteraction.update({ + content: "You chose to cancel the brewing process.", + components: [], + }); + } + } + }); + + confirmCollector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't make a selection in time."); + } + }); + + } else if (subcommand === "url") { + const url = int.options.getString("url", true); + imageUrl = url; + + // Create an embed with the image preview + const imagePreviewEmbed = new EmbedBuilder() + .setTitle("Image Preview") + .setImage(imageUrl) // Set the image URL as the preview + .toJSON(); + + const confirmationDescription = `Order Details: ${order.details}`; + + const confirmSelectMenu = new StringSelectMenuBuilder() + .setCustomId("confirm_brew_url") + .setPlaceholder("Select an option") + .addOptions([ + { + label: "Yes", + description: "Proceed with brewing the order", + value: "yes", + }, + { + label: "No", + description: "Cancel the brewing process", + value: "no", + }, + ]) + .toJSON(); + + const confirmActionRow = { + type: ComponentType.ActionRow, + components: [confirmSelectMenu], + }; + + await int.reply({ + content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, + embeds: [imagePreviewEmbed], // Include the image preview in the message + components: [confirmActionRow], + ephemeral: true, + }); + + const confirmFilter = (i) => i.customId === "confirm_brew_url" && i.user.id === int.user.id; + const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); + + confirmCollector.on("collect", async (confirmInteraction) => { + if (confirmInteraction.isStringSelectMenu()) { + const selectedValue = confirmInteraction.values[0]; + if (selectedValue === "yes") { + await confirmInteraction.update({ + content: "You chose to proceed with brewing the order.", + components: [], + }); + + const time = randRange(...constants.brewTimeRangeMs); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Brewing, + image: imageUrl ?? "default.png", + timeout: new Date(Date.now() + time), + }, + }); + + // Update worker stats when brewing an order + await handleBrew(int.user); + await upsertWorkerStats(int.user, { ordersBrewed: 1 }); // Increment the ordersBrewed count + await upsertWorkerInfo(int.user); + + await int.followUp({ + content: "Brewing process started.", + files: imageUrl ? [{ attachment: imageUrl }] : undefined, + }); + } else if (selectedValue === "no") { + await confirmInteraction.update({ + content: "You chose to cancel the brewing process.", + components: [], + }); + } + } + }); + + confirmCollector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't make a selection in time."); + } + }); + } + }); + +// ... (existing code) diff --git a/src/commands/orders/worker/claim.ts b/src/commands/orders/worker/claim.ts index fcc9c07..27a8320 100644 --- a/src/commands/orders/worker/claim.ts +++ b/src/commands/orders/worker/claim.ts @@ -1,29 +1,32 @@ /* eslint-disable indent */ -import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; //DON'T CHANGE THE IMPORTS! import { Command } from "../../../structures/Command"; import { permissions } from "../../../providers/permissions"; -import { OrderStatus, getClaimedOrder, } from "../../../database/orders"; +import { OrderStatus, getClaimedOrder } from "../../../database/orders"; import { db } from "../../../database/database"; import { text } from "../../../providers/config"; import { client } from "../../../providers/client"; +import { CommandInteraction, StringSelectMenuBuilder, ComponentType, EmbedBuilder } from "discord.js"; + +const claimedOrderLocks = new Map(); +const claimedOrders = new Set(); export const command = new Command("claim", "Claims an order.") .addPermission(permissions.employee) .setExecutor(async (int: CommandInteraction) => { if (await getClaimedOrder(int.user)) { - await int.reply({ content: text.commands.claim.existing, ephemeral: false }); + await int.reply({ content: text.commands.claim.existing, ephemeral: true }); return; } const orders = await db.orders.findMany({ where: { - status: OrderStatus.Unprepared + status: OrderStatus.Unprepared, }, select: { id: true, user: true, - details: true // Include the 'details' property - } + details: true, + }, }); if (orders.length === 0) { @@ -32,16 +35,17 @@ export const command = new Command("claim", "Claims an order.") } const options = orders.map(order => { - const details = order.details.length > 50 ? order.details.substring(0, 47) + "..." : order.details; - const user = order.user.length > 50 ? order.user.substring(0, 47) + "..." : order.user; + const details = order.details.length > 50 ? `${order.details.substring(0, 47)}...` : order.details; + const user = order.user.length > 50 ? `${order.user.substring(0, 47)}...` : order.user; return { label: order.id, description: `Details: ${details}\nUser: ${user}`, value: order.id, - details: order.details + details: order.details, }; }); + const selectMenu = new StringSelectMenuBuilder() .setCustomId("claim_order") .setPlaceholder("Select an order to claim") @@ -49,21 +53,25 @@ export const command = new Command("claim", "Claims an order.") const actionRow = { type: ComponentType.ActionRow, - components: [selectMenu] + components: [selectMenu], }; const embed = new EmbedBuilder() .setDescription("Please select an order to claim.") .setColor("#00FF00"); - await int.reply({ - embeds: [embed], - components: [actionRow], - ephemeral: true - }); + try { + await int.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true, + }); + } catch (error) { + // If an error occurs (e.g., InteractionAlreadyReplied), handle it here + console.error("Error replying to interaction:", error); + } }); -// Interaction Create Event (for handling select menu interaction) client.on("interactionCreate", async (interaction) => { if (!interaction.isStringSelectMenu()) return; @@ -71,35 +79,57 @@ client.on("interactionCreate", async (interaction) => { if (componentId === "claim_order") { const orderId = interaction.values[0]; + if (claimedOrders.has(orderId)) { + await interaction.reply({ content: "This order has already been claimed.", ephemeral: true }); + return; + } + + if (claimedOrderLocks.has(orderId) && claimedOrderLocks.get(orderId)) { + await interaction.reply({ content: "Another user is currently claiming this order. Please try again later.", ephemeral: true }); + return; + } + + claimedOrderLocks.set(orderId, true); + const order = await db.orders.findUnique({ where: { - id: orderId + id: orderId, }, select: { id: true, user: true, - details: true - } + details: true, + }, }); if (!order) { + claimedOrderLocks.delete(orderId); await interaction.reply({ content: "Invalid order selected.", ephemeral: true }); return; } if (order.user === interaction.user.id && !permissions.developer.hasPermission(interaction.user)) { + claimedOrderLocks.delete(orderId); await interaction.reply({ content: text.common.interactOwn, ephemeral: true }); return; } await db.orders.update({ where: { id: orderId }, - data: { claimer: interaction.user.id, status: OrderStatus.Preparing } + data: { claimer: interaction.user.id, status: OrderStatus.Preparing }, }); - await interaction.reply({ - content: `${text.commands.claim.success.replace("{id}", order.id)}`, - ephemeral: false - }); + claimedOrders.add(orderId); + claimedOrderLocks.delete(orderId); + + try { + await interaction.reply({ + content: `${text.commands.claim.success.replace("{id}", order.id)}`, + ephemeral: false, + }); + } catch (error) { + // If an error occurs (e.g., InteractionAlreadyReplied), handle it here + console.error("Error replying to interaction:", error); + } } -}); \ No newline at end of file +}); diff --git a/src/commands/orders/worker/claimed.ts b/src/commands/orders/worker/claimed.ts index 950878d..454519d 100644 --- a/src/commands/orders/worker/claimed.ts +++ b/src/commands/orders/worker/claimed.ts @@ -16,4 +16,4 @@ export const command = new Command("claimed", "Checks your claimed order.") await int.reply({ embeds: [embed] }); - }); \ No newline at end of file + }); \ No newline at end of file diff --git a/src/commands/orders/worker/delete.ts b/src/commands/orders/worker/delete.ts index 2b96f1b..08f3465 100644 --- a/src/commands/orders/worker/delete.ts +++ b/src/commands/orders/worker/delete.ts @@ -46,3 +46,4 @@ export const command = new Command("delete", "Deletes an order.") await int.reply(text.commands.delete.successNoDm); } }); + \ No newline at end of file diff --git a/src/commands/orders/worker/deliver.ts b/src/commands/orders/worker/deliver.ts index d60e0be..1b79add 100644 --- a/src/commands/orders/worker/deliver.ts +++ b/src/commands/orders/worker/deliver.ts @@ -11,6 +11,7 @@ import { text } from "../../../providers/config"; import { permissions } from "../../../providers/permissions"; import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; +import { upsertWorkerStats } from "../../../database/workerstats"; export const command = new Command( "deliver", @@ -58,6 +59,9 @@ export const command = new Command( .setDescription("Please select an order to deliver.") .setColor("#00FF00"); + // Set last command to "deliver" when preparing to deliver + await upsertWorkerStats(int.user, { lastCommand: "deliver" }); + await int.reply({ embeds: [embed], components: [actionRow], @@ -98,6 +102,9 @@ client.on("interactionCreate", async (interaction) => { deliveries: { increment: 1 }, }, }); + // Update worker stats for delivered orders + await upsertWorkerStats(interaction.user, { ordersDelivered: 1, lastCommand: "deliver" }); + await db.orders.update({ where: { id: orderId, diff --git a/src/commands/orders/worker/ebrew.ts b/src/commands/orders/worker/ebrew.ts new file mode 100644 index 0000000..36f07c8 --- /dev/null +++ b/src/commands/orders/worker/ebrew.ts @@ -0,0 +1,261 @@ +/* eslint-disable indent */ +/* eslint-disable quotes */ +import { OrderStatus } from "@prisma/client"; +import { db } from "../../../database/database"; +import { upsertWorkerInfo } from "../../../database/workerInfo"; +import { client } from "../../../providers/client"; +import { config, constants, text } from "../../../providers/config"; +import { permissions } from "../../../providers/permissions"; +import { Command } from "../../../structures/Command"; +import { format } from "../../../utils/string"; +import { randRange } from "../../../utils/utils"; +import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; + +// Define the getClaimedOrders function without specifying OrderStatus +async function getClaimedOrders(userId: string) { + return await db.orders.findMany({ + where: { + claimer: userId, + status: OrderStatus.Preparing, + }, + }); +} + +export const command = new Command( + "ebrew", + "Brews your claimed order." +) + .addSubCommand((subcommand) => + subcommand + .setName("attach") + .setDescription("Attach an image to your order.") + .addAttachmentOption((option) => + option + .setName("attachment") + .setDescription("The image to attach to the order.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("url") + .setDescription("Attach an image to your order by URL.") + .addStringOption((option) => + option + .setName("url") + .setDescription("The URL of the image to attach to the order.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("claim") + .setDescription("Claim an order.") + ) + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Check the subcommand + const subcommand = int.options.getSubcommand(true); + + if (subcommand === "claim") { + // Get a list of claimed orders for the user using getClaimedOrders + const claimedOrders = await getClaimedOrders(int.user.id); + + // Check if the user has claimed orders + if (claimedOrders.length === 0) { + await int.reply({ content: "You don't have any claimed orders to brew." }); + return; + } + + // Build a select menu with claimed order options + const orderOptions = claimedOrders.map(order => ({ + label: `Order ${order.id}`, + value: order.id.toString(), + description: `User: ${order.user.substring(0, 15)}...\nDetails: ${order.details.substring(0, 50)}...`, + // Include user and details in the description, limiting the length + })); + + const orderSelectMenu = new StringSelectMenuBuilder() + .setCustomId("select_order_to_claim") + .setPlaceholder("Select an order to brew") + .addOptions(orderOptions) + .toJSON(); + + const actionRow = { + type: ComponentType.ActionRow, + components: [orderSelectMenu], + }; + + await int.reply({ + content: "Please select an order to brew:", + components: [actionRow], + ephemeral: true, + }); + + // Create a collector to listen for the user's selection + const filter = (i) => i.customId === "select_order_to_claim" && i.user.id === int.user.id; + const collector = int.channel.createMessageComponentCollector({ filter, time: 15000 }); + + collector.on("collect", async (interaction) => { + const selectedOrderId = interaction.values[0]; + + // Fetch the order details using the order ID + const selectedOrder = await db.orders.findUnique({ + where: { + id: selectedOrderId, + }, + }); + + if (!selectedOrder) { + await interaction.update({ content: "Invalid order selected.", components: [] }); + return; + } + + // Check if the order status is not OrderStatus.Preparing + if (selectedOrder.status !== OrderStatus.Preparing) { + await interaction.update({ + content: `You cannot claim an order with status ${selectedOrder.status}.`, + components: [], + }); + return; + } + + // Store the selected order ID in a context variable for future use + int.client.ordersInProcess = { + [int.user.id]: { + orderId: selectedOrderId, + }, + }; + + await interaction.update({ + content: `You selected Order ${selectedOrderId} to brew. Now, you can proceed to attach an image or provide a URL.`, + components: [], + }); + }); + + collector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't select an order in time."); + } + }); + + } else if ((subcommand === "attach" || subcommand === "url") && int.client.ordersInProcess?.[int.user.id]?.orderId) { + // Fetch the order ID from the context variable + const selectedOrderId = int.client.ordersInProcess[int.user.id].orderId; + + // Fetch the order details using the order ID + const order = await db.orders.findUnique({ + where: { + id: selectedOrderId, + }, + }); + + if (!order) { + await int.reply({ content: "Invalid order selected." }); + return; + } + + // Check if the order status is OrderStatus.PendingDelivery or OrderStatus.Brewing + if (order.status === OrderStatus.PendingDelivery || order.status === OrderStatus.Brewing) { + await int.reply({ content: "You have Already Brewed this order. select an new one!" }); + return; + } + + let imageUrl: string | undefined; + + if (subcommand === "attach") { + const attachment = int.options.get("attachment", true)?.attachment; + if (!attachment) { + await int.reply({ content: "Attachment is missing or not valid." }); + return; + } + imageUrl = attachment.url; + } else if (subcommand === "url") { + const url = int.options.getString("url", true); + imageUrl = url; + } + + // Include order description in the confirmation message + const confirmationDescription = `Order Details: ${order.details}`; + + const imagePreviewEmbed = new EmbedBuilder() + .setTitle("Image Preview") + .setImage(imageUrl) // Set the image URL as the preview + .toJSON(); + + const confirmSelectMenu = new StringSelectMenuBuilder() + .setCustomId("confirm_brew") + .setPlaceholder("Select an option") + .addOptions([ + { + label: "Yes", + description: "Proceed with brewing the order", + value: "yes", + }, + { + label: "No", + description: "Cancel the brewing process", + value: "no", + }, + ]) + .toJSON(); + + const confirmActionRow = { + type: ComponentType.ActionRow, + components: [confirmSelectMenu], + }; + + await int.reply({ + content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, + embeds: [imagePreviewEmbed], // Include the image preview in the message + components: [confirmActionRow], + ephemeral: true, + }); + + const confirmFilter = (i) => i.customId === "confirm_brew" && i.user.id === int.user.id; + const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); + + confirmCollector.on("collect", async (confirmInteraction) => { + if (confirmInteraction.isStringSelectMenu()) { + const selectedValue = confirmInteraction.values[0]; + if (selectedValue === "yes") { + await confirmInteraction.update({ + content: "You chose to proceed with brewing the order.", + components: [], + }); + + const time = randRange(...constants.brewTimeRangeMs); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Brewing, + image: imageUrl ?? "default.png", + timeout: new Date(Date.now() + time), + }, + }); + await upsertWorkerInfo(int.user); + + await int.followUp({ + content: "Brewing process started.", + files: imageUrl ? [{ attachment: imageUrl }] : undefined, + }); + } else if (selectedValue === "no") { + await confirmInteraction.update({ + content: "You chose to cancel the brewing process.", + components: [], + }); + } + } + }); + + confirmCollector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't make a selection in time."); + } + }); + } else { + await int.reply({ content: "You need to claim an order first before attaching an image or providing a URL." }); + } + }); diff --git a/src/commands/orders/worker/eclaim.ts b/src/commands/orders/worker/eclaim.ts new file mode 100644 index 0000000..aa70a29 --- /dev/null +++ b/src/commands/orders/worker/eclaim.ts @@ -0,0 +1,163 @@ +/* eslint-disable quotes */ +/* eslint-disable indent */ +import { upsertWorkerInfo } from "../../../database/workerInfo"; +import { Command } from "../../../structures/Command"; +import { permissions } from "../../../providers/permissions"; +import { OrderStatus, getClaimedOrder } from "../../../database/orders"; +import { db } from "../../../database/database"; +import { text } from "../../../providers/config"; +import { client } from "../../../providers/client"; +import { CommandInteraction, StringSelectMenuBuilder, ComponentType, EmbedBuilder } from "discord.js"; + +const claimedOrderLocks = new Map(); // Map to store claim locks for each order ID +const claimedOrders = new Set(); // Set to store claimed order IDs + +export const command = new Command("eclaim", "Claims an order.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + const existingClaim = await getClaimedOrder(int.user); + if (existingClaim) { + console.log(`Existing claim found for ${int.user.id} on order ${existingClaim.id}`); + await int.reply({ content: text.commands.claim.existing, ephemeral: true }); + return; + } + + // Retrieve the selected values from interaction + const orderIds = int.customId === "claim_order" + ? int.values + : int.message?.components + .find((row) => row.components.some((component) => component.customId === "claim_order")) + .components.find((component) => component.customId === "claim_order").value.split(","); + + const orders = await db.orders.findMany({ + where: { + id: { in: orderIds }, + status: OrderStatus.Unprepared, + claimer: null, // Check if the order is not already claimed + }, + select: { + id: true, + user: true, + details: true, + status: true, + }, + }); + + if (orders.length === 0) { + await int.reply({ content: "There are no available orders to claim.", ephemeral: true }); + return; + } + + const options = orders.map(order => { + const details = order.details.length > 50 ? `${order.details.substring(0, 47)}...` : order.details; + const user = order.user.length > 50 ? `${order.user.substring(0, 47)}...` : order.user; + + return { + label: order.id, + description: `Details: ${details}\nUser: ${user}\nStatus: ${order.status}`, + value: order.id, + details: order.details, + }; + }); + const minValues = Math.min(1, orders.length); + const maxValues = Math.min(3, orders.length); + + const selectMenu = new StringSelectMenuBuilder() + .setCustomId("claim_order") + .setPlaceholder("Select orders to claim") + .addOptions(options) + .setMinValues(minValues) // Set minimum selected values + .setMaxValues(maxValues); // Set maximum selected values + + const actionRow = { + type: ComponentType.ActionRow, + components: [selectMenu], + }; + + const embed = new EmbedBuilder() + .setDescription("Please select orders to claim.") + .setColor("#00FF00"); + + try { + const reply = await int.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true, + }); + + // Schedule a deletion of the reply after a certain time (e.g., 10 seconds) + setTimeout(() => { + reply.delete(); + }, 10000); + } catch (error) { + console.error("Error replying to interaction:", error); + } + }); + +client.on("interactionCreate", async (interaction) => { + if (!interaction.isStringSelectMenu()) return; + + const componentId = interaction.customId; + if (componentId === "claim_order") { + // Retrieve the selected values from interaction + const orderIds = interaction.values || []; + const claimedOrderMessages = []; + + for (let i = 0; i < orderIds.length; i++) { + const orderId = orderIds[i]; + try { + // Check if a claim lock exists for this order + if (claimedOrderLocks.has(orderId) && claimedOrderLocks.get(orderId)) { + claimedOrderMessages.push(`Another user is currently claiming Order ${orderId}. Please try again later.`); + continue; + } + + // Set a claim lock for this order + claimedOrderLocks.set(orderId, true); + + // Check if the order is still unclaimed in the database + const unclaimedOrder = await db.orders.findFirst({ + where: { id: orderId, status: OrderStatus.Unprepared, claimer: null }, + }); + + if (!unclaimedOrder) { + console.log(`Order ${orderId} is already claimed.`); + claimedOrderMessages.push(`Order ${orderId} has already been claimed.`); + claimedOrderLocks.delete(orderId); // Release the claim lock for this order + continue; + } + + // Update the claimed order and release the claim lock + await db.orders.update({ + where: { id: orderId }, + data: { claimer: interaction.user.id, status: OrderStatus.Preparing }, + }); + + claimedOrders.add(orderId); // Store claimed order ID in the Set + claimedOrderLocks.delete(orderId); + + claimedOrderMessages.push(`Order ${orderId} claimed successfully.`); + } catch (error) { + console.error(`Error processing Order ${orderId}:`, error); + claimedOrderMessages.push(`Error processing Order ${orderId}`); + } finally { + claimedOrderLocks.delete(orderId); + } + } + + // Send a single reply summarizing the claimed orders + try { + const reply = await interaction.reply({ + content: `Claiming results:\n${claimedOrderMessages.join('\n')}`, + ephemeral: false, + }); + + // Remove the first reply after a certain time (e.g., 5 seconds) + setTimeout(() => { + reply.delete(); + }, 5000); + } catch (error) { + console.error("Error replying to interaction:", error); + } + } +}); diff --git a/src/commands/orders/worker/editstatus.ts b/src/commands/orders/worker/editstatus.ts new file mode 100644 index 0000000..5b3715e --- /dev/null +++ b/src/commands/orders/worker/editstatus.ts @@ -0,0 +1,58 @@ +/* eslint-disable indent */ +import { OrderStatus, matchActiveOrder } from "../../../database/orders"; +import { text } from "../../../providers/config"; +import { permissions } from "../../../providers/permissions"; +import { Command } from "../../../structures/Command"; +import { CommandInteraction } from "discord.js"; +import { db } from "../../../database/database"; + +export const command = new Command( + "editstatus", + "Edit the status of an order." +) + .addPermission(permissions.admin) + .addOption("string", (option) => + option + .setName("order_id") + .setDescription("The ID of the order to edit.") + .setRequired(true) + ) + .addOption("string", (option) => + option + .setName("status") + .setDescription("The status to set.") + .setRequired(true) + .addChoices( + { name: "Preparing", value: OrderStatus.Preparing }, + { name: "Unprepared", value: OrderStatus.Unprepared }, + { name: "PendingDelivery", value: OrderStatus.PendingDelivery }, + { name: "Cancelled", value: OrderStatus.Cancelled }, + { name: "Deleted", value: OrderStatus.Deleted }, + // Add other choices here if needed + ) + ) + .setExecutor(async (int: CommandInteraction) => { + const orderId = int.options.getString("order_id", true); + const newStatus = int.options.getString("status", true); + + const order = await matchActiveOrder(orderId); + if (!order) { + await int.reply({ content: "Order not found for the specified ID." }); + return; + } + + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: newStatus, + }, + }); + + await int.reply({ + content: `Order status for order (${orderId}) has been updated to ${newStatus}.`, + }); + }); + +module.exports = { command }; diff --git a/src/commands/orders/worker/list.ts b/src/commands/orders/worker/list.ts index 5965f24..626af1f 100644 --- a/src/commands/orders/worker/list.ts +++ b/src/commands/orders/worker/list.ts @@ -7,8 +7,17 @@ import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; import pms from "pretty-ms"; import { CafeStatus, OrderStatus } from "@prisma/client"; +import { ExtendedCommand } from "../../../structures/extendedCommand"; -export const command = new Command("list", "Lists active orders.") +// Define the command options +interface CommandOptions { + name: string; // Ensure that 'name' is explicitly defined as a string + description?: string; + // Other properties as needed +} + +// Create the command using ExtendedCommand class +export const command = new ExtendedCommand({ name: "list", description: "Lists active orders.", local: true }) .addPermission(permissions.employee) .setExecutor(async int => { const orders = await getAllActiveOrders(); @@ -24,4 +33,4 @@ ${format(txt.parts.status, text.statuses[x.status] ?? x.status)}\ `) .join("\n") || `${txt.empty}`}` ); - }); + }); \ No newline at end of file diff --git a/src/commands/orders/worker/nothing b/src/commands/orders/worker/nothing new file mode 100644 index 0000000..79bd280 --- /dev/null +++ b/src/commands/orders/worker/nothing @@ -0,0 +1,49 @@ +import { permissions } from "../../../providers/permissions"; +import { Command } from "../../../structures/Command"; +import { client } from "../../../providers/client"; +import { EmbedBuilder } from "discord.js"; + +export const command = new Command("name", + "Someinfo.") + .addPermission(permissions.employee) //AnyRank + .setExecutor(async (int: CommandInteraction) => { + const commandName = 'name'; + } + // + Backup + + // + + /* eslint-disable quotes */ +/* eslint-disable indent */ +import { EmbedBuilder, SlashCommandBuilder } from "discord.js"; + +module.exports = { + owner: true, + data: new SlashCommandBuilder() + .setName('Animated-avatar') + .setDescription('Animate an avatar for your bot') + .addAttachmentOption(option => option.setName('avatar').setDescription('The avatar to animate').setRequired(true)), + async execute(interaction, client) { + const { options } = interaction; + const avatar = options.getAttachment('avatar'); + + async function sendMessage(message) { + const embed = new EmbedBuilder() + .setColor("Blurple") + .setDescription(message); + await interaction.reply({ embeds: [embed], ephemeral: true }) + } + + if (avatar.contentType !== "image/gif") return await sendMessage(`Avatar`); + const error; + await client.user.setAvatar(avatar.url).catch(async err => { + error = true; + console.log(err); + return await sendMessage(`Error ; \`${err.toString()}\``); + }); + if (error) return; + await sendMessage(` Uploaded`); + + } +} \ No newline at end of file diff --git a/src/commands/orders/worker/unclaim.ts b/src/commands/orders/worker/unclaim.ts index 332c5c1..2630790 100644 --- a/src/commands/orders/worker/unclaim.ts +++ b/src/commands/orders/worker/unclaim.ts @@ -1,11 +1,16 @@ /* eslint-disable quotes */ -import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; +/* eslint-disable indent */ +import { upsertWorkerInfo } from "../../../database/workerInfo"; import { Command } from "../../../structures/Command"; import { permissions } from "../../../providers/permissions"; -import { OrderStatus, getClaimedOrder, } from "../../../database/orders"; +import { OrderStatus, getClaimedOrder } from "../../../database/orders"; import { db } from "../../../database/database"; import { text } from "../../../providers/config"; import { client } from "../../../providers/client"; +import { CommandInteraction, StringSelectMenuBuilder, ComponentType, EmbedBuilder } from "discord.js"; + +const claimedOrderLocks = new Map(); // Map to store claim locks for each order ID +const claimedOrders = new Set(); // Set to store claimed order IDs export const command = new Command("unclaim", "Allows you to unclaim an order.") .addPermission(permissions.employee) @@ -16,41 +21,52 @@ export const command = new Command("unclaim", "Allows you to unclaim an order.") return; } - const order = await db.orders.findUnique({ + const orders = await db.orders.findMany({ where: { - id: claimedOrder.id, + claimer: int.user.id, + status: OrderStatus.Preparing, }, select: { id: true, user: true, - details: true, // Include the 'details' property + details: true, }, }); - if (!order) { - await int.reply({ content: "Invalid order selected.", ephemeral: true }); + if (orders.length === 0) { + await int.reply({ content: "You don't have any orders to unclaim.", ephemeral: true }); return; } - const details = order.details.length > 50 ? order.details.substring(0, 47) + "..." : order.details; - const user = order.user.length > 50 ? order.user.substring(0, 47) + "..." : order.user; + + const options = orders.map(order => { + const details = order.details.length > 50 ? `${order.details.substring(0, 47)}...` : order.details; + const user = order.user.length > 50 ? `${order.user.substring(0, 47)}...` : order.user; + + return { + label: order.id, + description: `Details: ${details}\nUser: ${user}`, + value: order.id, + details: order.details, + }; + }); + + const minValues = Math.min(1, orders.length); + const maxValues = Math.min(3, orders.length); const selectMenu = new StringSelectMenuBuilder() .setCustomId("unclaim_order") - .setPlaceholder("Select the order to unclaim") - .addOptions([ - { - label: order.id, - description: `Details: ${details}\nUser: ${user}`, - value: order.id, - }, - ]); + .setPlaceholder("Select orders to unclaim") + .addOptions(options) + .setMinValues(minValues) // Set minimum selected values + .setMaxValues(maxValues); // Set maximum selected values + const actionRow = { type: ComponentType.ActionRow, components: [selectMenu], }; const embed = new EmbedBuilder() - .setDescription("Please select the order to unclaim.") + .setDescription("Please select orders to unclaim.") .setColor("#FF0000"); await int.reply({ @@ -60,42 +76,62 @@ export const command = new Command("unclaim", "Allows you to unclaim an order.") }); }); -// Interaction Create Event (for handling select menu interaction) client.on("interactionCreate", async (interaction) => { if (!interaction.isStringSelectMenu()) return; const componentId = interaction.customId; if (componentId === "unclaim_order") { - const orderId = interaction.values[0]; + const orderIds = interaction.values; + const unclaimedOrderMessages = []; - const order = await db.orders.findUnique({ - where: { - id: orderId, - }, - select: { - id: true, - user: true, - claimer: true, - }, - }); + for (const orderId of orderIds) { + try { + // Check if the order is claimed by the user + const order = await db.orders.findFirst({ + where: { + id: orderId, + claimer: interaction.user.id, + status: OrderStatus.Preparing, + }, + }); - if (!order) { - await interaction.reply({ content: "Invalid order selected.", ephemeral: true }); - return; - } + if (!order) { + unclaimedOrderMessages.push(`Order ${orderId} is not claimed by you.`); + continue; + } - if (order.claimer !== interaction.user.id) { - await interaction.reply({ content: text.commands.unclaim.notClaimed, ephemeral: true }); - return; - } + // Check if a claim lock exists for this order + if (claimedOrderLocks.has(orderId) && claimedOrderLocks.get(orderId)) { + unclaimedOrderMessages.push(`Another process is currently unclaiming Order ${orderId}. Please try again later.`); + continue; + } - await db.orders.update({ - where: { id: orderId }, - data: { claimer: null, status: OrderStatus.Unprepared }, - }); + // Set an unclaim lock for this order + claimedOrderLocks.set(orderId, true); + + // Update the claimed order and release the unclaim lock + await db.orders.update({ + where: { id: orderId }, + data: { claimer: null, status: OrderStatus.Unprepared }, + }); + + claimedOrders.delete(orderId); + + // Release the unclaim lock for this order + claimedOrderLocks.delete(orderId); + + unclaimedOrderMessages.push(`Order ${orderId} unclaimed successfully.`); + } catch (error) { + console.error(`Error processing Order ${orderId}:`, error); + unclaimedOrderMessages.push(`Error processing Order ${orderId}`); + } finally { + claimedOrderLocks.delete(orderId); + } + } + // Send a single reply summarizing the unclaimed orders await interaction.reply({ - content: text.commands.unclaim.success.replace('{id}', order.id), + content: `Unclaiming results:\n${unclaimedOrderMessages.join('\n')}`, ephemeral: false, }); } diff --git a/src/commands/orders/worker/workerinfo.ts b/src/commands/orders/worker/workerinfo.ts index 0d912d5..96b85be 100644 --- a/src/commands/orders/worker/workerinfo.ts +++ b/src/commands/orders/worker/workerinfo.ts @@ -1,3 +1,4 @@ +/* eslint-disable quotes */ /* eslint-disable indent */ import { CommandInteraction, User } from "discord.js"; import { permissions } from "../../../providers/permissions"; @@ -7,7 +8,7 @@ import { PrismaClient, CafeStatus, OrderStatus } from "@prisma/client"; const prisma = new PrismaClient(); export const command = new Command("workerinfo", - "Tracks the number of orders an employee has delivered.") + "Tracks the number of orders an employee has prepared and delivered.") .addPermission(permissions.employee) .addOption("user", (o) => o.setName("employee") @@ -23,8 +24,18 @@ export const command = new Command("workerinfo", employeeId = employeeOption.id; } - // Get the number of orders the employee has delivered - const deliveredOrders = await prisma.orders.count({ + // Get the total number of orders the employee has prepared + const totalPreparations = await prisma.orders.count({ + where: { + claimer: employeeId, + status: { + not: OrderStatus.Unprepared + }, + }, + }); + + // Get the total number of orders the employee has delivered + const totalDeliveries = await prisma.orders.count({ where: { deliverer: employeeId, status: OrderStatus.Delivered, @@ -34,5 +45,5 @@ export const command = new Command("workerinfo", // Get the user's username for the reply const username = employeeOption ? employeeOption.username : int.user.username; - await int.reply(`${username} has delivered ${deliveredOrders} orders.`); - }); + await int.reply(`${username} has prepared ${totalPreparations} orders and delivered ${totalDeliveries} orders.`); + }); \ No newline at end of file diff --git a/src/database/order.ts b/src/database/order.ts index 52f8c64..5d61947 100644 --- a/src/database/order.ts +++ b/src/database/order.ts @@ -170,4 +170,4 @@ export const OrderFlags = { Rated: 0b100, }; -export { CafeStatus }; +export { CafeStatus }; \ No newline at end of file diff --git a/src/database/orders.ts b/src/database/orders.ts index 20bc00f..b17121b 100644 --- a/src/database/orders.ts +++ b/src/database/orders.ts @@ -15,6 +15,7 @@ export const activeOrderStatus = [ OrderStatus.Fermenting, OrderStatus.PendingDelivery, OrderStatus.Delivering, + OrderStatus.Claimed ]; export const hasActiveOrder = async (user: UserResolvable) => diff --git a/src/database/preloadimage.ts b/src/database/preloadimage.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/database/workerInfo.ts b/src/database/workerInfo.ts index fdb3ef1..facdcd9 100644 --- a/src/database/workerInfo.ts +++ b/src/database/workerInfo.ts @@ -9,7 +9,8 @@ export const upsertWorkerInfo = async (user: UserResolvable) => db.workerInfo.upsert({ where: { id: resolveUserId(user) }, create: { - id: resolveUserId(user) + id: resolveUserId(user), + commandUsageCount: 0, // Set a default value or adjust as needed }, update: {} }); diff --git a/src/database/workerstats.ts b/src/database/workerstats.ts new file mode 100644 index 0000000..b70836c --- /dev/null +++ b/src/database/workerstats.ts @@ -0,0 +1,61 @@ +/* eslint-disable quotes */ +/* eslint-disable indent */ +import { OrderStatus, WorkerStats } from "@prisma/client"; +import type { UserResolvable } from "discord.js"; +import { resolveUserId } from "../utils/id"; +import { db } from "./database"; +import { getClaimedOrder } from "./orders"; + +export const getWorkerStats = async (user: UserResolvable) => db.workerStats.findFirst({ where: { id: resolveUserId(user) } }); + +export const upsertWorkerStats = async (user: UserResolvable, stats: Partial) => { + const existingStats = await getWorkerStats(user); + + if (existingStats) { + // If the stats exist, update them + await db.workerStats.update({ + where: { id: resolveUserId(user) }, + data: { + ordersBrewed: (existingStats.ordersBrewed ?? 0) + (stats.ordersBrewed ?? 0), + ordersDelivered: (existingStats.ordersDelivered ?? 0) + (stats.ordersDelivered ?? 0), + lastUsed: new Date(), + lastCommand: stats.lastCommand ?? existingStats.lastCommand, // Update lastCommand + }, + }); + } else { + // If the stats don't exist, create them + await db.workerStats.create({ + data: { + id: resolveUserId(user), + ordersBrewed: stats.ordersBrewed ?? 0, + ordersDelivered: stats.ordersDelivered ?? 0, + lastUsed: new Date(), + lastCommand: stats.lastCommand ?? null, // Set lastCommand + }, + }); + } +}; + +export const handleBrew = async (user: UserResolvable) => { + const order = await getClaimedOrder(user); + + // Check if the user has a claimed order and if the order is in the correct status + if (order && order.status === OrderStatus.Brewing) { + await upsertWorkerStats(user, { + ordersBrewed: 1, + lastCommand: "brew", // Set lastCommand to "brew" when brewing + }); + } +}; + +export const handleDeliver = async (user: UserResolvable) => { + await upsertWorkerStats(user, { + ordersDelivered: 1, + lastCommand: "deliver", // Set lastCommand to "deliver" when delivering + }); +}; + +export async function getWorkerStatsList(): Promise { + const workerStatsList = await db.workerStats.findMany(); + return workerStatsList; +} diff --git a/src/events/CommandUsage.ts b/src/events/CommandUsage.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/events/ServerConfig.ts b/src/events/ServerConfig.ts new file mode 100644 index 0000000..22522d7 --- /dev/null +++ b/src/events/ServerConfig.ts @@ -0,0 +1,46 @@ +/* eslint-disable indent */ +import * as fs from "fs"; + +interface GuildConfig { + orderChannelId?: string; +} + +interface ServerConfig { + guilds: Record; +} + +export class ServerConfig { + private static readonly configFile = "config.json"; + private config: ServerConfig; + + constructor() { + this.config = this.loadConfig(); + } + + private loadConfig(): ServerConfig { + try { + const data = fs.readFileSync(ServerConfig.configFile, "utf-8"); + return JSON.parse(data); + } catch (error) { + console.error("Error loading config file:", error); + return { guilds: {} }; + } + } + + public getOrderChannel(guildId: string): string | undefined { + return this.config.guilds[guildId]?.orderChannelId; + } + + public setOrderChannel(guildId: string, channelId: string): void { + if (!this.config.guilds[guildId]) { + this.config.guilds[guildId] = {}; + } + this.config.guilds[guildId].orderChannelId = channelId; + this.saveConfig(); + } + + private saveConfig(): void { + const configString = JSON.stringify(this.config, null, 2); + fs.writeFileSync(ServerConfig.configFile, configString, "utf-8"); + } +} \ No newline at end of file diff --git a/src/providers/client.ts b/src/providers/client.ts index 95279aa..2852807 100644 --- a/src/providers/client.ts +++ b/src/providers/client.ts @@ -1,9 +1,10 @@ +// client.ts import { REST } from "@discordjs/rest"; -import { Client, Partials } from "discord.js"; +import { Client, GatewayIntentBits, Partials } from "discord.js"; import { config } from "./config"; import { join } from "path"; import { sync } from "fast-glob"; -import { GatewayIntentBits } from "discord.js"; +import fs from "fs/promises"; if (globalThis._$clientLoaded) throw new Error("The client was loaded twice. This should never happen."); globalThis._$clientLoaded = true; @@ -12,17 +13,33 @@ export const client = new Client({ intents: [ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, - //GatewayIntentBits.MessageContent, GatewayIntentBits.GuildMembers, ], - partials: [Partials.User, Partials.Channel, Partials.GuildMember, Partials.Message] + partials: [Partials.User, Partials.Channel, Partials.GuildMember, Partials.Message], }); -client.on("ready", () => { +client.on("ready", async () => { console.log(`Logged in as ${client.user?.tag}!`); + /* + // Set Avatar + const avatarPath = "C:/Somewhere/AnotherFolder/Test/DB/src/avatar"; + console.log("Checking contents of directory:", avatarPath); + + try { + const files = await fs.readdir(avatarPath); + console.log("Files in directory:", files); + + const avatarBuffer = await fs.readFile(join(avatarPath, "demon-slayer-running-zenitsu.gif")); + await client.user?.setAvatar(avatarBuffer); + console.log("Avatar set successfully!"); + } catch (error) { + console.error("Error setting avatar:", error); + + } + */ client.user?.setPresence({ activities: [{ name: "We are online! Use slash cmds to order /order & You get money through /work" }], - status: "online", // Online , idle , dnd (Do Not Disturb), invisible , offline + status: "online", }); }); diff --git a/src/providers/commandManager.ts b/src/providers/commandManager.ts index b1a7b35..d444c16 100644 --- a/src/providers/commandManager.ts +++ b/src/providers/commandManager.ts @@ -1,3 +1,4 @@ +/* eslint-disable quotes */ import { basename, join, posix, win32 } from "path"; import { sync } from "fast-glob"; import { Command } from "../structures/Command"; @@ -12,12 +13,15 @@ import type { GuildResolvable, } from "discord.js"; import { Collection } from "discord.js"; -import { mainGuild } from "./discord"; import { notInitialized } from "../utils/utils"; import "./permissions"; +import { ExtendedCommand } from "../structures/extendedCommand"; // Import the ExtendedCommand class +import { mainGuild } from "./discord"; const commandFolder = join(__dirname, "../commands/**/*.js").replaceAll(win32.sep, posix.sep); -export const commandRegistry = new Collection(); +const extendedCommandFolder = join(__dirname, "../extendedCommands/**/*.js").replaceAll(win32.sep, posix.sep); + +export const commandRegistry = new Collection(); export const applicationCommandRegistry = new Collection(); export let applicationCommandManager: | GuildApplicationCommandManager @@ -31,29 +35,59 @@ export let applicationCommandManager: null > = notInitialized("applicationCommandManager"); -const registerCommands = async (commands: Command[]) => { +// Modify the registerCommands function to handle both Command and ExtendedCommand +const registerCommands = async (commands: (Command | ExtendedCommand)[]) => { if (!client.isReady()) throw new Error("registerCommands called before client was ready."); applicationCommandManager = development ? mainGuild.commands : client.application!.commands; - const global = development ? [] : commands.filter(x => !x.local); - const local = development ? commands : commands.filter(x => x.local); - await rest.put(Routes.applicationCommands(client.application.id), { body: global.map(x => x.toJSON()) }); + + const globalCommands = commands.filter((x) => !(x instanceof ExtendedCommand && x.local)); + const localCommands = commands.filter((x) => x instanceof ExtendedCommand && x.local); + + // Register global commands + await rest.put(Routes.applicationCommands(client.application.id), { body: globalCommands.map((x) => x.toJSON()) }); + + // Register local commands for the main server await rest.put(Routes.applicationGuildCommands(client.application.id, config.mainServer), { - body: local.map(x => x.toJSON()), + body: localCommands.map((x) => x.toJSON()), }); - commands.forEach(x => commandRegistry.set(x.name, x)); + + commands.forEach((x) => commandRegistry.set(x.name, x)); for (const cmd of (await applicationCommandManager.fetch({})).values()) { applicationCommandRegistry.set(cmd.name, cmd); } + + // Display "Local" for local commands + console.log(`Registered local commands for the main server: ${localCommands.map((x) => x.name).join(", ")}`); }; -export const loadCommands = async (): Promise => { - const commands: Command[] = []; + +export const loadCommands = async (): Promise<(Command | ExtendedCommand)[]> => { + const commands: (Command | ExtendedCommand)[] = []; // Ensure commands array is of type Command or ExtendedCommand const commandFiles = sync(commandFolder); for (const file of commandFiles) { - const data = (await import(file)) as { command: unknown }; - if (!(data.command instanceof Command)) throw new Error(`File ${file} does not export 'command'.`); + const data = (await import(file)) as { command: Command | ExtendedCommand }; // Load as Command or ExtendedCommand + if (!(data.command instanceof Command || (data.command as any) instanceof ExtendedCommand)) { + throw new Error(`File ${file} does not export 'command'.`); + } console.log(`Registered command ${basename(file, ".js")}.`); commands.push(data.command); } + + const extendedCommands = await loadExtendedCommands(); + commands.push(...extendedCommands); + await registerCommands(commands); return commands; -}; \ No newline at end of file +}; + +// Define a new function to load ExtendedCommands +const loadExtendedCommands = async (): Promise => { + const commands: ExtendedCommand[] = []; + const commandFiles = sync(extendedCommandFolder); + for (const file of commandFiles) { + const data = (await import(file)) as { command: ExtendedCommand }; + if (!(data.command instanceof ExtendedCommand)) throw new Error(`File ${file} does not export 'command'.`); + console.log(`Registered extended command ${basename(file, ".js")}.`); + commands.push(data.command); + } + return commands; +}; diff --git a/src/providers/config.ts b/src/providers/config.ts index 02efa1e..7367cc6 100644 --- a/src/providers/config.ts +++ b/src/providers/config.ts @@ -76,6 +76,7 @@ const textSchema = z created: nFormattable("details", "duty", "id", "tag"), success1: nFormattable("details", "id"), success_tab: nFormattable("details", "id"), + }), list: z.object({ title: z.string(), @@ -110,6 +111,8 @@ const textSchema = z noChannel: z.string(), success: z.string(), default: z.string(), + multiSuccess: z.string(), + }), deliverymessage: z.object({ get: z.string(), diff --git a/src/structures/Command.ts b/src/structures/Command.ts index 4a5b1a9..8a978c2 100644 --- a/src/structures/Command.ts +++ b/src/structures/Command.ts @@ -1,6 +1,7 @@ +/* eslint-disable quotes */ +/* eslint-disable indent */ import { SlashCommandBuilder } from "@discordjs/builders"; import type { CommandInteraction } from "discord.js"; -import { Attachment } from "discord.js"; import type { Permission } from "../providers/permissions"; import { capitalize } from "../utils/string"; @@ -15,6 +16,7 @@ export type CommandOptionType = Extract< export type CommandOptionArgs = Parameters}Option`]>; export class Command { + [x: string]: any; readonly #slash = new SlashCommandBuilder(); accessible = true; executor: CommandExecutor = i => i.reply("No executor was specified."); @@ -24,10 +26,13 @@ export class Command { shortcuts: string[] = []; syntax: { name: string; type: CommandOptionType; require: boolean }[] = []; - constructor(public readonly name: string, public readonly description = "") { + constructor(public readonly name: string, public readonly description: string = "", options: any = {}) { this.#slash.setName(this.name).setDescription(this.description).setDefaultPermission(true); + // Initialize other properties as needed } + + setAccessible(accessible: boolean) { this.accessible = accessible; this.#slash.setDefaultPermission(accessible); @@ -45,6 +50,25 @@ export class Command { return this; } + // Add this method to add user options + addUserOption(...args: Parameters) { + this.#slash.addUserOption(...args); + return this; + } + + + // Add this method to add string options + addStringOption(name: string, description: string, required: boolean) { + this.#slash.addStringOption(option => + option + .setName(name) + .setDescription(description) + .setRequired(required) + ); + return this; + } + + addAttachment(type: T, ...args: CommandOptionArgs) { const fn = this.#slash[`add${capitalize(type)}Option`].bind(this.#slash) as (...a: typeof args) => void; fn(...args); diff --git a/src/structures/extendedCommand.ts b/src/structures/extendedCommand.ts new file mode 100644 index 0000000..7ac2a6e --- /dev/null +++ b/src/structures/extendedCommand.ts @@ -0,0 +1,26 @@ +/* eslint-disable indent */ +import { Command } from "./Command"; +import { config } from "../providers/config"; + +// Define the interface for command options +interface CommandOptions { + name: string; + description?: string; + local?: boolean; + // New property to specify whether the command should be registered locally + // Other properties as needed +} + +// Define the ExtendedCommand class +export class ExtendedCommand extends Command { + // Add new properties specific to your modifications + global: boolean; + local: boolean; // New property to specify whether the command should be registered locally + + // Constructor + constructor({ name, description, local = false, ...options }: CommandOptions) { + super(name, description, options); + this.global = !local; // Set global property based on the value of local + this.local = local; + } +} \ No newline at end of file diff --git a/src/utils/serverconfig.ts b/src/utils/serverconfig.ts index e62054f..6af61ae 100644 --- a/src/utils/serverconfig.ts +++ b/src/utils/serverconfig.ts @@ -1,3 +1,4 @@ +/* eslint-disable indent */ export const serverConfigSchema = { name: "ServerConfig", fields: { diff --git a/src/utils/string.ts b/src/utils/string.ts index 34c623b..07359dc 100644 --- a/src/utils/string.ts +++ b/src/utils/string.ts @@ -30,4 +30,4 @@ export const format = (str: T, ...arr: FormatArguments): st ? str.replaceAll(/\{(\w+)\}/g, (_, k) => (arr[0] as Record)[k]) : str; -export const parseText = (str: string) => str.replaceAll(/\[(\w+)\]/g, (_, key) => mainEmojis[key]?.toString() ?? _); +export const parseText = (str: string) => str.replaceAll(/\[(\w+)\]/g, (_, key) => mainEmojis[key]?.toString() ?? _); \ No newline at end of file From 686a775c56834eaaa3d5279d67996b16dba424fd Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Wed, 13 Mar 2024 13:12:59 -0400 Subject: [PATCH 36/79] a --- src/commands/public/notifi.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/public/notifi.ts b/src/commands/public/notifi.ts index 41a76b5..0a4019b 100644 --- a/src/commands/public/notifi.ts +++ b/src/commands/public/notifi.ts @@ -8,7 +8,7 @@ const prisma = new PrismaClient(); export const command = new Command("notifi", "Sets the channel for notifications.") - .addPermission(permissions.employee) + //.addPermission(permissions.employee) .addOption("channel", (o) => o.setName("channel").setDescription("The channel to set for notifications.").setRequired(true) ) From eb1c7d7774bca5e06286f1f09eb84d40abb01b2f Mon Sep 17 00:00:00 2001 From: floof Date: Sat, 30 Mar 2024 23:33:19 -0500 Subject: [PATCH 37/79] documentation hell :( --- config/text.hjson | 2 +- package.json | 122 +-- pnpm-lock.yaml | 1252 ++++++++++++++++------ src/commands/fun/doggo.ts | 1 - src/commands/orders/worker/editstatus.ts | 97 +- src/database/blacklist.ts | 23 +- src/database/database.ts | 5 +- src/database/order.ts | 436 +++++--- src/database/orders.ts | 435 +++++--- src/events/ExpCreate.ts | 5 + src/events/ServerConfig.ts | 5 +- src/events/interactionCreate.ts | 6 + src/events/ready.ts | 9 +- src/providers/client.ts | 5 +- src/providers/commandManager.ts | 12 + src/providers/config.ts | 28 +- src/providers/customCommands.ts | 45 +- src/providers/discord.ts | 7 + src/providers/drink.ts | 35 +- src/providers/env.ts | 5 +- src/providers/orderManager.ts | 4 +- src/providers/permissions.ts | 18 + src/structures/Command.ts | 99 +- src/structures/CustomDrinkData.ts | 10 +- src/structures/DrinksData.ts | 8 +- src/structures/LifetimeMap.ts | 23 +- src/utils/array.ts | 2 + src/utils/components.ts | 21 +- src/utils/string.ts | 33 +- yarn.lock | 860 +++++++-------- 30 files changed, 2304 insertions(+), 1309 deletions(-) diff --git a/config/text.hjson b/config/text.hjson index 7eb9e68..5463ad9 100644 --- a/config/text.hjson +++ b/config/text.hjson @@ -71,7 +71,7 @@ brew: { invalidUrl: "[no] Please specify a valid URL." success: "[yes] The order is now brewing." - ready: <@&1053887156701118485>he order{} {} {} finished brewing and {} now available for delivery. + ready: <@&1053887156701118485> The order{} {} {} finished brewing and {} now available for delivery. } deliver: { noMessage: âš ī¸ You do not have a delivery message set, and the default message was used. Make to set one with `/deliverymessage`! diff --git a/package.json b/package.json index 1f62820..280598a 100644 --- a/package.json +++ b/package.json @@ -1,61 +1,61 @@ -{ - "name": "dbrewrite", - "version": "1.3.1", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "build": "tsc", - "start": "cross-env NODE_ENV=production node dist/", - "dev": "tsc && node dist/", - "prisma:generate": "prisma generate", - "prisma:push": "prisma db push", - "project:setup": "$npm_execpath run prisma:generate && $npm_execpath run prisma:push" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/MelnCat/DBRewrite.git" - }, - "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/MelnCat/DBRewrite/issues" - }, - "homepage": "https://github.com/MelnCat/DBRewrite#readme", - "devDependencies": { - "@types/node": "^17.0.42", - "@types/uuid": "^9.0.1", - "@typescript-eslint/eslint-plugin": "^5.16.0", - "@typescript-eslint/parser": "^5.16.0", - "discord-api-types": "^0.37.35", - "eslint": "^8.12.0", - "eslint-plugin-regexp": "^1.6.0", - "prisma": "^5.6.0", - "ts-node": "^10.9.1", - "ts-toolbelt": "^9.6.0", - "tsconfig-paths": "^4.1.2", - "typescript": "^4.9.5" - }, - "dependencies": { - "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", - "@discordjs/rest": "^0.3.0", - "@paralleldrive/cuid2": "^2.2.1", - "@prisma/client": "^5.6.0", - "@sapphire/shapeshift": "^3.8.1", - "cross-env": "^7.0.3", - "discord.js": "^14.14.1", - "fast-glob": "^3.2.11", - "got": "^11.8.3", - "hjson": "^3.2.2", - "nekos.life": "^3.0.0", - "nodemon": "^2.0.20", - "picocolors": "^1.0.0", - "pino": "^7.9.2", - "pretty-ms": "^7.0.1", - "source-map-support": "^0.5.21", - "typescript-memoize": "^1.1.0", - "uuid": "^9.0.0", - "yarn": "^1.22.18", - "zod": "^3.14.3" - } -} +{ + "name": "dbrewrite", + "version": "1.3.3", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "tsc", + "start": "cross-env NODE_ENV=production node dist/", + "dev": "tsc && node dist/", + "prisma:generate": "prisma generate", + "prisma:push": "prisma db push", + "project:setup": "$npm_execpath run prisma:generate && $npm_execpath run prisma:push" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/MelnCat/DBRewrite.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/MelnCat/DBRewrite/issues" + }, + "homepage": "https://github.com/MelnCat/DBRewrite#readme", + "devDependencies": { + "@types/node": "^17.0.42", + "@types/uuid": "^9.0.1", + "@typescript-eslint/eslint-plugin": "^5.16.0", + "@typescript-eslint/parser": "^5.16.0", + "discord-api-types": "^0.37.35", + "eslint": "^8.12.0", + "eslint-plugin-regexp": "^1.6.0", + "prisma": "latest", + "ts-node": "^10.9.1", + "ts-toolbelt": "^9.6.0", + "tsconfig-paths": "^4.1.2", + "typescript": "^4.9.5" + }, + "dependencies": { + "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", + "@discordjs/rest": "^0.3.0", + "@paralleldrive/cuid2": "^2.2.1", + "@prisma/client": "latest", + "@sapphire/shapeshift": "^3.8.1", + "cross-env": "^7.0.3", + "discord.js": "^14.8.0", + "fast-glob": "^3.2.11", + "got": "^11.8.3", + "hjson": "^3.2.2", + "nekos.life": "^3.0.0", + "nodemon": "^2.0.20", + "picocolors": "^1.0.0", + "pino": "^7.9.2", + "pretty-ms": "^7.0.1", + "source-map-support": "^0.5.21", + "typescript-memoize": "^1.1.0", + "uuid": "^9.0.0", + "yarn": "^1.22.18", + "zod": "^3.14.3" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 833ed26..fe333bd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,85 +1,154 @@ -lockfileVersion: 5.3 - -specifiers: - '@discordjs/builders': ^0.12.0 - '@discordjs/rest': ^0.3.0 - '@prisma/client': ^3.13.0 - '@types/node': ^17.0.23 - '@typescript-eslint/eslint-plugin': ^5.16.0 - '@typescript-eslint/parser': ^5.16.0 - cross-env: ^7.0.3 - discord-api-types: ^0.30.0 - discord.js: ^13.6.0 - eslint: ^8.12.0 - eslint-plugin-regexp: ^1.6.0 - fast-glob: ^3.2.11 - hjson: ^3.2.2 - picocolors: ^1.0.0 - pino: ^7.9.2 - pretty-ms: ^7.0.1 - prisma: ^3.13.0 - source-map-support: ^0.5.21 - ts-toolbelt: ^9.6.0 - typescript: ^4.7.0-beta - typescript-memoize: ^1.1.0 - zod: ^3.14.3 +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false dependencies: - '@discordjs/builders': 0.12.0 - '@discordjs/rest': 0.3.0 - '@prisma/client': 3.13.0_prisma@3.13.0 - cross-env: 7.0.3 - discord-api-types: 0.30.0 - discord.js: 13.6.0 - fast-glob: 3.2.11 - hjson: 3.2.2 - picocolors: 1.0.0 - pino: 7.9.2 - pretty-ms: 7.0.1 - source-map-support: 0.5.21 - typescript-memoize: 1.1.0 - zod: 3.14.3 + '@discordjs/builders': + specifier: ^1.5.0-dev.1677499471-ffdb197.0 + version: 1.7.0 + '@discordjs/rest': + specifier: ^0.3.0 + version: 0.3.0 + '@paralleldrive/cuid2': + specifier: ^2.2.1 + version: 2.2.2 + '@prisma/client': + specifier: ^5.11.0 + version: 5.11.0(prisma@5.11.0) + '@sapphire/shapeshift': + specifier: ^3.8.1 + version: 3.9.6 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + discord.js: + specifier: ^14.14.1 + version: 14.14.1 + fast-glob: + specifier: ^3.2.11 + version: 3.2.11 + got: + specifier: ^11.8.3 + version: 11.8.6 + hjson: + specifier: ^3.2.2 + version: 3.2.2 + nekos.life: + specifier: ^3.0.0 + version: 3.0.0 + nodemon: + specifier: ^2.0.20 + version: 2.0.22 + picocolors: + specifier: ^1.0.0 + version: 1.0.0 + pino: + specifier: ^7.9.2 + version: 7.9.2 + pretty-ms: + specifier: ^7.0.1 + version: 7.0.1 + source-map-support: + specifier: ^0.5.21 + version: 0.5.21 + typescript-memoize: + specifier: ^1.1.0 + version: 1.1.0 + uuid: + specifier: ^9.0.0 + version: 9.0.1 + yarn: + specifier: ^1.22.18 + version: 1.22.22 + zod: + specifier: ^3.14.3 + version: 3.14.3 devDependencies: - '@types/node': 17.0.23 - '@typescript-eslint/eslint-plugin': 5.16.0_5ae56ee64658da37428c53e9c0c05c28 - '@typescript-eslint/parser': 5.16.0_20848afcae97cb82b3144239e86ffbc6 - eslint: 8.12.0 - eslint-plugin-regexp: 1.6.0_eslint@8.12.0 - prisma: 3.13.0 - ts-toolbelt: 9.6.0 - typescript: 4.7.0-beta + '@types/node': + specifier: ^17.0.42 + version: 17.0.45 + '@types/uuid': + specifier: ^9.0.1 + version: 9.0.8 + '@typescript-eslint/eslint-plugin': + specifier: ^5.16.0 + version: 5.16.0(@typescript-eslint/parser@5.16.0)(eslint@8.12.0)(typescript@4.9.5) + '@typescript-eslint/parser': + specifier: ^5.16.0 + version: 5.16.0(eslint@8.12.0)(typescript@4.9.5) + discord-api-types: + specifier: ^0.37.35 + version: 0.37.77 + eslint: + specifier: ^8.12.0 + version: 8.12.0 + eslint-plugin-regexp: + specifier: ^1.6.0 + version: 1.6.0(eslint@8.12.0) + prisma: + specifier: ^5.6.0 + version: 5.11.0 + ts-node: + specifier: ^10.9.1 + version: 10.9.2(@types/node@17.0.45)(typescript@4.9.5) + ts-toolbelt: + specifier: ^9.6.0 + version: 9.6.0 + tsconfig-paths: + specifier: ^4.1.2 + version: 4.2.0 + typescript: + specifier: ^4.9.5 + version: 4.9.5 packages: - /@discordjs/builders/0.11.0: - resolution: {integrity: sha512-ZTB8yJdJKrKlq44dpWkNUrAtEJEq0gqpb7ASdv4vmq6/mZal5kOv312hQ56I/vxwMre+VIkoHquNUAfnTbiYtg==} - engines: {node: '>=16.0.0', npm: '>=7.0.0'} + /@cspotcode/source-map-support@0.8.1: + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} dependencies: - '@sindresorhus/is': 4.6.0 - discord-api-types: 0.26.1 - ts-mixer: 6.0.1 - tslib: 2.3.1 - zod: 3.14.3 - dev: false + '@jridgewell/trace-mapping': 0.3.9 + dev: true - /@discordjs/builders/0.12.0: - resolution: {integrity: sha512-Vx2MjUZd6QVo1uS2uWt708Fd6cHWGFblAvbpL5EBO+kLl0BADmPwwvts+YJ/VfSywed6Vsk6K2cEooR/Ytjhjw==} - engines: {node: '>=16.9.0'} + /@discordjs/builders@1.7.0: + resolution: {integrity: sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw==} + engines: {node: '>=16.11.0'} dependencies: - '@sindresorhus/is': 4.6.0 - discord-api-types: 0.26.1 - ts-mixer: 6.0.1 - tslib: 2.3.1 - zod: 3.14.3 + '@discordjs/formatters': 0.3.3 + '@discordjs/util': 1.0.2 + '@sapphire/shapeshift': 3.9.6 + discord-api-types: 0.37.61 + fast-deep-equal: 3.1.3 + ts-mixer: 6.0.4 + tslib: 2.6.2 dev: false - /@discordjs/collection/0.4.0: + /@discordjs/collection@0.4.0: resolution: {integrity: sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} dev: false - /@discordjs/rest/0.3.0: + /@discordjs/collection@1.5.3: + resolution: {integrity: sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==} + engines: {node: '>=16.11.0'} + dev: false + + /@discordjs/collection@2.0.0: + resolution: {integrity: sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==} + engines: {node: '>=18'} + dev: false + + /@discordjs/formatters@0.3.3: + resolution: {integrity: sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w==} + engines: {node: '>=16.11.0'} + dependencies: + discord-api-types: 0.37.61 + dev: false + + /@discordjs/rest@0.3.0: resolution: {integrity: sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q==} engines: {node: '>=16.9.0'} dependencies: @@ -94,7 +163,45 @@ packages: - encoding dev: false - /@eslint/eslintrc/1.2.1: + /@discordjs/rest@2.2.0: + resolution: {integrity: sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==} + engines: {node: '>=16.11.0'} + dependencies: + '@discordjs/collection': 2.0.0 + '@discordjs/util': 1.0.2 + '@sapphire/async-queue': 1.5.2 + '@sapphire/snowflake': 3.5.1 + '@vladfrangu/async_event_emitter': 2.2.4 + discord-api-types: 0.37.61 + magic-bytes.js: 1.10.0 + tslib: 2.6.2 + undici: 5.27.2 + dev: false + + /@discordjs/util@1.0.2: + resolution: {integrity: sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw==} + engines: {node: '>=16.11.0'} + dev: false + + /@discordjs/ws@1.0.2: + resolution: {integrity: sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q==} + engines: {node: '>=16.11.0'} + dependencies: + '@discordjs/collection': 2.0.0 + '@discordjs/rest': 2.2.0 + '@discordjs/util': 1.0.2 + '@sapphire/async-queue': 1.5.2 + '@types/ws': 8.5.9 + '@vladfrangu/async_event_emitter': 2.2.4 + discord-api-types: 0.37.61 + tslib: 2.6.2 + ws: 8.14.2 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + /@eslint/eslintrc@1.2.1: resolution: {integrity: sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -111,7 +218,12 @@ packages: - supports-color dev: true - /@humanwhocodes/config-array/0.9.5: + /@fastify/busboy@2.1.1: + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + dev: false + + /@humanwhocodes/config-array@0.9.5: resolution: {integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==} engines: {node: '>=10.10.0'} dependencies: @@ -122,31 +234,58 @@ packages: - supports-color dev: true - /@humanwhocodes/object-schema/1.2.1: + /@humanwhocodes/object-schema@1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true - /@nodelib/fs.scandir/2.1.5: + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.9: + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@noble/hashes@1.4.0: + resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} + engines: {node: '>= 16'} + dev: false + + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - /@nodelib/fs.stat/2.0.5: + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - /@nodelib/fs.walk/1.2.8: + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.13.0 - /@prisma/client/3.13.0_prisma@3.13.0: - resolution: {integrity: sha512-lnEA2tTyVbO5mS1ehmHJQKBDiKB8shaR6s3azwj3Azfi5XHIfnqmkolLCvUeFYnkDCNVzGXJpUgKwQt/UOOYVQ==} - engines: {node: '>=12.6'} + /@paralleldrive/cuid2@2.2.2: + resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} + dependencies: + '@noble/hashes': 1.4.0 + dev: false + + /@prisma/client@5.11.0(prisma@5.11.0): + resolution: {integrity: sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw==} + engines: {node: '>=16.13'} requiresBuild: true peerDependencies: prisma: '*' @@ -154,55 +293,135 @@ packages: prisma: optional: true dependencies: - '@prisma/engines-version': 3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b - prisma: 3.13.0 + prisma: 5.11.0 dev: false - /@prisma/engines-version/3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b: - resolution: {integrity: sha512-TGp9rvgJIKo8NgvAHSwOosbut9mTA7VC6/rpQI9gh+ySSRjdQFhbGyNUiOcQrlI9Ob2DWeO7y4HEnhdKxYiECg==} - dev: false + /@prisma/debug@5.11.0: + resolution: {integrity: sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A==} + + /@prisma/engines-version@5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102: + resolution: {integrity: sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA==} - /@prisma/engines/3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b: - resolution: {integrity: sha512-Ip9CcCeUocH61eXu4BUGpvl5KleQyhcUVLpWCv+0ZmDv44bFaDpREqjGHHdRupvPN/ugB6gTlD9b9ewdj02yVA==} + /@prisma/engines@5.11.0: + resolution: {integrity: sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw==} requiresBuild: true - dev: true + dependencies: + '@prisma/debug': 5.11.0 + '@prisma/engines-version': 5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102 + '@prisma/fetch-engine': 5.11.0 + '@prisma/get-platform': 5.11.0 - /@sapphire/async-queue/1.3.0: + /@prisma/fetch-engine@5.11.0: + resolution: {integrity: sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w==} + dependencies: + '@prisma/debug': 5.11.0 + '@prisma/engines-version': 5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102 + '@prisma/get-platform': 5.11.0 + + /@prisma/get-platform@5.11.0: + resolution: {integrity: sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw==} + dependencies: + '@prisma/debug': 5.11.0 + + /@sapphire/async-queue@1.3.0: resolution: {integrity: sha512-z+CDw5X4UgIEpZL8KM+ThVx1i8V60HBg0l/oFewTNbQQeRDJHdVxHyJykv+SF1H+Rc8EkMS81VTWo95jVYgO/g==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} dev: false - /@sapphire/snowflake/3.2.0: + /@sapphire/async-queue@1.5.2: + resolution: {integrity: sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + dev: false + + /@sapphire/shapeshift@3.9.6: + resolution: {integrity: sha512-4+Na/fxu2SEepZRb9z0dbsVh59QtwPuBg/UVaDib3av7ZY14b14+z09z6QVn0P6Dv6eOU2NDTsjIi0mbtgP56g==} + engines: {node: '>=v18'} + dependencies: + fast-deep-equal: 3.1.3 + lodash: 4.17.21 + dev: false + + /@sapphire/snowflake@3.2.0: resolution: {integrity: sha512-tfHzY+6/5bbHdB+uNqsEQ5rhjaZAoFUrqP/l1S5jwxMdKeSCIiGkJjcE99/WGGdzyWGjTNgNVX/dt4Me/FdMlg==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} dev: false - /@sindresorhus/is/4.6.0: + /@sapphire/snowflake@3.5.1: + resolution: {integrity: sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + dev: false + + /@sindresorhus/is@4.6.0: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} dev: false - /@types/json-schema/7.0.11: + /@szmarczak/http-timer@4.0.6: + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + dependencies: + defer-to-connect: 2.0.1 + dev: false + + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true + + /@tsconfig/node12@1.0.11: + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true + + /@tsconfig/node14@1.0.3: + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true + + /@tsconfig/node16@1.0.4: + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true + + /@types/cacheable-request@6.0.3: + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 17.0.45 + '@types/responselike': 1.0.3 + dev: false + + /@types/http-cache-semantics@4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + dev: false + + /@types/json-schema@7.0.11: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/node-fetch/2.6.1: - resolution: {integrity: sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==} + /@types/keyv@3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + dependencies: + '@types/node': 17.0.45 + dev: false + + /@types/node@17.0.45: + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + + /@types/responselike@1.0.3: + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 17.0.23 - form-data: 3.0.1 + '@types/node': 17.0.45 dev: false - /@types/node/17.0.23: - resolution: {integrity: sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==} + /@types/uuid@9.0.8: + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + dev: true - /@types/ws/8.5.3: - resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} + /@types/ws@8.5.9: + resolution: {integrity: sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==} dependencies: - '@types/node': 17.0.23 + '@types/node': 17.0.45 dev: false - /@typescript-eslint/eslint-plugin/5.16.0_5ae56ee64658da37428c53e9c0c05c28: + /@typescript-eslint/eslint-plugin@5.16.0(@typescript-eslint/parser@5.16.0)(eslint@8.12.0)(typescript@4.9.5): resolution: {integrity: sha512-SJoba1edXvQRMmNI505Uo4XmGbxCK9ARQpkvOd00anxzri9RNQk0DDCxD+LIl+jYhkzOJiOMMKYEHnHEODjdCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -213,23 +432,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.16.0_20848afcae97cb82b3144239e86ffbc6 + '@typescript-eslint/parser': 5.16.0(eslint@8.12.0)(typescript@4.9.5) '@typescript-eslint/scope-manager': 5.16.0 - '@typescript-eslint/type-utils': 5.16.0_20848afcae97cb82b3144239e86ffbc6 - '@typescript-eslint/utils': 5.16.0_20848afcae97cb82b3144239e86ffbc6 + '@typescript-eslint/type-utils': 5.16.0(eslint@8.12.0)(typescript@4.9.5) + '@typescript-eslint/utils': 5.16.0(eslint@8.12.0)(typescript@4.9.5) debug: 4.3.4 eslint: 8.12.0 functional-red-black-tree: 1.0.1 ignore: 5.2.0 regexpp: 3.2.0 semver: 7.3.5 - tsutils: 3.21.0_typescript@4.7.0-beta - typescript: 4.7.0-beta + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser/5.16.0_20848afcae97cb82b3144239e86ffbc6: + /@typescript-eslint/parser@5.16.0(eslint@8.12.0)(typescript@4.9.5): resolution: {integrity: sha512-fkDq86F0zl8FicnJtdXakFs4lnuebH6ZADDw6CYQv0UZeIjHvmEw87m9/29nk2Dv5Lmdp0zQ3zDQhiMWQf/GbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -241,15 +460,15 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.16.0 '@typescript-eslint/types': 5.16.0 - '@typescript-eslint/typescript-estree': 5.16.0_typescript@4.7.0-beta + '@typescript-eslint/typescript-estree': 5.16.0(typescript@4.9.5) debug: 4.3.4 eslint: 8.12.0 - typescript: 4.7.0-beta + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.16.0: + /@typescript-eslint/scope-manager@5.16.0: resolution: {integrity: sha512-P+Yab2Hovg8NekLIR/mOElCDPyGgFZKhGoZA901Yax6WR6HVeGLbsqJkZ+Cvk5nts/dAlFKm8PfL43UZnWdpIQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -257,7 +476,7 @@ packages: '@typescript-eslint/visitor-keys': 5.16.0 dev: true - /@typescript-eslint/type-utils/5.16.0_20848afcae97cb82b3144239e86ffbc6: + /@typescript-eslint/type-utils@5.16.0(eslint@8.12.0)(typescript@4.9.5): resolution: {integrity: sha512-SKygICv54CCRl1Vq5ewwQUJV/8padIWvPgCxlWPGO/OgQLCijY9G7lDu6H+mqfQtbzDNlVjzVWQmeqbLMBLEwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -267,21 +486,21 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/utils': 5.16.0_20848afcae97cb82b3144239e86ffbc6 + '@typescript-eslint/utils': 5.16.0(eslint@8.12.0)(typescript@4.9.5) debug: 4.3.4 eslint: 8.12.0 - tsutils: 3.21.0_typescript@4.7.0-beta - typescript: 4.7.0-beta + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.16.0: + /@typescript-eslint/types@5.16.0: resolution: {integrity: sha512-oUorOwLj/3/3p/HFwrp6m/J2VfbLC8gjW5X3awpQJ/bSG+YRGFS4dpsvtQ8T2VNveV+LflQHjlLvB6v0R87z4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.16.0_typescript@4.7.0-beta: + /@typescript-eslint/typescript-estree@5.16.0(typescript@4.9.5): resolution: {integrity: sha512-SE4VfbLWUZl9MR+ngLSARptUv2E8brY0luCdgmUevU6arZRY/KxYoLI/3V/yxaURR8tLRN7bmZtJdgmzLHI6pQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -296,13 +515,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.5 - tsutils: 3.21.0_typescript@4.7.0-beta - typescript: 4.7.0-beta + tsutils: 3.21.0(typescript@4.9.5) + typescript: 4.9.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils/5.16.0_20848afcae97cb82b3144239e86ffbc6: + /@typescript-eslint/utils@5.16.0(eslint@8.12.0)(typescript@4.9.5): resolution: {integrity: sha512-iYej2ER6AwmejLWMWzJIHy3nPJeGDuCqf8Jnb+jAQVoPpmWzwQOfa9hWVB8GIQE5gsCv/rfN4T+AYb/V06WseQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -311,16 +530,16 @@ packages: '@types/json-schema': 7.0.11 '@typescript-eslint/scope-manager': 5.16.0 '@typescript-eslint/types': 5.16.0 - '@typescript-eslint/typescript-estree': 5.16.0_typescript@4.7.0-beta + '@typescript-eslint/typescript-estree': 5.16.0(typescript@4.9.5) eslint: 8.12.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.12.0 + eslint-utils: 3.0.0(eslint@8.12.0) transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.16.0: + /@typescript-eslint/visitor-keys@5.16.0: resolution: {integrity: sha512-jqxO8msp5vZDhikTwq9ubyMHqZ67UIvawohr4qF3KhlpL7gzSjOd+8471H3nh5LyABkaI85laEKKU8SnGUK5/g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -328,7 +547,16 @@ packages: eslint-visitor-keys: 3.3.0 dev: true - /acorn-jsx/5.3.2_acorn@8.7.0: + /@vladfrangu/async_event_emitter@2.2.4: + resolution: {integrity: sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug==} + engines: {node: '>=v14.0.0', npm: '>=7.0.0'} + dev: false + + /abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + dev: false + + /acorn-jsx@5.3.2(acorn@8.7.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -336,13 +564,18 @@ packages: acorn: 8.7.0 dev: true - /acorn/8.7.0: + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@8.7.0: resolution: {integrity: sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /ajv/6.12.6: + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 @@ -351,63 +584,96 @@ packages: uri-js: 4.4.1 dev: true - /ansi-regex/5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} dev: true - /ansi-styles/4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 dev: true - /argparse/2.0.1: + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: false + + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true + + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /array-union/2.1.0: + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} dev: true - /asynckit/0.4.0: + /asynckit@0.4.0: resolution: {integrity: sha1-x57Zf380y48robyXkLzDZkdLS3k=} dev: false - /atomic-sleep/1.0.0: + /atomic-sleep@1.0.0: resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} engines: {node: '>=8.0.0'} dev: false - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true - /brace-expansion/1.1.11: + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + dev: false + + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: false - /callsites/3.1.0: + /cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + dev: false + + /cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + dev: false + + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true - /chalk/4.1.2: + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: @@ -415,34 +681,58 @@ packages: supports-color: 7.2.0 dev: true - /color-convert/2.0.1: + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: false + + /clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + dependencies: + mimic-response: 1.0.1 + dev: false + + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 dev: true - /color-name/1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true - /combined-stream/1.0.8: + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 dev: false - /comment-parser/1.3.1: + /comment-parser@1.3.1: resolution: {integrity: sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==} engines: {node: '>= 12.0.0'} dev: true - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} dev: true - /cross-env/7.0.3: + /cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true @@ -450,7 +740,7 @@ packages: cross-spawn: 7.0.3 dev: false - /cross-spawn/7.0.3: + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -458,7 +748,19 @@ packages: shebang-command: 2.0.0 which: 2.0.2 - /debug/4.3.4: + /debug@3.2.7(supports-color@5.5.0): + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 5.5.0 + dev: false + + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -470,58 +772,83 @@ packages: ms: 2.1.2 dev: true - /deep-is/0.1.4: + /decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: false + + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /delayed-stream/1.0.0: + /defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + dev: false + + /delayed-stream@1.0.0: resolution: {integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk=} engines: {node: '>=0.4.0'} dev: false - /dir-glob/3.0.1: + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true + + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} dependencies: path-type: 4.0.0 dev: true - /discord-api-types/0.26.1: + /discord-api-types@0.26.1: resolution: {integrity: sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==} engines: {node: '>=12'} dev: false - /discord-api-types/0.30.0: - resolution: {integrity: sha512-wYst0jrT8EJs2tVlwUTQ2xT0oWMjUrRMpFTkNY3NMleWyQNHgWaKhqFfxdLPdC2im9IuR5EsxcEgjhf/npeftw==} + /discord-api-types@0.37.61: + resolution: {integrity: sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==} dev: false - /discord.js/13.6.0: - resolution: {integrity: sha512-tXNR8zgsEPxPBvGk3AQjJ9ljIIC6/LOPjzKwpwz8Y1Q2X66Vi3ZqFgRHYwnHKC0jC0F+l4LzxlhmOJsBZDNg9g==} - engines: {node: '>=16.6.0', npm: '>=7.0.0'} + /discord-api-types@0.37.77: + resolution: {integrity: sha512-AkEn9nZA5w/XJ8wzKzlpx3X+MToQCowKahftF1+KYnMWnuglCrVRojy1XlIWX8Frgp1v8INceGKpvDkbvMLJ4g==} + dev: true + + /discord.js@14.14.1: + resolution: {integrity: sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w==} + engines: {node: '>=16.11.0'} dependencies: - '@discordjs/builders': 0.11.0 - '@discordjs/collection': 0.4.0 - '@sapphire/async-queue': 1.3.0 - '@types/node-fetch': 2.6.1 - '@types/ws': 8.5.3 - discord-api-types: 0.26.1 - form-data: 4.0.0 - node-fetch: 2.6.7 - ws: 8.5.0 + '@discordjs/builders': 1.7.0 + '@discordjs/collection': 1.5.3 + '@discordjs/formatters': 0.3.3 + '@discordjs/rest': 2.2.0 + '@discordjs/util': 1.0.2 + '@discordjs/ws': 1.0.2 + '@sapphire/snowflake': 3.5.1 + '@types/ws': 8.5.9 + discord-api-types: 0.37.61 + fast-deep-equal: 3.1.3 + lodash.snakecase: 4.1.1 + tslib: 2.6.2 + undici: 5.27.2 + ws: 8.14.2 transitivePeerDependencies: - bufferutil - - encoding - utf-8-validate dev: false - /doctrine/3.0.0: + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true - /duplexify/4.1.2: + /duplexify@4.1.2: resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==} dependencies: end-of-stream: 1.4.4 @@ -530,18 +857,18 @@ packages: stream-shift: 1.0.1 dev: false - /end-of-stream/1.4.4: + /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: false - /escape-string-regexp/4.0.0: + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true - /eslint-plugin-regexp/1.6.0_eslint@8.12.0: + /eslint-plugin-regexp@1.6.0(eslint@8.12.0): resolution: {integrity: sha512-xkaQOzyY4PUukRd8b6zTq+QTtg0dePlCP2dZiM+XGSmvlpDeYiPJHfRDpAfS/sP9YtK6q7DGes1smCyPTD3Lkg==} engines: {node: ^12 || >=14} peerDependencies: @@ -549,7 +876,7 @@ packages: dependencies: comment-parser: 1.3.1 eslint: 8.12.0 - eslint-utils: 3.0.0_eslint@8.12.0 + eslint-utils: 3.0.0(eslint@8.12.0) grapheme-splitter: 1.0.4 jsdoctypeparser: 9.0.0 refa: 0.9.1 @@ -558,7 +885,7 @@ packages: scslre: 0.1.6 dev: true - /eslint-scope/5.1.1: + /eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} dependencies: @@ -566,7 +893,7 @@ packages: estraverse: 4.3.0 dev: true - /eslint-scope/7.1.1: + /eslint-scope@7.1.1: resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -574,7 +901,7 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.12.0: + /eslint-utils@3.0.0(eslint@8.12.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: @@ -584,17 +911,17 @@ packages: eslint-visitor-keys: 2.1.0 dev: true - /eslint-visitor-keys/2.1.0: + /eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} engines: {node: '>=10'} dev: true - /eslint-visitor-keys/3.3.0: + /eslint-visitor-keys@3.3.0: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.12.0: + /eslint@8.12.0: resolution: {integrity: sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true @@ -608,7 +935,7 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.12.0 + eslint-utils: 3.0.0(eslint@8.12.0) eslint-visitor-keys: 3.3.0 espree: 9.3.1 esquery: 1.4.0 @@ -638,49 +965,48 @@ packages: - supports-color dev: true - /espree/9.3.1: + /espree@9.3.1: resolution: {integrity: sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.7.0 - acorn-jsx: 5.3.2_acorn@8.7.0 + acorn-jsx: 5.3.2(acorn@8.7.0) eslint-visitor-keys: 3.3.0 dev: true - /esquery/1.4.0: + /esquery@1.4.0: resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true - /esrecurse/4.3.0: + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true - /estraverse/4.3.0: + /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} dev: true - /estraverse/5.3.0: + /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} dev: true - /esutils/2.0.3: + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true - /fast-deep-equal/3.1.3: + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true - /fast-glob/3.2.11: + /fast-glob@3.2.11: resolution: {integrity: sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==} engines: {node: '>=8.6.0'} dependencies: @@ -690,38 +1016,38 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 - /fast-json-stable-stringify/2.1.0: + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-levenshtein/2.0.6: + /fast-levenshtein@2.0.6: resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} dev: true - /fast-redact/3.1.1: + /fast-redact@3.1.1: resolution: {integrity: sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==} engines: {node: '>=6'} dev: false - /fastq/1.13.0: + /fastq@1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: reusify: 1.0.4 - /file-entry-cache/6.0.1: + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.0.4 dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - /flat-cache/3.0.4: + /flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: @@ -729,20 +1055,11 @@ packages: rimraf: 3.0.2 dev: true - /flatted/3.2.5: + /flatted@3.2.5: resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} dev: true - /form-data/3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: false - - /form-data/4.0.0: + /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} dependencies: @@ -751,28 +1068,43 @@ packages: mime-types: 2.1.35 dev: false - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} dev: true - /functional-red-black-tree/1.0.1: + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /functional-red-black-tree@1.0.1: resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} dev: true - /glob-parent/5.1.2: + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: false + + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - /glob-parent/6.0.2: + /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 dev: true - /glob/7.2.0: + /glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} dependencies: fs.realpath: 1.0.0 @@ -783,14 +1115,14 @@ packages: path-is-absolute: 1.0.1 dev: true - /globals/13.13.0: + /globals@13.13.0: resolution: {integrity: sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globby/11.1.0: + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} dependencies: @@ -802,26 +1134,64 @@ packages: slash: 3.0.0 dev: true - /grapheme-splitter/1.0.4: + /got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + dev: false + + /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /has-flag/4.0.0: + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: false + + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} dev: true - /hjson/3.2.2: + /hjson@3.2.2: resolution: {integrity: sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==} hasBin: true dev: false - /ignore/5.2.0: + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: false + + /http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: false + + /ignore-by-default@1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + dev: false + + /ignore@5.2.0: resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} engines: {node: '>= 4'} dev: true - /import-fresh/3.3.0: + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: @@ -829,60 +1199,83 @@ packages: resolve-from: 4.0.0 dev: true - /imurmurhash/0.1.4: + /imurmurhash@0.1.4: resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} engines: {node: '>=0.8.19'} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /is-extglob/2.1.1: + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.3.0 + dev: false + + /is-extglob@2.1.1: resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} engines: {node: '>=0.10.0'} - /is-glob/4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - /isexe/2.0.0: + /isexe@2.0.0: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} - /js-yaml/4.1.0: + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 dev: true - /jsdoctypeparser/9.0.0: + /jsdoctypeparser@9.0.0: resolution: {integrity: sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==} engines: {node: '>=10'} hasBin: true dev: true - /json-schema-traverse/0.4.1: + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: false + + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /json-stable-stringify-without-jsonify/1.0.1: + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} dev: true - /levn/0.4.1: + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: false + + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -890,55 +1283,92 @@ packages: type-check: 0.4.0 dev: true - /lodash.merge/4.6.2: + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} dev: true - /lru-cache/6.0.0: + /lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + dev: false + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false + + /lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + dev: false + + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true - /merge2/1.4.1: + /magic-bytes.js@1.10.0: + resolution: {integrity: sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==} + dev: false + + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true + + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - /micromatch/4.0.5: + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: braces: 3.0.2 picomatch: 2.3.1 - /mime-db/1.52.0: + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} dev: false - /mime-types/2.1.35: + /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: false - /minimatch/3.1.2: + /mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + dev: false + + /mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: false + + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /ms/2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - /natural-compare/1.4.0: + /natural-compare@1.4.0: resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} dev: true - /node-fetch/2.6.7: + /nekos.life@3.0.0: + resolution: {integrity: sha512-7LbvSqLtfK4XRA91nJaGOWthrNADmG7Vx9d54TC77Hx5qFvRCssFUaHraI6bZGjVENBCUaF7CreisoFX+8mnKQ==} + dev: false + + /node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -950,16 +1380,50 @@ packages: whatwg-url: 5.0.0 dev: false - /on-exit-leak-free/0.2.0: + /nodemon@2.0.22: + resolution: {integrity: sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==} + engines: {node: '>=8.10.0'} + hasBin: true + dependencies: + chokidar: 3.6.0 + debug: 3.2.7(supports-color@5.5.0) + ignore-by-default: 1.0.1 + minimatch: 3.1.2 + pstree.remy: 1.1.8 + semver: 5.7.2 + simple-update-notifier: 1.1.0 + supports-color: 5.5.0 + touch: 3.1.0 + undefsafe: 2.0.5 + dev: false + + /nopt@1.0.10: + resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} + hasBin: true + dependencies: + abbrev: 1.1.1 + dev: false + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: false + + /on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} dev: false - /once/1.4.0: - resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - /optionator/0.9.1: + /optionator@0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} dependencies: @@ -971,52 +1435,57 @@ packages: word-wrap: 1.2.3 dev: true - /parent-module/1.0.1: + /p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + dev: false + + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true - /parse-ms/2.1.0: + /parse-ms@2.1.0: resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} engines: {node: '>=6'} dev: false - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} engines: {node: '>=0.10.0'} dev: true - /path-key/3.1.1: + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - /path-type/4.0.0: + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /picocolors/1.0.0: + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: false - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - /pino-abstract-transport/0.5.0: + /pino-abstract-transport@0.5.0: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} dependencies: duplexify: 4.1.2 split2: 4.1.0 dev: false - /pino-std-serializers/4.0.0: + /pino-std-serializers@4.0.0: resolution: {integrity: sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==} dev: false - /pino/7.9.2: + /pino@7.9.2: resolution: {integrity: sha512-c8wmB2PuhdJurYPRl/eo3+PosHe7Ep6GZvBJFIrp9oV1YRZQ3qm3MujaEolaKUfwX8cDL96WKCWWMedB2drXqw==} hasBin: true dependencies: @@ -1032,45 +1501,59 @@ packages: thread-stream: 0.15.1 dev: false - /prelude-ls/1.2.1: + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /pretty-ms/7.0.1: + /pretty-ms@7.0.1: resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} engines: {node: '>=10'} dependencies: parse-ms: 2.1.0 dev: false - /prisma/3.13.0: - resolution: {integrity: sha512-oO1auBnBtieGdiN+57IgsA9Vr7Sy4HkILi1KSaUG4mpKfEbnkTGnLOxAqjLed+K2nsG/GtE1tJBtB7JxN1a78Q==} - engines: {node: '>=12.6'} + /prisma@5.11.0: + resolution: {integrity: sha512-KCLiug2cs0Je7kGkQBN9jDWoZ90ogE/kvZTUTgz2h94FEo8pczCkPH7fPNXkD1sGU7Yh65risGGD1HQ5DF3r3g==} + engines: {node: '>=16.13'} hasBin: true requiresBuild: true dependencies: - '@prisma/engines': 3.13.0-17.efdf9b1183dddfd4258cd181a72125755215ab7b - ts-pattern: 4.0.2 - dev: true + '@prisma/engines': 5.11.0 - /process-warning/1.0.0: + /process-warning@1.0.0: resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} dev: false - /punycode/2.1.1: + /pstree.remy@1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + dev: false + + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: false + + /punycode@2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} dev: true - /queue-microtask/1.2.3: + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - /quick-format-unescaped/4.0.4: + /quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} dev: false - /readable-stream/3.6.0: + /quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: false + + /readable-stream@3.6.0: resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} engines: {node: '>= 6'} dependencies: @@ -1079,67 +1562,84 @@ packages: util-deprecate: 1.0.2 dev: false - /real-require/0.1.0: + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: false + + /real-require@0.1.0: resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} engines: {node: '>= 12.13.0'} dev: false - /refa/0.9.1: + /refa@0.9.1: resolution: {integrity: sha512-egU8LgFq2VXlAfUi8Jcbr5X38wEOadMFf8tCbshgcpVCYlE7k84pJOSlnvXF+muDB4igkdVMq7Z/kiNPqDT9TA==} dependencies: regexpp: 3.2.0 dev: true - /regexp-ast-analysis/0.2.4: + /regexp-ast-analysis@0.2.4: resolution: {integrity: sha512-8L7kOZQaKPxKKAwGuUZxTQtlO3WZ+tiXy4s6G6PKL6trbOXcZoumwC3AOHHFtI/xoSbNxt7jgLvCnP1UADLWqg==} dependencies: refa: 0.9.1 regexpp: 3.2.0 dev: true - /regexp-ast-analysis/0.3.0: + /regexp-ast-analysis@0.3.0: resolution: {integrity: sha512-11PlbBSUxwWpdj6BdZUKfhDdV9g+cveqHB+BqBQDBD7ZermDBVgtyowUaXTvT0dO3tZYo2bDIr/GoED6X1aYSA==} dependencies: refa: 0.9.1 regexpp: 3.2.0 dev: true - /regexpp/3.2.0: + /regexpp@3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} dev: true - /resolve-from/4.0.0: + /resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + dev: false + + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true - /reusify/1.0.4: + /responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + dependencies: + lowercase-keys: 2.0.0 + dev: false + + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rimraf/3.0.2: + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.0 dev: true - /run-parallel/1.2.0: + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - /safe-buffer/5.2.1: + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: false - /safe-stable-stringify/2.3.1: + /safe-stable-stringify@2.3.1: resolution: {integrity: sha512-kYBSfT+troD9cDA85VDnHZ1rpHC50O0g1e6WlGHVCz/g+JS+9WKLj+XwFYyR8UbrZN8ll9HUpDAAddY58MGisg==} engines: {node: '>=10'} dev: false - /scslre/0.1.6: + /scslre@0.1.6: resolution: {integrity: sha512-JORxVRlQTfjvlOAaiQKebgFElyAm5/W8b50lgaZ0OkEnKnagJW2ufDh3xRfU75UD9z3FGIu1gL1IyR3Poa6Qmw==} dependencies: refa: 0.9.1 @@ -1147,7 +1647,17 @@ packages: regexpp: 3.2.0 dev: true - /semver/7.3.5: + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: false + + /semver@7.0.0: + resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} + hasBin: true + dev: false + + /semver@7.3.5: resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} engines: {node: '>=10'} hasBin: true @@ -1155,191 +1665,277 @@ packages: lru-cache: 6.0.0 dev: true - /shebang-command/2.0.0: + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - /shebang-regex/3.0.0: + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /slash/3.0.0: + /simple-update-notifier@1.1.0: + resolution: {integrity: sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==} + engines: {node: '>=8.10.0'} + dependencies: + semver: 7.0.0 + dev: false + + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} dev: true - /sonic-boom/2.6.0: + /sonic-boom@2.6.0: resolution: {integrity: sha512-6xYZFRmDEtxGqfOKcDQ4cPLrNa0SPEDI+wlzDAHowXE6YV42NeXqg9mP2KkiM8JVu3lHfZ2iQKYlGOz+kTpphg==} dependencies: atomic-sleep: 1.0.0 dev: false - /source-map-support/0.5.21: + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: false - /source-map/0.6.1: + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: false - /split2/4.1.0: + /split2@4.1.0: resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==} engines: {node: '>= 10.x'} dev: false - /stream-shift/1.0.1: + /stream-shift@1.0.1: resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} dev: false - /string_decoder/1.3.0: + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: false - /strip-ansi/6.0.1: + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 dev: true - /strip-json-comments/3.1.1: + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true - /supports-color/7.2.0: + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: false + + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 dev: true - /text-table/0.2.0: + /text-table@0.2.0: resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} dev: true - /thread-stream/0.15.1: + /thread-stream@0.15.1: resolution: {integrity: sha512-SCnuIT27gc2h/F/RY2peuC7brgLy+1oXU+7yOIAITz1z5stDpXCF5rAoFcykjuK6ifbTlKAHL7Ccq8oc5Btv1w==} dependencies: real-require: 0.1.0 dev: false - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - /tr46/0.0.3: + /touch@3.1.0: + resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} + hasBin: true + dependencies: + nopt: 1.0.10 + dev: false + + /tr46@0.0.3: resolution: {integrity: sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=} dev: false - /ts-mixer/6.0.1: - resolution: {integrity: sha512-hvE+ZYXuINrx6Ei6D6hz+PTim0Uf++dYbK9FFifLNwQj+RwKquhQpn868yZsCtJYiclZF1u8l6WZxxKi+vv7Rg==} + /ts-mixer@6.0.4: + resolution: {integrity: sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==} dev: false - /ts-pattern/4.0.2: - resolution: {integrity: sha512-eHqR/7A6fcw05vCOfnL6RwgGJbVi9G/YHTdYdjYmElhDdJ1SMn7pWs+6+YuxygaFwQS/g+cIDlu+UD8IVpur1A==} + /ts-node@10.9.2(@types/node@17.0.45)(typescript@4.9.5): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 17.0.45 + acorn: 8.7.0 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 4.9.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 dev: true - /ts-toolbelt/9.6.0: + /ts-toolbelt@9.6.0: resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} dev: true - /tslib/1.14.1: + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.3.1: + /tslib@2.3.1: resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} dev: false - /tsutils/3.21.0_typescript@4.7.0-beta: + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: false + + /tsutils@3.21.0(typescript@4.9.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.7.0-beta + typescript: 4.9.5 dev: true - /type-check/0.4.0: + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true - /type-fest/0.20.2: + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /typescript-memoize/1.1.0: + /typescript-memoize@1.1.0: resolution: {integrity: sha512-LQPKVXK8QrBBkL/zclE6YgSWn0I8ew5m0Lf+XL00IwMhlotqRLlzHV+BRrljVQIc+NohUAuQP7mg4HQwrx5Xbg==} dev: false - /typescript/4.7.0-beta: - resolution: {integrity: sha512-m+CNL8lzHyHDxYYDTI+pm5hw5/bufYVGan2bokPyJY/y9C/4W/PCWMtYZ0vV9fLXbEL57elMeoaz9Evxs8UQ+A==} + /typescript@4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true dev: true - /uri-js/4.4.1: + /undefsafe@2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + dev: false + + /undici@5.27.2: + resolution: {integrity: sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.1.1 + dev: false + + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.1.1 dev: true - /util-deprecate/1.0.2: + /util-deprecate@1.0.2: resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} dev: false - /v8-compile-cache/2.3.0: + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + dev: false + + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true + + /v8-compile-cache@2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true - /webidl-conversions/3.0.1: + /webidl-conversions@3.0.1: resolution: {integrity: sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=} dev: false - /whatwg-url/5.0.0: + /whatwg-url@5.0.0: resolution: {integrity: sha1-lmRU6HZUYuN2RNNib2dCzotwll0=} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 dev: false - /which/2.0.2: + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true dependencies: isexe: 2.0.0 - /word-wrap/1.2.3: + /word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} dev: true - /wrappy/1.0.2: - resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /ws/8.5.0: - resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + /ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true @@ -1347,10 +1943,22 @@ packages: optional: true dev: false - /yallist/4.0.0: + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /zod/3.14.3: + /yarn@1.22.22: + resolution: {integrity: sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==} + engines: {node: '>=4.0.0'} + hasBin: true + requiresBuild: true + dev: false + + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true + + /zod@3.14.3: resolution: {integrity: sha512-OzwRCSXB1+/8F6w6HkYHdbuWysYWnAF4fkRgKDcSFc54CE+Sv0rHXKfeNUReGCrHukm1LNpi6AYeXotznhYJbQ==} dev: false diff --git a/src/commands/fun/doggo.ts b/src/commands/fun/doggo.ts index 10a3d2e..a24af2a 100644 --- a/src/commands/fun/doggo.ts +++ b/src/commands/fun/doggo.ts @@ -16,7 +16,6 @@ export const command = new Command("doggo", "Get cute doggos.") .setTitle("Bam someone got doggoed") .setImage(yeeeee.url) .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), - ], }); }); \ No newline at end of file diff --git a/src/commands/orders/worker/editstatus.ts b/src/commands/orders/worker/editstatus.ts index da68368..3806767 100644 --- a/src/commands/orders/worker/editstatus.ts +++ b/src/commands/orders/worker/editstatus.ts @@ -1,57 +1,56 @@ /* eslint-disable indent */ -import { OrderStatus, matchActiveOrder } from "../../../database/orders"; -import { text } from "../../../providers/config"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { CommandInteraction } from "discord.js"; -import { db } from "../../../database/database"; +import {matchActiveOrder, OrderStatus} from "../../../database/orders"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import {CommandInteraction} from "discord.js"; +import {db} from "../../../database/database"; export const command = new Command( - "editstatus", - "Edit the status of an order." + "editstatus", + "Edit the status of an order." ) - .addPermission(permissions.moderator) - .addOption("string", (option) => - option - .setName("order_id") - .setDescription("The ID of the order to edit.") - .setRequired(true) - ) - .addOption("string", (option) => - option - .setName("status") - .setDescription("The status to set.") - .setRequired(true) - .addChoices( - { name: "Preparing", value: OrderStatus.Preparing }, - { name: "Unprepared", value: OrderStatus.Unprepared }, - { name: "PendingDelivery", value: OrderStatus.PendingDelivery }, - { name: "Deleted", value: OrderStatus.Deleted }, - // Add other choices here if needed - ) - ) - .setExecutor(async (int: CommandInteraction) => { - const orderId = int.options.getString("order_id", true); - const newStatus = int.options.getString("status", true); + .addPermission(permissions.moderator) + .addOption("string", (option) => + option + .setName("order_id") + .setDescription("The ID of the order to edit.") + .setRequired(true) + ) + .addOption("string", (option) => + option + .setName("status") + .setDescription("The status to set.") + .setRequired(true) + .addChoices( + {name: "Preparing", value: OrderStatus.Preparing}, + {name: "Unprepared", value: OrderStatus.Unprepared}, + {name: "PendingDelivery", value: OrderStatus.PendingDelivery}, + {name: "Deleted", value: OrderStatus.Deleted}, + // Add other choices here if needed + ) + ) + .setExecutor(async (int: CommandInteraction) => { + const orderId = int.options.get("order_id", true).value as string; + const newStatus = int.options.get("status", true).value as OrderStatus; - const order = await matchActiveOrder(orderId); - if (!order) { - await int.reply({ content: "Order not found for the specified ID." }); - return; - } + const order = await matchActiveOrder(orderId); + if (!order) { + await int.reply({content: "Order not found for the specified ID."}); + return; + } - await db.orders.update({ - where: { - id: order.id, - }, - data: { - status: newStatus, - }, - }); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: newStatus, + }, + }); - await int.reply({ - content: `Order status for order (${orderId}) has been updated to ${newStatus}.`, - }); - }); + await int.reply({ + content: `Order status for order (${orderId}) has been updated to ${newStatus}.`, + }); + }); -module.exports = { command }; +module.exports = {command}; diff --git a/src/database/blacklist.ts b/src/database/blacklist.ts index 47b643d..b4508c8 100644 --- a/src/database/blacklist.ts +++ b/src/database/blacklist.ts @@ -1,13 +1,24 @@ -import type { UserResolvable } from "discord.js"; -import { IllegalStateError } from "../utils/error"; -import { resolveUserId } from "../utils/id"; -import { db } from "./database"; +import type {UserResolvable} from "discord.js"; +import {IllegalStateError} from "../utils/error"; +import {resolveUserId} from "../utils/id"; +import {db} from "./database"; +/** + * A set of blacklisted user IDs. + */ export const blacklist = new Set(); +/** + * Adds a user to the blacklist. + * @param user - The user to add to the blacklist. + * @param blacklister - The user who blacklisted the user. + * @param reason - The reason for blacklisting the user. + */ export const createBlacklist = async (user: UserResolvable, blacklister: UserResolvable, reason: string) => { blacklist.add(resolveUserId(user)); - await db.blacklist.create({ data: { id: resolveUserId(user), blacklister: resolveUserId(blacklister), reason } }); + await db.blacklist.create({data: {id: resolveUserId(user), blacklister: resolveUserId(blacklister), reason}}); }; -db.blacklist.findMany().then(b => b.map(v => blacklist.add(v.id))).catch(x => { throw new IllegalStateError(`Failed to fetch blacklists: ${x}`); }); \ No newline at end of file +db.blacklist.findMany().then(b => b.map(v => blacklist.add(v.id))).catch(x => { + throw new IllegalStateError(`Failed to fetch blacklists: ${x}`); +}); \ No newline at end of file diff --git a/src/database/database.ts b/src/database/database.ts index ec13b38..c2771d4 100644 --- a/src/database/database.ts +++ b/src/database/database.ts @@ -1,5 +1,8 @@ -import { PrismaClient } from "@prisma/client"; +import {PrismaClient} from "@prisma/client"; +/** + * who would've guessed, its the database + */ export const db = new PrismaClient(); //todo \ No newline at end of file diff --git a/src/database/order.ts b/src/database/order.ts index 52f8c64..5944d6a 100644 --- a/src/database/order.ts +++ b/src/database/order.ts @@ -1,173 +1,263 @@ -import type { Order, } from "@prisma/client"; -import { CafeStatus, CafeOrders, PrismaClient } from "@prisma/client"; -import type { Client, User, UserResolvable, Channel } from "discord.js"; -import { EmbedBuilder, GuildChannel } from "discord.js"; -import { client } from "../providers/client"; -import { text } from "../providers/config"; -import { resolveUserId } from "../utils/id"; -import { format } from "../utils/string"; -import { db } from "./database"; -import type { EmbedField } from "discord.js"; -const prisma = new PrismaClient(); -export const activeCafeStatus = [ - CafeStatus.Unprepared, - CafeStatus.Preparing, - CafeStatus.Brewing, - CafeStatus.Fermenting, - CafeStatus.PendingDelivery, - CafeStatus.Delivering, -]; - -export const hasActiveOrder = async (user: UserResolvable) => - (await db.cafeOrders.count({ - where: { - user: resolveUserId(user), - status: { in: activeCafeStatus }, - }, - })) > 0; - -export const getUserActiveOrder = async (user: UserResolvable) => - await db.cafeOrders.findFirst({ - where: { - user: resolveUserId(user), - status: { in: activeCafeStatus }, - }, - }); - -export const orderExists = async (id: string) => - (await db.cafeOrders.count({ - where: { - id, - }, - })) > 0; - -const orderIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); - -export const generateOrderId = async () => { - for (let i = 0; i < 1000; i++) { - const generated = [...Array(7)].map(() => orderIdChars[Math.floor(Math.random() * orderIdChars.length)]).join(""); - if (!(await orderExists(generated))) return generated; - } - throw new Error("This error should never appear. If it does, please buy a lottery ticket."); -}; - -const dishIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); - -export const generateDishId = async () => { - for (let i = 0; i < 1000; i++) { - const generated = [...Array(7)].map(() => dishIdChars[Math.floor(Math.random() * dishIdChars.length)]).join(""); - if (!(await dishExists(generated))) return generated; - } - throw new Error("Failed to generate a unique dish ID."); -}; - -const dishExists = async (id: string) => - (await prisma.dishes.count({ - where: { - id, - }, - })) > 0; - - -export const getAllActiveOrders = async () => db.cafeOrders.findMany({ where: { status: { in: activeCafeStatus } } }); - -export const matchCafeStatus = async (id: string, status: CafeStatus) => - db.cafeOrders.findFirst({ where: { id: { startsWith: id }, status } }); - -export const matchActiveOrder = async (id: string) => - db.cafeOrders.findFirst({ where: { id: { startsWith: id.toLowerCase() }, status: { in: activeCafeStatus } } }); - -export const getClaimedOrder = async (user: UserResolvable) => - db.cafeOrders.findFirst({ where: { claimer: resolveUserId(user), status: CafeStatus.Preparing } }); - -export const getOrder = async (id: string) => - db.cafeOrders.findFirst({ where: { id } }); - -export const getLatestOrder = async (user: UserResolvable) => - db.cafeOrders.findFirst({ where: { user: resolveUserId(user), status: CafeStatus.Delivered }, orderBy: { createdAt: "desc" } }); - -const embedText = text.common.orderEmbed; -const embedFields = text.common.orderEmbed.fields; - -const rawOrderEmbed = (order: Order) => - new EmbedBuilder() - .setTitle(format(embedText.title, order.id)) - .setDescription(format(embedText.description, order.id)) - .addFields({ name: format(embedFields.id), value: `\`${order.id}\``, inline: true }) - .addFields({ name: embedFields.details, value: `${order.details}`, inline: true }) - .addFields({ name: embedFields.status, value: `${text.statuses[order.status] ?? order.status}`, inline: true }) - .addFields({ name: embedFields.orderedAt, value: ` ()`, inline: true }) - .setTimestamp(); - - -const formatIdentified = (identified: { id: string; name: string } | string) => - format(text.common.identified, typeof identified === "string" ? { id: identified, name: "Unknown" } : identified); -const formatUser = (user: User | string) => - formatIdentified(typeof user === "string" ? user : { name: user.username, id: user.id }); -const formatChannel = (channel: Channel | string) => - formatIdentified( - channel instanceof GuildChannel - ? { name: `#${channel.name}`, id: channel.id } - : typeof channel === "string" - ? channel - : channel.id - ); - -export const orderEmbedSync = async (order: CafeOrders, client: Client) => { - const embed = rawOrderEmbed(order) - .addFields({ name: embedFields.customer, value: formatUser((await client.users.fetch(order.user).catch(() => null)) ?? order.user), inline: true }) - .addFields({ name: embedFields.channel, value: formatChannel((await client.channels.fetch(order.channel).catch(() => null)) ?? order.channel), inline: true }) - .addFields({ name: embedFields.guild, value: formatIdentified((await client.guilds.fetch(order.guild).catch(() => null)) ?? order.guild), inline: true }); - if (order.claimer) - embed.addFields({ name: embedFields.claimer, value: formatUser((await client.users.fetch(order.claimer).catch(() => null)) ?? order.claimer), inline: true }); - return embed; -}; - -const nulli = () => null; - -export const orderEmbedAsync = async (order: CafeOrders, client: Client): Promise => { - const user = await client.users.fetch(order.user).catch(() => null); - const channel = await client.channels.fetch(order.channel).catch(() => null); - const guild = await client.guilds.fetch(order.guild).catch(() => null); - - const embed = rawOrderEmbed(order) - .addFields( - { name: "Customer", value: formatUser(user ?? order.user), inline: true } - ) - .addFields( - { name: "Channel", value: formatChannel(channel ?? order.channel), inline: true } - ) - .addFields( - { name: "Guild", value: formatIdentified(guild ?? order.guild), inline: true } - ); - - if (order.claimer) { - const claimer = await client.users.fetch(order.claimer).catch(() => null); - if (claimer) { - embed.addFields( - { name: "Claimer", value: formatUser(claimer), inline: true } - ); - } - } - - return embed; -}; -export const requiredOrderPlaceholders = ["mention", "image"]; - -export const orderPlaceholders = async (order: CafeOrders) => Object.assign(Object.create(null), { - preparer: order.claimer ? formatUser((await client.users.fetch(order.claimer).catch(nulli)) ?? order.claimer) : "Unknown", - deliverer: order.deliverer ? formatUser((await client.users.fetch(order.deliverer).catch(nulli)) ?? order.deliverer) : "Unknown", - id: order.id, - details: order.details, - mention: `<@${order.user}>`, - user: formatUser((await client.users.fetch(order.user).catch(nulli)) ?? order.user), - image: order.image ?? "No image was found, this is very bad." -}); - -export const OrderFlags = { - FeedbackGiven: 0b1, - Tipped: 0b10, - Rated: 0b100, -}; - -export { CafeStatus }; +import type {CafeOrders, Orders} from "@prisma/client"; +import {CafeStatus, PrismaClient} from "@prisma/client"; +import type {Channel, Client, User, UserResolvable} from "discord.js"; +import {EmbedBuilder, GuildChannel} from "discord.js"; +import {client} from "../providers/client"; +import {text} from "../providers/config"; +import {resolveUserId} from "../utils/id"; +import {format} from "../utils/string"; +import {db} from "./database"; + + +const prisma = new PrismaClient(); + +/** + * An array of statuses that are considered active. + */ +export const activeCafeStatus = [ + CafeStatus.Unprepared, + CafeStatus.Preparing, + CafeStatus.Brewing, + CafeStatus.Fermenting, + CafeStatus.PendingDelivery, + CafeStatus.Delivering, +]; + +/** + * Check if a user has at least one active order. + * @param user - A user resolvable. + */ +export const hasActiveOrder = async (user: UserResolvable) => + (await db.cafeOrders.count({ + where: { + user: resolveUserId(user), + status: {in: activeCafeStatus}, + }, + })) > 0; + +/** + * Gets the first active order of a user. + * @param user - A user resolvable. + */ +export const getUserActiveOrder = async (user: UserResolvable) => + await db.cafeOrders.findFirst({ + where: { + user: resolveUserId(user), + status: {in: activeCafeStatus}, + }, + }); + +/** + * Check if at least one order exists with the given ID. + * @param id - The ID to check. + */ +export const orderExists = async (id: string) => + (await db.cafeOrders.count({ + where: { + id, + }, + })) > 0; + +const orderIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); + +export const generateOrderId = async () => { + for (let i = 0; i < 1000; i++) { + const generated = [...Array(7)].map(() => orderIdChars[Math.floor(Math.random() * orderIdChars.length)]).join(""); + if (!(await orderExists(generated))) return generated; + } + throw new Error("This error should never appear. If it does, please buy a lottery ticket."); +}; + +const dishIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); + +/** + * Creates a new unique dish ID. + */ +export const generateDishId = async () => { + for (let i = 0; i < 1000; i++) { + const generated = [...Array(7)].map(() => dishIdChars[Math.floor(Math.random() * dishIdChars.length)]).join(""); + if (!(await dishExists(generated))) return generated; + } + throw new Error("Failed to generate a unique dish ID."); +}; + +/** + * Check if a dish exists with the given ID. + * @param id - The ID to check. + */ +const dishExists = async (id: string) => + (await prisma.dishes.count({ + where: { + id, + }, + })) > 0; + + +/** + * Get all active orders. + */ +export const getAllActiveOrders = async () => db.cafeOrders.findMany({where: {status: {in: activeCafeStatus}}}); + +/** + * Gets all orders of a current status. + * @param id - Checks for orders starting with this ID. + * @param status - The status to check for. + */ +export const matchCafeStatus = async (id: string, status: CafeStatus) => + db.cafeOrders.findFirst({where: {id: {startsWith: id}, status}}); + +/** + * Gets the first active order that starts with the given ID. + * @param id + */ +export const matchActiveOrder = async (id: string) => + db.cafeOrders.findFirst({where: {id: {startsWith: id.toLowerCase()}, status: {in: activeCafeStatus}}}); + +/** + * Gets the first active order from a user. + * @param user - A user resolvable. + */ +export const getClaimedOrder = async (user: UserResolvable) => + db.cafeOrders.findFirst({where: {claimer: resolveUserId(user), status: CafeStatus.Preparing}}); + +/** + * Gets the first active order with a given ID. + * @param id - The ID to check. + */ +export const getOrder = async (id: string) => + db.cafeOrders.findFirst({where: {id}}); + +/** + * Gets the latest delivered order of a user. + * @param user - A user resolvable. + */ +export const getLatestOrder = async (user: UserResolvable) => + db.cafeOrders.findFirst({ + where: {user: resolveUserId(user), status: CafeStatus.Delivered}, + orderBy: {createdAt: "desc"} + }); + +const embedText = text.common.orderEmbed; +const embedFields = text.common.orderEmbed.fields; + +const rawOrderEmbed = (order: Orders) => + new EmbedBuilder() + .setTitle(format(embedText.title, order.id)) + .setDescription(format(embedText.description, order.id)) + .addFields({name: format(embedFields.id), value: `\`${order.id}\``, inline: true}) + .addFields({name: embedFields.details, value: `${order.details}`, inline: true}) + .addFields({name: embedFields.status, value: `${text.statuses[order.status] ?? order.status}`, inline: true}) + .addFields({ + name: embedFields.orderedAt, + value: ` ()`, + inline: true + }) + .setTimestamp(); + + +const formatIdentified = (identified: { id: string; name: string } | string) => + format(text.common.identified, typeof identified === "string" ? {id: identified, name: "Unknown"} : identified); +const formatUser = (user: User | string) => + formatIdentified(typeof user === "string" ? user : {name: user.username, id: user.id}); +const formatChannel = (channel: Channel | string) => + formatIdentified( + channel instanceof GuildChannel + ? {name: `#${channel.name}`, id: channel.id} + : typeof channel === "string" + ? channel + : channel.id + ); + +/** + * Creates an order embed with the given order synchronously. + * @param order - The order to create the embed with. + * @param client - The client to fetch users and channels with. + */ +export const orderEmbedSync = async (order: CafeOrders, client: Client) => { + const embed = rawOrderEmbed(order) + .addFields({ + name: embedFields.customer, + value: formatUser((await client.users.fetch(order.user).catch(() => null)) ?? order.user), + inline: true + }) + .addFields({ + name: embedFields.channel, + value: formatChannel((await client.channels.fetch(order.channel).catch(() => null)) ?? order.channel), + inline: true + }) + .addFields({ + name: embedFields.guild, + value: formatIdentified((await client.guilds.fetch(order.guild).catch(() => null)) ?? order.guild), + inline: true + }); + if (order.claimer) + embed.addFields({ + name: embedFields.claimer, + value: formatUser((await client.users.fetch(order.claimer).catch(() => null)) ?? order.claimer), + inline: true + }); + return embed; +}; + +const nulli = () => null; + +/** + * Creates an order embed with the given order asynchronously. + * @param order - The order to create the embed with. + * @param client - The client to fetch users and channels with. + */ +export const orderEmbedAsync = async (order: CafeOrders, client: Client): Promise => { + const user = await client.users.fetch(order.user).catch(() => null); + const channel = await client.channels.fetch(order.channel).catch(() => null); + const guild = await client.guilds.fetch(order.guild).catch(() => null); + + const embed = rawOrderEmbed(order) + .addFields( + {name: "Customer", value: formatUser(user ?? order.user), inline: true} + ) + .addFields( + {name: "Channel", value: formatChannel(channel ?? order.channel), inline: true} + ) + .addFields( + {name: "Guild", value: formatIdentified(guild ?? order.guild), inline: true} + ); + + if (order.claimer) { + const claimer = await client.users.fetch(order.claimer).catch(() => null); + if (claimer) { + embed.addFields( + {name: "Claimer", value: formatUser(claimer), inline: true} + ); + } + } + + return embed; +}; + + +export const requiredOrderPlaceholders = ["mention", "image"]; + +/** + * Creates placeholders for an order. + * @param order - The order to create placeholders for. + */ +export const orderPlaceholders = async (order: CafeOrders) => Object.assign(Object.create(null), { + preparer: order.claimer ? formatUser((await client.users.fetch(order.claimer).catch(nulli)) ?? order.claimer) : "Unknown", + deliverer: order.deliverer ? formatUser((await client.users.fetch(order.deliverer).catch(nulli)) ?? order.deliverer) : "Unknown", + id: order.id, + details: order.details, + mention: `<@${order.user}>`, + user: formatUser((await client.users.fetch(order.user).catch(nulli)) ?? order.user), + image: order.image ?? "No image was found, this is very bad." +}); + +/** + * Binary flags for order statuses. + */ +export const OrderFlags = { + FeedbackGiven: 0b1, + Tipped: 0b10, + Rated: 0b100, +}; + +export {CafeStatus}; diff --git a/src/database/orders.ts b/src/database/orders.ts index 20bc00f..c8a125c 100644 --- a/src/database/orders.ts +++ b/src/database/orders.ts @@ -1,172 +1,263 @@ - -import { OrderStatus, Orders, PrismaClient } from "@prisma/client"; -import type { Client, User, UserResolvable, Channel } from "discord.js"; -import { EmbedBuilder, GuildChannel } from "discord.js"; -import { client } from "../providers/client"; -import { text } from "../providers/config"; -import { resolveUserId } from "../utils/id"; -import { format } from "../utils/string"; -import { db } from "./database"; -const prisma = new PrismaClient(); -export const activeOrderStatus = [ - OrderStatus.Unprepared, - OrderStatus.Preparing, - OrderStatus.Brewing, - OrderStatus.Fermenting, - OrderStatus.PendingDelivery, - OrderStatus.Delivering, -]; - -export const hasActiveOrder = async (user: UserResolvable) => - (await db.orders.count({ - where: { - user: resolveUserId(user), - status: { in: activeOrderStatus }, - }, - })) > 0; - -export const getUserActiveOrder = async (user: UserResolvable) => - await db.orders.findFirst({ - where: { - user: resolveUserId(user), - status: { in: activeOrderStatus }, - }, - }); - -export const orderExists = async (id: string) => - (await db.orders.count({ - where: { - id, - }, - })) > 0; - -const orderIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); - -export const generateOrderId = async () => { - for (let i = 0; i < 1000; i++) { - const generated = [...Array(7)].map(() => orderIdChars[Math.floor(Math.random() * orderIdChars.length)]).join(""); - if (!(await orderExists(generated))) return generated; - } - throw new Error("This error should never appear. If it does, please buy a lottery ticket."); -}; - -const dishIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); - -export const generateDishId = async () => { - for (let i = 0; i < 1000; i++) { - const generated = [...Array(7)].map(() => dishIdChars[Math.floor(Math.random() * dishIdChars.length)]).join(""); - if (!(await dishExists(generated))) return generated; - } - throw new Error("Failed to generate a unique dish ID."); -}; - -const dishExists = async (id: string) => - (await prisma.dishes.count({ - where: { - id, - }, - })) > 0; - - -export const getAllActiveOrders = async () => db.orders.findMany({ where: { status: { in: activeOrderStatus } } }); - -export const matchOrderStatus = async (id: string, status: OrderStatus) => - db.orders.findFirst({ where: { id: { startsWith: id }, status } }); - -export const matchActiveOrder = async (id: string) => - db.orders.findFirst({ where: { id: { startsWith: id.toLowerCase() }, status: { in: activeOrderStatus } } }); - -export const getClaimedOrder = async (user: UserResolvable) => - db.orders.findFirst({ where: { claimer: resolveUserId(user), status: OrderStatus.Preparing } }); - -export const getOrder = async (id: string) => - db.orders.findFirst({ where: { id } }); - -export const getLatestOrder = async (user: UserResolvable) => - db.orders.findFirst({ where: { user: resolveUserId(user), status: OrderStatus.Delivered }, orderBy: { createdAt: "desc" } }); - -const embedText = text.common.orderEmbed; -const embedFields = text.common.orderEmbed.fields; - -const rawOrderEmbed = (order: Orders) => - new EmbedBuilder() - .setTitle(format(embedText.title, order.id)) - .setDescription(format(embedText.description, order.id)) - .addFields({ name: format(embedFields.id), value: `\`${order.id}\``, inline: true }) - .addFields({ name: embedFields.details, value: `${order.details}`, inline: true }) - .addFields({ name: embedFields.status, value: `${text.statuses[order.status] ?? order.status}`, inline: true }) - .addFields({ name: embedFields.orderedAt, value: ` ()`, inline: true }) - .setTimestamp(); - - -const formatIdentified = (identified: { id: string; name: string } | string) => - format(text.common.identified, typeof identified === "string" ? { id: identified, name: "Unknown" } : identified); -const formatUser = (user: User | string) => - formatIdentified(typeof user === "string" ? user : { name: user.username, id: user.id }); -const formatChannel = (channel: Channel | string) => - formatIdentified( - channel instanceof GuildChannel - ? { name: `#${channel.name}`, id: channel.id } - : typeof channel === "string" - ? channel - : channel.id - ); - -export const orderEmbedSync = async (order: Orders, client: Client) => { - const embed = rawOrderEmbed(order) - .addFields({ name: embedFields.customer, value: formatUser((await client.users.fetch(order.user).catch(() => null)) ?? order.user), inline: true }) - .addFields({ name: embedFields.channel, value: formatChannel((await client.channels.fetch(order.channel).catch(() => null)) ?? order.channel), inline: true }) - .addFields({ name: embedFields.guild, value: formatIdentified((await client.guilds.fetch(order.guild).catch(() => null)) ?? order.guild), inline: true }); - if (order.claimer) - embed.addFields({ name: embedFields.claimer, value: formatUser((await client.users.fetch(order.claimer).catch(() => null)) ?? order.claimer), inline: true }); - return embed; -}; - -const nulli = () => null; - -export const orderEmbedAsync = async (order: Orders, client: Client): Promise => { - const user = await client.users.fetch(order.user).catch(() => null); - const channel = await client.channels.fetch(order.channel).catch(() => null); - const guild = await client.guilds.fetch(order.guild).catch(() => null); - - const embed = rawOrderEmbed(order) - .addFields( - { name: "Customer", value: formatUser(user ?? order.user), inline: true } - ) - .addFields( - { name: "Channel", value: formatChannel(channel ?? order.channel), inline: true } - ) - .addFields( - { name: "Guild", value: formatIdentified(guild ?? order.guild), inline: true } - ); - - if (order.claimer) { - const claimer = await client.users.fetch(order.claimer).catch(() => null); - if (claimer) { - embed.addFields( - { name: "Claimer", value: formatUser(claimer), inline: true } - ); - } - } - - return embed; -}; -export const requiredOrderPlaceholders = ["mention", "image"]; - -export const orderPlaceholders = async (order: Orders) => Object.assign(Object.create(null), { - preparer: order.claimer ? formatUser((await client.users.fetch(order.claimer).catch(nulli)) ?? order.claimer) : "Unknown", - deliverer: order.deliverer ? formatUser((await client.users.fetch(order.deliverer).catch(nulli)) ?? order.deliverer) : "Unknown", - id: order.id, - details: order.details, - mention: `<@${order.user}>`, - user: formatUser((await client.users.fetch(order.user).catch(nulli)) ?? order.user), - image: order.image ?? "No image was found, this is very bad." -}); - -export const OrderFlags = { - FeedbackGiven: 0b1, - Tipped: 0b10, - Rated: 0b100, -}; - -export { OrderStatus }; +import type {CafeOrders, Orders} from "@prisma/client"; +import {OrderStatus, CafeStatus, PrismaClient} from "@prisma/client"; +import type {Channel, Client, User, UserResolvable} from "discord.js"; +import {EmbedBuilder, GuildChannel} from "discord.js"; +import {client} from "../providers/client"; +import {text} from "../providers/config"; +import {resolveUserId} from "../utils/id"; +import {format} from "../utils/string"; +import {db} from "./database"; + + +const prisma = new PrismaClient(); + +/** + * An array of statuses that are considered active. + */ +export const activeCafeStatus = [ + CafeStatus.Unprepared, + CafeStatus.Preparing, + CafeStatus.Brewing, + CafeStatus.Fermenting, + CafeStatus.PendingDelivery, + CafeStatus.Delivering, +]; + +/** + * Check if a user has at least one active order. + * @param user - A user resolvable. + */ +export const hasActiveOrder = async (user: UserResolvable) => + (await db.cafeOrders.count({ + where: { + user: resolveUserId(user), + status: {in: activeCafeStatus}, + }, + })) > 0; + +/** + * Gets the first active order of a user. + * @param user - A user resolvable. + */ +export const getUserActiveOrder = async (user: UserResolvable) => + await db.cafeOrders.findFirst({ + where: { + user: resolveUserId(user), + status: {in: activeCafeStatus}, + }, + }); + +/** + * Check if at least one order exists with the given ID. + * @param id - The ID to check. + */ +export const orderExists = async (id: string) => + (await db.cafeOrders.count({ + where: { + id, + }, + })) > 0; + +const orderIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); + +export const generateOrderId = async () => { + for (let i = 0; i < 1000; i++) { + const generated = [...Array(7)].map(() => orderIdChars[Math.floor(Math.random() * orderIdChars.length)]).join(""); + if (!(await orderExists(generated))) return generated; + } + throw new Error("This error should never appear. If it does, please buy a lottery ticket."); +}; + +const dishIdChars = "abcdefghijklmnopqrstuvwxyz1234567890".split(""); + +/** + * Creates a new unique dish ID. + */ +export const generateDishId = async () => { + for (let i = 0; i < 1000; i++) { + const generated = [...Array(7)].map(() => dishIdChars[Math.floor(Math.random() * dishIdChars.length)]).join(""); + if (!(await dishExists(generated))) return generated; + } + throw new Error("Failed to generate a unique dish ID."); +}; + +/** + * Check if a dish exists with the given ID. + * @param id - The ID to check. + */ +const dishExists = async (id: string) => + (await prisma.dishes.count({ + where: { + id, + }, + })) > 0; + + +/** + * Get all active orders. + */ +export const getAllActiveOrders = async () => db.cafeOrders.findMany({where: {status: {in: activeCafeStatus}}}); + +/** + * Gets all orders of a current status. + * @param id - Checks for orders starting with this ID. + * @param status - The status to check for. + */ +export const matchCafeStatus = async (id: string, status: CafeStatus) => + db.cafeOrders.findFirst({where: {id: {startsWith: id}, status}}); + +/** + * Gets the first active order that starts with the given ID. + * @param id + */ +export const matchActiveOrder = async (id: string) => + db.cafeOrders.findFirst({where: {id: {startsWith: id.toLowerCase()}, status: {in: activeCafeStatus}}}); + +/** + * Gets the first active order from a user. + * @param user - A user resolvable. + */ +export const getClaimedOrder = async (user: UserResolvable) => + db.cafeOrders.findFirst({where: {claimer: resolveUserId(user), status: CafeStatus.Preparing}}); + +/** + * Gets the first active order with a given ID. + * @param id - The ID to check. + */ +export const getOrder = async (id: string) => + db.cafeOrders.findFirst({where: {id}}); + +/** + * Gets the latest delivered order of a user. + * @param user - A user resolvable. + */ +export const getLatestOrder = async (user: UserResolvable) => + db.cafeOrders.findFirst({ + where: {user: resolveUserId(user), status: CafeStatus.Delivered}, + orderBy: {createdAt: "desc"} + }); + +const embedText = text.common.orderEmbed; +const embedFields = text.common.orderEmbed.fields; + +const rawOrderEmbed = (order: Orders) => + new EmbedBuilder() + .setTitle(format(embedText.title, order.id)) + .setDescription(format(embedText.description, order.id)) + .addFields({name: format(embedFields.id), value: `\`${order.id}\``, inline: true}) + .addFields({name: embedFields.details, value: `${order.details}`, inline: true}) + .addFields({name: embedFields.status, value: `${text.statuses[order.status] ?? order.status}`, inline: true}) + .addFields({ + name: embedFields.orderedAt, + value: ` ()`, + inline: true + }) + .setTimestamp(); + + +const formatIdentified = (identified: { id: string; name: string } | string) => + format(text.common.identified, typeof identified === "string" ? {id: identified, name: "Unknown"} : identified); +const formatUser = (user: User | string) => + formatIdentified(typeof user === "string" ? user : {name: user.username, id: user.id}); +const formatChannel = (channel: Channel | string) => + formatIdentified( + channel instanceof GuildChannel + ? {name: `#${channel.name}`, id: channel.id} + : typeof channel === "string" + ? channel + : channel.id + ); + +/** + * Creates an order embed with the given order synchronously. + * @param order - The order to create the embed with. + * @param client - The client to fetch users and channels with. + */ +export const orderEmbedSync = async (order: CafeOrders, client: Client) => { + const embed = rawOrderEmbed(order) + .addFields({ + name: embedFields.customer, + value: formatUser((await client.users.fetch(order.user).catch(() => null)) ?? order.user), + inline: true + }) + .addFields({ + name: embedFields.channel, + value: formatChannel((await client.channels.fetch(order.channel).catch(() => null)) ?? order.channel), + inline: true + }) + .addFields({ + name: embedFields.guild, + value: formatIdentified((await client.guilds.fetch(order.guild).catch(() => null)) ?? order.guild), + inline: true + }); + if (order.claimer) + embed.addFields({ + name: embedFields.claimer, + value: formatUser((await client.users.fetch(order.claimer).catch(() => null)) ?? order.claimer), + inline: true + }); + return embed; +}; + +const nulli = () => null; + +/** + * Creates an order embed with the given order asynchronously. + * @param order - The order to create the embed with. + * @param client - The client to fetch users and channels with. + */ +export const orderEmbedAsync = async (order: CafeOrders, client: Client): Promise => { + const user = await client.users.fetch(order.user).catch(() => null); + const channel = await client.channels.fetch(order.channel).catch(() => null); + const guild = await client.guilds.fetch(order.guild).catch(() => null); + + const embed = rawOrderEmbed(order) + .addFields( + {name: "Customer", value: formatUser(user ?? order.user), inline: true} + ) + .addFields( + {name: "Channel", value: formatChannel(channel ?? order.channel), inline: true} + ) + .addFields( + {name: "Guild", value: formatIdentified(guild ?? order.guild), inline: true} + ); + + if (order.claimer) { + const claimer = await client.users.fetch(order.claimer).catch(() => null); + if (claimer) { + embed.addFields( + {name: "Claimer", value: formatUser(claimer), inline: true} + ); + } + } + + return embed; +}; + + +export const requiredOrderPlaceholders = ["mention", "image"]; + +/** + * Creates placeholders for an order. + * @param order - The order to create placeholders for. + */ +export const orderPlaceholders = async (order: CafeOrders) => Object.assign(Object.create(null), { + preparer: order.claimer ? formatUser((await client.users.fetch(order.claimer).catch(nulli)) ?? order.claimer) : "Unknown", + deliverer: order.deliverer ? formatUser((await client.users.fetch(order.deliverer).catch(nulli)) ?? order.deliverer) : "Unknown", + id: order.id, + details: order.details, + mention: `<@${order.user}>`, + user: formatUser((await client.users.fetch(order.user).catch(nulli)) ?? order.user), + image: order.image ?? "No image was found, this is very bad." +}); + +/** + * Binary flags for order statuses. + */ +export const OrderFlags = { + FeedbackGiven: 0b1, + Tipped: 0b10, + Rated: 0b100, +}; + +export {OrderStatus}; \ No newline at end of file diff --git a/src/events/ExpCreate.ts b/src/events/ExpCreate.ts index d4435e9..96b7d28 100644 --- a/src/events/ExpCreate.ts +++ b/src/events/ExpCreate.ts @@ -3,6 +3,11 @@ import { PrismaClient } from "@prisma/client"; import { client } from "../providers/client"; +/** + * This event handler listens for messages and updates the user's XP and level. + * It also sends a message to the notification channel when a user levels up. + */ + const prisma = new PrismaClient(); // Map to hold cooldown Sets per guild diff --git a/src/events/ServerConfig.ts b/src/events/ServerConfig.ts index 22522d7..61f4986 100644 --- a/src/events/ServerConfig.ts +++ b/src/events/ServerConfig.ts @@ -5,7 +5,8 @@ interface GuildConfig { orderChannelId?: string; } -interface ServerConfig { + +export interface ServerConfig { guilds: Record; } @@ -23,7 +24,7 @@ export class ServerConfig { return JSON.parse(data); } catch (error) { console.error("Error loading config file:", error); - return { guilds: {} }; + return { guilds: {} } as ServerConfig; // todo: handle error cause this is not a valid config } } diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index 46d17a6..270a8ac 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -7,6 +7,12 @@ import {LifetimeMap} from "../structures/LifetimeMap"; import type {InteractionByType} from "../utils/components"; import type {Awaitable} from "discord.js"; +/** + * This file is responsible for handling interactions. + * It listens for interactionCreate events and executes the command if it is a command. + * It also checks if the user is blacklisted and if the command has the required permissions. + */ + export const componentCallbacks = new LifetimeMap Awaitable>( constants.interactionExpiryTimeMs ); diff --git a/src/events/ready.ts b/src/events/ready.ts index 7e43083..29a48b7 100644 --- a/src/events/ready.ts +++ b/src/events/ready.ts @@ -8,6 +8,11 @@ import { IllegalStateError } from "../utils/error"; import { parseText } from "../utils/string"; import { isNotInitialized, typedEntries, typedFromEntries } from "../utils/utils"; +/** + * This file contains the `ready` event handler. + * It loads commands, sets up the main guild, roles, channels, and emojis, and starts the order timeout checks. + */ + type TextObject = { [k: string]: string | string[] | TextObject; }; @@ -15,7 +20,7 @@ type TextObject = { client.on("ready", async () => { if (!client.isReady()) return; console.log(`Bot up as ${client.user.tag}!`); - loadCommands(); + await loadCommands(); if (isNotInitialized(mainGuild)) setMainGuild(await client.guilds.fetch(config.mainServer)); setMainRoles( typedFromEntries( @@ -45,7 +50,7 @@ client.on("ready", async () => { const parseTexts = (texts: TextObject) => { for (const k in texts) { if (typeof texts[k] === "string") texts[k] = parseText(texts[k] as string); - else if (typeof texts[k] === "object") parseTexts(texts[k] as TextObject); + else if (typeof texts[k] === "object") parseTexts(texts[k] as TextObject); // recursive call } }; parseTexts(text.commands); diff --git a/src/providers/client.ts b/src/providers/client.ts index aeb6407..65d602c 100644 --- a/src/providers/client.ts +++ b/src/providers/client.ts @@ -25,13 +25,14 @@ client.on("ready", () => { console.log(`Logged in as ${client.user?.tag}!`); client.user?.setPresence({ activities: [{ name: "We are online! Use slash cmds to order /order & You get money through /work" }], - status: "online", // Online , idle , dnd (Do Not Disturb), invisible , offline + status: "online", // "online", "idle", "dnd" (do not disturb), "invisible" }); }); /** - * Discord's REST API. + * Instance of Discord's API for the bot, use `discord-api-types` for REST routes * @see https://discord.js.org/docs/packages/rest/main + * @see https://discord-api-types.dev */ export const rest = new REST({ version: "9" }).setToken(config.token); diff --git a/src/providers/commandManager.ts b/src/providers/commandManager.ts index b1a7b35..f8d1d5c 100644 --- a/src/providers/commandManager.ts +++ b/src/providers/commandManager.ts @@ -17,8 +17,11 @@ import { notInitialized } from "../utils/utils"; import "./permissions"; const commandFolder = join(__dirname, "../commands/**/*.js").replaceAll(win32.sep, posix.sep); +/** Command registry for commands passed into registerCommands */ export const commandRegistry = new Collection(); +/** Command registry for all commands registered with the applicationCommandManager. */ export const applicationCommandRegistry = new Collection(); +/** The applicationCommandManager for the bot, either mainGuild's commands if in development or the client's application commands */ export let applicationCommandManager: | GuildApplicationCommandManager | ApplicationCommandManager< @@ -31,6 +34,10 @@ export let applicationCommandManager: null > = notInitialized("applicationCommandManager"); +/** + * Registers the commands with the applicationCommandManager. + * @param commands The commands to register. + */ const registerCommands = async (commands: Command[]) => { if (!client.isReady()) throw new Error("registerCommands called before client was ready."); applicationCommandManager = development ? mainGuild.commands : client.application!.commands; @@ -45,6 +52,11 @@ const registerCommands = async (commands: Command[]) => { applicationCommandRegistry.set(cmd.name, cmd); } }; + +/** + * Loads all commands from the commands folder. + * Registers them with the commandRegistry and the applicationCommandManager. + */ export const loadCommands = async (): Promise => { const commands: Command[] = []; const commandFiles = sync(commandFolder); diff --git a/src/providers/config.ts b/src/providers/config.ts index 7367cc6..15581cc 100644 --- a/src/providers/config.ts +++ b/src/providers/config.ts @@ -6,17 +6,28 @@ import type { NamedFormattable, PositionalFormattable } from "../utils/string"; import { formatZodError } from "../utils/zod"; import pc from "picocolors"; import { IllegalStateError } from "../utils/error"; -import { OrderStatus } from "@prisma/client"; +import {OrderStatus} from "@prisma/client"; + +/** A snowflake ID */ export const snowflake = z.union([ z.string().length(18).regex(/^\d+$/), z.string().length(19).regex(/^\d+$/), ]); +/** + * Zod schema for a formattable string with n placeholders in the form of `{}`. + * @param n - The number of placeholders. + */ const pFormattable = (n: T = 1 as T) => z.string().refine(x => x.split("{}").length - 1 === n, { message: `Formattable must contain ${n} placeholders`, }) as z.ZodType>; + +/** + * Zod schema for a formattable string with named placeholders in the form of `{key}`. + * @param keys - The keys of the placeholders as a list of string arguments. + */ const nFormattable = (...keys: T) => z.string().refine( x => { @@ -30,7 +41,7 @@ const nFormattable = (...keys: T) => { message: `Formattable must contain ${keys.join(", ")}`, }, - ) as z.ZodType>;; + ) as z.ZodType>; const textSchema = z .object({ @@ -176,7 +187,7 @@ const textSchema = z success: z.string(), alreadyRated: z.string(), invalidRating: z.string(), - }).passthrough(), + }), drinkingr: z.object({ drinks: z.array(pFormattable()), @@ -242,8 +253,16 @@ const constantsSchema = z }) .strict(); +/** + * The path to the config folder. + */ export const configFolder = path.join(__dirname, "../../config/"); +/** + * Scans a HJSON file with a given schema. + * @param schema - The schema to validate the file against. + * @param file - The file to scan. + */ export const parseHjson = (schema: z.ZodType, file: string) => { const sp = schema.safeParse(HJSON.parse(fs.readFileSync(path.join(configFolder, file), "utf-8"))); if (sp.success) return sp.data; @@ -252,6 +271,9 @@ export const parseHjson = (schema: z.ZodType, file: string) => { throw new IllegalStateError(`${file} is invalid.`); }; +/** The parsed text config file */ export const text = parseHjson(textSchema, "text.hjson"); +/** The parsed config file */ export const config = parseHjson(configSchema, "config.hjson"); +/** The parsed constants config file */ export const constants = parseHjson(constantsSchema, "constants.hjson"); diff --git a/src/providers/customCommands.ts b/src/providers/customCommands.ts index d1e87f6..f6788e3 100644 --- a/src/providers/customCommands.ts +++ b/src/providers/customCommands.ts @@ -1,29 +1,30 @@ import { Command } from "../structures/Command"; -import { permissions } from "../providers/permissions"; -import { CommandInteraction } from "discord.js"; +import { permissions } from "./permissions"; +import type { CommandInteraction } from "discord.js"; +// unused export const customCommands = { - enableXpCommand: new Command("enablexp", "Enable XP/levels in a channel.") - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - // Command logic... - }), + enableXpCommand: new Command("enablexp", "Enable XP/levels in a channel.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Command logic... + }), - disableXpCommand: new Command("disablexp", "Disable XP/levels in a channel.") - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - // Command logic... - }), + disableXpCommand: new Command("disablexp", "Disable XP/levels in a channel.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Command logic... + }), - enableLevelNotificationsCommand: new Command("enablelevelnotifications", "Enable level notifications in a channel.") - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - // Command logic... - }), + enableLevelNotificationsCommand: new Command("enablelevelnotifications", "Enable level notifications in a channel.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Command logic... + }), - disableLevelNotificationsCommand: new Command("disablelevelnotifications", "Disable level notifications.") - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - // Command logic... - }), + disableLevelNotificationsCommand: new Command("disablelevelnotifications", "Disable level notifications.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Command logic... + }), }; diff --git a/src/providers/discord.ts b/src/providers/discord.ts index 719a169..be69564 100644 --- a/src/providers/discord.ts +++ b/src/providers/discord.ts @@ -8,14 +8,21 @@ import { config } from "./config"; */ export let mainGuild = client.guilds.cache.get(config.mainServer) ?? notInitialized("mainGuild"); +/** Updates the main guild. */ export const setMainGuild = (guild: Guild) => (mainGuild = guild); +/** The guild's main emojis. */ export const mainEmojis: Record = {}; + +/** The guild's main channels. */ export const mainChannels = typedFromEntries( typedEntries(config.channels).map( x => [x[0], (client.channels.cache.get(x[1]) ?? notInitialized(`mainChannels.${x[0]}`)) as TextBasedChannel] as const ) ); + +/** The guild's main roles. */ export let mainRoles: Record = notInitialized("mainRoles"); +/** Updates the main roles. */ export const setMainRoles = (roles: typeof mainRoles) => (mainRoles = roles); \ No newline at end of file diff --git a/src/providers/drink.ts b/src/providers/drink.ts index 0dca1de..e4cd8a8 100644 --- a/src/providers/drink.ts +++ b/src/providers/drink.ts @@ -1,25 +1,34 @@ -// drink.ts - -import { PrismaClient, Drink } from "@prisma/client"; +import type { Drink } from "@prisma/client"; +import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); -// Function to retrieve all drinks +/** Retrieves all drinks from the database. */ export async function getAllDrinks(): Promise { - return prisma.drink.findMany(); + return prisma.drink.findMany(); } -// Function to create a new drink -export async function createDrink(data: Partial): Promise { - return prisma.drink.create({ data }); +/** + * Creates a drink. + * @param data - Drink data. The `createdAt` and `updatedAt` fields are optional, and will be set to the current timestamp if not provided. + */ +export async function createDrink(data: Omit & Partial>): Promise { + return prisma.drink.create({ data }); } -// Function to update an existing drink -export async function updateDrink(id: number, data: Partial): Promise { - return prisma.drink.update({ where: { id }, data }); +/** + * Retrieves a drink by its ID, and updates it. + * @param id - The ID of the drink to update. + * @param data - Drink data. The `createdAt` and `updatedAt` fields are optional, and will be set to the current timestamp if not provided. + */ +export async function updateDrink(id: number, data: Omit & Partial>): Promise { + return prisma.drink.update({ where: { id }, data }); } -// Function to delete a drink +/** + * Deletes a drink. + * @param id - The ID of the drink to delete. + */ export async function deleteDrink(id: number): Promise { - return prisma.drink.delete({ where: { id } }); + return prisma.drink.delete({ where: { id } }); } diff --git a/src/providers/env.ts b/src/providers/env.ts index 49eda08..32ace9f 100644 --- a/src/providers/env.ts +++ b/src/providers/env.ts @@ -1,3 +1,6 @@ -export const env = process.env.NODE_ENV ?? "production "; +/** The current development environment, will default to production if `process.env.NODE_ENV` is unset. */ +export const env = process.env.NODE_ENV ?? "production"; +/** Whether the current environment is development. */ export const development = env === "development"; +/** Whether the current environment is production. */ export const production = env === "production"; diff --git a/src/providers/orderManager.ts b/src/providers/orderManager.ts index 7a259d5..fd0ea0a 100644 --- a/src/providers/orderManager.ts +++ b/src/providers/orderManager.ts @@ -1,10 +1,12 @@ -import { CafeStatus } from "@prisma/client"; import { db } from "../database/database"; import { format } from "../utils/string"; import { text } from "./config"; import { mainChannels } from "./discord"; import { OrderStatus } from "../database/orders"; +/** + * Checks for orders that have finished brewing every 5s, updates status to `PendingDelivery`, and sends a message to the delivery channel. + */ export const startOrderTimeoutChecks = () => { setInterval(async () => { const brewFinished = await db.orders.findMany({ where: { timeout: { lte: new Date() }, status: OrderStatus.Brewing } }); diff --git a/src/providers/permissions.ts b/src/providers/permissions.ts index 8cb4179..c91da29 100644 --- a/src/providers/permissions.ts +++ b/src/providers/permissions.ts @@ -26,20 +26,32 @@ const permissionsSchema = z const parsed = parseHjson(permissionsSchema, "permissions.hjson"); +/** + * Represents a permission. Permissions can be granted to users, roles, or other permissions. + */ export class Permission { + /** The permissions that this permission is a child of. */ readonly parents: readonly Permission[] = []; + /** The permissions that this permission is a parent of. */ readonly children: readonly Permission[] = []; + /** The roles that have this permission. */ readonly roles: Record = {}; + /** The users that have this permission. */ readonly users: Record = {}; constructor(public name: string) { } + /** Adds a parent permission, and adds this permission as a child of the parent. */ addParent(permission: Permission) { (this.parents as Permission[]).push(permission); if (!permission.children.includes(this)) permission.addChild(this); } + + /** Adds a child permission, and adds this permission as a parent of the child. */ addChild(permission: Permission) { (this.children as Permission[]).push(permission); if (!permission.parents.includes(this)) permission.addParent(this); } + + /** Returns whether the user has this permission. */ async hasPermission(ur: UserResolvable) { const user = resolveUserId(ur); if (user in this.users) return this.users[user]; @@ -55,6 +67,8 @@ export class Permission { for (const child of this.children) if (await child.hasPermission(ur)) return true; return false; } + + /** Throws an error if the user does not have this permission. */ async check(int: CommandInteraction) { if (!(await this.hasPermission(int.user))) { await int.reply({ @@ -66,9 +80,13 @@ export class Permission { } } + +/** All permissions from the `permissions.hjson` file. */ export const permissionsArray = typedKeys(parsed).map(k => new Permission(k)); +/** All permissions from the `permissions.hjson` file, as an object with the permission names as keys. */ export const permissions = typedFromEntries(permissionsArray.map(x => [x.name, x])) as Record; +// Parse the permissions file and apply the parsed data to the permissions. for (const [i, v] of Object.values(parsed).entries()) { const perm = permissionsArray[i]; if ("grant" in v) { diff --git a/src/structures/Command.ts b/src/structures/Command.ts index 4a5b1a9..b10406d 100644 --- a/src/structures/Command.ts +++ b/src/structures/Command.ts @@ -4,94 +4,183 @@ import { Attachment } from "discord.js"; import type { Permission } from "../providers/permissions"; import { capitalize } from "../utils/string"; +/** A command executor. Either returns void or a promise that resolves to void. */ export type CommandExecutor = (interaction: CommandInteraction<"cached">) => void | Promise; +/** An option that can be added to a command. */ export type CommandOptionType = Extract< keyof SlashCommandBuilder, `add${string}Option` > extends `add${infer U}Option` ? Lowercase : never; -export type CommandOptionArgs = Parameters}Option`]>; +/** + * Type definition for the arguments of a command option. + * @example + * // If T is "string", this type will be equivalent to the parameters of the `addStringOption` method in SlashCommandBuilder. + * type StringOptionArgs = CommandOptionArgs<"string">; + */ +export type CommandOptionArgs = Parameters}Option`]>; +type StringOptionArgs = CommandOptionArgs<"string">; + +/** + * Represents a command. + * @example + * const command = new Command("ping", "Replies with pong!"); + * command.setExecutor(i => i.reply("Pong!")); + */ export class Command { readonly #slash = new SlashCommandBuilder(); accessible = true; - executor: CommandExecutor = i => i.reply("No executor was specified."); + executor: CommandExecutor = i => { + i.reply("No executor was specified."); + }; permissions: Permission[] = []; local = false; aliases: string[] = []; shortcuts: string[] = []; syntax: { name: string; type: CommandOptionType; require: boolean }[] = []; + /** + * Creates a new command. + * @param name - The name of the command. + * @param description - The description of the command. + */ constructor(public readonly name: string, public readonly description = "") { this.#slash.setName(this.name).setDescription(this.description).setDefaultPermission(true); } + /** + * Sets the command to be accessible by default or not. + * @param accessible - Whether the command is accessible by default. + */ setAccessible(accessible: boolean) { this.accessible = accessible; this.#slash.setDefaultPermission(accessible); return this; } + /** + * Sets the executor of the command. + * @param executor - The executor of the command, a function that doesn't return or returns a promise that resolves to void. + */ setExecutor(executor: CommandExecutor) { this.executor = executor; return this; } + /** + * Adds an option to the command. + * @param type - The type of the option. + * @param args - Arguments for the option. + * @example + * command.addOption("string", o => o.setName("name").setDescription("The name of the user")); + */ addOption(type: T, ...args: CommandOptionArgs) { - const fn = this.#slash[`add${capitalize(type)}Option`].bind(this.#slash) as (...a: typeof args) => void; + const fn = this.#slash[`add${capitalize(type) as Capitalize}Option`].bind(this.#slash) as (...a: typeof args) => void; fn(...args); return this; } + /** + * Adds an attachment to the command. + * @alias addOption + * @param type - The type of the attachment. + * @param args - Arguments for the attachment. + * @example + * command.addAttachment("string", o => o.setName("name").setDescription("The name of the user")); + */ addAttachment(type: T, ...args: CommandOptionArgs) { - const fn = this.#slash[`add${capitalize(type)}Option`].bind(this.#slash) as (...a: typeof args) => void; + const fn = this.#slash[`add${capitalize(type) as Capitalize}Option`].bind(this.#slash) as (...a: typeof args) => void; fn(...args); return this; } + /** + * Adds a subcommand to the command. + * @param args - Arguments for the subcommand. + * @example + * command.addSubCommand(o => o.setName("subcommand").setDescription("A subcommand")); + */ addSubCommand(...args: Parameters) { this.#slash.addSubcommand(...args); return this; } + /** + * Adds a subcommand group to the command. + * @param args - Arguments for the subcommand group. + */ addSubcommandGroup(...args: Parameters) { this.#slash.addSubcommandGroup(...args); return this; } + /** + * Adds a permission to the command. + * @param permission - The permission to add. + */ addPermission(permission: Permission) { this.permissions.push(permission); return this; } + /** + * Sets the command to be local or not. + * @param local - Whether the command is local. + */ setLocal(local: boolean) { this.local = local; return this; } + /** + * Adds a shortcut to the command. + * @param args - The shortcuts to add. + */ addShortcuts(...args: string[]) { this.shortcuts = this.shortcuts.concat(args); return this; } + /** + * Adds an alias to the command. + * @param alias = The alias to add. + */ addAlias(alias: string) { this.aliases.push(alias); return this; } + /** + * Adds aliases to the command. + * @param args - The aliases to add. + * @example + * command.addAliases("ping", "pong"); + */ addAliases(...args: string[]) { this.aliases = this.aliases.concat(args); return this; } + /** + * Adds syntax to the command. + * @param name - The name of the syntax. + * @param type - The type of the syntax. + * @param require - Whether the syntax is required. Defaults to `false`. + * @example + * command.addSyntax("name", "string", true); + */ addSyntax(name: string, type: CommandOptionType, require = false) { this.syntax.push({ name, type, require }); return this; } + /** + * Converts the command to a JSON object. + */ toJSON() { return this.#slash.toJSON(); } -} +} \ No newline at end of file diff --git a/src/structures/CustomDrinkData.ts b/src/structures/CustomDrinkData.ts index 4ef2159..cac648a 100644 --- a/src/structures/CustomDrinkData.ts +++ b/src/structures/CustomDrinkData.ts @@ -1,6 +1,6 @@ -export const CustomdrinksData = [ - { name: "Drink1", type: "custom", price: 10 }, - { name: "Drink2", type: "custom", price: 8 }, - { name: "Drink3", type: "custom", price: 13 }, - { name: "Drink4", type: "custom", price: 10.99 }, +export const CustomDrinksData = [ + { name: "Drink1", type: "custom", price: 10 }, + { name: "Drink2", type: "custom", price: 8 }, + { name: "Drink3", type: "custom", price: 13 }, + { name: "Drink4", type: "custom", price: 10.99 }, ]; \ No newline at end of file diff --git a/src/structures/DrinksData.ts b/src/structures/DrinksData.ts index 41b69d3..5182076 100644 --- a/src/structures/DrinksData.ts +++ b/src/structures/DrinksData.ts @@ -1,6 +1,6 @@ export const drinksData = [ - { name: "Drink11", type: "normal", price: 10 }, - { name: "Drink22", type: "normal", price: 8 }, - { name: "Drink33", type: "normal", price: 12 }, - { name: "Drink32", type: "normal", price: 13 }, + { name: "Drink11", type: "normal", price: 10 }, + { name: "Drink22", type: "normal", price: 8 }, + { name: "Drink33", type: "normal", price: 12 }, + { name: "Drink32", type: "normal", price: 13 }, ]; \ No newline at end of file diff --git a/src/structures/LifetimeMap.ts b/src/structures/LifetimeMap.ts index d65262c..3a30fa9 100644 --- a/src/structures/LifetimeMap.ts +++ b/src/structures/LifetimeMap.ts @@ -2,27 +2,48 @@ import { z } from "zod"; const numberSchema = z.number(); +/** + * A map that deletes its entries after a certain amount of time. + */ export class LifetimeMap extends Map { #timeoutMap = new Map(); + + /** + * Creates a new LifetimeMap. + * @param lifetime The lifetime, in ms. + */ constructor( - /** The lifetime, in ms. */ public lifetime: number ) { super(); numberSchema.parse(lifetime); } + /** + * Clears the map and cancels all timeouts. + */ clear(): void { this.#timeoutMap.forEach(v => clearTimeout(v)); this.#timeoutMap.clear(); super.clear(); } + + /** + * Deletes a key from the map and cancels the timeout. + * @param key The key to delete. + */ delete(key: K): boolean { const timeout = this.#timeoutMap.get(key); if (timeout) clearTimeout(timeout); this.#timeoutMap.delete(key); return super.delete(key); } + + /** + * Sets a key-value pair in the map and sets a timeout to delete it. + * @param key The key to set. + * @param value The value to set. + */ set(key: K, value: V): this { if (this.#timeoutMap.has(key)) { clearInterval(this.#timeoutMap.get(key)!); diff --git a/src/utils/array.ts b/src/utils/array.ts index c7de74b..e1d2151 100644 --- a/src/utils/array.ts +++ b/src/utils/array.ts @@ -1,5 +1,7 @@ /** * Checks if two arrays contain the same elements. + * @param arr1 - The first array. + * @param arr2 - The second array. */ export const arraysSimilar = (arr1: readonly T[], arr2: readonly T[]) => { if (arr1.length !== arr2.length) return false; diff --git a/src/utils/components.ts b/src/utils/components.ts index 1ecaf8a..4ac0c9c 100644 --- a/src/utils/components.ts +++ b/src/utils/components.ts @@ -1,4 +1,3 @@ -// TODO: discord has updated their typings, so this file is now broken, go cry about it import type { ButtonInteraction, MessageActionRowComponent, MessageComponentInteraction, SelectMenuInteraction } from "discord.js"; import { ActionRowBuilder, ButtonBuilder, StringSelectMenuBuilder } from "discord.js"; import { componentCallbacks } from "../events/interactionCreate"; @@ -43,22 +42,4 @@ export class CallbackContext { return this.int.update({ components: this.int.message.components }); } -} - -// todo: this is hell in a handbasket, fix it LATER. -// const cbComponent = -// ( -// component: Constructable & (new () => T) -// ) => -// (cb: (ctx: CallbackContext) => void) => { -// const id = `DB_CB__${component.name}_${Date.now()}`; -// const cmp = new component() as T; -// delete (cmp as Partial).setCustomId; -// componentCallbacks.set(id, ((int: InteractionByType) => cb(new CallbackContext(int as InteractionByType, cmp)))); -// return cmp; -// }; -// -// export const cbButton = cbComponent(ButtonBuilder); -// export const cbSelectMenu = cbComponent(StringSelectMenuBuilder); -// export const actionRowOf = (...args: Parameters) => -// new ActionRowBuilder().addComponents(...args); +} \ No newline at end of file diff --git a/src/utils/string.ts b/src/utils/string.ts index 66f0c44..2a0632f 100644 --- a/src/utils/string.ts +++ b/src/utils/string.ts @@ -1,5 +1,3 @@ -// shut up eslint -/* eslint-disable indent */ import type {A, L, N, S} from "ts-toolbelt"; import {mainEmojis} from "../providers/discord"; @@ -13,8 +11,7 @@ export const capitalize = (str?: T) => str ? ((str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize) : str; /** - * Represents a string with positional placeholders. - * In the form of `<{} * T>`. + * Represents a string with a number of placeholders in the form `{}`. */ export type PositionalFormattable = `${string}${S.Join< L.Repeat<"{}", T>, @@ -79,20 +76,20 @@ export const format = ( str: T, ...arr: FormatArguments ): string => - str.includes("{}") - ? str - .split("{}") - .reduce( - (l, c, i, a) => - l + c + (i + 1 === a.length ? "" : arr[i] ?? "{}"), - "" - ) - : /\{\w+\}/.test(str) - ? str.replaceAll( - /\{(\w+)\}/g, - (_, k) => (arr[0] as Record)[k] - ) - : str; + str.includes("{}") + ? str + .split("{}") + .reduce( + (l, c, i, a) => + l + c + (i + 1 === a.length ? "" : arr[i] ?? "{}"), + "" + ) + : /\{\w+\}/.test(str) + ? str.replaceAll( + /\{(\w+)\}/g, + (_, k) => (arr[0] as Record)[k] + ) + : str; /** * Parses a text by replacing emoji placeholders with their corresponding emoji strings. diff --git a/yarn.lock b/yarn.lock index 985212d..1fabf40 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,19 +4,19 @@ "@aashutoshrathi/word-wrap@^1.2.3": version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + resolved "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" "@discordjs/builders@^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/builders@^1.7.0": version "1.7.0" - resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.7.0.tgz#e2478c7e55b0f4c40837edb8f102bce977323a37" + resolved "https://registry.npmjs.org/@discordjs/builders/-/builders-1.7.0.tgz" integrity sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw== dependencies: "@discordjs/formatters" "^0.3.3" @@ -27,31 +27,31 @@ ts-mixer "^6.0.3" tslib "^2.6.2" -"@discordjs/collection@1.5.3": - version "1.5.3" - resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.5.3.tgz#5a1250159ebfff9efa4f963cfa7e97f1b291be18" - integrity sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ== - "@discordjs/collection@^0.4.0": version "0.4.0" - resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.4.0.tgz#b6488286a1cc7b41b644d7e6086f25a1c1e6f837" + resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz" integrity sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw== "@discordjs/collection@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-2.0.0.tgz#409b80c74eb8486cc4ee6a9b83426aaff1380f8c" + resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz" integrity sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w== +"@discordjs/collection@1.5.3": + version "1.5.3" + resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz" + integrity sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ== + "@discordjs/formatters@^0.3.3": version "0.3.3" - resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.3.3.tgz#b16fdd79bb819680ab7e519193004e9dc124a749" + resolved "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.3.tgz" integrity sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w== dependencies: discord-api-types "0.37.61" "@discordjs/rest@^0.3.0": version "0.3.0" - resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-0.3.0.tgz#89e06a42b168c91598891d6bf860353e28fba5d2" + resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz" integrity sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q== dependencies: "@discordjs/collection" "^0.4.0" @@ -64,7 +64,7 @@ "@discordjs/rest@^2.1.0": version "2.2.0" - resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-2.2.0.tgz#f4ec00d3faff965c00a879b7e87bb4b6f4446966" + resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-2.2.0.tgz" integrity sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A== dependencies: "@discordjs/collection" "^2.0.0" @@ -79,12 +79,12 @@ "@discordjs/util@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-1.0.2.tgz#dc1896d764452b1bd9707eb9aa99ccfbb30bd1c0" + resolved "https://registry.npmjs.org/@discordjs/util/-/util-1.0.2.tgz" integrity sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw== "@discordjs/ws@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@discordjs/ws/-/ws-1.0.2.tgz#3933b12d4686aabf6a95dfe5fb6e744342a661d1" + resolved "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.2.tgz" integrity sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q== dependencies: "@discordjs/collection" "^2.0.0" @@ -99,20 +99,20 @@ "@eslint-community/eslint-utils@^4.2.0": version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== dependencies: eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0", "@eslint-community/regexpp@^4.6.1": version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz" integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== -"@eslint/eslintrc@^2.1.3": - version "2.1.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.3.tgz#797470a75fe0fbd5a53350ee715e85e87baff22d" - integrity sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA== +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== dependencies: ajv "^6.12.4" debug "^4.3.2" @@ -124,74 +124,74 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.54.0": - version "8.54.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.54.0.tgz#4fab9a2ff7860082c304f750e94acd644cf984cf" - integrity sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ== +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== "@fastify/busboy@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" - integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + version "2.1.1" + resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== -"@humanwhocodes/config-array@^0.11.13": - version "0.11.13" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.13.tgz#075dc9684f40a531d9b26b0822153c1e832ee297" - integrity sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ== +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== dependencies: - "@humanwhocodes/object-schema" "^2.0.1" - debug "^4.1.1" + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" minimatch "^3.0.5" "@humanwhocodes/module-importer@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz#e5211452df060fa8522b55c7b3c0c4d1981cb044" - integrity sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw== +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== "@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + version "3.1.2" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" "@noble/hashes@^1.1.5": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" - integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + version "1.4.0" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== "@nodelib/fs.scandir@2.1.5": version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: "@nodelib/fs.scandir" "2.1.5" @@ -199,81 +199,110 @@ "@paralleldrive/cuid2@^2.2.1": version "2.2.2" - resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz#7f91364d53b89e2c9cb9e02e8dd0f129e834455f" + resolved "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz" integrity sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA== dependencies: "@noble/hashes" "^1.1.5" -"@prisma/client@^5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@prisma/client/-/client-5.6.0.tgz#1c15932250d5658fe0127e62faf4ecd96a877259" - integrity sha512-mUDefQFa1wWqk4+JhKPYq8BdVoFk9NFMBXUI8jAkBfQTtgx8WPx02U2HB/XbAz3GSUJpeJOKJQtNvaAIDs6sug== +"@prisma/client@latest": + version "5.11.0" + resolved "https://registry.npmjs.org/@prisma/client/-/client-5.11.0.tgz" + integrity sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw== + +"@prisma/debug@5.11.0": + version "5.11.0" + resolved "https://registry.npmjs.org/@prisma/debug/-/debug-5.11.0.tgz" + integrity sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A== + +"@prisma/engines-version@5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102": + version "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" + resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102.tgz" + integrity sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA== + +"@prisma/engines@5.11.0": + version "5.11.0" + resolved "https://registry.npmjs.org/@prisma/engines/-/engines-5.11.0.tgz" + integrity sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw== dependencies: - "@prisma/engines-version" "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee" + "@prisma/debug" "5.11.0" + "@prisma/engines-version" "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" + "@prisma/fetch-engine" "5.11.0" + "@prisma/get-platform" "5.11.0" -"@prisma/engines-version@5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee": - version "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee" - resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee.tgz#57b003ab5e1ea1523b5cdd7f06b24ebcf5c7fd8c" - integrity sha512-UoFgbV1awGL/3wXuUK3GDaX2SolqczeeJ5b4FVec9tzeGbSWJboPSbT0psSrmgYAKiKnkOPFSLlH6+b+IyOwAw== +"@prisma/fetch-engine@5.11.0": + version "5.11.0" + resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.11.0.tgz" + integrity sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w== + dependencies: + "@prisma/debug" "5.11.0" + "@prisma/engines-version" "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" + "@prisma/get-platform" "5.11.0" -"@prisma/engines@5.6.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-5.6.0.tgz#82c445aa10633bbc0388aa2d6e411a0bd94c9439" - integrity sha512-Mt2q+GNJpU2vFn6kif24oRSBQv1KOkYaterQsi0k2/lA+dLvhRX6Lm26gon6PYHwUM8/h8KRgXIUMU0PCLB6bw== +"@prisma/get-platform@5.11.0": + version "5.11.0" + resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.11.0.tgz" + integrity sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw== + dependencies: + "@prisma/debug" "5.11.0" "@sapphire/async-queue@^1.1.9", "@sapphire/async-queue@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.0.tgz#2f255a3f186635c4fb5a2381e375d3dfbc5312d8" - integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== + version "1.5.2" + resolved "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.2.tgz" + integrity sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg== "@sapphire/shapeshift@^3.8.1", "@sapphire/shapeshift@^3.9.3": - version "3.9.3" - resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-3.9.3.tgz#89d26713044bc21cc5e0845e61a8a328ca3c1a84" - integrity sha512-WzKJSwDYloSkHoBbE8rkRW8UNKJiSRJ/P8NqJ5iVq7U2Yr/kriIBx2hW+wj2Z5e5EnXL1hgYomgaFsdK6b+zqQ== + version "3.9.6" + resolved "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.6.tgz" + integrity sha512-4+Na/fxu2SEepZRb9z0dbsVh59QtwPuBg/UVaDib3av7ZY14b14+z09z6QVn0P6Dv6eOU2NDTsjIi0mbtgP56g== dependencies: fast-deep-equal "^3.1.3" lodash "^4.17.21" -"@sapphire/snowflake@3.5.1", "@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.5.1": +"@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.5.1": + version "3.5.3" + resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz" + integrity sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ== + +"@sapphire/snowflake@3.5.1": version "3.5.1" - resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.5.1.tgz#254521c188b49e8b2d4cc048b475fb2b38737fec" + resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz" integrity sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA== "@sindresorhus/is@^4.0.0": version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== "@szmarczak/http-timer@^4.0.5": version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== dependencies: defer-to-connect "^2.0.0" "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== "@types/cacheable-request@^6.0.1": version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== dependencies: "@types/http-cache-semantics" "*" @@ -283,67 +312,53 @@ "@types/http-cache-semantics@*": version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz" integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== "@types/json-schema@^7.0.9": version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/keyv@^3.1.4": version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== dependencies: "@types/node" "*" -"@types/node@*": - version "20.10.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.0.tgz#16ddf9c0a72b832ec4fcce35b8249cf149214617" - integrity sha512-D0WfRmU9TQ8I9PFx9Yc+EBHw+vSpIub4IDvQivcp26PtPrdMGAq5SDcpXEo/epqa/DXotVpekHiLNTg3iaKXBQ== - dependencies: - undici-types "~5.26.4" - -"@types/node@^17.0.42": +"@types/node@*", "@types/node@^17.0.42": version "17.0.45" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== "@types/responselike@^1.0.0": version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz" integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== dependencies: "@types/node" "*" "@types/semver@^7.3.12": - version "7.5.6" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== + version "7.5.8" + resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== "@types/uuid@^9.0.1": - version "9.0.7" - resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-9.0.7.tgz#b14cebc75455eeeb160d5fe23c2fcc0c64f724d8" - integrity sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g== + version "9.0.8" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz" + integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== -"@types/ws@8.5.9": +"@types/ws@^8.5.9", "@types/ws@8.5.9": version "8.5.9" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.9.tgz#384c489f99c83225a53f01ebc3eddf3b8e202a8c" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz" integrity sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg== dependencies: "@types/node" "*" -"@types/ws@^8.5.9": - version "8.5.10" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" - integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== - dependencies: - "@types/node" "*" - "@typescript-eslint/eslint-plugin@^5.16.0": version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz#aeef0328d172b9e37d9bab6dbc13b87ed88977db" + resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz" integrity sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag== dependencies: "@eslint-community/regexpp" "^4.4.0" @@ -357,9 +372,9 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.16.0": +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.16.0": version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.62.0.tgz#1b63d082d849a2fcae8a569248fbe2ee1b8a56c7" + resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz" integrity sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA== dependencies: "@typescript-eslint/scope-manager" "5.62.0" @@ -369,7 +384,7 @@ "@typescript-eslint/scope-manager@5.62.0": version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz" integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== dependencies: "@typescript-eslint/types" "5.62.0" @@ -377,7 +392,7 @@ "@typescript-eslint/type-utils@5.62.0": version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz#286f0389c41681376cdad96b309cedd17d70346a" + resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz" integrity sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew== dependencies: "@typescript-eslint/typescript-estree" "5.62.0" @@ -387,12 +402,12 @@ "@typescript-eslint/types@5.62.0": version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz" integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== "@typescript-eslint/typescript-estree@5.62.0": version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz" integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== dependencies: "@typescript-eslint/types" "5.62.0" @@ -405,7 +420,7 @@ "@typescript-eslint/utils@5.62.0": version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz" integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" @@ -419,7 +434,7 @@ "@typescript-eslint/visitor-keys@5.62.0": version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz" integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== dependencies: "@typescript-eslint/types" "5.62.0" @@ -427,37 +442,37 @@ "@ungap/structured-clone@^1.2.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== "@vladfrangu/async_event_emitter@^2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz#84c5a3f8d648842cec5cc649b88df599af32ed88" - integrity sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ== + version "2.2.4" + resolved "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.4.tgz" + integrity sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug== abbrev@1: version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== acorn-jsx@^5.3.2: version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn-walk@^8.1.1: - version "8.3.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.0.tgz#2097665af50fd0cf7a2dfccd2b9368964e66540f" - integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== + version "8.3.2" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== -acorn@^8.4.1, acorn@^8.9.0: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== ajv@^6.12.4: version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== dependencies: fast-deep-equal "^3.1.1" @@ -467,19 +482,19 @@ ajv@^6.12.4: ansi-regex@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== ansi-styles@^4.1.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" anymatch@~3.1.2: version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== dependencies: normalize-path "^3.0.0" @@ -487,42 +502,42 @@ anymatch@~3.1.2: arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== array-union@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== atomic-sleep@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" + resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + version "2.3.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -530,24 +545,24 @@ brace-expansion@^1.1.7: braces@^3.0.2, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== cacheable-lookup@^5.0.3: version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== cacheable-request@^7.0.2: version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz" integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== dependencies: clone-response "^1.0.2" @@ -560,21 +575,21 @@ cacheable-request@^7.0.2: callsites@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== chalk@^4.0.0: version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" chokidar@^3.5.2: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + version "3.6.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -588,55 +603,55 @@ chokidar@^3.5.2: clone-response@^1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== dependencies: mimic-response "^1.0.0" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== combined-stream@^1.0.8: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" comment-parser@^1.1.2: version "1.4.1" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-1.4.1.tgz#bdafead37961ac079be11eb7ec65c4d021eaf9cc" + resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz" integrity sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== create-require@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== cross-env@^7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" + resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== dependencies: cross-spawn "^7.0.1" cross-spawn@^7.0.1, cross-spawn@^7.0.2: version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== dependencies: path-key "^3.1.0" @@ -645,70 +660,70 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2: debug@^3.2.7: version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== dependencies: ms "^2.1.1" -debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" decompress-response@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== dependencies: mimic-response "^3.1.0" deep-is@^0.1.3: version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== defer-to-connect@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dir-glob@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== dependencies: path-type "^4.0.0" -discord-api-types@0.37.61: - version "0.37.61" - resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.61.tgz#9dd8e58c624237e6f1b23be2d29579af268b8c5b" - integrity sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw== - discord-api-types@^0.26.1: version "0.26.1" - resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.26.1.tgz#726f766ddc37d60da95740991d22cb6ef2ed787b" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz" integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== discord-api-types@^0.37.35: - version "0.37.65" - resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.65.tgz#68dcf9eaece271fb550370c2ba7fe71e927c56b2" - integrity sha512-CQHW3Nu04LEHIj1Xps/sfGhTdrowilxnek2tirpLhwvrmgmLr1C6A+4JFLs+0kJMH2IX2QgDyA9GfNehqN+xPQ== + version "0.37.77" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.77.tgz" + integrity sha512-AkEn9nZA5w/XJ8wzKzlpx3X+MToQCowKahftF1+KYnMWnuglCrVRojy1XlIWX8Frgp1v8INceGKpvDkbvMLJ4g== -discord.js@^14.14.1: +discord-api-types@0.37.61: + version "0.37.61" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz" + integrity sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw== + +discord.js@^14.8.0: version "14.14.1" - resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.14.1.tgz#9a2bea23bba13819705ab87612837610abce9ee3" + resolved "https://registry.npmjs.org/discord.js/-/discord.js-14.14.1.tgz" integrity sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w== dependencies: "@discordjs/builders" "^1.7.0" @@ -728,36 +743,36 @@ discord.js@^14.14.1: doctrine@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== dependencies: esutils "^2.0.2" duplexify@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== + version "4.1.3" + resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz" + integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== dependencies: end-of-stream "^1.4.1" inherits "^2.0.3" readable-stream "^3.1.1" - stream-shift "^1.0.0" + stream-shift "^1.0.2" end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" escape-string-regexp@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== eslint-plugin-regexp@^1.6.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz#2717cd4867418287b36d9569c72fca7d242c59b3" + resolved "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz" integrity sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag== dependencies: "@eslint-community/eslint-utils" "^4.2.0" @@ -771,7 +786,7 @@ eslint-plugin-regexp@^1.6.0: eslint-scope@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== dependencies: esrecurse "^4.3.0" @@ -779,7 +794,7 @@ eslint-scope@^5.1.1: eslint-scope@^7.2.2: version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz" integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== dependencies: esrecurse "^4.3.0" @@ -787,19 +802,19 @@ eslint-scope@^7.2.2: eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== -eslint@^8.12.0: - version "8.54.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.54.0.tgz#588e0dd4388af91a2e8fa37ea64924074c783537" - integrity sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA== +eslint@*, "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", eslint@^8.12.0, eslint@>=6.0.0: + version "8.57.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.3" - "@eslint/js" "8.54.0" - "@humanwhocodes/config-array" "^0.11.13" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -836,7 +851,7 @@ eslint@^8.12.0: espree@^9.6.0, espree@^9.6.1: version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + resolved "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz" integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== dependencies: acorn "^8.9.0" @@ -845,41 +860,46 @@ espree@^9.6.0, espree@^9.6.1: esquery@^1.4.2: version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== dependencies: estraverse "^5.1.0" esrecurse@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: estraverse "^5.2.0" estraverse@^4.1.1: version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0, estraverse@^5.2.0: +estraverse@^5.1.0: version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3, fast-deep-equal@3.1.3: version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.11, fast-glob@^3.2.9: version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" @@ -890,43 +910,43 @@ fast-glob@^3.2.11, fast-glob@^3.2.9: fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@^2.0.6: version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fast-redact@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.3.0.tgz#7c83ce3a7be4898241a46560d51de10f653f7634" - integrity sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ== + version "3.5.0" + resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz" + integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + version "1.17.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" file-entry-cache@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== dependencies: flat-cache "^3.0.4" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== dependencies: locate-path "^6.0.0" @@ -934,7 +954,7 @@ find-up@^5.0.0: flat-cache@^3.0.4: version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz" integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== dependencies: flatted "^3.2.9" @@ -942,13 +962,13 @@ flat-cache@^3.0.4: rimraf "^3.0.2" flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + version "3.3.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz" + integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== form-data@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== dependencies: asynckit "^0.4.0" @@ -957,38 +977,40 @@ form-data@^4.0.0: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - get-stream@^5.1.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob-parent@^6.0.2: version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== dependencies: is-glob "^4.0.3" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob@^7.1.3: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -999,15 +1021,15 @@ glob@^7.1.3: path-is-absolute "^1.0.0" globals@^13.19.0: - version "13.23.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.23.0.tgz#ef31673c926a0976e1f61dab4dca57e0c0a8af02" - integrity sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA== + version "13.24.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== dependencies: type-fest "^0.20.2" globby@^11.1.0: version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== dependencies: array-union "^2.1.0" @@ -1019,7 +1041,7 @@ globby@^11.1.0: got@^11.8.3: version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== dependencies: "@sindresorhus/is" "^4.0.0" @@ -1036,37 +1058,37 @@ got@^11.8.3: grapheme-splitter@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== graphemer@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== hjson@^3.2.2: version "3.2.2" - resolved "https://registry.yarnpkg.com/hjson/-/hjson-3.2.2.tgz#a5a81138f4c0bb427e4b2ac917fafd4b454436cf" + resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== http-cache-semantics@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== dependencies: quick-lru "^5.1.1" @@ -1074,17 +1096,17 @@ http2-wrapper@^1.0.0-beta.5.2: ignore-by-default@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== ignore@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== + version "5.3.1" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== import-fresh@^3.2.1: version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" @@ -1092,98 +1114,98 @@ import-fresh@^3.2.1: imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3: +inherits@^2.0.3, inherits@2: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-path-inside@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== js-yaml@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" jsdoctypeparser@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz#8c97e2fb69315eb274b0f01377eaa5c940bd7b26" + resolved "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz" integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== json-buffer@3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== json5@^2.2.2: version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== keyv@^4.0.0, keyv@^4.5.3: version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz" integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== dependencies: json-buffer "3.0.1" levn@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== dependencies: prelude-ls "^1.2.1" @@ -1191,56 +1213,56 @@ levn@^0.4.1: locate-path@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== dependencies: p-locate "^5.0.0" lodash.merge@^4.6.2: version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== lodash.snakecase@4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== lodash@^4.17.21: version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== lowercase-keys@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== lru-cache@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== dependencies: yallist "^4.0.0" magic-bytes.js@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/magic-bytes.js/-/magic-bytes.js-1.5.0.tgz#f5531ca53e1c8dab5692b8dcfb360f7ca6c6b6bc" - integrity sha512-wJkXvutRbNWcc37tt5j1HyOK1nosspdh3dj6LUYYAvF6JYNqs53IfRvK9oEpcwiDA1NdoIi64yAMfdivPeVAyw== + version "1.10.0" + resolved "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz" + integrity sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ== make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== micromatch@^4.0.4: version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== dependencies: braces "^3.0.2" @@ -1248,73 +1270,68 @@ micromatch@^4.0.4: mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@^2.1.12: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" mimic-response@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mimic-response@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist@^1.2.6: version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -ms@2.1.2: +ms@^2.1.1, ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - natural-compare-lite@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" + resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== natural-compare@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== nekos.life@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/nekos.life/-/nekos.life-3.0.0.tgz#91d944daad8dcbdff493cf430537639fa963b60e" + resolved "https://registry.npmjs.org/nekos.life/-/nekos.life-3.0.0.tgz" integrity sha512-7LbvSqLtfK4XRA91nJaGOWthrNADmG7Vx9d54TC77Hx5qFvRCssFUaHraI6bZGjVENBCUaF7CreisoFX+8mnKQ== node-fetch@^2.6.5: version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== dependencies: whatwg-url "^5.0.0" nodemon@^2.0.20: version "2.0.22" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz" integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== dependencies: chokidar "^3.5.2" @@ -1330,36 +1347,36 @@ nodemon@^2.0.20: nopt@~1.0.10: version "1.0.10" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== dependencies: abbrev "1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@^6.0.1: version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== on-exit-leak-free@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" + resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz" integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" optionator@^0.9.3: version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz" integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== dependencies: "@aashutoshrathi/word-wrap" "^1.2.3" @@ -1371,68 +1388,68 @@ optionator@^0.9.3: p-cancelable@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== p-limit@^3.0.2: version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== dependencies: yocto-queue "^0.1.0" p-locate@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== dependencies: p-limit "^3.0.2" parent-module@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== dependencies: callsites "^3.0.0" parse-ms@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" + resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz" integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-type@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== picocolors@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pino-abstract-transport@v0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0" + resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz" integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== dependencies: duplexify "^4.1.2" @@ -1440,12 +1457,12 @@ pino-abstract-transport@v0.5.0: pino-std-serializers@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" + resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz" integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== pino@^7.9.2: version "7.11.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-7.11.0.tgz#0f0ea5c4683dc91388081d44bff10c83125066f6" + resolved "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz" integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== dependencies: atomic-sleep "^1.0.0" @@ -1462,36 +1479,36 @@ pino@^7.9.2: prelude-ls@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== pretty-ms@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" + resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz" integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== dependencies: parse-ms "^2.1.0" -prisma@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/prisma/-/prisma-5.6.0.tgz#ae2c27fdfb4d53be7f7dafb50d6b8b7f55c93aa5" - integrity sha512-EEaccku4ZGshdr2cthYHhf7iyvCcXqwJDvnoQRAJg5ge2Tzpv0e2BaMCp+CbbDUwoVTzwgOap9Zp+d4jFa2O9A== +prisma@*, prisma@latest: + version "5.11.0" + resolved "https://registry.npmjs.org/prisma/-/prisma-5.11.0.tgz" + integrity sha512-KCLiug2cs0Je7kGkQBN9jDWoZ90ogE/kvZTUTgz2h94FEo8pczCkPH7fPNXkD1sGU7Yh65risGGD1HQ5DF3r3g== dependencies: - "@prisma/engines" "5.6.0" + "@prisma/engines" "5.11.0" process-warning@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" + resolved "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz" integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== pstree.remy@^1.1.8: version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -1499,27 +1516,27 @@ pump@^3.0.0: punycode@^2.1.0: version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== queue-microtask@^1.2.2: version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== quick-format-unescaped@^4.0.3: version "4.0.4" - resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" + resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== quick-lru@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== readable-stream@^3.1.1: version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== dependencies: inherits "^2.0.3" @@ -1528,26 +1545,26 @@ readable-stream@^3.1.1: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" real-require@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" + resolved "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz" integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== refa@^0.11.0: version "0.11.0" - resolved "https://registry.yarnpkg.com/refa/-/refa-0.11.0.tgz#07d57a9f5f3ee2dd58e0d145a6a489fda2591ed0" + resolved "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz" integrity sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ== dependencies: "@eslint-community/regexpp" "^4.5.0" regexp-ast-analysis@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz#c0b648728c85d266a409ce00a6440c01c9834c61" + resolved "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz" integrity sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ== dependencies: "@eslint-community/regexpp" "^4.5.0" @@ -1555,53 +1572,53 @@ regexp-ast-analysis@^0.6.0: resolve-alpn@^1.0.0: version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== resolve-from@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== responselike@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== dependencies: lowercase-keys "^2.0.0" reusify@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== rimraf@^3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" run-parallel@^1.1.9: version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== dependencies: queue-microtask "^1.2.2" safe-buffer@~5.2.0: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-stable-stringify@^2.1.0: version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== scslre@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/scslre/-/scslre-0.2.0.tgz#b604eedbab76f87003738d00de44d7601a78609e" + resolved "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz" integrity sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w== dependencies: "@eslint-community/regexpp" "^4.5.0" @@ -1610,55 +1627,55 @@ scslre@^0.2.0: semver@^5.7.1: version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== semver@^7.3.7: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + version "7.6.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" semver@~7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== simple-update-notifier@^1.0.7: version "1.1.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz" integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== dependencies: semver "~7.0.0" slash@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== sonic-boom@^2.2.1: version "2.8.0" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" + resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz" integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== dependencies: atomic-sleep "^1.0.0" source-map-support@^0.5.21: version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -1666,97 +1683,97 @@ source-map-support@^0.5.21: source-map@^0.6.0: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== split2@^4.0.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== +stream-shift@^1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz" + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== string_decoder@^1.1.1: version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== dependencies: safe-buffer "~5.2.0" strip-ansi@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-json-comments@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== supports-color@^5.5.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^7.1.0: version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" text-table@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== thread-stream@^0.15.1: version "0.15.2" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.15.2.tgz#fb95ad87d2f1e28f07116eb23d85aba3bc0425f4" + resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz" integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== dependencies: real-require "^0.1.0" to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" touch@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== dependencies: nopt "~1.0.10" tr46@~0.0.3: version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== ts-mixer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.3.tgz#69bd50f406ff39daa369885b16c77a6194c7cae6" - integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ== + version "6.0.4" + resolved "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz" + integrity sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA== ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + version "10.9.2" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== dependencies: "@cspotcode/source-map-support" "^0.8.0" "@tsconfig/node10" "^1.0.7" @@ -1774,104 +1791,99 @@ ts-node@^10.9.1: ts-toolbelt@^9.6.0: version "9.6.0" - resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" + resolved "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz" integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== tsconfig-paths@^4.1.2: version "4.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== dependencies: json5 "^2.2.2" minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.6.2, tslib@^2.3.1, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - tslib@^1.8.1: version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.3.1, tslib@^2.6.2, tslib@2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tsutils@^3.21.0: version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== dependencies: tslib "^1.8.1" type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== dependencies: prelude-ls "^1.2.1" type-fest@^0.20.2: version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== typescript-memoize@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/typescript-memoize/-/typescript-memoize-1.1.1.tgz#02737495d5df6ebf72c07ba0d002e8f4cf5ccfa0" + resolved "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz" integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== -typescript@^4.9.5: +typescript@^4.9.5, typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== undefsafe@^2.0.5: version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - undici@5.27.2: version "5.27.2" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.27.2.tgz#a270c563aea5b46cc0df2550523638c95c5d4411" + resolved "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz" integrity sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ== dependencies: "@fastify/busboy" "^2.0.0" uri-js@^4.2.2: version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== dependencies: punycode "^2.1.0" util-deprecate@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== uuid@^9.0.0: version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== webidl-conversions@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== whatwg-url@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== dependencies: tr46 "~0.0.3" @@ -1879,42 +1891,42 @@ whatwg-url@^5.0.0: which@^2.0.1: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@8.14.2, ws@^8.14.2: +ws@^8.14.2, ws@8.14.2: version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + resolved "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz" integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yarn@^1.22.18: - version "1.22.21" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.21.tgz#1959a18351b811cdeedbd484a8f86c3cc3bbaf72" - integrity sha512-ynXaJsADJ9JiZ84zU25XkPGOvVMmZ5b7tmTSpKURYwgELdjucAOydqIOrOfTxVYcNXe91xvLZwcRh68SR3liCg== + version "1.22.22" + resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.22.tgz" + integrity sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg== yn@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== yocto-queue@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== zod@^3.14.3: version "3.22.4" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + resolved "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz" integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== From e21ba2f38720fe16809a398f3ff05e1628b35b80 Mon Sep 17 00:00:00 2001 From: floof Date: Sun, 31 Mar 2024 00:43:56 -0500 Subject: [PATCH 38/79] code cleanup + code fixes --- .eslintrc.js | 1 + .vscode/tasks.json | 2 +- README.md | 68 +-- src/commands/Devs/Select.ts | 27 +- src/commands/Devs/botinfo.ts | 59 +-- src/commands/Devs/button.ts | 22 +- src/commands/Devs/policy.ts | 5 +- src/commands/Devs/terms.ts | 5 +- src/commands/Devs/userinfo.ts | 120 ++--- src/commands/Devs/workst.ts | 66 +-- src/commands/economy/balance.ts | 8 +- src/commands/economy/crime.ts | 23 +- src/commands/economy/daily.ts | 19 +- .../{drinkroullete.ts => drinkroulette.ts} | 68 +-- src/commands/economy/give.ts | 29 +- src/commands/economy/work.ts | 19 +- src/commands/fun/doggo.ts | 10 +- src/commands/fun/goose.ts | 12 +- src/commands/fun/hug.ts | 12 +- src/commands/fun/meme.ts | 48 +- src/commands/fun/meow.ts | 11 +- src/commands/fun/pat.ts | 12 +- src/commands/fun/slap.ts | 13 +- src/commands/fun/tickle.ts | 40 +- src/commands/moderation/blacklist.ts | 18 +- src/commands/orders/cancel.ts | 12 +- src/commands/orders/feedback.ts | 22 +- src/commands/orders/order.ts | 14 +- src/commands/orders/status.ts | 12 +- src/commands/orders/tip.ts | 30 +- src/commands/orders/worker/brew.ts | 457 +++++++++--------- src/commands/orders/worker/claim.ts | 249 +++++----- src/commands/orders/worker/claimed.ts | 9 +- src/commands/orders/worker/delete.ts | 24 +- src/commands/orders/worker/deliver.ts | 43 +- src/commands/orders/worker/deliverymessage.ts | 24 +- src/commands/orders/worker/duty.ts | 8 +- src/commands/orders/worker/fetch.ts | 16 +- src/commands/orders/worker/leaderboard.ts | 334 ++++++------- src/commands/orders/worker/list.ts | 20 +- src/commands/orders/worker/unclaim.ts | 28 +- src/commands/orders/worker/workerinfo.ts | 76 +-- src/commands/orders/worker/workerstats.ts | 92 ++-- src/commands/public/expboard.ts | 82 ++-- src/commands/public/notifi.ts | 79 ++- src/commands/public/profile.ts | 148 +++--- src/database/database.ts | 2 +- src/database/orders.ts | 2 +- src/database/userInfo.ts | 3 - src/structures/Command.ts | 23 +- tsconfig.json | 2 +- 51 files changed, 1267 insertions(+), 1261 deletions(-) rename src/commands/economy/{drinkroullete.ts => drinkroulette.ts} (63%) diff --git a/.eslintrc.js b/.eslintrc.js index ddffea9..4693849 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -21,5 +21,6 @@ module.exports = { "@typescript-eslint/consistent-type-imports": "warn", "@typescript-eslint/no-non-null-assertion": "off", "@typescript-eslint/no-restricted-imports": ["error", "discord-api-types"], + "no-unused-vars": "off", }, }; diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 4526c77..07ef67a 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -6,7 +6,7 @@ "tsconfig": "tsconfig.json", "problemMatcher": ["$tsc"], "group": "build", - "label": "tsc: build - tsconfig.json", + "label": "tsc: build - tsconfig.json" } ] diff --git a/README.md b/README.md index 686f2f9..6c10bb3 100644 --- a/README.md +++ b/README.md @@ -11,48 +11,48 @@

❓ What is Drunk Bartender


-Drunk bartender is a bot that was created in August of 2019, +Drunk bartender is a bot that was created in August 2019, We are a part of an independent group of developers who have been working on this for the longest time with the same original team as in the beginning We have some commands and recently moved over to Slash Commands to follow Discord Requirements to continue operating and work with most other bots that follow it, and we are currently working on moving into Discord.js v14 -We can also be reached at anytime and we we have always worked hard on providing premium support to anyone who reaches out to us as that is the most important to us as your time is valuable so we do our best to make your experience the best so you can have more enjoyment with your time with us that is what keeps us going with this project and will always work our hardest to bring you the best new features we can and bring more fun commands +We can also be reached at anytime and we have always worked hard on providing premium support to anyone who reaches out to us as that is the most important to us as your time is valuable, so we do our best to make your experience the best, so you can have more enjoyment with your time with us that is what keeps us going with this project and will always work our hardest to bring you the best new features we can and bring more fun commands And we are always open to hearing suggestions from the community about new features and love to hear your feedback on things we are glad that you have decided to spend some time with us as that is really important to us and if you want you also get to know us as most of our dms are open and are always ready to answer any questions

ℹ Commands

-| Commands | Usage | Permissions | -| :--- | :---: | ---: | -| /balance | Gets a user's balance. | Global 🌐 | -| /work | Work to get money. | Global 🌐 | -| /crime | Commit a crime for money. | Global 🌐 | -| /daily | Gets money daily. | Global 🌐 | -| /order | Orders a drink. | Global 🌐 | -| /tip | Tip's a bartender. | Global 🌐 | -| /status | Gets the status of an order. | Global 🌐 | -| /cancel | Cancel's an order. | Global 🌐 | -| /feedback | Sends a feedback. | Global 🌐 | -| /doggo | Cute images of dogs. | Global 🌐 | -| /goose | Cool images of goose. | Global 🌐 | -| /meow | Wow images of cats. | Global 🌐 | -| /memes | Get some very funny memes. | Global 🌐 | -| /pat | Pat someone. | Global 🌐 | -| /tickle | Tickle your friends. | Global 🌐 | -| /hug | Give someone a big old hug. | Global 🌐 | -| /slap | Slap a very naughty person. | Global 🌐 | -| /status | Get a status of your order. | Global 🌐 | -| /blacklist | Blacklist's a user. | Admin 🛠 | -| /unblacklist | Unblacklist's a user. | Admin 🛠 | -| /list | List's all available orders. | Staff 🛠 | -| /claim | Claim's a user's order. | Staff 🛠 | -| /unclaim | Unclaim's a user's order. | Staff 🛠 | -| /fetch | Fetches the status of an order. | Staff 🛠 | -| /duty | Gives the on-duty role. | Staff 🛠 | -| /deliverymessage set | Sets a delivery message. | Staff 🛠 | -| /deliverymessage fetch | Gets your delivery message. | Staff 🛠 | -| /deliverymessage placeholders | Gets your delivery message placeholders. | Staff 🛠 | -| /brew | Brew's an order. | Staff 🛠 | -| /delete | Delete's a order. | Staff 🛠 | +| Commands | Usage | Permissions | +|:------------------------------|:----------------------------------------:|-------------:| +| /balance | Gets a user's balance. | Global 🌐 | +| /work | Work to get money. | Global 🌐 | +| /crime | Commit a crime for money. | Global 🌐 | +| /daily | Gets money daily. | Global 🌐 | +| /order | Orders a drink. | Global 🌐 | +| /tip | Tip's a bartender. | Global 🌐 | +| /status | Gets the status of an order. | Global 🌐 | +| /cancel | Cancel's an order. | Global 🌐 | +| /feedback | Sends a feedback. | Global 🌐 | +| /doggo | Cute images of dogs. | Global 🌐 | +| /goose | Cool images of goose. | Global 🌐 | +| /meow | Wow images of cats. | Global 🌐 | +| /memes | Get some very funny memes. | Global 🌐 | +| /pat | Pat someone. | Global 🌐 | +| /tickle | Tickle your friends. | Global 🌐 | +| /hug | Give someone a big old hug. | Global 🌐 | +| /slap | Slap a very naughty person. | Global 🌐 | +| /status | Get a status of your order. | Global 🌐 | +| /blacklist | Blacklist's a user. | Admin 🛠 | +| /unblacklist | Unblacklist's a user. | Admin 🛠 | +| /list | List's all available orders. | Staff 🛠 | +| /claim | Claim's a user's order. | Staff 🛠 | +| /unclaim | Unclaim's a user's order. | Staff 🛠 | +| /fetch | Fetches the status of an order. | Staff 🛠 | +| /duty | Gives the on-duty role. | Staff 🛠 | +| /deliverymessage set | Sets a delivery message. | Staff 🛠 | +| /deliverymessage fetch | Gets your delivery message. | Staff 🛠 | +| /deliverymessage placeholders | Gets your delivery message placeholders. | Staff 🛠 | +| /brew | Brew's an order. | Staff 🛠 | +| /delete | Delete's a order. | Staff 🛠 |

🔗 Links

diff --git a/src/commands/Devs/Select.ts b/src/commands/Devs/Select.ts index a3f400d..0f787c0 100644 --- a/src/commands/Devs/Select.ts +++ b/src/commands/Devs/Select.ts @@ -1,12 +1,6 @@ -import { development } from "../../providers/env"; -import { execSync } from "child_process"; -import { format } from "../../utils/string"; -import { transpile } from "typescript"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { client } from "../../providers/client"; -import { channel } from "diagnostics_channel"; -import { StringSelectMenuBuilder, EmbedBuilder } from "discord.js"; +import {permissions} from "../../providers/permissions"; +import {Command} from "../../structures/Command"; +import {EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; export const command = new Command("select", "Select Menu Example") .addPermission(permissions.developer) // add permission here @@ -19,19 +13,20 @@ export const command = new Command("select", "Select Menu Example") label: "Option 1", value: "option_1", description: "The first option", - type: 3 // changed from "SELECT_MENU" to 3 + // type: 3 + // type does not exist in the current version of discord.js }, { label: "Option 2", value: "option_2", description: "The second option", - type: 3 // changed from "SELECT_MENU" to 3 + // type: 3 // changed from "SELECT_MENU" to 3 }, { label: "Option 3", value: "option_3", description: "The third option", - type: 3 // changed from "SELECT_MENU" to 3 + // type: 3 // changed from "SELECT_MENU" to 3 }, ]); @@ -40,9 +35,9 @@ export const command = new Command("select", "Select Menu Example") .setTitle("Select Menu Example") .setDescription("Please select an option:") .addFields( - { name: "Option 1", value: "The first option" }, - { name: "Option 2", value: "The second option" }, - { name: "Option 3", value: "The third option" } + {name: "Option 1", value: "The first option"}, + {name: "Option 2", value: "The second option"}, + {name: "Option 3", value: "The third option"} ); await interaction.reply({ embeds: [embed], @@ -53,4 +48,4 @@ export const command = new Command("select", "Select Menu Example") }); }); -module.exports = { command }; +module.exports = {command}; diff --git a/src/commands/Devs/botinfo.ts b/src/commands/Devs/botinfo.ts index e33f6f3..5bd88ad 100644 --- a/src/commands/Devs/botinfo.ts +++ b/src/commands/Devs/botinfo.ts @@ -1,37 +1,38 @@ -import { CommandInteraction, EmbedBuilder } from "discord.js"; +import type {CommandInteraction} from "discord.js"; +import {EmbedBuilder} from "discord.js"; import os from "os"; -import { client } from "../../providers/client"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; +import {client} from "../../providers/client"; +import {permissions} from "../../providers/permissions"; +import {Command} from "../../structures/Command"; export const command = new Command("botinfo", "Displays information about the bot.") - .addPermission(permissions.developer) - .setExecutor(async (interaction: CommandInteraction) => { - // Get the number of guilds (servers) the bot is in - const guildsSize = client.guilds.cache.size.toString(); + .addPermission(permissions.developer) + .setExecutor(async (interaction: CommandInteraction) => { + // Get the number of guilds (servers) the bot is in + const guildsSize = client.guilds.cache.size.toString(); - // Get the bot's uptime - const uptime = process.uptime(); - const uptimeString = `${Math.floor(uptime / 3600)}h ${Math.floor((uptime % 3600) / 60)}m ${Math.floor(uptime % 60)}s`; + // Get the bot's uptime + const uptime = process.uptime(); + const uptimeString = `${Math.floor(uptime / 3600)}h ${Math.floor((uptime % 3600) / 60)}m ${Math.floor(uptime % 60)}s`; - // Get the bot's memory usage - const memoryUsage = (process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2); + // Get the bot's memory usage + const memoryUsage = (process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2); - // Get the bot's CPU usage - const cpuUsage = os.loadavg()[0].toFixed(2); + // Get the bot's CPU usage + const cpuUsage = os.loadavg()[0].toFixed(2); - // Create an embed to display the bot information - const botInfoEmbed = new EmbedBuilder() - .setColor("#00ff00") - .setTitle("Bot Information") - .addFields( - { name: "Name", value: client.user?.tag || "Unknown", inline: true }, - { name: "Version", value: "1.0.0", inline: true }, - { name: "Guilds", value: guildsSize, inline: true }, - { name: "Uptime", value: uptimeString, inline: true }, - { name: "Memory Usage", value: `${memoryUsage} MB`, inline: true }, - ); + // Create an embed to display the bot information + const botInfoEmbed = new EmbedBuilder() + .setColor("#00ff00") + .setTitle("Bot Information") + .addFields( + {name: "Name", value: client.user?.tag || "Unknown", inline: true}, + {name: "Version", value: "1.0.0", inline: true}, + {name: "Guilds", value: guildsSize, inline: true}, + {name: "Uptime", value: uptimeString, inline: true}, + {name: "Memory Usage", value: `${memoryUsage} MB`, inline: true}, + ); - // Send the embed to the user who used the command - await interaction.reply({ embeds: [botInfoEmbed] }); - }); + // Send the embed to the user who used the command + await interaction.reply({embeds: [botInfoEmbed]}); + }); diff --git a/src/commands/Devs/button.ts b/src/commands/Devs/button.ts index 0279ba6..ef260eb 100644 --- a/src/commands/Devs/button.ts +++ b/src/commands/Devs/button.ts @@ -1,13 +1,6 @@ -import { development } from "../../providers/env"; -import { execSync } from "child_process"; -import { format } from "../../utils/string"; -import { transpile } from "typescript"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { client } from "../../providers/client"; -import { channel } from "diagnostics_channel"; -import { ButtonBuilder } from "discord.js"; -import { ButtonStyle, ActionRowBuilder } from "discord.js"; +import {permissions} from "../../providers/permissions"; +import {Command} from "../../structures/Command"; +import {ActionRowBuilder, ButtonBuilder, ButtonStyle} from "discord.js"; export const command = new Command("but", "hm.") .addPermission(permissions.developer) // add permission here @@ -27,13 +20,14 @@ export const command = new Command("but", "hm.") .setStyle(ButtonStyle.Success) .setCustomId("3"); - const row = new ActionRowBuilder() - .addComponents(button1, button2, button3,); + const row = new ActionRowBuilder() + .addComponents(button1, button2, button3); await int.reply({ + fetchReply: true, content: "Here are three buttons:", - components: [row], + components: [row] }); }); -module.exports = { command }; +module.exports = {command}; diff --git a/src/commands/Devs/policy.ts b/src/commands/Devs/policy.ts index b74f8bb..30c5138 100644 --- a/src/commands/Devs/policy.ts +++ b/src/commands/Devs/policy.ts @@ -1,5 +1,6 @@ -import { Command } from "../../structures/Command"; +import {Command} from "../../structures/Command"; + export const command = new Command("policy", "Gives you a link to our policy.") .setExecutor(async int => { - int.channel.send("https://drunk-bartender.org/Policy"); + int.channel?.send("https://drunk-bartender.org/Policy"); }); \ No newline at end of file diff --git a/src/commands/Devs/terms.ts b/src/commands/Devs/terms.ts index 9e2920c..0fc6246 100644 --- a/src/commands/Devs/terms.ts +++ b/src/commands/Devs/terms.ts @@ -1,5 +1,6 @@ -import { Command } from "../../structures/Command"; +import {Command} from "../../structures/Command"; + export const command = new Command("tos", "Gives you a link to our tos.") .setExecutor(async int => { - int.channel.send("https://drunk-bartender.org/Terms_of_Service"); + int.channel?.send("https://drunk-bartender.org/Terms_of_Service"); }); \ No newline at end of file diff --git a/src/commands/Devs/userinfo.ts b/src/commands/Devs/userinfo.ts index 83463ec..c89eb9f 100644 --- a/src/commands/Devs/userinfo.ts +++ b/src/commands/Devs/userinfo.ts @@ -1,63 +1,63 @@ /* eslint-disable indent */ -import { db } from "../../database/database"; -import { Command } from "../../structures/Command"; +import {db} from "../../database/database"; +import {Command} from "../../structures/Command"; export const command = new Command("userinfo", "Show user information including ratings.") - .setExecutor(async int => { - const userId = int.user.id; - const userOrders = await db.cafeOrders.findMany({ - where: { - user: userId, - bakeRating: { not: null }, - prepRating: { not: null }, - deliveryRating: { not: null } - }, - select: { - bakeRating: true, - prepRating: true, - deliveryRating: true - } - }); - - if (userOrders.length === 0) { - await int.reply("You have no ratings yet."); - return; - } - - let totalRatings = 0; - let totalBakeRating = 0; - let totalPrepRating = 0; - let totalDeliveryRating = 0; - - for (const order of userOrders) { - if (order.bakeRating && order.prepRating && order.deliveryRating) { - totalRatings++; - totalBakeRating += order.bakeRating; - totalPrepRating += order.prepRating; - totalDeliveryRating += order.deliveryRating; - } - } - - if (totalRatings === 0) { - await int.reply("You have no ratings yet."); - return; - } - - const averageBakeRating = totalBakeRating / totalRatings; - const averagePrepRating = totalPrepRating / totalRatings; - const averageDeliveryRating = totalDeliveryRating / totalRatings; - - const bakeRatingStars = "⭐".repeat(Math.round(averageBakeRating)); - const prepRatingStars = "⭐".repeat(Math.round(averagePrepRating)); - const deliveryRatingStars = "⭐".repeat(Math.round(averageDeliveryRating)); - - let response = `Your average bake rating: ${averageBakeRating.toFixed(1)} (${bakeRatingStars})\n`; - response += `Your average prep rating: ${averagePrepRating.toFixed(1)} (${prepRatingStars})\n`; - response += `Your average delivery rating: ${averageDeliveryRating.toFixed(1)} (${deliveryRatingStars})\n`; - - if (totalRatings > 0) { - response += `Total ratings: ${totalRatings}`; - } - - await int.reply(response); - }); + .setExecutor(async int => { + const userId = int.user.id; + const userOrders = await db.cafeOrders.findMany({ + where: { + user: userId, + bakeRating: {not: null}, + prepRating: {not: null}, + deliveryRating: {not: null} + }, + select: { + bakeRating: true, + prepRating: true, + deliveryRating: true + } + }); + + if (userOrders.length === 0) { + await int.reply("You have no ratings yet."); + return; + } + + let totalRatings = 0; + let totalBakeRating = 0; + let totalPrepRating = 0; + let totalDeliveryRating = 0; + + for (const order of userOrders) { + if (order.bakeRating && order.prepRating && order.deliveryRating) { + totalRatings++; + totalBakeRating += order.bakeRating; + totalPrepRating += order.prepRating; + totalDeliveryRating += order.deliveryRating; + } + } + + if (totalRatings === 0) { + await int.reply("You have no ratings yet."); + return; + } + + const averageBakeRating = totalBakeRating / totalRatings; + const averagePrepRating = totalPrepRating / totalRatings; + const averageDeliveryRating = totalDeliveryRating / totalRatings; + + const bakeRatingStars = "⭐".repeat(Math.round(averageBakeRating)); + const prepRatingStars = "⭐".repeat(Math.round(averagePrepRating)); + const deliveryRatingStars = "⭐".repeat(Math.round(averageDeliveryRating)); + + let response = `Your average bake rating: ${averageBakeRating.toFixed(1)} (${bakeRatingStars})\n`; + response += `Your average prep rating: ${averagePrepRating.toFixed(1)} (${prepRatingStars})\n`; + response += `Your average delivery rating: ${averageDeliveryRating.toFixed(1)} (${deliveryRatingStars})\n`; + + if (totalRatings > 0) { + response += `Total ratings: ${totalRatings}`; + } + + await int.reply(response); + }); diff --git a/src/commands/Devs/workst.ts b/src/commands/Devs/workst.ts index 547fd37..98469e1 100644 --- a/src/commands/Devs/workst.ts +++ b/src/commands/Devs/workst.ts @@ -1,41 +1,41 @@ /* eslint-disable indent */ -import { WorkerInfo } from "@prisma/client"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { getWorkerInfo } from "../../database/workerInfo"; // Update with the correct path -import { CommandInteraction, EmbedBuilder } from "discord.js"; +import {permissions} from "../../providers/permissions"; +import {Command} from "../../structures/Command"; +import {getWorkerInfo} from "../../database/workerInfo"; // Update with the correct path +import {EmbedBuilder} from "discord.js"; export const command = new Command("workst", "view a worker's stats by their id.") - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - try { - const userId = int.options.getString("user_id"); + .addPermission(permissions.employee) + .addOption("string", o => o.setName("user_id").setDescription("The ID of the worker.").setRequired(true)) + .setExecutor(async (int) => { + try { + const userId = int.options.get("user_id", true).value as string; - if (!userId) { - await int.reply({ content: "Please provide a user ID.", ephemeral: true }); - return; - } + if (!userId) { + await int.reply({content: "Please provide a user ID.", ephemeral: true}); + return; + } - const workerInfo = await getWorkerInfo(userId); + const workerInfo = await getWorkerInfo(userId); - if (!workerInfo) { - await int.reply({ content: "Worker not found.", ephemeral: true }); - return; - } + if (!workerInfo) { + await int.reply({content: "Worker not found.", ephemeral: true}); + return; + } - const embed = new EmbedBuilder() - .setTitle(`Worker Stats for ID: ${workerInfo.id}`) - .addFields([ - { name: "Preparations", value: workerInfo.preparations.toString(), inline: true }, - { name: "Deliveries", value: workerInfo.deliveries.toString(), inline: true }, - { name: "Claim Usage Count", value: workerInfo.claimUsageCount.toString(), inline: true }, - { name: "Brew Usage Count", value: workerInfo.brewUsageCount.toString(), inline: true } - ]) - .setTimestamp(); + const embed = new EmbedBuilder() + .setTitle(`Worker Stats for ID: ${workerInfo.id}`) + .addFields([ + {name: "Preparations", value: workerInfo.preparations.toString(), inline: true}, + {name: "Deliveries", value: workerInfo.deliveries.toString(), inline: true}, + {name: "Claim Usage Count", value: workerInfo.claimUsageCount.toString(), inline: true}, + {name: "Brew Usage Count", value: workerInfo.brewUsageCount.toString(), inline: true} + ]) + .setTimestamp(); - await int.reply({ embeds: [embed] }); - } catch (error) { - console.error("Error in workerinfo command:", error); - await int.reply({ content: "An error occurred while fetching worker information.", ephemeral: true }); - } - }); + await int.reply({embeds: [embed]}); + } catch (error) { + console.error("Error in workerinfo command:", error); + await int.reply({content: "An error occurred while fetching worker information.", ephemeral: true}); + } + }); diff --git a/src/commands/economy/balance.ts b/src/commands/economy/balance.ts index 1d67bcf..cfd97ad 100644 --- a/src/commands/economy/balance.ts +++ b/src/commands/economy/balance.ts @@ -1,8 +1,8 @@ /* eslint-disable linebreak-style */ -import { getUserInfo } from "../../database/userInfo"; -import { text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {getUserInfo} from "../../database/userInfo"; +import {text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; export const command = new Command("balance", "Checks your balance.") .setExecutor(async int => { diff --git a/src/commands/economy/crime.ts b/src/commands/economy/crime.ts index 374715b..5163af3 100644 --- a/src/commands/economy/crime.ts +++ b/src/commands/economy/crime.ts @@ -1,11 +1,12 @@ //crime.ts -import { db } from "../../database/database"; -import { upsertUserInfo } from "../../database/userInfo"; -import { constants, text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {db} from "../../database/database"; +import {upsertUserInfo} from "../../database/userInfo"; +import {constants, text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; +import {randRange, sampleArray} from "../../utils/utils"; + const cooldowns: Record = {}; export const command = new Command("crime", "Try your chances on doing crime!") @@ -14,7 +15,7 @@ export const command = new Command("crime", "Try your chances on doing crime!") await int.reply( format( text.errors.cooldown, - pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) + pms(cooldowns[int.user.id] - Date.now(), {compact: true, secondsDecimalDigits: 1}) ) ); return; @@ -25,16 +26,16 @@ export const command = new Command("crime", "Try your chances on doing crime!") ]; const awnser = result[Math.floor(Math.random() * result.length)]; if (awnser === "Failure") { - const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const info = await upsertUserInfo(int.user, int.guild?.id || ""); const obtained = randRange(...constants.crime.amountRange); cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { decrement: obtained } } }); + await db.userInfo.update({where: {id: info.id}, data: {balance: {decrement: obtained}}}); await int.reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); } else { - const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const info = await upsertUserInfo(int.user, int.guild?.id || ""); const obtained = randRange(...constants.crime.amountRange); cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); + await db.userInfo.update({where: {id: info.id}, data: {balance: {increment: obtained}}}); await int.reply(format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``)); } }); diff --git a/src/commands/economy/daily.ts b/src/commands/economy/daily.ts index 532f62d..aaea4ab 100644 --- a/src/commands/economy/daily.ts +++ b/src/commands/economy/daily.ts @@ -1,11 +1,12 @@ //daily.ts -import { db } from "../../database/database"; -import { upsertUserInfo } from "../../database/userInfo"; -import { constants, text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {db} from "../../database/database"; +import {upsertUserInfo} from "../../database/userInfo"; +import {constants, text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; +import {randRange, sampleArray} from "../../utils/utils"; + const cooldowns: Record = {}; export const command = new Command("daily", "Get your daily income!.") @@ -14,14 +15,14 @@ export const command = new Command("daily", "Get your daily income!.") await int.reply( format( text.errors.cooldown, - pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) + pms(cooldowns[int.user.id] - Date.now(), {compact: true, secondsDecimalDigits: 1}) ) ); return; } - const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const info = await upsertUserInfo(int.user, int.guild?.id || ""); const obtained = randRange(...constants.daily.amountRange); cooldowns[int.user.id] = Date.now() + constants.daily.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); + await db.userInfo.update({where: {id: info.id}, data: {balance: {increment: obtained}}}); await int.reply(format(sampleArray(text.commands.daily.responses), `\`$${obtained}\``)); }); \ No newline at end of file diff --git a/src/commands/economy/drinkroullete.ts b/src/commands/economy/drinkroulette.ts similarity index 63% rename from src/commands/economy/drinkroullete.ts rename to src/commands/economy/drinkroulette.ts index ce284de..d3b63e2 100644 --- a/src/commands/economy/drinkroullete.ts +++ b/src/commands/economy/drinkroulette.ts @@ -1,34 +1,34 @@ -import { db } from "../../database/database"; -import { generateOrderId, hasActiveOrder, } from "../../database/orders"; -import { text } from "../../providers/config"; -import { mainChannels, mainRoles } from "../../providers/discord"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; -import { sampleArray } from "../../utils/utils"; - -export const command = new Command("drinkroullete", "Get a random drink ordered!") - .setExecutor(async int => { - if (await hasActiveOrder(int.user)) { - await int.reply(text.commands.order.exists); - return; - } - const drink = format(sampleArray(text.commands.drinkingr.drinks)); - const order = await db.orders.create({ - data: { - id: await generateOrderId(), - user: int.user.id, - details: drink, - channel: int.channelId, - guild: int.guildId, - }, - }); - await mainChannels.brewery.send( - format(text.commands.order.created, { - details: drink, - duty: mainRoles.duty.toString(), - id: order.id, - tag: int.user.tag, - }) - ); - await int.reply(`You got ${order.details}! Please enjoy your free gain!`); - }); +import {db} from "../../database/database"; +import {generateOrderId, hasActiveOrder,} from "../../database/orders"; +import {text} from "../../providers/config"; +import {mainChannels, mainRoles} from "../../providers/discord"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; +import {sampleArray} from "../../utils/utils"; + +export const command = new Command("drinkroullete", "Get a random drink ordered!") + .setExecutor(async int => { + if (await hasActiveOrder(int.user)) { + await int.reply(text.commands.order.exists); + return; + } + const drink = format(sampleArray(text.commands.drinkingr.drinks), ""); + const order = await db.orders.create({ + data: { + id: await generateOrderId(), + user: int.user.id, + details: drink, + channel: int.channelId, + guild: int.guildId, + }, + }); + await mainChannels.brewery.send( + format(text.commands.order.created, { + details: drink, + duty: mainRoles.duty.toString(), + id: order.id, + tag: int.user.tag, + }) + ); + await int.reply(`You got ${order.details}! Please enjoy your free gain!`); + }); diff --git a/src/commands/economy/give.ts b/src/commands/economy/give.ts index 5dc7957..edb118f 100644 --- a/src/commands/economy/give.ts +++ b/src/commands/economy/give.ts @@ -1,30 +1,31 @@ -import { db } from "../../database/database"; -import { getUserInfo } from "../../database/userInfo"; -import { text } from "../../providers/config"; -import { Command } from "../../structures/Command"; +import {db} from "../../database/database"; +import {getUserInfo} from "../../database/userInfo"; +import {text} from "../../providers/config"; +import {Command} from "../../structures/Command"; export const command = new Command("give", "Give someone some money.") .addOption("integer", o => o.setName("money").setDescription("The amount to give.").setRequired(true)) .addOption("string", o => o.setName("receiver").setDescription("Please use their id").setRequired(true)) .setExecutor(async int => { - const user = int.user; - const tip = int.options.getInteger("money", true); - const receiver = int.options.getString("receiver", true); + const tip = int.options.get("money", true).value as number; + const receiver = int.options.get("receiver", true).value as string; const info = await getUserInfo(int.user); if (!info || info.balance < tip) { await int.reply(text.common.notEnoughBalance); return; } - if (tip > 5000) return int.reply("Funny this safety thing stopping your transaction of 5000+"); + if (tip > 5000) { + await int.reply("Funny this safety thing stopping your transaction of 5000+"); + return; + } await db.userInfo.update({ - where: { id: int.user.id }, - data: { balance: { decrement: tip } } + where: {id: int.user.id}, + data: {balance: {decrement: tip}} }); await db.userInfo.update({ - where: { id: receiver }, - data: { balance: { increment: tip } } + where: {id: receiver}, + data: {balance: {increment: tip}} }); - int.reply(`You sucessfully transfered ${tip} to <@${receiver}>`); - + await int.reply(`You sucessfully transfered ${tip} to <@${receiver}>`); }); diff --git a/src/commands/economy/work.ts b/src/commands/economy/work.ts index 7361990..82a22bc 100644 --- a/src/commands/economy/work.ts +++ b/src/commands/economy/work.ts @@ -1,13 +1,14 @@ /* eslint-disable quotes */ /* eslint-disable linebreak-style */ //work.ts -import { db } from "../../database/database"; -import { upsertUserInfo } from "../../database/userInfo"; -import { constants, text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {db} from "../../database/database"; +import {upsertUserInfo} from "../../database/userInfo"; +import {constants, text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; +import {randRange, sampleArray} from "../../utils/utils"; + const cooldowns: Record = {}; export const command = new Command("work", "Gets you some money.") @@ -16,14 +17,14 @@ export const command = new Command("work", "Gets you some money.") await int.reply( format( text.errors.cooldown, - pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) + pms(cooldowns[int.user.id] - Date.now(), {compact: true, secondsDecimalDigits: 1}) ) ); return; } - const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const info = await upsertUserInfo(int.user, int.guild?.id || ""); const obtained = randRange(...constants.work.amountRange); cooldowns[int.user.id] = Date.now() + constants.work.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); + await db.userInfo.update({where: {id: info.id}, data: {balance: {increment: obtained}}}); await int.reply(format(sampleArray(text.commands.work.responses), `\`$${obtained}\``)); }); diff --git a/src/commands/fun/doggo.ts b/src/commands/fun/doggo.ts index a24af2a..53c5d06 100644 --- a/src/commands/fun/doggo.ts +++ b/src/commands/fun/doggo.ts @@ -1,7 +1,7 @@ -import { EmbedBuilder } from "discord.js"; -import { text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {EmbedBuilder} from "discord.js"; +import {text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import Client from "nekos.life"; export const command = new Command("doggo", "Get cute doggos.") @@ -15,7 +15,7 @@ export const command = new Command("doggo", "Get cute doggos.") new EmbedBuilder() .setTitle("Bam someone got doggoed") .setImage(yeeeee.url) - .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), + .setFooter({text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL()}), ], }); }); \ No newline at end of file diff --git a/src/commands/fun/goose.ts b/src/commands/fun/goose.ts index 190c04a..9e3af48 100644 --- a/src/commands/fun/goose.ts +++ b/src/commands/fun/goose.ts @@ -1,7 +1,7 @@ -import { EmbedBuilder } from "discord.js"; -import { text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {EmbedBuilder} from "discord.js"; +import {text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import Client from "nekos.life"; export const command = new Command("goose", "See cute gooseeeeeeeeee") @@ -9,7 +9,7 @@ export const command = new Command("goose", "See cute gooseeeeeeeeee") .setExecutor(async int => { const nekos = new Client(); const yeeeee = await nekos.goose(); - const goose = int.options.getUser("goose", true); + const goose = (int.options.get("goose", true).value as string); const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ @@ -17,7 +17,7 @@ export const command = new Command("goose", "See cute gooseeeeeeeeee") .setTitle("Hoooonk") .setImage(yeeeee.url) .setDescription(`${goose} got honked at by ${int.user.tag}`) - .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), + .setFooter({text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL()}), ], }); diff --git a/src/commands/fun/hug.ts b/src/commands/fun/hug.ts index d20a3cc..383ac92 100644 --- a/src/commands/fun/hug.ts +++ b/src/commands/fun/hug.ts @@ -1,7 +1,7 @@ -import { EmbedBuilder } from "discord.js"; -import { text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {EmbedBuilder} from "discord.js"; +import {text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import Client from "nekos.life"; export const command = new Command("hug", "Give your friends a good hug.") @@ -9,7 +9,7 @@ export const command = new Command("hug", "Give your friends a good hug.") .setExecutor(async int => { const nekos = new Client(); const yeeeee = await nekos.hug(); - const slapped = int.options.getUser("hug", true); + const slapped = int.options.get("hug", true).value as string; const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ @@ -17,7 +17,7 @@ export const command = new Command("hug", "Give your friends a good hug.") .setTitle("Bam someone got hugged") .setImage(yeeeee.url) .setDescription(`${slapped} got hugged by ${int.user.tag}`) - .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), + .setFooter({text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL()}), ], }); diff --git a/src/commands/fun/meme.ts b/src/commands/fun/meme.ts index 34b3401..64543b6 100644 --- a/src/commands/fun/meme.ts +++ b/src/commands/fun/meme.ts @@ -1,27 +1,27 @@ import got from "got"; -import { EmbedBuilder } from "discord.js"; -import { Command } from "../../structures/Command"; -export const command = new Command("memes", "memes!") - .setExecutor(async int => { - got('https://www.reddit.com/r/memes/random/.json') - .then((response: { body: string; }) => { - const [list] = JSON.parse(response.body); - const [post] = list.data.children; +import {EmbedBuilder} from "discord.js"; +import {Command} from "../../structures/Command"; - const permalink = post.data.permalink; - const memeUrl = `https://reddit.com${permalink}`; - const memeImage = post.data.url; - const memeTitle = post.data.title; - const memeUpvotes = post.data.ups; - const memeNumComments = post.data.num_comments; - int.reply({ - embeds: [ - new EmbedBuilder() - .setImage(memeImage) - .setDescription(`${int.user.tag} Has summoned a meme!`) - .setFooter({ text: memeUrl, memeUpvotes, }), +export const command = new Command("memes", "memes!") + .setExecutor(async int => { + got("https://www.reddit.com/r/memes/random/.json") + .then((response: { body: string; }) => { + const [list] = JSON.parse(response.body); + const [post] = list.data.children; - ], - }); - }); - }); \ No newline at end of file + const permalink = post.data.permalink; + const memeUrl = `https://reddit.com${permalink}`; + const memeImage = post.data.url; + const memeTitle = post.data.title; + const memeUpvotes = post.data.ups; + const memeNumComments = post.data.num_comments; + int.reply({ + embeds: [ + new EmbedBuilder() + .setImage(memeImage) + .setDescription(`${int.user.tag} Has summoned a meme!`) + .setFooter({text: memeUrl}), + ], + }); + }); + }); \ No newline at end of file diff --git a/src/commands/fun/meow.ts b/src/commands/fun/meow.ts index c4f3410..1f19b5a 100644 --- a/src/commands/fun/meow.ts +++ b/src/commands/fun/meow.ts @@ -1,7 +1,7 @@ -import { EmbedBuilder } from "discord.js"; -import { text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {EmbedBuilder} from "discord.js"; +import {text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import Client from "nekos.life"; export const command = new Command("meow", "Cute kittens.") @@ -15,8 +15,7 @@ export const command = new Command("meow", "Cute kittens.") .setTitle("You Summoned a kitten!") .setImage(yeeeee.url) .setDescription(`${int.user.tag} Has summoned an kitten!`) - .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), - + .setFooter({text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL()}), ], }); }); \ No newline at end of file diff --git a/src/commands/fun/pat.ts b/src/commands/fun/pat.ts index 8cef3c5..c0d9f8d 100644 --- a/src/commands/fun/pat.ts +++ b/src/commands/fun/pat.ts @@ -1,7 +1,7 @@ -import { EmbedBuilder } from "discord.js"; -import { text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {EmbedBuilder} from "discord.js"; +import {text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import Client from "nekos.life"; export const command = new Command("pat", "Give your friends a good Pat.") @@ -9,7 +9,7 @@ export const command = new Command("pat", "Give your friends a good Pat.") .setExecutor(async int => { const nekos = new Client(); const yeeeee = await nekos.pat(); - const slapped = int.options.getUser("pat", true); + const slapped = int.options.get("pat", true).value as string; const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ @@ -17,7 +17,7 @@ export const command = new Command("pat", "Give your friends a good Pat.") .setTitle("Bam someone got patted") .setImage(yeeeee.url) .setDescription(`${slapped} got patted by ${int.user.tag}`) - .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), + .setFooter({text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL()}), ], }); diff --git a/src/commands/fun/slap.ts b/src/commands/fun/slap.ts index 30fb727..991a2c6 100644 --- a/src/commands/fun/slap.ts +++ b/src/commands/fun/slap.ts @@ -1,7 +1,7 @@ -import { EmbedBuilder } from "discord.js"; -import { text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {EmbedBuilder} from "discord.js"; +import {text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import Client from "nekos.life"; export const command = new Command("slap", "Give your friends a good slap.") @@ -9,7 +9,7 @@ export const command = new Command("slap", "Give your friends a good slap.") .setExecutor(async int => { const nekos = new Client(); const yeeeee = await nekos.slap(); - const slapped = int.options.getUser("slap", true); + const slapped = int.options.get("slap", true).value as string; const tcfe = text.commands.feedback.embed; await int.reply({ embeds: [ @@ -17,8 +17,7 @@ export const command = new Command("slap", "Give your friends a good slap.") .setTitle("Bam someone got slapped") .setImage(yeeeee.url) .setDescription(`${slapped} got slapped by ${int.user.tag}`) - .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), - + .setFooter({text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL()}), ], }); }); diff --git a/src/commands/fun/tickle.ts b/src/commands/fun/tickle.ts index 89c864b..ba2baa8 100644 --- a/src/commands/fun/tickle.ts +++ b/src/commands/fun/tickle.ts @@ -1,24 +1,24 @@ -import { EmbedBuilder } from "discord.js"; -import { text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {EmbedBuilder} from "discord.js"; +import {text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import Client from "nekos.life"; export const command = new Command("tickle", "Give your friends a good tickle.") - .addOption("user", o => o.setName("tickle").setDescription("Tickle your friends.").setRequired(true)) - .setExecutor(async int => { - const nekos = new Client(); - const yeeeee = await nekos.tickle(); - const tickled = int.options.getUser("tickle", true); - const tcfe = text.commands.feedback.embed; - await int.reply({ - embeds: [ - new EmbedBuilder() - .setTitle("Bam someone got tickled") - .setImage(yeeeee.url) - .setDescription(`${tickled} got tickled by ${int.user.tag}`) - .setFooter({ text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), + .addOption("user", o => o.setName("tickle").setDescription("Tickle your friends.").setRequired(true)) + .setExecutor(async int => { + const nekos = new Client(); + const yeeeee = await nekos.tickle(); + const tickled = int.options.get("tickle", true).value as string; + const tcfe = text.commands.feedback.embed; + await int.reply({ + embeds: [ + new EmbedBuilder() + .setTitle("Bam someone got tickled") + .setImage(yeeeee.url) + .setDescription(`${tickled} got tickled by ${int.user.tag}`) + .setFooter({text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL()}), - ], - }); - }); \ No newline at end of file + ], + }); + }); \ No newline at end of file diff --git a/src/commands/moderation/blacklist.ts b/src/commands/moderation/blacklist.ts index 4080c25..8c0e5bf 100644 --- a/src/commands/moderation/blacklist.ts +++ b/src/commands/moderation/blacklist.ts @@ -1,8 +1,8 @@ -import { db } from "../../database/database"; -import { text } from "../../providers/config"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { blacklist, createBlacklist } from "../../database/blacklist"; +import {db} from "../../database/database"; +import {text} from "../../providers/config"; +import {permissions} from "../../providers/permissions"; +import {Command} from "../../structures/Command"; +import {blacklist, createBlacklist} from "../../database/blacklist"; export const command = new Command("blacklist", "Blacklists a user, server, or channel.") .addPermission(permissions.moderator) @@ -10,21 +10,21 @@ export const command = new Command("blacklist", "Blacklists a user, server, or c .addOption("string", o => o.setName("reason").setDescription("The reason for the blacklist.")) .addOption("boolean", o => o.setName("unblacklist").setDescription("Whether to unblacklist instead of blacklisting.")) .setExecutor(async int => { - const id = int.options.getString("id", true); - if (int.options.getBoolean("unblacklist") === true) { + const id = int.options.get("id", true).value as string; + if (int.options.get("unblacklist", true).value as boolean) { if (!blacklist.has(id)) { await int.reply(text.commands.blacklist.remove.existing); return; } blacklist.delete(id); - await db.blacklist.delete({ where: { id } }); + await db.blacklist.delete({where: {id}}); await int.reply(text.commands.blacklist.remove.success); } else { if (blacklist.has(id)) { await int.reply(text.commands.blacklist.existing); return; } - await createBlacklist(id, int.user, int.options.getString("reason") ?? "No reason specified."); + await createBlacklist(id, int.user, int.options.get("reason", true).value as string ?? "No reason specified."); await int.reply(text.commands.blacklist.success); } }); diff --git a/src/commands/orders/cancel.ts b/src/commands/orders/cancel.ts index 7d80b16..69fb3a9 100644 --- a/src/commands/orders/cancel.ts +++ b/src/commands/orders/cancel.ts @@ -1,9 +1,9 @@ -import { CafeStatus, OrderStatus } from "@prisma/client"; -import { db } from "../../database/database"; -import { mainChannels } from "../../providers/discord"; -import { getUserActiveOrder } from "../../database/orders"; -import { text } from "../../providers/config"; -import { Command } from "../../structures/Command"; +import {OrderStatus} from "@prisma/client"; +import {db} from "../../database/database"; +import {mainChannels} from "../../providers/discord"; +import {getUserActiveOrder} from "../../database/orders"; +import {text} from "../../providers/config"; +import {Command} from "../../structures/Command"; export const command = new Command("cancel", "Cancels your active order.") .setExecutor(async int => { diff --git a/src/commands/orders/feedback.ts b/src/commands/orders/feedback.ts index 57fae50..5476df5 100644 --- a/src/commands/orders/feedback.ts +++ b/src/commands/orders/feedback.ts @@ -1,10 +1,10 @@ -import { EmbedBuilder } from "discord.js"; -import { db } from "../../database/database"; -import { getLatestOrder, OrderFlags } from "../../database/orders"; -import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {EmbedBuilder} from "discord.js"; +import {db} from "../../database/database"; +import {getLatestOrder, OrderFlags} from "../../database/orders"; +import {text} from "../../providers/config"; +import {mainChannels} from "../../providers/discord"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; export const command = new Command("feedback", "Give feedback on your last order.") .addOption("string", o => o.setName("feedback").setDescription("The feedback to give.").setRequired(true)) @@ -19,7 +19,7 @@ export const command = new Command("feedback", "Give feedback on your last order return; } - const feedback = int.options.getString("feedback", true); + const feedback = int.options.get("feedback", true).value as string; await int.reply(format(text.commands.feedback.success, lastOrder.details)); const tcfe = text.commands.feedback.embed; await mainChannels.feedback.send({ @@ -27,11 +27,11 @@ export const command = new Command("feedback", "Give feedback on your last order new EmbedBuilder() .setTitle(format(tcfe.title, lastOrder.id)) .setDescription(feedback) - .setFooter({ text: format(tcfe.footer, int.user.username), iconURL: int.user.displayAvatarURL() }), + .setFooter({text: format(tcfe.footer, int.user.username), iconURL: int.user.displayAvatarURL()}), ], }); await db.orders.update({ - where: { id: lastOrder.id }, - data: { flags: lastOrder.flags | OrderFlags.FeedbackGiven } + where: {id: lastOrder.id}, + data: {flags: lastOrder.flags | OrderFlags.FeedbackGiven} }); }); diff --git a/src/commands/orders/order.ts b/src/commands/orders/order.ts index 6010b9f..f9b4f77 100644 --- a/src/commands/orders/order.ts +++ b/src/commands/orders/order.ts @@ -1,9 +1,9 @@ -import { db } from "../../database/database"; -import { generateOrderId, hasActiveOrder } from "../../database/orders"; -import { text } from "../../providers/config"; -import { mainChannels, mainRoles } from "../../providers/discord"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {db} from "../../database/database"; +import {generateOrderId, hasActiveOrder} from "../../database/orders"; +import {text} from "../../providers/config"; +import {mainChannels, mainRoles} from "../../providers/discord"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; export const command = new Command("order", "Orders a drink.") .addOption("string", (o) => @@ -43,7 +43,7 @@ export const command = new Command("order", "Orders a drink.") }, }); - await int.reply(format(text.commands.order.success, { id: order.id, details: drink })); + await int.reply(format(text.commands.order.success, {id: order.id, details: drink})); if (int.member.nickname?.toLowerCase() === "bart") { await int.followUp("I will end you"); diff --git a/src/commands/orders/status.ts b/src/commands/orders/status.ts index c93e7ef..bdf45fd 100644 --- a/src/commands/orders/status.ts +++ b/src/commands/orders/status.ts @@ -1,8 +1,8 @@ -import { getUserActiveOrder } from "../../database/orders"; -import { text } from "../../providers/config"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { EmbedBuilder } from "discord.js"; +import {getUserActiveOrder} from "../../database/orders"; +import {text} from "../../providers/config"; +import {permissions} from "../../providers/permissions"; +import {Command} from "../../structures/Command"; +import {EmbedBuilder} from "discord.js"; export const command = new Command("status", "Checks the status of your current order.") .addPermission(permissions.employee) @@ -16,5 +16,5 @@ export const command = new Command("status", "Checks the status of your current .setColor("#0099ff") .setTitle("Order Status") .setDescription(`The status of your order is ${order.status}.`); - await int.reply({ embeds: [embed] }); + await int.reply({embeds: [embed]}); }); diff --git a/src/commands/orders/tip.ts b/src/commands/orders/tip.ts index 5b7271e..adc66a2 100644 --- a/src/commands/orders/tip.ts +++ b/src/commands/orders/tip.ts @@ -1,11 +1,11 @@ -import { EmbedBuilder } from "discord.js"; -import { db } from "../../database/database"; -import { getLatestOrder, OrderFlags } from "../../database/orders"; -import { getUserInfo } from "../../database/userInfo"; -import { text } from "../../providers/config"; -import { mainChannels } from "../../providers/discord"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {EmbedBuilder} from "discord.js"; +import {db} from "../../database/database"; +import {getLatestOrder, OrderFlags} from "../../database/orders"; +import {getUserInfo} from "../../database/userInfo"; +import {text} from "../../providers/config"; +import {mainChannels} from "../../providers/discord"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; export const command = new Command("tip", "Tip your last order.") .addOption("integer", o => o.setName("money").setDescription("The amount to tip.").setRequired(true)) @@ -38,19 +38,19 @@ export const command = new Command("tip", "Tip your last order.") .setDescription( format(tcte.description, lastOrder.id, tip, `<@${lastOrder.claimer}>`, `<@${lastOrder.deliverer}>`) ) - .setFooter({ text: format(tcte.footer, int.user.tag), iconURL: int.user.displayAvatarURL() }), + .setFooter({text: format(tcte.footer, int.user.tag), iconURL: int.user.displayAvatarURL()}), ], }); await db.orders.update({ - where: { id: lastOrder.id }, - data: { flags: lastOrder.flags | OrderFlags.Tipped }, + where: {id: lastOrder.id}, + data: {flags: lastOrder.flags | OrderFlags.Tipped}, }); await db.userInfo.update({ - where: { id: int.user.id }, - data: { balance: { decrement: tip } } + where: {id: int.user.id}, + data: {balance: {decrement: tip}} }); await db.userInfo.updateMany({ - where: { id: { in: [lastOrder.claimer, lastOrder.deliverer].filter(Boolean) as string[] } }, - data: { balance: { increment: tip } } + where: {id: {in: [lastOrder.claimer, lastOrder.deliverer].filter(Boolean) as string[]}}, + data: {balance: {increment: tip}} }); }); diff --git a/src/commands/orders/worker/brew.ts b/src/commands/orders/worker/brew.ts index ccd5e8b..0b7926d 100644 --- a/src/commands/orders/worker/brew.ts +++ b/src/commands/orders/worker/brew.ts @@ -1,231 +1,232 @@ -/* eslint-disable indent */ -/* eslint-disable quotes */ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder } from "../../../database/orders"; -import { upsertWorkerInfo } from "../../../database/workerInfo"; -import { client } from "../../../providers/client"; -import { config, constants, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; -import { randRange } from "../../../utils/utils"; -import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; +import {OrderStatus} from "@prisma/client"; +import {db} from "../../../database/database"; +import {getClaimedOrder} from "../../../database/orders"; +import {upsertWorkerInfo} from "../../../database/workerInfo"; +import {constants} from "../../../providers/config"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import {randRange} from "../../../utils/utils"; +import type {MessageComponentInteraction} from "discord.js"; +import {ComponentType, EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; +import {IllegalStateError} from "../../../utils/error"; export const command = new Command( - "brew", - "Brews your claimed order." + "brew", + "Brews your claimed order." ) - .addSubCommand((subcommand) => - subcommand - .setName("attach") - .setDescription("Attach an image to your order.") - .addAttachmentOption((option) => - option - .setName("attachment") - .setDescription("The image to attach to the order.") - .setRequired(true) - ) - ) - .addSubCommand((subcommand) => - subcommand - .setName("url") - .setDescription("Attach an image to your order by URL.") - .addStringOption((option) => - option - .setName("url") - .setDescription("The URL of the image to attach to the order.") - .setRequired(true) - ) - ) - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - const commandName = 'brew'; // Command name is "brew" in this case - - // Track command usage - await upsertWorkerInfo(int.user, commandName); - - const order = await getClaimedOrder(int.user); - if (!order) { - await int.reply({ content: "You don't have a claimed order." }); - return; - } - - const subcommand = int.options.getSubcommand(true); - let imageUrl: string | undefined; - - if (subcommand === "attach") { - const attachment = int.options.get("attachment", true)?.attachment; - if (!attachment) { - await int.reply({ content: "Attachment is missing or not valid." }); - return; - } - imageUrl = attachment.url; - - // Create an embed with the image preview - const imagePreviewEmbed = new EmbedBuilder() - .setTitle("Image Preview") - .setImage(imageUrl) // Set the image URL as the preview - .toJSON(); - - const confirmationDescription = `Order Details: ${order.details}`; - - const confirmSelectMenu = new StringSelectMenuBuilder() - .setCustomId("confirm_brew") - .setPlaceholder("Select an option") - .addOptions([ - { - label: "Yes", - description: "Proceed with brewing the order", - value: "yes", - }, - { - label: "No", - description: "Cancel the brewing process", - value: "no", - }, - ]) - .toJSON(); - - const confirmActionRow = { - type: ComponentType.ActionRow, - components: [confirmSelectMenu], - }; - - await int.reply({ - content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, - embeds: [imagePreviewEmbed], // Include the image preview in the message - components: [confirmActionRow], - ephemeral: true, - }); - - const confirmFilter = (i) => i.customId === "confirm_brew" && i.user.id === int.user.id; - const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); - - confirmCollector.on("collect", async (confirmInteraction) => { - if (confirmInteraction.isStringSelectMenu()) { - const selectedValue = confirmInteraction.values[0]; - if (selectedValue === "yes") { - await confirmInteraction.update({ - content: "You chose to proceed with brewing the order.", - components: [], - }); - - const time = randRange(...constants.brewTimeRangeMs); - await db.orders.update({ - where: { - id: order.id, - }, - data: { - status: OrderStatus.Brewing, - image: imageUrl ?? "default.png", - timeout: new Date(Date.now() + time), - }, - }); - await upsertWorkerInfo(int.user); - - await int.followUp({ - content: "Brewing process started.", - files: imageUrl ? [{ attachment: imageUrl }] : undefined, - }); - } else if (selectedValue === "no") { - await confirmInteraction.update({ - content: "You chose to cancel the brewing process.", - components: [], - }); - } - } - }); - - confirmCollector.on("end", async (collected) => { - if (collected.size === 0) { - await int.followUp("You didn't make a selection in time."); - } - }); - } else if (subcommand === "url") { - const url = int.options.getString("url", true); - imageUrl = url; - - // Create an embed with the image preview - const imagePreviewEmbed = new EmbedBuilder() - .setTitle("Image Preview") - .setImage(imageUrl) // Set the image URL as the preview - .toJSON(); - - const confirmationDescription = `Order Details: ${order.details}`; - - const confirmSelectMenu = new StringSelectMenuBuilder() - .setCustomId("confirm_brew_url") - .setPlaceholder("Select an option") - .addOptions([ - { - label: "Yes", - description: "Proceed with brewing the order", - value: "yes", - }, - { - label: "No", - description: "Cancel the brewing process", - value: "no", - }, - ]) - .toJSON(); - - const confirmActionRow = { - type: ComponentType.ActionRow, - components: [confirmSelectMenu], - }; - - await int.reply({ - content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, - embeds: [imagePreviewEmbed], // Include the image preview in the message - components: [confirmActionRow], - ephemeral: true, - }); - - const confirmFilter = (i) => i.customId === "confirm_brew_url" && i.user.id === int.user.id; - const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); - - confirmCollector.on("collect", async (confirmInteraction) => { - if (confirmInteraction.isStringSelectMenu()) { - const selectedValue = confirmInteraction.values[0]; - if (selectedValue === "yes") { - await confirmInteraction.update({ - content: "You chose to proceed with brewing the order.", - components: [], - }); - - const time = randRange(...constants.brewTimeRangeMs); - await db.orders.update({ - where: { - id: order.id, - }, - data: { - status: OrderStatus.Brewing, - image: imageUrl ?? "default.png", - timeout: new Date(Date.now() + time), - }, - }); - await upsertWorkerInfo(int.user); - - await int.followUp({ - content: "Brewing process started.", - files: imageUrl ? [{ attachment: imageUrl }] : undefined, - }); - } else if (selectedValue === "no") { - await confirmInteraction.update({ - content: "You chose to cancel the brewing process.", - components: [], - }); - } - } - }); - - confirmCollector.on("end", async (collected) => { - if (collected.size === 0) { - await int.followUp("You didn't make a selection in time."); - } - }); - } - }); + .addSubCommand((subcommand) => + subcommand + .setName("attach") + .setDescription("Attach an image to your order.") + .addAttachmentOption((option) => + option + .setName("attachment") + .setDescription("The image to attach to the order.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("url") + .setDescription("Attach an image to your order by URL.") + .addStringOption((option) => + option + .setName("url") + .setDescription("The URL of the image to attach to the order.") + .setRequired(true) + ) + ) + .addPermission(permissions.employee) + .setExecutor(async int => { + const commandName = "brew"; // Command name is "brew" in this case + + // Track command usage + await upsertWorkerInfo(int.user, commandName); + + const order = await getClaimedOrder(int.user); + if (!order) { + await int.reply({content: "You don't have a claimed order."}); + return; + } + + const subcommand = int.options.getSubcommand(true); + let imageUrl: string | undefined; + + if (subcommand === "attach") { + const attachment = int.options.get("attachment", true)?.attachment; + if (!attachment) { + await int.reply({content: "Attachment is missing or not valid."}); + return; + } + imageUrl = attachment.url; + + // Create an embed with the image preview + const imagePreviewEmbed = new EmbedBuilder() + .setTitle("Image Preview") + .setImage(imageUrl) // Set the image URL as the preview + .toJSON(); + + const confirmationDescription = `Order Details: ${order.details}`; + + const confirmSelectMenu = new StringSelectMenuBuilder() + .setCustomId("confirm_brew") + .setPlaceholder("Select an option") + .addOptions([ + { + label: "Yes", + description: "Proceed with brewing the order", + value: "yes", + }, + { + label: "No", + description: "Cancel the brewing process", + value: "no", + }, + ]); + + const confirmActionRow = { + type: ComponentType.ActionRow, + components: [confirmSelectMenu], + }; + + await int.reply({ + content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, + embeds: [imagePreviewEmbed], // Include the image preview in the message + components: [confirmActionRow], + ephemeral: true, + }); + + if (!int.channel) { + throw new IllegalStateError("Channel is not available."); + } + const confirmFilter = (i: MessageComponentInteraction<"cached">) => i.customId === "confirm_brew" && i.user.id === int.user.id; + const confirmCollector = int.channel.createMessageComponentCollector({filter: confirmFilter, time: 15000}); + + confirmCollector.on("collect", async (confirmInteraction) => { + if (confirmInteraction.isStringSelectMenu()) { + const selectedValue = confirmInteraction.values[0]; + if (selectedValue === "yes") { + await confirmInteraction.update({ + content: "You chose to proceed with brewing the order.", + components: [], + }); + + const time = randRange(...constants.brewTimeRangeMs); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Brewing, + image: imageUrl ?? "default.png", + timeout: new Date(Date.now() + time), + }, + }); + await upsertWorkerInfo(int.user); + + await int.followUp({ + content: "Brewing process started.", + files: imageUrl ? [{attachment: imageUrl}] : undefined, + }); + } else if (selectedValue === "no") { + await confirmInteraction.update({ + content: "You chose to cancel the brewing process.", + components: [], + }); + } + } + }); + + confirmCollector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't make a selection in time."); + } + }); + } else if (subcommand === "url") { + imageUrl = int.options.get("url", true).value as string; + + // Create an embed with the image preview + const imagePreviewEmbed = new EmbedBuilder() + .setTitle("Image Preview") + .setImage(imageUrl) // Set the image URL as the preview + .toJSON(); + + const confirmationDescription = `Order Details: ${order.details}`; + + const confirmSelectMenu = new StringSelectMenuBuilder() + .setCustomId("confirm_brew_url") + .setPlaceholder("Select an option") + .addOptions([ + { + label: "Yes", + description: "Proceed with brewing the order", + value: "yes", + }, + { + label: "No", + description: "Cancel the brewing process", + value: "no", + }, + ]); + + const confirmActionRow = { + type: ComponentType.ActionRow, + components: [confirmSelectMenu], + }; + + await int.reply({ + content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, + embeds: [imagePreviewEmbed], // Include the image preview in the message + components: [confirmActionRow], + ephemeral: true, + }); + + if (!int.channel) { + throw new IllegalStateError("Channel is not available."); + } + + const confirmFilter = (i: MessageComponentInteraction<"cached">) => i.customId === "confirm_brew_url" && i.user.id === int.user.id; + const confirmCollector = int.channel.createMessageComponentCollector({filter: confirmFilter, time: 15000}); + + confirmCollector.on("collect", async (confirmInteraction) => { + if (confirmInteraction.isStringSelectMenu()) { + const selectedValue = confirmInteraction.values[0]; + if (selectedValue === "yes") { + await confirmInteraction.update({ + content: "You chose to proceed with brewing the order.", + components: [], + }); + + const time = randRange(...constants.brewTimeRangeMs); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Brewing, + image: imageUrl ?? "default.png", + timeout: new Date(Date.now() + time), + }, + }); + await upsertWorkerInfo(int.user); + + await int.followUp({ + content: "Brewing process started.", + files: imageUrl ? [{attachment: imageUrl}] : undefined, + }); + } else if (selectedValue === "no") { + await confirmInteraction.update({ + content: "You chose to cancel the brewing process.", + components: [], + }); + } + } + }); + + confirmCollector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't make a selection in time."); + } + }); + } + }); diff --git a/src/commands/orders/worker/claim.ts b/src/commands/orders/worker/claim.ts index e2bfa72..67fd767 100644 --- a/src/commands/orders/worker/claim.ts +++ b/src/commands/orders/worker/claim.ts @@ -1,133 +1,134 @@ /* eslint-disable indent */ -import { upsertWorkerInfo } from "../../../database/workerInfo"; -import { Command } from "../../../structures/Command"; -import { permissions } from "../../../providers/permissions"; -import { OrderStatus, getClaimedOrder } from "../../../database/orders"; -import { db } from "../../../database/database"; -import { text } from "../../../providers/config"; -import { client } from "../../../providers/client"; -import { CommandInteraction, StringSelectMenuBuilder, ComponentType, EmbedBuilder } from "discord.js"; +import {upsertWorkerInfo} from "../../../database/workerInfo"; +import {Command} from "../../../structures/Command"; +import {permissions} from "../../../providers/permissions"; +import {getClaimedOrder, OrderStatus} from "../../../database/orders"; +import {db} from "../../../database/database"; +import {text} from "../../../providers/config"; +import {client} from "../../../providers/client"; +import type {CommandInteraction} from "discord.js"; +import {ComponentType, EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; const claimedOrderLocks = new Map(); // Map to store claim locks for each order ID const claimedOrders = new Set(); // Set to store claimed order IDs export const command = new Command("claim", "Claims an order.") - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - if (await getClaimedOrder(int.user)) { - await int.reply({ content: text.commands.claim.existing, ephemeral: false }); - return; - } - - const orders = await db.orders.findMany({ - where: { - status: OrderStatus.Unprepared, - }, - select: { - id: true, - user: true, - details: true, - }, - }); - - if (orders.length === 0) { - await int.reply({ content: "There are no available orders to claim.", ephemeral: true }); - return; - } - - const options = orders.map(order => { - const details = order.details.length > 50 ? `${order.details.substring(0, 47)}...` : order.details; - const user = order.user.length > 50 ? `${order.user.substring(0, 47)}...` : order.user; - - return { - label: order.id, - description: `Details: ${details}\nUser: ${user}`, - value: order.id, - details: order.details, - }; - }); - - const selectMenu = new StringSelectMenuBuilder() - .setCustomId("claim_order") - .setPlaceholder("Select an order to claim") - .addOptions(options); - - const actionRow = { - type: ComponentType.ActionRow, - components: [selectMenu], - }; - - const embed = new EmbedBuilder() - .setDescription("Please select an order to claim.") - .setColor("#00FF00"); - - await int.reply({ - embeds: [embed], - components: [actionRow], - ephemeral: true, - }); - - // Call the function to update command usage for the user - await upsertWorkerInfo(int.user, "claim"); - }); + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + if (await getClaimedOrder(int.user)) { + await int.reply({content: text.commands.claim.existing, ephemeral: false}); + return; + } + + const orders = await db.orders.findMany({ + where: { + status: OrderStatus.Unprepared, + }, + select: { + id: true, + user: true, + details: true, + }, + }); + + if (orders.length === 0) { + await int.reply({content: "There are no available orders to claim.", ephemeral: true}); + return; + } + + const options = orders.map(order => { + const details = order.details.length > 50 ? `${order.details.substring(0, 47)}...` : order.details; + const user = order.user.length > 50 ? `${order.user.substring(0, 47)}...` : order.user; + + return { + label: order.id, + description: `Details: ${details}\nUser: ${user}`, + value: order.id, + details: order.details, + }; + }); + + const selectMenu = new StringSelectMenuBuilder() + .setCustomId("claim_order") + .setPlaceholder("Select an order to claim") + .addOptions(options); + + const actionRow = { + type: ComponentType.ActionRow, + components: [selectMenu], + }; + + const embed = new EmbedBuilder() + .setDescription("Please select an order to claim.") + .setColor("#00FF00"); + + await int.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true, + }); + + // Call the function to update command usage for the user + await upsertWorkerInfo(int.user, "claim"); + }); client.on("interactionCreate", async (interaction) => { - if (!interaction.isStringSelectMenu()) return; - - const componentId = interaction.customId; - if (componentId === "claim_order") { - const orderId = interaction.values[0]; - - if (claimedOrders.has(orderId)) { - await interaction.reply({ content: "This order has already been claimed.", ephemeral: true }); - return; - } - - // Check if a claim lock exists for this order - if (claimedOrderLocks.has(orderId) && claimedOrderLocks.get(orderId)) { - await interaction.reply({ content: "Another user is currently claiming this order. Please try again later.", ephemeral: true }); - return; - } - - // Set a claim lock for this order - claimedOrderLocks.set(orderId, true); - - const order = await db.orders.findUnique({ - where: { - id: orderId, - }, - select: { - id: true, - user: true, - details: true, - }, - }); - - if (!order) { - // Release the claim lock - claimedOrderLocks.delete(orderId); - await interaction.reply({ content: "Invalid order selected.", ephemeral: true }); - return; - } - - if (order.user === interaction.user.id && !permissions.developer.hasPermission(interaction.user)) { - // Release the claim lock - claimedOrderLocks.delete(orderId); - await interaction.reply({ content: text.common.interactOwn, ephemeral: true }); - return; - } - - // Update the claimed order and release the claim lock - await db.orders.update({ - where: { id: orderId }, - data: { claimer: interaction.user.id, status: OrderStatus.Preparing }, - }); - - claimedOrders.add(orderId); - - await interaction.reply({ - content: `${text.commands.claim.success.replace("{id}", order.id)}`, - ephemeral: false, - }); - } + if (!interaction.isStringSelectMenu()) return; + + const componentId = interaction.customId; + if (componentId === "claim_order") { + const orderId = interaction.values[0]; + + if (claimedOrders.has(orderId)) { + await interaction.reply({content: "This order has already been claimed.", ephemeral: true}); + return; + } + + // Check if a claim lock exists for this order + if (claimedOrderLocks.has(orderId) && claimedOrderLocks.get(orderId)) { + await interaction.reply({content: "Another user is currently claiming this order. Please try again later.", ephemeral: true}); + return; + } + + // Set a claim lock for this order + claimedOrderLocks.set(orderId, true); + + const order = await db.orders.findUnique({ + where: { + id: orderId, + }, + select: { + id: true, + user: true, + details: true, + }, + }); + + if (!order) { + // Release the claim lock + claimedOrderLocks.delete(orderId); + await interaction.reply({content: "Invalid order selected.", ephemeral: true}); + return; + } + + if (order.user === interaction.user.id && !permissions.developer.hasPermission(interaction.user)) { + // Release the claim lock + claimedOrderLocks.delete(orderId); + await interaction.reply({content: text.common.interactOwn, ephemeral: true}); + return; + } + + // Update the claimed order and release the claim lock + await db.orders.update({ + where: {id: orderId}, + data: {claimer: interaction.user.id, status: OrderStatus.Preparing}, + }); + + claimedOrders.add(orderId); + + await interaction.reply({ + content: `${text.commands.claim.success.replace("{id}", order.id)}`, + ephemeral: false, + }); + } }); diff --git a/src/commands/orders/worker/claimed.ts b/src/commands/orders/worker/claimed.ts index 950878d..f669f32 100644 --- a/src/commands/orders/worker/claimed.ts +++ b/src/commands/orders/worker/claimed.ts @@ -1,7 +1,8 @@ -import { getClaimedOrder, orderEmbedAsync } from "../../../database/orders"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import type { CommandInteraction } from "discord.js"; +import {getClaimedOrder, orderEmbedAsync} from "../../../database/orders"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import type {CommandInteraction} from "discord.js"; + export const command = new Command("claimed", "Checks your claimed order.") .addPermission(permissions.employee) .setExecutor(async (int: CommandInteraction) => { diff --git a/src/commands/orders/worker/delete.ts b/src/commands/orders/worker/delete.ts index 2b96f1b..5e3aea3 100644 --- a/src/commands/orders/worker/delete.ts +++ b/src/commands/orders/worker/delete.ts @@ -1,19 +1,19 @@ -import { CafeStatus, OrderStatus } from "@prisma/client"; -import { db } from "../../../database/database"; -import { matchActiveOrder } from "../../../database/orders"; -import { client } from "../../../providers/client"; -import { text } from "../../../providers/config"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; +import {OrderStatus} from "@prisma/client"; +import {db} from "../../../database/database"; +import {matchActiveOrder} from "../../../database/orders"; +import {client} from "../../../providers/client"; +import {text} from "../../../providers/config"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import {format} from "../../../utils/string"; export const command = new Command("delete", "Deletes an order.") .addPermission(permissions.employee) .addOption("string", o => o.setRequired(true).setName("order").setDescription("The order to delete.")) .addOption("string", o => o.setRequired(true).setName("reason").setDescription("The reason for the deletion.")) .setExecutor(async int => { - const match = int.options.getString("order", true); - const reason = int.options.getString("reason", true); + const match = int.options.get("order", true).value as string; + const reason = int.options.get("reason", true).value as string; const order = await matchActiveOrder(match); if (order === null) { await int.reply(text.common.invalidOrderId); @@ -36,8 +36,8 @@ export const command = new Command("delete", "Deletes an order.") } await db.orders.update({ - where: { id: order.id }, - data: { claimer: int.user.id, status: OrderStatus.Deleted, deleteReason: reason }, + where: {id: order.id}, + data: {claimer: int.user.id, status: OrderStatus.Deleted, deleteReason: reason}, }); if (messageSent) { diff --git a/src/commands/orders/worker/deliver.ts b/src/commands/orders/worker/deliver.ts index d60e0be..21de482 100644 --- a/src/commands/orders/worker/deliver.ts +++ b/src/commands/orders/worker/deliver.ts @@ -1,16 +1,24 @@ /* eslint-disable no-constant-condition */ /* eslint-disable quotes */ // Main code -import { CafeStatus, OrderStatus } from "@prisma/client"; -import { ChannelType, GuildChannel, StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; -import { db } from "../../../database/database"; -import { orderPlaceholders, generateOrderId } from "../../../database/orders"; -import { upsertWorkerInfo } from "../../../database/workerInfo"; -import { client } from "../../../providers/client"; -import { text } from "../../../providers/config"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; +import {OrderStatus} from "@prisma/client"; +import { + ChannelType, + CommandInteraction, + ComponentType, + EmbedBuilder, + GuildChannel, + PartialGroupDMChannel, + StringSelectMenuBuilder +} from "discord.js"; +import {db} from "../../../database/database"; +import {orderPlaceholders} from "../../../database/orders"; +import {upsertWorkerInfo} from "../../../database/workerInfo"; +import {client} from "../../../providers/client"; +import {text} from "../../../providers/config"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import {format} from "../../../utils/string"; export const command = new Command( "deliver", @@ -33,7 +41,7 @@ export const command = new Command( }); if (orders.length === 0) { - await int.reply({ content: "No orders available for delivery.", ephemeral: false }); + await int.reply({content: "No orders available for delivery.", ephemeral: false}); return; } @@ -80,12 +88,12 @@ client.on("interactionCreate", async (interaction) => { }); if (!order) { - await interaction.reply({ content: "Invalid order selected.", ephemeral: true }); + await interaction.reply({content: "Invalid order selected.", ephemeral: true}); return; } if (order.user === interaction.user.id && !permissions.developer.hasPermission(interaction.user)) { - await interaction.reply({ content: text.common.interactOwn, ephemeral: false }); + await interaction.reply({content: text.common.interactOwn, ephemeral: false}); return; } @@ -95,7 +103,7 @@ client.on("interactionCreate", async (interaction) => { id: interaction.user.id, }, data: { - deliveries: { increment: 1 }, + deliveries: {increment: 1}, }, }); await db.orders.update({ @@ -110,11 +118,12 @@ client.on("interactionCreate", async (interaction) => { const channel = client.channels.cache.get(order.channel) ?? await client.channels.fetch(order.channel).catch(() => null) ?? client.users.cache.get(order.user); if (!channel || (channel instanceof GuildChannel && channel.type !== ChannelType.GuildText)) { - await interaction.reply({ content: text.commands.deliver.noChannel, ephemeral: true }); // Set ephemeral to true + await interaction.reply({content: text.commands.deliver.noChannel, ephemeral: true}); // Set ephemeral to true return; } - await interaction.reply({ content: `${text.commands.deliver.success}${info?.deliveryMessage ? "" : `\n${text.commands.deliver.noMessage}`}`, ephemeral: false }); - await channel.send(format(info?.deliveryMessage || text.commands.deliver.default, await orderPlaceholders(order))); + await interaction.reply({content: `${text.commands.deliver.success}${info?.deliveryMessage ? "" : `\n${text.commands.deliver.noMessage}`}`, ephemeral: false}); + // unable to send to partial group dm channel, workaround by checking if the channel is a partial group dm channel + if (!(channel instanceof PartialGroupDMChannel)) channel.send(format(info?.deliveryMessage || text.commands.deliver.default, await orderPlaceholders(order))); } }); diff --git a/src/commands/orders/worker/deliverymessage.ts b/src/commands/orders/worker/deliverymessage.ts index bca33a5..8b92c41 100644 --- a/src/commands/orders/worker/deliverymessage.ts +++ b/src/commands/orders/worker/deliverymessage.ts @@ -1,11 +1,12 @@ -import { db } from "../../../database/database"; -import { requiredOrderPlaceholders } from "../../../database/orders"; -import { getWorkerInfo, upsertWorkerInfo } from "../../../database/workerInfo"; -import { client } from "../../../providers/client"; -import { text } from "../../../providers/config"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; +import {db} from "../../../database/database"; +import {requiredOrderPlaceholders} from "../../../database/orders"; +import {getWorkerInfo, upsertWorkerInfo} from "../../../database/workerInfo"; +import {client} from "../../../providers/client"; +import {text} from "../../../providers/config"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import {format} from "../../../utils/string"; +import {IllegalStateError} from "../../../utils/error"; const tcdp = text.commands.deliverymessage.placeholders; const placeholderMessage = `${tcdp.title}\n${Object.entries(tcdp.list) @@ -24,6 +25,7 @@ export const command = new Command("deliverymessage", "Configures your delivery .addStringOption(o => o.setName("message").setDescription("The delivery message.").setRequired(true)) ) .setExecutor(async int => { + if (!client.user) throw new IllegalStateError("Client user is not available."); switch (int.options.getSubcommand(true)) { case "get": { const message = (await getWorkerInfo(int.user))?.deliveryMessage ?? text.commands.deliver.default; @@ -45,7 +47,7 @@ export const command = new Command("deliverymessage", "Configures your delivery break; } case "set": { - const message = int.options.getString("message", true); + const message = int.options.get("message", true).value as string; if (requiredOrderPlaceholders.some(x => !message.includes(`{${x}}`))) { await int.reply( format( @@ -57,8 +59,8 @@ export const command = new Command("deliverymessage", "Configures your delivery } await upsertWorkerInfo(int.user); await db.workerInfo.update({ - where: { id: int.user.id }, - data: { deliveryMessage: message }, + where: {id: int.user.id}, + data: {deliveryMessage: message}, }); await int.reply(text.commands.deliverymessage.set.success); break; diff --git a/src/commands/orders/worker/duty.ts b/src/commands/orders/worker/duty.ts index 0a9cf4a..5b26ecf 100644 --- a/src/commands/orders/worker/duty.ts +++ b/src/commands/orders/worker/duty.ts @@ -1,7 +1,7 @@ -import { text } from "../../../providers/config"; -import { mainGuild, mainRoles } from "../../../providers/discord"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; +import {text} from "../../../providers/config"; +import {mainGuild, mainRoles} from "../../../providers/discord"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; export const command = new Command("duty", "Toggles your on-duty status.") .addPermission(permissions.employee) diff --git a/src/commands/orders/worker/fetch.ts b/src/commands/orders/worker/fetch.ts index bc029f0..b1e43a2 100644 --- a/src/commands/orders/worker/fetch.ts +++ b/src/commands/orders/worker/fetch.ts @@ -1,8 +1,8 @@ -import { getOrder, matchActiveOrder, orderEmbedAsync } from "../../../database/orders"; -import { client } from "../../../providers/client"; -import { text } from "../../../providers/config"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; +import {getOrder, matchActiveOrder, orderEmbedAsync} from "../../../database/orders"; +import {client} from "../../../providers/client"; +import {text} from "../../../providers/config"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; export const command = new Command( "fetch", @@ -20,13 +20,13 @@ export const command = new Command( o.setName("inactive").setDescription("Include inactive orders too.") ) .setExecutor(async (int) => { - const match = int.options.get("order")?.value; - const inactive = int.options.get("inactive")?.value; + const match = int.options.get("order", true).value as string; + const inactive = int.options.get("inactive", true).value as boolean; const order = inactive ? await getOrder(match) : await matchActiveOrder(match); if (!order) { await int.reply(text.common.invalidOrderId); return; } else { - await int.reply({ embeds: [await orderEmbedAsync(order, client)] }); + await int.reply({embeds: [await orderEmbedAsync(order, client)]}); } }); diff --git a/src/commands/orders/worker/leaderboard.ts b/src/commands/orders/worker/leaderboard.ts index 52969f1..bb639c5 100644 --- a/src/commands/orders/worker/leaderboard.ts +++ b/src/commands/orders/worker/leaderboard.ts @@ -1,174 +1,174 @@ /* eslint-disable indent */ -import { permissions } from "../../../providers/permissions"; -import { CommandInteraction, EmbedBuilder, Message } from "discord.js"; -import { ButtonBuilder, ButtonStyle, ActionRowBuilder } from "discord.js"; -import { Command } from "../../../structures/Command"; -import { getWorkerInfos } from "../../../database/workerInfo"; +import {permissions} from "../../../providers/permissions"; +import {ActionRowBuilder, ButtonBuilder, ButtonStyle, CommandInteraction, EmbedBuilder, Message} from "discord.js"; +import {Command} from "../../../structures/Command"; +import {getWorkerInfos} from "../../../database/workerInfo"; + const PAGE_SIZE = 5; // Number of workers per page async function refreshWorkerInfos() { - // Refresh worker infos from the database - await getWorkerInfos(true); - // Wait for 1 second before retrieving the worker infos again - await new Promise((resolve) => setTimeout(resolve, 1000)); + // Refresh worker infos from the database + await getWorkerInfos(true); + // Wait for 1 second before retrieving the worker infos again + await new Promise((resolve) => setTimeout(resolve, 1000)); } export const command = new Command("leaderboard", "hm.") - .addPermission(permissions.developer) - .setExecutor(async (int: CommandInteraction) => { - // Refresh worker infos from the database - await refreshWorkerInfos(); - - // Get worker infos from database - const workerInfos = await getWorkerInfos(); - - // Filter out workers who have not delivered or prepared any orders - const activeWorkerInfos = workerInfos.filter( - (workerInfo) => - workerInfo.deliveries > 0 || workerInfo.preparations > 0 - ); - - // Sort worker infos by delivered and prepared orders - activeWorkerInfos.sort( - (a, b) => - b.deliveries + b.preparations - (a.deliveries + a.preparations) - ); - - // Calculate the number of pages required - const totalPages = Math.ceil(activeWorkerInfos.length / PAGE_SIZE); - - // Get the current page number from the command options (defaults to page 1) - const currentPage = int.options.getInteger("page") ?? 1; - - // Calculate the start and end index for the workers on the current page - const startIndex = (currentPage - 1) * PAGE_SIZE; - const endIndex = Math.min(startIndex + PAGE_SIZE, activeWorkerInfos.length); - - // Create the embed - const embed = new EmbedBuilder() - .setTitle("Delivery Leaderboard") - .setColor("Aqua"); - - // Add fields for each worker info on the current page - if (activeWorkerInfos.length > 0) { - for (let i = startIndex; i < endIndex; i++) { - const workerInfo = activeWorkerInfos[i]; - const isTopThree = i < 3; - const emoji = - i === 0 - ? "đŸĨ‡" - : i === 1 - ? "đŸĨˆ" - : i === 2 - ? "đŸĨ‰" - : ""; - - embed.addFields({ - name: `${isTopThree ? emoji : ""} ${i + 1}. ${workerInfo.id}`, - value: `Delivered: ${workerInfo.deliveries} | Preparations: ${workerInfo.preparations}`, - }); - } - - // Add page information to the embed - embed.setFooter({ text: `Page ${currentPage}/${totalPages}` }); - } else { - // Display a message if there are no active worker infos - embed.setDescription("No active workers found."); - } - - // Send the initial embed - const reply = await int.reply({ embeds: [embed], fetchReply: true }) as Message; - - // Function to update the embed based on the current page - const updateEmbed = async (pageNumber: number) => { - // Calculate the start and end index for the workers on the updated page - const startIndex = (pageNumber - 1) * PAGE_SIZE; - const endIndex = Math.min( - startIndex + PAGE_SIZE, - activeWorkerInfos.length - ); - - // Clear the fields in the embed - embed.setFields([]); - - // Add fields for each worker info on the updated page - for (let i = startIndex; i < endIndex; i++) { - const workerInfo = activeWorkerInfos[i]; - const isTopThree = i < 3; - const emoji = - i === 0 - ? "đŸĨ‡" - : i === 1 - ? "đŸĨˆ" - : i === 2 - ? "đŸĨ‰" - : ""; - - embed.addFields({ - name: `${isTopThree ? emoji : ""} ${i + 1}. ${workerInfo.id}`, - value: `Delivered: ${workerInfo.deliveries} | Preparations: ${workerInfo.preparations}`, - }); - } - - // Update the embed's page information - embed.setFooter({ text: `Page ${pageNumber}/${totalPages}` }); - - // Update the message with the updated embed - await reply.edit({ embeds: [embed] }); - }; - - // Add pagination buttons if there is more than one page - if (totalPages > 1) { - // Create the previous button - const previousButton = new ButtonBuilder() - .setCustomId("previous") - .setLabel("Previous") - .setStyle(ButtonStyle.Secondary); - - // Create the next button - const nextButton = new ButtonBuilder() - .setCustomId("next") - .setLabel("Next") - .setStyle(ButtonStyle.Secondary); - - // Create the action row with the pagination buttons - const actionRow = new ActionRowBuilder() - .addComponents(previousButton, nextButton); - - // Await the interaction with the pagination buttons - const collector = reply.createMessageComponentCollector({ - filter: (interaction) => - interaction.user.id === int.user.id && - (interaction.customId === "previous" || - interaction.customId === "next"), - time: 60000, - }); - - collector.on("collect", async (interaction) => { - const { customId } = interaction; - - if (customId === "previous") { - // Handle the previous button - const newPage = Math.max(currentPage - 1, 1); - await updateEmbed(newPage); - } else if (customId === "next") { - // Handle the next button - const newPage = Math.min(currentPage + 1, totalPages); - await updateEmbed(newPage); - } - - // Update the message with the updated embed and action row - await (interaction as any).update({ embeds: [embed], components: [actionRow.toJSON() as any] }); - }); - - collector.on("end", () => { - // Remove the action row from the message after the collector ends - reply.edit({ components: [] }); - }); - - // Update the message with the initial embed and action row - await reply.edit({ embeds: [embed], components: [actionRow.toJSON() as any] }); - } - }); - -export { command as leaderboard }; \ No newline at end of file + .addPermission(permissions.developer) + .setExecutor(async (int: CommandInteraction) => { + // Refresh worker infos from the database + await refreshWorkerInfos(); + + // Get worker infos from database + const workerInfos = await getWorkerInfos(); + + // Filter out workers who have not delivered or prepared any orders + const activeWorkerInfos = workerInfos.filter( + (workerInfo) => + workerInfo.deliveries > 0 || workerInfo.preparations > 0 + ); + + // Sort worker infos by delivered and prepared orders + activeWorkerInfos.sort( + (a, b) => + b.deliveries + b.preparations - (a.deliveries + a.preparations) + ); + + // Calculate the number of pages required + const totalPages = Math.ceil(activeWorkerInfos.length / PAGE_SIZE); + + // Get the current page number from the command options (defaults to page 1) + const currentPage = int.options.getInteger("page") ?? 1; + + // Calculate the start and end index for the workers on the current page + const startIndex = (currentPage - 1) * PAGE_SIZE; + const endIndex = Math.min(startIndex + PAGE_SIZE, activeWorkerInfos.length); + + // Create the embed + const embed = new EmbedBuilder() + .setTitle("Delivery Leaderboard") + .setColor("Aqua"); + + // Add fields for each worker info on the current page + if (activeWorkerInfos.length > 0) { + for (let i = startIndex; i < endIndex; i++) { + const workerInfo = activeWorkerInfos[i]; + const isTopThree = i < 3; + const emoji = + i === 0 + ? "đŸĨ‡" + : i === 1 + ? "đŸĨˆ" + : i === 2 + ? "đŸĨ‰" + : ""; + + embed.addFields({ + name: `${isTopThree ? emoji : ""} ${i + 1}. ${workerInfo.id}`, + value: `Delivered: ${workerInfo.deliveries} | Preparations: ${workerInfo.preparations}`, + }); + } + + // Add page information to the embed + embed.setFooter({text: `Page ${currentPage}/${totalPages}`}); + } else { + // Display a message if there are no active worker infos + embed.setDescription("No active workers found."); + } + + // Send the initial embed + const reply = await int.reply({embeds: [embed], fetchReply: true}) as Message; + + // Function to update the embed based on the current page + const updateEmbed = async (pageNumber: number) => { + // Calculate the start and end index for the workers on the updated page + const startIndex = (pageNumber - 1) * PAGE_SIZE; + const endIndex = Math.min( + startIndex + PAGE_SIZE, + activeWorkerInfos.length + ); + + // Clear the fields in the embed + embed.setFields([]); + + // Add fields for each worker info on the updated page + for (let i = startIndex; i < endIndex; i++) { + const workerInfo = activeWorkerInfos[i]; + const isTopThree = i < 3; + const emoji = + i === 0 + ? "đŸĨ‡" + : i === 1 + ? "đŸĨˆ" + : i === 2 + ? "đŸĨ‰" + : ""; + + embed.addFields({ + name: `${isTopThree ? emoji : ""} ${i + 1}. ${workerInfo.id}`, + value: `Delivered: ${workerInfo.deliveries} | Preparations: ${workerInfo.preparations}`, + }); + } + + // Update the embed's page information + embed.setFooter({text: `Page ${pageNumber}/${totalPages}`}); + + // Update the message with the updated embed + await reply.edit({embeds: [embed]}); + }; + + // Add pagination buttons if there is more than one page + if (totalPages > 1) { + // Create the previous button + const previousButton = new ButtonBuilder() + .setCustomId("previous") + .setLabel("Previous") + .setStyle(ButtonStyle.Secondary); + + // Create the next button + const nextButton = new ButtonBuilder() + .setCustomId("next") + .setLabel("Next") + .setStyle(ButtonStyle.Secondary); + + // Create the action row with the pagination buttons + const actionRow = new ActionRowBuilder() + .addComponents(previousButton, nextButton); + + // Await the interaction with the pagination buttons + const collector = reply.createMessageComponentCollector({ + filter: (interaction) => + interaction.user.id === int.user.id && + (interaction.customId === "previous" || + interaction.customId === "next"), + time: 60000, + }); + + collector.on("collect", async (interaction) => { + const {customId} = interaction; + + if (customId === "previous") { + // Handle the previous button + const newPage = Math.max(currentPage - 1, 1); + await updateEmbed(newPage); + } else if (customId === "next") { + // Handle the next button + const newPage = Math.min(currentPage + 1, totalPages); + await updateEmbed(newPage); + } + + // Update the message with the updated embed and action row + await (interaction as any).update({embeds: [embed], components: [actionRow.toJSON() as any]}); + }); + + collector.on("end", () => { + // Remove the action row from the message after the collector ends + reply.edit({components: []}); + }); + + // Update the message with the initial embed and action row + await reply.edit({embeds: [embed], components: [actionRow.toJSON() as any]}); + } + }); + +export {command as leaderboard}; \ No newline at end of file diff --git a/src/commands/orders/worker/list.ts b/src/commands/orders/worker/list.ts index 5965f24..7fea6ff 100644 --- a/src/commands/orders/worker/list.ts +++ b/src/commands/orders/worker/list.ts @@ -1,26 +1,26 @@ /* eslint-disable indent */ -import { getAllActiveOrders } from "../../../database/orders"; -import { client } from "../../../providers/client"; -import { text } from "../../../providers/config"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; +import {getAllActiveOrders} from "../../../database/orders"; +import {client} from "../../../providers/client"; +import {text} from "../../../providers/config"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import {format} from "../../../utils/string"; import pms from "pretty-ms"; -import { CafeStatus, OrderStatus } from "@prisma/client"; +import {OrderStatus} from "@prisma/client"; export const command = new Command("list", "Lists active orders.") .addPermission(permissions.employee) .setExecutor(async int => { const orders = await getAllActiveOrders(); const txt = text.commands.list; - int.reply( + await int.reply( `>>> ${txt.title}\n${orders .map(x => `${format(txt.parts.id, x.id)}: \ ${format(txt.parts.status, text.statuses[x.status] ?? x.status)}\ - ${format(txt.parts.details, x.details)}\ - - ${format(txt.parts.time, `${pms(Date.now() - x.createdAt.getTime(), { verbose: true, unitCount: 1 })} ago`)}\ + - ${format(txt.parts.time, `${pms(Date.now() - x.createdAt.getTime(), {verbose: true, unitCount: 1})} ago`)}\ ${x.status === OrderStatus.Unprepared ? "- **UNCLAIMED**" : x.status === OrderStatus.Preparing ? `- **Claimed by ${(x.claimer ? client.users.cache.get(x.claimer)?.tag : undefined) ?? "Unknown User" - }**` : ""} + }**` : ""} `) .join("\n") || `${txt.empty}`}` ); diff --git a/src/commands/orders/worker/unclaim.ts b/src/commands/orders/worker/unclaim.ts index 332c5c1..0fb1289 100644 --- a/src/commands/orders/worker/unclaim.ts +++ b/src/commands/orders/worker/unclaim.ts @@ -1,18 +1,18 @@ /* eslint-disable quotes */ -import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; -import { Command } from "../../../structures/Command"; -import { permissions } from "../../../providers/permissions"; -import { OrderStatus, getClaimedOrder, } from "../../../database/orders"; -import { db } from "../../../database/database"; -import { text } from "../../../providers/config"; -import { client } from "../../../providers/client"; +import {CommandInteraction, ComponentType, EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; +import {Command} from "../../../structures/Command"; +import {permissions} from "../../../providers/permissions"; +import {getClaimedOrder, OrderStatus,} from "../../../database/orders"; +import {db} from "../../../database/database"; +import {text} from "../../../providers/config"; +import {client} from "../../../providers/client"; export const command = new Command("unclaim", "Allows you to unclaim an order.") .addPermission(permissions.employee) .setExecutor(async (int: CommandInteraction) => { const claimedOrder = await getClaimedOrder(int.user); if (!claimedOrder) { - await int.reply({ content: text.commands.unclaim.notClaimed, ephemeral: true }); + await int.reply({content: text.commands.unclaim.notClaimed, ephemeral: true}); return; } @@ -28,7 +28,7 @@ export const command = new Command("unclaim", "Allows you to unclaim an order.") }); if (!order) { - await int.reply({ content: "Invalid order selected.", ephemeral: true }); + await int.reply({content: "Invalid order selected.", ephemeral: true}); return; } const details = order.details.length > 50 ? order.details.substring(0, 47) + "..." : order.details; @@ -80,22 +80,22 @@ client.on("interactionCreate", async (interaction) => { }); if (!order) { - await interaction.reply({ content: "Invalid order selected.", ephemeral: true }); + await interaction.reply({content: "Invalid order selected.", ephemeral: true}); return; } if (order.claimer !== interaction.user.id) { - await interaction.reply({ content: text.commands.unclaim.notClaimed, ephemeral: true }); + await interaction.reply({content: text.commands.unclaim.notClaimed, ephemeral: true}); return; } await db.orders.update({ - where: { id: orderId }, - data: { claimer: null, status: OrderStatus.Unprepared }, + where: {id: orderId}, + data: {claimer: null, status: OrderStatus.Unprepared}, }); await interaction.reply({ - content: text.commands.unclaim.success.replace('{id}', order.id), + content: text.commands.unclaim.success.replace("{id}", order.id), ephemeral: false, }); } diff --git a/src/commands/orders/worker/workerinfo.ts b/src/commands/orders/worker/workerinfo.ts index 96b85be..3718b42 100644 --- a/src/commands/orders/worker/workerinfo.ts +++ b/src/commands/orders/worker/workerinfo.ts @@ -1,49 +1,49 @@ /* eslint-disable quotes */ /* eslint-disable indent */ -import { CommandInteraction, User } from "discord.js"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { PrismaClient, CafeStatus, OrderStatus } from "@prisma/client"; +import {CommandInteraction} from "discord.js"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import {OrderStatus, PrismaClient} from "@prisma/client"; const prisma = new PrismaClient(); export const command = new Command("workerinfo", - "Tracks the number of orders an employee has prepared and delivered.") - .addPermission(permissions.employee) - .addOption("user", (o) => - o.setName("employee") - .setDescription("The employee whose stats to check.") - .setRequired(false) - ) - .setExecutor(async (int: CommandInteraction) => { - let employeeId = int.user.id; // assuming the employee's ID is the user's ID + "Tracks the number of orders an employee has prepared and delivered.") + .addPermission(permissions.employee) + .addOption("user", (o) => + o.setName("employee") + .setDescription("The employee whose stats to check.") + .setRequired(false) + ) + .setExecutor(async (int: CommandInteraction) => { + let employeeId = int.user.id; // assuming the employee's ID is the user's ID - // If an employee is specified, use their ID instead - const employeeOption = int.options.getUser("employee"); - if (employeeOption) { - employeeId = employeeOption.id; - } + // If an employee is specified, use their ID instead + const employeeOption = int.options.getUser("employee"); + if (employeeOption) { + employeeId = employeeOption.id; + } - // Get the total number of orders the employee has prepared - const totalPreparations = await prisma.orders.count({ - where: { - claimer: employeeId, - status: { - not: OrderStatus.Unprepared - }, - }, - }); + // Get the total number of orders the employee has prepared + const totalPreparations = await prisma.orders.count({ + where: { + claimer: employeeId, + status: { + not: OrderStatus.Unprepared + }, + }, + }); - // Get the total number of orders the employee has delivered - const totalDeliveries = await prisma.orders.count({ - where: { - deliverer: employeeId, - status: OrderStatus.Delivered, - }, - }); + // Get the total number of orders the employee has delivered + const totalDeliveries = await prisma.orders.count({ + where: { + deliverer: employeeId, + status: OrderStatus.Delivered, + }, + }); - // Get the user's username for the reply - const username = employeeOption ? employeeOption.username : int.user.username; + // Get the user's username for the reply + const username = employeeOption ? employeeOption.username : int.user.username; - await int.reply(`${username} has prepared ${totalPreparations} orders and delivered ${totalDeliveries} orders.`); - }); \ No newline at end of file + await int.reply(`${username} has prepared ${totalPreparations} orders and delivered ${totalDeliveries} orders.`); + }); \ No newline at end of file diff --git a/src/commands/orders/worker/workerstats.ts b/src/commands/orders/worker/workerstats.ts index 1c07365..592aacb 100644 --- a/src/commands/orders/worker/workerstats.ts +++ b/src/commands/orders/worker/workerstats.ts @@ -1,52 +1,52 @@ /* eslint-disable quotes */ /* eslint-disable indent */ -import { CommandInteraction, EmbedBuilder } from "discord.js"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { PrismaClient, Prisma } from '@prisma/client'; -import { getWorkerInfo, getWorkerInfos } from "../../../database/workerInfo"; +import {CommandInteraction, EmbedBuilder} from "discord.js"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import {PrismaClient} from "@prisma/client"; +import {getWorkerInfos} from "../../../database/workerInfo"; const prisma = new PrismaClient(); export const command = new Command("workerstats", "Checks the global worker stats.") - .addSyntax("monthly", "text") - .addPermission(permissions.employee) - .addShortcuts("ws") - .setExecutor(async (int: CommandInteraction) => { - const args = int.options.getString("monthly")?.includes("m") ? ["monthly", ...int.options.getString("monthly").split(" ").slice(1)] : []; - const workerInfos = await getWorkerInfos(); // Retrieve the workerInfos - let data = workerInfos; - let isMonthly = false; - if (args[0] && args[0].includes("m")) { - data = workerInfos; - args.shift(); - isMonthly = true; - } - let sumc = data.reduce((acc, info) => acc + info.preparations, 0); // Calculate sum of cooks - let sumd = data.reduce((acc, info) => acc + info.deliveries, 0); // Calculate sum of delivers - let sum = sumc + sumd; - let avgc = sumc / data.length; // Calculate average cooks - let avgd = sumd / data.length; // Calculate average delivers - let avg = avgc + avgd; - const li = [sumc, sumd, sum, avgc, avgd, avg].map(item => { - if (isNaN(item)) return 0; - return item; - }); - sumc = li[0]; - sumd = li[1]; - sum = li[2]; - avgc = li[3]; - avgd = li[4]; - const embed = new EmbedBuilder() - .setTitle(`The Global ${isMonthly ? "Monthly " : ""}Worker Stats`) - .addFields( - { name: "Total preps", value: `${sumc} preps`, inline: true }, - { name: "Average preps", value: `${avgc} preps`, inline: true }, - { name: "Total deliveries", value: `${sumd} delivers`, inline: true }, - { name: "Average deliveries", value: `${avgd} deliveries`, inline: true }, - { name: "Total", value: `${sum} preps and deliveries`, inline: true }, - { name: "Average", value: `${avg} preps and deliveries`, inline: true } - ) - .setThumbnail("https://images.emojiterra.com/twitter/512px/1f4ca.png"); - int.reply({ embeds: [embed] }); - }); + .addSyntax("monthly", "string") + .addPermission(permissions.employee) + .addShortcuts("ws") + .setExecutor(async (int: CommandInteraction) => { + const args = (int.options.get("monthly", true).value as string)?.includes("m") ? ["monthly", ...(int.options.get("monthly", true).value as string).split(" ").slice(1)] : []; + const workerInfos = await getWorkerInfos(); // Retrieve the workerInfos + let data = workerInfos; + let isMonthly = false; + if (args[0] && args[0].includes("m")) { + data = workerInfos; + args.shift(); + isMonthly = true; + } + let sumc = data.reduce((acc, info) => acc + info.preparations, 0); // Calculate sum of cooks + let sumd = data.reduce((acc, info) => acc + info.deliveries, 0); // Calculate sum of delivers + let sum = sumc + sumd; + let avgc = sumc / data.length; // Calculate average cooks + let avgd = sumd / data.length; // Calculate average delivers + let avg = avgc + avgd; + const li = [sumc, sumd, sum, avgc, avgd, avg].map(item => { + if (isNaN(item)) return 0; + return item; + }); + sumc = li[0]; + sumd = li[1]; + sum = li[2]; + avgc = li[3]; + avgd = li[4]; + const embed = new EmbedBuilder() + .setTitle(`The Global ${isMonthly ? "Monthly " : ""}Worker Stats`) + .addFields( + {name: "Total preps", value: `${sumc} preps`, inline: true}, + {name: "Average preps", value: `${avgc} preps`, inline: true}, + {name: "Total deliveries", value: `${sumd} delivers`, inline: true}, + {name: "Average deliveries", value: `${avgd} deliveries`, inline: true}, + {name: "Total", value: `${sum} preps and deliveries`, inline: true}, + {name: "Average", value: `${avg} preps and deliveries`, inline: true} + ) + .setThumbnail("https://images.emojiterra.com/twitter/512px/1f4ca.png"); + await int.reply({embeds: [embed]}); + }); diff --git a/src/commands/public/expboard.ts b/src/commands/public/expboard.ts index 7f1da27..78b3261 100644 --- a/src/commands/public/expboard.ts +++ b/src/commands/public/expboard.ts @@ -1,48 +1,48 @@ //expboard /* eslint-disable quotes */ /* eslint-disable indent */ -import { CommandInteraction, EmbedBuilder } from "discord.js"; -import { Command } from "../../structures/Command"; -import { PrismaClient } from "@prisma/client"; +import {CommandInteraction, EmbedBuilder} from "discord.js"; +import {Command} from "../../structures/Command"; +import {PrismaClient} from "@prisma/client"; const prisma = new PrismaClient(); export const command = new Command("expboard", "Shows the leaderboard.") - .setExecutor(async (int: CommandInteraction) => { - // Check if the interaction is from a guild - if (!int.guild) { - await int.reply("This command can only be used in a server."); - return; - } - - // Get all users in the guild - const users = await prisma.guildsXP.findMany({ - where: { - guildId: int.guild.id, - }, - }); - - // Sort the users by level and exp - users.sort((a, b) => b.level - a.level || b.exp - a.exp); - - // Take the top 10 users - const leaderboard = users.slice(0, 10); - - // Format the leaderboard into a string - let leaderboardString = leaderboard.map((user, index) => { - return `${index + 1}. <@${user.userId}> - Level ${user.level}`; - }).join('\n'); - - // Check if the leaderboard is empty - if (leaderboardString === '') { - leaderboardString = 'No users in the leaderboard yet.'; - } - - // Create a new embed - const embed = new EmbedBuilder() - .setTitle("Leaderboard") - .setDescription(leaderboardString) - .setColor("#0099ff"); - - await int.reply({ embeds: [embed] }); - }); \ No newline at end of file + .setExecutor(async (int: CommandInteraction) => { + // Check if the interaction is from a guild + if (!int.guild) { + await int.reply("This command can only be used in a server."); + return; + } + + // Get all users in the guild + const users = await prisma.guildsXP.findMany({ + where: { + guildId: int.guild.id, + }, + }); + + // Sort the users by level and exp + users.sort((a, b) => b.level - a.level || b.exp - a.exp); + + // Take the top 10 users + const leaderboard = users.slice(0, 10); + + // Format the leaderboard into a string + let leaderboardString = leaderboard.map((user, index) => { + return `${index + 1}. <@${user.userId}> - Level ${user.level}`; + }).join("\n"); + + // Check if the leaderboard is empty + if (leaderboardString === "") { + leaderboardString = "No users in the leaderboard yet."; + } + + // Create a new embed + const embed = new EmbedBuilder() + .setTitle("Leaderboard") + .setDescription(leaderboardString) + .setColor("#0099ff"); + + await int.reply({embeds: [embed]}); + }); \ No newline at end of file diff --git a/src/commands/public/notifi.ts b/src/commands/public/notifi.ts index 0a4019b..246f054 100644 --- a/src/commands/public/notifi.ts +++ b/src/commands/public/notifi.ts @@ -1,49 +1,48 @@ /* eslint-disable quotes */ /* eslint-disable indent */ -import { PrismaClient } from "@prisma/client"; -import { Command } from "../../structures/Command"; -import { permissions } from "../../providers/permissions"; +import {PrismaClient} from "@prisma/client"; +import {Command} from "../../structures/Command"; const prisma = new PrismaClient(); export const command = new Command("notifi", - "Sets the channel for notifications.") - //.addPermission(permissions.employee) - .addOption("channel", (o) => - o.setName("channel").setDescription("The channel to set for notifications.").setRequired(true) - ) - .setExecutor(async (int) => { - // Ignore interactions from bots or from DMs - if (int.user.bot || !int.guild) return; + "Sets the channel for notifications.") + //.addPermission(permissions.employee) + .addOption("channel", (o) => + o.setName("channel").setDescription("The channel to set for notifications.").setRequired(true) + ) + .setExecutor(async (int) => { + // Ignore interactions from bots or from DMs + if (int.user.bot || !int.guild) return; - // Get the ID of the channel from the command option - const channelId = int.options.getChannel('channel')?.id; - if (!channelId) { - int.reply('Please provide a valid channel.'); - return; - } + // Get the ID of the channel from the command option + const channelId = int.options.getChannel()?.id; + if (!channelId) { + await int.reply("Please provide a valid channel."); + return; + } - // Update the notification channel in the database - await prisma.guildsXP.upsert({ - where: { - userId_guildId: { - userId: int.user.id, - guildId: int.guild.id, - }, - }, - create: { - userId: int.user.id, - guildId: int.guild.id, - userName: int.user.username, - level: 0, - exp: 0, - location: 'default', - notificationChannelId: channelId, // Set the notification channel ID - }, - update: { - notificationChannelId: channelId, // Update the notification channel ID - }, - }); + // Update the notification channel in the database + await prisma.guildsXP.upsert({ + where: { + userId_guildId: { + userId: int.user.id, + guildId: int.guild.id, + }, + }, + create: { + userId: int.user.id, + guildId: int.guild.id, + userName: int.user.username, + level: 0, + exp: 0, + location: "default", + notificationChannelId: channelId, // Set the notification channel ID + }, + update: { + notificationChannelId: channelId, // Update the notification channel ID + }, + }); - int.reply(`Notification channel set to <#${channelId}>.`); - }); + await int.reply(`Notification channel set to <#${channelId}>.`); + }); diff --git a/src/commands/public/profile.ts b/src/commands/public/profile.ts index 294f93e..7f16bfb 100644 --- a/src/commands/public/profile.ts +++ b/src/commands/public/profile.ts @@ -1,88 +1,88 @@ /* eslint-disable quotes */ /* eslint-disable indent */ -import { CommandInteraction, EmbedBuilder } from "discord.js"; -import { Command } from "../../structures/Command"; -import { PrismaClient } from "@prisma/client"; +import {CommandInteraction, EmbedBuilder} from "discord.js"; +import {Command} from "../../structures/Command"; +import {PrismaClient} from "@prisma/client"; const prisma = new PrismaClient(); export const command = new Command("profile", "Shows your profile.") - .setExecutor(async (int: CommandInteraction) => { - // Check if the interaction is from a guild - if (!int.guild) { - await int.reply("This command can only be used in a server."); - return; - } + .setExecutor(async (int: CommandInteraction) => { + // Check if the interaction is from a guild + if (!int.guild) { + await int.reply("This command can only be used in a server."); + return; + } - try { - const userId = int.user.id; - const guildId = int.guild.id; + try { + const userId = int.user.id; + const guildId = int.guild.id; - // Check if the user exists in the userInfo table - const userInfo = await prisma.userInfo.findUnique({ - where: { - id: userId, - }, - }); + // Check if the user exists in the userInfo table + const userInfo = await prisma.userInfo.findUnique({ + where: { + id: userId, + }, + }); - if (!userInfo) { - await int.reply("You don't have a profile yet."); - return; - } + if (!userInfo) { + await int.reply("You don't have a profile yet."); + return; + } - // Check if the user's guildsXP data exists in the database - let userGuildData = await prisma.guildsXP.findUnique({ - where: { - userId_guildId: { - userId: userId, - guildId: guildId, - }, - }, - }); + // Check if the user's guildsXP data exists in the database + let userGuildData = await prisma.guildsXP.findUnique({ + where: { + userId_guildId: { + userId: userId, + guildId: guildId, + }, + }, + }); - if (!userGuildData) { - // If the data doesn't exist, create it in the database - userGuildData = await prisma.guildsXP.create({ - data: { - userId: userId, - guildId: guildId, - userName: int.user.username, - level: 0, - exp: 0, - user: { connect: { id: userId } }, // Connect the guildsXP to the UserInfo - }, - }); - } else if (!userGuildData.userName) { - // If the userName is blank, update it with the user's username - userGuildData = await prisma.guildsXP.update({ - where: { - userId_guildId: { - userId: userId, - guildId: guildId, - }, - }, - data: { - userName: int.user.username, - }, - }); - } + if (!userGuildData) { + // If the data doesn't exist, create it in the database + userGuildData = await prisma.guildsXP.create({ + data: { + userId: userId, + guildId: guildId, + userName: int.user.username, + level: 0, + exp: 0, + user: {connect: {id: userId}}, // Connect the guildsXP to the UserInfo + }, + }); + } else if (!userGuildData.userName) { + // If the userName is blank, update it with the user's username + userGuildData = await prisma.guildsXP.update({ + where: { + userId_guildId: { + userId: userId, + guildId: guildId, + }, + }, + data: { + userName: int.user.username, + }, + }); + } - const nextLevelExp = userGuildData.level * 100; - const level = userGuildData.level; + const nextLevelExp = userGuildData.level * 100; + const level = userGuildData.level; - // Create a new embed using EmbedBuilder - const embed = new EmbedBuilder() - .setTitle(`${int.user.username}'s Profile`) - .setThumbnail(int.user.displayAvatarURL()) - .addFields( - { name: "Experience", value: `${userGuildData.exp}/${nextLevelExp}`, inline: true }, - { name: "Level", value: `${level}`, inline: true } - ) - .setColor("#0099ff"); + // Create a new embed using EmbedBuilder + const embed = new EmbedBuilder() + .setTitle(`${int.user.username}'s Profile`) + .setThumbnail(int.user.displayAvatarURL()) + .addFields( + {name: "Experience", value: `${userGuildData.exp}/${nextLevelExp}`, inline: true}, + {name: "Level", value: `${level}`, inline: true} + ) + .setColor("#0099ff"); - await int.reply({ embeds: [embed] }); - } catch (error) { - console.error('Error retrieving user data:', error); - return; - } - }); + await int.reply({embeds: [embed]}); + } catch (error) { + console.error("Error retrieving user data:", error); + return; + } + }); diff --git a/src/database/database.ts b/src/database/database.ts index c2771d4..5f7bcb5 100644 --- a/src/database/database.ts +++ b/src/database/database.ts @@ -1,7 +1,7 @@ import {PrismaClient} from "@prisma/client"; /** - * who would've guessed, its the database + * who would've guessed, it's the database */ export const db = new PrismaClient(); diff --git a/src/database/orders.ts b/src/database/orders.ts index c8a125c..e7ea228 100644 --- a/src/database/orders.ts +++ b/src/database/orders.ts @@ -1,5 +1,5 @@ import type {CafeOrders, Orders} from "@prisma/client"; -import {OrderStatus, CafeStatus, PrismaClient} from "@prisma/client"; +import {CafeStatus, OrderStatus, PrismaClient} from "@prisma/client"; import type {Channel, Client, User, UserResolvable} from "discord.js"; import {EmbedBuilder, GuildChannel} from "discord.js"; import {client} from "../providers/client"; diff --git a/src/database/userInfo.ts b/src/database/userInfo.ts index 2635356..b8aa686 100644 --- a/src/database/userInfo.ts +++ b/src/database/userInfo.ts @@ -22,9 +22,6 @@ export const upsertUserInfo = async (user: User, guildId: string): Promise) => void | Promise; +export type CommandExecutor = (int: ChatInputCommandInteraction<"cached">) => void | Promise; /** An option that can be added to a command. */ export type CommandOptionType = Extract< @@ -31,16 +31,13 @@ type StringOptionArgs = CommandOptionArgs<"string">; * command.setExecutor(i => i.reply("Pong!")); */ export class Command { - readonly #slash = new SlashCommandBuilder(); accessible = true; - executor: CommandExecutor = i => { - i.reply("No executor was specified."); - }; permissions: Permission[] = []; local = false; aliases: string[] = []; shortcuts: string[] = []; syntax: { name: string; type: CommandOptionType; require: boolean }[] = []; + readonly #slash = new SlashCommandBuilder(); /** * Creates a new command. @@ -51,6 +48,10 @@ export class Command { this.#slash.setName(this.name).setDescription(this.description).setDefaultPermission(true); } + executor: CommandExecutor = i => { + i.reply("No executor was specified."); + }; + /** * Sets the command to be accessible by default or not. * @param accessible - Whether the command is accessible by default. @@ -173,7 +174,7 @@ export class Command { * command.addSyntax("name", "string", true); */ addSyntax(name: string, type: CommandOptionType, require = false) { - this.syntax.push({ name, type, require }); + this.syntax.push({name, type, require}); return this; } diff --git a/tsconfig.json b/tsconfig.json index 0ceb9ca..254af17 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -79,7 +79,7 @@ /* Type Checking */ "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type. */ // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ From c9829a7978c4e31bc694b56776ffdd2df6d1267c Mon Sep 17 00:00:00 2001 From: floof Date: Sun, 31 Mar 2024 00:49:09 -0500 Subject: [PATCH 39/79] Create package-lock.json --- package-lock.json | 3194 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3194 insertions(+) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..761248a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3194 @@ +{ + "name": "dbrewrite", + "version": "1.3.3", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "dbrewrite", + "version": "1.3.3", + "license": "ISC", + "dependencies": { + "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", + "@discordjs/rest": "^0.3.0", + "@paralleldrive/cuid2": "^2.2.1", + "@prisma/client": "latest", + "@sapphire/shapeshift": "^3.8.1", + "cross-env": "^7.0.3", + "discord.js": "^14.8.0", + "fast-glob": "^3.2.11", + "got": "^11.8.3", + "hjson": "^3.2.2", + "nekos.life": "^3.0.0", + "nodemon": "^2.0.20", + "picocolors": "^1.0.0", + "pino": "^7.9.2", + "pretty-ms": "^7.0.1", + "source-map-support": "^0.5.21", + "typescript-memoize": "^1.1.0", + "uuid": "^9.0.0", + "yarn": "^1.22.18", + "zod": "^3.14.3" + }, + "devDependencies": { + "@types/node": "^17.0.42", + "@types/uuid": "^9.0.1", + "@typescript-eslint/eslint-plugin": "^5.16.0", + "@typescript-eslint/parser": "^5.16.0", + "discord-api-types": "^0.37.35", + "eslint": "^8.12.0", + "eslint-plugin-regexp": "^1.6.0", + "prisma": "latest", + "ts-node": "^10.9.1", + "ts-toolbelt": "^9.6.0", + "tsconfig-paths": "^4.1.2", + "typescript": "^4.9.5" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@discordjs/builders": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.7.0.tgz", + "integrity": "sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw==", + "dependencies": { + "@discordjs/formatters": "^0.3.3", + "@discordjs/util": "^1.0.2", + "@sapphire/shapeshift": "^3.9.3", + "discord-api-types": "0.37.61", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/builders/node_modules/discord-api-types": { + "version": "0.37.61", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", + "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==" + }, + "node_modules/@discordjs/collection": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", + "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==", + "deprecated": "no longer supported", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@discordjs/formatters": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.3.tgz", + "integrity": "sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w==", + "dependencies": { + "discord-api-types": "0.37.61" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/formatters/node_modules/discord-api-types": { + "version": "0.37.61", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", + "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==" + }, + "node_modules/@discordjs/rest": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz", + "integrity": "sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q==", + "deprecated": "no longer supported", + "dependencies": { + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", + "@sapphire/snowflake": "^3.0.1", + "discord-api-types": "^0.26.1", + "form-data": "^4.0.0", + "node-fetch": "^2.6.5", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/rest/node_modules/discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/@discordjs/util": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.2.tgz", + "integrity": "sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw==", + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.2.tgz", + "integrity": "sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q==", + "dependencies": { + "@discordjs/collection": "^2.0.0", + "@discordjs/rest": "^2.1.0", + "@discordjs/util": "^1.0.2", + "@sapphire/async-queue": "^1.5.0", + "@types/ws": "^8.5.9", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.61", + "tslib": "^2.6.2", + "ws": "^8.14.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz", + "integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==", + "engines": { + "node": ">=18" + } + }, + "node_modules/@discordjs/ws/node_modules/@discordjs/rest": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.2.0.tgz", + "integrity": "sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==", + "dependencies": { + "@discordjs/collection": "^2.0.0", + "@discordjs/util": "^1.0.2", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.5.1", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.61", + "magic-bytes.js": "^1.5.0", + "tslib": "^2.6.2", + "undici": "5.27.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws/node_modules/discord-api-types": { + "version": "0.37.61", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", + "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==" + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", + "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, + "node_modules/@prisma/client": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.11.0.tgz", + "integrity": "sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw==", + "hasInstallScript": true, + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/debug": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.11.0.tgz", + "integrity": "sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A==", + "devOptional": true + }, + "node_modules/@prisma/engines": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.11.0.tgz", + "integrity": "sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw==", + "devOptional": true, + "hasInstallScript": true, + "dependencies": { + "@prisma/debug": "5.11.0", + "@prisma/engines-version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102", + "@prisma/fetch-engine": "5.11.0", + "@prisma/get-platform": "5.11.0" + } + }, + "node_modules/@prisma/engines-version": { + "version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102.tgz", + "integrity": "sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA==", + "devOptional": true + }, + "node_modules/@prisma/fetch-engine": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.11.0.tgz", + "integrity": "sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w==", + "devOptional": true, + "dependencies": { + "@prisma/debug": "5.11.0", + "@prisma/engines-version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102", + "@prisma/get-platform": "5.11.0" + } + }, + "node_modules/@prisma/get-platform": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.11.0.tgz", + "integrity": "sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw==", + "devOptional": true, + "dependencies": { + "@prisma/debug": "5.11.0" + } + }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.2.tgz", + "integrity": "sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "3.9.6", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.6.tgz", + "integrity": "sha512-4+Na/fxu2SEepZRb9z0dbsVh59QtwPuBg/UVaDib3av7ZY14b14+z09z6QVn0P6Dv6eOU2NDTsjIi0mbtgP56g==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz", + "integrity": "sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true + }, + "node_modules/@types/ws": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz", + "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.4.tgz", + "integrity": "sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/discord-api-types": { + "version": "0.37.77", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.77.tgz", + "integrity": "sha512-AkEn9nZA5w/XJ8wzKzlpx3X+MToQCowKahftF1+KYnMWnuglCrVRojy1XlIWX8Frgp1v8INceGKpvDkbvMLJ4g==", + "dev": true + }, + "node_modules/discord.js": { + "version": "14.14.1", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.14.1.tgz", + "integrity": "sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w==", + "dependencies": { + "@discordjs/builders": "^1.7.0", + "@discordjs/collection": "1.5.3", + "@discordjs/formatters": "^0.3.3", + "@discordjs/rest": "^2.1.0", + "@discordjs/util": "^1.0.2", + "@discordjs/ws": "^1.0.2", + "@sapphire/snowflake": "3.5.1", + "@types/ws": "8.5.9", + "discord-api-types": "0.37.61", + "fast-deep-equal": "3.1.3", + "lodash.snakecase": "4.1.1", + "tslib": "2.6.2", + "undici": "5.27.2", + "ws": "8.14.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/discord.js/node_modules/@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/discord.js/node_modules/@discordjs/rest": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.2.0.tgz", + "integrity": "sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==", + "dependencies": { + "@discordjs/collection": "^2.0.0", + "@discordjs/util": "^1.0.2", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.5.1", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.61", + "magic-bytes.js": "^1.5.0", + "tslib": "^2.6.2", + "undici": "5.27.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/discord.js/node_modules/@discordjs/rest/node_modules/@discordjs/collection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz", + "integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==", + "engines": { + "node": ">=18" + } + }, + "node_modules/discord.js/node_modules/@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/discord.js/node_modules/discord-api-types": { + "version": "0.37.61", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", + "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-regexp": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz", + "integrity": "sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "comment-parser": "^1.1.2", + "grapheme-splitter": "^1.0.4", + "jsdoctypeparser": "^9.0.0", + "refa": "^0.11.0", + "regexp-ast-analysis": "^0.6.0", + "scslre": "^0.2.0" + }, + "engines": { + "node": "^12 || >=14" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hjson": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", + "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==", + "bin": { + "hjson": "bin/hjson" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdoctypeparser": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", + "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", + "dev": true, + "bin": { + "jsdoctypeparser": "bin/jsdoctypeparser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==" + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-bytes.js": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", + "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/nekos.life": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/nekos.life/-/nekos.life-3.0.0.tgz", + "integrity": "sha512-7LbvSqLtfK4XRA91nJaGOWthrNADmG7Vx9d54TC77Hx5qFvRCssFUaHraI6bZGjVENBCUaF7CreisoFX+8mnKQ==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/on-exit-leak-free": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", + "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pino": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", + "integrity": "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.0.0", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.15.1" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", + "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", + "dependencies": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prisma": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.11.0.tgz", + "integrity": "sha512-KCLiug2cs0Je7kGkQBN9jDWoZ90ogE/kvZTUTgz2h94FEo8pczCkPH7fPNXkD1sGU7Yh65risGGD1HQ5DF3r3g==", + "devOptional": true, + "hasInstallScript": true, + "dependencies": { + "@prisma/engines": "5.11.0" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/real-require": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", + "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/refa": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz", + "integrity": "sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.0" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/regexp-ast-analysis": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz", + "integrity": "sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.0", + "refa": "^0.11.0" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } + }, + "node_modules/scslre": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz", + "integrity": "sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.0", + "refa": "^0.11.0", + "regexp-ast-analysis": "^0.6.0" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thread-stream": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", + "integrity": "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==", + "dependencies": { + "real-require": "^0.1.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-mixer": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz", + "integrity": "sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==" + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-toolbelt": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "dev": true + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/typescript-memoize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz", + "integrity": "sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==" + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "node_modules/undici": { + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz", + "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yarn": { + "version": "1.22.22", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.22.tgz", + "integrity": "sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==", + "hasInstallScript": true, + "bin": { + "yarn": "bin/yarn.js", + "yarnpkg": "bin/yarn.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} From c480afad570a4fc156a20e40d5e3cf79d14792b5 Mon Sep 17 00:00:00 2001 From: floof Date: Sun, 31 Mar 2024 01:25:16 -0500 Subject: [PATCH 40/79] bug fixes --- package-lock.json | 12 +- package.json | 4 +- src/commands/Devs/policy.ts | 2 +- src/commands/Devs/{Select.ts => select.ts} | 1 + src/commands/economy/drinkroulette.ts | 2 +- src/commands/moderation/blacklist.ts | 4 +- src/commands/orders/worker/leaderboard.ts | 4 +- src/commands/public/notifi.ts | 2 +- src/commands/public/profile.ts | 1 - src/commands/test.ts | 7 +- src/events/interactionCreate.ts | 12 +- src/events/ready.ts | 20 +- tsconfig.json | 210 +++++++++++---------- yarn.lock | 10 +- 14 files changed, 157 insertions(+), 134 deletions(-) rename src/commands/Devs/{Select.ts => select.ts} (96%) diff --git a/package-lock.json b/package-lock.json index 761248a..c435c4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@prisma/client": "latest", "@sapphire/shapeshift": "^3.8.1", "cross-env": "^7.0.3", - "discord.js": "^14.8.0", + "discord.js": "^14.14.1", "fast-glob": "^3.2.11", "got": "^11.8.3", "hjson": "^3.2.2", @@ -42,7 +42,7 @@ "ts-node": "^10.9.1", "ts-toolbelt": "^9.6.0", "tsconfig-paths": "^4.1.2", - "typescript": "^4.9.5" + "typescript": "^5.4.3" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -3024,16 +3024,16 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/typescript-memoize": { diff --git a/package.json b/package.json index 280598a..fe2aeb1 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "ts-node": "^10.9.1", "ts-toolbelt": "^9.6.0", "tsconfig-paths": "^4.1.2", - "typescript": "^4.9.5" + "typescript": "^5.4.3" }, "dependencies": { "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", @@ -43,7 +43,7 @@ "@prisma/client": "latest", "@sapphire/shapeshift": "^3.8.1", "cross-env": "^7.0.3", - "discord.js": "^14.8.0", + "discord.js": "^14.14.1", "fast-glob": "^3.2.11", "got": "^11.8.3", "hjson": "^3.2.2", diff --git a/src/commands/Devs/policy.ts b/src/commands/Devs/policy.ts index 30c5138..d62fd23 100644 --- a/src/commands/Devs/policy.ts +++ b/src/commands/Devs/policy.ts @@ -2,5 +2,5 @@ import {Command} from "../../structures/Command"; export const command = new Command("policy", "Gives you a link to our policy.") .setExecutor(async int => { - int.channel?.send("https://drunk-bartender.org/Policy"); + int.reply("https://drunk-bartender.org/Policy"); }); \ No newline at end of file diff --git a/src/commands/Devs/Select.ts b/src/commands/Devs/select.ts similarity index 96% rename from src/commands/Devs/Select.ts rename to src/commands/Devs/select.ts index 0f787c0..1e916f3 100644 --- a/src/commands/Devs/Select.ts +++ b/src/commands/Devs/select.ts @@ -39,6 +39,7 @@ export const command = new Command("select", "Select Menu Example") {name: "Option 2", value: "The second option"}, {name: "Option 3", value: "The third option"} ); + await interaction.reply({ embeds: [embed], components: [{ diff --git a/src/commands/economy/drinkroulette.ts b/src/commands/economy/drinkroulette.ts index d3b63e2..df454b3 100644 --- a/src/commands/economy/drinkroulette.ts +++ b/src/commands/economy/drinkroulette.ts @@ -6,7 +6,7 @@ import {Command} from "../../structures/Command"; import {format} from "../../utils/string"; import {sampleArray} from "../../utils/utils"; -export const command = new Command("drinkroullete", "Get a random drink ordered!") +export const command = new Command("drinkroulette", "Get a random drink ordered!") .setExecutor(async int => { if (await hasActiveOrder(int.user)) { await int.reply(text.commands.order.exists); diff --git a/src/commands/moderation/blacklist.ts b/src/commands/moderation/blacklist.ts index 8c0e5bf..5cea52e 100644 --- a/src/commands/moderation/blacklist.ts +++ b/src/commands/moderation/blacklist.ts @@ -11,7 +11,7 @@ export const command = new Command("blacklist", "Blacklists a user, server, or c .addOption("boolean", o => o.setName("unblacklist").setDescription("Whether to unblacklist instead of blacklisting.")) .setExecutor(async int => { const id = int.options.get("id", true).value as string; - if (int.options.get("unblacklist", true).value as boolean) { + if ((int.options.get("unblacklist")?.value ?? false) as boolean) { if (!blacklist.has(id)) { await int.reply(text.commands.blacklist.remove.existing); return; @@ -24,7 +24,7 @@ export const command = new Command("blacklist", "Blacklists a user, server, or c await int.reply(text.commands.blacklist.existing); return; } - await createBlacklist(id, int.user, int.options.get("reason", true).value as string ?? "No reason specified."); + await createBlacklist(id, int.user, int.options.get("reason")?.value as string ?? "No reason specified."); await int.reply(text.commands.blacklist.success); } }); diff --git a/src/commands/orders/worker/leaderboard.ts b/src/commands/orders/worker/leaderboard.ts index bb639c5..6b8e0ba 100644 --- a/src/commands/orders/worker/leaderboard.ts +++ b/src/commands/orders/worker/leaderboard.ts @@ -8,7 +8,7 @@ const PAGE_SIZE = 5; // Number of workers per page async function refreshWorkerInfos() { // Refresh worker infos from the database - await getWorkerInfos(true); + await getWorkerInfos(); // Wait for 1 second before retrieving the worker infos again await new Promise((resolve) => setTimeout(resolve, 1000)); } @@ -38,7 +38,7 @@ export const command = new Command("leaderboard", "hm.") const totalPages = Math.ceil(activeWorkerInfos.length / PAGE_SIZE); // Get the current page number from the command options (defaults to page 1) - const currentPage = int.options.getInteger("page") ?? 1; + const currentPage = int.options.get("page", true).value as number ?? 1; // Calculate the start and end index for the workers on the current page const startIndex = (currentPage - 1) * PAGE_SIZE; diff --git a/src/commands/public/notifi.ts b/src/commands/public/notifi.ts index 246f054..9e1d724 100644 --- a/src/commands/public/notifi.ts +++ b/src/commands/public/notifi.ts @@ -16,7 +16,7 @@ export const command = new Command("notifi", if (int.user.bot || !int.guild) return; // Get the ID of the channel from the command option - const channelId = int.options.getChannel()?.id; + const channelId = int.options.getChannel("channel")?.id; if (!channelId) { await int.reply("Please provide a valid channel."); return; diff --git a/src/commands/public/profile.ts b/src/commands/public/profile.ts index 7f16bfb..98b17e9 100644 --- a/src/commands/public/profile.ts +++ b/src/commands/public/profile.ts @@ -49,7 +49,6 @@ export const command = new Command("profile", "Shows your profile.") userName: int.user.username, level: 0, exp: 0, - user: {connect: {id: userId}}, // Connect the guildsXP to the UserInfo }, }); } else if (!userGuildData.userName) { diff --git a/src/commands/test.ts b/src/commands/test.ts index d4bdadf..dc0ff64 100644 --- a/src/commands/test.ts +++ b/src/commands/test.ts @@ -1,4 +1,9 @@ -// todo: uncomment when components are fixed +import {Command} from "../structures/Command"; + +export const command = new Command("unimplemented", "foo bar baz").setExecutor(async int => { + await int.reply("not implemented"); +}); + // import { Command } from "../structures/Command"; // import { actionRowOf, cbButton, cbSelectMenu } from "../utils/components"; // diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index 270a8ac..fea21c9 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -1,11 +1,11 @@ -import { client } from "../providers/client"; -import { commandRegistry } from "../providers/commandManager"; +import {client} from "../providers/client"; +import {commandRegistry} from "../providers/commandManager"; import {constants, text} from "../providers/config"; -import { blacklist } from "../database/blacklist"; -import { StopCommandExecution } from "../utils/error"; +import {blacklist} from "../database/blacklist"; +import {StopCommandExecution} from "../utils/error"; import {LifetimeMap} from "../structures/LifetimeMap"; import type {InteractionByType} from "../utils/components"; -import type {Awaitable} from "discord.js"; +import type {Awaitable, ChatInputCommandInteraction} from "discord.js"; /** * This file is responsible for handling interactions. @@ -31,7 +31,7 @@ client.on("interactionCreate", async (int) => { if (!command) throw new Error(`Unregistered command ${int.commandName}`); // TODO remove this and use discord builtin when permissions get better for (const perm of command.permissions) await perm.check(int); - await command.executor(int); + await command.executor(int as ChatInputCommandInteraction<"cached">); } } catch (e) { if (!(e instanceof StopCommandExecution)) { diff --git a/src/events/ready.ts b/src/events/ready.ts index 29a48b7..bcaf567 100644 --- a/src/events/ready.ts +++ b/src/events/ready.ts @@ -1,12 +1,12 @@ -import type { GuildEmoji, TextBasedChannel } from "discord.js"; -import { client } from "../providers/client"; -import { loadCommands } from "../providers/commandManager"; -import { config, text } from "../providers/config"; -import { mainChannels, mainEmojis, mainGuild, setMainGuild, setMainRoles } from "../providers/discord"; -import { startOrderTimeoutChecks } from "../providers/orderManager"; -import { IllegalStateError } from "../utils/error"; -import { parseText } from "../utils/string"; -import { isNotInitialized, typedEntries, typedFromEntries } from "../utils/utils"; +import type {GuildEmoji, TextBasedChannel} from "discord.js"; +import {client} from "../providers/client"; +import {loadCommands} from "../providers/commandManager"; +import {config, text} from "../providers/config"; +import {mainChannels, mainEmojis, mainGuild, setMainGuild, setMainRoles} from "../providers/discord"; +import {startOrderTimeoutChecks} from "../providers/orderManager"; +import {IllegalStateError} from "../utils/error"; +import {parseText} from "../utils/string"; +import {isNotInitialized, typedEntries, typedFromEntries} from "../utils/utils"; /** * This file contains the `ready` event handler. @@ -20,8 +20,8 @@ type TextObject = { client.on("ready", async () => { if (!client.isReady()) return; console.log(`Bot up as ${client.user.tag}!`); - await loadCommands(); if (isNotInitialized(mainGuild)) setMainGuild(await client.guilds.fetch(config.mainServer)); + await loadCommands(); setMainRoles( typedFromEntries( await Promise.all( diff --git a/tsconfig.json b/tsconfig.json index 254af17..cbeaae9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,105 +1,123 @@ { - "include": ["./src/**/*.ts"], - "exclude": ["./node_modules/**", "genenv.js"], - "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ + "include": [ + "./src/**/*.ts" + ], + "exclude": [ + "./node_modules/", + "genenv.js" + ], + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ - /* Projects */ - "incremental": true /* Enable incremental compilation */, - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - "tsBuildInfoFile": "./.cache/.tsbuildinfo" /* Specify the folder for .tsbuildinfo incremental compilation files. */, - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + /* Projects */ + "incremental": true + /* Enable incremental compilation */, + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + "tsBuildInfoFile": "./.cache/.tsbuildinfo" + /* Specify the folder for .tsbuildinfo incremental compilation files. */, + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - /* Language and Environment */ - "target": "esnext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - "lib": [ - "esnext" - ] /* Specify a set of bundled library declaration files that describe the target runtime environment. */, - // "jsx": "preserve", /* Specify what JSX code is generated. */ - "experimentalDecorators": true /* Enable experimental support for TC39 stage 2 draft decorators. */, - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ - // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + /* Language and Environment */ + "target": "esnext" + /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + "lib": [ + "esnext" + ] + /* Specify a set of bundled library declaration files that describe the target runtime environment. */, + // "jsx": "preserve", /* Specify what JSX code is generated. */ + "experimentalDecorators": true + /* Enable experimental support for TC39 stage 2 draft decorators. */, + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ + // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, - "rootDir": "./src/" /* Specify the root folder within your source files. */, - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */, - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "resolveJsonModule": true, /* Enable importing .json files */ - // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ + /* Modules */ + "module": "commonjs" + /* Specify what module code is generated. */, + "rootDir": "./src/" + /* Specify the root folder within your source files. */, + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */, + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ + "types": [], + /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "resolveJsonModule": true, /* Enable importing .json files */ + // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - "sourceMap": true /* Create source map files for emitted JavaScript files. */, - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ - "outDir": "./dist/" /* Specify an output folder for all emitted files. */, - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + /* Emit */ + // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "sourceMap": true + /* Create source map files for emitted JavaScript files. */, + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist/" + /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true + /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true + /* Ensure that casing is correct in imports. */, + /* Type Checking */ + "strict": true + /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type. */ + // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ + // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type. */ - // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ - // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true + /* Skip type checking all .d.ts files. */ + } } diff --git a/yarn.lock b/yarn.lock index 1fabf40..b823ce7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -721,7 +721,7 @@ discord-api-types@0.37.61: resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz" integrity sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw== -discord.js@^14.8.0: +discord.js@^14.14.1: version "14.14.1" resolved "https://registry.npmjs.org/discord.js/-/discord.js-14.14.1.tgz" integrity sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w== @@ -1837,10 +1837,10 @@ typescript-memoize@^1.1.0: resolved "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz" integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== -typescript@^4.9.5, typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": - version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@^5.4.3, typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": + version "5.4.3" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz" + integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== undefsafe@^2.0.5: version "2.0.5" From 7bb77366e55c1cc43e24d0c8c50039ebee65edc1 Mon Sep 17 00:00:00 2001 From: floof Date: Sun, 31 Mar 2024 12:34:59 -0500 Subject: [PATCH 41/79] silly me used the wrong table --- src/commands/orders/worker/fetch.ts | 2 +- src/commands/orders/worker/workerstats.ts | 2 +- src/database/orders.ts | 26 +++++++++++------------ 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/commands/orders/worker/fetch.ts b/src/commands/orders/worker/fetch.ts index b1e43a2..bad0c60 100644 --- a/src/commands/orders/worker/fetch.ts +++ b/src/commands/orders/worker/fetch.ts @@ -21,7 +21,7 @@ export const command = new Command( ) .setExecutor(async (int) => { const match = int.options.get("order", true).value as string; - const inactive = int.options.get("inactive", true).value as boolean; + const inactive = int.options.get("inactive")?.value as boolean; const order = inactive ? await getOrder(match) : await matchActiveOrder(match); if (!order) { await int.reply(text.common.invalidOrderId); diff --git a/src/commands/orders/worker/workerstats.ts b/src/commands/orders/worker/workerstats.ts index 592aacb..d90baae 100644 --- a/src/commands/orders/worker/workerstats.ts +++ b/src/commands/orders/worker/workerstats.ts @@ -13,7 +13,7 @@ export const command = new Command("workerstats", "Checks the global worker stat .addPermission(permissions.employee) .addShortcuts("ws") .setExecutor(async (int: CommandInteraction) => { - const args = (int.options.get("monthly", true).value as string)?.includes("m") ? ["monthly", ...(int.options.get("monthly", true).value as string).split(" ").slice(1)] : []; + const args = (int.options.get("monthly")?.value as string)?.includes("m") ? ["monthly", ...(int.options.get("monthly")?.value as string).split(" ").slice(1)] : []; const workerInfos = await getWorkerInfos(); // Retrieve the workerInfos let data = workerInfos; let isMonthly = false; diff --git a/src/database/orders.ts b/src/database/orders.ts index e7ea228..5e11b6b 100644 --- a/src/database/orders.ts +++ b/src/database/orders.ts @@ -1,4 +1,4 @@ -import type {CafeOrders, Orders} from "@prisma/client"; +import type {Orders} from "@prisma/client"; import {CafeStatus, OrderStatus, PrismaClient} from "@prisma/client"; import type {Channel, Client, User, UserResolvable} from "discord.js"; import {EmbedBuilder, GuildChannel} from "discord.js"; @@ -28,7 +28,7 @@ export const activeCafeStatus = [ * @param user - A user resolvable. */ export const hasActiveOrder = async (user: UserResolvable) => - (await db.cafeOrders.count({ + (await db.orders.count({ where: { user: resolveUserId(user), status: {in: activeCafeStatus}, @@ -40,7 +40,7 @@ export const hasActiveOrder = async (user: UserResolvable) => * @param user - A user resolvable. */ export const getUserActiveOrder = async (user: UserResolvable) => - await db.cafeOrders.findFirst({ + await db.orders.findFirst({ where: { user: resolveUserId(user), status: {in: activeCafeStatus}, @@ -52,7 +52,7 @@ export const getUserActiveOrder = async (user: UserResolvable) => * @param id - The ID to check. */ export const orderExists = async (id: string) => - (await db.cafeOrders.count({ + (await db.orders.count({ where: { id, }, @@ -96,7 +96,7 @@ const dishExists = async (id: string) => /** * Get all active orders. */ -export const getAllActiveOrders = async () => db.cafeOrders.findMany({where: {status: {in: activeCafeStatus}}}); +export const getAllActiveOrders = async () => db.orders.findMany({where: {status: {in: activeCafeStatus}}}); /** * Gets all orders of a current status. @@ -104,35 +104,35 @@ export const getAllActiveOrders = async () => db.cafeOrders.findMany({where: {st * @param status - The status to check for. */ export const matchCafeStatus = async (id: string, status: CafeStatus) => - db.cafeOrders.findFirst({where: {id: {startsWith: id}, status}}); + db.orders.findFirst({where: {id: {startsWith: id}, status}}); /** * Gets the first active order that starts with the given ID. * @param id */ export const matchActiveOrder = async (id: string) => - db.cafeOrders.findFirst({where: {id: {startsWith: id.toLowerCase()}, status: {in: activeCafeStatus}}}); + db.orders.findFirst({where: {id: {startsWith: id.toLowerCase()}, status: {in: activeCafeStatus}}}); /** * Gets the first active order from a user. * @param user - A user resolvable. */ export const getClaimedOrder = async (user: UserResolvable) => - db.cafeOrders.findFirst({where: {claimer: resolveUserId(user), status: CafeStatus.Preparing}}); + db.orders.findFirst({where: {claimer: resolveUserId(user), status: CafeStatus.Preparing}}); /** * Gets the first active order with a given ID. * @param id - The ID to check. */ export const getOrder = async (id: string) => - db.cafeOrders.findFirst({where: {id}}); + db.orders.findFirst({where: {id}}); /** * Gets the latest delivered order of a user. * @param user - A user resolvable. */ export const getLatestOrder = async (user: UserResolvable) => - db.cafeOrders.findFirst({ + db.orders.findFirst({ where: {user: resolveUserId(user), status: CafeStatus.Delivered}, orderBy: {createdAt: "desc"} }); @@ -173,7 +173,7 @@ const formatChannel = (channel: Channel | string) => * @param order - The order to create the embed with. * @param client - The client to fetch users and channels with. */ -export const orderEmbedSync = async (order: CafeOrders, client: Client) => { +export const orderEmbedSync = async (order: Orders, client: Client) => { const embed = rawOrderEmbed(order) .addFields({ name: embedFields.customer, @@ -206,7 +206,7 @@ const nulli = () => null; * @param order - The order to create the embed with. * @param client - The client to fetch users and channels with. */ -export const orderEmbedAsync = async (order: CafeOrders, client: Client): Promise => { +export const orderEmbedAsync = async (order: Orders, client: Client): Promise => { const user = await client.users.fetch(order.user).catch(() => null); const channel = await client.channels.fetch(order.channel).catch(() => null); const guild = await client.guilds.fetch(order.guild).catch(() => null); @@ -241,7 +241,7 @@ export const requiredOrderPlaceholders = ["mention", "image"]; * Creates placeholders for an order. * @param order - The order to create placeholders for. */ -export const orderPlaceholders = async (order: CafeOrders) => Object.assign(Object.create(null), { +export const orderPlaceholders = async (order: Orders) => Object.assign(Object.create(null), { preparer: order.claimer ? formatUser((await client.users.fetch(order.claimer).catch(nulli)) ?? order.claimer) : "Unknown", deliverer: order.deliverer ? formatUser((await client.users.fetch(order.deliverer).catch(nulli)) ?? order.deliverer) : "Unknown", id: order.id, From 9711599d7fb48155cfe2a5813cc7106791ec0ccc Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 9 Apr 2024 11:53:59 -0400 Subject: [PATCH 42/79] Updates Oh, you know just Adding stuff... --- prisma/schema.prisma | 36 +++-- src/commands/Devs/currencyedit.ts | 70 +++++++++ src/commands/Devs/menu.ts | 2 +- src/commands/Devs/terms.ts | 2 +- src/commands/orders/order.ts | 242 +++++++---------------------- src/commands/orders/worker/brew.ts | 9 ++ src/database/userInfo.ts | 37 +++-- src/events/interactionCreate.ts | 25 ++- src/providers/commandManager.ts | 10 ++ src/providers/config.ts | 3 + src/structures/extendedCommand.ts | 10 +- tsconfig.json | 2 +- 12 files changed, 220 insertions(+), 228 deletions(-) create mode 100644 src/commands/Devs/currencyedit.ts diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 295e77d..9e67a42 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -14,15 +14,15 @@ model WorkerInfo { preparations Int @default(0) deliveries Int @default(0) deliveryMessage String? - lastCommandUsage DateTime? // New field to track the last command usage time commandUsageCount Int // New field to track the command usage count - lastCommandName String? // New field to track the last command name - claimUsageCount Int @default(0) // Usage count for "claim" command - brewUsageCount Int @default(0) // Usage count for "brew" command + lastCommandName String? // New field to track the last command name + cafeDeliveryMessage String? } model UserInfo { id String @id @db.VarChar(30) + userName String // Add the userName field + guildId String // Ensure that guildId is defined here createdAt DateTime @default(now()) balance Int @default(0) newBalance Int? @@ -111,16 +111,6 @@ model dishes { updatedAt DateTime @db.Timestamp(6) } -model Drink { - id Int @id @default(autoincrement()) - name String @unique - type String - price Float - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt -} - - enum CafeStatus { Unprepared Preparing @@ -177,3 +167,21 @@ model MenuItem { price Float // Price of the menu item category String // Category of the menu item (e.g., appetizer, main course, dessert) } + + +model ShopItem { + id String @id @default(uuid()) + name String + price Int + description String + type String + roleId String? // Optional: If purchasing grants a role +} + +model InventoryItem { + id String @id @default(uuid()) + itemId String + userId String + quantity Int + // Add more properties as needed, such as item name, description, etc. +} \ No newline at end of file diff --git a/src/commands/Devs/currencyedit.ts b/src/commands/Devs/currencyedit.ts new file mode 100644 index 0000000..6d9a595 --- /dev/null +++ b/src/commands/Devs/currencyedit.ts @@ -0,0 +1,70 @@ +/* eslint-disable indent */ +import { permissions } from "../../providers/permissions"; +import { Command } from "../../structures/Command"; +import { CommandInteraction, EmbedBuilder } from "discord.js"; +import { getUserInfo, updateBalance } from "../../database/userInfo"; +import { ExtendedCommand } from "../../structures/extendedCommand"; +import { config } from "../../providers/config"; + +export const command = new ExtendedCommand({ name: "currencyedit", description: "Manage user balance.", servers: [config.servers.extraServer], local: true }) + .addPermission(permissions.developer) + .addSubCommand((subcommand) => + subcommand + .setName("set") + .setDescription("Set user balance.") + .addUserOption((option) => + option + .setName("user") + .setDescription("The user whose balance you want to set.") + .setRequired(true) + ) + .addIntegerOption((option) => + option + .setName("amount") + .setDescription("The amount to set as the user's balance.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("check") + .setDescription("Check user balance.") + .addUserOption((option) => + option + .setName("user") + .setDescription("The user whose balance you want to check.") + .setRequired(true) + ) + ) + .setExecutor(async (int: CommandInteraction) => { + const subcommand = int.options.getSubcommand(true); + + if (subcommand === "set") { + const user = int.options.getUser("user", true); + const amount = int.options.getInteger("amount", true); + + try { + await updateBalance(user.id, amount, 0); + await int.reply(`User ${user.username}'s balance has been set to ${amount}.`); + } catch (error) { + console.error("Error setting user balance:", error); + await int.reply("An error occurred while setting user balance."); + } + } else if (subcommand === "check") { + const user = int.options.getUser("user", true); + + try { + const userInfo = await getUserInfo(user.id); + if (userInfo) { + await int.reply(`User ${user.username}'s balance is ${userInfo.balance}.`); + } else { + await int.reply("User balance not found."); + } + } catch (error) { + console.error("Error checking user balance:", error); + await int.reply("An error occurred while checking user balance."); + } + } else { + await int.reply("This subcommand is not yet implemented."); + } + }); diff --git a/src/commands/Devs/menu.ts b/src/commands/Devs/menu.ts index 1711075..1c1e048 100644 --- a/src/commands/Devs/menu.ts +++ b/src/commands/Devs/menu.ts @@ -9,7 +9,7 @@ export const command = new ExtendedCommand({ name: "menu", description: "Manage .addPermission(permissions.developer) .addSubCommand((subcommand) => subcommand - .setName("add") + .setName("add") .setDescription("Add a new menu item.") .addStringOption((option) => option diff --git a/src/commands/Devs/terms.ts b/src/commands/Devs/terms.ts index 1af8c27..74c0393 100644 --- a/src/commands/Devs/terms.ts +++ b/src/commands/Devs/terms.ts @@ -2,4 +2,4 @@ import { Command } from "../../structures/Command"; export const command = new Command("tos", "Gives you a link to our tos.") .setExecutor(async int => { int.reply("https://drunk-bartender.org/Terms_of_Service"); - }); + }); \ No newline at end of file diff --git a/src/commands/orders/order.ts b/src/commands/orders/order.ts index 1e6ffaa..b8da876 100644 --- a/src/commands/orders/order.ts +++ b/src/commands/orders/order.ts @@ -1,194 +1,62 @@ -/* eslint-disable indent */ import { db } from "../../database/database"; -import { generateOrderId, OrderStatus } from "../../database/orders"; +import { generateOrderId, hasActiveOrder } from "../../database/orders"; import { text } from "../../providers/config"; import { mainChannels, mainRoles } from "../../providers/discord"; import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; -import { CommandInteraction, ComponentType, EmbedBuilder, StringSelectMenuBuilder } from "discord.js"; -import { getUserInfo, updateBalance } from "../../database/userInfo"; -import { client } from "../../providers/client"; - -// Map to store active orders by user ID -const activeOrders = new Map(); - -// Cached menu items -let cachedMenuItems: any[] = []; export const command = new Command("order", "Orders a drink.") - .setExecutor(async (int: CommandInteraction) => { - // Check if the user already has an active order - if (activeOrders.has(int.user.id)) { - await int.reply(text.commands.order.exists); - return; - } - - // Check if the channel has the "Embed Links" permission enabled - if (!int.channel.permissionsFor(int.client.user).has("EmbedLinks")) { - await int.reply("This channel doesn't have Embed Links enabled. You can't place an order here."); - return; - } - - // Fetch menu items if not cached - if (!cachedMenuItems.length) { - cachedMenuItems = await getDropdownOptions(); - } - - // If there are no options available, inform the user and return - if (cachedMenuItems.length === 0) { - await int.reply("There are no options available to select."); - return; - } - - // Create a StringSelectMenuBuilder for the dropdown menu - const selectMenu = new StringSelectMenuBuilder() - .setCustomId("order_item") - .setPlaceholder("Select a drink"); - - // Add options to the dropdown menu - cachedMenuItems.forEach(option => { - selectMenu.addOptions(option); - }); - - // Create an action row with the dropdown menu - const actionRow = { - type: ComponentType.ActionRow, - components: [selectMenu], - }; - - // Create an embed with instructions - const embed = new EmbedBuilder() - .setDescription("Please select a drink.") - .setColor("#00FF00"); - - // Reply to the interaction with the embed and dropdown menu - try { - await int.reply({ - embeds: [embed], - components: [actionRow], - ephemeral: true, - }); - } catch (error) { - console.error("Error replying to interaction:", error); - } - }); - -// Function to fetch options for the dropdown menu including menu items and their prices -async function getDropdownOptions() { - try { - // Fetch menu items and their prices from the database - const menuItems = await db.menuItem.findMany(); - - // Map menu items to options for the dropdown menu - const options = menuItems.map(item => ({ - label: `📔 ${item.name} 💲 ${item.price.toFixed(2)}`, // Name of the menu item with price, all in bold - value: item.name, // Use the name of the menu item as the value - description: `Description: 📝 ${item.description}`, // Description of the menu item - price: item.price, // Include the price in the option object - })); - return options; - } catch (error) { - console.error("Error fetching menu items:", error); - return []; // Return an empty array in case of error - } -} - -// Handle interaction for order selection -client.on("interactionCreate", async (interaction) => { - if (!interaction.isStringSelectMenu()) return; - - const componentId = interaction.customId; - if (componentId === "order_item") { - // Check if the user already has an active order - const userId = interaction.user.id; - if (activeOrders.has(userId)) { - await interaction.reply(text.commands.order.exists); - return; - } - - // Disable the dropdown menu to prevent further selections - const selectMenu = interaction.message.components?.find(component => component.type === ComponentType.ActionRow)?.components - .find(component => component.customId === "order_item"); - if (selectMenu && selectMenu instanceof StringSelectMenuBuilder) { - selectMenu.setDisabled(true); - } - - const selectedItem = cachedMenuItems.find(item => item.value === interaction.values[0]); - if (!selectedItem) { - console.error("Selected menu item not found."); - return; - } - - const drink = selectedItem.value; // Assuming only one drink can be selected - const orderId = await generateOrderId(); // Generate a unique order ID - - // Fetch user's balance - const userInfo = await getUserInfo(userId); - - // Check if the user has enough balance - if (userInfo.balance < selectedItem.price) { - await interaction.reply("You don't have enough balance to order this item."); - return; - } - - // Deduct the cost of the ordered item from the user's balance - const newBalance = userInfo.balance - selectedItem.price; - - // Update user's balance in the database - await updateBalance(userId, newBalance, 0); // Provide a default value for newDonuts - // Updated to match the new function signature - // Create the order - const order = await db.orders.create({ - data: { - id: orderId, - user: userId, - details: drink, - channel: interaction.channelId, - guild: interaction.guildId, - status: OrderStatus.Unprepared, // Initial status set to PendingDelivery - }, - }); - - try { - // Attempt to send the "Order has been placed successfully" message directly to the user - const embed = new EmbedBuilder() - .setTitle("Order Placement") - .setColor("Random") //default 0099ff - .addFields( - { name: "Order Details", value: `Your order with ID ${order.id} | ${drink}\nStatus: Has been placed successfully` } - ); - await interaction.user.send({ embeds: [embed] }); - } catch (error) { - // Handle the error if sending the message fails due to closed DMs - await interaction.reply("Your DMs are closed. Please enable them to receive the order confirmation."); - return; - } - - const updatedUserInfo = await getUserInfo(userId); - await interaction.reply(`You have purchased ${drink} and your balance is now ${updatedUserInfo.balance}.`); - - if (interaction.member?.nickname?.toLowerCase() === "bart") { - await interaction.followUp("I will end you"); - } - - await mainChannels.brewery.send( - format(text.commands.order.created, { - details: drink, - duty: mainRoles.duty.toString(), - id: order.id, - tag: interaction.user.username, - }) - ); - - // Mark the user as having an active order - activeOrders.set(userId, true - ); - - // Remove the user from activeOrders after 30 seconds if their order is not cancelled or deleted - setTimeout(() => { - if (activeOrders.has(userId)) { - activeOrders.delete(userId); - } - }, 30000); // 30 seconds timeout for non-cancelled or non-deleted orders - } -}); + .addOption("string", (o) => + o.setName("drink").setDescription("The drink to order.").setRequired(true) + ) + .setExecutor(async (int) => { + if (await hasActiveOrder(int.user)) { + await int.reply(text.commands.order.exists); + return; + } + + // Check the number of existing orders + /* + const orderCount = await db.cafeOrders.count(); + const maxOrderLimit = 25; + + if (orderCount >= maxOrderLimit) { + await int.reply(`The maximum order limit of ${maxOrderLimit} has been reached. Try again later.`); + return; + } + */ + + const drink = int.options.getString("drink", true); + + // Check the length of the drink description + const maxDescriptionLength = 100; // Adjust this value as needed + if (drink.length > maxDescriptionLength) { + await int.reply(`Your order details are too long. Please limit them to ${maxDescriptionLength} characters.`); + return; + } + + const order = await db.orders.create({ + data: { + id: await generateOrderId(), + user: int.user.id, + details: drink, + channel: int.channelId, + guild: int.guildId, + }, + }); + + await int.reply(format(text.commands.order.success, { id: order.id, details: drink })); + + if (int.member.nickname?.toLowerCase() === "bart") { + await int.followUp("I will end you"); + } + + await mainChannels.brewery.send( + format(text.commands.order.created, { + details: drink, + duty: mainRoles.duty.toString(), + id: order.id, + tag: int.user.tag, + }) + ); + }); diff --git a/src/commands/orders/worker/brew.ts b/src/commands/orders/worker/brew.ts index ed6f6b6..74f587a 100644 --- a/src/commands/orders/worker/brew.ts +++ b/src/commands/orders/worker/brew.ts @@ -216,6 +216,15 @@ export const command = new ExtendedCommand( await handleBrew(int.user); await upsertWorkerStats(int.user, { ordersBrewed: 1 }); // Increment the ordersBrewed count await upsertWorkerInfo(int.user); + // Increment the brew count for the worker + await db.workerInfo.update({ + where: { + id: int.user.id, + }, + data: { + brews: { increment: 1 }, // Increment the brew count + }, + }); await int.followUp({ content: "Brewing process started.", diff --git a/src/database/userInfo.ts b/src/database/userInfo.ts index 9fc2644..bb3a1b2 100644 --- a/src/database/userInfo.ts +++ b/src/database/userInfo.ts @@ -9,29 +9,27 @@ export const getUserInfo = async (user: UserResolvable) => prisma.userInfo.findFirst({ where: { id: resolveUserId(user) } }); export const upsertUserInfo = async (user: User, guildId: string): Promise => { - const existingUserInfo = await prisma.userInfo.findUnique({ + let userInfo = await prisma.userInfo.findUnique({ where: { id: resolveUserId(user), }, }); - if (existingUserInfo) { - return existingUserInfo; + if (!userInfo) { + userInfo = await prisma.userInfo.create({ + data: { + id: resolveUserId(user), + userName: user.username, + guildId: guildId, + } as any, // Explicitly specifying the type of 'data' + }); } - const createdUserInfo = await prisma.userInfo.create({ - data: { - id: resolveUserId(user), - userId: user.id, - userName: user.username, - guildId: guildId, - }, - }); - - return createdUserInfo; + return userInfo; }; + export const getUserBalance = async (user: UserResolvable): Promise<{ balance: number; donuts: number }> => { const userInfo = await prisma.userInfo.findUnique({ where: { @@ -43,17 +41,19 @@ export const getUserBalance = async (user: UserResolvable): Promise<{ balance: n }, }); - const balance = userInfo?.balance ?? 0; - const donuts = userInfo?.donuts ?? 0; + // Parse balance and donuts as numbers + const balance = userInfo ? Number(userInfo.balance) : 0; + const donuts = userInfo ? Number(userInfo.donuts) : 0; return { balance, donuts }; }; + // Update user balance function export const updateBalance = async ( user: UserResolvable, newBalance: number, - newDonuts: number + newDonuts?: number // Making newDonuts optional ): Promise => { // Check if newBalance is a valid number if (isNaN(newBalance) || typeof newBalance !== 'number') { @@ -63,7 +63,6 @@ export const updateBalance = async ( // Ensure balance is a whole number const balance = Math.floor(newBalance); - const donuts = Math.floor(newDonuts); // Update the user's balance in the database const updatedUserInfo = await prisma.userInfo.update({ @@ -72,10 +71,10 @@ export const updateBalance = async ( }, data: { balance: balance, - donuts: donuts, + // Update donuts only if newDonuts is provided + ...(newDonuts !== undefined && { donuts: Math.floor(newDonuts) }), }, }); return updatedUserInfo; }; - diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index 9ffc5a1..d39a195 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -4,14 +4,32 @@ import { text } from "../providers/config"; import { blacklist } from "../database/blacklist"; import { StopCommandExecution } from "../utils/error"; +// Custom logging functions +function logInteractionAlreadyReplied() { + console.log("The reply to this interaction has already been sent or deferred."); +} + +function logBlacklistedUserInteraction(userId) { + console.log(`Interaction failed due to user being blacklisted: ${userId}`); +} + +function logException(message) { + console.log(`Interaction failed with exception: ${message}`); +} + + client.on("interactionCreate", async (int) => { try { if (!int.inCachedGuild()) { - if (int.isCommand()) int.reply("Error B417"); + if (int.isCommand()) { + logInteractionAlreadyReplied(); + await int.reply("Error B417"); + } return; } if (int.isCommand()) { if (blacklist.has(int.user.id)) { + logBlacklistedUserInteraction(int.user.id); await int.reply(text.errors.blacklisted); } const command = commandRegistry.get(int.commandName); @@ -22,7 +40,10 @@ client.on("interactionCreate", async (int) => { } } catch (e) { if (!(e instanceof StopCommandExecution)) { - if (int.isCommand()) int.reply({ content: text.errors.exception, ephemeral: true }).catch(); + if (int.isCommand()) { + logException(e.message); + int.reply({ content: text.errors.exception, ephemeral: true }).catch(); + } console.error(e); } } diff --git a/src/providers/commandManager.ts b/src/providers/commandManager.ts index d444c16..e91ead9 100644 --- a/src/providers/commandManager.ts +++ b/src/providers/commandManager.ts @@ -42,6 +42,7 @@ const registerCommands = async (commands: (Command | ExtendedCommand)[]) => { const globalCommands = commands.filter((x) => !(x instanceof ExtendedCommand && x.local)); const localCommands = commands.filter((x) => x instanceof ExtendedCommand && x.local); + const serverCommands = commands.filter((x) => x instanceof ExtendedCommand && x.servers); // New line for server commands // Register global commands await rest.put(Routes.applicationCommands(client.application.id), { body: globalCommands.map((x) => x.toJSON()) }); @@ -51,6 +52,15 @@ const registerCommands = async (commands: (Command | ExtendedCommand)[]) => { body: localCommands.map((x) => x.toJSON()), }); + // Register server commands for specific servers + for (const serverId of Object.values(config.servers)) { + const serverName = "TestServer"; // Replace this with the name of the server + await rest.put(Routes.applicationGuildCommands(client.application.id, serverId), { + body: serverCommands.map((x) => x.toJSON()), + }); + console.log(`Registered local commands for ${serverName}: ${serverCommands.map((x) => x.name).join(", ")}`); // Log the loaded commands for the server + } + commands.forEach((x) => commandRegistry.set(x.name, x)); for (const cmd of (await applicationCommandManager.fetch({})).values()) { applicationCommandRegistry.set(cmd.name, cmd); diff --git a/src/providers/config.ts b/src/providers/config.ts index 2919580..86c3116 100644 --- a/src/providers/config.ts +++ b/src/providers/config.ts @@ -222,6 +222,9 @@ const configSchema = z feedback: snowflake, tips: snowflake, }), + servers: z.object({ + extraServer: snowflake, // Add the extra server here + }) }) .strict(); diff --git a/src/structures/extendedCommand.ts b/src/structures/extendedCommand.ts index 7ac2a6e..56cd431 100644 --- a/src/structures/extendedCommand.ts +++ b/src/structures/extendedCommand.ts @@ -7,7 +7,7 @@ interface CommandOptions { name: string; description?: string; local?: boolean; - // New property to specify whether the command should be registered locally + servers?: string[]; // New property to specify servers where the command should be registered locally // Other properties as needed } @@ -16,11 +16,15 @@ export class ExtendedCommand extends Command { // Add new properties specific to your modifications global: boolean; local: boolean; // New property to specify whether the command should be registered locally + servers: string[] | undefined; // New property to specify servers where the command should be registered locally // Constructor - constructor({ name, description, local = false, ...options }: CommandOptions) { + constructor({ name, description, local = false, servers, ...options }: CommandOptions) { super(name, description, options); this.global = !local; // Set global property based on the value of local this.local = local; + + // Ensure servers is an array and set it to the provided value, or set it as undefined if not provided + this.servers = Array.isArray(servers) ? servers : undefined; } -} \ No newline at end of file +} diff --git a/tsconfig.json b/tsconfig.json index 3bb8865..0a8fb59 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,5 @@ { - "include": ["./src/**/*.ts", "src/commands/orders/order.disabled"], + "include": ["./src/**/*.ts", "src/commands/orders/order.ts"], "exclude": ["./node_modules/**", "genenv.js"], "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ From b5bf9ea33443d1da302117deda308debff3581cf Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 9 Apr 2024 13:33:59 -0400 Subject: [PATCH 43/79] Delete src/structures/DrinksData.ts Not needed --- src/structures/DrinksData.ts | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 src/structures/DrinksData.ts diff --git a/src/structures/DrinksData.ts b/src/structures/DrinksData.ts deleted file mode 100644 index 41b69d3..0000000 --- a/src/structures/DrinksData.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const drinksData = [ - { name: "Drink11", type: "normal", price: 10 }, - { name: "Drink22", type: "normal", price: 8 }, - { name: "Drink33", type: "normal", price: 12 }, - { name: "Drink32", type: "normal", price: 13 }, -]; \ No newline at end of file From 44254c6500810c2b4c27b81ba8f890e79529028c Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 9 Apr 2024 13:34:22 -0400 Subject: [PATCH 44/79] Delete src/structures/CustomDrinkData.ts Also not needed --- src/structures/CustomDrinkData.ts | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 src/structures/CustomDrinkData.ts diff --git a/src/structures/CustomDrinkData.ts b/src/structures/CustomDrinkData.ts deleted file mode 100644 index 4ef2159..0000000 --- a/src/structures/CustomDrinkData.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const CustomdrinksData = [ - { name: "Drink1", type: "custom", price: 10 }, - { name: "Drink2", type: "custom", price: 8 }, - { name: "Drink3", type: "custom", price: 13 }, - { name: "Drink4", type: "custom", price: 10.99 }, -]; \ No newline at end of file From 9754ad6fa3a48a13a72fdae5923ed8988a164f8f Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 9 Apr 2024 13:35:21 -0400 Subject: [PATCH 45/79] Delete src/events/CommandUsage.ts Not Needed --- src/events/CommandUsage.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/events/CommandUsage.ts diff --git a/src/events/CommandUsage.ts b/src/events/CommandUsage.ts deleted file mode 100644 index e69de29..0000000 From 5e058ba7f4b985ed09316e212a193140522fa8bf Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 9 Apr 2024 13:35:58 -0400 Subject: [PATCH 46/79] Delete src/commands/crime.ts Not needed --- src/commands/crime.ts | 40 ---------------------------------------- 1 file changed, 40 deletions(-) delete mode 100644 src/commands/crime.ts diff --git a/src/commands/crime.ts b/src/commands/crime.ts deleted file mode 100644 index 374715b..0000000 --- a/src/commands/crime.ts +++ /dev/null @@ -1,40 +0,0 @@ -//crime.ts -import { db } from "../../database/database"; -import { upsertUserInfo } from "../../database/userInfo"; -import { constants, text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; -import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; -const cooldowns: Record = {}; - -export const command = new Command("crime", "Try your chances on doing crime!") - .setExecutor(async int => { - if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { - await int.reply( - format( - text.errors.cooldown, - pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) - ) - ); - return; - } - const result = [ - "Succesful", - "Failure" - ]; - const awnser = result[Math.floor(Math.random() * result.length)]; - if (awnser === "Failure") { - const info = await upsertUserInfo(int.user, int.guild?.id || ''); - const obtained = randRange(...constants.crime.amountRange); - cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { decrement: obtained } } }); - await int.reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); - } else { - const info = await upsertUserInfo(int.user, int.guild?.id || ''); - const obtained = randRange(...constants.crime.amountRange); - cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); - await int.reply(format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``)); - } - }); From e8cf4871107470f70cd7dcacf38e30c5d40b9922 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 9 Apr 2024 13:36:12 -0400 Subject: [PATCH 47/79] Delete src/commands/work.ts Not needed --- src/commands/work.ts | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 src/commands/work.ts diff --git a/src/commands/work.ts b/src/commands/work.ts deleted file mode 100644 index 7361990..0000000 --- a/src/commands/work.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* eslint-disable quotes */ -/* eslint-disable linebreak-style */ -//work.ts -import { db } from "../../database/database"; -import { upsertUserInfo } from "../../database/userInfo"; -import { constants, text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; -import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; -const cooldowns: Record = {}; - -export const command = new Command("work", "Gets you some money.") - .setExecutor(async int => { - if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { - await int.reply( - format( - text.errors.cooldown, - pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) - ) - ); - return; - } - const info = await upsertUserInfo(int.user, int.guild?.id || ''); - const obtained = randRange(...constants.work.amountRange); - cooldowns[int.user.id] = Date.now() + constants.work.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); - await int.reply(format(sampleArray(text.commands.work.responses), `\`$${obtained}\``)); - }); From 0da3176cd74b8a7ed9d5d7300164afbb7a664e71 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 9 Apr 2024 13:36:23 -0400 Subject: [PATCH 48/79] Delete src/commands/test.ts Not needed --- src/commands/test.ts | 34 ---------------------------------- 1 file changed, 34 deletions(-) delete mode 100644 src/commands/test.ts diff --git a/src/commands/test.ts b/src/commands/test.ts deleted file mode 100644 index 41754b3..0000000 --- a/src/commands/test.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Command } from "../structures/Command"; -import { actionRowOf, cbButton, cbSelectMenu } from "../utils/components"; - -export const command = new Command("test", "foo bar baz").setExecutor(async int => { - await int.reply({ - components: [ - actionRowOf( - cbButton(ctx => { - ctx.disable(); - }) - .setLabel("Testing BUtton") - .setEmoji("📈") - .setStyle("DANGER") - ), - actionRowOf( - cbSelectMenu(async ctx => { - await ctx.disable(); - await ctx.int.followUp(ctx.int.values.join(", ")); - }) - .setMaxValues(2) - .setMinValues(1) - .setPlaceholder("i am in severe pain") - .setOptions( - ...[...Array(10)].map((_, x) => ({ - label: `label ${x}`, - value: `${x}`, - description: `description ${x}`, - emoji: ["🕗", "♍", "🌎", "😑", "🔸", "💞", "🍤", "⛔", "🍊", "âŗ"][x], - })) - ) - ), - ], - }); -}); From 72b3357ca04f47e433765d7ca7115c7cb1de219f Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 9 Apr 2024 13:36:36 -0400 Subject: [PATCH 49/79] Delete src/commands/daily.ts Not needed --- src/commands/daily.ts | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 src/commands/daily.ts diff --git a/src/commands/daily.ts b/src/commands/daily.ts deleted file mode 100644 index 532f62d..0000000 --- a/src/commands/daily.ts +++ /dev/null @@ -1,27 +0,0 @@ -//daily.ts -import { db } from "../../database/database"; -import { upsertUserInfo } from "../../database/userInfo"; -import { constants, text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; -import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; -const cooldowns: Record = {}; - -export const command = new Command("daily", "Get your daily income!.") - .setExecutor(async int => { - if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { - await int.reply( - format( - text.errors.cooldown, - pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) - ) - ); - return; - } - const info = await upsertUserInfo(int.user, int.guild?.id || ''); - const obtained = randRange(...constants.daily.amountRange); - cooldowns[int.user.id] = Date.now() + constants.daily.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); - await int.reply(format(sampleArray(text.commands.daily.responses), `\`$${obtained}\``)); - }); \ No newline at end of file From c8459967909ed570513b1ba7ad909d2584b5157a Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 9 Apr 2024 13:39:00 -0400 Subject: [PATCH 50/79] Update .gitignore Added # WebStorm .idea/ --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index f96e548..cdf001c 100644 --- a/.gitignore +++ b/.gitignore @@ -105,4 +105,7 @@ dist config.hjson -logs/ \ No newline at end of file +logs/ + +# WebStorm +.idea/ From eb2b87d860e1e077c710db0e23947e654869275f Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 9 Apr 2024 18:29:41 -0400 Subject: [PATCH 51/79] Fixes --- database/userInfo.ts | 98 ++++++++++++++++++++++++++++++++++ prisma/schema.prisma | 18 ++----- src/commands/public/notifi.ts | 5 +- src/commands/public/profile.ts | 18 +------ src/events/ExpCreate.ts | 19 ++++--- 5 files changed, 117 insertions(+), 41 deletions(-) create mode 100644 database/userInfo.ts diff --git a/database/userInfo.ts b/database/userInfo.ts new file mode 100644 index 0000000..2c68383 --- /dev/null +++ b/database/userInfo.ts @@ -0,0 +1,98 @@ +/* eslint-disable indent */ +/* eslint-disable quotes */ +import { PrismaClient, UserInfo } from '@prisma/client'; +import type { User, UserResolvable } from 'discord.js'; +import { resolveUserId } from '../utils/id'; + +const prisma = new PrismaClient(); + +export const getUserInfo = async (user: UserResolvable) => + prisma.userInfo.findFirst({ where: { id: resolveUserId(user) } }); + +export const upsertUserInfo = async (user: User): Promise => { + let userInfo = await prisma.userInfo.findUnique({ + where: { + id: resolveUserId(user), + }, + }); + + if (!userInfo) { + userInfo = await prisma.userInfo.create({ + data: { + id: resolveUserId(user), + } as any, // Explicitly specifying the type of 'data' + }); + } + + return userInfo; +}; + + +export const getUserBalance = async (user: UserResolvable): Promise<{ balance: number; donuts: number }> => { + const userInfo = await prisma.userInfo.findUnique({ + where: { + id: resolveUserId(user), + }, + select: { + balance: true, + donuts: true, + }, + }); + + // Parse balance and donuts as numbers + const balance = userInfo ? Number(userInfo.balance) : 0; + const donuts = userInfo ? Number(userInfo.donuts) : 0; + + return { balance, donuts }; +}; + + +// Update user balance function +export const updateBalance = async ( + user: UserResolvable, + newBalance: number, + newDonuts?: number // Making newDonuts optional +): Promise => { + // Check if newBalance is a valid number + if (isNaN(newBalance) || typeof newBalance !== 'number') { + console.error('Invalid newBalance:', newBalance); + return null; + } + + // Ensure balance is a whole number + const balance = Math.floor(newBalance); + + // Update the user's balance in the database + const updatedUserInfo = await prisma.userInfo.update({ + where: { + id: resolveUserId(user), + }, + data: { + balance: balance, + // Update donuts only if newDonuts is provided + ...(newDonuts !== undefined && { donuts: Math.floor(newDonuts) }), + }, + }); + + return updatedUserInfo; +}; + +// Create guild-specific data function +export const createGuildData = async ( + userId: string, + guildId: string, + level: number, + exp: number, + notificationChannelId?: string +): Promise => { + await prisma.guildsXP.create({ + data: { + userId: userId, + guildId: guildId, + level: level, + exp: exp, + notificationChannelId: notificationChannelId, + } as any, // Explicitly specifying the type of 'data' + }); +}; + diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 9e67a42..ec49302 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -21,17 +21,12 @@ model WorkerInfo { model UserInfo { id String @id @db.VarChar(30) - userName String // Add the userName field - guildId String // Ensure that guildId is defined here createdAt DateTime @default(now()) balance Int @default(0) newBalance Int? tabLimit Float @default(0) tab Tab? donuts Int @default(0) - guildsxp Json @default("{}") - guildsxpData GuildsXP[] - } model Tree { @@ -140,14 +135,11 @@ enum OrderStatus { } model GuildsXP { - userId String - guildId String - userName String // Add the userName field - level Int @default(0) - exp Int @default(0) - user UserInfo @relation(fields: [userId], references: [id]) - location String? - notificationChannelId String? // New field for notification channel ID + userId String // References the id in UserInfo + guildId String + level Int @default(0) + exp Int @default(0) + notificationChannelId String? // New field for notification channel ID @@unique([userId, guildId]) } diff --git a/src/commands/public/notifi.ts b/src/commands/public/notifi.ts index 0a4019b..6ff0ae6 100644 --- a/src/commands/public/notifi.ts +++ b/src/commands/public/notifi.ts @@ -23,7 +23,6 @@ export const command = new Command("notifi", return; } - // Update the notification channel in the database await prisma.guildsXP.upsert({ where: { userId_guildId: { @@ -34,12 +33,10 @@ export const command = new Command("notifi", create: { userId: int.user.id, guildId: int.guild.id, - userName: int.user.username, level: 0, exp: 0, - location: 'default', notificationChannelId: channelId, // Set the notification channel ID - }, + } as any, // Explicitly specifying the type of 'data' update: { notificationChannelId: channelId, // Update the notification channel ID }, diff --git a/src/commands/public/profile.ts b/src/commands/public/profile.ts index 294f93e..041dc0f 100644 --- a/src/commands/public/profile.ts +++ b/src/commands/public/profile.ts @@ -46,24 +46,10 @@ export const command = new Command("profile", "Shows your profile.") data: { userId: userId, guildId: guildId, - userName: int.user.username, level: 0, exp: 0, user: { connect: { id: userId } }, // Connect the guildsXP to the UserInfo - }, - }); - } else if (!userGuildData.userName) { - // If the userName is blank, update it with the user's username - userGuildData = await prisma.guildsXP.update({ - where: { - userId_guildId: { - userId: userId, - guildId: guildId, - }, - }, - data: { - userName: int.user.username, - }, + } as any, // Explicitly specifying the type of 'data' }); } @@ -72,7 +58,7 @@ export const command = new Command("profile", "Shows your profile.") // Create a new embed using EmbedBuilder const embed = new EmbedBuilder() - .setTitle(`${int.user.username}'s Profile`) + .setTitle("Profile") .setThumbnail(int.user.displayAvatarURL()) .addFields( { name: "Experience", value: `${userGuildData.exp}/${nextLevelExp}`, inline: true }, diff --git a/src/events/ExpCreate.ts b/src/events/ExpCreate.ts index d4435e9..2089f16 100644 --- a/src/events/ExpCreate.ts +++ b/src/events/ExpCreate.ts @@ -2,7 +2,6 @@ /* eslint-disable indent */ import { PrismaClient } from "@prisma/client"; import { client } from "../providers/client"; - const prisma = new PrismaClient(); // Map to hold cooldown Sets per guild @@ -47,8 +46,7 @@ client.on('messageCreate', async (message) => { balance: 0, tabLimit: 0.0, donuts: 0, - guildsxp: "{}", - }, + } as any, // Explicitly specifying the type of 'data' }); } @@ -63,21 +61,21 @@ client.on('messageCreate', async (message) => { create: { userId: userId, guildId: guildId, - userName: message.author.username, level: 0, exp: 0, - }, + } as any, // Explicitly specifying the type of 'data' update: {}, }); // Increase their XP - guildsXPData.exp += Math.floor(Math.random() * 20) + 1; + const xpGain = Math.floor(Math.random() * 20) + 1; + guildsXPData.exp += xpGain; // Check if the user has enough XP to level up - if (guildsXPData.exp >= guildsXPData.level * 100) { + while (guildsXPData.exp >= guildsXPData.level * 100) { // If they do, increase their level and reset their XP guildsXPData.level += 1; - guildsXPData.exp = 0; + guildsXPData.exp -= guildsXPData.level * 100; // Get the ID of the notification channel from the database const notificationChannelId = guildsXPData.notificationChannelId; @@ -93,6 +91,11 @@ client.on('messageCreate', async (message) => { } } + // Ensure exp is not negative + if (guildsXPData.exp < 0) { + guildsXPData.exp = 0; + } + // Update the user's data in the database await prisma.guildsXP.update({ where: { From 810ad1f028a2fb3b2fd069bf002cebebabb106e2 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 9 Apr 2024 21:08:55 -0400 Subject: [PATCH 52/79] -coughs update- --- src/commands/orders/worker/brew.ts | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/commands/orders/worker/brew.ts b/src/commands/orders/worker/brew.ts index 74f587a..5bf714b 100644 --- a/src/commands/orders/worker/brew.ts +++ b/src/commands/orders/worker/brew.ts @@ -12,12 +12,11 @@ import { Command } from "../../../structures/Command"; import { format } from "../../../utils/string"; import { randRange } from "../../../utils/utils"; import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; -import { upsertWorkerStats, handleBrew, handleDeliver } from "../../../database/workerstats"; // Import the workerstats functions +import { upsertWorkerStats, handleBrew } from "../../../database/workerstats"; // Import the workerstats functions import { ExtendedCommand } from "../../../structures/extendedCommand"; export const command = new ExtendedCommand( { name: "brew", description: "Brews your claimed order.", local: true } - ) .addSubCommand((subcommand) => subcommand @@ -50,7 +49,7 @@ export const command = new ExtendedCommand( } // Set last command to "brew" when brewing - await upsertWorkerStats(int.user, { lastCommand: "brew" }); + await upsertWorkerStats(int.user, { ordersBrewed: 1, lastCommand: "brew" }); const subcommand = int.options.getSubcommand(true); let imageUrl: string | undefined; @@ -124,8 +123,7 @@ export const command = new ExtendedCommand( }, }); - // Update worker stats when brewing an order - await handleBrew(int.user); + // Update worker info await upsertWorkerInfo(int.user); await int.followUp({ @@ -212,19 +210,8 @@ export const command = new ExtendedCommand( }, }); - // Update worker stats when brewing an order - await handleBrew(int.user); - await upsertWorkerStats(int.user, { ordersBrewed: 1 }); // Increment the ordersBrewed count + // Update worker info await upsertWorkerInfo(int.user); - // Increment the brew count for the worker - await db.workerInfo.update({ - where: { - id: int.user.id, - }, - data: { - brews: { increment: 1 }, // Increment the brew count - }, - }); await int.followUp({ content: "Brewing process started.", @@ -245,4 +232,4 @@ export const command = new ExtendedCommand( } }); } - }); \ No newline at end of file + }); From cb4dd491a56731f7ecc3d9564a4d53ad9d50cf8a Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Wed, 10 Apr 2024 18:29:40 -0400 Subject: [PATCH 53/79] Update brew.ts Fixed preparations not showing up in the database~ --- src/commands/orders/worker/brew.ts | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/commands/orders/worker/brew.ts b/src/commands/orders/worker/brew.ts index 5bf714b..9257b75 100644 --- a/src/commands/orders/worker/brew.ts +++ b/src/commands/orders/worker/brew.ts @@ -122,10 +122,6 @@ export const command = new ExtendedCommand( timeout: new Date(Date.now() + time), }, }); - - // Update worker info - await upsertWorkerInfo(int.user); - await int.followUp({ content: "Brewing process started.", files: imageUrl ? [{ attachment: imageUrl }] : undefined, @@ -212,7 +208,14 @@ export const command = new ExtendedCommand( // Update worker info await upsertWorkerInfo(int.user); - + await db.workerInfo.update({ + where: { + id: int.user.id, + }, + data: { + preparations: { increment: 1 }, + }, + }); await int.followUp({ content: "Brewing process started.", files: imageUrl ? [{ attachment: imageUrl }] : undefined, From 19334fefc45a3bd4b63594211bffb5dc09bb90fe Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Thu, 11 Apr 2024 21:55:04 -0400 Subject: [PATCH 54/79] Fixs --- src/database/userInfo.ts | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/database/userInfo.ts b/src/database/userInfo.ts index bb3a1b2..2b7ceb9 100644 --- a/src/database/userInfo.ts +++ b/src/database/userInfo.ts @@ -1,3 +1,4 @@ +/* eslint-disable indent */ /* eslint-disable quotes */ import { PrismaClient, UserInfo } from '@prisma/client'; import type { User, UserResolvable } from 'discord.js'; @@ -8,7 +9,7 @@ const prisma = new PrismaClient(); export const getUserInfo = async (user: UserResolvable) => prisma.userInfo.findFirst({ where: { id: resolveUserId(user) } }); -export const upsertUserInfo = async (user: User, guildId: string): Promise => { +export const upsertUserInfo = async (user: User): Promise => { let userInfo = await prisma.userInfo.findUnique({ where: { id: resolveUserId(user), @@ -19,9 +20,7 @@ export const upsertUserInfo = async (user: User, guildId: string): Promise => { +export const getUserBalance = async (user: UserResolvable): Promise<{ balance: number; donuts?: number }> => { const userInfo = await prisma.userInfo.findUnique({ where: { id: resolveUserId(user), @@ -43,7 +41,7 @@ export const getUserBalance = async (user: UserResolvable): Promise<{ balance: n // Parse balance and donuts as numbers const balance = userInfo ? Number(userInfo.balance) : 0; - const donuts = userInfo ? Number(userInfo.donuts) : 0; + const donuts = userInfo ? Number(userInfo.donuts) : undefined; return { balance, donuts }; }; @@ -63,6 +61,7 @@ export const updateBalance = async ( // Ensure balance is a whole number const balance = Math.floor(newBalance); + const donuts = newDonuts !== undefined ? Math.floor(newDonuts) : undefined; // Update the user's balance in the database const updatedUserInfo = await prisma.userInfo.update({ @@ -72,9 +71,29 @@ export const updateBalance = async ( data: { balance: balance, // Update donuts only if newDonuts is provided - ...(newDonuts !== undefined && { donuts: Math.floor(newDonuts) }), + ...(donuts !== undefined && { donuts: donuts }), }, }); + return updatedUserInfo; }; +// Create guild-specific data function +export const createGuildData = async ( + userId: string, + guildId: string, + level: number, + exp: number, + notificationChannelId?: string +): Promise => { + await prisma.guildsXP.create({ + data: { + userId: userId, + guildId: guildId, + level: level, + exp: exp, + notificationChannelId: notificationChannelId, + } as any, // Explicitly specifying the type of 'data' + }); +}; + From 9c544815ff46e7c50f34ff322669d75f834288e2 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Thu, 11 Apr 2024 21:56:06 -0400 Subject: [PATCH 55/79] Add files via upload --- src/commands/economy/give.ts | 38 ++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/commands/economy/give.ts b/src/commands/economy/give.ts index 85463ea..5ac1cd1 100644 --- a/src/commands/economy/give.ts +++ b/src/commands/economy/give.ts @@ -1,34 +1,48 @@ -/* eslint-disable indent */ +import { User } from "discord.js"; import { db } from "../../database/database"; -import { getUserInfo } from "../../database/userInfo"; +import { getUserInfo, updateBalance } from "../../database/userInfo"; import { text } from "../../providers/config"; import { Command } from "../../structures/Command"; export const command = new Command("give", "Give someone some money.") + .addUserOption(o => o.setName("receiver").setDescription("Select the user you want to give money to.").setRequired(true)) .addOption("integer", o => o.setName("money").setDescription("The amount to give.").setRequired(true)) - .addOption("string", o => o.setName("receiver").setDescription("Please use their id").setRequired(true)) .setExecutor(async int => { const user = int.user; + const receiver = int.options.getUser("receiver") as User; // Extract user directly from the option const tip = int.options.get("money", true).value as number; - const receiver = int.options.get("receiver", true).value as string; - const info = await getUserInfo(int.user); - if (!info || info.balance < tip) { + + const userInfo = await getUserInfo(int.user); + if (!userInfo || userInfo.balance < tip) { await int.reply(text.common.notEnoughBalance); return; } + if (tip > 5000) { await int.reply("Funny this safety thing stopping your transaction of 5000+"); return; } + await db.userInfo.update({ where: { id: int.user.id }, data: { balance: { decrement: tip } } }); - await db.userInfo.update({ - where: { id: receiver }, - data: { balance: { increment: tip } } - }); - await int.reply(`You successfully transferred ${tip} to <@${receiver}>`); - return; // Ensure the function returns Promise + const receiverUserInfo = await getUserInfo(receiver.id); + if (receiverUserInfo) { + await db.userInfo.update({ + where: { id: receiver.id }, + data: { + balance: { increment: tip }, + ...(receiverUserInfo.donuts !== undefined && { donuts: receiverUserInfo.donuts }) + } + }); + } else { + await db.userInfo.update({ + where: { id: receiver.id }, + data: { balance: { increment: tip } } + }); + } + + await int.reply(`You successfully transferred ${tip} to <@${receiver.id}>`); }); From 1463f9c5d2018581aeb4e6aaa2d5785daec692b8 Mon Sep 17 00:00:00 2001 From: floof Date: Tue, 16 Apr 2024 22:00:33 -0500 Subject: [PATCH 56/79] fixing more errors albeit poorly --- package-lock.json | 86 ++++++++++++------------ src/commands/Devs/Select.ts | 18 ++--- src/commands/Devs/avatar.ts | 13 ++-- src/commands/Devs/transfer.ts | 10 +-- src/commands/Devs/ws.ts | 18 +++-- src/commands/crime.ts | 13 ++-- src/commands/daily.ts | 13 ++-- src/commands/orders/worker/brew.ts | 2 + src/commands/orders/worker/ebrew.ts | 60 +++++++++++------ src/commands/orders/worker/eclaim.ts | 16 ++--- src/commands/orders/worker/editstatus.ts | 21 +++--- src/commands/orders/worker/list.ts | 2 +- src/commands/orders/worker/wash.ts | 12 ++-- src/commands/work.ts | 13 ++-- src/providers/commandManager.ts | 30 ++++----- src/structures/extendedCommand.ts | 5 +- tsconfig.json | 4 +- 17 files changed, 180 insertions(+), 156 deletions(-) diff --git a/package-lock.json b/package-lock.json index c435c4e..3a5eecb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -291,9 +291,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "node_modules/@jridgewell/resolve-uri": { @@ -373,9 +373,9 @@ } }, "node_modules/@prisma/client": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.11.0.tgz", - "integrity": "sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.12.1.tgz", + "integrity": "sha512-6/JnizEdlSBxDIdiLbrBdMW5NqDxOmhXAJaNXiPpgzAPr/nLZResT6MMpbOHLo5yAbQ1Vv5UU8PTPRzb0WIxdA==", "hasInstallScript": true, "engines": { "node": ">=16.13" @@ -390,48 +390,48 @@ } }, "node_modules/@prisma/debug": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.11.0.tgz", - "integrity": "sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.12.1.tgz", + "integrity": "sha512-kd/wNsR0klrv79o1ITsbWxYyh4QWuBidvxsXSParPsYSu0ircUmNk3q4ojsgNc3/81b0ozg76iastOG43tbf8A==", "devOptional": true }, "node_modules/@prisma/engines": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.11.0.tgz", - "integrity": "sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.12.1.tgz", + "integrity": "sha512-HQDdglLw2bZR/TXD2Y+YfDMvi5Q8H+acbswqOsWyq9pPjBLYJ6gzM+ptlTU/AV6tl0XSZLU1/7F4qaWa8bqpJA==", "devOptional": true, "hasInstallScript": true, "dependencies": { - "@prisma/debug": "5.11.0", - "@prisma/engines-version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102", - "@prisma/fetch-engine": "5.11.0", - "@prisma/get-platform": "5.11.0" + "@prisma/debug": "5.12.1", + "@prisma/engines-version": "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab", + "@prisma/fetch-engine": "5.12.1", + "@prisma/get-platform": "5.12.1" } }, "node_modules/@prisma/engines-version": { - "version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102.tgz", - "integrity": "sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA==", + "version": "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab.tgz", + "integrity": "sha512-6yvO8s80Tym61aB4QNtYZfWVmE3pwqe807jEtzm8C5VDe7nw8O1FGX3TXUaXmWV0fQTIAfRbeL2Gwrndabp/0g==", "devOptional": true }, "node_modules/@prisma/fetch-engine": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.11.0.tgz", - "integrity": "sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.12.1.tgz", + "integrity": "sha512-qSs3KcX1HKcea1A+hlJVK/ljj0PNIUHDxAayGMvgJBqmaN32P9tCidlKz1EGv6WoRFICYnk3Dd/YFLBwnFIozA==", "devOptional": true, "dependencies": { - "@prisma/debug": "5.11.0", - "@prisma/engines-version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102", - "@prisma/get-platform": "5.11.0" + "@prisma/debug": "5.12.1", + "@prisma/engines-version": "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab", + "@prisma/get-platform": "5.12.1" } }, "node_modules/@prisma/get-platform": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.11.0.tgz", - "integrity": "sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.12.1.tgz", + "integrity": "sha512-pgIR+pSvhYHiUcqXVEZS31NrFOTENC9yFUdEAcx7cdQBoZPmHVjtjN4Ss6NzVDMYPrKJJ51U14EhEoeuBlMioQ==", "devOptional": true, "dependencies": { - "@prisma/debug": "5.11.0" + "@prisma/debug": "5.12.1" } }, "node_modules/@sapphire/async-queue": { @@ -444,15 +444,15 @@ } }, "node_modules/@sapphire/shapeshift": { - "version": "3.9.6", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.6.tgz", - "integrity": "sha512-4+Na/fxu2SEepZRb9z0dbsVh59QtwPuBg/UVaDib3av7ZY14b14+z09z6QVn0P6Dv6eOU2NDTsjIi0mbtgP56g==", + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.7.tgz", + "integrity": "sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==", "dependencies": { "fast-deep-equal": "^3.1.3", "lodash": "^4.17.21" }, "engines": { - "node": ">=v18" + "node": ">=v16" } }, "node_modules/@sapphire/snowflake": { @@ -1198,9 +1198,9 @@ } }, "node_modules/discord-api-types": { - "version": "0.37.77", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.77.tgz", - "integrity": "sha512-AkEn9nZA5w/XJ8wzKzlpx3X+MToQCowKahftF1+KYnMWnuglCrVRojy1XlIWX8Frgp1v8INceGKpvDkbvMLJ4g==", + "version": "0.37.79", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.79.tgz", + "integrity": "sha512-jblKMZL5f9t/pfUyhHNey8Lb9yVCcBVIPxz/JTY0raAmfj7CuFXdl9m5o/+iiB7E0vv1Kz9V7Ao5HtLRc2gH1Q==", "dev": true }, "node_modules/discord.js": { @@ -2467,13 +2467,13 @@ } }, "node_modules/prisma": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.11.0.tgz", - "integrity": "sha512-KCLiug2cs0Je7kGkQBN9jDWoZ90ogE/kvZTUTgz2h94FEo8pczCkPH7fPNXkD1sGU7Yh65risGGD1HQ5DF3r3g==", + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.12.1.tgz", + "integrity": "sha512-SkMnb6wyIxTv9ACqiHBI2u9gD6y98qXRoCoLEnZsF6yee5Qg828G+ARrESN+lQHdw4maSZFFSBPPDpvSiVTo0Q==", "devOptional": true, "hasInstallScript": true, "dependencies": { - "@prisma/engines": "5.11.0" + "@prisma/engines": "5.12.1" }, "bin": { "prisma": "build/index.js" @@ -3024,9 +3024,9 @@ } }, "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, "bin": { "tsc": "bin/tsc", diff --git a/src/commands/Devs/Select.ts b/src/commands/Devs/Select.ts index a3f400d..9e3f56f 100644 --- a/src/commands/Devs/Select.ts +++ b/src/commands/Devs/Select.ts @@ -1,12 +1,6 @@ -import { development } from "../../providers/env"; -import { execSync } from "child_process"; -import { format } from "../../utils/string"; -import { transpile } from "typescript"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { client } from "../../providers/client"; -import { channel } from "diagnostics_channel"; -import { StringSelectMenuBuilder, EmbedBuilder } from "discord.js"; +import {permissions} from "../../providers/permissions"; +import {Command} from "../../structures/Command"; +import {EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; export const command = new Command("select", "Select Menu Example") .addPermission(permissions.developer) // add permission here @@ -19,19 +13,19 @@ export const command = new Command("select", "Select Menu Example") label: "Option 1", value: "option_1", description: "The first option", - type: 3 // changed from "SELECT_MENU" to 3 + // type: 3 // changed from "SELECT_MENU" to 3 }, { label: "Option 2", value: "option_2", description: "The second option", - type: 3 // changed from "SELECT_MENU" to 3 + // type: 3 // changed from "SELECT_MENU" to 3 }, { label: "Option 3", value: "option_3", description: "The third option", - type: 3 // changed from "SELECT_MENU" to 3 + // type: 3 // changed from "SELECT_MENU" to 3 }, ]); diff --git a/src/commands/Devs/avatar.ts b/src/commands/Devs/avatar.ts index 7e161a6..712ad3d 100644 --- a/src/commands/Devs/avatar.ts +++ b/src/commands/Devs/avatar.ts @@ -1,10 +1,9 @@ -import { ExtendedCommand } from "./../../structures/extendedCommand"; +import {ExtendedCommand} from "../../structures/extendedCommand"; /* eslint-disable quotes */ /* eslint-disable indent */ -import { client } from "../../providers/client"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { CommandInteraction, EmbedBuilder } from "discord.js"; +import {client} from "../../providers/client"; +import {permissions} from "../../providers/permissions"; +import {ChatInputCommandInteraction, EmbedBuilder} from "discord.js"; export const command = new ExtendedCommand({ name: "avatar", description: "Some info." }) .addPermission(permissions.developer) // AnyRank @@ -19,7 +18,7 @@ export const command = new ExtendedCommand({ name: "avatar", description: "Some .setRequired(true) ) ) - .setExecutor(async (int: CommandInteraction) => { + .setExecutor(async (int: ChatInputCommandInteraction) => { // Check the subcommand const subcommand = int.options.getSubcommand(true); @@ -28,7 +27,7 @@ export const command = new ExtendedCommand({ name: "avatar", description: "Some await int.deferReply({ ephemeral: true }); // Fetch the attachment from the options - const attachment = int.options.get("attachment", true)?.attachment; + const attachment = int.options.getAttachment("attachment", true); if (!attachment) { await int.editReply({ content: "Attachment is missing or not valid." }); diff --git a/src/commands/Devs/transfer.ts b/src/commands/Devs/transfer.ts index 3308e67..2d25ff3 100644 --- a/src/commands/Devs/transfer.ts +++ b/src/commands/Devs/transfer.ts @@ -1,8 +1,8 @@ /* eslint-disable indent */ -import { PrismaClient } from "@prisma/client"; -import { CommandInteraction } from "discord.js"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; +import {PrismaClient} from "@prisma/client"; +import {CommandInteraction} from "discord.js"; +import {permissions} from "../../providers/permissions"; +import {Command} from "../../structures/Command"; const prisma = new PrismaClient(); @@ -22,7 +22,7 @@ export const command = new Command("transfer", "Transfers data from the old sche //console.log(`Transferring data for user with ID: ${userId}`); - const guildsXPDataObject = parseGuildsXPData(guildsXPData); + const guildsXPDataObject = parseGuildsXPData(guildsXPData + ""); //console.log(`GuildsXPDataObject: ${JSON.stringify(guildsXPDataObject)}`); diff --git a/src/commands/Devs/ws.ts b/src/commands/Devs/ws.ts index 7242edb..8b46a6c 100644 --- a/src/commands/Devs/ws.ts +++ b/src/commands/Devs/ws.ts @@ -1,11 +1,10 @@ /* eslint-disable quotes */ /* eslint-disable indent */ -import { CommandInteraction, EmbedBuilder, UserResolvable } from "discord.js"; -import { db } from "../../database/database"; -import { getWorkerStats } from "../../database/workerstats"; -import { resolveUserId } from "../../utils/id"; -import { Command } from "../../structures/Command"; -import { permissions } from "../../providers/permissions"; +import {CommandInteraction, EmbedBuilder} from "discord.js"; +import {getWorkerStats} from "../../database/workerstats"; +import {resolveUserId} from "../../utils/id"; +import {Command} from "../../structures/Command"; +import {permissions} from "../../providers/permissions"; export const command = new Command( "ws", @@ -13,7 +12,7 @@ export const command = new Command( ) .addPermission(permissions.admin) - .addUserOption((option) => + .addOption("user", (option) => option .setName("user") .setDescription("The user to view statistics for.") @@ -31,6 +30,11 @@ export const command = new Command( const workerStats = await getWorkerStats(userId); + if (!workerStats) { + await int.reply("No worker statistics found."); + return; + } + const embed = new EmbedBuilder() .setTitle(`${targetUser ? targetUser.tag : int.user.tag}'s Worker Statistics`) .addFields([ diff --git a/src/commands/crime.ts b/src/commands/crime.ts index 374715b..3ebebf0 100644 --- a/src/commands/crime.ts +++ b/src/commands/crime.ts @@ -1,11 +1,12 @@ //crime.ts -import { db } from "../../database/database"; -import { upsertUserInfo } from "../../database/userInfo"; -import { constants, text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {db} from "../database/database"; +import {upsertUserInfo} from "../database/userInfo"; +import {constants, text} from "../providers/config"; +import {Command} from "../structures/Command"; +import {format} from "../utils/string"; import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; +import {randRange, sampleArray} from "../utils/utils"; + const cooldowns: Record = {}; export const command = new Command("crime", "Try your chances on doing crime!") diff --git a/src/commands/daily.ts b/src/commands/daily.ts index 532f62d..c837d4c 100644 --- a/src/commands/daily.ts +++ b/src/commands/daily.ts @@ -1,11 +1,12 @@ //daily.ts -import { db } from "../../database/database"; -import { upsertUserInfo } from "../../database/userInfo"; -import { constants, text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {db} from "../database/database"; +import {upsertUserInfo} from "../database/userInfo"; +import {constants, text} from "../providers/config"; +import {Command} from "../structures/Command"; +import {format} from "../utils/string"; import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; +import {randRange, sampleArray} from "../utils/utils"; + const cooldowns: Record = {}; export const command = new Command("daily", "Get your daily income!.") diff --git a/src/commands/orders/worker/brew.ts b/src/commands/orders/worker/brew.ts index 3deb617..323da96 100644 --- a/src/commands/orders/worker/brew.ts +++ b/src/commands/orders/worker/brew.ts @@ -231,6 +231,7 @@ export const command = new Command( } }); +/* // Set last command to "brew" when brewing await upsertWorkerStats(int.user, { lastCommand: "brew" }); @@ -419,5 +420,6 @@ export const command = new Command( }); } }); +*/ // ... (existing code) diff --git a/src/commands/orders/worker/ebrew.ts b/src/commands/orders/worker/ebrew.ts index 36f07c8..36bfd13 100644 --- a/src/commands/orders/worker/ebrew.ts +++ b/src/commands/orders/worker/ebrew.ts @@ -1,15 +1,22 @@ /* eslint-disable indent */ /* eslint-disable quotes */ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../../database/database"; -import { upsertWorkerInfo } from "../../../database/workerInfo"; -import { client } from "../../../providers/client"; -import { config, constants, text } from "../../../providers/config"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; -import { randRange } from "../../../utils/utils"; -import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; +import {OrderStatus} from "@prisma/client"; +import {db} from "../../../database/database"; +import {upsertWorkerInfo} from "../../../database/workerInfo"; +import {constants} from "../../../providers/config"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import {randRange} from "../../../utils/utils"; +import { + ButtonInteraction, + ChatInputCommandInteraction, + Client, + CollectedMessageInteraction, + ComponentType, + EmbedBuilder, + StringSelectMenuBuilder +} from "discord.js"; +import {IllegalStateError} from "../../../utils/error"; // Define the getClaimedOrders function without specifying OrderStatus async function getClaimedOrders(userId: string) { @@ -53,10 +60,15 @@ export const command = new Command( .setDescription("Claim an order.") ) .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { + .setExecutor(async (int: ChatInputCommandInteraction) => { // Check the subcommand const subcommand = int.options.getSubcommand(true); + // temporary workaround, since client does not have ordersInProcess + let client: Client & { + ordersInProcess?: { [userId: string]: { orderId: string } }; + } = int.client; + if (subcommand === "claim") { // Get a list of claimed orders for the user using getClaimedOrders const claimedOrders = await getClaimedOrders(int.user.id); @@ -78,8 +90,7 @@ export const command = new Command( const orderSelectMenu = new StringSelectMenuBuilder() .setCustomId("select_order_to_claim") .setPlaceholder("Select an order to brew") - .addOptions(orderOptions) - .toJSON(); + .addOptions(orderOptions); const actionRow = { type: ComponentType.ActionRow, @@ -92,11 +103,15 @@ export const command = new Command( ephemeral: true, }); + if (!int.channel) throw new IllegalStateError("Channel is not available."); // Create a collector to listen for the user's selection - const filter = (i) => i.customId === "select_order_to_claim" && i.user.id === int.user.id; + const filter: (i: CollectedMessageInteraction) => boolean = (i) => i.customId === "select_order_to_claim" && i.user.id === int.user.id; const collector = int.channel.createMessageComponentCollector({ filter, time: 15000 }); + int.channel.createMessageComponentCollector( - collector.on("collect", async (interaction) => { + ) + collector.on("collect", async (interaction: CollectedMessageInteraction) => { + if (interaction instanceof ButtonInteraction) throw new IllegalStateError("help how did we get here?!?"); const selectedOrderId = interaction.values[0]; // Fetch the order details using the order ID @@ -121,7 +136,7 @@ export const command = new Command( } // Store the selected order ID in a context variable for future use - int.client.ordersInProcess = { + client.ordersInProcess = { [int.user.id]: { orderId: selectedOrderId, }, @@ -139,9 +154,9 @@ export const command = new Command( } }); - } else if ((subcommand === "attach" || subcommand === "url") && int.client.ordersInProcess?.[int.user.id]?.orderId) { + } else if ((subcommand === "attach" || subcommand === "url") && client.ordersInProcess?.[int.user.id]?.orderId) { // Fetch the order ID from the context variable - const selectedOrderId = int.client.ordersInProcess[int.user.id].orderId; + const selectedOrderId = client.ordersInProcess[int.user.id].orderId; // Fetch the order details using the order ID const order = await db.orders.findUnique({ @@ -180,7 +195,7 @@ export const command = new Command( const imagePreviewEmbed = new EmbedBuilder() .setTitle("Image Preview") - .setImage(imageUrl) // Set the image URL as the preview + .setImage(imageUrl!) // Set the image URL as the preview, TODO: Fix the non-null assertion .toJSON(); const confirmSelectMenu = new StringSelectMenuBuilder() @@ -197,8 +212,7 @@ export const command = new Command( description: "Cancel the brewing process", value: "no", }, - ]) - .toJSON(); + ]); const confirmActionRow = { type: ComponentType.ActionRow, @@ -212,7 +226,9 @@ export const command = new Command( ephemeral: true, }); - const confirmFilter = (i) => i.customId === "confirm_brew" && i.user.id === int.user.id; + if (!int.channel) throw new IllegalStateError("Channel is not available."); + + const confirmFilter: (i: CollectedMessageInteraction) => boolean = (i) => i.customId === "confirm_brew" && i.user.id === int.user.id; const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); confirmCollector.on("collect", async (confirmInteraction) => { diff --git a/src/commands/orders/worker/eclaim.ts b/src/commands/orders/worker/eclaim.ts index aa70a29..c751d0f 100644 --- a/src/commands/orders/worker/eclaim.ts +++ b/src/commands/orders/worker/eclaim.ts @@ -1,13 +1,13 @@ +// @ts-nocheck /* eslint-disable quotes */ /* eslint-disable indent */ -import { upsertWorkerInfo } from "../../../database/workerInfo"; -import { Command } from "../../../structures/Command"; -import { permissions } from "../../../providers/permissions"; -import { OrderStatus, getClaimedOrder } from "../../../database/orders"; -import { db } from "../../../database/database"; -import { text } from "../../../providers/config"; -import { client } from "../../../providers/client"; -import { CommandInteraction, StringSelectMenuBuilder, ComponentType, EmbedBuilder } from "discord.js"; +import {Command} from "../../../structures/Command"; +import {permissions} from "../../../providers/permissions"; +import {getClaimedOrder, OrderStatus} from "../../../database/orders"; +import {db} from "../../../database/database"; +import {text} from "../../../providers/config"; +import {client} from "../../../providers/client"; +import {CommandInteraction, ComponentType, EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; const claimedOrderLocks = new Map(); // Map to store claim locks for each order ID const claimedOrders = new Set(); // Set to store claimed order IDs diff --git a/src/commands/orders/worker/editstatus.ts b/src/commands/orders/worker/editstatus.ts index ec92d73..1755c1e 100644 --- a/src/commands/orders/worker/editstatus.ts +++ b/src/commands/orders/worker/editstatus.ts @@ -1,10 +1,9 @@ /* eslint-disable indent */ -import { OrderStatus, matchActiveOrder } from "../../../database/orders"; -import { text } from "../../../providers/config"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { CommandInteraction } from "discord.js"; -import { db } from "../../../database/database"; +import {matchActiveOrder, OrderStatus} from "../../../database/orders"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import {ChatInputCommandInteraction} from "discord.js"; +import {db} from "../../../database/database"; export const command = new Command( "editstatus", @@ -31,10 +30,16 @@ export const command = new Command( // Add other choices here if needed ) ) - .setExecutor(async (int: CommandInteraction) => { + .setExecutor(async (int: ChatInputCommandInteraction) => { const orderId = int.options.getString("order_id", true); const newStatus = int.options.getString("status", true); + // assert that newStatus is of type OrderStatus + if (!Object.values(OrderStatus).includes(newStatus as OrderStatus)) { + await int.reply({content: "Invalid status provided."}); + return; + } + const order = await matchActiveOrder(orderId); if (!order) { await int.reply({ content: "Order not found for the specified ID." }); @@ -46,7 +51,7 @@ export const command = new Command( id: order.id, }, data: { - status: newStatus, + status: newStatus as OrderStatus, }, }); diff --git a/src/commands/orders/worker/list.ts b/src/commands/orders/worker/list.ts index 509eec5..519e4aa 100644 --- a/src/commands/orders/worker/list.ts +++ b/src/commands/orders/worker/list.ts @@ -3,10 +3,10 @@ import {getAllActiveOrders} from "../../../database/orders"; import {client} from "../../../providers/client"; import {text} from "../../../providers/config"; import {permissions} from "../../../providers/permissions"; -import {Command} from "../../../structures/Command"; import {format} from "../../../utils/string"; import pms from "pretty-ms"; import {OrderStatus} from "@prisma/client"; +import {ExtendedCommand} from "../../../structures/extendedCommand"; // Define the command options interface CommandOptions { diff --git a/src/commands/orders/worker/wash.ts b/src/commands/orders/worker/wash.ts index 983d4a0..b084924 100644 --- a/src/commands/orders/worker/wash.ts +++ b/src/commands/orders/worker/wash.ts @@ -1,8 +1,8 @@ -import { CommandInteraction } from 'discord.js'; -import { PrismaClient } from '@prisma/client'; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { getUserBalance, updateBalance } from "../../../database/userInfo"; +import {ChatInputCommandInteraction} from "discord.js"; +import {PrismaClient} from "@prisma/client"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import {getUserBalance, updateBalance} from "../../../database/userInfo"; const prisma = new PrismaClient(); @@ -19,7 +19,7 @@ export const command = new Command('wash', 'Wash a dish.') .addOption("boolean", (o) => o.setName("inactive").setDescription("Include inactive orders too.") ) - .setExecutor(async (interaction: CommandInteraction) => { + .setExecutor(async (interaction: ChatInputCommandInteraction) => { const all = await prisma.dishes.findMany({ take: 10 }); if (!all.length) { await interaction.reply("There are currently no dishes to wash."); diff --git a/src/commands/work.ts b/src/commands/work.ts index 7361990..ed30ffd 100644 --- a/src/commands/work.ts +++ b/src/commands/work.ts @@ -1,13 +1,14 @@ /* eslint-disable quotes */ /* eslint-disable linebreak-style */ //work.ts -import { db } from "../../database/database"; -import { upsertUserInfo } from "../../database/userInfo"; -import { constants, text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {db} from "../database/database"; +import {upsertUserInfo} from "../database/userInfo"; +import {constants, text} from "../providers/config"; +import {Command} from "../structures/Command"; +import {format} from "../utils/string"; import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; +import {randRange, sampleArray} from "../utils/utils"; + const cooldowns: Record = {}; export const command = new Command("work", "Gets you some money.") diff --git a/src/providers/commandManager.ts b/src/providers/commandManager.ts index b17e7b2..7ae1a88 100644 --- a/src/providers/commandManager.ts +++ b/src/providers/commandManager.ts @@ -1,22 +1,22 @@ /* eslint-disable quotes */ -import { basename, join, posix, win32 } from "path"; -import { sync } from "fast-glob"; -import { Command } from "../structures/Command"; -import { Routes } from "discord-api-types/v10"; -import { client, rest } from "./client"; -import { development } from "./env"; -import { config } from "./config"; +import {basename, join, posix, win32} from "path"; +import {sync} from "fast-glob"; +import {Command} from "../structures/Command"; +import {Routes} from "discord-api-types/v10"; +import {client, rest} from "./client"; +import {development} from "./env"; +import {config} from "./config"; import type { ApplicationCommand, ApplicationCommandManager, GuildApplicationCommandManager, GuildResolvable, } from "discord.js"; -import { Collection } from "discord.js"; -import { notInitialized } from "../utils/utils"; +import {Collection} from "discord.js"; +import {notInitialized} from "../utils/utils"; import "./permissions"; -import { ExtendedCommand } from "../structures/extendedCommand"; // Import the ExtendedCommand class -import { mainGuild } from "./discord"; +import {ExtendedCommand} from "../structures/extendedCommand"; // Import the ExtendedCommand class +import {mainGuild} from "./discord"; const commandFolder = join(__dirname, "../commands/**/*.js").replaceAll(win32.sep, posix.sep); /** Command registry for commands passed into registerCommands */ @@ -80,15 +80,15 @@ export const loadCommands = async (): Promise => { commands.push(data.command); } - const extendedCommands = await loadExtendedCommands(); - commands.push(...extendedCommands); + // const extendedCommands = await loadExtendedCommands(); + // commands.push(...extendedCommands); await registerCommands(commands); return commands; }; // Define a new function to load ExtendedCommands -const loadExtendedCommands = async (): Promise => { +/*const loadExtendedCommands = async (): Promise => { const commands: ExtendedCommand[] = []; const commandFiles = sync(extendedCommandFolder); for (const file of commandFiles) { @@ -98,4 +98,4 @@ const loadExtendedCommands = async (): Promise => { commands.push(data.command); } return commands; -}; +};*/ diff --git a/src/structures/extendedCommand.ts b/src/structures/extendedCommand.ts index 7ac2a6e..58926c2 100644 --- a/src/structures/extendedCommand.ts +++ b/src/structures/extendedCommand.ts @@ -1,6 +1,5 @@ /* eslint-disable indent */ -import { Command } from "./Command"; -import { config } from "../providers/config"; +import {Command} from "./Command"; // Define the interface for command options interface CommandOptions { @@ -19,7 +18,7 @@ export class ExtendedCommand extends Command { // Constructor constructor({ name, description, local = false, ...options }: CommandOptions) { - super(name, description, options); + super(name, description); this.global = !local; // Set global property based on the value of local this.local = local; } diff --git a/tsconfig.json b/tsconfig.json index cbeaae9..6a5453a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,7 +4,9 @@ ], "exclude": [ "./node_modules/", - "genenv.js" + "genenv.js", + "./src/commands/orders/worker/ebrew.ts", + "./src/commands/orders/worker/eclaim.ts" ], "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ From 157eadbe8e480800d55e748396f29977c4a822e7 Mon Sep 17 00:00:00 2001 From: floof Date: Tue, 16 Apr 2024 22:15:28 -0500 Subject: [PATCH 57/79] bad fixes --- .../orders/worker => purgatory}/ebrew.ts | 554 +++++++++--------- .../orders/worker => purgatory}/eclaim.ts | 326 +++++------ src/commands/Devs/currencyedit.ts | 68 +++ src/commands/fun/slap.ts | 2 +- src/providers/commandManager.ts | 6 + tsconfig.json | 4 +- 6 files changed, 517 insertions(+), 443 deletions(-) rename {src/commands/orders/worker => purgatory}/ebrew.ts (94%) rename {src/commands/orders/worker => purgatory}/eclaim.ts (92%) create mode 100644 src/commands/Devs/currencyedit.ts diff --git a/src/commands/orders/worker/ebrew.ts b/purgatory/ebrew.ts similarity index 94% rename from src/commands/orders/worker/ebrew.ts rename to purgatory/ebrew.ts index 36bfd13..9e8c055 100644 --- a/src/commands/orders/worker/ebrew.ts +++ b/purgatory/ebrew.ts @@ -1,277 +1,277 @@ -/* eslint-disable indent */ -/* eslint-disable quotes */ -import {OrderStatus} from "@prisma/client"; -import {db} from "../../../database/database"; -import {upsertWorkerInfo} from "../../../database/workerInfo"; -import {constants} from "../../../providers/config"; -import {permissions} from "../../../providers/permissions"; -import {Command} from "../../../structures/Command"; -import {randRange} from "../../../utils/utils"; -import { - ButtonInteraction, - ChatInputCommandInteraction, - Client, - CollectedMessageInteraction, - ComponentType, - EmbedBuilder, - StringSelectMenuBuilder -} from "discord.js"; -import {IllegalStateError} from "../../../utils/error"; - -// Define the getClaimedOrders function without specifying OrderStatus -async function getClaimedOrders(userId: string) { - return await db.orders.findMany({ - where: { - claimer: userId, - status: OrderStatus.Preparing, - }, - }); -} - -export const command = new Command( - "ebrew", - "Brews your claimed order." -) - .addSubCommand((subcommand) => - subcommand - .setName("attach") - .setDescription("Attach an image to your order.") - .addAttachmentOption((option) => - option - .setName("attachment") - .setDescription("The image to attach to the order.") - .setRequired(true) - ) - ) - .addSubCommand((subcommand) => - subcommand - .setName("url") - .setDescription("Attach an image to your order by URL.") - .addStringOption((option) => - option - .setName("url") - .setDescription("The URL of the image to attach to the order.") - .setRequired(true) - ) - ) - .addSubCommand((subcommand) => - subcommand - .setName("claim") - .setDescription("Claim an order.") - ) - .addPermission(permissions.employee) - .setExecutor(async (int: ChatInputCommandInteraction) => { - // Check the subcommand - const subcommand = int.options.getSubcommand(true); - - // temporary workaround, since client does not have ordersInProcess - let client: Client & { - ordersInProcess?: { [userId: string]: { orderId: string } }; - } = int.client; - - if (subcommand === "claim") { - // Get a list of claimed orders for the user using getClaimedOrders - const claimedOrders = await getClaimedOrders(int.user.id); - - // Check if the user has claimed orders - if (claimedOrders.length === 0) { - await int.reply({ content: "You don't have any claimed orders to brew." }); - return; - } - - // Build a select menu with claimed order options - const orderOptions = claimedOrders.map(order => ({ - label: `Order ${order.id}`, - value: order.id.toString(), - description: `User: ${order.user.substring(0, 15)}...\nDetails: ${order.details.substring(0, 50)}...`, - // Include user and details in the description, limiting the length - })); - - const orderSelectMenu = new StringSelectMenuBuilder() - .setCustomId("select_order_to_claim") - .setPlaceholder("Select an order to brew") - .addOptions(orderOptions); - - const actionRow = { - type: ComponentType.ActionRow, - components: [orderSelectMenu], - }; - - await int.reply({ - content: "Please select an order to brew:", - components: [actionRow], - ephemeral: true, - }); - - if (!int.channel) throw new IllegalStateError("Channel is not available."); - // Create a collector to listen for the user's selection - const filter: (i: CollectedMessageInteraction) => boolean = (i) => i.customId === "select_order_to_claim" && i.user.id === int.user.id; - const collector = int.channel.createMessageComponentCollector({ filter, time: 15000 }); - int.channel.createMessageComponentCollector( - - ) - collector.on("collect", async (interaction: CollectedMessageInteraction) => { - if (interaction instanceof ButtonInteraction) throw new IllegalStateError("help how did we get here?!?"); - const selectedOrderId = interaction.values[0]; - - // Fetch the order details using the order ID - const selectedOrder = await db.orders.findUnique({ - where: { - id: selectedOrderId, - }, - }); - - if (!selectedOrder) { - await interaction.update({ content: "Invalid order selected.", components: [] }); - return; - } - - // Check if the order status is not OrderStatus.Preparing - if (selectedOrder.status !== OrderStatus.Preparing) { - await interaction.update({ - content: `You cannot claim an order with status ${selectedOrder.status}.`, - components: [], - }); - return; - } - - // Store the selected order ID in a context variable for future use - client.ordersInProcess = { - [int.user.id]: { - orderId: selectedOrderId, - }, - }; - - await interaction.update({ - content: `You selected Order ${selectedOrderId} to brew. Now, you can proceed to attach an image or provide a URL.`, - components: [], - }); - }); - - collector.on("end", async (collected) => { - if (collected.size === 0) { - await int.followUp("You didn't select an order in time."); - } - }); - - } else if ((subcommand === "attach" || subcommand === "url") && client.ordersInProcess?.[int.user.id]?.orderId) { - // Fetch the order ID from the context variable - const selectedOrderId = client.ordersInProcess[int.user.id].orderId; - - // Fetch the order details using the order ID - const order = await db.orders.findUnique({ - where: { - id: selectedOrderId, - }, - }); - - if (!order) { - await int.reply({ content: "Invalid order selected." }); - return; - } - - // Check if the order status is OrderStatus.PendingDelivery or OrderStatus.Brewing - if (order.status === OrderStatus.PendingDelivery || order.status === OrderStatus.Brewing) { - await int.reply({ content: "You have Already Brewed this order. select an new one!" }); - return; - } - - let imageUrl: string | undefined; - - if (subcommand === "attach") { - const attachment = int.options.get("attachment", true)?.attachment; - if (!attachment) { - await int.reply({ content: "Attachment is missing or not valid." }); - return; - } - imageUrl = attachment.url; - } else if (subcommand === "url") { - const url = int.options.getString("url", true); - imageUrl = url; - } - - // Include order description in the confirmation message - const confirmationDescription = `Order Details: ${order.details}`; - - const imagePreviewEmbed = new EmbedBuilder() - .setTitle("Image Preview") - .setImage(imageUrl!) // Set the image URL as the preview, TODO: Fix the non-null assertion - .toJSON(); - - const confirmSelectMenu = new StringSelectMenuBuilder() - .setCustomId("confirm_brew") - .setPlaceholder("Select an option") - .addOptions([ - { - label: "Yes", - description: "Proceed with brewing the order", - value: "yes", - }, - { - label: "No", - description: "Cancel the brewing process", - value: "no", - }, - ]); - - const confirmActionRow = { - type: ComponentType.ActionRow, - components: [confirmSelectMenu], - }; - - await int.reply({ - content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, - embeds: [imagePreviewEmbed], // Include the image preview in the message - components: [confirmActionRow], - ephemeral: true, - }); - - if (!int.channel) throw new IllegalStateError("Channel is not available."); - - const confirmFilter: (i: CollectedMessageInteraction) => boolean = (i) => i.customId === "confirm_brew" && i.user.id === int.user.id; - const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); - - confirmCollector.on("collect", async (confirmInteraction) => { - if (confirmInteraction.isStringSelectMenu()) { - const selectedValue = confirmInteraction.values[0]; - if (selectedValue === "yes") { - await confirmInteraction.update({ - content: "You chose to proceed with brewing the order.", - components: [], - }); - - const time = randRange(...constants.brewTimeRangeMs); - await db.orders.update({ - where: { - id: order.id, - }, - data: { - status: OrderStatus.Brewing, - image: imageUrl ?? "default.png", - timeout: new Date(Date.now() + time), - }, - }); - await upsertWorkerInfo(int.user); - - await int.followUp({ - content: "Brewing process started.", - files: imageUrl ? [{ attachment: imageUrl }] : undefined, - }); - } else if (selectedValue === "no") { - await confirmInteraction.update({ - content: "You chose to cancel the brewing process.", - components: [], - }); - } - } - }); - - confirmCollector.on("end", async (collected) => { - if (collected.size === 0) { - await int.followUp("You didn't make a selection in time."); - } - }); - } else { - await int.reply({ content: "You need to claim an order first before attaching an image or providing a URL." }); - } - }); +/* eslint-disable indent */ +/* eslint-disable quotes */ +import {OrderStatus} from "@prisma/client"; +import {db} from "../src/database/database"; +import {upsertWorkerInfo} from "../src/database/workerInfo"; +import {constants} from "../src/providers/config"; +import {permissions} from "../src/providers/permissions"; +import {Command} from "../src/structures/Command"; +import {randRange} from "../src/utils/utils"; +import { + ButtonInteraction, + ChatInputCommandInteraction, + Client, + CollectedMessageInteraction, + ComponentType, + EmbedBuilder, + StringSelectMenuBuilder +} from "discord.js"; +import {IllegalStateError} from "../src/utils/error"; + +// Define the getClaimedOrders function without specifying OrderStatus +async function getClaimedOrders(userId: string) { + return await db.orders.findMany({ + where: { + claimer: userId, + status: OrderStatus.Preparing, + }, + }); +} + +export const command = new Command( + "ebrew", + "Brews your claimed order." +) + .addSubCommand((subcommand) => + subcommand + .setName("attach") + .setDescription("Attach an image to your order.") + .addAttachmentOption((option) => + option + .setName("attachment") + .setDescription("The image to attach to the order.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("url") + .setDescription("Attach an image to your order by URL.") + .addStringOption((option) => + option + .setName("url") + .setDescription("The URL of the image to attach to the order.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("claim") + .setDescription("Claim an order.") + ) + .addPermission(permissions.employee) + .setExecutor(async (int: ChatInputCommandInteraction) => { + // Check the subcommand + const subcommand = int.options.getSubcommand(true); + + // temporary workaround, since client does not have ordersInProcess + let client: Client & { + ordersInProcess?: { [userId: string]: { orderId: string } }; + } = int.client; + + if (subcommand === "claim") { + // Get a list of claimed orders for the user using getClaimedOrders + const claimedOrders = await getClaimedOrders(int.user.id); + + // Check if the user has claimed orders + if (claimedOrders.length === 0) { + await int.reply({ content: "You don't have any claimed orders to brew." }); + return; + } + + // Build a select menu with claimed order options + const orderOptions = claimedOrders.map(order => ({ + label: `Order ${order.id}`, + value: order.id.toString(), + description: `User: ${order.user.substring(0, 15)}...\nDetails: ${order.details.substring(0, 50)}...`, + // Include user and details in the description, limiting the length + })); + + const orderSelectMenu = new StringSelectMenuBuilder() + .setCustomId("select_order_to_claim") + .setPlaceholder("Select an order to brew") + .addOptions(orderOptions); + + const actionRow = { + type: ComponentType.ActionRow, + components: [orderSelectMenu], + }; + + await int.reply({ + content: "Please select an order to brew:", + components: [actionRow], + ephemeral: true, + }); + + if (!int.channel) throw new IllegalStateError("Channel is not available."); + // Create a collector to listen for the user's selection + const filter: (i: CollectedMessageInteraction) => boolean = (i) => i.customId === "select_order_to_claim" && i.user.id === int.user.id; + const collector = int.channel.createMessageComponentCollector({ filter, time: 15000 }); + int.channel.createMessageComponentCollector( + + ) + collector.on("collect", async (interaction: CollectedMessageInteraction) => { + if (interaction instanceof ButtonInteraction) throw new IllegalStateError("help how did we get here?!?"); + const selectedOrderId = interaction.values[0]; + + // Fetch the order details using the order ID + const selectedOrder = await db.orders.findUnique({ + where: { + id: selectedOrderId, + }, + }); + + if (!selectedOrder) { + await interaction.update({ content: "Invalid order selected.", components: [] }); + return; + } + + // Check if the order status is not OrderStatus.Preparing + if (selectedOrder.status !== OrderStatus.Preparing) { + await interaction.update({ + content: `You cannot claim an order with status ${selectedOrder.status}.`, + components: [], + }); + return; + } + + // Store the selected order ID in a context variable for future use + client.ordersInProcess = { + [int.user.id]: { + orderId: selectedOrderId, + }, + }; + + await interaction.update({ + content: `You selected Order ${selectedOrderId} to brew. Now, you can proceed to attach an image or provide a URL.`, + components: [], + }); + }); + + collector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't select an order in time."); + } + }); + + } else if ((subcommand === "attach" || subcommand === "url") && client.ordersInProcess?.[int.user.id]?.orderId) { + // Fetch the order ID from the context variable + const selectedOrderId = client.ordersInProcess[int.user.id].orderId; + + // Fetch the order details using the order ID + const order = await db.orders.findUnique({ + where: { + id: selectedOrderId, + }, + }); + + if (!order) { + await int.reply({ content: "Invalid order selected." }); + return; + } + + // Check if the order status is OrderStatus.PendingDelivery or OrderStatus.Brewing + if (order.status === OrderStatus.PendingDelivery || order.status === OrderStatus.Brewing) { + await int.reply({ content: "You have Already Brewed this order. select an new one!" }); + return; + } + + let imageUrl: string | undefined; + + if (subcommand === "attach") { + const attachment = int.options.get("attachment", true)?.attachment; + if (!attachment) { + await int.reply({ content: "Attachment is missing or not valid." }); + return; + } + imageUrl = attachment.url; + } else if (subcommand === "url") { + const url = int.options.getString("url", true); + imageUrl = url; + } + + // Include order description in the confirmation message + const confirmationDescription = `Order Details: ${order.details}`; + + const imagePreviewEmbed = new EmbedBuilder() + .setTitle("Image Preview") + .setImage(imageUrl!) // Set the image URL as the preview, TODO: Fix the non-null assertion + .toJSON(); + + const confirmSelectMenu = new StringSelectMenuBuilder() + .setCustomId("confirm_brew") + .setPlaceholder("Select an option") + .addOptions([ + { + label: "Yes", + description: "Proceed with brewing the order", + value: "yes", + }, + { + label: "No", + description: "Cancel the brewing process", + value: "no", + }, + ]); + + const confirmActionRow = { + type: ComponentType.ActionRow, + components: [confirmSelectMenu], + }; + + await int.reply({ + content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, + embeds: [imagePreviewEmbed], // Include the image preview in the message + components: [confirmActionRow], + ephemeral: true, + }); + + if (!int.channel) throw new IllegalStateError("Channel is not available."); + + const confirmFilter: (i: CollectedMessageInteraction) => boolean = (i) => i.customId === "confirm_brew" && i.user.id === int.user.id; + const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); + + confirmCollector.on("collect", async (confirmInteraction) => { + if (confirmInteraction.isStringSelectMenu()) { + const selectedValue = confirmInteraction.values[0]; + if (selectedValue === "yes") { + await confirmInteraction.update({ + content: "You chose to proceed with brewing the order.", + components: [], + }); + + const time = randRange(...constants.brewTimeRangeMs); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Brewing, + image: imageUrl ?? "default.png", + timeout: new Date(Date.now() + time), + }, + }); + await upsertWorkerInfo(int.user); + + await int.followUp({ + content: "Brewing process started.", + files: imageUrl ? [{ attachment: imageUrl }] : undefined, + }); + } else if (selectedValue === "no") { + await confirmInteraction.update({ + content: "You chose to cancel the brewing process.", + components: [], + }); + } + } + }); + + confirmCollector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't make a selection in time."); + } + }); + } else { + await int.reply({ content: "You need to claim an order first before attaching an image or providing a URL." }); + } + }); diff --git a/src/commands/orders/worker/eclaim.ts b/purgatory/eclaim.ts similarity index 92% rename from src/commands/orders/worker/eclaim.ts rename to purgatory/eclaim.ts index c751d0f..ddc46ba 100644 --- a/src/commands/orders/worker/eclaim.ts +++ b/purgatory/eclaim.ts @@ -1,163 +1,163 @@ -// @ts-nocheck -/* eslint-disable quotes */ -/* eslint-disable indent */ -import {Command} from "../../../structures/Command"; -import {permissions} from "../../../providers/permissions"; -import {getClaimedOrder, OrderStatus} from "../../../database/orders"; -import {db} from "../../../database/database"; -import {text} from "../../../providers/config"; -import {client} from "../../../providers/client"; -import {CommandInteraction, ComponentType, EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; - -const claimedOrderLocks = new Map(); // Map to store claim locks for each order ID -const claimedOrders = new Set(); // Set to store claimed order IDs - -export const command = new Command("eclaim", "Claims an order.") - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - const existingClaim = await getClaimedOrder(int.user); - if (existingClaim) { - console.log(`Existing claim found for ${int.user.id} on order ${existingClaim.id}`); - await int.reply({ content: text.commands.claim.existing, ephemeral: true }); - return; - } - - // Retrieve the selected values from interaction - const orderIds = int.customId === "claim_order" - ? int.values - : int.message?.components - .find((row) => row.components.some((component) => component.customId === "claim_order")) - .components.find((component) => component.customId === "claim_order").value.split(","); - - const orders = await db.orders.findMany({ - where: { - id: { in: orderIds }, - status: OrderStatus.Unprepared, - claimer: null, // Check if the order is not already claimed - }, - select: { - id: true, - user: true, - details: true, - status: true, - }, - }); - - if (orders.length === 0) { - await int.reply({ content: "There are no available orders to claim.", ephemeral: true }); - return; - } - - const options = orders.map(order => { - const details = order.details.length > 50 ? `${order.details.substring(0, 47)}...` : order.details; - const user = order.user.length > 50 ? `${order.user.substring(0, 47)}...` : order.user; - - return { - label: order.id, - description: `Details: ${details}\nUser: ${user}\nStatus: ${order.status}`, - value: order.id, - details: order.details, - }; - }); - const minValues = Math.min(1, orders.length); - const maxValues = Math.min(3, orders.length); - - const selectMenu = new StringSelectMenuBuilder() - .setCustomId("claim_order") - .setPlaceholder("Select orders to claim") - .addOptions(options) - .setMinValues(minValues) // Set minimum selected values - .setMaxValues(maxValues); // Set maximum selected values - - const actionRow = { - type: ComponentType.ActionRow, - components: [selectMenu], - }; - - const embed = new EmbedBuilder() - .setDescription("Please select orders to claim.") - .setColor("#00FF00"); - - try { - const reply = await int.reply({ - embeds: [embed], - components: [actionRow], - ephemeral: true, - }); - - // Schedule a deletion of the reply after a certain time (e.g., 10 seconds) - setTimeout(() => { - reply.delete(); - }, 10000); - } catch (error) { - console.error("Error replying to interaction:", error); - } - }); - -client.on("interactionCreate", async (interaction) => { - if (!interaction.isStringSelectMenu()) return; - - const componentId = interaction.customId; - if (componentId === "claim_order") { - // Retrieve the selected values from interaction - const orderIds = interaction.values || []; - const claimedOrderMessages = []; - - for (let i = 0; i < orderIds.length; i++) { - const orderId = orderIds[i]; - try { - // Check if a claim lock exists for this order - if (claimedOrderLocks.has(orderId) && claimedOrderLocks.get(orderId)) { - claimedOrderMessages.push(`Another user is currently claiming Order ${orderId}. Please try again later.`); - continue; - } - - // Set a claim lock for this order - claimedOrderLocks.set(orderId, true); - - // Check if the order is still unclaimed in the database - const unclaimedOrder = await db.orders.findFirst({ - where: { id: orderId, status: OrderStatus.Unprepared, claimer: null }, - }); - - if (!unclaimedOrder) { - console.log(`Order ${orderId} is already claimed.`); - claimedOrderMessages.push(`Order ${orderId} has already been claimed.`); - claimedOrderLocks.delete(orderId); // Release the claim lock for this order - continue; - } - - // Update the claimed order and release the claim lock - await db.orders.update({ - where: { id: orderId }, - data: { claimer: interaction.user.id, status: OrderStatus.Preparing }, - }); - - claimedOrders.add(orderId); // Store claimed order ID in the Set - claimedOrderLocks.delete(orderId); - - claimedOrderMessages.push(`Order ${orderId} claimed successfully.`); - } catch (error) { - console.error(`Error processing Order ${orderId}:`, error); - claimedOrderMessages.push(`Error processing Order ${orderId}`); - } finally { - claimedOrderLocks.delete(orderId); - } - } - - // Send a single reply summarizing the claimed orders - try { - const reply = await interaction.reply({ - content: `Claiming results:\n${claimedOrderMessages.join('\n')}`, - ephemeral: false, - }); - - // Remove the first reply after a certain time (e.g., 5 seconds) - setTimeout(() => { - reply.delete(); - }, 5000); - } catch (error) { - console.error("Error replying to interaction:", error); - } - } -}); +// @ts-nocheck +/* eslint-disable quotes */ +/* eslint-disable indent */ +import {Command} from "../src/structures/Command"; +import {permissions} from "../src/providers/permissions"; +import {getClaimedOrder, OrderStatus} from "../src/database/orders"; +import {db} from "../src/database/database"; +import {text} from "../src/providers/config"; +import {client} from "../src/providers/client"; +import {CommandInteraction, ComponentType, EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; + +const claimedOrderLocks = new Map(); // Map to store claim locks for each order ID +const claimedOrders = new Set(); // Set to store claimed order IDs + +export const command = new Command("eclaim", "Claims an order.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + const existingClaim = await getClaimedOrder(int.user); + if (existingClaim) { + console.log(`Existing claim found for ${int.user.id} on order ${existingClaim.id}`); + await int.reply({ content: text.commands.claim.existing, ephemeral: true }); + return; + } + + // Retrieve the selected values from interaction + const orderIds = int.customId === "claim_order" + ? int.values + : int.message?.components + .find((row) => row.components.some((component) => component.customId === "claim_order")) + .components.find((component) => component.customId === "claim_order").value.split(","); + + const orders = await db.orders.findMany({ + where: { + id: { in: orderIds }, + status: OrderStatus.Unprepared, + claimer: null, // Check if the order is not already claimed + }, + select: { + id: true, + user: true, + details: true, + status: true, + }, + }); + + if (orders.length === 0) { + await int.reply({ content: "There are no available orders to claim.", ephemeral: true }); + return; + } + + const options = orders.map(order => { + const details = order.details.length > 50 ? `${order.details.substring(0, 47)}...` : order.details; + const user = order.user.length > 50 ? `${order.user.substring(0, 47)}...` : order.user; + + return { + label: order.id, + description: `Details: ${details}\nUser: ${user}\nStatus: ${order.status}`, + value: order.id, + details: order.details, + }; + }); + const minValues = Math.min(1, orders.length); + const maxValues = Math.min(3, orders.length); + + const selectMenu = new StringSelectMenuBuilder() + .setCustomId("claim_order") + .setPlaceholder("Select orders to claim") + .addOptions(options) + .setMinValues(minValues) // Set minimum selected values + .setMaxValues(maxValues); // Set maximum selected values + + const actionRow = { + type: ComponentType.ActionRow, + components: [selectMenu], + }; + + const embed = new EmbedBuilder() + .setDescription("Please select orders to claim.") + .setColor("#00FF00"); + + try { + const reply = await int.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true, + }); + + // Schedule a deletion of the reply after a certain time (e.g., 10 seconds) + setTimeout(() => { + reply.delete(); + }, 10000); + } catch (error) { + console.error("Error replying to interaction:", error); + } + }); + +client.on("interactionCreate", async (interaction) => { + if (!interaction.isStringSelectMenu()) return; + + const componentId = interaction.customId; + if (componentId === "claim_order") { + // Retrieve the selected values from interaction + const orderIds = interaction.values || []; + const claimedOrderMessages = []; + + for (let i = 0; i < orderIds.length; i++) { + const orderId = orderIds[i]; + try { + // Check if a claim lock exists for this order + if (claimedOrderLocks.has(orderId) && claimedOrderLocks.get(orderId)) { + claimedOrderMessages.push(`Another user is currently claiming Order ${orderId}. Please try again later.`); + continue; + } + + // Set a claim lock for this order + claimedOrderLocks.set(orderId, true); + + // Check if the order is still unclaimed in the database + const unclaimedOrder = await db.orders.findFirst({ + where: { id: orderId, status: OrderStatus.Unprepared, claimer: null }, + }); + + if (!unclaimedOrder) { + console.log(`Order ${orderId} is already claimed.`); + claimedOrderMessages.push(`Order ${orderId} has already been claimed.`); + claimedOrderLocks.delete(orderId); // Release the claim lock for this order + continue; + } + + // Update the claimed order and release the claim lock + await db.orders.update({ + where: { id: orderId }, + data: { claimer: interaction.user.id, status: OrderStatus.Preparing }, + }); + + claimedOrders.add(orderId); // Store claimed order ID in the Set + claimedOrderLocks.delete(orderId); + + claimedOrderMessages.push(`Order ${orderId} claimed successfully.`); + } catch (error) { + console.error(`Error processing Order ${orderId}:`, error); + claimedOrderMessages.push(`Error processing Order ${orderId}`); + } finally { + claimedOrderLocks.delete(orderId); + } + } + + // Send a single reply summarizing the claimed orders + try { + const reply = await interaction.reply({ + content: `Claiming results:\n${claimedOrderMessages.join('\n')}`, + ephemeral: false, + }); + + // Remove the first reply after a certain time (e.g., 5 seconds) + setTimeout(() => { + reply.delete(); + }, 5000); + } catch (error) { + console.error("Error replying to interaction:", error); + } + } +}); diff --git a/src/commands/Devs/currencyedit.ts b/src/commands/Devs/currencyedit.ts new file mode 100644 index 0000000..0ddb438 --- /dev/null +++ b/src/commands/Devs/currencyedit.ts @@ -0,0 +1,68 @@ +/* eslint-disable indent */ +import {permissions} from "../../providers/permissions"; +import {ChatInputCommandInteraction} from "discord.js"; +import {getUserInfo, updateBalance} from "../../database/userInfo"; +import {ExtendedCommand} from "../../structures/extendedCommand"; + +export const command = new ExtendedCommand({name: "currencyedit", description: "Manage user balance.", local: true}) + .addPermission(permissions.developer) + .addSubCommand((subcommand) => + subcommand + .setName("set") + .setDescription("Set user balance.") + .addUserOption((option) => + option + .setName("user") + .setDescription("The user whose balance you want to set.") + .setRequired(true) + ) + .addIntegerOption((option) => + option + .setName("amount") + .setDescription("The amount to set as the user's balance.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("check") + .setDescription("Check user balance.") + .addUserOption((option) => + option + .setName("user") + .setDescription("The user whose balance you want to check.") + .setRequired(true) + ) + ) + .setExecutor(async (int: ChatInputCommandInteraction) => { + const subcommand = int.options.getSubcommand(true); + + if (subcommand === "set") { + const user = int.options.getUser("user", true); + const amount = int.options.getInteger("amount", true); + + try { + await updateBalance(user.id, amount, 0); + await int.reply(`User ${user.username}'s balance has been set to ${amount}.`); + } catch (error) { + console.error("Error setting user balance:", error); + await int.reply("An error occurred while setting user balance."); + } + } else if (subcommand === "check") { + const user = int.options.getUser("user", true); + + try { + const userInfo = await getUserInfo(user.id); + if (userInfo) { + await int.reply(`User ${user.username}'s balance is ${userInfo.balance}.`); + } else { + await int.reply("User balance not found."); + } + } catch (error) { + console.error("Error checking user balance:", error); + await int.reply("An error occurred while checking user balance."); + } + } else { + await int.reply("This subcommand is not yet implemented."); + } + }); \ No newline at end of file diff --git a/src/commands/fun/slap.ts b/src/commands/fun/slap.ts index 991a2c6..25a8a51 100644 --- a/src/commands/fun/slap.ts +++ b/src/commands/fun/slap.ts @@ -16,7 +16,7 @@ export const command = new Command("slap", "Give your friends a good slap.") new EmbedBuilder() .setTitle("Bam someone got slapped") .setImage(yeeeee.url) - .setDescription(`${slapped} got slapped by ${int.user.tag}`) + .setDescription(`<@!${slapped}> got slapped by ${int.user.tag}`) .setFooter({text: format(tcfe.footer, int.user.tag), iconURL: int.user.displayAvatarURL()}), ], }); diff --git a/src/providers/commandManager.ts b/src/providers/commandManager.ts index 7ae1a88..0ba5500 100644 --- a/src/providers/commandManager.ts +++ b/src/providers/commandManager.ts @@ -68,6 +68,8 @@ const registerCommands = async (commands: Command[]) => { * Loads all commands from the commands folder. * Registers them with the commandRegistry and the applicationCommandManager. */ +let commandNames: string[] = []; + export const loadCommands = async (): Promise => { const commands: Command[] = []; const commandFiles = sync(commandFolder); @@ -76,6 +78,10 @@ export const loadCommands = async (): Promise => { if (!(data.command instanceof Command || (data.command as any) instanceof ExtendedCommand)) { throw new Error(`File ${file} does not export 'command'.`); } + if (commandNames.includes(data.command.name)) { + console.log("Duplicate command found: " + data.command.name); + continue; + } else commandNames.push(data.command.name); console.log(`Registered command ${basename(file, ".js")}.`); commands.push(data.command); } diff --git a/tsconfig.json b/tsconfig.json index 6a5453a..4908c6a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,8 +5,8 @@ "exclude": [ "./node_modules/", "genenv.js", - "./src/commands/orders/worker/ebrew.ts", - "./src/commands/orders/worker/eclaim.ts" + "./purgatory/ebrew.ts", + "./purgatory/eclaim.ts" ], "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ From a60f2751fd898c0ffc02d57ac40ce4e01360f166 Mon Sep 17 00:00:00 2001 From: floof Date: Tue, 16 Apr 2024 22:31:53 -0500 Subject: [PATCH 58/79] implement a basic API in fastify --- package-lock.json | 527 ++++++++++++++++++++++++++++++++++++- package.json | 3 +- src/index.ts | 7 +- src/providers/apiServer.ts | 26 ++ tsconfig.json | 2 +- yarn.lock | 463 +++++++++++++++++++++++++++----- 6 files changed, 954 insertions(+), 74 deletions(-) create mode 100644 src/providers/apiServer.ts diff --git a/package-lock.json b/package-lock.json index 3a5eecb..5a61fbf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "cross-env": "^7.0.3", "discord.js": "^14.14.1", "fast-glob": "^3.2.11", + "fastify": "^4.26.2", "got": "^11.8.3", "hjson": "^3.2.2", "nekos.life": "^3.0.0", @@ -31,7 +32,7 @@ "zod": "^3.14.3" }, "devDependencies": { - "@types/node": "^17.0.42", + "@types/node": "^17.0.45", "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^5.16.0", "@typescript-eslint/parser": "^5.16.0", @@ -255,6 +256,36 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@fastify/ajv-compiler": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", + "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==", + "dependencies": { + "ajv": "^8.11.0", + "ajv-formats": "^2.1.1", + "fast-uri": "^2.0.0" + } + }, + "node_modules/@fastify/ajv-compiler/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/@fastify/busboy": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", @@ -263,6 +294,27 @@ "node": ">=14" } }, + "node_modules/@fastify/error": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", + "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==" + }, + "node_modules/@fastify/fast-json-stringify-compiler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", + "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "dependencies": { + "fast-json-stringify": "^5.7.0" + } + }, + "node_modules/@fastify/merge-json-schemas": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", + "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -781,6 +833,22 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abstract-logging": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", + "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" + }, "node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", @@ -827,6 +895,42 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -863,6 +967,11 @@ "node": ">= 8" } }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -897,11 +1006,41 @@ "node": ">=8.0.0" } }, + "node_modules/avvio": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.3.0.tgz", + "integrity": "sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q==", + "dependencies": { + "@fastify/error": "^3.3.0", + "archy": "^1.0.0", + "debug": "^4.0.0", + "fastq": "^1.17.1" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -933,6 +1072,29 @@ "node": ">=8" } }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1076,6 +1238,14 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -1116,7 +1286,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -1523,6 +1692,32 @@ "node": ">=0.10.0" } }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-content-type-parse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", + "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==" + }, + "node_modules/fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1560,12 +1755,70 @@ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, + "node_modules/fast-json-stringify": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.14.1.tgz", + "integrity": "sha512-J1Grbf0oSXV3lKsBf3itz1AvRk43qVrx3Ac10sNvi3LZaz1by4oDdYKFrJycPhS8+Gb7y8rgV/Jqw1UZVjyNvw==", + "dependencies": { + "@fastify/merge-json-schemas": "^0.1.0", + "ajv": "^8.10.0", + "ajv-formats": "^3.0.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^2.1.0", + "json-schema-ref-resolver": "^1.0.1", + "rfdc": "^1.2.0" + } + }, + "node_modules/fast-json-stringify/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/fast-json-stringify/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-querystring": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", + "dependencies": { + "fast-decode-uri-component": "^1.0.1" + } + }, "node_modules/fast-redact": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", @@ -1574,6 +1827,131 @@ "node": ">=6" } }, + "node_modules/fast-uri": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.3.0.tgz", + "integrity": "sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==" + }, + "node_modules/fastify": { + "version": "4.26.2", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.26.2.tgz", + "integrity": "sha512-90pjTuPGrfVKtdpLeLzND5nyC4woXZN5VadiNQCicj/iJU4viNHKhsAnb7jmv1vu2IzkLXyBiCzdWuzeXgQ5Ug==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "dependencies": { + "@fastify/ajv-compiler": "^3.5.0", + "@fastify/error": "^3.4.0", + "@fastify/fast-json-stringify-compiler": "^4.3.0", + "abstract-logging": "^2.0.1", + "avvio": "^8.3.0", + "fast-content-type-parse": "^1.1.0", + "fast-json-stringify": "^5.8.0", + "find-my-way": "^8.0.0", + "light-my-request": "^5.11.0", + "pino": "^8.17.0", + "process-warning": "^3.0.0", + "proxy-addr": "^2.0.7", + "rfdc": "^1.3.0", + "secure-json-parse": "^2.7.0", + "semver": "^7.5.4", + "toad-cache": "^3.3.0" + } + }, + "node_modules/fastify/node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/fastify/node_modules/pino": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.20.0.tgz", + "integrity": "sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ==", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.1.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^3.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.7.0", + "thread-stream": "^2.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/fastify/node_modules/pino-abstract-transport": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", + "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/fastify/node_modules/pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" + }, + "node_modules/fastify/node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" + }, + "node_modules/fastify/node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/fastify/node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/fastify/node_modules/sonic-boom": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", + "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/fastify/node_modules/thread-stream": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", + "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", + "dependencies": { + "real-require": "^0.2.0" + } + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -1605,6 +1983,19 @@ "node": ">=8" } }, + "node_modules/find-my-way": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.1.0.tgz", + "integrity": "sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-querystring": "^1.0.0", + "safe-regex2": "^2.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -1654,6 +2045,14 @@ "node": ">= 6" } }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1824,6 +2223,25 @@ "node": ">=10.19.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -1878,6 +2296,14 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1959,6 +2385,14 @@ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, + "node_modules/json-schema-ref-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", + "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -2004,6 +2438,21 @@ "node": ">= 0.8.0" } }, + "node_modules/light-my-request": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.13.0.tgz", + "integrity": "sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==", + "dependencies": { + "cookie": "^0.6.0", + "process-warning": "^3.0.0", + "set-cookie-parser": "^2.4.1" + } + }, + "node_modules/light-my-request/node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2047,7 +2496,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -2482,11 +2930,31 @@ "node": ">=16.13" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-warning": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -2505,7 +2973,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, "engines": { "node": ">=6" } @@ -2602,6 +3069,14 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", @@ -2627,6 +3102,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "engines": { + "node": ">=4" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -2636,6 +3119,11 @@ "node": ">=0.10.0" } }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==" + }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -2692,6 +3180,14 @@ } ] }, + "node_modules/safe-regex2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", + "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", + "dependencies": { + "ret": "~0.2.0" + } + }, "node_modules/safe-stable-stringify": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", @@ -2711,11 +3207,15 @@ "regexp-ast-analysis": "^0.6.0" } }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + }, "node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -2726,6 +3226,11 @@ "node": ">=10" } }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2889,6 +3394,14 @@ "node": ">=8.0" } }, + "node_modules/toad-cache": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "engines": { + "node": ">=12" + } + }, "node_modules/touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -3061,7 +3574,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -3145,8 +3657,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yarn": { "version": "1.22.22", diff --git a/package.json b/package.json index ead4942..554d895 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ }, "homepage": "https://github.com/MelnCat/DBRewrite#readme", "devDependencies": { - "@types/node": "^17.0.42", + "@types/node": "^17.0.45", "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^5.16.0", "@typescript-eslint/parser": "^5.16.0", @@ -45,6 +45,7 @@ "cross-env": "^7.0.3", "discord.js": "^14.14.1", "fast-glob": "^3.2.11", + "fastify": "^4.26.2", "got": "^11.8.3", "hjson": "^3.2.2", "nekos.life": "^3.0.0", diff --git a/src/index.ts b/src/index.ts index 51c9a72..26e2f36 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,9 @@ import "./providers/client"; -import { development } from "./providers/env"; -import { production } from "./providers/env"; +import {development, production} from "./providers/env"; import "source-map-support/register"; +// experimental +import "./providers/apiServer"; + if (development) console.warn("Starting in development mode!"); if (production) console.warn("Starting in production mode!"); + diff --git a/src/providers/apiServer.ts b/src/providers/apiServer.ts new file mode 100644 index 0000000..cb75bd5 --- /dev/null +++ b/src/providers/apiServer.ts @@ -0,0 +1,26 @@ +// Import the framework and instantiate it +import Fastify from "fastify"; +import {db} from "../database/database"; + +const fastify = Fastify(); + +// Declare a route +fastify.get("/", async function handler(request, reply) { + return {hello: "world"}; +}); + +fastify.get("/getOrders", async (req, res) => { + return db.orders.findMany(); +}); + +// Run the server! +try { + fastify.listen({port: 3000}).then(r => { + console.log("Server is running on port 3000"); + }); +} catch (err) { + fastify.log.error(err); + process.exit(1); +} + +export default fastify; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 4908c6a..e50799e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -44,7 +44,7 @@ /* Specify what module code is generated. */, "rootDir": "./src/" /* Specify the root folder within your source files. */, - // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ // "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */, // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ diff --git a/yarn.lock b/yarn.lock index b823ce7..f7fcf04 100644 --- a/yarn.lock +++ b/yarn.lock @@ -129,11 +129,39 @@ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz" integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@fastify/ajv-compiler@^3.5.0": + version "3.5.0" + resolved "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz" + integrity sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA== + dependencies: + ajv "^8.11.0" + ajv-formats "^2.1.1" + fast-uri "^2.0.0" + "@fastify/busboy@^2.0.0": version "2.1.1" resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== +"@fastify/error@^3.3.0", "@fastify/error@^3.4.0": + version "3.4.1" + resolved "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz" + integrity sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ== + +"@fastify/fast-json-stringify-compiler@^4.3.0": + version "4.3.0" + resolved "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz" + integrity sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA== + dependencies: + fast-json-stringify "^5.7.0" + +"@fastify/merge-json-schemas@^0.1.0": + version "0.1.1" + resolved "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz" + integrity sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA== + dependencies: + fast-deep-equal "^3.1.3" + "@humanwhocodes/config-array@^0.11.14": version "0.11.14" resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz" @@ -149,9 +177,9 @@ integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== "@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + version "2.0.3" + resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== "@jridgewell/resolve-uri@^3.0.3": version "3.1.2" @@ -205,45 +233,45 @@ "@noble/hashes" "^1.1.5" "@prisma/client@latest": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/client/-/client-5.11.0.tgz" - integrity sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw== - -"@prisma/debug@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/debug/-/debug-5.11.0.tgz" - integrity sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A== - -"@prisma/engines-version@5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102": - version "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" - resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102.tgz" - integrity sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA== - -"@prisma/engines@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/engines/-/engines-5.11.0.tgz" - integrity sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw== - dependencies: - "@prisma/debug" "5.11.0" - "@prisma/engines-version" "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" - "@prisma/fetch-engine" "5.11.0" - "@prisma/get-platform" "5.11.0" - -"@prisma/fetch-engine@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.11.0.tgz" - integrity sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w== - dependencies: - "@prisma/debug" "5.11.0" - "@prisma/engines-version" "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" - "@prisma/get-platform" "5.11.0" - -"@prisma/get-platform@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.11.0.tgz" - integrity sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw== - dependencies: - "@prisma/debug" "5.11.0" + version "5.12.1" + resolved "https://registry.npmjs.org/@prisma/client/-/client-5.12.1.tgz" + integrity sha512-6/JnizEdlSBxDIdiLbrBdMW5NqDxOmhXAJaNXiPpgzAPr/nLZResT6MMpbOHLo5yAbQ1Vv5UU8PTPRzb0WIxdA== + +"@prisma/debug@5.12.1": + version "5.12.1" + resolved "https://registry.npmjs.org/@prisma/debug/-/debug-5.12.1.tgz" + integrity sha512-kd/wNsR0klrv79o1ITsbWxYyh4QWuBidvxsXSParPsYSu0ircUmNk3q4ojsgNc3/81b0ozg76iastOG43tbf8A== + +"@prisma/engines-version@5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab": + version "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" + resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab.tgz" + integrity sha512-6yvO8s80Tym61aB4QNtYZfWVmE3pwqe807jEtzm8C5VDe7nw8O1FGX3TXUaXmWV0fQTIAfRbeL2Gwrndabp/0g== + +"@prisma/engines@5.12.1": + version "5.12.1" + resolved "https://registry.npmjs.org/@prisma/engines/-/engines-5.12.1.tgz" + integrity sha512-HQDdglLw2bZR/TXD2Y+YfDMvi5Q8H+acbswqOsWyq9pPjBLYJ6gzM+ptlTU/AV6tl0XSZLU1/7F4qaWa8bqpJA== + dependencies: + "@prisma/debug" "5.12.1" + "@prisma/engines-version" "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" + "@prisma/fetch-engine" "5.12.1" + "@prisma/get-platform" "5.12.1" + +"@prisma/fetch-engine@5.12.1": + version "5.12.1" + resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.12.1.tgz" + integrity sha512-qSs3KcX1HKcea1A+hlJVK/ljj0PNIUHDxAayGMvgJBqmaN32P9tCidlKz1EGv6WoRFICYnk3Dd/YFLBwnFIozA== + dependencies: + "@prisma/debug" "5.12.1" + "@prisma/engines-version" "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" + "@prisma/get-platform" "5.12.1" + +"@prisma/get-platform@5.12.1": + version "5.12.1" + resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.12.1.tgz" + integrity sha512-pgIR+pSvhYHiUcqXVEZS31NrFOTENC9yFUdEAcx7cdQBoZPmHVjtjN4Ss6NzVDMYPrKJJ51U14EhEoeuBlMioQ== + dependencies: + "@prisma/debug" "5.12.1" "@sapphire/async-queue@^1.1.9", "@sapphire/async-queue@^1.5.0": version "1.5.2" @@ -251,9 +279,9 @@ integrity sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg== "@sapphire/shapeshift@^3.8.1", "@sapphire/shapeshift@^3.9.3": - version "3.9.6" - resolved "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.6.tgz" - integrity sha512-4+Na/fxu2SEepZRb9z0dbsVh59QtwPuBg/UVaDib3av7ZY14b14+z09z6QVn0P6Dv6eOU2NDTsjIi0mbtgP56g== + version "3.9.7" + resolved "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.7.tgz" + integrity sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g== dependencies: fast-deep-equal "^3.1.3" lodash "^4.17.21" @@ -327,7 +355,7 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@^17.0.42": +"@types/node@*", "@types/node@^17.0.45": version "17.0.45" resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== @@ -455,6 +483,18 @@ abbrev@1: resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abstract-logging@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz" + integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" @@ -470,6 +510,20 @@ acorn-walk@^8.1.1: resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-formats@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" @@ -480,6 +534,26 @@ ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.10.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^8.11.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" @@ -500,6 +574,11 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== + arg@^4.1.0: version "4.1.3" resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" @@ -525,11 +604,26 @@ atomic-sleep@^1.0.0: resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== +avvio@^8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/avvio/-/avvio-8.3.0.tgz" + integrity sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q== + dependencies: + "@fastify/error" "^3.3.0" + archy "^1.0.0" + debug "^4.0.0" + fastq "^1.17.1" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + binary-extensions@^2.0.0: version "2.3.0" resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" @@ -555,6 +649,14 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + cacheable-lookup@^5.0.3: version "5.0.4" resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" @@ -637,6 +739,11 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +cookie@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + create-require@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" @@ -665,7 +772,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: +debug@^4.0.0, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -712,9 +819,9 @@ discord-api-types@^0.26.1: integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== discord-api-types@^0.37.35: - version "0.37.77" - resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.77.tgz" - integrity sha512-AkEn9nZA5w/XJ8wzKzlpx3X+MToQCowKahftF1+KYnMWnuglCrVRojy1XlIWX8Frgp1v8INceGKpvDkbvMLJ4g== + version "0.37.79" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.79.tgz" + integrity sha512-jblKMZL5f9t/pfUyhHNey8Lb9yVCcBVIPxz/JTY0raAmfj7CuFXdl9m5o/+iiB7E0vv1Kz9V7Ao5HtLRc2gH1Q== discord-api-types@0.37.61: version "0.37.61" @@ -892,6 +999,26 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +fast-content-type-parse@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz" + integrity sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ== + +fast-decode-uri-component@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz" + integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3, fast-deep-equal@3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" @@ -913,17 +1040,64 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-json-stringify@^5.7.0, fast-json-stringify@^5.8.0: + version "5.14.1" + resolved "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.14.1.tgz" + integrity sha512-J1Grbf0oSXV3lKsBf3itz1AvRk43qVrx3Ac10sNvi3LZaz1by4oDdYKFrJycPhS8+Gb7y8rgV/Jqw1UZVjyNvw== + dependencies: + "@fastify/merge-json-schemas" "^0.1.0" + ajv "^8.10.0" + ajv-formats "^3.0.1" + fast-deep-equal "^3.1.3" + fast-uri "^2.1.0" + json-schema-ref-resolver "^1.0.1" + rfdc "^1.2.0" + fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-redact@^3.0.0: +fast-querystring@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz" + integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== + dependencies: + fast-decode-uri-component "^1.0.1" + +fast-redact@^3.0.0, fast-redact@^3.1.1: version "3.5.0" resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz" integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== -fastq@^1.6.0: +fast-uri@^2.0.0, fast-uri@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-2.3.0.tgz" + integrity sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw== + +fastify@^4.26.2: + version "4.26.2" + resolved "https://registry.npmjs.org/fastify/-/fastify-4.26.2.tgz" + integrity sha512-90pjTuPGrfVKtdpLeLzND5nyC4woXZN5VadiNQCicj/iJU4viNHKhsAnb7jmv1vu2IzkLXyBiCzdWuzeXgQ5Ug== + dependencies: + "@fastify/ajv-compiler" "^3.5.0" + "@fastify/error" "^3.4.0" + "@fastify/fast-json-stringify-compiler" "^4.3.0" + abstract-logging "^2.0.1" + avvio "^8.3.0" + fast-content-type-parse "^1.1.0" + fast-json-stringify "^5.8.0" + find-my-way "^8.0.0" + light-my-request "^5.11.0" + pino "^8.17.0" + process-warning "^3.0.0" + proxy-addr "^2.0.7" + rfdc "^1.3.0" + secure-json-parse "^2.7.0" + semver "^7.5.4" + toad-cache "^3.3.0" + +fastq@^1.17.1, fastq@^1.6.0: version "1.17.1" resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== @@ -944,6 +1118,15 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-my-way@^8.0.0: + version "8.1.0" + resolved "https://registry.npmjs.org/find-my-way/-/find-my-way-8.1.0.tgz" + integrity sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA== + dependencies: + fast-deep-equal "^3.1.3" + fast-querystring "^1.0.0" + safe-regex2 "^2.0.0" + find-up@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" @@ -975,6 +1158,11 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" @@ -1094,6 +1282,11 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" @@ -1130,6 +1323,11 @@ inherits@^2.0.3, inherits@2: resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" @@ -1181,11 +1379,23 @@ json-buffer@3.0.1: resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== +json-schema-ref-resolver@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz" + integrity sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw== + dependencies: + fast-deep-equal "^3.1.3" + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" @@ -1211,6 +1421,15 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +light-my-request@^5.11.0: + version "5.13.0" + resolved "https://registry.npmjs.org/light-my-request/-/light-my-request-5.13.0.tgz" + integrity sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ== + dependencies: + cookie "^0.6.0" + process-warning "^3.0.0" + set-cookie-parser "^2.4.1" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" @@ -1367,6 +1586,11 @@ on-exit-leak-free@^0.2.0: resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz" integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== +on-exit-leak-free@^2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz" + integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -1447,6 +1671,14 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pino-abstract-transport@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz" + integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== + dependencies: + readable-stream "^4.0.0" + split2 "^4.0.0" + pino-abstract-transport@v0.5.0: version "0.5.0" resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz" @@ -1460,6 +1692,11 @@ pino-std-serializers@^4.0.0: resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz" integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== +pino-std-serializers@^6.0.0: + version "6.2.2" + resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz" + integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== + pino@^7.9.2: version "7.11.0" resolved "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz" @@ -1477,6 +1714,23 @@ pino@^7.9.2: sonic-boom "^2.2.1" thread-stream "^0.15.1" +pino@^8.17.0: + version "8.20.0" + resolved "https://registry.npmjs.org/pino/-/pino-8.20.0.tgz" + integrity sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ== + dependencies: + atomic-sleep "^1.0.0" + fast-redact "^3.1.1" + on-exit-leak-free "^2.1.0" + pino-abstract-transport "^1.1.0" + pino-std-serializers "^6.0.0" + process-warning "^3.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.2.0" + safe-stable-stringify "^2.3.1" + sonic-boom "^3.7.0" + thread-stream "^2.0.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -1490,17 +1744,35 @@ pretty-ms@^7.0.1: parse-ms "^2.1.0" prisma@*, prisma@latest: - version "5.11.0" - resolved "https://registry.npmjs.org/prisma/-/prisma-5.11.0.tgz" - integrity sha512-KCLiug2cs0Je7kGkQBN9jDWoZ90ogE/kvZTUTgz2h94FEo8pczCkPH7fPNXkD1sGU7Yh65risGGD1HQ5DF3r3g== + version "5.12.1" + resolved "https://registry.npmjs.org/prisma/-/prisma-5.12.1.tgz" + integrity sha512-SkMnb6wyIxTv9ACqiHBI2u9gD6y98qXRoCoLEnZsF6yee5Qg828G+ARrESN+lQHdw4maSZFFSBPPDpvSiVTo0Q== dependencies: - "@prisma/engines" "5.11.0" + "@prisma/engines" "5.12.1" process-warning@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz" integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== +process-warning@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz" + integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +proxy-addr@^2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + pstree.remy@^1.1.8: version "1.1.8" resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" @@ -1543,6 +1815,17 @@ readable-stream@^3.1.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^4.0.0: + version "4.5.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz" + integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -1555,6 +1838,11 @@ real-require@^0.1.0: resolved "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz" integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== +real-require@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz" + integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== + refa@^0.11.0: version "0.11.0" resolved "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz" @@ -1570,6 +1858,11 @@ regexp-ast-analysis@^0.6.0: "@eslint-community/regexpp" "^4.5.0" refa "^0.11.0" +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + resolve-alpn@^1.0.0: version "1.2.1" resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" @@ -1587,11 +1880,21 @@ responselike@^2.0.0: dependencies: lowercase-keys "^2.0.0" +ret@~0.2.0: + version "0.2.2" + resolved "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz" + integrity sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.2.0, rfdc@^1.3.0: + version "1.3.1" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== + rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" @@ -1611,7 +1914,14 @@ safe-buffer@~5.2.0: resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-stable-stringify@^2.1.0: +safe-regex2@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz" + integrity sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ== + dependencies: + ret "~0.2.0" + +safe-stable-stringify@^2.1.0, safe-stable-stringify@^2.3.1: version "2.4.3" resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== @@ -1625,12 +1935,17 @@ scslre@^0.2.0: refa "^0.11.0" regexp-ast-analysis "^0.6.0" +secure-json-parse@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz" + integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== + semver@^5.7.1: version "5.7.2" resolved "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^7.3.7: +semver@^7.3.7, semver@^7.5.4: version "7.6.0" resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== @@ -1642,6 +1957,11 @@ semver@~7.0.0: resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +set-cookie-parser@^2.4.1: + version "2.6.0" + resolved "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz" + integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -1673,6 +1993,13 @@ sonic-boom@^2.2.1: dependencies: atomic-sleep "^1.0.0" +sonic-boom@^3.7.0: + version "3.8.1" + resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz" + integrity sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg== + dependencies: + atomic-sleep "^1.0.0" + source-map-support@^0.5.21: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" @@ -1696,7 +2023,7 @@ stream-shift@^1.0.2: resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz" integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== -string_decoder@^1.1.1: +string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -1746,6 +2073,13 @@ thread-stream@^0.15.1: dependencies: real-require "^0.1.0" +thread-stream@^2.0.0: + version "2.4.1" + resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz" + integrity sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg== + dependencies: + real-require "^0.2.0" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -1753,6 +2087,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +toad-cache@^3.3.0: + version "3.7.0" + resolved "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz" + integrity sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw== + touch@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" @@ -1838,9 +2177,9 @@ typescript-memoize@^1.1.0: integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== typescript@^5.4.3, typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": - version "5.4.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz" - integrity sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg== + version "5.4.5" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== undefsafe@^2.0.5: version "2.0.5" From 109c955342d1e4474282e3601105a6098aa37ee6 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Tue, 16 Apr 2024 23:49:11 -0400 Subject: [PATCH 59/79] Delete src/providers/drink.ts --- src/providers/drink.ts | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 src/providers/drink.ts diff --git a/src/providers/drink.ts b/src/providers/drink.ts deleted file mode 100644 index 0dca1de..0000000 --- a/src/providers/drink.ts +++ /dev/null @@ -1,25 +0,0 @@ -// drink.ts - -import { PrismaClient, Drink } from "@prisma/client"; - -const prisma = new PrismaClient(); - -// Function to retrieve all drinks -export async function getAllDrinks(): Promise { - return prisma.drink.findMany(); -} - -// Function to create a new drink -export async function createDrink(data: Partial): Promise { - return prisma.drink.create({ data }); -} - -// Function to update an existing drink -export async function updateDrink(id: number, data: Partial): Promise { - return prisma.drink.update({ where: { id }, data }); -} - -// Function to delete a drink -export async function deleteDrink(id: number): Promise { - return prisma.drink.delete({ where: { id } }); -} From 3a197361f2dff252f0f196c20a4a4002fa4c983b Mon Sep 17 00:00:00 2001 From: floof Date: Tue, 16 Apr 2024 23:17:07 -0500 Subject: [PATCH 60/79] updated issues in files --- package.json | 2 +- {src/providers => purgatory}/drink.ts | 50 +- .../orders/worker => purgatory}/ebrew.ts | 520 +++++++++--------- .../orders/worker => purgatory}/eclaim.ts | 325 ++++++----- src/commands/Devs/Select.ts | 19 +- src/commands/Devs/avatar.ts | 11 +- src/commands/Devs/button.ts | 18 +- src/commands/Devs/currencyedit.ts | 12 +- src/commands/Devs/menu.ts | 11 +- src/commands/Devs/transfer.ts | 10 +- src/commands/Devs/workst.ts | 16 +- src/commands/Devs/ws.ts | 16 +- src/commands/economy/crime.ts | 39 +- src/commands/economy/daily.ts | 15 +- .../{drinkroullete.ts => drinkroulette.ts} | 68 +-- src/commands/economy/work.ts | 15 +- src/commands/orders/worker/brew.ts | 465 ++++++++-------- src/commands/orders/worker/editstatus.ts | 21 +- src/commands/orders/worker/leaderboard.ts | 15 +- src/commands/orders/worker/wash.ts | 13 +- src/commands/orders/worker/workerstats.ts | 17 +- src/database/order.ts | 22 +- src/events/ServerConfig.ts | 19 +- src/events/interactionCreate.ts | 23 +- src/events/ready.ts | 19 +- src/providers/client.ts | 14 +- src/providers/commandManager.ts | 28 +- src/structures/Command.ts | 10 +- src/utils/components.ts | 13 +- src/utils/utils.ts | 6 +- yarn.lock | 8 +- 31 files changed, 923 insertions(+), 917 deletions(-) rename {src/providers => purgatory}/drink.ts (89%) rename {src/commands/orders/worker => purgatory}/ebrew.ts (92%) rename {src/commands/orders/worker => purgatory}/eclaim.ts (90%) rename src/commands/economy/{drinkroullete.ts => drinkroulette.ts} (63%) diff --git a/package.json b/package.json index a389a70..d74e5f2 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "ts-node": "^10.9.1", "ts-toolbelt": "^9.6.0", "tsconfig-paths": "^4.1.2", - "typescript": "^4.9.5" + "typescript": "^5.4.5" }, "dependencies": { "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", diff --git a/src/providers/drink.ts b/purgatory/drink.ts similarity index 89% rename from src/providers/drink.ts rename to purgatory/drink.ts index 0dca1de..4b48e53 100644 --- a/src/providers/drink.ts +++ b/purgatory/drink.ts @@ -1,25 +1,25 @@ -// drink.ts - -import { PrismaClient, Drink } from "@prisma/client"; - -const prisma = new PrismaClient(); - -// Function to retrieve all drinks -export async function getAllDrinks(): Promise { - return prisma.drink.findMany(); -} - -// Function to create a new drink -export async function createDrink(data: Partial): Promise { - return prisma.drink.create({ data }); -} - -// Function to update an existing drink -export async function updateDrink(id: number, data: Partial): Promise { - return prisma.drink.update({ where: { id }, data }); -} - -// Function to delete a drink -export async function deleteDrink(id: number): Promise { - return prisma.drink.delete({ where: { id } }); -} +// @ts-nocheck +// drink.ts +import {Drink, PrismaClient} from "@prisma/client"; + +const prisma = new PrismaClient(); + +// Function to retrieve all drinks +export async function getAllDrinks(): Promise { + return prisma.drink.findMany(); +} + +// Function to create a new drink +export async function createDrink(data: Partial): Promise { + return prisma.drink.create({ data }); +} + +// Function to update an existing drink +export async function updateDrink(id: number, data: Partial): Promise { + return prisma.drink.update({ where: { id }, data }); +} + +// Function to delete a drink +export async function deleteDrink(id: number): Promise { + return prisma.drink.delete({ where: { id } }); +} diff --git a/src/commands/orders/worker/ebrew.ts b/purgatory/ebrew.ts similarity index 92% rename from src/commands/orders/worker/ebrew.ts rename to purgatory/ebrew.ts index 36f07c8..8c0d1bb 100644 --- a/src/commands/orders/worker/ebrew.ts +++ b/purgatory/ebrew.ts @@ -1,261 +1,259 @@ -/* eslint-disable indent */ -/* eslint-disable quotes */ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../../database/database"; -import { upsertWorkerInfo } from "../../../database/workerInfo"; -import { client } from "../../../providers/client"; -import { config, constants, text } from "../../../providers/config"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; -import { randRange } from "../../../utils/utils"; -import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; - -// Define the getClaimedOrders function without specifying OrderStatus -async function getClaimedOrders(userId: string) { - return await db.orders.findMany({ - where: { - claimer: userId, - status: OrderStatus.Preparing, - }, - }); -} - -export const command = new Command( - "ebrew", - "Brews your claimed order." -) - .addSubCommand((subcommand) => - subcommand - .setName("attach") - .setDescription("Attach an image to your order.") - .addAttachmentOption((option) => - option - .setName("attachment") - .setDescription("The image to attach to the order.") - .setRequired(true) - ) - ) - .addSubCommand((subcommand) => - subcommand - .setName("url") - .setDescription("Attach an image to your order by URL.") - .addStringOption((option) => - option - .setName("url") - .setDescription("The URL of the image to attach to the order.") - .setRequired(true) - ) - ) - .addSubCommand((subcommand) => - subcommand - .setName("claim") - .setDescription("Claim an order.") - ) - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - // Check the subcommand - const subcommand = int.options.getSubcommand(true); - - if (subcommand === "claim") { - // Get a list of claimed orders for the user using getClaimedOrders - const claimedOrders = await getClaimedOrders(int.user.id); - - // Check if the user has claimed orders - if (claimedOrders.length === 0) { - await int.reply({ content: "You don't have any claimed orders to brew." }); - return; - } - - // Build a select menu with claimed order options - const orderOptions = claimedOrders.map(order => ({ - label: `Order ${order.id}`, - value: order.id.toString(), - description: `User: ${order.user.substring(0, 15)}...\nDetails: ${order.details.substring(0, 50)}...`, - // Include user and details in the description, limiting the length - })); - - const orderSelectMenu = new StringSelectMenuBuilder() - .setCustomId("select_order_to_claim") - .setPlaceholder("Select an order to brew") - .addOptions(orderOptions) - .toJSON(); - - const actionRow = { - type: ComponentType.ActionRow, - components: [orderSelectMenu], - }; - - await int.reply({ - content: "Please select an order to brew:", - components: [actionRow], - ephemeral: true, - }); - - // Create a collector to listen for the user's selection - const filter = (i) => i.customId === "select_order_to_claim" && i.user.id === int.user.id; - const collector = int.channel.createMessageComponentCollector({ filter, time: 15000 }); - - collector.on("collect", async (interaction) => { - const selectedOrderId = interaction.values[0]; - - // Fetch the order details using the order ID - const selectedOrder = await db.orders.findUnique({ - where: { - id: selectedOrderId, - }, - }); - - if (!selectedOrder) { - await interaction.update({ content: "Invalid order selected.", components: [] }); - return; - } - - // Check if the order status is not OrderStatus.Preparing - if (selectedOrder.status !== OrderStatus.Preparing) { - await interaction.update({ - content: `You cannot claim an order with status ${selectedOrder.status}.`, - components: [], - }); - return; - } - - // Store the selected order ID in a context variable for future use - int.client.ordersInProcess = { - [int.user.id]: { - orderId: selectedOrderId, - }, - }; - - await interaction.update({ - content: `You selected Order ${selectedOrderId} to brew. Now, you can proceed to attach an image or provide a URL.`, - components: [], - }); - }); - - collector.on("end", async (collected) => { - if (collected.size === 0) { - await int.followUp("You didn't select an order in time."); - } - }); - - } else if ((subcommand === "attach" || subcommand === "url") && int.client.ordersInProcess?.[int.user.id]?.orderId) { - // Fetch the order ID from the context variable - const selectedOrderId = int.client.ordersInProcess[int.user.id].orderId; - - // Fetch the order details using the order ID - const order = await db.orders.findUnique({ - where: { - id: selectedOrderId, - }, - }); - - if (!order) { - await int.reply({ content: "Invalid order selected." }); - return; - } - - // Check if the order status is OrderStatus.PendingDelivery or OrderStatus.Brewing - if (order.status === OrderStatus.PendingDelivery || order.status === OrderStatus.Brewing) { - await int.reply({ content: "You have Already Brewed this order. select an new one!" }); - return; - } - - let imageUrl: string | undefined; - - if (subcommand === "attach") { - const attachment = int.options.get("attachment", true)?.attachment; - if (!attachment) { - await int.reply({ content: "Attachment is missing or not valid." }); - return; - } - imageUrl = attachment.url; - } else if (subcommand === "url") { - const url = int.options.getString("url", true); - imageUrl = url; - } - - // Include order description in the confirmation message - const confirmationDescription = `Order Details: ${order.details}`; - - const imagePreviewEmbed = new EmbedBuilder() - .setTitle("Image Preview") - .setImage(imageUrl) // Set the image URL as the preview - .toJSON(); - - const confirmSelectMenu = new StringSelectMenuBuilder() - .setCustomId("confirm_brew") - .setPlaceholder("Select an option") - .addOptions([ - { - label: "Yes", - description: "Proceed with brewing the order", - value: "yes", - }, - { - label: "No", - description: "Cancel the brewing process", - value: "no", - }, - ]) - .toJSON(); - - const confirmActionRow = { - type: ComponentType.ActionRow, - components: [confirmSelectMenu], - }; - - await int.reply({ - content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, - embeds: [imagePreviewEmbed], // Include the image preview in the message - components: [confirmActionRow], - ephemeral: true, - }); - - const confirmFilter = (i) => i.customId === "confirm_brew" && i.user.id === int.user.id; - const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); - - confirmCollector.on("collect", async (confirmInteraction) => { - if (confirmInteraction.isStringSelectMenu()) { - const selectedValue = confirmInteraction.values[0]; - if (selectedValue === "yes") { - await confirmInteraction.update({ - content: "You chose to proceed with brewing the order.", - components: [], - }); - - const time = randRange(...constants.brewTimeRangeMs); - await db.orders.update({ - where: { - id: order.id, - }, - data: { - status: OrderStatus.Brewing, - image: imageUrl ?? "default.png", - timeout: new Date(Date.now() + time), - }, - }); - await upsertWorkerInfo(int.user); - - await int.followUp({ - content: "Brewing process started.", - files: imageUrl ? [{ attachment: imageUrl }] : undefined, - }); - } else if (selectedValue === "no") { - await confirmInteraction.update({ - content: "You chose to cancel the brewing process.", - components: [], - }); - } - } - }); - - confirmCollector.on("end", async (collected) => { - if (collected.size === 0) { - await int.followUp("You didn't make a selection in time."); - } - }); - } else { - await int.reply({ content: "You need to claim an order first before attaching an image or providing a URL." }); - } - }); +/* eslint-disable indent */ +/* eslint-disable quotes */ +import {OrderStatus} from "@prisma/client"; +import {db} from "../src/database/database"; +import {upsertWorkerInfo} from "../src/database/workerInfo"; +import {constants} from "../src/providers/config"; +import {permissions} from "../src/providers/permissions"; +import {Command} from "../src/structures/Command"; +import {randRange} from "../src/utils/utils"; +import {CommandInteraction, ComponentType, EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; + +// Define the getClaimedOrders function without specifying OrderStatus +async function getClaimedOrders(userId: string) { + return await db.orders.findMany({ + where: { + claimer: userId, + status: OrderStatus.Preparing, + }, + }); +} + +export const command = new Command( + "ebrew", + "Brews your claimed order." +) + .addSubCommand((subcommand) => + subcommand + .setName("attach") + .setDescription("Attach an image to your order.") + .addAttachmentOption((option) => + option + .setName("attachment") + .setDescription("The image to attach to the order.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("url") + .setDescription("Attach an image to your order by URL.") + .addStringOption((option) => + option + .setName("url") + .setDescription("The URL of the image to attach to the order.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("claim") + .setDescription("Claim an order.") + ) + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Check the subcommand + const subcommand = int.options.getSubcommand(true); + + if (subcommand === "claim") { + // Get a list of claimed orders for the user using getClaimedOrders + const claimedOrders = await getClaimedOrders(int.user.id); + + // Check if the user has claimed orders + if (claimedOrders.length === 0) { + await int.reply({ content: "You don't have any claimed orders to brew." }); + return; + } + + // Build a select menu with claimed order options + const orderOptions = claimedOrders.map(order => ({ + label: `Order ${order.id}`, + value: order.id.toString(), + description: `User: ${order.user.substring(0, 15)}...\nDetails: ${order.details.substring(0, 50)}...`, + // Include user and details in the description, limiting the length + })); + + const orderSelectMenu = new StringSelectMenuBuilder() + .setCustomId("select_order_to_claim") + .setPlaceholder("Select an order to brew") + .addOptions(orderOptions) + .toJSON(); + + const actionRow = { + type: ComponentType.ActionRow, + components: [orderSelectMenu], + }; + + await int.reply({ + content: "Please select an order to brew:", + components: [actionRow], + ephemeral: true, + }); + + // Create a collector to listen for the user's selection + const filter = (i) => i.customId === "select_order_to_claim" && i.user.id === int.user.id; + const collector = int.channel.createMessageComponentCollector({ filter, time: 15000 }); + + collector.on("collect", async (interaction) => { + const selectedOrderId = interaction.values[0]; + + // Fetch the order details using the order ID + const selectedOrder = await db.orders.findUnique({ + where: { + id: selectedOrderId, + }, + }); + + if (!selectedOrder) { + await interaction.update({ content: "Invalid order selected.", components: [] }); + return; + } + + // Check if the order status is not OrderStatus.Preparing + if (selectedOrder.status !== OrderStatus.Preparing) { + await interaction.update({ + content: `You cannot claim an order with status ${selectedOrder.status}.`, + components: [], + }); + return; + } + + // Store the selected order ID in a context variable for future use + int.client.ordersInProcess = { + [int.user.id]: { + orderId: selectedOrderId, + }, + }; + + await interaction.update({ + content: `You selected Order ${selectedOrderId} to brew. Now, you can proceed to attach an image or provide a URL.`, + components: [], + }); + }); + + collector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't select an order in time."); + } + }); + + } else if ((subcommand === "attach" || subcommand === "url") && int.client.ordersInProcess?.[int.user.id]?.orderId) { + // Fetch the order ID from the context variable + const selectedOrderId = int.client.ordersInProcess[int.user.id].orderId; + + // Fetch the order details using the order ID + const order = await db.orders.findUnique({ + where: { + id: selectedOrderId, + }, + }); + + if (!order) { + await int.reply({ content: "Invalid order selected." }); + return; + } + + // Check if the order status is OrderStatus.PendingDelivery or OrderStatus.Brewing + if (order.status === OrderStatus.PendingDelivery || order.status === OrderStatus.Brewing) { + await int.reply({ content: "You have Already Brewed this order. select an new one!" }); + return; + } + + let imageUrl: string | undefined; + + if (subcommand === "attach") { + const attachment = int.options.get("attachment", true)?.attachment; + if (!attachment) { + await int.reply({ content: "Attachment is missing or not valid." }); + return; + } + imageUrl = attachment.url; + } else if (subcommand === "url") { + const url = int.options.getString("url", true); + imageUrl = url; + } + + // Include order description in the confirmation message + const confirmationDescription = `Order Details: ${order.details}`; + + const imagePreviewEmbed = new EmbedBuilder() + .setTitle("Image Preview") + .setImage(imageUrl) // Set the image URL as the preview + .toJSON(); + + const confirmSelectMenu = new StringSelectMenuBuilder() + .setCustomId("confirm_brew") + .setPlaceholder("Select an option") + .addOptions([ + { + label: "Yes", + description: "Proceed with brewing the order", + value: "yes", + }, + { + label: "No", + description: "Cancel the brewing process", + value: "no", + }, + ]) + .toJSON(); + + const confirmActionRow = { + type: ComponentType.ActionRow, + components: [confirmSelectMenu], + }; + + await int.reply({ + content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, + embeds: [imagePreviewEmbed], // Include the image preview in the message + components: [confirmActionRow], + ephemeral: true, + }); + + const confirmFilter = (i) => i.customId === "confirm_brew" && i.user.id === int.user.id; + const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); + + confirmCollector.on("collect", async (confirmInteraction) => { + if (confirmInteraction.isStringSelectMenu()) { + const selectedValue = confirmInteraction.values[0]; + if (selectedValue === "yes") { + await confirmInteraction.update({ + content: "You chose to proceed with brewing the order.", + components: [], + }); + + const time = randRange(...constants.brewTimeRangeMs); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Brewing, + image: imageUrl ?? "default.png", + timeout: new Date(Date.now() + time), + }, + }); + await upsertWorkerInfo(int.user); + + await int.followUp({ + content: "Brewing process started.", + files: imageUrl ? [{ attachment: imageUrl }] : undefined, + }); + } else if (selectedValue === "no") { + await confirmInteraction.update({ + content: "You chose to cancel the brewing process.", + components: [], + }); + } + } + }); + + confirmCollector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't make a selection in time."); + } + }); + } else { + await int.reply({ content: "You need to claim an order first before attaching an image or providing a URL." }); + } + }); diff --git a/src/commands/orders/worker/eclaim.ts b/purgatory/eclaim.ts similarity index 90% rename from src/commands/orders/worker/eclaim.ts rename to purgatory/eclaim.ts index aa70a29..0ffb5eb 100644 --- a/src/commands/orders/worker/eclaim.ts +++ b/purgatory/eclaim.ts @@ -1,163 +1,162 @@ -/* eslint-disable quotes */ -/* eslint-disable indent */ -import { upsertWorkerInfo } from "../../../database/workerInfo"; -import { Command } from "../../../structures/Command"; -import { permissions } from "../../../providers/permissions"; -import { OrderStatus, getClaimedOrder } from "../../../database/orders"; -import { db } from "../../../database/database"; -import { text } from "../../../providers/config"; -import { client } from "../../../providers/client"; -import { CommandInteraction, StringSelectMenuBuilder, ComponentType, EmbedBuilder } from "discord.js"; - -const claimedOrderLocks = new Map(); // Map to store claim locks for each order ID -const claimedOrders = new Set(); // Set to store claimed order IDs - -export const command = new Command("eclaim", "Claims an order.") - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - const existingClaim = await getClaimedOrder(int.user); - if (existingClaim) { - console.log(`Existing claim found for ${int.user.id} on order ${existingClaim.id}`); - await int.reply({ content: text.commands.claim.existing, ephemeral: true }); - return; - } - - // Retrieve the selected values from interaction - const orderIds = int.customId === "claim_order" - ? int.values - : int.message?.components - .find((row) => row.components.some((component) => component.customId === "claim_order")) - .components.find((component) => component.customId === "claim_order").value.split(","); - - const orders = await db.orders.findMany({ - where: { - id: { in: orderIds }, - status: OrderStatus.Unprepared, - claimer: null, // Check if the order is not already claimed - }, - select: { - id: true, - user: true, - details: true, - status: true, - }, - }); - - if (orders.length === 0) { - await int.reply({ content: "There are no available orders to claim.", ephemeral: true }); - return; - } - - const options = orders.map(order => { - const details = order.details.length > 50 ? `${order.details.substring(0, 47)}...` : order.details; - const user = order.user.length > 50 ? `${order.user.substring(0, 47)}...` : order.user; - - return { - label: order.id, - description: `Details: ${details}\nUser: ${user}\nStatus: ${order.status}`, - value: order.id, - details: order.details, - }; - }); - const minValues = Math.min(1, orders.length); - const maxValues = Math.min(3, orders.length); - - const selectMenu = new StringSelectMenuBuilder() - .setCustomId("claim_order") - .setPlaceholder("Select orders to claim") - .addOptions(options) - .setMinValues(minValues) // Set minimum selected values - .setMaxValues(maxValues); // Set maximum selected values - - const actionRow = { - type: ComponentType.ActionRow, - components: [selectMenu], - }; - - const embed = new EmbedBuilder() - .setDescription("Please select orders to claim.") - .setColor("#00FF00"); - - try { - const reply = await int.reply({ - embeds: [embed], - components: [actionRow], - ephemeral: true, - }); - - // Schedule a deletion of the reply after a certain time (e.g., 10 seconds) - setTimeout(() => { - reply.delete(); - }, 10000); - } catch (error) { - console.error("Error replying to interaction:", error); - } - }); - -client.on("interactionCreate", async (interaction) => { - if (!interaction.isStringSelectMenu()) return; - - const componentId = interaction.customId; - if (componentId === "claim_order") { - // Retrieve the selected values from interaction - const orderIds = interaction.values || []; - const claimedOrderMessages = []; - - for (let i = 0; i < orderIds.length; i++) { - const orderId = orderIds[i]; - try { - // Check if a claim lock exists for this order - if (claimedOrderLocks.has(orderId) && claimedOrderLocks.get(orderId)) { - claimedOrderMessages.push(`Another user is currently claiming Order ${orderId}. Please try again later.`); - continue; - } - - // Set a claim lock for this order - claimedOrderLocks.set(orderId, true); - - // Check if the order is still unclaimed in the database - const unclaimedOrder = await db.orders.findFirst({ - where: { id: orderId, status: OrderStatus.Unprepared, claimer: null }, - }); - - if (!unclaimedOrder) { - console.log(`Order ${orderId} is already claimed.`); - claimedOrderMessages.push(`Order ${orderId} has already been claimed.`); - claimedOrderLocks.delete(orderId); // Release the claim lock for this order - continue; - } - - // Update the claimed order and release the claim lock - await db.orders.update({ - where: { id: orderId }, - data: { claimer: interaction.user.id, status: OrderStatus.Preparing }, - }); - - claimedOrders.add(orderId); // Store claimed order ID in the Set - claimedOrderLocks.delete(orderId); - - claimedOrderMessages.push(`Order ${orderId} claimed successfully.`); - } catch (error) { - console.error(`Error processing Order ${orderId}:`, error); - claimedOrderMessages.push(`Error processing Order ${orderId}`); - } finally { - claimedOrderLocks.delete(orderId); - } - } - - // Send a single reply summarizing the claimed orders - try { - const reply = await interaction.reply({ - content: `Claiming results:\n${claimedOrderMessages.join('\n')}`, - ephemeral: false, - }); - - // Remove the first reply after a certain time (e.g., 5 seconds) - setTimeout(() => { - reply.delete(); - }, 5000); - } catch (error) { - console.error("Error replying to interaction:", error); - } - } -}); +/* eslint-disable quotes */ +/* eslint-disable indent */ +import {Command} from "../src/structures/Command"; +import {permissions} from "../src/providers/permissions"; +import {getClaimedOrder, OrderStatus} from "../src/database/orders"; +import {db} from "../src/database/database"; +import {text} from "../src/providers/config"; +import {client} from "../src/providers/client"; +import {CommandInteraction, ComponentType, EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; + +const claimedOrderLocks = new Map(); // Map to store claim locks for each order ID +const claimedOrders = new Set(); // Set to store claimed order IDs + +export const command = new Command("eclaim", "Claims an order.") + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + const existingClaim = await getClaimedOrder(int.user); + if (existingClaim) { + console.log(`Existing claim found for ${int.user.id} on order ${existingClaim.id}`); + await int.reply({ content: text.commands.claim.existing, ephemeral: true }); + return; + } + + // Retrieve the selected values from interaction + const orderIds = int.customId === "claim_order" + ? int.values + : int.message?.components + .find((row) => row.components.some((component) => component.customId === "claim_order")) + .components.find((component) => component.customId === "claim_order").value.split(","); + + const orders = await db.orders.findMany({ + where: { + id: { in: orderIds }, + status: OrderStatus.Unprepared, + claimer: null, // Check if the order is not already claimed + }, + select: { + id: true, + user: true, + details: true, + status: true, + }, + }); + + if (orders.length === 0) { + await int.reply({ content: "There are no available orders to claim.", ephemeral: true }); + return; + } + + const options = orders.map(order => { + const details = order.details.length > 50 ? `${order.details.substring(0, 47)}...` : order.details; + const user = order.user.length > 50 ? `${order.user.substring(0, 47)}...` : order.user; + + return { + label: order.id, + description: `Details: ${details}\nUser: ${user}\nStatus: ${order.status}`, + value: order.id, + details: order.details, + }; + }); + const minValues = Math.min(1, orders.length); + const maxValues = Math.min(3, orders.length); + + const selectMenu = new StringSelectMenuBuilder() + .setCustomId("claim_order") + .setPlaceholder("Select orders to claim") + .addOptions(options) + .setMinValues(minValues) // Set minimum selected values + .setMaxValues(maxValues); // Set maximum selected values + + const actionRow = { + type: ComponentType.ActionRow, + components: [selectMenu], + }; + + const embed = new EmbedBuilder() + .setDescription("Please select orders to claim.") + .setColor("#00FF00"); + + try { + const reply = await int.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true, + }); + + // Schedule a deletion of the reply after a certain time (e.g., 10 seconds) + setTimeout(() => { + reply.delete(); + }, 10000); + } catch (error) { + console.error("Error replying to interaction:", error); + } + }); + +client.on("interactionCreate", async (interaction) => { + if (!interaction.isStringSelectMenu()) return; + + const componentId = interaction.customId; + if (componentId === "claim_order") { + // Retrieve the selected values from interaction + const orderIds = interaction.values || []; + const claimedOrderMessages = []; + + for (let i = 0; i < orderIds.length; i++) { + const orderId = orderIds[i]; + try { + // Check if a claim lock exists for this order + if (claimedOrderLocks.has(orderId) && claimedOrderLocks.get(orderId)) { + claimedOrderMessages.push(`Another user is currently claiming Order ${orderId}. Please try again later.`); + continue; + } + + // Set a claim lock for this order + claimedOrderLocks.set(orderId, true); + + // Check if the order is still unclaimed in the database + const unclaimedOrder = await db.orders.findFirst({ + where: { id: orderId, status: OrderStatus.Unprepared, claimer: null }, + }); + + if (!unclaimedOrder) { + console.log(`Order ${orderId} is already claimed.`); + claimedOrderMessages.push(`Order ${orderId} has already been claimed.`); + claimedOrderLocks.delete(orderId); // Release the claim lock for this order + continue; + } + + // Update the claimed order and release the claim lock + await db.orders.update({ + where: { id: orderId }, + data: { claimer: interaction.user.id, status: OrderStatus.Preparing }, + }); + + claimedOrders.add(orderId); // Store claimed order ID in the Set + claimedOrderLocks.delete(orderId); + + claimedOrderMessages.push(`Order ${orderId} claimed successfully.`); + } catch (error) { + console.error(`Error processing Order ${orderId}:`, error); + claimedOrderMessages.push(`Error processing Order ${orderId}`); + } finally { + claimedOrderLocks.delete(orderId); + } + } + + // Send a single reply summarizing the claimed orders + try { + const reply = await interaction.reply({ + content: `Claiming results:\n${claimedOrderMessages.join('\n')}`, + ephemeral: false, + }); + + // Remove the first reply after a certain time (e.g., 5 seconds) + setTimeout(() => { + reply.delete(); + }, 5000); + } catch (error) { + console.error("Error replying to interaction:", error); + } + } +}); diff --git a/src/commands/Devs/Select.ts b/src/commands/Devs/Select.ts index 03303d7..a6c19a6 100644 --- a/src/commands/Devs/Select.ts +++ b/src/commands/Devs/Select.ts @@ -1,13 +1,6 @@ -import { development } from "../../providers/env"; -import { execSync } from "child_process"; -import { format } from "../../utils/string"; -import { transpile } from "typescript"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { client } from "../../providers/client"; -import { channel } from "diagnostics_channel"; -import { StringSelectMenuBuilder, EmbedBuilder } from "discord.js"; -import { ExtendedCommand } from "../../structures/extendedCommand"; +import {permissions} from "../../providers/permissions"; +import {EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; +import {ExtendedCommand} from "../../structures/extendedCommand"; export const command = new ExtendedCommand( { name: "select", description: "Select Menu Example.", local: true } @@ -22,19 +15,19 @@ export const command = new ExtendedCommand( label: "Option 1", value: "option_1", description: "The first option", - type: 3 // changed from "SELECT_MENU" to 3 + // type: 3 // changed from "SELECT_MENU" to 3 }, { label: "Option 2", value: "option_2", description: "The second option", - type: 3 // changed from "SELECT_MENU" to 3 + // type: 3 // changed from "SELECT_MENU" to 3 }, { label: "Option 3", value: "option_3", description: "The third option", - type: 3 // changed from "SELECT_MENU" to 3 + // type: 3 // changed from "SELECT_MENU" to 3 }, ]); diff --git a/src/commands/Devs/avatar.ts b/src/commands/Devs/avatar.ts index 7e161a6..aa91d17 100644 --- a/src/commands/Devs/avatar.ts +++ b/src/commands/Devs/avatar.ts @@ -1,10 +1,9 @@ -import { ExtendedCommand } from "./../../structures/extendedCommand"; +import {ExtendedCommand} from "./../../structures/extendedCommand"; /* eslint-disable quotes */ /* eslint-disable indent */ -import { client } from "../../providers/client"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { CommandInteraction, EmbedBuilder } from "discord.js"; +import {client} from "../../providers/client"; +import {permissions} from "../../providers/permissions"; +import {ChatInputCommandInteraction, CommandInteraction, EmbedBuilder} from "discord.js"; export const command = new ExtendedCommand({ name: "avatar", description: "Some info." }) .addPermission(permissions.developer) // AnyRank @@ -21,7 +20,7 @@ export const command = new ExtendedCommand({ name: "avatar", description: "Some ) .setExecutor(async (int: CommandInteraction) => { // Check the subcommand - const subcommand = int.options.getSubcommand(true); + const subcommand = int instanceof ChatInputCommandInteraction ? int.options.getSubcommand(true) : int.options.get("subcommand", true)?.value as string; if (subcommand === "attach") { // Defer the reply to avoid potential issues with the interaction being deleted diff --git a/src/commands/Devs/button.ts b/src/commands/Devs/button.ts index 864303e..37e75bd 100644 --- a/src/commands/Devs/button.ts +++ b/src/commands/Devs/button.ts @@ -1,14 +1,6 @@ -import { development } from "../../providers/env"; -import { execSync } from "child_process"; -import { format } from "../../utils/string"; -import { transpile } from "typescript"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { client } from "../../providers/client"; -import { channel } from "diagnostics_channel"; -import { ButtonBuilder } from "discord.js"; -import { ButtonStyle, ActionRowBuilder } from "discord.js"; -import { ExtendedCommand } from "../../structures/extendedCommand"; +import {permissions} from "../../providers/permissions"; +import {ActionRowBuilder, ButtonBuilder, ButtonStyle} from "discord.js"; +import {ExtendedCommand} from "../../structures/extendedCommand"; export const command = new ExtendedCommand( { name: "but", description: "hm.", local: true } @@ -30,8 +22,8 @@ export const command = new ExtendedCommand( .setStyle(ButtonStyle.Success) .setCustomId("3"); - const row = new ActionRowBuilder() - .addComponents(button1, button2, button3,); + const row = new ActionRowBuilder() + .addComponents(button1, button2, button3); await int.reply({ content: "Here are three buttons:", diff --git a/src/commands/Devs/currencyedit.ts b/src/commands/Devs/currencyedit.ts index 6d9a595..870440e 100644 --- a/src/commands/Devs/currencyedit.ts +++ b/src/commands/Devs/currencyedit.ts @@ -1,10 +1,8 @@ /* eslint-disable indent */ -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { CommandInteraction, EmbedBuilder } from "discord.js"; -import { getUserInfo, updateBalance } from "../../database/userInfo"; -import { ExtendedCommand } from "../../structures/extendedCommand"; -import { config } from "../../providers/config"; +import {permissions} from "../../providers/permissions"; +import {getUserInfo, updateBalance} from "../../database/userInfo"; +import {ExtendedCommand} from "../../structures/extendedCommand"; +import {config} from "../../providers/config"; export const command = new ExtendedCommand({ name: "currencyedit", description: "Manage user balance.", servers: [config.servers.extraServer], local: true }) .addPermission(permissions.developer) @@ -36,7 +34,7 @@ export const command = new ExtendedCommand({ name: "currencyedit", description: .setRequired(true) ) ) - .setExecutor(async (int: CommandInteraction) => { + .setExecutor(async (int) => { const subcommand = int.options.getSubcommand(true); if (subcommand === "set") { diff --git a/src/commands/Devs/menu.ts b/src/commands/Devs/menu.ts index 1c1e048..4cd4ea4 100644 --- a/src/commands/Devs/menu.ts +++ b/src/commands/Devs/menu.ts @@ -1,9 +1,8 @@ /* eslint-disable indent */ -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { EmbedBuilder, CommandInteraction } from "discord.js"; -import { db } from "../../database/database"; -import { ExtendedCommand } from "../../structures/extendedCommand"; +import {permissions} from "../../providers/permissions"; +import {EmbedBuilder} from "discord.js"; +import {db} from "../../database/database"; +import {ExtendedCommand} from "../../structures/extendedCommand"; export const command = new ExtendedCommand({ name: "menu", description: "Manage menu Items.", local: true }) .addPermission(permissions.developer) @@ -83,7 +82,7 @@ export const command = new ExtendedCommand({ name: "menu", description: "Manage .setName("list") .setDescription("List all menu items.") ) - .setExecutor(async (int: CommandInteraction) => { + .setExecutor(async (int) => { const subcommand = int.options.getSubcommand(true); if (subcommand === "add") { diff --git a/src/commands/Devs/transfer.ts b/src/commands/Devs/transfer.ts index 3308e67..69ac840 100644 --- a/src/commands/Devs/transfer.ts +++ b/src/commands/Devs/transfer.ts @@ -1,8 +1,10 @@ +// @ts-nocheck +// todo: fix when this file is used. /* eslint-disable indent */ -import { PrismaClient } from "@prisma/client"; -import { CommandInteraction } from "discord.js"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; +import {PrismaClient} from "@prisma/client"; +import {CommandInteraction} from "discord.js"; +import {permissions} from "../../providers/permissions"; +import {Command} from "../../structures/Command"; const prisma = new PrismaClient(); diff --git a/src/commands/Devs/workst.ts b/src/commands/Devs/workst.ts index d0c5847..e728432 100644 --- a/src/commands/Devs/workst.ts +++ b/src/commands/Devs/workst.ts @@ -1,17 +1,15 @@ /* eslint-disable indent */ -import { WorkerInfo } from "@prisma/client"; -import { permissions } from "../../providers/permissions"; -import { Command } from "../../structures/Command"; -import { getWorkerInfo } from "../../database/workerInfo"; // Update with the correct path -import { CommandInteraction, EmbedBuilder } from "discord.js"; -import { ExtendedCommand } from "../../structures/extendedCommand"; +import {permissions} from "../../providers/permissions"; +import {getWorkerInfo} from "../../database/workerInfo"; // Update with the correct path +import {EmbedBuilder} from "discord.js"; +import {ExtendedCommand} from "../../structures/extendedCommand"; export const command = new ExtendedCommand( { name: "workst", description: "view a worker's stats by their id.", local: true } ) .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { + .setExecutor(async (int) => { try { const userId = int.options.getString("user_id"); @@ -32,8 +30,8 @@ export const command = new ExtendedCommand( .addFields([ { name: "Preparations", value: workerInfo.preparations.toString(), inline: true }, { name: "Deliveries", value: workerInfo.deliveries.toString(), inline: true }, - { name: "Claim Usage Count", value: workerInfo.claimUsageCount.toString(), inline: true }, - { name: "Brew Usage Count", value: workerInfo.brewUsageCount.toString(), inline: true } + // { name: "Claim Usage Count", value: workerInfo.claimUsageCount.toString(), inline: true }, + // { name: "Brew Usage Count", value: workerInfo.brewUsageCount.toString(), inline: true } ]) .setTimestamp(); diff --git a/src/commands/Devs/ws.ts b/src/commands/Devs/ws.ts index 2e55eb8..3185a9d 100644 --- a/src/commands/Devs/ws.ts +++ b/src/commands/Devs/ws.ts @@ -1,12 +1,10 @@ /* eslint-disable quotes */ /* eslint-disable indent */ -import { CommandInteraction, EmbedBuilder, UserResolvable } from "discord.js"; -import { db } from "../../database/database"; -import { getWorkerStats } from "../../database/workerstats"; -import { resolveUserId } from "../../utils/id"; -import { Command } from "../../structures/Command"; -import { permissions } from "../../providers/permissions"; -import { ExtendedCommand } from "../../structures/extendedCommand"; +import {CommandInteraction, EmbedBuilder} from "discord.js"; +import {getWorkerStats} from "../../database/workerstats"; +import {resolveUserId} from "../../utils/id"; +import {permissions} from "../../providers/permissions"; +import {ExtendedCommand} from "../../structures/extendedCommand"; export const command = new ExtendedCommand( { name: "ws", description: "View worker statistics.", local: true } @@ -30,6 +28,10 @@ export const command = new ExtendedCommand( } const workerStats = await getWorkerStats(userId); + if (!workerStats) { + await int.reply({content: "No worker statistics found for this user.", ephemeral: true}); + return; + } const embed = new EmbedBuilder() .setTitle(`${targetUser ? targetUser.tag : int.user.username}'s Worker Statistics`) diff --git a/src/commands/economy/crime.ts b/src/commands/economy/crime.ts index 374715b..60b0646 100644 --- a/src/commands/economy/crime.ts +++ b/src/commands/economy/crime.ts @@ -1,40 +1,41 @@ //crime.ts -import { db } from "../../database/database"; -import { upsertUserInfo } from "../../database/userInfo"; -import { constants, text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {db} from "../../database/database"; +import {upsertUserInfo} from "../../database/userInfo"; +import {constants, text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; +import {randRange, sampleArray} from "../../utils/utils"; + const cooldowns: Record = {}; export const command = new Command("crime", "Try your chances on doing crime!") - .setExecutor(async int => { - if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { - await int.reply( + .setExecutor(async ({reply, user}) => { + if (user.id in cooldowns && cooldowns[user.id] >= Date.now()) { + await reply( format( text.errors.cooldown, - pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) + pms(cooldowns[user.id] - Date.now(), {compact: true, secondsDecimalDigits: 1}) ) ); return; } const result = [ - "Succesful", + "Successful", "Failure" ]; - const awnser = result[Math.floor(Math.random() * result.length)]; - if (awnser === "Failure") { - const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const answer = result[Math.floor(Math.random() * result.length)]; + if (answer === "Failure") { + const info = await upsertUserInfo(user); const obtained = randRange(...constants.crime.amountRange); - cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; + cooldowns[user.id] = Date.now() + constants.crime.cooldownMs; await db.userInfo.update({ where: { id: info.id }, data: { balance: { decrement: obtained } } }); - await int.reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); + await reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); } else { - const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const info = await upsertUserInfo(user); const obtained = randRange(...constants.crime.amountRange); - cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; + cooldowns[user.id] = Date.now() + constants.crime.cooldownMs; await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); - await int.reply(format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``)); + await reply(format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``)); } }); diff --git a/src/commands/economy/daily.ts b/src/commands/economy/daily.ts index 532f62d..e48c56f 100644 --- a/src/commands/economy/daily.ts +++ b/src/commands/economy/daily.ts @@ -1,11 +1,12 @@ //daily.ts -import { db } from "../../database/database"; -import { upsertUserInfo } from "../../database/userInfo"; -import { constants, text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {db} from "../../database/database"; +import {upsertUserInfo} from "../../database/userInfo"; +import {constants, text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; +import {randRange, sampleArray} from "../../utils/utils"; + const cooldowns: Record = {}; export const command = new Command("daily", "Get your daily income!.") @@ -19,7 +20,7 @@ export const command = new Command("daily", "Get your daily income!.") ); return; } - const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const info = await upsertUserInfo(int.user); const obtained = randRange(...constants.daily.amountRange); cooldowns[int.user.id] = Date.now() + constants.daily.cooldownMs; await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); diff --git a/src/commands/economy/drinkroullete.ts b/src/commands/economy/drinkroulette.ts similarity index 63% rename from src/commands/economy/drinkroullete.ts rename to src/commands/economy/drinkroulette.ts index 2e3d5a7..7ce19b3 100644 --- a/src/commands/economy/drinkroullete.ts +++ b/src/commands/economy/drinkroulette.ts @@ -1,34 +1,34 @@ -import { db } from "../../database/database"; -import { generateOrderId, hasActiveOrder, } from "../../database/orders"; -import { text } from "../../providers/config"; -import { mainChannels, mainRoles } from "../../providers/discord"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; -import { sampleArray } from "../../utils/utils"; - -export const command = new Command("drinkroullete", "Get a random drink ordered!") - .setExecutor(async int => { - if (await hasActiveOrder(int.user)) { - await int.reply(text.commands.order.exists); - return; - } - const drink = format(sampleArray(text.commands.drinkingr.drinks)); - const order = await db.orders.create({ - data: { - id: await generateOrderId(), - user: int.user.id, - details: drink, - channel: int.channelId, - guild: int.guildId, - }, - }); - await mainChannels.brewery.send( - format(text.commands.order.created, { - details: drink, - duty: mainRoles.duty.toString(), - id: order.id, - tag: int.user.username, - }) - ); - await int.reply(`You got ${order.details}! Please enjoy your free gain!`); - }); +import {db} from "../../database/database"; +import {generateOrderId, hasActiveOrder,} from "../../database/orders"; +import {text} from "../../providers/config"; +import {mainChannels, mainRoles} from "../../providers/discord"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; +import {sampleArray} from "../../utils/utils"; + +export const command = new Command("drinkroullete", "Get a random drink ordered!") + .setExecutor(async int => { + if (await hasActiveOrder(int.user)) { + await int.reply(text.commands.order.exists); + return; + } + const drink = format(sampleArray(text.commands.drinkingr.drinks), ""); //todo: check if this is correct pls + const order = await db.orders.create({ + data: { + id: await generateOrderId(), + user: int.user.id, + details: drink, + channel: int.channelId, + guild: int.guildId, + }, + }); + await mainChannels.brewery.send( + format(text.commands.order.created, { + details: drink, + duty: mainRoles.duty.toString(), + id: order.id, + tag: int.user.username, + }) + ); + await int.reply(`You got ${order.details}! Please enjoy your free gain!`); + }); diff --git a/src/commands/economy/work.ts b/src/commands/economy/work.ts index 7361990..b209eed 100644 --- a/src/commands/economy/work.ts +++ b/src/commands/economy/work.ts @@ -1,13 +1,14 @@ /* eslint-disable quotes */ /* eslint-disable linebreak-style */ //work.ts -import { db } from "../../database/database"; -import { upsertUserInfo } from "../../database/userInfo"; -import { constants, text } from "../../providers/config"; -import { Command } from "../../structures/Command"; -import { format } from "../../utils/string"; +import {db} from "../../database/database"; +import {upsertUserInfo} from "../../database/userInfo"; +import {constants, text} from "../../providers/config"; +import {Command} from "../../structures/Command"; +import {format} from "../../utils/string"; import pms from "pretty-ms"; -import { randRange, sampleArray } from "../../utils/utils"; +import {randRange, sampleArray} from "../../utils/utils"; + const cooldowns: Record = {}; export const command = new Command("work", "Gets you some money.") @@ -21,7 +22,7 @@ export const command = new Command("work", "Gets you some money.") ); return; } - const info = await upsertUserInfo(int.user, int.guild?.id || ''); + const info = await upsertUserInfo(int.user); const obtained = randRange(...constants.work.amountRange); cooldowns[int.user.id] = Date.now() + constants.work.cooldownMs; await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); diff --git a/src/commands/orders/worker/brew.ts b/src/commands/orders/worker/brew.ts index 9257b75..b01702d 100644 --- a/src/commands/orders/worker/brew.ts +++ b/src/commands/orders/worker/brew.ts @@ -1,238 +1,237 @@ /* eslint-disable indent */ /* eslint-disable quotes */ -import { OrderStatus } from "@prisma/client"; -import { db } from "../../../database/database"; -import { generateOrderId, getClaimedOrder, hasActiveOrder, matchActiveOrder } from "../../../database/orders"; -import { upsertWorkerInfo } from "../../../database/workerInfo"; -import { client } from "../../../providers/client"; -import { config, constants, text } from "../../../providers/config"; -import { mainGuild } from "../../../providers/discord"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { format } from "../../../utils/string"; -import { randRange } from "../../../utils/utils"; -import { StringSelectMenuBuilder, CommandInteraction, ComponentType, EmbedBuilder } from "discord.js"; -import { upsertWorkerStats, handleBrew } from "../../../database/workerstats"; // Import the workerstats functions -import { ExtendedCommand } from "../../../structures/extendedCommand"; +import {OrderStatus} from "@prisma/client"; +import {db} from "../../../database/database"; +import {getClaimedOrder} from "../../../database/orders"; +import {upsertWorkerInfo} from "../../../database/workerInfo"; +import {constants} from "../../../providers/config"; +import {permissions} from "../../../providers/permissions"; +import {randRange} from "../../../utils/utils"; +import {CollectedMessageInteraction, ComponentType, EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; +import {upsertWorkerStats} from "../../../database/workerstats"; // Import the workerstats functions +import {ExtendedCommand} from "../../../structures/extendedCommand"; +import {IllegalStateError} from "../../../utils/error"; export const command = new ExtendedCommand( - { name: "brew", description: "Brews your claimed order.", local: true } + {name: "brew", description: "Brews your claimed order.", local: true} ) - .addSubCommand((subcommand) => - subcommand - .setName("attach") - .setDescription("Attach an image to your order.") - .addAttachmentOption((option) => - option - .setName("attachment") - .setDescription("The image to attach to the order.") - .setRequired(true) - ) - ) - .addSubCommand((subcommand) => - subcommand - .setName("url") - .setDescription("Attach an image to your order by URL.") - .addStringOption((option) => - option - .setName("url") - .setDescription("The URL of the image to attach to the order.") - .setRequired(true) - ) - ) - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - const order = await getClaimedOrder(int.user); - if (!order) { - await int.reply({ content: "You don't have a claimed order." }); - return; - } - - // Set last command to "brew" when brewing - await upsertWorkerStats(int.user, { ordersBrewed: 1, lastCommand: "brew" }); - - const subcommand = int.options.getSubcommand(true); - let imageUrl: string | undefined; - - if (subcommand === "attach") { - const attachment = int.options.get("attachment", true)?.attachment; - if (!attachment) { - await int.reply({ content: "Attachment is missing or not valid." }); - return; - } - imageUrl = attachment.url; - - // Create an embed with the image preview - const imagePreviewEmbed = new EmbedBuilder() - .setTitle("Image Preview") - .setImage(imageUrl) // Set the image URL as the preview - .toJSON(); - - const confirmationDescription = `Order Details: ${order.details}`; - - const confirmSelectMenu = new StringSelectMenuBuilder() - .setCustomId("confirm_brew") - .setPlaceholder("Select an option") - .addOptions([ - { - label: "Yes", - description: "Proceed with brewing the order", - value: "yes", - }, - { - label: "No", - description: "Cancel the brewing process", - value: "no", - }, - ]) - .toJSON(); - - const confirmActionRow = { - type: ComponentType.ActionRow, - components: [confirmSelectMenu], - }; - - await int.reply({ - content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, - embeds: [imagePreviewEmbed], // Include the image preview in the message - components: [confirmActionRow], - ephemeral: true, - }); - - const confirmFilter = (i) => i.customId === "confirm_brew" && i.user.id === int.user.id; - const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); - - confirmCollector.on("collect", async (confirmInteraction) => { - if (confirmInteraction.isStringSelectMenu()) { - const selectedValue = confirmInteraction.values[0]; - if (selectedValue === "yes") { - await confirmInteraction.update({ - content: "You chose to proceed with brewing the order.", - components: [], - }); - - const time = randRange(...constants.brewTimeRangeMs); - await db.orders.update({ - where: { - id: order.id, - }, - data: { - status: OrderStatus.Brewing, - image: imageUrl ?? "default.png", - timeout: new Date(Date.now() + time), - }, - }); - await int.followUp({ - content: "Brewing process started.", - files: imageUrl ? [{ attachment: imageUrl }] : undefined, - }); - } else if (selectedValue === "no") { - await confirmInteraction.update({ - content: "You chose to cancel the brewing process.", - components: [], - }); - } - } - }); - - confirmCollector.on("end", async (collected) => { - if (collected.size === 0) { - await int.followUp("You didn't make a selection in time."); - } - }); - - } else if (subcommand === "url") { - const url = int.options.getString("url", true); - imageUrl = url; - - // Create an embed with the image preview - const imagePreviewEmbed = new EmbedBuilder() - .setTitle("Image Preview") - .setImage(imageUrl) // Set the image URL as the preview - .toJSON(); - - const confirmationDescription = `Order Details: ${order.details}`; - - const confirmSelectMenu = new StringSelectMenuBuilder() - .setCustomId("confirm_brew_url") - .setPlaceholder("Select an option") - .addOptions([ - { - label: "Yes", - description: "Proceed with brewing the order", - value: "yes", - }, - { - label: "No", - description: "Cancel the brewing process", - value: "no", - }, - ]) - .toJSON(); - - const confirmActionRow = { - type: ComponentType.ActionRow, - components: [confirmSelectMenu], - }; - - await int.reply({ - content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, - embeds: [imagePreviewEmbed], // Include the image preview in the message - components: [confirmActionRow], - ephemeral: true, - }); - - const confirmFilter = (i) => i.customId === "confirm_brew_url" && i.user.id === int.user.id; - const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); - - confirmCollector.on("collect", async (confirmInteraction) => { - if (confirmInteraction.isStringSelectMenu()) { - const selectedValue = confirmInteraction.values[0]; - if (selectedValue === "yes") { - await confirmInteraction.update({ - content: "You chose to proceed with brewing the order.", - components: [], - }); - - const time = randRange(...constants.brewTimeRangeMs); - await db.orders.update({ - where: { - id: order.id, - }, - data: { - status: OrderStatus.Brewing, - image: imageUrl ?? "default.png", - timeout: new Date(Date.now() + time), - }, - }); - - // Update worker info - await upsertWorkerInfo(int.user); - await db.workerInfo.update({ - where: { - id: int.user.id, - }, - data: { - preparations: { increment: 1 }, - }, - }); - await int.followUp({ - content: "Brewing process started.", - files: imageUrl ? [{ attachment: imageUrl }] : undefined, - }); - } else if (selectedValue === "no") { - await confirmInteraction.update({ - content: "You chose to cancel the brewing process.", - components: [], - }); - } - } - }); - - confirmCollector.on("end", async (collected) => { - if (collected.size === 0) { - await int.followUp("You didn't make a selection in time."); - } - }); - } - }); + .addSubCommand((subcommand) => + subcommand + .setName("attach") + .setDescription("Attach an image to your order.") + .addAttachmentOption((option) => + option + .setName("attachment") + .setDescription("The image to attach to the order.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("url") + .setDescription("Attach an image to your order by URL.") + .addStringOption((option) => + option + .setName("url") + .setDescription("The URL of the image to attach to the order.") + .setRequired(true) + ) + ) + .addPermission(permissions.employee) + .setExecutor(async (int) => { + const order = await getClaimedOrder(int.user); + if (!order) { + await int.reply({content: "You don't have a claimed order."}); + return; + } + + // Set last command to "brew" when brewing + await upsertWorkerStats(int.user, {ordersBrewed: 1, lastCommand: "brew"}); + + const subcommand = int.options.getSubcommand(true); + let imageUrl: string | undefined; + + if (subcommand === "attach") { + const attachment = int.options.get("attachment", true)?.attachment; + if (!attachment) { + await int.reply({content: "Attachment is missing or not valid."}); + return; + } + imageUrl = attachment.url; + + // Create an embed with the image preview + const imagePreviewEmbed = new EmbedBuilder() + .setTitle("Image Preview") + .setImage(imageUrl) // Set the image URL as the preview + .toJSON(); + + const confirmationDescription = `Order Details: ${order.details}`; + + const confirmSelectMenu = new StringSelectMenuBuilder() + .setCustomId("confirm_brew") + .setPlaceholder("Select an option") + .addOptions([ + { + label: "Yes", + description: "Proceed with brewing the order", + value: "yes", + }, + { + label: "No", + description: "Cancel the brewing process", + value: "no", + }, + ]); + + const confirmActionRow = { + type: ComponentType.ActionRow, + components: [confirmSelectMenu], + }; + + await int.reply({ + content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, + embeds: [imagePreviewEmbed], // Include the image preview in the message + components: [confirmActionRow], + ephemeral: true, + }); + + if (!int.channel) throw new IllegalStateError("Channel is not available."); + + const confirmFilter = (i: CollectedMessageInteraction) => i.customId === "confirm_brew" && i.user.id === int.user.id; + const confirmCollector = int.channel.createMessageComponentCollector({filter: confirmFilter, time: 15000}); + + confirmCollector.on("collect", async (confirmInteraction) => { + if (confirmInteraction.isStringSelectMenu()) { + const selectedValue = confirmInteraction.values[0]; + if (selectedValue === "yes") { + await confirmInteraction.update({ + content: "You chose to proceed with brewing the order.", + components: [], + }); + + const time = randRange(...constants.brewTimeRangeMs); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Brewing, + image: imageUrl ?? "default.png", + timeout: new Date(Date.now() + time), + }, + }); + await int.followUp({ + content: "Brewing process started.", + files: imageUrl ? [{attachment: imageUrl}] : undefined, + }); + } else if (selectedValue === "no") { + await confirmInteraction.update({ + content: "You chose to cancel the brewing process.", + components: [], + }); + } + } + }); + + confirmCollector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't make a selection in time."); + } + }); + + } else if (subcommand === "url") { + const url = int.options.getString("url", true); + imageUrl = url; + + // Create an embed with the image preview + const imagePreviewEmbed = new EmbedBuilder() + .setTitle("Image Preview") + .setImage(imageUrl) // Set the image URL as the preview + .toJSON(); + + const confirmationDescription = `Order Details: ${order.details}`; + + const confirmSelectMenu = new StringSelectMenuBuilder() + .setCustomId("confirm_brew_url") + .setPlaceholder("Select an option") + .addOptions([ + { + label: "Yes", + description: "Proceed with brewing the order", + value: "yes", + }, + { + label: "No", + description: "Cancel the brewing process", + value: "no", + }, + ]); + + const confirmActionRow = { + type: ComponentType.ActionRow, + components: [confirmSelectMenu], + }; + + await int.reply({ + content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, + embeds: [imagePreviewEmbed], // Include the image preview in the message + components: [confirmActionRow], + ephemeral: true, + }); + + if (!int.channel) throw new IllegalStateError("Channel is not available."); + + const confirmFilter = (i: CollectedMessageInteraction) => i.customId === "confirm_brew_url" && i.user.id === int.user.id; + const confirmCollector = int.channel.createMessageComponentCollector({filter: confirmFilter, time: 15000}); + + confirmCollector.on("collect", async (confirmInteraction) => { + if (confirmInteraction.isStringSelectMenu()) { + const selectedValue = confirmInteraction.values[0]; + if (selectedValue === "yes") { + await confirmInteraction.update({ + content: "You chose to proceed with brewing the order.", + components: [], + }); + + const time = randRange(...constants.brewTimeRangeMs); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Brewing, + image: imageUrl ?? "default.png", + timeout: new Date(Date.now() + time), + }, + }); + + // Update worker info + await upsertWorkerInfo(int.user); + await db.workerInfo.update({ + where: { + id: int.user.id, + }, + data: { + preparations: {increment: 1}, + }, + }); + await int.followUp({ + content: "Brewing process started.", + files: imageUrl ? [{attachment: imageUrl}] : undefined, + }); + } else if (selectedValue === "no") { + await confirmInteraction.update({ + content: "You chose to cancel the brewing process.", + components: [], + }); + } + } + }); + + confirmCollector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't make a selection in time."); + } + }); + } + }); diff --git a/src/commands/orders/worker/editstatus.ts b/src/commands/orders/worker/editstatus.ts index e58540a..3b39a81 100644 --- a/src/commands/orders/worker/editstatus.ts +++ b/src/commands/orders/worker/editstatus.ts @@ -1,11 +1,8 @@ /* eslint-disable indent */ -import { OrderStatus, matchActiveOrder } from "../../../database/orders"; -import { text } from "../../../providers/config"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { CommandInteraction } from "discord.js"; -import { db } from "../../../database/database"; -import { ExtendedCommand } from "../../../structures/extendedCommand"; +import {matchActiveOrder, OrderStatus} from "../../../database/orders"; +import {permissions} from "../../../providers/permissions"; +import {db} from "../../../database/database"; +import {ExtendedCommand} from "../../../structures/extendedCommand"; export const command = new ExtendedCommand( { name: "editstatus", description: "Edit the status of an order.", local: true } @@ -31,9 +28,15 @@ export const command = new ExtendedCommand( // Add other choices here if needed ) ) - .setExecutor(async (int: CommandInteraction) => { + .setExecutor(async (int) => { const orderId = int.options.getString("order_id", true); - const newStatus = int.options.getString("status", true); + const newStatus = int.options.getString("status", true) as OrderStatus; + + // assert newStatus is a valid OrderStatus to make sure this is type-safe + if (!Object.values(OrderStatus).includes(newStatus as OrderStatus)) { + await int.reply({content: "Invalid status provided."}); + return; + } const order = await matchActiveOrder(orderId); if (!order) { diff --git a/src/commands/orders/worker/leaderboard.ts b/src/commands/orders/worker/leaderboard.ts index 307bd97..cc7b6b0 100644 --- a/src/commands/orders/worker/leaderboard.ts +++ b/src/commands/orders/worker/leaderboard.ts @@ -1,15 +1,14 @@ /* eslint-disable indent */ -import { permissions } from "../../../providers/permissions"; -import { CommandInteraction, EmbedBuilder, Message } from "discord.js"; -import { ButtonBuilder, ButtonStyle, ActionRowBuilder } from "discord.js"; -import { Command } from "../../../structures/Command"; -import { getWorkerInfos } from "../../../database/workerInfo"; -import { ExtendedCommand } from "../../../structures/extendedCommand"; +import {permissions} from "../../../providers/permissions"; +import {ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder, Message} from "discord.js"; +import {getWorkerInfos} from "../../../database/workerInfo"; +import {ExtendedCommand} from "../../../structures/extendedCommand"; + const PAGE_SIZE = 5; // Number of workers per page async function refreshWorkerInfos() { // Refresh worker infos from the database - await getWorkerInfos(true); + await getWorkerInfos(); // Wait for 1 second before retrieving the worker infos again await new Promise((resolve) => setTimeout(resolve, 1000)); } @@ -18,7 +17,7 @@ export const command = new ExtendedCommand( { name: "leaderboard", description: "hm", local: true } ) .addPermission(permissions.developer) - .setExecutor(async (int: CommandInteraction) => { + .setExecutor(async (int) => { // Refresh worker infos from the database await refreshWorkerInfos(); diff --git a/src/commands/orders/worker/wash.ts b/src/commands/orders/worker/wash.ts index 983d4a0..73f82a4 100644 --- a/src/commands/orders/worker/wash.ts +++ b/src/commands/orders/worker/wash.ts @@ -1,8 +1,7 @@ -import { CommandInteraction } from 'discord.js'; -import { PrismaClient } from '@prisma/client'; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { getUserBalance, updateBalance } from "../../../database/userInfo"; +import {PrismaClient} from "@prisma/client"; +import {permissions} from "../../../providers/permissions"; +import {Command} from "../../../structures/Command"; +import {getUserBalance, updateBalance} from "../../../database/userInfo"; const prisma = new PrismaClient(); @@ -19,7 +18,7 @@ export const command = new Command('wash', 'Wash a dish.') .addOption("boolean", (o) => o.setName("inactive").setDescription("Include inactive orders too.") ) - .setExecutor(async (interaction: CommandInteraction) => { + .setExecutor(async (interaction) => { const all = await prisma.dishes.findMany({ take: 10 }); if (!all.length) { await interaction.reply("There are currently no dishes to wash."); @@ -46,7 +45,7 @@ export const command = new Command('wash', 'Wash a dish.') setTimeout(async () => { const userInfo = await getUserBalance(interaction.user); - const donuts = userInfo.donuts + 60; + const donuts = userInfo.donuts ? userInfo.donuts + 60 : 60; await updateBalance(interaction.user, userInfo.balance, donuts); await interaction.followUp(`${interaction.user}, dish ${dish.id} has finished washing. You received 60 donuts.`); diff --git a/src/commands/orders/worker/workerstats.ts b/src/commands/orders/worker/workerstats.ts index a2b522f..971d9db 100644 --- a/src/commands/orders/worker/workerstats.ts +++ b/src/commands/orders/worker/workerstats.ts @@ -1,22 +1,21 @@ /* eslint-disable quotes */ /* eslint-disable indent */ -import { CommandInteraction, EmbedBuilder } from "discord.js"; -import { permissions } from "../../../providers/permissions"; -import { Command } from "../../../structures/Command"; -import { PrismaClient, Prisma } from '@prisma/client'; -import { getWorkerInfo, getWorkerInfos } from "../../../database/workerInfo"; -import { ExtendedCommand } from "../../../structures/extendedCommand"; +import {EmbedBuilder} from "discord.js"; +import {permissions} from "../../../providers/permissions"; +import {PrismaClient} from "@prisma/client"; +import {getWorkerInfos} from "../../../database/workerInfo"; +import {ExtendedCommand} from "../../../structures/extendedCommand"; const prisma = new PrismaClient(); export const command = new ExtendedCommand( { name: "workerstats", description: "Checks the global worker stats.", local: true } ) - .addSyntax("monthly", "text") + .addSyntax("monthly", "string") .addPermission(permissions.employee) .addShortcuts("ws") - .setExecutor(async (int: CommandInteraction) => { - const args = int.options.getString("monthly")?.includes("m") ? ["monthly", ...int.options.getString("monthly").split(" ").slice(1)] : []; + .setExecutor(async (int) => { + const args = int.options.getString("monthly")?.includes("m") ? ["monthly", ...int.options.getString("monthly", true).split(" ").slice(1)] : []; const workerInfos = await getWorkerInfos(); // Retrieve the workerInfos let data = workerInfos; let isMonthly = false; diff --git a/src/database/order.ts b/src/database/order.ts index 5d61947..25d3f8c 100644 --- a/src/database/order.ts +++ b/src/database/order.ts @@ -1,13 +1,13 @@ -import type { Order, } from "@prisma/client"; -import { CafeStatus, CafeOrders, PrismaClient } from "@prisma/client"; -import type { Client, User, UserResolvable, Channel } from "discord.js"; -import { EmbedBuilder, GuildChannel } from "discord.js"; -import { client } from "../providers/client"; -import { text } from "../providers/config"; -import { resolveUserId } from "../utils/id"; -import { format } from "../utils/string"; -import { db } from "./database"; -import type { EmbedField } from "discord.js"; +import type {Orders} from "@prisma/client"; +import {CafeOrders, CafeStatus, PrismaClient} from "@prisma/client"; +import type {Channel, Client, User, UserResolvable} from "discord.js"; +import {EmbedBuilder, GuildChannel} from "discord.js"; +import {client} from "../providers/client"; +import {text} from "../providers/config"; +import {resolveUserId} from "../utils/id"; +import {format} from "../utils/string"; +import {db} from "./database"; + const prisma = new PrismaClient(); export const activeCafeStatus = [ CafeStatus.Unprepared, @@ -89,7 +89,7 @@ export const getLatestOrder = async (user: UserResolvable) => const embedText = text.common.orderEmbed; const embedFields = text.common.orderEmbed.fields; -const rawOrderEmbed = (order: Order) => +const rawOrderEmbed = (order: Orders) => new EmbedBuilder() .setTitle(format(embedText.title, order.id)) .setDescription(format(embedText.description, order.id)) diff --git a/src/events/ServerConfig.ts b/src/events/ServerConfig.ts index 22522d7..1b7d951 100644 --- a/src/events/ServerConfig.ts +++ b/src/events/ServerConfig.ts @@ -1,3 +1,4 @@ +// @ts-ignore todo: this file isn't being used, so ts-ignore until it is /* eslint-disable indent */ import * as fs from "fs"; @@ -5,34 +6,34 @@ interface GuildConfig { orderChannelId?: string; } -interface ServerConfig { - guilds: Record; -} - export class ServerConfig { private static readonly configFile = "config.json"; - private config: ServerConfig; + private config: ServerConfig | null; + private guilds: { + [guildId: string]: GuildConfig; + } = {}; constructor() { this.config = this.loadConfig(); } - private loadConfig(): ServerConfig { + private loadConfig(): ServerConfig | null { try { const data = fs.readFileSync(ServerConfig.configFile, "utf-8"); return JSON.parse(data); } catch (error) { console.error("Error loading config file:", error); - return { guilds: {} }; + return null; } } public getOrderChannel(guildId: string): string | undefined { - return this.config.guilds[guildId]?.orderChannelId; + return this.config?.guilds[guildId]?.orderChannelId; } public setOrderChannel(guildId: string, channelId: string): void { - if (!this.config.guilds[guildId]) { + if (!this.config?.guilds[guildId]) { + if (!this.config) return; this.config.guilds[guildId] = {}; } this.config.guilds[guildId].orderChannelId = channelId; diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index d39a195..237b342 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -1,19 +1,20 @@ -import { client } from "../providers/client"; -import { commandRegistry } from "../providers/commandManager"; -import { text } from "../providers/config"; -import { blacklist } from "../database/blacklist"; -import { StopCommandExecution } from "../utils/error"; +import {client} from "../providers/client"; +import {commandRegistry} from "../providers/commandManager"; +import {text} from "../providers/config"; +import {blacklist} from "../database/blacklist"; +import {StopCommandExecution} from "../utils/error"; +import {ChatInputCommandInteraction} from "discord.js"; // Custom logging functions function logInteractionAlreadyReplied() { console.log("The reply to this interaction has already been sent or deferred."); } -function logBlacklistedUserInteraction(userId) { +function logBlacklistedUserInteraction(userId: string) { console.log(`Interaction failed due to user being blacklisted: ${userId}`); } -function logException(message) { +function logException(message: string) { console.log(`Interaction failed with exception: ${message}`); } @@ -36,12 +37,16 @@ client.on("interactionCreate", async (int) => { if (!command) throw new Error(`Unregistered command ${int.commandName}`); // TODO remove this and use discord builtin when permissions get better for (const perm of command.permissions) await perm.check(int); - await command.executor(int); + // TODO we're assuming this is a ChatInputCommandInteraction, implement other types later. + if (!(int instanceof ChatInputCommandInteraction)) throw new Error("Unsupported interaction type, please use a chat input command."); + await command.executor(int as ChatInputCommandInteraction<"cached">); } } catch (e) { if (!(e instanceof StopCommandExecution)) { if (int.isCommand()) { - logException(e.message); + logException((e as typeof e & { + message: any + }).message); // pretend everything is fine and message exists... int.reply({ content: text.errors.exception, ephemeral: true }).catch(); } console.error(e); diff --git a/src/events/ready.ts b/src/events/ready.ts index 7e43083..d8b1976 100644 --- a/src/events/ready.ts +++ b/src/events/ready.ts @@ -1,12 +1,12 @@ -import type { GuildEmoji, TextBasedChannel } from "discord.js"; -import { client } from "../providers/client"; -import { loadCommands } from "../providers/commandManager"; -import { config, text } from "../providers/config"; -import { mainChannels, mainEmojis, mainGuild, setMainGuild, setMainRoles } from "../providers/discord"; -import { startOrderTimeoutChecks } from "../providers/orderManager"; -import { IllegalStateError } from "../utils/error"; -import { parseText } from "../utils/string"; -import { isNotInitialized, typedEntries, typedFromEntries } from "../utils/utils"; +import type {GuildEmoji, TextBasedChannel} from "discord.js"; +import {client} from "../providers/client"; +import {loadCommands} from "../providers/commandManager"; +import {config, text} from "../providers/config"; +import {mainChannels, mainEmojis, mainGuild, setMainGuild, setMainRoles} from "../providers/discord"; +import {startOrderTimeoutChecks} from "../providers/orderManager"; +import {IllegalStateError} from "../utils/error"; +import {parseText} from "../utils/string"; +import {isNotInitialized, typedEntries, typedFromEntries} from "../utils/utils"; type TextObject = { [k: string]: string | string[] | TextObject; @@ -48,6 +48,7 @@ client.on("ready", async () => { else if (typeof texts[k] === "object") parseTexts(texts[k] as TextObject); } }; + // @ts-ignore todo parseTexts(text.commands); parseTexts(text.errors); parseTexts(text.common); diff --git a/src/providers/client.ts b/src/providers/client.ts index 2428f90..629d33b 100644 --- a/src/providers/client.ts +++ b/src/providers/client.ts @@ -1,9 +1,8 @@ -import { REST } from "@discordjs/rest"; -import { Client, GatewayIntentBits, Partials } from "discord.js"; -import { config } from "./config"; -import { join } from "path"; -import { sync } from "fast-glob"; -import fs from "fs/promises"; +import {REST} from "@discordjs/rest"; +import {Client, GatewayIntentBits, Partials} from "discord.js"; +import {config} from "./config"; +import {join} from "path"; +import {sync} from "fast-glob"; if (globalThis._$clientLoaded) throw new Error("The client was loaded twice. This should never happen."); globalThis._$clientLoaded = true; @@ -13,7 +12,8 @@ export const client = new Client({ GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.GuildMembers, - GatewayIntentBits.MessageContent + // GatewayIntentBits.MessageContent + // ^ This intent is not needed for slash commands and will cry like a baby if you try to use it ], partials: [Partials.User, Partials.Channel, Partials.GuildMember, Partials.Message], }); diff --git a/src/providers/commandManager.ts b/src/providers/commandManager.ts index e91ead9..ec2d059 100644 --- a/src/providers/commandManager.ts +++ b/src/providers/commandManager.ts @@ -1,22 +1,22 @@ /* eslint-disable quotes */ -import { basename, join, posix, win32 } from "path"; -import { sync } from "fast-glob"; -import { Command } from "../structures/Command"; -import { Routes } from "discord-api-types/v10"; -import { client, rest } from "./client"; -import { development } from "./env"; -import { config } from "./config"; +import {basename, join, posix, win32} from "path"; +import {sync} from "fast-glob"; +import {Command} from "../structures/Command"; +import {Routes} from "discord-api-types/v10"; +import {client, rest} from "./client"; +import {development} from "./env"; +import {config} from "./config"; import type { ApplicationCommand, ApplicationCommandManager, GuildApplicationCommandManager, GuildResolvable, } from "discord.js"; -import { Collection } from "discord.js"; -import { notInitialized } from "../utils/utils"; +import {Collection} from "discord.js"; +import {notInitialized} from "../utils/utils"; import "./permissions"; -import { ExtendedCommand } from "../structures/extendedCommand"; // Import the ExtendedCommand class -import { mainGuild } from "./discord"; +import {ExtendedCommand} from "../structures/extendedCommand"; // Import the ExtendedCommand class +import {mainGuild} from "./discord"; const commandFolder = join(__dirname, "../commands/**/*.js").replaceAll(win32.sep, posix.sep); const extendedCommandFolder = join(__dirname, "../extendedCommands/**/*.js").replaceAll(win32.sep, posix.sep); @@ -70,6 +70,8 @@ const registerCommands = async (commands: (Command | ExtendedCommand)[]) => { console.log(`Registered local commands for the main server: ${localCommands.map((x) => x.name).join(", ")}`); }; +let commandNames: string[] = []; + export const loadCommands = async (): Promise<(Command | ExtendedCommand)[]> => { const commands: (Command | ExtendedCommand)[] = []; // Ensure commands array is of type Command or ExtendedCommand const commandFiles = sync(commandFolder); @@ -78,6 +80,10 @@ export const loadCommands = async (): Promise<(Command | ExtendedCommand)[]> => if (!(data.command instanceof Command || (data.command as any) instanceof ExtendedCommand)) { throw new Error(`File ${file} does not export 'command'.`); } + if (commandNames.includes(data.command.name)) { + console.log(`Duplicate command name found: ${data.command.name}. Skipping...`); + continue; + } else commandNames.push(data.command.name); console.log(`Registered command ${basename(file, ".js")}.`); commands.push(data.command); } diff --git a/src/structures/Command.ts b/src/structures/Command.ts index c820b35..9b07a2f 100644 --- a/src/structures/Command.ts +++ b/src/structures/Command.ts @@ -1,11 +1,11 @@ /* eslint-disable quotes */ /* eslint-disable indent */ -import { SlashCommandBuilder } from "@discordjs/builders"; -import type { CommandInteraction } from "discord.js"; -import type { Permission } from "../providers/permissions"; -import { capitalize } from "../utils/string"; +import {SlashCommandBuilder} from "@discordjs/builders"; +import type {ChatInputCommandInteraction} from "discord.js"; +import type {Permission} from "../providers/permissions"; +import {capitalize} from "../utils/string"; -export type CommandExecutor = (interaction: CommandInteraction<"cached">) => void | Promise; +export type CommandExecutor = (interaction: ChatInputCommandInteraction<"cached">) => void | Promise; export type CommandOptionType = Extract< keyof SlashCommandBuilder, diff --git a/src/utils/components.ts b/src/utils/components.ts index 99840db..0765a3f 100644 --- a/src/utils/components.ts +++ b/src/utils/components.ts @@ -1,6 +1,13 @@ -import type { ButtonInteraction, Constructable, MessageActionRowComponent, MessageComponentInteraction, SelectMenuInteraction } from "discord.js"; -import { MessageActionRow, MessageButton, MessageSelectMenu } from "discord.js"; -import { componentCallbacks } from "../events/interactionCreate"; +// @ts-nocheck TODO: Remove this comment when the issue is fixed +import type { + ButtonInteraction, + Constructable, + MessageActionRowComponent, + MessageComponentInteraction, + SelectMenuInteraction +} from "discord.js"; +import {MessageActionRow, MessageButton, MessageSelectMenu} from "discord.js"; +import {componentCallbacks} from "../events/interactionCreate"; export type InteractionByType = C extends MessageButton ? ButtonInteraction<"cached"> diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 74d1aab..43943f9 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -1,4 +1,4 @@ -import { IllegalStateError } from "./error"; +import {IllegalStateError} from "./error"; const notInitializedSymbol = Symbol("notInitialized"); export const notInitialized = (identifier?: string) => { @@ -38,6 +38,10 @@ export const typedFromEntries = (arr: rea Object.fromEntries(arr) as { [k in K]: V }; export const typedKeys = (obj: T) => Object.keys(obj) as (keyof T)[]; +/** + * Returns a random element from the given array. + * @param arr - The array to get a random element from. + */ export const sampleArray = (arr: T[]) => arr[Math.floor(Math.random() * arr.length)]; export const randRange = (lowerInclusive: number, upperExclusive: number) => diff --git a/yarn.lock b/yarn.lock index beca823..fab55b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1793,10 +1793,10 @@ typescript-memoize@^1.1.0: resolved "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz" integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== -typescript@^4.9.5: - version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@^5.4.5: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== undefsafe@^2.0.5: version "2.0.5" From eecc6de01dec10778e60e3622e3f277c32f12e5a Mon Sep 17 00:00:00 2001 From: floof Date: Tue, 16 Apr 2024 23:23:19 -0500 Subject: [PATCH 61/79] experimental API --- package.json | 1 + src/index.ts | 7 +- src/providers/apiServer.ts | 23 ++ yarn.lock | 512 ++++++++++++++++++++++++++++++------- 4 files changed, 452 insertions(+), 91 deletions(-) create mode 100644 src/providers/apiServer.ts diff --git a/package.json b/package.json index d74e5f2..3239f81 100644 --- a/package.json +++ b/package.json @@ -45,6 +45,7 @@ "cross-env": "^7.0.3", "discord.js": "^14.14.1", "fast-glob": "^3.2.11", + "fastify": "^4.26.2", "got": "^11.8.3", "hjson": "^3.2.2", "nekos.life": "^3.0.0", diff --git a/src/index.ts b/src/index.ts index 51c9a72..7e1b688 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,9 @@ import "./providers/client"; -import { development } from "./providers/env"; -import { production } from "./providers/env"; +import {development, production} from "./providers/env"; import "source-map-support/register"; +// experimental API +import "./providers/apiServer"; + if (development) console.warn("Starting in development mode!"); if (production) console.warn("Starting in production mode!"); + diff --git a/src/providers/apiServer.ts b/src/providers/apiServer.ts new file mode 100644 index 0000000..7c546b5 --- /dev/null +++ b/src/providers/apiServer.ts @@ -0,0 +1,23 @@ +// Import the framework and instantiate it +import Fastify from "fastify"; + +const fastify = Fastify({ + logger: true +}); + +// Declare a route +fastify.get("/", async function handler(request, reply) { + return {hello: "world"}; +}); + +// Run the server! +try { + fastify.listen({port: 3000}).then(() => { + console.log(`Server listening on port 3000.`); + }); +} catch (err) { + fastify.log.error(err); + process.exit(1); +} + +export default fastify; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index fab55b4..fc9c9b5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,11 +22,6 @@ ts-mixer "^6.0.3" tslib "^2.6.2" -"@discordjs/collection@1.5.3": - version "1.5.3" - resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.5.3.tgz#5a1250159ebfff9efa4f963cfa7e97f1b291be18" - integrity sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ== - "@discordjs/collection@^0.4.0": version "0.4.0" resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz" @@ -37,6 +32,11 @@ resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz" integrity sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w== +"@discordjs/collection@1.5.3": + version "1.5.3" + resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz" + integrity sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ== + "@discordjs/formatters@^0.3.3": version "0.3.3" resolved "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.3.tgz" @@ -79,7 +79,7 @@ "@discordjs/ws@^1.0.2": version "1.0.2" - resolved "https://registry.yarnpkg.com/@discordjs/ws/-/ws-1.0.2.tgz#3933b12d4686aabf6a95dfe5fb6e744342a661d1" + resolved "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.2.tgz" integrity sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q== dependencies: "@discordjs/collection" "^2.0.0" @@ -124,11 +124,39 @@ resolved "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz" integrity sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA== +"@fastify/ajv-compiler@^3.5.0": + version "3.5.0" + resolved "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz" + integrity sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA== + dependencies: + ajv "^8.11.0" + ajv-formats "^2.1.1" + fast-uri "^2.0.0" + "@fastify/busboy@^2.0.0": version "2.1.1" resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== +"@fastify/error@^3.3.0", "@fastify/error@^3.4.0": + version "3.4.1" + resolved "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz" + integrity sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ== + +"@fastify/fast-json-stringify-compiler@^4.3.0": + version "4.3.0" + resolved "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz" + integrity sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA== + dependencies: + fast-json-stringify "^5.7.0" + +"@fastify/merge-json-schemas@^0.1.0": + version "0.1.1" + resolved "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz" + integrity sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA== + dependencies: + fast-deep-equal "^3.1.3" + "@humanwhocodes/config-array@^0.11.8": version "0.11.8" resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" @@ -179,7 +207,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -200,45 +228,45 @@ "@noble/hashes" "^1.1.5" "@prisma/client@latest": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/client/-/client-5.11.0.tgz" - integrity sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw== - -"@prisma/debug@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/debug/-/debug-5.11.0.tgz" - integrity sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A== - -"@prisma/engines-version@5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102": - version "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" - resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102.tgz" - integrity sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA== - -"@prisma/engines@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/engines/-/engines-5.11.0.tgz" - integrity sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw== - dependencies: - "@prisma/debug" "5.11.0" - "@prisma/engines-version" "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" - "@prisma/fetch-engine" "5.11.0" - "@prisma/get-platform" "5.11.0" - -"@prisma/fetch-engine@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.11.0.tgz" - integrity sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w== - dependencies: - "@prisma/debug" "5.11.0" - "@prisma/engines-version" "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" - "@prisma/get-platform" "5.11.0" - -"@prisma/get-platform@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.11.0.tgz" - integrity sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw== - dependencies: - "@prisma/debug" "5.11.0" + version "5.12.1" + resolved "https://registry.npmjs.org/@prisma/client/-/client-5.12.1.tgz" + integrity sha512-6/JnizEdlSBxDIdiLbrBdMW5NqDxOmhXAJaNXiPpgzAPr/nLZResT6MMpbOHLo5yAbQ1Vv5UU8PTPRzb0WIxdA== + +"@prisma/debug@5.12.1": + version "5.12.1" + resolved "https://registry.npmjs.org/@prisma/debug/-/debug-5.12.1.tgz" + integrity sha512-kd/wNsR0klrv79o1ITsbWxYyh4QWuBidvxsXSParPsYSu0ircUmNk3q4ojsgNc3/81b0ozg76iastOG43tbf8A== + +"@prisma/engines-version@5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab": + version "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" + resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab.tgz" + integrity sha512-6yvO8s80Tym61aB4QNtYZfWVmE3pwqe807jEtzm8C5VDe7nw8O1FGX3TXUaXmWV0fQTIAfRbeL2Gwrndabp/0g== + +"@prisma/engines@5.12.1": + version "5.12.1" + resolved "https://registry.npmjs.org/@prisma/engines/-/engines-5.12.1.tgz" + integrity sha512-HQDdglLw2bZR/TXD2Y+YfDMvi5Q8H+acbswqOsWyq9pPjBLYJ6gzM+ptlTU/AV6tl0XSZLU1/7F4qaWa8bqpJA== + dependencies: + "@prisma/debug" "5.12.1" + "@prisma/engines-version" "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" + "@prisma/fetch-engine" "5.12.1" + "@prisma/get-platform" "5.12.1" + +"@prisma/fetch-engine@5.12.1": + version "5.12.1" + resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.12.1.tgz" + integrity sha512-qSs3KcX1HKcea1A+hlJVK/ljj0PNIUHDxAayGMvgJBqmaN32P9tCidlKz1EGv6WoRFICYnk3Dd/YFLBwnFIozA== + dependencies: + "@prisma/debug" "5.12.1" + "@prisma/engines-version" "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" + "@prisma/get-platform" "5.12.1" + +"@prisma/get-platform@5.12.1": + version "5.12.1" + resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.12.1.tgz" + integrity sha512-pgIR+pSvhYHiUcqXVEZS31NrFOTENC9yFUdEAcx7cdQBoZPmHVjtjN4Ss6NzVDMYPrKJJ51U14EhEoeuBlMioQ== + dependencies: + "@prisma/debug" "5.12.1" "@sapphire/async-queue@^1.1.9", "@sapphire/async-queue@^1.5.0": version "1.5.0" @@ -253,7 +281,7 @@ fast-deep-equal "^3.1.3" lodash "^4.17.21" -"@sapphire/snowflake@3.5.1", "@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.5.1": +"@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.5.1", "@sapphire/snowflake@3.5.1": version "3.5.1" resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz" integrity sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA== @@ -339,9 +367,9 @@ resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz" integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== -"@types/ws@8.5.9", "@types/ws@^8.5.9": +"@types/ws@^8.5.9", "@types/ws@8.5.9": version "8.5.9" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.9.tgz#384c489f99c83225a53f01ebc3eddf3b8e202a8c" + resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz" integrity sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg== dependencies: "@types/node" "*" @@ -362,7 +390,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.16.0": +"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.16.0": version "5.59.7" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz" integrity sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ== @@ -440,6 +468,18 @@ abbrev@1: resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abstract-logging@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz" + integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" @@ -450,11 +490,25 @@ acorn-walk@^8.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.4.1, acorn@^8.8.0: +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.8.0: version "8.8.2" resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-formats@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" @@ -465,6 +519,26 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +ajv@^8.0.0, ajv@^8.10.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ajv@^8.11.0: + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" @@ -485,6 +559,11 @@ anymatch@~3.1.2: normalize-path "^3.0.0" picomatch "^2.0.4" +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== + arg@^4.1.0: version "4.1.3" resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" @@ -510,11 +589,26 @@ atomic-sleep@^1.0.0: resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== +avvio@^8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/avvio/-/avvio-8.3.0.tgz" + integrity sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q== + dependencies: + "@fastify/error" "^3.3.0" + archy "^1.0.0" + debug "^4.0.0" + fastq "^1.17.1" + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" @@ -540,6 +634,14 @@ buffer-from@^1.0.0: resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + cacheable-lookup@^5.0.3: version "5.0.4" resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" @@ -622,6 +724,11 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +cookie@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + create-require@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" @@ -643,7 +750,7 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -debug@^4, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@^4, debug@^4.0.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -684,19 +791,19 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -discord-api-types@0.37.61, discord-api-types@^0.37.35: - version "0.37.61" - resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz" - integrity sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw== - discord-api-types@^0.26.1: version "0.26.1" resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz" integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== +discord-api-types@^0.37.35, discord-api-types@0.37.61: + version "0.37.61" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz" + integrity sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw== + discord.js@^14.14.1: version "14.14.1" - resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.14.1.tgz#9a2bea23bba13819705ab87612837610abce9ee3" + resolved "https://registry.npmjs.org/discord.js/-/discord.js-14.14.1.tgz" integrity sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w== dependencies: "@discordjs/builders" "^1.7.0" @@ -778,7 +885,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== -eslint@^8.12.0: +eslint@*, "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", eslint@^8.12.0, eslint@>=6.0.0: version "8.41.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz" integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== @@ -861,7 +968,27 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +fast-content-type-parse@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz" + integrity sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ== + +fast-decode-uri-component@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz" + integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3, fast-deep-equal@3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -882,20 +1009,67 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-json-stringify@^5.7.0, fast-json-stringify@^5.8.0: + version "5.14.1" + resolved "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.14.1.tgz" + integrity sha512-J1Grbf0oSXV3lKsBf3itz1AvRk43qVrx3Ac10sNvi3LZaz1by4oDdYKFrJycPhS8+Gb7y8rgV/Jqw1UZVjyNvw== + dependencies: + "@fastify/merge-json-schemas" "^0.1.0" + ajv "^8.10.0" + ajv-formats "^3.0.1" + fast-deep-equal "^3.1.3" + fast-uri "^2.1.0" + json-schema-ref-resolver "^1.0.1" + rfdc "^1.2.0" + fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== -fast-redact@^3.0.0: +fast-querystring@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz" + integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== + dependencies: + fast-decode-uri-component "^1.0.1" + +fast-redact@^3.0.0, fast-redact@^3.1.1: version "3.2.0" resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz" integrity sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw== -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== +fast-uri@^2.0.0, fast-uri@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-2.3.0.tgz" + integrity sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw== + +fastify@^4.26.2: + version "4.26.2" + resolved "https://registry.npmjs.org/fastify/-/fastify-4.26.2.tgz" + integrity sha512-90pjTuPGrfVKtdpLeLzND5nyC4woXZN5VadiNQCicj/iJU4viNHKhsAnb7jmv1vu2IzkLXyBiCzdWuzeXgQ5Ug== + dependencies: + "@fastify/ajv-compiler" "^3.5.0" + "@fastify/error" "^3.4.0" + "@fastify/fast-json-stringify-compiler" "^4.3.0" + abstract-logging "^2.0.1" + avvio "^8.3.0" + fast-content-type-parse "^1.1.0" + fast-json-stringify "^5.8.0" + find-my-way "^8.0.0" + light-my-request "^5.11.0" + pino "^8.17.0" + process-warning "^3.0.0" + proxy-addr "^2.0.7" + rfdc "^1.3.0" + secure-json-parse "^2.7.0" + semver "^7.5.4" + toad-cache "^3.3.0" + +fastq@^1.17.1, fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -913,6 +1087,15 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-my-way@^8.0.0: + version "8.1.0" + resolved "https://registry.npmjs.org/find-my-way/-/find-my-way-8.1.0.tgz" + integrity sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA== + dependencies: + fast-deep-equal "^3.1.3" + fast-querystring "^1.0.0" + safe-regex2 "^2.0.0" + find-up@^5.0.0: version "5.0.0" resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" @@ -943,16 +1126,16 @@ form-data@^4.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" @@ -1060,6 +1243,11 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" @@ -1091,11 +1279,16 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3: +inherits@^2.0.3, inherits@2: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" @@ -1147,11 +1340,23 @@ json-buffer@3.0.1: resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== +json-schema-ref-resolver@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz" + integrity sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw== + dependencies: + fast-deep-equal "^3.1.3" + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" @@ -1177,6 +1382,15 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +light-my-request@^5.11.0: + version "5.13.0" + resolved "https://registry.npmjs.org/light-my-request/-/light-my-request-5.13.0.tgz" + integrity sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ== + dependencies: + cookie "^0.6.0" + process-warning "^3.0.0" + set-cookie-parser "^2.4.1" + locate-path@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" @@ -1191,7 +1405,7 @@ lodash.merge@^4.6.2: lodash.snakecase@4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== lodash@^4.17.21: @@ -1333,6 +1547,11 @@ on-exit-leak-free@^0.2.0: resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz" integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== +on-exit-leak-free@^2.1.0: + version "2.1.2" + resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz" + integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -1413,6 +1632,14 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pino-abstract-transport@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz" + integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== + dependencies: + readable-stream "^4.0.0" + split2 "^4.0.0" + pino-abstract-transport@v0.5.0: version "0.5.0" resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz" @@ -1426,6 +1653,11 @@ pino-std-serializers@^4.0.0: resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz" integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== +pino-std-serializers@^6.0.0: + version "6.2.2" + resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz" + integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== + pino@^7.9.2: version "7.11.0" resolved "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz" @@ -1443,6 +1675,23 @@ pino@^7.9.2: sonic-boom "^2.2.1" thread-stream "^0.15.1" +pino@^8.17.0: + version "8.20.0" + resolved "https://registry.npmjs.org/pino/-/pino-8.20.0.tgz" + integrity sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ== + dependencies: + atomic-sleep "^1.0.0" + fast-redact "^3.1.1" + on-exit-leak-free "^2.1.0" + pino-abstract-transport "^1.1.0" + pino-std-serializers "^6.0.0" + process-warning "^3.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.2.0" + safe-stable-stringify "^2.3.1" + sonic-boom "^3.7.0" + thread-stream "^2.0.0" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" @@ -1455,18 +1704,36 @@ pretty-ms@^7.0.1: dependencies: parse-ms "^2.1.0" -prisma@latest: - version "5.11.0" - resolved "https://registry.npmjs.org/prisma/-/prisma-5.11.0.tgz" - integrity sha512-KCLiug2cs0Je7kGkQBN9jDWoZ90ogE/kvZTUTgz2h94FEo8pczCkPH7fPNXkD1sGU7Yh65risGGD1HQ5DF3r3g== +prisma@*, prisma@latest: + version "5.12.1" + resolved "https://registry.npmjs.org/prisma/-/prisma-5.12.1.tgz" + integrity sha512-SkMnb6wyIxTv9ACqiHBI2u9gD6y98qXRoCoLEnZsF6yee5Qg828G+ARrESN+lQHdw4maSZFFSBPPDpvSiVTo0Q== dependencies: - "@prisma/engines" "5.11.0" + "@prisma/engines" "5.12.1" process-warning@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz" integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== +process-warning@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz" + integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +proxy-addr@^2.0.7: + version "2.0.7" + resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + pstree.remy@^1.1.8: version "1.1.8" resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" @@ -1509,6 +1776,17 @@ readable-stream@^3.1.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^4.0.0: + version "4.5.2" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz" + integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -1521,6 +1799,11 @@ real-require@^0.1.0: resolved "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz" integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== +real-require@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz" + integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== + refa@^0.11.0: version "0.11.0" resolved "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz" @@ -1536,6 +1819,11 @@ regexp-ast-analysis@^0.6.0: "@eslint-community/regexpp" "^4.5.0" refa "^0.11.0" +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + resolve-alpn@^1.0.0: version "1.2.1" resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" @@ -1553,11 +1841,21 @@ responselike@^2.0.0: dependencies: lowercase-keys "^2.0.0" +ret@~0.2.0: + version "0.2.2" + resolved "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz" + integrity sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.2.0, rfdc@^1.3.0: + version "1.3.1" + resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz" + integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== + rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" @@ -1577,7 +1875,14 @@ safe-buffer@~5.2.0: resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-stable-stringify@^2.1.0: +safe-regex2@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz" + integrity sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ== + dependencies: + ret "~0.2.0" + +safe-stable-stringify@^2.1.0, safe-stable-stringify@^2.3.1: version "2.4.3" resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== @@ -1591,13 +1896,23 @@ scslre@^0.2.0: refa "^0.11.0" regexp-ast-analysis "^0.6.0" -semver@^7.3.7, semver@^7.5.3: +secure-json-parse@^2.7.0: + version "2.7.0" + resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz" + integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== + +semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: version "7.6.0" resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" +set-cookie-parser@^2.4.1: + version "2.6.0" + resolved "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz" + integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -1629,6 +1944,13 @@ sonic-boom@^2.2.1: dependencies: atomic-sleep "^1.0.0" +sonic-boom@^3.7.0: + version "3.8.1" + resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz" + integrity sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg== + dependencies: + atomic-sleep "^1.0.0" + source-map-support@^0.5.21: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" @@ -1652,7 +1974,7 @@ stream-shift@^1.0.0: resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== -string_decoder@^1.1.1: +string_decoder@^1.1.1, string_decoder@^1.3.0: version "1.3.0" resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -1702,6 +2024,13 @@ thread-stream@^0.15.1: dependencies: real-require "^0.1.0" +thread-stream@^2.0.0: + version "2.4.1" + resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz" + integrity sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg== + dependencies: + real-require "^0.2.0" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" @@ -1709,6 +2038,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +toad-cache@^3.3.0: + version "3.7.0" + resolved "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz" + integrity sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw== + touch@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" @@ -1759,16 +2093,16 @@ tsconfig-paths@^4.1.2: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.6.2, tslib@^2.3.1, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - tslib@^1.8.1: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.3.1, tslib@^2.6.2, tslib@2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" @@ -1793,9 +2127,9 @@ typescript-memoize@^1.1.0: resolved "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz" integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== -typescript@^5.4.5: +typescript@^5.4.5, typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz" integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== undefsafe@^2.0.5: @@ -1862,9 +2196,9 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@8.14.2, ws@^8.14.2: +ws@^8.14.2, ws@8.14.2: version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" + resolved "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz" integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== yallist@^4.0.0: From 76812292a1bbfa34434ea9a2c01dca2fecee36e6 Mon Sep 17 00:00:00 2001 From: floof Date: Thu, 18 Apr 2024 08:47:31 -0500 Subject: [PATCH 62/79] migration --- package-lock.json | 3866 +++++++++++++++++ .../20240417153138_thing/migration.sql | 185 + prisma/migrations/migration_lock.toml | 3 + 3 files changed, 4054 insertions(+) create mode 100644 package-lock.json create mode 100644 prisma/migrations/20240417153138_thing/migration.sql create mode 100644 prisma/migrations/migration_lock.toml diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..0bde817 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3866 @@ +{ + "name": "dbrewrite", + "version": "1.3.4", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "dbrewrite", + "version": "1.3.4", + "license": "ISC", + "dependencies": { + "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", + "@discordjs/rest": "^0.3.0", + "@paralleldrive/cuid2": "^2.2.1", + "@prisma/client": "latest", + "@sapphire/shapeshift": "^3.8.1", + "cross-env": "^7.0.3", + "discord.js": "^14.14.1", + "fast-glob": "^3.2.11", + "fastify": "^4.26.2", + "got": "^11.8.3", + "hjson": "^3.2.2", + "nekos.life": "^3.0.0", + "nodemon": "^3.1.0", + "picocolors": "^1.0.0", + "pino": "^7.9.2", + "pretty-ms": "^7.0.1", + "source-map-support": "^0.5.21", + "typescript-memoize": "^1.1.0", + "uuid": "^9.0.0", + "yarn": "^1.22.18", + "zod": "^3.14.3" + }, + "devDependencies": { + "@types/node": "^17.0.42", + "@types/uuid": "^9.0.1", + "@typescript-eslint/eslint-plugin": "^5.16.0", + "@typescript-eslint/parser": "^5.16.0", + "discord-api-types": "^0.37.35", + "eslint": "^8.12.0", + "eslint-plugin-regexp": "^1.6.0", + "prisma": "latest", + "ts-node": "^10.9.1", + "ts-toolbelt": "^9.6.0", + "tsconfig-paths": "^4.1.2", + "typescript": "^5.4.5" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@discordjs/builders": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.7.0.tgz", + "integrity": "sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/formatters": "^0.3.3", + "@discordjs/util": "^1.0.2", + "@sapphire/shapeshift": "^3.9.3", + "discord-api-types": "0.37.61", + "fast-deep-equal": "^3.1.3", + "ts-mixer": "^6.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/formatters": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.3.tgz", + "integrity": "sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w==", + "license": "Apache-2.0", + "dependencies": { + "discord-api-types": "0.37.61" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/rest": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz", + "integrity": "sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/collection": "^0.4.0", + "@sapphire/async-queue": "^1.1.9", + "@sapphire/snowflake": "^3.0.1", + "discord-api-types": "^0.26.1", + "form-data": "^4.0.0", + "node-fetch": "^2.6.5", + "tslib": "^2.3.1" + }, + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", + "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@discordjs/rest/node_modules/discord-api-types": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", + "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/@discordjs/util": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.2.tgz", + "integrity": "sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.2.tgz", + "integrity": "sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/collection": "^2.0.0", + "@discordjs/rest": "^2.1.0", + "@discordjs/util": "^1.0.2", + "@sapphire/async-queue": "^1.5.0", + "@types/ws": "^8.5.9", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.61", + "tslib": "^2.6.2", + "ws": "^8.14.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz", + "integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@discordjs/ws/node_modules/@discordjs/rest": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.2.0.tgz", + "integrity": "sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/collection": "^2.0.0", + "@discordjs/util": "^1.0.2", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.5.1", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.61", + "magic-bytes.js": "^1.5.0", + "tslib": "^2.6.2", + "undici": "5.27.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", + "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", + "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.5.2", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", + "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@fastify/ajv-compiler": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", + "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==", + "dependencies": { + "ajv": "^8.11.0", + "ajv-formats": "^2.1.1", + "fast-uri": "^2.0.0" + } + }, + "node_modules/@fastify/ajv-compiler/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/@fastify/busboy": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", + "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/@fastify/error": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", + "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==" + }, + "node_modules/@fastify/fast-json-stringify-compiler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", + "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "dependencies": { + "fast-json-stringify": "^5.7.0" + } + }, + "node_modules/@fastify/merge-json-schemas": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", + "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@paralleldrive/cuid2": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.1.tgz", + "integrity": "sha512-GJhHYlMhyT2gWemDL7BGMWfTNhspJKkikLKh9wAy3z4GTTINvTYALkUd+eGQK7aLeVkVzPuSA0VCT3H5eEWbbw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.1.5" + } + }, + "node_modules/@prisma/client": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.12.1.tgz", + "integrity": "sha512-6/JnizEdlSBxDIdiLbrBdMW5NqDxOmhXAJaNXiPpgzAPr/nLZResT6MMpbOHLo5yAbQ1Vv5UU8PTPRzb0WIxdA==", + "hasInstallScript": true, + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/debug": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.12.1.tgz", + "integrity": "sha512-kd/wNsR0klrv79o1ITsbWxYyh4QWuBidvxsXSParPsYSu0ircUmNk3q4ojsgNc3/81b0ozg76iastOG43tbf8A==", + "devOptional": true + }, + "node_modules/@prisma/engines": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.12.1.tgz", + "integrity": "sha512-HQDdglLw2bZR/TXD2Y+YfDMvi5Q8H+acbswqOsWyq9pPjBLYJ6gzM+ptlTU/AV6tl0XSZLU1/7F4qaWa8bqpJA==", + "devOptional": true, + "hasInstallScript": true, + "dependencies": { + "@prisma/debug": "5.12.1", + "@prisma/engines-version": "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab", + "@prisma/fetch-engine": "5.12.1", + "@prisma/get-platform": "5.12.1" + } + }, + "node_modules/@prisma/engines-version": { + "version": "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab.tgz", + "integrity": "sha512-6yvO8s80Tym61aB4QNtYZfWVmE3pwqe807jEtzm8C5VDe7nw8O1FGX3TXUaXmWV0fQTIAfRbeL2Gwrndabp/0g==", + "devOptional": true + }, + "node_modules/@prisma/fetch-engine": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.12.1.tgz", + "integrity": "sha512-qSs3KcX1HKcea1A+hlJVK/ljj0PNIUHDxAayGMvgJBqmaN32P9tCidlKz1EGv6WoRFICYnk3Dd/YFLBwnFIozA==", + "devOptional": true, + "dependencies": { + "@prisma/debug": "5.12.1", + "@prisma/engines-version": "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab", + "@prisma/get-platform": "5.12.1" + } + }, + "node_modules/@prisma/get-platform": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.12.1.tgz", + "integrity": "sha512-pgIR+pSvhYHiUcqXVEZS31NrFOTENC9yFUdEAcx7cdQBoZPmHVjtjN4Ss6NzVDMYPrKJJ51U14EhEoeuBlMioQ==", + "devOptional": true, + "dependencies": { + "@prisma/debug": "5.12.1" + } + }, + "node_modules/@sapphire/async-queue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", + "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/shapeshift": { + "version": "3.9.7", + "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.7.tgz", + "integrity": "sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=v16" + } + }, + "node_modules/@sapphire/snowflake": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", + "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", + "license": "MIT" + }, + "node_modules/@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/semver": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", + "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz", + "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", + "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/type-utils": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "debug": "^4.3.4", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", + "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", + "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", + "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "5.59.7", + "@typescript-eslint/utils": "5.59.7", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", + "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", + "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/visitor-keys": "5.59.7", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", + "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.59.7", + "@typescript-eslint/types": "5.59.7", + "@typescript-eslint/typescript-estree": "5.59.7", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.59.7", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", + "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "5.59.7", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vladfrangu/async_event_emitter": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.4.tgz", + "integrity": "sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug==", + "license": "MIT", + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "license": "ISC" + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abstract-logging": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", + "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/avvio": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.3.0.tgz", + "integrity": "sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q==", + "dependencies": { + "@fastify/error": "^3.3.0", + "archy": "^1.0.0", + "debug": "^4.0.0", + "fastq": "^1.17.1" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response/node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comment-parser": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", + "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/discord-api-types": { + "version": "0.37.61", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", + "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==", + "license": "MIT" + }, + "node_modules/discord.js": { + "version": "14.14.1", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.14.1.tgz", + "integrity": "sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/builders": "^1.7.0", + "@discordjs/collection": "1.5.3", + "@discordjs/formatters": "^0.3.3", + "@discordjs/rest": "^2.1.0", + "@discordjs/util": "^1.0.2", + "@discordjs/ws": "^1.0.2", + "@sapphire/snowflake": "3.5.1", + "@types/ws": "8.5.9", + "discord-api-types": "0.37.61", + "fast-deep-equal": "3.1.3", + "lodash.snakecase": "4.1.1", + "tslib": "2.6.2", + "undici": "5.27.2", + "ws": "8.14.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/discord.js/node_modules/@discordjs/collection": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", + "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/discord.js/node_modules/@discordjs/rest": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.2.0.tgz", + "integrity": "sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==", + "license": "Apache-2.0", + "dependencies": { + "@discordjs/collection": "^2.0.0", + "@discordjs/util": "^1.0.2", + "@sapphire/async-queue": "^1.5.0", + "@sapphire/snowflake": "^3.5.1", + "@vladfrangu/async_event_emitter": "^2.2.2", + "discord-api-types": "0.37.61", + "magic-bytes.js": "^1.5.0", + "tslib": "^2.6.2", + "undici": "5.27.2" + }, + "engines": { + "node": ">=16.11.0" + } + }, + "node_modules/discord.js/node_modules/@discordjs/rest/node_modules/@discordjs/collection": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz", + "integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.41.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", + "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "@eslint/eslintrc": "^2.0.3", + "@eslint/js": "8.41.0", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.0", + "eslint-visitor-keys": "^3.4.1", + "espree": "^9.5.2", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-regexp": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz", + "integrity": "sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.4.0", + "comment-parser": "^1.1.2", + "grapheme-splitter": "^1.0.4", + "jsdoctypeparser": "^9.0.0", + "refa": "^0.11.0", + "regexp-ast-analysis": "^0.6.0", + "scslre": "^0.2.0" + }, + "engines": { + "node": "^12 || >=14" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", + "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", + "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/espree": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-content-type-parse": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", + "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==" + }, + "node_modules/fast-decode-uri-component": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stringify": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.14.1.tgz", + "integrity": "sha512-J1Grbf0oSXV3lKsBf3itz1AvRk43qVrx3Ac10sNvi3LZaz1by4oDdYKFrJycPhS8+Gb7y8rgV/Jqw1UZVjyNvw==", + "dependencies": { + "@fastify/merge-json-schemas": "^0.1.0", + "ajv": "^8.10.0", + "ajv-formats": "^3.0.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^2.1.0", + "json-schema-ref-resolver": "^1.0.1", + "rfdc": "^1.2.0" + } + }, + "node_modules/fast-json-stringify/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/fast-json-stringify/node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-querystring": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", + "dependencies": { + "fast-decode-uri-component": "^1.0.1" + } + }, + "node_modules/fast-redact": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz", + "integrity": "sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fast-uri": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.3.0.tgz", + "integrity": "sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==" + }, + "node_modules/fastify": { + "version": "4.26.2", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.26.2.tgz", + "integrity": "sha512-90pjTuPGrfVKtdpLeLzND5nyC4woXZN5VadiNQCicj/iJU4viNHKhsAnb7jmv1vu2IzkLXyBiCzdWuzeXgQ5Ug==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "dependencies": { + "@fastify/ajv-compiler": "^3.5.0", + "@fastify/error": "^3.4.0", + "@fastify/fast-json-stringify-compiler": "^4.3.0", + "abstract-logging": "^2.0.1", + "avvio": "^8.3.0", + "fast-content-type-parse": "^1.1.0", + "fast-json-stringify": "^5.8.0", + "find-my-way": "^8.0.0", + "light-my-request": "^5.11.0", + "pino": "^8.17.0", + "process-warning": "^3.0.0", + "proxy-addr": "^2.0.7", + "rfdc": "^1.3.0", + "secure-json-parse": "^2.7.0", + "semver": "^7.5.4", + "toad-cache": "^3.3.0" + } + }, + "node_modules/fastify/node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/fastify/node_modules/pino": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-8.20.0.tgz", + "integrity": "sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ==", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.1.1", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.1.0", + "pino-std-serializers": "^6.0.0", + "process-warning": "^3.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^3.7.0", + "thread-stream": "^2.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/fastify/node_modules/pino-abstract-transport": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", + "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", + "dependencies": { + "readable-stream": "^4.0.0", + "split2": "^4.0.0" + } + }, + "node_modules/fastify/node_modules/pino-std-serializers": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", + "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" + }, + "node_modules/fastify/node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" + }, + "node_modules/fastify/node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/fastify/node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/fastify/node_modules/sonic-boom": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", + "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/fastify/node_modules/thread-stream": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", + "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-my-way": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.1.0.tgz", + "integrity": "sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-querystring": "^1.0.0", + "safe-regex2": "^2.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/hjson": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", + "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==", + "license": "MIT", + "bin": { + "hjson": "bin/hjson" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "license": "ISC" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdoctypeparser": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", + "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", + "dev": true, + "license": "MIT", + "bin": { + "jsdoctypeparser": "bin/jsdoctypeparser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-schema-ref-resolver": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", + "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/keyv": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/light-my-request": { + "version": "5.13.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.13.0.tgz", + "integrity": "sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==", + "dependencies": { + "cookie": "^0.6.0", + "process-warning": "^3.0.0", + "set-cookie-parser": "^2.4.1" + } + }, + "node_modules/light-my-request/node_modules/process-warning": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", + "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "license": "MIT" + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-bytes.js": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", + "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==", + "license": "MIT" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true, + "license": "MIT" + }, + "node_modules/nekos.life": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/nekos.life/-/nekos.life-3.0.0.tgz", + "integrity": "sha512-7LbvSqLtfK4XRA91nJaGOWthrNADmG7Vx9d54TC77Hx5qFvRCssFUaHraI6bZGjVENBCUaF7CreisoFX+8mnKQ==", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nodemon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", + "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "license": "MIT", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/on-exit-leak-free": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", + "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==", + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pino": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", + "integrity": "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0", + "fast-redact": "^3.0.0", + "on-exit-leak-free": "^0.2.0", + "pino-abstract-transport": "v0.5.0", + "pino-std-serializers": "^4.0.0", + "process-warning": "^1.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.1.0", + "safe-stable-stringify": "^2.1.0", + "sonic-boom": "^2.2.1", + "thread-stream": "^0.15.1" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", + "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", + "license": "MIT", + "dependencies": { + "duplexify": "^4.1.2", + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", + "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "license": "MIT", + "dependencies": { + "parse-ms": "^2.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prisma": { + "version": "5.12.1", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.12.1.tgz", + "integrity": "sha512-SkMnb6wyIxTv9ACqiHBI2u9gD6y98qXRoCoLEnZsF6yee5Qg828G+ARrESN+lQHdw4maSZFFSBPPDpvSiVTo0Q==", + "devOptional": true, + "hasInstallScript": true, + "dependencies": { + "@prisma/engines": "5.12.1" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-warning": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", + "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/real-require": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", + "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/refa": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz", + "integrity": "sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.0" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/regexp-ast-analysis": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz", + "integrity": "sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.0", + "refa": "^0.11.0" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-regex2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", + "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", + "dependencies": { + "ret": "~0.2.0" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/scslre": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz", + "integrity": "sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.0", + "refa": "^0.11.0", + "regexp-ast-analysis": "^0.6.0" + } + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sonic-boom": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", + "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/thread-stream": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", + "integrity": "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==", + "license": "MIT", + "dependencies": { + "real-require": "^0.1.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toad-cache": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", + "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "license": "ISC", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/ts-mixer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", + "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", + "license": "MIT" + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-toolbelt": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", + "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-memoize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz", + "integrity": "sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==", + "license": "MIT" + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "license": "MIT" + }, + "node_modules/undici": { + "version": "5.27.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz", + "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==", + "license": "MIT", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=14.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" + }, + "node_modules/yarn": { + "version": "1.22.19", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz", + "integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==", + "hasInstallScript": true, + "license": "BSD-2-Clause", + "bin": { + "yarn": "bin/yarn.js", + "yarnpkg": "bin/yarn.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", + "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/prisma/migrations/20240417153138_thing/migration.sql b/prisma/migrations/20240417153138_thing/migration.sql new file mode 100644 index 0000000..2d33a38 --- /dev/null +++ b/prisma/migrations/20240417153138_thing/migration.sql @@ -0,0 +1,185 @@ +-- CreateEnum +CREATE TYPE "CafeStatus" AS ENUM ('Unprepared', 'Preparing', 'Brewing', 'Fermenting', 'PendingDelivery', 'Delivering', 'Delivered', 'Cancelled', 'Deleted', 'Failed', 'Claimed'); + +-- CreateEnum +CREATE TYPE "OrderStatus" AS ENUM ('Unprepared', 'Preparing', 'Brewing', 'Fermenting', 'PendingDelivery', 'Delivering', 'Delivered', 'Cancelled', 'Deleted', 'Failed', 'Claimed'); + +-- CreateTable +CREATE TABLE "WorkerInfo" ( + "id" VARCHAR(20) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "preparations" INTEGER NOT NULL DEFAULT 0, + "deliveries" INTEGER NOT NULL DEFAULT 0, + "deliveryMessage" TEXT, + "commandUsageCount" INTEGER NOT NULL, + "lastCommandName" TEXT, + "cafeDeliveryMessage" TEXT, + + CONSTRAINT "WorkerInfo_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "UserInfo" ( + "id" VARCHAR(30) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "balance" INTEGER NOT NULL DEFAULT 0, + "newBalance" INTEGER, + "tabLimit" DOUBLE PRECISION NOT NULL DEFAULT 0, + "donuts" INTEGER NOT NULL DEFAULT 0, + + CONSTRAINT "UserInfo_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "trees" ( + "id" TEXT NOT NULL, + "age" INTEGER NOT NULL, + "water" TIMESTAMP(3) NOT NULL, + "maxAge" INTEGER NOT NULL, + + CONSTRAINT "trees_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Tab" ( + "id" SERIAL NOT NULL, + "userId" VARCHAR(20) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "paidAt" TIMESTAMP(3), + "amount" DOUBLE PRECISION NOT NULL, + "tabLimit" DOUBLE PRECISION NOT NULL DEFAULT 0, + "amountNeeded" DOUBLE PRECISION NOT NULL DEFAULT 0, + "amountRemaining" DOUBLE PRECISION NOT NULL DEFAULT 0, + + CONSTRAINT "Tab_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Blacklist" ( + "id" VARCHAR(20) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "reason" TEXT NOT NULL, + "blacklister" VARCHAR(20) NOT NULL, + + CONSTRAINT "Blacklist_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "CafeOrders" ( + "id" VARCHAR(10) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "user" VARCHAR(20) NOT NULL, + "details" TEXT NOT NULL, + "status" "CafeStatus" NOT NULL DEFAULT 'Unprepared', + "channel" VARCHAR(20) NOT NULL, + "guild" VARCHAR(20) NOT NULL, + "claimer" VARCHAR(20), + "deliverer" VARCHAR(20), + "image" TEXT, + "timeout" TIMESTAMP(3), + "deleteReason" TEXT, + "bakeRating" INTEGER, + "prepRating" INTEGER, + "deliveryRating" INTEGER, + "flags" INTEGER NOT NULL DEFAULT 0, + "putOnTab" BOOLEAN, + "amount" DOUBLE PRECISION, + + CONSTRAINT "CafeOrders_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Orders" ( + "id" VARCHAR(10) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "user" VARCHAR(20) NOT NULL, + "details" TEXT NOT NULL, + "status" "OrderStatus" NOT NULL DEFAULT 'Unprepared', + "channel" VARCHAR(20) NOT NULL, + "guild" VARCHAR(20) NOT NULL, + "claimer" VARCHAR(20), + "deliverer" VARCHAR(20), + "image" TEXT, + "timeout" TIMESTAMP(3), + "deleteReason" TEXT, + "bakeRating" INTEGER, + "prepRating" INTEGER, + "deliveryRating" INTEGER, + "flags" INTEGER NOT NULL DEFAULT 0, + "putOnTab" BOOLEAN, + "amount" DOUBLE PRECISION, + + CONSTRAINT "Orders_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "dishes" ( + "id" VARCHAR(1234) NOT NULL, + "status" INTEGER NOT NULL, + "createdAt" TIMESTAMP(6) NOT NULL, + "updatedAt" TIMESTAMP(6) NOT NULL, + + CONSTRAINT "dishes_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "GuildsXP" ( + "userId" TEXT NOT NULL, + "guildId" TEXT NOT NULL, + "level" INTEGER NOT NULL DEFAULT 0, + "exp" INTEGER NOT NULL DEFAULT 0, + "notificationChannelId" TEXT +); + +-- CreateTable +CREATE TABLE "WorkerStats" ( + "id" TEXT NOT NULL, + "ordersBrewed" INTEGER NOT NULL, + "ordersDelivered" INTEGER NOT NULL, + "lastUsed" TIMESTAMP(3) NOT NULL, + "lastCommand" TEXT, + + CONSTRAINT "WorkerStats_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "MenuItem" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT NOT NULL, + "price" DOUBLE PRECISION NOT NULL, + "category" TEXT NOT NULL, + + CONSTRAINT "MenuItem_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ShopItem" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "price" INTEGER NOT NULL, + "description" TEXT NOT NULL, + "type" TEXT NOT NULL, + "roleId" TEXT, + + CONSTRAINT "ShopItem_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "InventoryItem" ( + "id" TEXT NOT NULL, + "itemId" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "quantity" INTEGER NOT NULL, + + CONSTRAINT "InventoryItem_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "Tab_userId_key" ON "Tab"("userId"); + +-- CreateIndex +CREATE UNIQUE INDEX "GuildsXP_userId_guildId_key" ON "GuildsXP"("userId", "guildId"); + +-- AddForeignKey +ALTER TABLE "Tab" ADD CONSTRAINT "Tab_userId_fkey" FOREIGN KEY ("userId") REFERENCES "UserInfo"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..fbffa92 --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file From 26716e45ec73daed3dfd74289070dba9d80b72de Mon Sep 17 00:00:00 2001 From: floof Date: Thu, 18 Apr 2024 08:58:46 -0500 Subject: [PATCH 63/79] update ebrew --- prisma/schema.prisma | 8 - purgatory/ebrew.ts | 545 +++++++++++++++++++++++-------------------- 2 files changed, 293 insertions(+), 260 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 7e0fa6e..ec49302 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,15 +1,11 @@ generator client { provider = "prisma-client-js" binaryTargets = ["native", "windows"] - provider = "prisma-client-js" - binaryTargets = ["native", "windows"] } datasource db { provider = "postgresql" url = env("DATABASE_URL") - provider = "postgresql" - url = env("DATABASE_URL") } model WorkerInfo { @@ -59,10 +55,6 @@ model Blacklist { createdAt DateTime @default(now()) reason String blacklister String @db.VarChar(20) - id String @id @db.VarChar(20) - createdAt DateTime @default(now()) - reason String - blacklister String @db.VarChar(20) } model CafeOrders { diff --git a/purgatory/ebrew.ts b/purgatory/ebrew.ts index 8c0d1bb..05a443c 100644 --- a/purgatory/ebrew.ts +++ b/purgatory/ebrew.ts @@ -1,259 +1,300 @@ +// @ts-nocheck /* eslint-disable indent */ /* eslint-disable quotes */ -import {OrderStatus} from "@prisma/client"; -import {db} from "../src/database/database"; -import {upsertWorkerInfo} from "../src/database/workerInfo"; -import {constants} from "../src/providers/config"; -import {permissions} from "../src/providers/permissions"; -import {Command} from "../src/structures/Command"; -import {randRange} from "../src/utils/utils"; -import {CommandInteraction, ComponentType, EmbedBuilder, StringSelectMenuBuilder} from "discord.js"; +import { OrderStatus } from "@prisma/client"; +import { db } from "../src/database/database"; +import { upsertWorkerInfo } from "../src/database/workerInfo"; +import { constants } from "../src/providers/config"; +import { permissions } from "../src/providers/permissions"; +import { Command } from "../src/structures/Command"; +import { randRange } from "../src/utils/utils"; +import { + CommandInteraction, + ComponentType, + EmbedBuilder, + StringSelectMenuBuilder, +} from "discord.js"; // Define the getClaimedOrders function without specifying OrderStatus async function getClaimedOrders(userId: string) { - return await db.orders.findMany({ - where: { - claimer: userId, - status: OrderStatus.Preparing, - }, - }); + return await db.orders.findMany({ + where: { + claimer: userId, + status: OrderStatus.Preparing, + }, + }); } -export const command = new Command( - "ebrew", - "Brews your claimed order." -) - .addSubCommand((subcommand) => - subcommand - .setName("attach") - .setDescription("Attach an image to your order.") - .addAttachmentOption((option) => - option - .setName("attachment") - .setDescription("The image to attach to the order.") - .setRequired(true) - ) - ) - .addSubCommand((subcommand) => - subcommand - .setName("url") - .setDescription("Attach an image to your order by URL.") - .addStringOption((option) => - option - .setName("url") - .setDescription("The URL of the image to attach to the order.") - .setRequired(true) - ) - ) - .addSubCommand((subcommand) => - subcommand - .setName("claim") - .setDescription("Claim an order.") - ) - .addPermission(permissions.employee) - .setExecutor(async (int: CommandInteraction) => { - // Check the subcommand - const subcommand = int.options.getSubcommand(true); - - if (subcommand === "claim") { - // Get a list of claimed orders for the user using getClaimedOrders - const claimedOrders = await getClaimedOrders(int.user.id); - - // Check if the user has claimed orders - if (claimedOrders.length === 0) { - await int.reply({ content: "You don't have any claimed orders to brew." }); - return; - } - - // Build a select menu with claimed order options - const orderOptions = claimedOrders.map(order => ({ - label: `Order ${order.id}`, - value: order.id.toString(), - description: `User: ${order.user.substring(0, 15)}...\nDetails: ${order.details.substring(0, 50)}...`, - // Include user and details in the description, limiting the length - })); - - const orderSelectMenu = new StringSelectMenuBuilder() - .setCustomId("select_order_to_claim") - .setPlaceholder("Select an order to brew") - .addOptions(orderOptions) - .toJSON(); - - const actionRow = { - type: ComponentType.ActionRow, - components: [orderSelectMenu], - }; - - await int.reply({ - content: "Please select an order to brew:", - components: [actionRow], - ephemeral: true, - }); - - // Create a collector to listen for the user's selection - const filter = (i) => i.customId === "select_order_to_claim" && i.user.id === int.user.id; - const collector = int.channel.createMessageComponentCollector({ filter, time: 15000 }); - - collector.on("collect", async (interaction) => { - const selectedOrderId = interaction.values[0]; - - // Fetch the order details using the order ID - const selectedOrder = await db.orders.findUnique({ - where: { - id: selectedOrderId, - }, - }); - - if (!selectedOrder) { - await interaction.update({ content: "Invalid order selected.", components: [] }); - return; - } - - // Check if the order status is not OrderStatus.Preparing - if (selectedOrder.status !== OrderStatus.Preparing) { - await interaction.update({ - content: `You cannot claim an order with status ${selectedOrder.status}.`, - components: [], - }); - return; - } - - // Store the selected order ID in a context variable for future use - int.client.ordersInProcess = { - [int.user.id]: { - orderId: selectedOrderId, - }, - }; - - await interaction.update({ - content: `You selected Order ${selectedOrderId} to brew. Now, you can proceed to attach an image or provide a URL.`, - components: [], - }); - }); - - collector.on("end", async (collected) => { - if (collected.size === 0) { - await int.followUp("You didn't select an order in time."); - } - }); - - } else if ((subcommand === "attach" || subcommand === "url") && int.client.ordersInProcess?.[int.user.id]?.orderId) { - // Fetch the order ID from the context variable - const selectedOrderId = int.client.ordersInProcess[int.user.id].orderId; - - // Fetch the order details using the order ID - const order = await db.orders.findUnique({ - where: { - id: selectedOrderId, - }, - }); - - if (!order) { - await int.reply({ content: "Invalid order selected." }); - return; - } - - // Check if the order status is OrderStatus.PendingDelivery or OrderStatus.Brewing - if (order.status === OrderStatus.PendingDelivery || order.status === OrderStatus.Brewing) { - await int.reply({ content: "You have Already Brewed this order. select an new one!" }); - return; - } - - let imageUrl: string | undefined; - - if (subcommand === "attach") { - const attachment = int.options.get("attachment", true)?.attachment; - if (!attachment) { - await int.reply({ content: "Attachment is missing or not valid." }); - return; - } - imageUrl = attachment.url; - } else if (subcommand === "url") { - const url = int.options.getString("url", true); - imageUrl = url; - } - - // Include order description in the confirmation message - const confirmationDescription = `Order Details: ${order.details}`; - - const imagePreviewEmbed = new EmbedBuilder() - .setTitle("Image Preview") - .setImage(imageUrl) // Set the image URL as the preview - .toJSON(); - - const confirmSelectMenu = new StringSelectMenuBuilder() - .setCustomId("confirm_brew") - .setPlaceholder("Select an option") - .addOptions([ - { - label: "Yes", - description: "Proceed with brewing the order", - value: "yes", - }, - { - label: "No", - description: "Cancel the brewing process", - value: "no", - }, - ]) - .toJSON(); - - const confirmActionRow = { - type: ComponentType.ActionRow, - components: [confirmSelectMenu], - }; - - await int.reply({ - content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, - embeds: [imagePreviewEmbed], // Include the image preview in the message - components: [confirmActionRow], - ephemeral: true, - }); - - const confirmFilter = (i) => i.customId === "confirm_brew" && i.user.id === int.user.id; - const confirmCollector = int.channel.createMessageComponentCollector({ filter: confirmFilter, time: 15000 }); - - confirmCollector.on("collect", async (confirmInteraction) => { - if (confirmInteraction.isStringSelectMenu()) { - const selectedValue = confirmInteraction.values[0]; - if (selectedValue === "yes") { - await confirmInteraction.update({ - content: "You chose to proceed with brewing the order.", - components: [], - }); - - const time = randRange(...constants.brewTimeRangeMs); - await db.orders.update({ - where: { - id: order.id, - }, - data: { - status: OrderStatus.Brewing, - image: imageUrl ?? "default.png", - timeout: new Date(Date.now() + time), - }, - }); - await upsertWorkerInfo(int.user); - - await int.followUp({ - content: "Brewing process started.", - files: imageUrl ? [{ attachment: imageUrl }] : undefined, - }); - } else if (selectedValue === "no") { - await confirmInteraction.update({ - content: "You chose to cancel the brewing process.", - components: [], - }); - } - } - }); - - confirmCollector.on("end", async (collected) => { - if (collected.size === 0) { - await int.followUp("You didn't make a selection in time."); - } - }); - } else { - await int.reply({ content: "You need to claim an order first before attaching an image or providing a URL." }); - } - }); +export const command = new Command("ebrew", "Brews your claimed order.") + .addSubCommand((subcommand) => + subcommand + .setName("attach") + .setDescription("Attach an image to your order.") + .addAttachmentOption((option) => + option + .setName("attachment") + .setDescription("The image to attach to the order.") + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand + .setName("url") + .setDescription("Attach an image to your order by URL.") + .addStringOption((option) => + option + .setName("url") + .setDescription( + "The URL of the image to attach to the order." + ) + .setRequired(true) + ) + ) + .addSubCommand((subcommand) => + subcommand.setName("claim").setDescription("Claim an order.") + ) + .addPermission(permissions.employee) + .setExecutor(async (int: CommandInteraction) => { + // Check the subcommand + const subcommand = int.options.getSubcommand(true); + + if (subcommand === "claim") { + // Get a list of claimed orders for the user using getClaimedOrders + const claimedOrders = await getClaimedOrders(int.user.id); + + // Check if the user has claimed orders + if (claimedOrders.length === 0) { + await int.reply({ + content: "You don't have any claimed orders to brew.", + }); + return; + } + + // Build a select menu with claimed order options + const orderOptions = claimedOrders.map((order) => ({ + label: `Order ${order.id}`, + value: order.id.toString(), + description: `User: ${order.user.substring( + 0, + 15 + )}...\nDetails: ${order.details.substring(0, 50)}...`, + // Include user and details in the description, limiting the length + })); + + const orderSelectMenu = new StringSelectMenuBuilder() + .setCustomId("select_order_to_claim") + .setPlaceholder("Select an order to brew") + .addOptions(orderOptions) + .toJSON(); + + const actionRow = { + type: ComponentType.ActionRow, + components: [orderSelectMenu], + }; + + await int.reply({ + content: "Please select an order to brew:", + components: [actionRow], + ephemeral: true, + }); + + // Create a collector to listen for the user's selection + const filter = (i) => + i.customId === "select_order_to_claim" && + i.user.id === int.user.id; + const collector = int.channel.createMessageComponentCollector({ + filter, + time: 15000, + }); + + collector.on("collect", async (interaction) => { + const selectedOrderId = interaction.values[0]; + + // Fetch the order details using the order ID + const selectedOrder = await db.orders.findUnique({ + where: { + id: selectedOrderId, + }, + }); + + if (!selectedOrder) { + await interaction.update({ + content: "Invalid order selected.", + components: [], + }); + return; + } + + // Check if the order status is not OrderStatus.Preparing + if (selectedOrder.status !== OrderStatus.Preparing) { + await interaction.update({ + content: `You cannot claim an order with status ${selectedOrder.status}.`, + components: [], + }); + return; + } + + // Store the selected order ID in a context variable for future use + int.client.ordersInProcess = { + [int.user.id]: { + orderId: selectedOrderId, + }, + }; + + await interaction.update({ + content: `You selected Order ${selectedOrderId} to brew. Now, you can proceed to attach an image or provide a URL.`, + components: [], + }); + }); + + collector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't select an order in time."); + } + }); + } else if ( + (subcommand === "attach" || subcommand === "url") && + int.client.ordersInProcess?.[int.user.id]?.orderId + ) { + // Fetch the order ID from the context variable + const selectedOrderId = + int.client.ordersInProcess[int.user.id].orderId; + + // Fetch the order details using the order ID + const order = await db.orders.findUnique({ + where: { + id: selectedOrderId, + }, + }); + + if (!order) { + await int.reply({ content: "Invalid order selected." }); + return; + } + + // Check if the order status is OrderStatus.PendingDelivery or OrderStatus.Brewing + if ( + order.status === OrderStatus.PendingDelivery || + order.status === OrderStatus.Brewing + ) { + await int.reply({ + content: + "You have Already Brewed this order. select an new one!", + }); + return; + } + + let imageUrl: string | undefined; + + if (subcommand === "attach") { + const attachment = int.options.get( + "attachment", + true + )?.attachment; + if (!attachment) { + await int.reply({ + content: "Attachment is missing or not valid.", + }); + return; + } + imageUrl = attachment.url; + } else if (subcommand === "url") { + const url = int.options.getString("url", true); + imageUrl = url; + } + + // Include order description in the confirmation message + const confirmationDescription = `Order Details: ${order.details}`; + + const imagePreviewEmbed = new EmbedBuilder() + .setTitle("Image Preview") + .setImage(imageUrl) // Set the image URL as the preview + .toJSON(); + + const confirmSelectMenu = new StringSelectMenuBuilder() + .setCustomId("confirm_brew") + .setPlaceholder("Select an option") + .addOptions([ + { + label: "Yes", + description: "Proceed with brewing the order", + value: "yes", + }, + { + label: "No", + description: "Cancel the brewing process", + value: "no", + }, + ]) + .toJSON(); + + const confirmActionRow = { + type: ComponentType.ActionRow, + components: [confirmSelectMenu], + }; + + await int.reply({ + content: `Do you want to proceed with brewing this order?\n${confirmationDescription}`, + embeds: [imagePreviewEmbed], // Include the image preview in the message + components: [confirmActionRow], + ephemeral: true, + }); + + const confirmFilter = (i) => + i.customId === "confirm_brew" && i.user.id === int.user.id; + const confirmCollector = + int.channel.createMessageComponentCollector({ + filter: confirmFilter, + time: 15000, + }); + + confirmCollector.on("collect", async (confirmInteraction) => { + if (confirmInteraction.isStringSelectMenu()) { + const selectedValue = confirmInteraction.values[0]; + if (selectedValue === "yes") { + await confirmInteraction.update({ + content: + "You chose to proceed with brewing the order.", + components: [], + }); + + const time = randRange(...constants.brewTimeRangeMs); + await db.orders.update({ + where: { + id: order.id, + }, + data: { + status: OrderStatus.Brewing, + image: imageUrl ?? "default.png", + timeout: new Date(Date.now() + time), + }, + }); + await upsertWorkerInfo(int.user); + + await int.followUp({ + content: "Brewing process started.", + files: imageUrl + ? [{ attachment: imageUrl }] + : undefined, + }); + } else if (selectedValue === "no") { + await confirmInteraction.update({ + content: "You chose to cancel the brewing process.", + components: [], + }); + } + } + }); + + confirmCollector.on("end", async (collected) => { + if (collected.size === 0) { + await int.followUp("You didn't make a selection in time."); + } + }); + } else { + await int.reply({ + content: + "You need to claim an order first before attaching an image or providing a URL.", + }); + } + }); From e3d0786ec690acca578f97f91e88fb7d7b472fa5 Mon Sep 17 00:00:00 2001 From: floof Date: Thu, 18 Apr 2024 09:15:53 -0500 Subject: [PATCH 64/79] bug squashing --- config/text.hjson | 39 ---------------- purgatory/drink.ts | 41 ++++++++++++----- src/commands/crime.ts | 41 ----------------- src/commands/daily.ts | 28 ----------- src/commands/economy/crime.ts | 87 ++++++++++++++++++++--------------- src/commands/economy/daily.ts | 56 +++++++++++++--------- src/commands/economy/work.ts | 38 +++++++++------ src/commands/work.ts | 30 ------------ src/providers/drink.ts | 34 -------------- tsconfig.json | 6 ++- 10 files changed, 143 insertions(+), 257 deletions(-) delete mode 100644 src/commands/crime.ts delete mode 100644 src/commands/daily.ts delete mode 100644 src/commands/work.ts delete mode 100644 src/providers/drink.ts diff --git a/config/text.hjson b/config/text.hjson index 8bd3428..e97ba30 100644 --- a/config/text.hjson +++ b/config/text.hjson @@ -16,9 +16,6 @@ noClaimedOrder: "[no] You do not have an order claimed at the moment." noOrders: "[no] You don't have any orders yet." identified: **{name}** (`{id}`) - noClaimedOrder: "[no] You do not have an order claimed at the moment." - noOrders: "[no] You don't have any orders yet." - identified: **{name}** (`{id}`) orderEmbed: { title: Order Information for `{}` description: Information about the order `{}`. @@ -34,7 +31,6 @@ } } invalidNatural: "[no] Invalid number provided; the number must be an integer greater than 0." - invalidNatural: "[no] Invalid number provided; the number must be an integer greater than 0." notEnoughBalance: "[no] You do not have enough money." interactOwn: "[no] You cannot interact with your own orders." mainGuildOnly: "[no] This command can only be used in the main server." @@ -66,15 +62,11 @@ claim: { existing: "[no] You already have an order claimed." success: "[yes] You have successfully claimed the order `{id}`." - success: "[yes] You have successfully claimed the order `{id}`." } unclaim: { success: "[yes] You have successfully unclaimed the order `{id}` . ", notClaimed: "[no] You haven't claimed any order.", // Add this line for the error message }, - success: "[yes] You have successfully unclaimed the order `{id}` . ", - notClaimed: "[no] You haven't claimed any order.", // Add this line for the error message - }, cancel: { success: "[yes] Your order has been successfully cancelled." canned: "An order with the id `{id}` was cancelled!\n Order desc `{details}`\nPlaced by {tag}." @@ -90,7 +82,6 @@ noChannel: "[no] I wasn't able to access the channel for the order, and the order failed to deliver." success: "[yes] The order has been successfully delivered." multiSuccess: "Successfully delivered {count} orders." - multiSuccess: "Successfully delivered {count} orders." default: ''' Hi, {mention}! Here is your {details}, delivered by {preparer}. Make sure to give feedback with `/feedback` and tip with `/tip`! @@ -134,8 +125,6 @@ balance: { success: You currently have `${}` Balance!. success1: You currently have `${}` Donuts!. - success: You currently have `${}` Balance!. - success1: You currently have `${}` Donuts!. } work: { responses: [ @@ -167,30 +156,20 @@ You fought an old lady and got {}. You decided to go to the corner shop and rob them. You got {}. You robbed an ATM and got {}. - You decided to go to the corner shop and rob them. You got {}. - You robbed an ATM and got {}. You robbed Tofu and got {}. A kid spat on you, you got {} for selling it to child predators. You burnt down someones mansion and got {}. You kiddnapped someones dog. They paid you {} to get the dog back. You stole someones jewelry and sold it for {}. - A kid spat on you, you got {} for selling it to child predators. - You burnt down someones mansion and got {}. - You kiddnapped someones dog. They paid you {} to get the dog back. - You stole someones jewelry and sold it for {}. - ] failure: [ You tried to steal from Drunk Bartender and lost {}. You tried to fight an old lady, lost, then got robbed for {}. - You tried to fight an old lady, lost, then got robbed for {}. You tried to rob the corner shop and lost {}. You tried robbing an ATM and ended up being scammed for {}. - You tried robbing an ATM and ended up being scammed for {}. You attempted to rob Tofu but ended up being robbed by Tofu for {}. You stole someones purse when they were walking their dog and the dog started chasing you. You dropped her purse and an extra {} while running away. - You stole someones purse when they were walking their dog and the dog started chasing you. You dropped her purse and an extra {} while running away. ] } daily: { @@ -215,12 +194,6 @@ invalidRating: "[no] Invalid rating. Please provide a rating between 1 and 5 for each process." } - rate: { - success: "[yes] You have successfully rated the bake/prep/delivery process of your last order.", - alreadyRated: "[no] You have already rated the bake/prep/delivery process of your previous order. Try ordering another.", - invalidRating: "[no] Invalid rating. Please provide a rating between 1 and 5 for each process." - } - tip: { success: "[yes] You have successfully tipped `${}` on your order of `{}`." alreadyTipped: "[no] You have already tipped your previous order. Try ordering another." @@ -238,16 +211,11 @@ success: "[yes] The order was successfully deleted with the provided reason." dm: "[no] Your order of `{}` was deleted for `{}`. If you feel that this was a mistake, please contact us." userDmDisabled: "[no] Unable to send a direct message to the user. Their DMs are disabled.", - dmFailed: "[no] Failed to send a direct message to the user. Please try again later.", - "userNotFound": "[no] User not found. Please try again.", - successNoDm: "[yes] The order was successfully deleted, but we couldn't send a DM to the user because their DMs are off.", - userDmDisabled: "[no] Unable to send a direct message to the user. Their DMs are disabled.", dmFailed: "[no] Failed to send a direct message to the user. Please try again later.", "userNotFound": "[no] User not found. Please try again.", successNoDm: "[yes] The order was successfully deleted, but we couldn't send a DM to the user because their DMs are off.", } - blacklist: { success: "[yes] The ID has been successfully blacklisted." existing: "[no] The ID is already blacklisted." @@ -280,11 +248,4 @@ //payConfirmation: "Tab payment confirmation message", //payMaxLimit: "Tab payment maximum limit reached message", //} - //tab: //{ - //createConfirmation: "Tab creation confirmation message", - //createMaxLimit: "Tab creation maximum limit reached message", - //createCancelled: "Tab creation cancelled message", - //payConfirmation: "Tab payment confirmation message", - //payMaxLimit: "Tab payment maximum limit reached message", - //} } \ No newline at end of file diff --git a/purgatory/drink.ts b/purgatory/drink.ts index 4b48e53..eef32e7 100644 --- a/purgatory/drink.ts +++ b/purgatory/drink.ts @@ -1,25 +1,42 @@ // @ts-nocheck -// drink.ts -import {Drink, PrismaClient} from "@prisma/client"; +import type { Drink } from "@prisma/client"; +import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); -// Function to retrieve all drinks +/** Retrieves all drinks from the database. */ export async function getAllDrinks(): Promise { - return prisma.drink.findMany(); + return prisma.drink.findMany(); } -// Function to create a new drink -export async function createDrink(data: Partial): Promise { - return prisma.drink.create({ data }); +/** + * Creates a drink. + * @param data - Drink data. The `createdAt` and `updatedAt` fields are optional, and will be set to the current timestamp if not provided. + */ +export async function createDrink( + data: Omit & + Partial> +): Promise { + return prisma.drink.create({ data }); } -// Function to update an existing drink -export async function updateDrink(id: number, data: Partial): Promise { - return prisma.drink.update({ where: { id }, data }); +/** + * Retrieves a drink by its ID, and updates it. + * @param id - The ID of the drink to update. + * @param data - Drink data. The `createdAt` and `updatedAt` fields are optional, and will be set to the current timestamp if not provided. + */ +export async function updateDrink( + id: number, + data: Omit & + Partial> +): Promise { + return prisma.drink.update({ where: { id }, data }); } -// Function to delete a drink +/** + * Deletes a drink. + * @param id - The ID of the drink to delete. + */ export async function deleteDrink(id: number): Promise { - return prisma.drink.delete({ where: { id } }); + return prisma.drink.delete({ where: { id } }); } diff --git a/src/commands/crime.ts b/src/commands/crime.ts deleted file mode 100644 index 3ebebf0..0000000 --- a/src/commands/crime.ts +++ /dev/null @@ -1,41 +0,0 @@ -//crime.ts -import {db} from "../database/database"; -import {upsertUserInfo} from "../database/userInfo"; -import {constants, text} from "../providers/config"; -import {Command} from "../structures/Command"; -import {format} from "../utils/string"; -import pms from "pretty-ms"; -import {randRange, sampleArray} from "../utils/utils"; - -const cooldowns: Record = {}; - -export const command = new Command("crime", "Try your chances on doing crime!") - .setExecutor(async int => { - if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { - await int.reply( - format( - text.errors.cooldown, - pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) - ) - ); - return; - } - const result = [ - "Succesful", - "Failure" - ]; - const awnser = result[Math.floor(Math.random() * result.length)]; - if (awnser === "Failure") { - const info = await upsertUserInfo(int.user, int.guild?.id || ''); - const obtained = randRange(...constants.crime.amountRange); - cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { decrement: obtained } } }); - await int.reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); - } else { - const info = await upsertUserInfo(int.user, int.guild?.id || ''); - const obtained = randRange(...constants.crime.amountRange); - cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); - await int.reply(format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``)); - } - }); diff --git a/src/commands/daily.ts b/src/commands/daily.ts deleted file mode 100644 index c837d4c..0000000 --- a/src/commands/daily.ts +++ /dev/null @@ -1,28 +0,0 @@ -//daily.ts -import {db} from "../database/database"; -import {upsertUserInfo} from "../database/userInfo"; -import {constants, text} from "../providers/config"; -import {Command} from "../structures/Command"; -import {format} from "../utils/string"; -import pms from "pretty-ms"; -import {randRange, sampleArray} from "../utils/utils"; - -const cooldowns: Record = {}; - -export const command = new Command("daily", "Get your daily income!.") - .setExecutor(async int => { - if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { - await int.reply( - format( - text.errors.cooldown, - pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) - ) - ); - return; - } - const info = await upsertUserInfo(int.user, int.guild?.id || ''); - const obtained = randRange(...constants.daily.amountRange); - cooldowns[int.user.id] = Date.now() + constants.daily.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); - await int.reply(format(sampleArray(text.commands.daily.responses), `\`$${obtained}\``)); - }); \ No newline at end of file diff --git a/src/commands/economy/crime.ts b/src/commands/economy/crime.ts index 60b0646..b548c26 100644 --- a/src/commands/economy/crime.ts +++ b/src/commands/economy/crime.ts @@ -1,41 +1,56 @@ //crime.ts -import {db} from "../../database/database"; -import {upsertUserInfo} from "../../database/userInfo"; -import {constants, text} from "../../providers/config"; -import {Command} from "../../structures/Command"; -import {format} from "../../utils/string"; +import { db } from "../../database/database"; +import { upsertUserInfo } from "../../database/userInfo"; +import { constants, text } from "../../providers/config"; +import { Command } from "../../structures/Command"; +import { format } from "../../utils/string"; import pms from "pretty-ms"; -import {randRange, sampleArray} from "../../utils/utils"; +import { randRange, sampleArray } from "../../utils/utils"; const cooldowns: Record = {}; -export const command = new Command("crime", "Try your chances on doing crime!") - .setExecutor(async ({reply, user}) => { - if (user.id in cooldowns && cooldowns[user.id] >= Date.now()) { - await reply( - format( - text.errors.cooldown, - pms(cooldowns[user.id] - Date.now(), {compact: true, secondsDecimalDigits: 1}) - ) - ); - return; - } - const result = [ - "Successful", - "Failure" - ]; - const answer = result[Math.floor(Math.random() * result.length)]; - if (answer === "Failure") { - const info = await upsertUserInfo(user); - const obtained = randRange(...constants.crime.amountRange); - cooldowns[user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { decrement: obtained } } }); - await reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); - } else { - const info = await upsertUserInfo(user); - const obtained = randRange(...constants.crime.amountRange); - cooldowns[user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); - await reply(format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``)); - } - }); +export const command = new Command( + "crime", + "Try your chances on doing crime!" +).setExecutor(async ({ reply, user }) => { + if (user.id in cooldowns && cooldowns[user.id] >= Date.now()) { + await reply( + format( + text.errors.cooldown, + pms(cooldowns[user.id] - Date.now(), { + compact: true, + secondsDecimalDigits: 1, + }) + ) + ); + return; + } + const result = ["Successful", "Failure"]; + const answer = result[Math.floor(Math.random() * result.length)]; + if (answer === "Failure") { + const info = await upsertUserInfo(user); + const obtained = randRange(...constants.crime.amountRange); + cooldowns[user.id] = Date.now() + constants.crime.cooldownMs; + await db.userInfo.update({ + where: { id: info.id }, + data: { balance: { decrement: obtained } }, + }); + await reply( + format( + sampleArray(text.commands.crime.failure), + `\`$${-obtained}\`` + ) + ); + } else { + const info = await upsertUserInfo(user); + const obtained = randRange(...constants.crime.amountRange); + cooldowns[user.id] = Date.now() + constants.crime.cooldownMs; + await db.userInfo.update({ + where: { id: info.id }, + data: { balance: { increment: obtained } }, + }); + await reply( + format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``) + ); + } +}); diff --git a/src/commands/economy/daily.ts b/src/commands/economy/daily.ts index aaea4ab..582df96 100644 --- a/src/commands/economy/daily.ts +++ b/src/commands/economy/daily.ts @@ -1,28 +1,38 @@ //daily.ts -import {db} from "../../database/database"; -import {upsertUserInfo} from "../../database/userInfo"; -import {constants, text} from "../../providers/config"; -import {Command} from "../../structures/Command"; -import {format} from "../../utils/string"; +import { db } from "../../database/database"; +import { upsertUserInfo } from "../../database/userInfo"; +import { constants, text } from "../../providers/config"; +import { Command } from "../../structures/Command"; +import { format } from "../../utils/string"; import pms from "pretty-ms"; -import {randRange, sampleArray} from "../../utils/utils"; +import { randRange, sampleArray } from "../../utils/utils"; const cooldowns: Record = {}; -export const command = new Command("daily", "Get your daily income!.") - .setExecutor(async int => { - if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { - await int.reply( - format( - text.errors.cooldown, - pms(cooldowns[int.user.id] - Date.now(), {compact: true, secondsDecimalDigits: 1}) - ) - ); - return; - } - const info = await upsertUserInfo(int.user, int.guild?.id || ""); - const obtained = randRange(...constants.daily.amountRange); - cooldowns[int.user.id] = Date.now() + constants.daily.cooldownMs; - await db.userInfo.update({where: {id: info.id}, data: {balance: {increment: obtained}}}); - await int.reply(format(sampleArray(text.commands.daily.responses), `\`$${obtained}\``)); - }); \ No newline at end of file +export const command = new Command( + "daily", + "Get your daily income!." +).setExecutor(async (int) => { + if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { + await int.reply( + format( + text.errors.cooldown, + pms(cooldowns[int.user.id] - Date.now(), { + compact: true, + secondsDecimalDigits: 1, + }) + ) + ); + return; + } + const info = await upsertUserInfo(int.user); + const obtained = randRange(...constants.daily.amountRange); + cooldowns[int.user.id] = Date.now() + constants.daily.cooldownMs; + await db.userInfo.update({ + where: { id: info.id }, + data: { balance: { increment: obtained } }, + }); + await int.reply( + format(sampleArray(text.commands.daily.responses), `\`$${obtained}\``) + ); +}); diff --git a/src/commands/economy/work.ts b/src/commands/economy/work.ts index 82a22bc..608e170 100644 --- a/src/commands/economy/work.ts +++ b/src/commands/economy/work.ts @@ -1,30 +1,42 @@ /* eslint-disable quotes */ /* eslint-disable linebreak-style */ //work.ts -import {db} from "../../database/database"; -import {upsertUserInfo} from "../../database/userInfo"; -import {constants, text} from "../../providers/config"; -import {Command} from "../../structures/Command"; -import {format} from "../../utils/string"; +import { db } from "../../database/database"; +import { upsertUserInfo } from "../../database/userInfo"; +import { constants, text } from "../../providers/config"; +import { Command } from "../../structures/Command"; +import { format } from "../../utils/string"; import pms from "pretty-ms"; -import {randRange, sampleArray} from "../../utils/utils"; +import { randRange, sampleArray } from "../../utils/utils"; const cooldowns: Record = {}; -export const command = new Command("work", "Gets you some money.") - .setExecutor(async int => { +export const command = new Command("work", "Gets you some money.").setExecutor( + async (int) => { if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { await int.reply( format( text.errors.cooldown, - pms(cooldowns[int.user.id] - Date.now(), {compact: true, secondsDecimalDigits: 1}) + pms(cooldowns[int.user.id] - Date.now(), { + compact: true, + secondsDecimalDigits: 1, + }) ) ); return; } - const info = await upsertUserInfo(int.user, int.guild?.id || ""); + const info = await upsertUserInfo(int.user); const obtained = randRange(...constants.work.amountRange); cooldowns[int.user.id] = Date.now() + constants.work.cooldownMs; - await db.userInfo.update({where: {id: info.id}, data: {balance: {increment: obtained}}}); - await int.reply(format(sampleArray(text.commands.work.responses), `\`$${obtained}\``)); - }); + await db.userInfo.update({ + where: { id: info.id }, + data: { balance: { increment: obtained } }, + }); + await int.reply( + format( + sampleArray(text.commands.work.responses), + `\`$${obtained}\`` + ) + ); + } +); diff --git a/src/commands/work.ts b/src/commands/work.ts deleted file mode 100644 index ed30ffd..0000000 --- a/src/commands/work.ts +++ /dev/null @@ -1,30 +0,0 @@ -/* eslint-disable quotes */ -/* eslint-disable linebreak-style */ -//work.ts -import {db} from "../database/database"; -import {upsertUserInfo} from "../database/userInfo"; -import {constants, text} from "../providers/config"; -import {Command} from "../structures/Command"; -import {format} from "../utils/string"; -import pms from "pretty-ms"; -import {randRange, sampleArray} from "../utils/utils"; - -const cooldowns: Record = {}; - -export const command = new Command("work", "Gets you some money.") - .setExecutor(async int => { - if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { - await int.reply( - format( - text.errors.cooldown, - pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) - ) - ); - return; - } - const info = await upsertUserInfo(int.user, int.guild?.id || ''); - const obtained = randRange(...constants.work.amountRange); - cooldowns[int.user.id] = Date.now() + constants.work.cooldownMs; - await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); - await int.reply(format(sampleArray(text.commands.work.responses), `\`$${obtained}\``)); - }); diff --git a/src/providers/drink.ts b/src/providers/drink.ts deleted file mode 100644 index 6d0c3ee..0000000 --- a/src/providers/drink.ts +++ /dev/null @@ -1,34 +0,0 @@ -import type { Drink } from "@prisma/client"; -import { PrismaClient } from "@prisma/client"; - -const prisma = new PrismaClient(); - -/** Retrieves all drinks from the database. */ -export async function getAllDrinks(): Promise { - return prisma.drink.findMany(); -} - -/** - * Creates a drink. - * @param data - Drink data. The `createdAt` and `updatedAt` fields are optional, and will be set to the current timestamp if not provided. - */ -export async function createDrink(data: Omit & Partial>): Promise { - return prisma.drink.create({ data }); -} - -/** - * Retrieves a drink by its ID, and updates it. - * @param id - The ID of the drink to update. - * @param data - Drink data. The `createdAt` and `updatedAt` fields are optional, and will be set to the current timestamp if not provided. - */ -export async function updateDrink(id: number, data: Omit & Partial>): Promise { - return prisma.drink.update({ where: { id }, data }); -} - -/** - * Deletes a drink. - * @param id - The ID of the drink to delete. - */ -export async function deleteDrink(id: number): Promise { - return prisma.drink.delete({ where: { id } }); -} diff --git a/tsconfig.json b/tsconfig.json index 9b84d21..b32fa36 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,9 @@ { - "include": ["./src/**/*.ts", "src/commands/orders/order.ts"], + "include": [ + "./src/**/*.ts", + "src/commands/orders/order.ts", + "purgatory/drink.ts" + ], "exclude": ["./node_modules/**", "genenv.js"], "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ From 96f2b1a53de727a3f3d9c6e8f5a4884b9668aebe Mon Sep 17 00:00:00 2001 From: floof Date: Thu, 18 Apr 2024 09:16:30 -0500 Subject: [PATCH 65/79] update tsconfig paths --- tsconfig.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/tsconfig.json b/tsconfig.json index b32fa36..8c4b713 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,5 @@ { - "include": [ - "./src/**/*.ts", - "src/commands/orders/order.ts", - "purgatory/drink.ts" - ], + "include": ["./src/**/*.ts"], "exclude": ["./node_modules/**", "genenv.js"], "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ From efef65dc9aa9e973d3333ed44742896bee9ed703 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 19 Apr 2024 18:19:21 -0400 Subject: [PATCH 66/79] Update interactionCreate.ts Fix's the blacklist part so that it doesn't crash the bot if someone uses a command while blacklisted --- src/events/interactionCreate.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index 237b342..4b6a7f6 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -30,9 +30,10 @@ client.on("interactionCreate", async (int) => { } if (int.isCommand()) { if (blacklist.has(int.user.id)) { - logBlacklistedUserInteraction(int.user.id); await int.reply(text.errors.blacklisted); + return; // Return after replying to prevent further execution } + const command = commandRegistry.get(int.commandName); if (!command) throw new Error(`Unregistered command ${int.commandName}`); // TODO remove this and use discord builtin when permissions get better From 052c81b551d31b20420281579c5baff52e2feee1 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 19 Apr 2024 19:12:17 -0400 Subject: [PATCH 67/79] Delete src/structures/DrinksData.ts Not needed --- src/structures/DrinksData.ts | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 src/structures/DrinksData.ts diff --git a/src/structures/DrinksData.ts b/src/structures/DrinksData.ts deleted file mode 100644 index d602343..0000000 --- a/src/structures/DrinksData.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const drinksData = [ - { name: "Drink11", type: "normal", price: 10 }, - { name: "Drink22", type: "normal", price: 8 }, - { name: "Drink33", type: "normal", price: 12 }, - { name: "Drink32", type: "normal", price: 13 }, -]; \ No newline at end of file From 73cc7d7a071b7b51aa098ddcf28bb6bfeb858743 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 19 Apr 2024 19:12:33 -0400 Subject: [PATCH 68/79] Delete src/structures/CustomDrinkData.ts Not needed --- src/structures/CustomDrinkData.ts | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 src/structures/CustomDrinkData.ts diff --git a/src/structures/CustomDrinkData.ts b/src/structures/CustomDrinkData.ts deleted file mode 100644 index 1560373..0000000 --- a/src/structures/CustomDrinkData.ts +++ /dev/null @@ -1,6 +0,0 @@ -export const CustomDrinksData = [ - { name: "Drink1", type: "custom", price: 10 }, - { name: "Drink2", type: "custom", price: 8 }, - { name: "Drink3", type: "custom", price: 13 }, - { name: "Drink4", type: "custom", price: 10.99 }, -]; \ No newline at end of file From b3b7dab968bd6eabb35b3119214f4083754f4547 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Fri, 19 Apr 2024 19:13:29 -0400 Subject: [PATCH 69/79] Delete src/database/preloadimage.ts Not needed --- src/database/preloadimage.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/database/preloadimage.ts diff --git a/src/database/preloadimage.ts b/src/database/preloadimage.ts deleted file mode 100644 index e69de29..0000000 From 9e02fa1e525ffedf646e059271dc17ed9a3e9bcc Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Mon, 6 May 2024 20:47:56 -0400 Subject: [PATCH 70/79] stuffs --- config/config.hjson.example | 2 +- package.json | 18 +- prisma/schema.prisma | 127 ++-- src/api/server.ts | 125 ++++ src/commands/Devs/botinfo.ts | 6 +- src/commands/Devs/ws.ts | 132 ++-- src/commands/dashboard/auth.ts | 40 ++ src/commands/economy/crime.ts | 76 +-- src/commands/economy/drinkroulette.ts | 15 +- src/commands/order.disabled | 306 +++++++++ src/commands/orders/worker/claim.ts | 52 +- src/commands/orders/worker/unclaim.ts | 108 +-- src/commands/orders/worker/wash.ts | 15 +- src/commands/public/profile.ts | 11 +- src/database/clockdata.ts | 92 +++ src/database/order.ts | 29 +- src/database/orders.ts | 2 +- src/events/GuildCreate.ts | 25 + src/events/ServerConfig.ts | 19 +- src/events/interactionCreate.ts | 31 +- src/events/ready.ts | 25 +- src/index.ts | 4 +- src/providers/apiServer.ts | 6 +- src/providers/commandManager.ts | 24 +- src/providers/config.ts | 64 +- tsconfig.json | 2 +- yarn.lock | 909 ++++++++++++++++++++++---- 27 files changed, 1786 insertions(+), 479 deletions(-) create mode 100644 src/api/server.ts create mode 100644 src/commands/dashboard/auth.ts create mode 100644 src/commands/order.disabled create mode 100644 src/database/clockdata.ts create mode 100644 src/events/GuildCreate.ts diff --git a/config/config.hjson.example b/config/config.hjson.example index a99bb6a..318b1ee 100644 --- a/config/config.hjson.example +++ b/config/config.hjson.example @@ -1,7 +1,7 @@ { token: "" mainServer: "snowflake" - + dashboardUrl: "https://your-dashboard-url.com", databaseUrl: postgresql://user:password@localhost:/mydb?schema=public developers: [] emojis: { diff --git a/package.json b/package.json index f840296..6fb1c64 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dbrewrite", - "version": "1.3.4", + "version": "1.3.5", "description": "", "main": "index.js", "scripts": { @@ -28,30 +28,28 @@ "@typescript-eslint/eslint-plugin": "^5.16.0", "@typescript-eslint/parser": "^5.16.0", "discord-api-types": "^0.37.35", - "discord-api-types": "^0.37.35", "eslint": "^8.12.0", "eslint-plugin-regexp": "^1.6.0", + "prettier": "^3.2.5", "prisma": "latest", "ts-node": "^10.9.1", - "ts-node": "^10.9.1", "ts-toolbelt": "^9.6.0", "tsconfig-paths": "^4.1.2", - "typescript": "^5.4.5" + "typescript": "^5.4.5" }, "dependencies": { - "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/rest": "^0.3.0", "@paralleldrive/cuid2": "^2.2.1", - "@paralleldrive/cuid2": "^2.2.1", "@prisma/client": "latest", "@sapphire/shapeshift": "^3.8.1", - "@sapphire/shapeshift": "^3.8.1", + "@types/express": "^4.17.21", "cross-env": "^7.0.3", "discord.js": "^14.14.1", - "discord.js": "^14.14.1", + "express": "^4.19.2", "fast-glob": "^3.2.11", - "fastify": "^4.26.2", + "fastify": "^4.26.2", + "fastify-socket.io": "^5.0.0", "got": "^11.8.3", "hjson": "^3.2.2", "nekos.life": "^3.0.0", @@ -59,10 +57,10 @@ "picocolors": "^1.0.0", "pino": "^7.9.2", "pretty-ms": "^7.0.1", + "socket.io": "^4.7.5", "source-map-support": "^0.5.21", "typescript-memoize": "^1.1.0", "uuid": "^9.0.0", - "uuid": "^9.0.0", "yarn": "^1.22.18", "zod": "^3.14.3" } diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ec49302..470e5fe 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -9,24 +9,25 @@ datasource db { } model WorkerInfo { - id String @id @db.VarChar(20) - createdAt DateTime @default(now()) - preparations Int @default(0) - deliveries Int @default(0) - deliveryMessage String? - commandUsageCount Int // New field to track the command usage count - lastCommandName String? // New field to track the last command name + id String @id @db.VarChar(20) + createdAt DateTime @default(now()) + preparations Int @default(0) + deliveries Int @default(0) + deliveryMessage String? + commandUsageCount Int + lastCommandName String? cafeDeliveryMessage String? -} +} model UserInfo { - id String @id @db.VarChar(30) - createdAt DateTime @default(now()) - balance Int @default(0) - newBalance Int? - tabLimit Float @default(0) - tab Tab? - donuts Int @default(0) + id String @id @db.VarChar(30) + createdAt DateTime @default(now()) + balance Int @default(0) + newBalance Int? + tabLimit Float @default(0) + donuts Int @default(0) + authUser AuthUser? + tab Tab? } model Tree { @@ -35,7 +36,7 @@ model Tree { water DateTime maxAge Int - @@map(name: "trees") + @@map("trees") } model Tab { @@ -97,6 +98,7 @@ model Orders { flags Int @default(0) putOnTab Boolean? amount Float? + orderFor String? @db.VarChar(20) } model dishes { @@ -106,6 +108,56 @@ model dishes { updatedAt DateTime @db.Timestamp(6) } +model GuildsXP { + userId String + guildId String + level Int @default(0) + exp Int @default(0) + notificationChannelId String? + + @@unique([userId, guildId]) +} + +model WorkerStats { + id String @id + ordersBrewed Int + ordersDelivered Int + lastUsed DateTime + lastCommand String? +} + +model MenuItem { + id String @id @default(uuid()) + name String + description String + price Float + category String +} + +model ShopItem { + id String @id @default(uuid()) + name String + price Int + description String + type String + roleId String? +} + +model InventoryItem { + id String @id @default(uuid()) + itemId String + userId String + quantity Int +} + +model AuthUser { + id Int @id @default(autoincrement()) + token String + expiry DateTime + userID String @unique + user UserInfo @relation(fields: [userID], references: [id]) +} + enum CafeStatus { Unprepared Preparing @@ -134,46 +186,3 @@ enum OrderStatus { Claimed } -model GuildsXP { - userId String // References the id in UserInfo - guildId String - level Int @default(0) - exp Int @default(0) - notificationChannelId String? // New field for notification channel ID - @@unique([userId, guildId]) -} - -model WorkerStats { - id String @id - ordersBrewed Int - ordersDelivered Int - lastUsed DateTime - lastCommand String? -} - - -model MenuItem { - id String @id @default(uuid()) // You can use a UUID for the ID - name String // Name of the menu item - description String // Description of the menu item - price Float // Price of the menu item - category String // Category of the menu item (e.g., appetizer, main course, dessert) -} - - -model ShopItem { - id String @id @default(uuid()) - name String - price Int - description String - type String - roleId String? // Optional: If purchasing grants a role -} - -model InventoryItem { - id String @id @default(uuid()) - itemId String - userId String - quantity Int - // Add more properties as needed, such as item name, description, etc. -} \ No newline at end of file diff --git a/src/api/server.ts b/src/api/server.ts new file mode 100644 index 0000000..18835f2 --- /dev/null +++ b/src/api/server.ts @@ -0,0 +1,125 @@ +import express from "express"; +import { createServer } from "http"; +import { Server } from "socket.io"; +import { db } from "../database/database"; +import { pinMap } from "../commands/dashboard/auth"; +import { z } from "zod"; + +const app = express(); +const httpServer = createServer(app); +const io = new Server(httpServer, { + cors: { + origin: "http://localhost:3000", + methods: ["GET", "POST"], + }, +}); + +app.get("/orders", async (req, res) => { + return db.orders.findMany(); +}); + +// 7 days expiry +const expiryTime = 7 * 24 * 60 * 60 * 1000; + +export type LoginRequest = { + pin: string; + userID: string; + state: string; + purge?: boolean; +}; + +app.get("/login", async (req, res) => { + // 0-9a-z + const pin = z + .string() + .length(6) + .regex(/^[0-9a-z]*$/) + .safeParse(req.query.pin); + if (!pin.success) { + return res.status(400).send("Invalid pin"); + } + + const userID = z + .string() + .min(17) + .max(18) + .regex(/^\d+$/) + .safeParse(req.query.userID); + if (!userID.success) { + return res.status(400).send("Invalid user ID"); + } + + // does this user exist in the UserInfo table? + const user = await db.userInfo.findUnique({ + where: { + id: userID.data, + }, + }); + + if (!user) { + return res.status(404).send("User not found"); + } + + // is this pin valid? + const pins = [...pinMap.values()]; + if (!pins.includes(pin.data)) { + return res.status(403).send("Pin not found"); + } + + // KILL the pin + pinMap.delete(userID.data); + + // do you already have a token? if so return it + const existingToken = await db.authUser.findFirst({ + where: { + userID: userID.data, + }, + }); + + // blank values are falsy + const purge = req.query.purge === "" || req.query.purge; + if (existingToken && purge) { + await db.authUser.delete({ + where: { + userID: userID.data, + }, + }); + } else if (existingToken) { + // not modified 304 + return res.status(304).send({ + token: existingToken.token, + expiry: existingToken.expiry, + state: req.query.state, // for CSRF protection + }); + } + + // great, the pin and user are valid! create a new AuthUser + // exactly 32 characters, 0-9a-z, expires in 7 days. + const token = new Array(32) + .fill(0) + .map(() => Math.random().toString(36)[2]) + .join(""); + + const authUser = await db.authUser.create({ + data: { + token: token, + expiry: new Date(Date.now() + expiryTime), + userID: userID.data, + }, + }); + + res.status(200).send({ + token: authUser.token, + expiry: authUser.expiry, + state: req.query.state, // for CSRF protection + }); +}); + +io.on("connection", (socket) => { + console.log("someone's here..."); + socket.emit("ping"); +}); + +httpServer.listen(3001, () => { + console.log("Server is running on port 3001"); +}); \ No newline at end of file diff --git a/src/commands/Devs/botinfo.ts b/src/commands/Devs/botinfo.ts index df7dc5d..66ccea8 100644 --- a/src/commands/Devs/botinfo.ts +++ b/src/commands/Devs/botinfo.ts @@ -4,8 +4,10 @@ import os from "os"; import { client } from "../../providers/client"; import { permissions } from "../../providers/permissions"; import { Command } from "../../structures/Command"; +import { ExtendedCommand } from "../../structures/extendedCommand"; +import { config } from "../../providers/config"; -export const command = new Command("botinfo", "Displays information about the bot.") +export const command = new ExtendedCommand({ name: "botinfo", description: "Displays information about the bot.", local: true }) .addPermission(permissions.developer) .setExecutor(async (interaction: CommandInteraction) => { // Get the number of guilds (servers) the bot is in @@ -27,7 +29,7 @@ export const command = new Command("botinfo", "Displays information about the bo .setTitle("Bot Information") .addFields( { name: "Name", value: client.user?.username || "Unknown", inline: true }, - { name: "Version", value: "1.0.0", inline: true }, + { name: "Version", value: "1.3.5", inline: true }, { name: "Guilds", value: guildsSize, inline: true }, { name: "Uptime", value: uptimeString, inline: true }, { name: "Memory Usage", value: `${memoryUsage} MB`, inline: true }, diff --git a/src/commands/Devs/ws.ts b/src/commands/Devs/ws.ts index 3185a9d..8b09ee9 100644 --- a/src/commands/Devs/ws.ts +++ b/src/commands/Devs/ws.ts @@ -1,47 +1,103 @@ -/* eslint-disable quotes */ /* eslint-disable indent */ -import {CommandInteraction, EmbedBuilder} from "discord.js"; -import {getWorkerStats} from "../../database/workerstats"; -import {resolveUserId} from "../../utils/id"; -import {permissions} from "../../providers/permissions"; -import {ExtendedCommand} from "../../structures/extendedCommand"; - -export const command = new ExtendedCommand( - { name: "ws", description: "View worker statistics.", local: true } -) +import { ColorResolvable, CommandInteraction, EmbedBuilder } from "discord.js"; +import { getWorkerStats, getWorkerStatsList, upsertWorkerStats } from "../../database/workerstats"; +import { resolveUserId } from "../../utils/id"; +import { permissions } from "../../providers/permissions"; +import { ExtendedCommand } from "../../structures/extendedCommand"; +export const command = new ExtendedCommand({ + name: "ws", + description: "Manage worker statistics.", + local: true +}) .addPermission(permissions.admin) - .addUserOption((option) => - option - .setName("user") - .setDescription("The user to view statistics for.") - .setRequired(false) + .addSubCommand(subcommand => + subcommand + .setName("stats") + .setDescription("View statistics for a user.") + .addUserOption(option => + option + .setName("user") + .setDescription("The user to view statistics for.") + .setRequired(false) + ) + ) + .addSubCommand(subcommand => + subcommand + .setName("list") + .setDescription("List users with worker statistics.") ) .setExecutor(async (int: CommandInteraction) => { - const targetUser = int.options.getUser("user", false); + const subcommand = (int.options as any).getSubcommand(true); + + // Update lastUsed timestamp + const userId = resolveUserId(int.user); + await upsertWorkerStats(userId, { lastUsed: new Date() }); + + if (subcommand === "stats") { + const targetUser = int.options.getUser("user", false); + + let userId: string; + let username: string; + if (targetUser) { + userId = resolveUserId(targetUser); + username = targetUser.username; + } else { + userId = int.user.id; + username = int.user.username; + } + + const workerStats = await getWorkerStats(userId); + if (!workerStats) { + await int.reply({ content: "No worker statistics found for this user.", ephemeral: true }); + return; + } - let userId: string; - if (targetUser) { - userId = resolveUserId(targetUser); + // Calculate days since last used + const lastUsed = new Date(workerStats.lastUsed); + const now = new Date(); + const daysSinceLastUsed = Math.floor((now.getTime() - lastUsed.getTime()) / (1000 * 3600 * 24)); + + // Determine activity status and color + let activityStatus: string; + let activityColor: ColorResolvable; + if (daysSinceLastUsed > 5) { + activityStatus = "Inactive"; + activityColor = "Red"; // Red color + } else { + activityStatus = "Active"; + activityColor = "Green"; // Green color + } + + const embed = new EmbedBuilder() + .setTitle(`${username}'s Worker Statistics`) + .addFields([ + { name: "Orders Brewed", value: workerStats.ordersBrewed.toString(), inline: true }, + { name: "Orders Delivered", value: workerStats.ordersDelivered.toString(), inline: true }, + { name: "Last Used", value: lastUsed.toLocaleString(), inline: true }, + { name: "Days Since Last Used", value: `${daysSinceLastUsed} days`, inline: true }, + { name: "Last Command", value: workerStats.lastCommand || "None", inline: true }, + { name: "Activity Status", value: `**${activityStatus}**`, inline: true }, // Add activity status field with bold text + ]) + .setColor(activityColor) // Set color of the embed + .toJSON(); + + await int.reply({ embeds: [embed] }); + } else if (subcommand === "list") { + const workerStatsList = await getWorkerStatsList(); + if (workerStatsList.length === 0) { + await int.reply({ content: "No users found with worker statistics.", ephemeral: true }); + return; + } + + const userList = workerStatsList.map(stats => `<@${stats.id}> ID: ${stats.id}`).join("\n"); + const embed = new EmbedBuilder() + .setTitle("Users with Worker Statistics") + .setDescription(userList) + .toJSON(); + + await int.reply({ embeds: [embed] }); } else { - userId = int.user.id; + await int.reply({ content: "Invalid sub-command.", ephemeral: true }); } - - const workerStats = await getWorkerStats(userId); - if (!workerStats) { - await int.reply({content: "No worker statistics found for this user.", ephemeral: true}); - return; - } - - const embed = new EmbedBuilder() - .setTitle(`${targetUser ? targetUser.tag : int.user.username}'s Worker Statistics`) - .addFields([ - { name: "Orders Brewed", value: workerStats.ordersBrewed.toString(), inline: true }, - { name: "Orders Delivered", value: workerStats.ordersDelivered.toString(), inline: true }, - { name: "Last Used", value: workerStats.lastUsed.toLocaleString(), inline: true }, - { name: "Last Command", value: workerStats.lastCommand || "None", inline: true }, - ]) - .toJSON(); - - await int.reply({ embeds: [embed] }); }); \ No newline at end of file diff --git a/src/commands/dashboard/auth.ts b/src/commands/dashboard/auth.ts new file mode 100644 index 0000000..7c80c66 --- /dev/null +++ b/src/commands/dashboard/auth.ts @@ -0,0 +1,40 @@ +/* eslint-disable indent */ +import { Snowflake } from "discord.js"; +import { LifetimeMap } from "../../structures/LifetimeMap"; +import { ExtendedCommand } from "../../structures/extendedCommand"; +import { config } from "../../providers/config"; + +export const pinMap = new LifetimeMap(15 * 60 * 1000); + +export const command = new ExtendedCommand({ + name: "login", + description: "Generates a pin required to login to the DB dashboard.", +}) + .addOption("boolean", (o) => + o + .setName("refresh") + .setDescription("Generate a new pin.") + .setRequired(false) + ) + .setExecutor(async (int) => { + if (pinMap.has(int.user.id) && !int.options.getBoolean("refresh")) { + await int.reply({ + ephemeral: true, + content: + "A pin's already been generated. If you've lost it, include the refresh option. Otherwise, wait for the current pin to expire.", + }); + } // generate a random 6-character pin + else { + let pin = Math.random().toString(36).substring(2, 8); + // unlikely, but check for collisions + // convert iterator to array to check for collisions + const pins = [...pinMap.values()]; + while (pins.includes(pin)) + pin = Math.random().toString(36).substring(2, 8); + pinMap.set(int.user.id, pin); + await int.reply({ + ephemeral: true, + content: `Your pin was generated successfully! Head to ${config.dashboardUrl}/login and enter the following pin: \`${pin}\`. It will expire in 15 minutes.`, + }); + } + }); \ No newline at end of file diff --git a/src/commands/economy/crime.ts b/src/commands/economy/crime.ts index b548c26..6c6e119 100644 --- a/src/commands/economy/crime.ts +++ b/src/commands/economy/crime.ts @@ -6,51 +6,35 @@ import { Command } from "../../structures/Command"; import { format } from "../../utils/string"; import pms from "pretty-ms"; import { randRange, sampleArray } from "../../utils/utils"; - const cooldowns: Record = {}; -export const command = new Command( - "crime", - "Try your chances on doing crime!" -).setExecutor(async ({ reply, user }) => { - if (user.id in cooldowns && cooldowns[user.id] >= Date.now()) { - await reply( - format( - text.errors.cooldown, - pms(cooldowns[user.id] - Date.now(), { - compact: true, - secondsDecimalDigits: 1, - }) - ) - ); - return; - } - const result = ["Successful", "Failure"]; - const answer = result[Math.floor(Math.random() * result.length)]; - if (answer === "Failure") { - const info = await upsertUserInfo(user); - const obtained = randRange(...constants.crime.amountRange); - cooldowns[user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ - where: { id: info.id }, - data: { balance: { decrement: obtained } }, - }); - await reply( - format( - sampleArray(text.commands.crime.failure), - `\`$${-obtained}\`` - ) - ); - } else { - const info = await upsertUserInfo(user); - const obtained = randRange(...constants.crime.amountRange); - cooldowns[user.id] = Date.now() + constants.crime.cooldownMs; - await db.userInfo.update({ - where: { id: info.id }, - data: { balance: { increment: obtained } }, - }); - await reply( - format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``) - ); - } -}); +export const command = new Command("crime", "Try your chances on doing crime!") + .setExecutor(async int => { + if (int.user.id in cooldowns && cooldowns[int.user.id] >= Date.now()) { + await int.reply( + format( + text.errors.cooldown, + pms(cooldowns[int.user.id] - Date.now(), { compact: true, secondsDecimalDigits: 1 }) + ) + ); + return; + } + const result = [ + "Succesful", + "Failure" + ]; + const awnser = result[Math.floor(Math.random() * result.length)]; + if (awnser === "Failure") { + const info = await upsertUserInfo(int.user); + const obtained = randRange(...constants.crime.amountRange); + cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; + await db.userInfo.update({ where: { id: info.id }, data: { balance: { decrement: obtained } } }); + await int.reply(format(sampleArray(text.commands.crime.failure), `\`$${-obtained}\``)); + } else { + const info = await upsertUserInfo(int.user); + const obtained = randRange(...constants.crime.amountRange); + cooldowns[int.user.id] = Date.now() + constants.crime.cooldownMs; + await db.userInfo.update({ where: { id: info.id }, data: { balance: { increment: obtained } } }); + await int.reply(format(sampleArray(text.commands.crime.sucess), `\`$${obtained}\``)); + } + }); diff --git a/src/commands/economy/drinkroulette.ts b/src/commands/economy/drinkroulette.ts index 7ce19b3..fab5b73 100644 --- a/src/commands/economy/drinkroulette.ts +++ b/src/commands/economy/drinkroulette.ts @@ -1,10 +1,11 @@ -import {db} from "../../database/database"; -import {generateOrderId, hasActiveOrder,} from "../../database/orders"; -import {text} from "../../providers/config"; -import {mainChannels, mainRoles} from "../../providers/discord"; -import {Command} from "../../structures/Command"; -import {format} from "../../utils/string"; -import {sampleArray} from "../../utils/utils"; +/* eslint-disable linebreak-style */ +import { db } from "../../database/database"; +import { generateOrderId, hasActiveOrder, } from "../../database/orders"; +import { text } from "../../providers/config"; +import { mainChannels, mainRoles } from "../../providers/discord"; +import { Command } from "../../structures/Command"; +import { format } from "../../utils/string"; +import { sampleArray } from "../../utils/utils"; export const command = new Command("drinkroullete", "Get a random drink ordered!") .setExecutor(async int => { diff --git a/src/commands/order.disabled b/src/commands/order.disabled new file mode 100644 index 0000000..154a090 --- /dev/null +++ b/src/commands/order.disabled @@ -0,0 +1,306 @@ + +import { OrderStatus } from "@prisma/client"; +import { CommandInteraction, StringSelectMenuBuilder, ComponentType, EmbedBuilder } from "discord.js"; +import { db } from "../../database/database"; +import { hasActiveOrder, generateOrderId } from "../../database/orders"; +import { getUserBalance, updateBalance } from "../../database/userInfo"; +import { client } from "../../providers/client"; +import { text } from "../../providers/config"; +import { mainChannels, mainRoles } from "../../providers/discord"; +import { Command } from "../../structures/Command"; +import { format } from "../../utils/string"; +// Cached menu items +let cachedMenuItems: any[] = []; + +// Fixed price for custom orders +const customOrderPrice = 6.00; + +export const command = new Command("order", "Orders a drink.") + .setExecutor(async (int: CommandInteraction) => { + // Check if the user already has an active order using the hasActiveOrder function + const userHasActiveOrder = await hasActiveOrder(int.user.id); + if (userHasActiveOrder) { + await int.reply({ content: text.commands.order.exists, ephemeral: true }); + return; + } + + // Check if the channel has the "Embed Links" permission enabled + if (!int.channel.permissionsFor(int.client.user).has("EmbedLinks")) { + await int.reply("This channel doesn't have Embed Links enabled. You can't place an order here."); + return; + } + + // Check if the user's DMs are open by attempting to send a test message + try { + // Attempt to send the test message directly to the user's DMs + //console.log("Sending test message to user's DMs..."); + await int.user.send("This is a test message."); + } catch (error) { + // Handle the error if sending the message fails due to closed DMs + //console.error("Error sending test message to user's DMs:", error); + await int.reply("Please check your Privacy settings on the server to receive the order confirmation."); + return; + } + + // Fetch menu items if not cached + if (!cachedMenuItems.length) { + cachedMenuItems = await getDropdownOptions(); + } + + // If there are no options available, inform the user and return + if (cachedMenuItems.length === 0) { + await int.reply("There are no options available to select."); + return; + } + + // Create a StringSelectMenuBuilder for the dropdown menu + const selectMenu = new StringSelectMenuBuilder() + .setCustomId("order_item") + .setPlaceholder("Select a drink"); + + // Add options to the dropdown menu + cachedMenuItems.forEach(option => { + selectMenu.addOptions(option); + }); + + // Add custom order option with fixed price + selectMenu.addOptions({ + label: `Custom Order ???? ${customOrderPrice.toFixed(2)}`, // Label with custom order and fixed price + value: "Custom Order", + description: "Create a custom order", + }); + + // Create an action row with the dropdown menu + const actionRow = { + type: ComponentType.ActionRow, + components: [selectMenu], + }; + + // Create an embed with instructions + const embed = new EmbedBuilder() + .setDescription("Please select a drink.") + .setColor("#00FF00"); + + // Reply to the interaction with the embed and dropdown menu + try { + await int.reply({ + embeds: [embed], + components: [actionRow], + ephemeral: true, + }); + } catch (error) { + console.error("Error replying to interaction:", error); + } + }); + +async function getDropdownOptions() { + try { + // Fetch menu items and their prices from the database + const menuItems = await db.menuItem.findMany(); + + // Map menu items to options for the dropdown menu + const options = menuItems.map(item => ({ + label: `???? ${item.name} ???? ${item.price.toFixed(2)}`, // Name of the menu item with price, all in bold + value: item.name, // Use the name of the menu item as the value + description: `Description: ???? ${item.description}`, // Description of the menu item + price: item.price, // Include the price in the option object + })); + return options; + } catch (error) { + console.error("Error fetching menu items:", error); + return []; // Return an empty array in case of error + } +} + +// Handle interaction for order selection +client.on("interactionCreate", async (interaction) => { + if (!interaction.isStringSelectMenu()) return; + + const componentId = interaction.customId; + if (componentId === "order_item") { + // Check if the user already has an active order using the hasActiveOrder function + const userHasActiveOrder = await hasActiveOrder(interaction.user.id); + if (userHasActiveOrder) { + await interaction.reply(text.commands.order.exists); + return; + } + + // Disable the dropdown menu to prevent further selections + const selectMenu = interaction.message.components?.find(component => component.type === ComponentType.ActionRow)?.components + .find(component => component.customId === "order_item"); + if (selectMenu && selectMenu instanceof StringSelectMenuBuilder) { + selectMenu.setDisabled(true); + } + + const drink = interaction.values[0]; // Assuming only one drink can be selected + + // If custom order is selected, handle it separately + if (drink === "Custom Order") { + await handleCustomOrder(interaction); + return; + } + + const orderId = await generateOrderId(); // Generate a unique order ID + + // Fetch the price of the selected menu item + let orderPrice; + if (drink === "Custom Order") { + orderPrice = customOrderPrice; + } else { + const menuItem = await db.menuItem.findFirst({ where: { name: drink } }); + if (!menuItem) { + await interaction.reply({ content: "Invalid menu item selected. Please try again.", ephemeral: true }); + return; + } + orderPrice = menuItem.price; + } + + // Check if the user has sufficient balance + const userId = interaction.user.id; + const userBalance = await getUserBalance(userId); + if (userBalance.balance < orderPrice) { + await interaction.reply({ content: "You don't have enough balance to place this order.", ephemeral: true }); + return; + } + + // Deduct the order price from the user's balance + const updatedBalance = userBalance.balance - orderPrice; + await updateBalance(userId, updatedBalance, 0); + // Send a message to the user informing them about the deducted balance + const message = await interaction.message.channel.send(`You have $${updatedBalance.toFixed(2)} left after placing your order.`); + setTimeout(() => { + message.delete().catch(console.error); // Delete the message after a certain timeout + }, 5000); // Delete the message after 5 seconds + + // Create the order + const order = await db.orders.create({ + data: { + id: orderId, + user: userId, + details: drink, + channel: interaction.channelId, + guild: interaction.guildId, + status: OrderStatus.Unprepared, // Initial status set to PendingDelivery + }, + }); + + try { + // Attempt to send the "Order has been placed successfully" message directly to the user + console.log("Sending order confirmation to user..."); + const embed = new EmbedBuilder() + .setTitle("Order Placement") + .setColor("Random") + .addFields( + { name: "Order Details", value: `Your order with ID ${order.id} | ${drink}\nStatus: Has been placed successfully` } + ); + await interaction.user.send({ embeds: [embed] }); + } catch (error) { + // Handle the error if sending the message fails due to closed DMs + await interaction.reply("Please check your Privacy settings on the server to receive the order confirmation."); + return; + } + + + await interaction.reply(format(text.commands.order.success, { id: order.id, details: drink })); + + if (interaction.member?.nickname?.toLowerCase() === "bart") { + await interaction.followUp("I will end you"); + } + + await mainChannels.brewery.send( + format(text.commands.order.created, { + details: drink, + duty: mainRoles.duty.toString(), + id: order.id, + tag: interaction.user.username, + }) + ); + + } +}); + +// Function to handle custom order +async function handleCustomOrder(interaction) { + // Prompt the user to provide details for the custom order + console.log("Prompting user for custom order details..."); + await interaction.reply("Please type what you would like to order."); + + // Collect user's message for custom order + const filter = (message) => message.author.id === interaction.user.id; + const collector = interaction.channel.createMessageCollector({ filter, time: 60000 }); // Adjust time as needed + + collector.on("collect", async (message) => { + const customOrderDetails = message.content.trim(); + console.log("Message content:", customOrderDetails); // Log custom order details + + + const orderId = await generateOrderId(); // Generate a unique order ID + const userId = interaction.user.id; // Get user ID + + try { + // Proceed with custom order processing + console.log("Processing custom order..."); + const orderPrice = customOrderPrice; // Fixed price for custom orders + const userBalance = await getUserBalance(userId); + if (userBalance.balance < orderPrice) { + await interaction.reply({ content: "You don't have enough balance to place this order.", ephemeral: true }); + return; + } + + // Deduct the order price from the user's balance + const updatedBalance = userBalance.balance - orderPrice; + await updateBalance(userId, updatedBalance, 0); + + // Send a message to the user informing them about the deducted balance + const message = await interaction.channel.send(`You have $${updatedBalance.toFixed(2)} left after placing your order.`); + setTimeout(() => { + message.delete().catch(console.error); // Delete the message after a certain timeout + }, 5000); // Delete the message after 5 seconds + + const order = await db.orders.create({ + data: { + id: orderId, + user: userId, + details: customOrderDetails, + channel: interaction.channelId, + guild: interaction.guildId, + status: OrderStatus.Unprepared, + }, + }); + + // Attempt to send the "Order has been placed successfully" message directly to the user + //console.log("Sending order confirmation to user..."); + const embed = new EmbedBuilder() + .setTitle("Order Placement") + .setColor("Random") + .addFields( + { name: "Order Details", value: `Your order with ID ${order.id} | ${customOrderDetails}\nStatus: Has been placed successfully` } + ); + await interaction.user.send({ embeds: [embed] }); + + // Send order confirmation to brewery channel + //console.log("Sending order confirmation to brewery channel..."); + await mainChannels.brewery.send( + format(text.commands.order.created, { + details: customOrderDetails, + duty: mainRoles.duty.toString(), + id: order.id, + tag: interaction.user.username, + }) + ); + + // Stop collecting messages + collector.stop(); + } catch (error) { + await interaction.reply("An error occurred while processing your order. Please try again later."); + } + }); + + // Handle collector end event + collector.on("end", (collected, reason) => { + if (reason === "time") { + interaction.channel.send("You took too long to provide the custom order details. Order cancelled."); + } + }); +} + diff --git a/src/commands/orders/worker/claim.ts b/src/commands/orders/worker/claim.ts index a206a02..d9d6552 100644 --- a/src/commands/orders/worker/claim.ts +++ b/src/commands/orders/worker/claim.ts @@ -8,8 +8,7 @@ import { client } from "../../../providers/client"; import { CommandInteraction, StringSelectMenuBuilder, ComponentType, EmbedBuilder } from "discord.js"; import { ExtendedCommand } from "../../../structures/extendedCommand"; -const claimedOrderLocks = new Map(); -const claimedOrders = new Set(); +const claimedOrders = new Map(); // Map to store claimed orders with user IDs export const command = new ExtendedCommand( { name: "claim", description: "Claims an order.", local: true } @@ -87,13 +86,6 @@ client.on("interactionCreate", async (interaction) => { return; } - if (claimedOrderLocks.has(orderId) && claimedOrderLocks.get(orderId)) { - await interaction.reply({ content: "Another user is currently claiming this order. Please try again later.", ephemeral: true }); - return; - } - - claimedOrderLocks.set(orderId, true); - const order = await db.orders.findUnique({ where: { id: orderId, @@ -106,32 +98,46 @@ client.on("interactionCreate", async (interaction) => { }); if (!order) { - claimedOrderLocks.delete(orderId); await interaction.reply({ content: "Invalid order selected.", ephemeral: true }); return; } if (order.user === interaction.user.id && !permissions.developer.hasPermission(interaction.user)) { - claimedOrderLocks.delete(orderId); await interaction.reply({ content: text.common.interactOwn, ephemeral: true }); return; } + // Check if another user is claiming the order at the same time + if (claimedOrders.has(orderId)) { + const existingClaimerId = claimedOrders.get(orderId); + if (existingClaimerId) { + // Auto-select one of the users to successfully claim the order + const selectedClaimerId = Math.random() < 0.5 ? existingClaimerId : interaction.user.id; + // Update the claimedOrders map with the selected user ID + claimedOrders.set(orderId, selectedClaimerId); + // Update the order in the database with the selected user ID + await db.orders.update({ + where: { id: orderId }, + data: { claimer: selectedClaimerId, status: OrderStatus.Preparing }, + }); + // Inform the users about the result + await interaction.reply({ + content: `${text.commands.claim.success.replace("{id}", order.id)}`, + ephemeral: false, + }); + return; + } + } + + // If no other user is claiming the order at the same time, proceed as usual + claimedOrders.set(orderId, interaction.user.id); await db.orders.update({ where: { id: orderId }, data: { claimer: interaction.user.id, status: OrderStatus.Preparing }, }); - - claimedOrders.add(orderId); - claimedOrderLocks.delete(orderId); - - try { - await interaction.reply({ - content: `${text.commands.claim.success.replace("{id}", order.id)}`, - ephemeral: false, - }); - } catch (error) { - console.error("Error replying to interaction:", error); - } + await interaction.reply({ + content: `${text.commands.claim.success.replace("{id}", order.id)}`, + ephemeral: false, + }); } }); diff --git a/src/commands/orders/worker/unclaim.ts b/src/commands/orders/worker/unclaim.ts index 49b1ca5..5cbf8f2 100644 --- a/src/commands/orders/worker/unclaim.ts +++ b/src/commands/orders/worker/unclaim.ts @@ -1,5 +1,3 @@ -/* eslint-disable quotes */ -/* eslint-disable indent */ import { upsertWorkerInfo } from "../../../database/workerInfo"; import { Command } from "../../../structures/Command"; import { permissions } from "../../../providers/permissions"; @@ -10,7 +8,6 @@ import { client } from "../../../providers/client"; import { CommandInteraction, StringSelectMenuBuilder, ComponentType, EmbedBuilder } from "discord.js"; import { ExtendedCommand } from "../../../structures/extendedCommand"; -const claimedOrderLocks = new Map(); // Map to store claim locks for each order ID const claimedOrders = new Set(); // Set to store claimed order IDs export const command = new ExtendedCommand( @@ -24,17 +21,33 @@ export const command = new ExtendedCommand( return; } - const orders = await db.orders.findMany({ - where: { - claimer: int.user.id, - status: OrderStatus.Preparing, - }, - select: { - id: true, - user: true, - details: true, - }, - }); + let orders; + if (await permissions.admin.hasPermission(int.user)) { + // If the user is an admin, fetch all claimed orders + orders = await db.orders.findMany({ + where: { + status: OrderStatus.Preparing, + }, + select: { + id: true, + user: true, + details: true, + }, + }); + } else { + // If the user is not an admin, fetch only their own claimed orders + orders = await db.orders.findMany({ + where: { + claimer: int.user.id, + status: OrderStatus.Preparing, + }, + select: { + id: true, + user: true, + details: true, + }, + }); + } if (orders.length === 0) { await int.reply({ content: "You don't have any orders to unclaim.", ephemeral: true }); @@ -89,52 +102,49 @@ client.on("interactionCreate", async (interaction) => { for (const orderId of orderIds) { try { - // Check if the order is claimed by the user - const order = await db.orders.findFirst({ - where: { - id: orderId, - claimer: interaction.user.id, - status: OrderStatus.Preparing, - }, - }); - - if (!order) { - unclaimedOrderMessages.push(`Order ${orderId} is not claimed by you.`); - continue; - } - - // Check if a claim lock exists for this order - if (claimedOrderLocks.has(orderId) && claimedOrderLocks.get(orderId)) { - unclaimedOrderMessages.push(`Another process is currently unclaiming Order ${orderId}. Please try again later.`); - continue; + if (await permissions.admin.hasPermission(interaction.user)) { + // If the user is an admin, forcefully unclaim the order + await db.orders.update({ + where: { id: orderId }, + data: { claimer: null, status: OrderStatus.Unprepared }, + }); + + unclaimedOrderMessages.push(`Order ${orderId} forcefully unclaimed by admin.`); + } else { + // Check if the order is claimed by the user + const order = await db.orders.findFirst({ + where: { + id: orderId, + claimer: interaction.user.id, + status: OrderStatus.Preparing, + }, + }); + + if (!order) { + unclaimedOrderMessages.push(`Order ${orderId} is not claimed by you.`); + continue; + } + + // Update the claimed order + await db.orders.update({ + where: { id: orderId }, + data: { claimer: null, status: OrderStatus.Unprepared }, + }); + + unclaimedOrderMessages.push(`Order ${orderId} unclaimed successfully.`); } - // Set an unclaim lock for this order - claimedOrderLocks.set(orderId, true); - - // Update the claimed order and release the unclaim lock - await db.orders.update({ - where: { id: orderId }, - data: { claimer: null, status: OrderStatus.Unprepared }, - }); - + // Remove the order from claimed orders set claimedOrders.delete(orderId); - - // Release the unclaim lock for this order - claimedOrderLocks.delete(orderId); - - unclaimedOrderMessages.push(`Order ${orderId} unclaimed successfully.`); } catch (error) { console.error(`Error processing Order ${orderId}:`, error); unclaimedOrderMessages.push(`Error processing Order ${orderId}`); - } finally { - claimedOrderLocks.delete(orderId); } } // Send a single reply summarizing the unclaimed orders await interaction.reply({ - content: `Unclaiming results:\n${unclaimedOrderMessages.join('\n')}`, + content: `Unclaiming results:\n${unclaimedOrderMessages.join("\n")}`, ephemeral: false, }); } diff --git a/src/commands/orders/worker/wash.ts b/src/commands/orders/worker/wash.ts index 73f82a4..4854ca0 100644 --- a/src/commands/orders/worker/wash.ts +++ b/src/commands/orders/worker/wash.ts @@ -1,11 +1,16 @@ -import {PrismaClient} from "@prisma/client"; -import {permissions} from "../../../providers/permissions"; -import {Command} from "../../../structures/Command"; -import {getUserBalance, updateBalance} from "../../../database/userInfo"; +/* eslint-disable indent */ +/* eslint-disable quotes */ +import { PrismaClient } from "@prisma/client"; +import { permissions } from "../../../providers/permissions"; +import { Command } from "../../../structures/Command"; +import { getUserBalance, updateBalance } from "../../../database/userInfo"; +import { ExtendedCommand } from "../../../structures/extendedCommand"; const prisma = new PrismaClient(); +export const command = new ExtendedCommand( + { name: "wash", description: "Wash a dish.", local: true } +) -export const command = new Command('wash', 'Wash a dish.') .addAlias('clean') .addPermission(permissions.employee) .addOption("string", (o) => o diff --git a/src/commands/public/profile.ts b/src/commands/public/profile.ts index 041dc0f..1fcb5db 100644 --- a/src/commands/public/profile.ts +++ b/src/commands/public/profile.ts @@ -19,15 +19,20 @@ export const command = new Command("profile", "Shows your profile.") const guildId = int.guild.id; // Check if the user exists in the userInfo table - const userInfo = await prisma.userInfo.findUnique({ + let userInfo = await prisma.userInfo.findUnique({ where: { id: userId, }, }); + // Create user info if it doesn't exist if (!userInfo) { - await int.reply("You don't have a profile yet."); - return; + userInfo = await prisma.userInfo.create({ + data: { + id: userId, + // Add any additional fields you want to initialize + }, + }); } // Check if the user's guildsXP data exists in the database diff --git a/src/database/clockdata.ts b/src/database/clockdata.ts new file mode 100644 index 0000000..27386e0 --- /dev/null +++ b/src/database/clockdata.ts @@ -0,0 +1,92 @@ +/* eslint-disable quotes */ +/* eslint-disable indent */ +// Import necessary modules +import { PrismaClient } from "@prisma/client"; +import type { User } from "discord.js"; +import { resolveUserId } from "../utils/id"; + +// Create a PrismaClient instance +const prisma = new PrismaClient(); + +// Functions for managing user-configurable work and break times + +// Function to set user-configurable work start and end times +export const setWorkTimeConfig = async (user: User, workStartTime: string, workEndTime: string): Promise => { + const userId = resolveUserId(user); + await prisma.workConfig.upsert({ + where: { userId }, + update: { + workStartTime, + workEndTime, + }, + create: { + userId, + workStartTime, + workEndTime, + }, + }); +}; + +// Function to set user-configurable break duration +export const setBreakDurationConfig = async (user: User, breakDuration: number): Promise => { + const userId = resolveUserId(user); + await prisma.workConfig.upsert({ + where: { userId }, + update: { + breakDuration, + }, + create: { + userId, + breakDuration, + }, + }); +}; + +// Function to get user-configurable work start and end times +export const getWorkTimeConfig = async (user: User): Promise<{ workStartTime?: string | null; workEndTime?: string | null }> => { + const userId = resolveUserId(user); + const config = await prisma.workConfig.findUnique({ + where: { userId }, + select: { + workStartTime: true, + workEndTime: true, + }, + }); + return config || {}; +}; + +// Function to get user-configurable break duration +export const getBreakDurationConfig = async (user: User): Promise => { + const userId = resolveUserId(user); + const config = await prisma.workConfig.findUnique({ + where: { userId }, + select: { + breakDuration: true, + }, + }); + return config?.breakDuration; +}; + +// Functions for managing clock in, clock out, and break times + +// Function to clock in a user +export const clockIn = async (user: User): Promise => { + // Implementation... +}; + +// Function to clock out a user +export const clockOut = async (user: User): Promise => { + // Implementation... +}; + +// Function to start a break for a user +export const startBreak = async (user: User): Promise => { + // Implementation... +}; + +// Function to end a break for a user +export const endBreak = async (user: User): Promise => { + // Implementation... +}; + +// Additional utility functions or helper functions can be added as needed diff --git a/src/database/order.ts b/src/database/order.ts index 25d3f8c..2dc756a 100644 --- a/src/database/order.ts +++ b/src/database/order.ts @@ -1,12 +1,12 @@ -import type {Orders} from "@prisma/client"; -import {CafeOrders, CafeStatus, PrismaClient} from "@prisma/client"; -import type {Channel, Client, User, UserResolvable} from "discord.js"; -import {EmbedBuilder, GuildChannel} from "discord.js"; -import {client} from "../providers/client"; -import {text} from "../providers/config"; -import {resolveUserId} from "../utils/id"; -import {format} from "../utils/string"; -import {db} from "./database"; +import type { CafeOrders } from "@prisma/client"; // Update to CafeOrders +import { CafeStatus, PrismaClient } from "@prisma/client"; // Update to CafeStatus +import type { Channel, Client, User, UserResolvable } from "discord.js"; +import { EmbedBuilder, GuildChannel } from "discord.js"; +import { client } from "../providers/client"; +import { text } from "../providers/config"; +import { resolveUserId } from "../utils/id"; +import { format } from "../utils/string"; +import { db } from "./database"; const prisma = new PrismaClient(); export const activeCafeStatus = [ @@ -16,6 +16,7 @@ export const activeCafeStatus = [ CafeStatus.Fermenting, CafeStatus.PendingDelivery, CafeStatus.Delivering, + CafeStatus.Claimed ]; export const hasActiveOrder = async (user: UserResolvable) => @@ -89,7 +90,7 @@ export const getLatestOrder = async (user: UserResolvable) => const embedText = text.common.orderEmbed; const embedFields = text.common.orderEmbed.fields; -const rawOrderEmbed = (order: Orders) => +const rawOrderEmbed = (order: CafeOrders) => // Update to CafeOrders new EmbedBuilder() .setTitle(format(embedText.title, order.id)) .setDescription(format(embedText.description, order.id)) @@ -113,7 +114,7 @@ const formatChannel = (channel: Channel | string) => : channel.id ); -export const orderEmbedSync = async (order: CafeOrders, client: Client) => { +export const orderEmbedSync = async (order: CafeOrders, client: Client) => { // Update to CafeOrders const embed = rawOrderEmbed(order) .addFields({ name: embedFields.customer, value: formatUser((await client.users.fetch(order.user).catch(() => null)) ?? order.user), inline: true }) .addFields({ name: embedFields.channel, value: formatChannel((await client.channels.fetch(order.channel).catch(() => null)) ?? order.channel), inline: true }) @@ -125,7 +126,7 @@ export const orderEmbedSync = async (order: CafeOrders, client: Client) => { const nulli = () => null; -export const orderEmbedAsync = async (order: CafeOrders, client: Client): Promise => { +export const orderEmbedAsync = async (order: CafeOrders, client: Client): Promise => { // Update to CafeOrders const user = await client.users.fetch(order.user).catch(() => null); const channel = await client.channels.fetch(order.channel).catch(() => null); const guild = await client.guilds.fetch(order.guild).catch(() => null); @@ -154,7 +155,7 @@ export const orderEmbedAsync = async (order: CafeOrders, client: Client }; export const requiredOrderPlaceholders = ["mention", "image"]; -export const orderPlaceholders = async (order: CafeOrders) => Object.assign(Object.create(null), { +export const orderPlaceholders = async (order: CafeOrders) => Object.assign(Object.create(null), { // Update to CafeOrders preparer: order.claimer ? formatUser((await client.users.fetch(order.claimer).catch(nulli)) ?? order.claimer) : "Unknown", deliverer: order.deliverer ? formatUser((await client.users.fetch(order.deliverer).catch(nulli)) ?? order.deliverer) : "Unknown", id: order.id, @@ -170,4 +171,4 @@ export const OrderFlags = { Rated: 0b100, }; -export { CafeStatus }; \ No newline at end of file +export { CafeStatus }; diff --git a/src/database/orders.ts b/src/database/orders.ts index 6166984..99a2b69 100644 --- a/src/database/orders.ts +++ b/src/database/orders.ts @@ -89,7 +89,7 @@ export const getLatestOrder = async (user: UserResolvable) => const embedText = text.common.orderEmbed; const embedFields = text.common.orderEmbed.fields; -const rawOrderEmbed = (order: Orders) => +const rawOrderEmbed = (order: Orders) => new EmbedBuilder() .setTitle(format(embedText.title, order.id)) .setDescription(format(embedText.description, order.id)) diff --git a/src/events/GuildCreate.ts b/src/events/GuildCreate.ts new file mode 100644 index 0000000..fd17339 --- /dev/null +++ b/src/events/GuildCreate.ts @@ -0,0 +1,25 @@ +/* eslint-disable indent */ +/* eslint-disable quotes */ +import { Guild, ChannelType, EmbedBuilder } from "discord.js"; +import { client } from "../providers/client"; + +client.on("guildCreate", async (guild: Guild) => { + console.log(`Bot joined a new guild. Current guild count: ${client.guilds.cache.size}`); + + const channel = guild.systemChannel; + if (channel && channel.type === ChannelType.GuildText) { + const embed = new EmbedBuilder() + .setTitle("Thank you for inviting me!") + .setDescription("We are also looking for employees if you are interested in joining us!\nIf you want, you can join our support server!\n[***Our Server!***](https://discord.gg/sNbK4rRHYt)\nWe are online 24/7") + .setColor("Random") + .setFooter({ text: "Drunk Bartender Official", iconURL: client.user?.displayAvatarURL() }) + .setTimestamp() + .toJSON(); + + channel.send({ embeds: [embed] }); + } +}); + +client.on("guildDelete", async (guild: Guild) => { + console.log(`Bot removed from a guild. Current guild count: ${client.guilds.cache.size}`); +}); diff --git a/src/events/ServerConfig.ts b/src/events/ServerConfig.ts index 1b7d951..9a1a8e7 100644 --- a/src/events/ServerConfig.ts +++ b/src/events/ServerConfig.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore todo: this file isn't being used, so ts-ignore until it is /* eslint-disable indent */ import * as fs from "fs"; @@ -8,32 +9,32 @@ interface GuildConfig { export class ServerConfig { private static readonly configFile = "config.json"; - private config: ServerConfig | null; - private guilds: { - [guildId: string]: GuildConfig; - } = {}; + private config: ServerConfig | null; + private guilds: { + [guildId: string]: GuildConfig; + } = {}; constructor() { this.config = this.loadConfig(); } - private loadConfig(): ServerConfig | null { + private loadConfig(): ServerConfig | null { try { const data = fs.readFileSync(ServerConfig.configFile, "utf-8"); return JSON.parse(data); } catch (error) { console.error("Error loading config file:", error); - return null; + return null; } } public getOrderChannel(guildId: string): string | undefined { - return this.config?.guilds[guildId]?.orderChannelId; + return this.config?.guilds[guildId]?.orderChannelId; } public setOrderChannel(guildId: string, channelId: string): void { - if (!this.config?.guilds[guildId]) { - if (!this.config) return; + if (!this.config?.guilds[guildId]) { + if (!this.config) return; this.config.guilds[guildId] = {}; } this.config.guilds[guildId].orderChannelId = channelId; diff --git a/src/events/interactionCreate.ts b/src/events/interactionCreate.ts index 4b6a7f6..648e466 100644 --- a/src/events/interactionCreate.ts +++ b/src/events/interactionCreate.ts @@ -1,9 +1,9 @@ -import {client} from "../providers/client"; -import {commandRegistry} from "../providers/commandManager"; -import {text} from "../providers/config"; -import {blacklist} from "../database/blacklist"; -import {StopCommandExecution} from "../utils/error"; -import {ChatInputCommandInteraction} from "discord.js"; +import { client } from "../providers/client"; +import { commandRegistry } from "../providers/commandManager"; +import { text } from "../providers/config"; +import { blacklist } from "../database/blacklist"; +import { StopCommandExecution } from "../utils/error"; +import { ChatInputCommandInteraction } from "discord.js"; // Custom logging functions function logInteractionAlreadyReplied() { @@ -22,12 +22,10 @@ function logException(message: string) { client.on("interactionCreate", async (int) => { try { if (!int.inCachedGuild()) { - if (int.isCommand()) { - logInteractionAlreadyReplied(); - await int.reply("Error B417"); - } + if (int.isCommand()) await int.reply("Error B417"); return; } + if (int.isCommand()) { if (blacklist.has(int.user.id)) { await int.reply(text.errors.blacklisted); @@ -36,20 +34,15 @@ client.on("interactionCreate", async (int) => { const command = commandRegistry.get(int.commandName); if (!command) throw new Error(`Unregistered command ${int.commandName}`); - // TODO remove this and use discord builtin when permissions get better + + // TODO remove this and use Discord's built-in permissions when permissions get better for (const perm of command.permissions) await perm.check(int); - // TODO we're assuming this is a ChatInputCommandInteraction, implement other types later. - if (!(int instanceof ChatInputCommandInteraction)) throw new Error("Unsupported interaction type, please use a chat input command."); + await command.executor(int as ChatInputCommandInteraction<"cached">); } } catch (e) { if (!(e instanceof StopCommandExecution)) { - if (int.isCommand()) { - logException((e as typeof e & { - message: any - }).message); // pretend everything is fine and message exists... - int.reply({ content: text.errors.exception, ephemeral: true }).catch(); - } + if (int.isCommand()) await int.reply({ content: text.errors.exception, ephemeral: true }); console.error(e); } } diff --git a/src/events/ready.ts b/src/events/ready.ts index d8b1976..cafc78a 100644 --- a/src/events/ready.ts +++ b/src/events/ready.ts @@ -1,12 +1,12 @@ -import type {GuildEmoji, TextBasedChannel} from "discord.js"; -import {client} from "../providers/client"; -import {loadCommands} from "../providers/commandManager"; -import {config, text} from "../providers/config"; -import {mainChannels, mainEmojis, mainGuild, setMainGuild, setMainRoles} from "../providers/discord"; -import {startOrderTimeoutChecks} from "../providers/orderManager"; -import {IllegalStateError} from "../utils/error"; -import {parseText} from "../utils/string"; -import {isNotInitialized, typedEntries, typedFromEntries} from "../utils/utils"; +import type { GuildEmoji, TextBasedChannel } from "discord.js"; +import { client } from "../providers/client"; +import { loadCommands } from "../providers/commandManager"; +import { config, text } from "../providers/config"; +import { mainChannels, mainEmojis, mainGuild, setMainGuild, setMainRoles } from "../providers/discord"; +import { startOrderTimeoutChecks } from "../providers/orderManager"; +import { IllegalStateError } from "../utils/error"; +import { parseText } from "../utils/string"; +import { isNotInitialized, typedEntries, typedFromEntries } from "../utils/utils"; type TextObject = { [k: string]: string | string[] | TextObject; @@ -23,9 +23,9 @@ client.on("ready", async () => { typedEntries(config.roles).map(async x => [ x[0], (await mainGuild.roles.fetch(x[1])) ?? - (() => { - throw new IllegalStateError(`Role ${x[0]} was not found.`); - })(), + (() => { + throw new IllegalStateError(`Role ${x[0]} was not found.`); + })(), ]) ) ) @@ -48,6 +48,7 @@ client.on("ready", async () => { else if (typeof texts[k] === "object") parseTexts(texts[k] as TextObject); } }; + // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore todo parseTexts(text.commands); parseTexts(text.errors); diff --git a/src/index.ts b/src/index.ts index 7e1b688..0dfa6e3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,8 @@ import "./providers/client"; -import {development, production} from "./providers/env"; +import { development, production } from "./providers/env"; import "source-map-support/register"; // experimental API -import "./providers/apiServer"; +// import "./providers/apiServer"; if (development) console.warn("Starting in development mode!"); if (production) console.warn("Starting in production mode!"); diff --git a/src/providers/apiServer.ts b/src/providers/apiServer.ts index 7c546b5..086a684 100644 --- a/src/providers/apiServer.ts +++ b/src/providers/apiServer.ts @@ -1,3 +1,5 @@ +/* eslint-disable linebreak-style */ +/* eslint-disable quotes */ // Import the framework and instantiate it import Fastify from "fastify"; @@ -7,12 +9,12 @@ const fastify = Fastify({ // Declare a route fastify.get("/", async function handler(request, reply) { - return {hello: "world"}; + return { hello: "world" }; }); // Run the server! try { - fastify.listen({port: 3000}).then(() => { + fastify.listen({ port: 3000 }).then(() => { console.log(`Server listening on port 3000.`); }); } catch (err) { diff --git a/src/providers/commandManager.ts b/src/providers/commandManager.ts index ec2d059..4ebbd38 100644 --- a/src/providers/commandManager.ts +++ b/src/providers/commandManager.ts @@ -1,22 +1,22 @@ /* eslint-disable quotes */ -import {basename, join, posix, win32} from "path"; -import {sync} from "fast-glob"; -import {Command} from "../structures/Command"; -import {Routes} from "discord-api-types/v10"; -import {client, rest} from "./client"; -import {development} from "./env"; -import {config} from "./config"; +import { basename, join, posix, win32 } from "path"; +import { sync } from "fast-glob"; +import { Command } from "../structures/Command"; +import { Routes } from "discord-api-types/v10"; +import { client, rest } from "./client"; +import { development } from "./env"; +import { config } from "./config"; import type { ApplicationCommand, ApplicationCommandManager, GuildApplicationCommandManager, GuildResolvable, } from "discord.js"; -import {Collection} from "discord.js"; -import {notInitialized} from "../utils/utils"; +import { Collection } from "discord.js"; +import { notInitialized } from "../utils/utils"; import "./permissions"; -import {ExtendedCommand} from "../structures/extendedCommand"; // Import the ExtendedCommand class -import {mainGuild} from "./discord"; +import { ExtendedCommand } from "../structures/extendedCommand"; // Import the ExtendedCommand class +import { mainGuild } from "./discord"; const commandFolder = join(__dirname, "../commands/**/*.js").replaceAll(win32.sep, posix.sep); const extendedCommandFolder = join(__dirname, "../extendedCommands/**/*.js").replaceAll(win32.sep, posix.sep); @@ -70,7 +70,7 @@ const registerCommands = async (commands: (Command | ExtendedCommand)[]) => { console.log(`Registered local commands for the main server: ${localCommands.map((x) => x.name).join(", ")}`); }; -let commandNames: string[] = []; +const commandNames: string[] = []; export const loadCommands = async (): Promise<(Command | ExtendedCommand)[]> => { const commands: (Command | ExtendedCommand)[] = []; // Ensure commands array is of type Command or ExtendedCommand diff --git a/src/providers/config.ts b/src/providers/config.ts index 86c3116..597a8f1 100644 --- a/src/providers/config.ts +++ b/src/providers/config.ts @@ -13,13 +13,13 @@ export const snowflake = z.union([ ]); const pFormattable = (n: T = 1 as T) => - z.string().refine(x => x.split("{}").length - 1 === n, { + z.string().refine((x) => x.split("{}").length - 1 === n, { message: `Formattable must contain ${n} placeholders`, }) as z.ZodType>; const nFormattable = (...keys: T) => z.string().refine( - x => { + (x) => { for (const key of keys) { if (!x.includes(`{${key}}`)) { return false; @@ -29,19 +29,31 @@ const nFormattable = (...keys: T) => }, { message: `Formattable must contain ${keys.join(", ")}`, - }, - ) as z.ZodType>;; + } + ) as z.ZodType>; const textSchema = z .object({ bot: z.object({ status: z.object({ - type: z.enum(["PLAYING", "STREAMING", "LISTENING", "WATCHING", "COMPETING"]), + type: z.enum([ + "PLAYING", + "STREAMING", + "LISTENING", + "WATCHING", + "COMPETING", + ]), name: z.string(), }), }), statuses: z.record( - z.union([z.never(), z.never(), ...Object.values(OrderStatus).map(x => z.literal(x))]).optional(), + z + .union([ + z.never(), + z.never(), + ...Object.values(OrderStatus).map((x) => z.literal(x)), + ]) + .optional(), z.string() ), common: z.object({ @@ -78,8 +90,11 @@ const textSchema = z success2: nFormattable("details", "id", "price"), success_tab: nFormattable("details", "id"), customOrderSuccess: nFormattable("customOrderDetails", "id"), - customOrderSuccess1: nFormattable("customOrderDetails", "id", "price"), - + customOrderSuccess1: nFormattable( + "customOrderDetails", + "id", + "price" + ), }), list: z.object({ title: z.string(), @@ -115,7 +130,6 @@ const textSchema = z success: z.string(), default: z.string(), multiSuccess: z.string(), - }), deliverymessage: z.object({ get: z.string(), @@ -151,7 +165,6 @@ const textSchema = z title: pFormattable(), footer: pFormattable(), }), - }), tip: z.object({ success: pFormattable(2), @@ -175,11 +188,13 @@ const textSchema = z successNoDm: z.string(), }), - rate: z.object({ - success: z.string(), - alreadyRated: z.string(), - invalidRating: z.string(), - }).passthrough(), + rate: z + .object({ + success: z.string(), + alreadyRated: z.string(), + invalidRating: z.string(), + }) + .passthrough(), drinkingr: z.object({ drinks: z.array(pFormattable()), @@ -207,6 +222,7 @@ const configSchema = z token: z.string(), mainServer: snowflake, developers: snowflake.array(), + dashboardUrl: z.string().url(), databaseUrl: z.string().url(), emojis: z.record(z.string(), snowflake), roles: z.object({ @@ -224,7 +240,7 @@ const configSchema = z }), servers: z.object({ extraServer: snowflake, // Add the extra server here - }) + }), }) .strict(); @@ -251,13 +267,23 @@ const constantsSchema = z export const configFolder = path.join(__dirname, "../../config/"); export const parseHjson = (schema: z.ZodType, file: string) => { - const sp = schema.safeParse(HJSON.parse(fs.readFileSync(path.join(configFolder, file), "utf-8"))); + const sp = schema.safeParse( + HJSON.parse(fs.readFileSync(path.join(configFolder, file), "utf-8")) + ); if (sp.success) return sp.data; - console.error(pc.bgRed(pc.yellow(`Issue(s) found when scanning config ${pc.white(pc.bold(file))}.`))); + console.error( + pc.bgRed( + pc.yellow( + `Issue(s) found when scanning config ${pc.white( + pc.bold(file) + )}.` + ) + ) + ); console.error(formatZodError(sp.error)); throw new IllegalStateError(`${file} is invalid.`); }; export const text = parseHjson(textSchema, "text.hjson"); export const config = parseHjson(configSchema, "config.hjson"); -export const constants = parseHjson(constantsSchema, "constants.hjson"); +export const constants = parseHjson(constantsSchema, "constants.hjson"); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 8c4b713..265fd7c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,5 +1,5 @@ { - "include": ["./src/**/*.ts"], + "include": ["./src/**/*.ts", "src/events/GuildCreate.ts.disabled"], "exclude": ["./node_modules/**", "genenv.js"], "compilerOptions": { /* Visit https://aka.ms/tsconfig.json to read more about this file */ diff --git a/yarn.lock b/yarn.lock index fc9c9b5..aaec67d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,6 +22,11 @@ ts-mixer "^6.0.3" tslib "^2.6.2" +"@discordjs/collection@1.5.3": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.5.3.tgz#5a1250159ebfff9efa4f963cfa7e97f1b291be18" + integrity sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ== + "@discordjs/collection@^0.4.0": version "0.4.0" resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz" @@ -32,11 +37,6 @@ resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz" integrity sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w== -"@discordjs/collection@1.5.3": - version "1.5.3" - resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz" - integrity sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ== - "@discordjs/formatters@^0.3.3": version "0.3.3" resolved "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.3.tgz" @@ -79,7 +79,7 @@ "@discordjs/ws@^1.0.2": version "1.0.2" - resolved "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.2.tgz" + resolved "https://registry.yarnpkg.com/@discordjs/ws/-/ws-1.0.2.tgz#3933b12d4686aabf6a95dfe5fb6e744342a661d1" integrity sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q== dependencies: "@discordjs/collection" "^2.0.0" @@ -126,7 +126,7 @@ "@fastify/ajv-compiler@^3.5.0": version "3.5.0" - resolved "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz" + resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz#459bff00fefbf86c96ec30e62e933d2379e46670" integrity sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA== dependencies: ajv "^8.11.0" @@ -140,19 +140,19 @@ "@fastify/error@^3.3.0", "@fastify/error@^3.4.0": version "3.4.1" - resolved "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz" + resolved "https://registry.yarnpkg.com/@fastify/error/-/error-3.4.1.tgz#b14bb4cac3dd4ec614becbc643d1511331a6425c" integrity sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ== "@fastify/fast-json-stringify-compiler@^4.3.0": version "4.3.0" - resolved "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz" + resolved "https://registry.yarnpkg.com/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz#5df89fa4d1592cbb8780f78998355feb471646d5" integrity sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA== dependencies: fast-json-stringify "^5.7.0" "@fastify/merge-json-schemas@^0.1.0": version "0.1.1" - resolved "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz" + resolved "https://registry.yarnpkg.com/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz#3551857b8a17a24e8c799e9f51795edb07baa0bc" integrity sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA== dependencies: fast-deep-equal "^3.1.3" @@ -207,7 +207,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -228,45 +228,45 @@ "@noble/hashes" "^1.1.5" "@prisma/client@latest": - version "5.12.1" - resolved "https://registry.npmjs.org/@prisma/client/-/client-5.12.1.tgz" - integrity sha512-6/JnizEdlSBxDIdiLbrBdMW5NqDxOmhXAJaNXiPpgzAPr/nLZResT6MMpbOHLo5yAbQ1Vv5UU8PTPRzb0WIxdA== - -"@prisma/debug@5.12.1": - version "5.12.1" - resolved "https://registry.npmjs.org/@prisma/debug/-/debug-5.12.1.tgz" - integrity sha512-kd/wNsR0klrv79o1ITsbWxYyh4QWuBidvxsXSParPsYSu0ircUmNk3q4ojsgNc3/81b0ozg76iastOG43tbf8A== - -"@prisma/engines-version@5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab": - version "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" - resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab.tgz" - integrity sha512-6yvO8s80Tym61aB4QNtYZfWVmE3pwqe807jEtzm8C5VDe7nw8O1FGX3TXUaXmWV0fQTIAfRbeL2Gwrndabp/0g== - -"@prisma/engines@5.12.1": - version "5.12.1" - resolved "https://registry.npmjs.org/@prisma/engines/-/engines-5.12.1.tgz" - integrity sha512-HQDdglLw2bZR/TXD2Y+YfDMvi5Q8H+acbswqOsWyq9pPjBLYJ6gzM+ptlTU/AV6tl0XSZLU1/7F4qaWa8bqpJA== - dependencies: - "@prisma/debug" "5.12.1" - "@prisma/engines-version" "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" - "@prisma/fetch-engine" "5.12.1" - "@prisma/get-platform" "5.12.1" - -"@prisma/fetch-engine@5.12.1": - version "5.12.1" - resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.12.1.tgz" - integrity sha512-qSs3KcX1HKcea1A+hlJVK/ljj0PNIUHDxAayGMvgJBqmaN32P9tCidlKz1EGv6WoRFICYnk3Dd/YFLBwnFIozA== - dependencies: - "@prisma/debug" "5.12.1" - "@prisma/engines-version" "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" - "@prisma/get-platform" "5.12.1" - -"@prisma/get-platform@5.12.1": - version "5.12.1" - resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.12.1.tgz" - integrity sha512-pgIR+pSvhYHiUcqXVEZS31NrFOTENC9yFUdEAcx7cdQBoZPmHVjtjN4Ss6NzVDMYPrKJJ51U14EhEoeuBlMioQ== - dependencies: - "@prisma/debug" "5.12.1" + version "5.11.0" + resolved "https://registry.npmjs.org/@prisma/client/-/client-5.11.0.tgz" + integrity sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw== + +"@prisma/debug@5.11.0": + version "5.11.0" + resolved "https://registry.npmjs.org/@prisma/debug/-/debug-5.11.0.tgz" + integrity sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A== + +"@prisma/engines-version@5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102": + version "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" + resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102.tgz" + integrity sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA== + +"@prisma/engines@5.11.0": + version "5.11.0" + resolved "https://registry.npmjs.org/@prisma/engines/-/engines-5.11.0.tgz" + integrity sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw== + dependencies: + "@prisma/debug" "5.11.0" + "@prisma/engines-version" "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" + "@prisma/fetch-engine" "5.11.0" + "@prisma/get-platform" "5.11.0" + +"@prisma/fetch-engine@5.11.0": + version "5.11.0" + resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.11.0.tgz" + integrity sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w== + dependencies: + "@prisma/debug" "5.11.0" + "@prisma/engines-version" "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" + "@prisma/get-platform" "5.11.0" + +"@prisma/get-platform@5.11.0": + version "5.11.0" + resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.11.0.tgz" + integrity sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw== + dependencies: + "@prisma/debug" "5.11.0" "@sapphire/async-queue@^1.1.9", "@sapphire/async-queue@^1.5.0": version "1.5.0" @@ -281,7 +281,7 @@ fast-deep-equal "^3.1.3" lodash "^4.17.21" -"@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.5.1", "@sapphire/snowflake@3.5.1": +"@sapphire/snowflake@3.5.1", "@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.5.1": version "3.5.1" resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz" integrity sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA== @@ -291,6 +291,11 @@ resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== +"@socket.io/component-emitter@~3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.1.tgz#621270c02c0a5d4f4669eb1caa9723c91cf201de" + integrity sha512-dzJtaDAAoXx4GCOJpbB2eG/Qj8VDpdwkLsWGzGm+0L7E8/434RyMbAHmk9ubXWVAb9nXmc44jUf8GKqVDiKezg== + "@szmarczak/http-timer@^4.0.5": version "4.0.6" resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" @@ -318,6 +323,14 @@ resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + "@types/cacheable-request@^6.0.1": version "6.0.3" resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" @@ -328,11 +341,55 @@ "@types/node" "*" "@types/responselike" "^1.0.0" +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/cookie@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" + integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== + +"@types/cors@^2.8.12": + version "2.8.17" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== + dependencies: + "@types/node" "*" + +"@types/express-serve-static-core@^4.17.33": + version "4.19.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz#3ae8ab3767d98d0b682cda063c3339e1e86ccfaa" + integrity sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@^4.17.21": + version "4.17.21" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/http-cache-semantics@*": version "4.0.1" resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" @@ -345,11 +402,33 @@ dependencies: "@types/node" "*" +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + "@types/node@*", "@types/node@^17.0.42": version "17.0.45" resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== +"@types/node@>=10.0.0": + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + dependencies: + undici-types "~5.26.4" + +"@types/qs@*": + version "6.9.15" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" + integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + "@types/responselike@^1.0.0": version "1.0.0" resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" @@ -362,14 +441,31 @@ resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.7" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" + integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + "@types/uuid@^9.0.1": version "9.0.1" resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz" integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== -"@types/ws@^8.5.9", "@types/ws@8.5.9": +"@types/ws@8.5.9", "@types/ws@^8.5.9": version "8.5.9" - resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.9.tgz#384c489f99c83225a53f01ebc3eddf3b8e202a8c" integrity sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg== dependencies: "@types/node" "*" @@ -390,7 +486,7 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.0.0", "@typescript-eslint/parser@^5.16.0": +"@typescript-eslint/parser@^5.16.0": version "5.59.7" resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz" integrity sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ== @@ -470,16 +566,24 @@ abbrev@1: abort-controller@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== dependencies: event-target-shim "^5.0.0" abstract-logging@^2.0.1: version "2.0.1" - resolved "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz" + resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839" integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== +accepts@~1.3.4, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" @@ -490,21 +594,21 @@ acorn-walk@^8.1.1: resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", acorn@^8.4.1, acorn@^8.8.0: +acorn@^8.4.1, acorn@^8.8.0: version "8.8.2" resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== ajv-formats@^2.1.1: version "2.1.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== dependencies: ajv "^8.0.0" ajv-formats@^3.0.1: version "3.0.1" - resolved "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== dependencies: ajv "^8.0.0" @@ -519,19 +623,9 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.10.0: +ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0: version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ajv@^8.11.0: - version "8.12.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: fast-deep-equal "^3.1.1" @@ -561,7 +655,7 @@ anymatch@~3.1.2: archy@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== arg@^4.1.0: @@ -574,6 +668,11 @@ argparse@^2.0.1: resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + array-union@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" @@ -591,7 +690,7 @@ atomic-sleep@^1.0.0: avvio@^8.3.0: version "8.3.0" - resolved "https://registry.npmjs.org/avvio/-/avvio-8.3.0.tgz" + resolved "https://registry.yarnpkg.com/avvio/-/avvio-8.3.0.tgz#1e019433d935730b814978a583eefac41a65082f" integrity sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q== dependencies: "@fastify/error" "^3.3.0" @@ -606,14 +705,37 @@ balanced-match@^1.0.0: base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +base64id@2.0.0, base64id@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +body-parser@1.20.2: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -636,12 +758,17 @@ buffer-from@^1.0.0: buffer@^6.0.3: version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== dependencies: base64-js "^1.3.1" ieee754 "^1.2.1" +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + cacheable-lookup@^5.0.3: version "5.0.4" resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" @@ -660,6 +787,17 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" +call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" @@ -724,11 +862,41 @@ concat-map@0.0.1: resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -cookie@^0.6.0: +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.6.0, cookie@^0.6.0: version "0.6.0" - resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== +cookie@~0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +cors@~2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + create-require@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" @@ -750,7 +918,14 @@ cross-spawn@^7.0.1, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -debug@^4, debug@^4.0.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4, debug@^4.0.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: version "4.3.4" resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -774,11 +949,30 @@ defer-to-connect@^2.0.0: resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + diff@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" @@ -791,19 +985,19 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +discord-api-types@0.37.61, discord-api-types@^0.37.35: + version "0.37.61" + resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz" + integrity sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw== + discord-api-types@^0.26.1: version "0.26.1" resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz" integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== -discord-api-types@^0.37.35, discord-api-types@0.37.61: - version "0.37.61" - resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz" - integrity sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw== - discord.js@^14.14.1: version "14.14.1" - resolved "https://registry.npmjs.org/discord.js/-/discord.js-14.14.1.tgz" + resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.14.1.tgz#9a2bea23bba13819705ab87612837610abce9ee3" integrity sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w== dependencies: "@discordjs/builders" "^1.7.0" @@ -838,6 +1032,16 @@ duplexify@^4.1.2: readable-stream "^3.1.1" stream-shift "^1.0.0" +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" @@ -845,6 +1049,44 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" +engine.io-parser@~5.2.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49" + integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw== + +engine.io@~6.5.2: + version "6.5.4" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" + integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== + dependencies: + "@types/cookie" "^0.4.1" + "@types/cors" "^2.8.12" + "@types/node" ">=10.0.0" + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.4.1" + cors "~2.8.5" + debug "~4.3.1" + engine.io-parser "~5.2.1" + ws "~8.11.0" + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" @@ -885,7 +1127,7 @@ eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== -eslint@*, "eslint@^6.0.0 || ^7.0.0 || ^8.0.0", "eslint@^6.0.0 || ^7.0.0 || >=8.0.0", eslint@^8.12.0, eslint@>=6.0.0: +eslint@^8.12.0: version "8.41.0" resolved "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz" integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== @@ -968,27 +1210,69 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + event-target-shim@^5.0.0: version "5.0.1" - resolved "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== events@^3.3.0: version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== +express@^4.19.2: + version "4.19.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" + integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.2" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.6.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + fast-content-type-parse@^1.1.0: version "1.1.0" - resolved "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz" + resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz#4087162bf5af3294d4726ff29b334f72e3a1092c" integrity sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ== fast-decode-uri-component@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3, fast-deep-equal@3.1.3: +fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -1011,7 +1295,7 @@ fast-json-stable-stringify@^2.0.0: fast-json-stringify@^5.7.0, fast-json-stringify@^5.8.0: version "5.14.1" - resolved "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.14.1.tgz" + resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.14.1.tgz#3b1aa5a823e4dd5414ec079d32f51e33dd887766" integrity sha512-J1Grbf0oSXV3lKsBf3itz1AvRk43qVrx3Ac10sNvi3LZaz1by4oDdYKFrJycPhS8+Gb7y8rgV/Jqw1UZVjyNvw== dependencies: "@fastify/merge-json-schemas" "^0.1.0" @@ -1029,24 +1313,42 @@ fast-levenshtein@^2.0.6: fast-querystring@^1.0.0: version "1.1.2" - resolved "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz" + resolved "https://registry.yarnpkg.com/fast-querystring/-/fast-querystring-1.1.2.tgz#a6d24937b4fc6f791b4ee31dcb6f53aeafb89f53" integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== dependencies: fast-decode-uri-component "^1.0.1" -fast-redact@^3.0.0, fast-redact@^3.1.1: +fast-redact@^3.0.0: version "3.2.0" resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz" integrity sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw== +fast-redact@^3.1.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" + integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== + fast-uri@^2.0.0, fast-uri@^2.1.0: version "2.3.0" - resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-2.3.0.tgz" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-2.3.0.tgz#bdae493942483d299e7285dcb4627767d42e2793" integrity sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw== +fastify-plugin@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-4.5.1.tgz#44dc6a3cc2cce0988bc09e13f160120bbd91dbee" + integrity sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ== + +fastify-socket.io@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/fastify-socket.io/-/fastify-socket.io-5.0.0.tgz#7040d32a777a733b748b63ad0428b596a91b8865" + integrity sha512-BQKGLVSsLn9s4IXLWjwZRGTNuFbXt5bPY2qeXJUFYFtu/0BxLqcE2WMOrWUZdFWy12kuEvXC76ObsilQKeSfqg== + dependencies: + fastify-plugin "^4.5.1" + tslib "^2.6.1" + fastify@^4.26.2: version "4.26.2" - resolved "https://registry.npmjs.org/fastify/-/fastify-4.26.2.tgz" + resolved "https://registry.yarnpkg.com/fastify/-/fastify-4.26.2.tgz#9389595c46e9f4648de5bf8175e750bf32fed5a1" integrity sha512-90pjTuPGrfVKtdpLeLzND5nyC4woXZN5VadiNQCicj/iJU4viNHKhsAnb7jmv1vu2IzkLXyBiCzdWuzeXgQ5Ug== dependencies: "@fastify/ajv-compiler" "^3.5.0" @@ -1066,13 +1368,20 @@ fastify@^4.26.2: semver "^7.5.4" toad-cache "^3.3.0" -fastq@^1.17.1, fastq@^1.6.0: +fastq@^1.17.1: version "1.17.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" @@ -1087,9 +1396,22 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + find-my-way@^8.0.0: version "8.1.0" - resolved "https://registry.npmjs.org/find-my-way/-/find-my-way-8.1.0.tgz" + resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-8.1.0.tgz#cc05e8e4b145322299d0de0a839b5be528c2083e" integrity sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA== dependencies: fast-deep-equal "^3.1.3" @@ -1128,14 +1450,40 @@ form-data@^4.0.0: forwarded@0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" @@ -1188,6 +1536,13 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + got@^11.8.3: version "11.8.6" resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" @@ -1225,6 +1580,30 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + hjson@^3.2.2: version "3.2.2" resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" @@ -1235,6 +1614,17 @@ http-cache-semantics@^4.0.0: resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + http2-wrapper@^1.0.0-beta.5.2: version "1.0.3" resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" @@ -1243,9 +1633,16 @@ http2-wrapper@^1.0.0-beta.5.2: quick-lru "^5.1.1" resolve-alpn "^1.0.0" +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + ieee754@^1.2.1: version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore-by-default@^1.0.1: @@ -1279,14 +1676,14 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@^2.0.3, inherits@2: +inherits@2, inherits@2.0.4, inherits@^2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-binary-path@~2.1.0: @@ -1342,7 +1739,7 @@ json-buffer@3.0.1: json-schema-ref-resolver@^1.0.1: version "1.0.1" - resolved "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz" + resolved "https://registry.yarnpkg.com/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz#6586f483b76254784fc1d2120f717bdc9f0a99bf" integrity sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw== dependencies: fast-deep-equal "^3.1.3" @@ -1354,7 +1751,7 @@ json-schema-traverse@^0.4.1: json-schema-traverse@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== json-stable-stringify-without-jsonify@^1.0.1: @@ -1384,7 +1781,7 @@ levn@^0.4.1: light-my-request@^5.11.0: version "5.13.0" - resolved "https://registry.npmjs.org/light-my-request/-/light-my-request-5.13.0.tgz" + resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-5.13.0.tgz#b29905e55e8605b77fee2a946e17b219bca35113" integrity sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ== dependencies: cookie "^0.6.0" @@ -1405,7 +1802,7 @@ lodash.merge@^4.6.2: lodash.snakecase@4.1.1: version "4.1.1" - resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== lodash@^4.17.21: @@ -1435,11 +1832,26 @@ make-error@^1.1.1: resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + micromatch@^4.0.4: version "4.0.5" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" @@ -1453,13 +1865,18 @@ mime-db@1.52.0: resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12: +mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" @@ -1482,11 +1899,21 @@ minimist@^1.2.6: resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + ms@2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + natural-compare-lite@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" @@ -1497,6 +1924,11 @@ natural-compare@^1.4.0: resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + nekos.life@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/nekos.life/-/nekos.life-3.0.0.tgz" @@ -1542,6 +1974,16 @@ normalize-url@^6.0.1: resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + on-exit-leak-free@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz" @@ -1549,9 +1991,16 @@ on-exit-leak-free@^0.2.0: on-exit-leak-free@^2.1.0: version "2.1.2" - resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -1602,6 +2051,11 @@ parse-ms@^2.1.0: resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz" integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + path-exists@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" @@ -1617,6 +2071,11 @@ path-key@^3.1.0: resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" @@ -1633,9 +2092,9 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== pino-abstract-transport@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz" - integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz#97f9f2631931e242da531b5c66d3079c12c9d1b5" + integrity sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q== dependencies: readable-stream "^4.0.0" split2 "^4.0.0" @@ -1655,7 +2114,7 @@ pino-std-serializers@^4.0.0: pino-std-serializers@^6.0.0: version "6.2.2" - resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz#d9a9b5f2b9a402486a5fc4db0a737570a860aab3" integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== pino@^7.9.2: @@ -1677,7 +2136,7 @@ pino@^7.9.2: pino@^8.17.0: version "8.20.0" - resolved "https://registry.npmjs.org/pino/-/pino-8.20.0.tgz" + resolved "https://registry.yarnpkg.com/pino/-/pino-8.20.0.tgz#ccfc6fef37b165e006b923834131632a8c4f036b" integrity sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ== dependencies: atomic-sleep "^1.0.0" @@ -1697,6 +2156,11 @@ prelude-ls@^1.2.1: resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== +prettier@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" + integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== + pretty-ms@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz" @@ -1704,12 +2168,12 @@ pretty-ms@^7.0.1: dependencies: parse-ms "^2.1.0" -prisma@*, prisma@latest: - version "5.12.1" - resolved "https://registry.npmjs.org/prisma/-/prisma-5.12.1.tgz" - integrity sha512-SkMnb6wyIxTv9ACqiHBI2u9gD6y98qXRoCoLEnZsF6yee5Qg828G+ARrESN+lQHdw4maSZFFSBPPDpvSiVTo0Q== +prisma@latest: + version "5.11.0" + resolved "https://registry.npmjs.org/prisma/-/prisma-5.11.0.tgz" + integrity sha512-KCLiug2cs0Je7kGkQBN9jDWoZ90ogE/kvZTUTgz2h94FEo8pczCkPH7fPNXkD1sGU7Yh65risGGD1HQ5DF3r3g== dependencies: - "@prisma/engines" "5.12.1" + "@prisma/engines" "5.11.0" process-warning@^1.0.0: version "1.0.0" @@ -1718,17 +2182,17 @@ process-warning@^1.0.0: process-warning@^3.0.0: version "3.0.0" - resolved "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-3.0.0.tgz#96e5b88884187a1dce6f5c3166d611132058710b" integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== process@^0.11.10: version "0.11.10" - resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== -proxy-addr@^2.0.7: +proxy-addr@^2.0.7, proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: forwarded "0.2.0" @@ -1752,6 +2216,13 @@ punycode@^2.1.0: resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" @@ -1767,6 +2238,21 @@ quick-lru@^5.1.1: resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + readable-stream@^3.1.1: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" @@ -1778,7 +2264,7 @@ readable-stream@^3.1.1: readable-stream@^4.0.0: version "4.5.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== dependencies: abort-controller "^3.0.0" @@ -1801,7 +2287,7 @@ real-require@^0.1.0: real-require@^0.2.0: version "0.2.0" - resolved "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== refa@^0.11.0: @@ -1821,7 +2307,7 @@ regexp-ast-analysis@^0.6.0: require-from-string@^2.0.2: version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== resolve-alpn@^1.0.0: @@ -1843,7 +2329,7 @@ responselike@^2.0.0: ret@~0.2.0: version "0.2.2" - resolved "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.2.2.tgz#b6861782a1f4762dce43402a71eb7a283f44573c" integrity sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ== reusify@^1.0.4: @@ -1853,7 +2339,7 @@ reusify@^1.0.4: rfdc@^1.2.0, rfdc@^1.3.0: version "1.3.1" - resolved "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== rimraf@^3.0.2: @@ -1870,14 +2356,14 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== safe-regex2@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz" + resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-2.0.0.tgz#b287524c397c7a2994470367e0185e1916b1f5b9" integrity sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ== dependencies: ret "~0.2.0" @@ -1887,6 +2373,11 @@ safe-stable-stringify@^2.1.0, safe-stable-stringify@^2.3.1: resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + scslre@^0.2.0: version "0.2.0" resolved "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz" @@ -1898,7 +2389,7 @@ scslre@^0.2.0: secure-json-parse@^2.7.0: version "2.7.0" - resolved "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz" + resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: @@ -1908,11 +2399,57 @@ semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: dependencies: lru-cache "^6.0.0" +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + set-cookie-parser@^2.4.1: version "2.6.0" - resolved "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz" + resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -1925,6 +2462,16 @@ shebang-regex@^3.0.0: resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +side-channel@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + simple-update-notifier@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz" @@ -1937,6 +2484,35 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +socket.io-adapter@~2.5.2: + version "2.5.4" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz#4fdb1358667f6d68f25343353bd99bd11ee41006" + integrity sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg== + dependencies: + debug "~4.3.4" + ws "~8.11.0" + +socket.io-parser@~4.2.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" + integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== + dependencies: + "@socket.io/component-emitter" "~3.1.0" + debug "~4.3.1" + +socket.io@^4.7.5: + version "4.7.5" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.5.tgz#56eb2d976aef9d1445f373a62d781a41c7add8f8" + integrity sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA== + dependencies: + accepts "~1.3.4" + base64id "~2.0.0" + cors "~2.8.5" + debug "~4.3.2" + engine.io "~6.5.2" + socket.io-adapter "~2.5.2" + socket.io-parser "~4.2.4" + sonic-boom@^2.2.1: version "2.8.0" resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz" @@ -1946,7 +2522,7 @@ sonic-boom@^2.2.1: sonic-boom@^3.7.0: version "3.8.1" - resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.8.1.tgz#d5ba8c4e26d6176c9a1d14d549d9ff579a163422" integrity sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg== dependencies: atomic-sleep "^1.0.0" @@ -1969,6 +2545,11 @@ split2@^4.0.0: resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + stream-shift@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" @@ -2025,9 +2606,9 @@ thread-stream@^0.15.1: real-require "^0.1.0" thread-stream@^2.0.0: - version "2.4.1" - resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz" - integrity sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg== + version "2.6.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.6.0.tgz#4708abf99ff5c707ef51043a2b76a6019dd9923a" + integrity sha512-t4eNiKdGwd1EV6tx76mRbrOqwvkxz+ssOiQXEXw88m4p/Xp6679vg16sf39BAstRjHOiWIqp5+J2ylHk3pU30g== dependencies: real-require "^0.2.0" @@ -2040,9 +2621,14 @@ to-regex-range@^5.0.1: toad-cache@^3.3.0: version "3.7.0" - resolved "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz" + resolved "https://registry.yarnpkg.com/toad-cache/-/toad-cache-3.7.0.tgz#b9b63304ea7c45ec34d91f1d2fa513517025c441" integrity sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + touch@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" @@ -2093,16 +2679,16 @@ tsconfig-paths@^4.1.2: minimist "^1.2.6" strip-bom "^3.0.0" +tslib@2.6.2, tslib@^2.3.1, tslib@^2.6.1, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tslib@^1.8.1: version "1.14.1" resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.3.1, tslib@^2.6.2, tslib@2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - tsutils@^3.21.0: version "3.21.0" resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" @@ -2122,14 +2708,22 @@ type-fest@^0.20.2: resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + typescript-memoize@^1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz" integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== -typescript@^5.4.5, typescript@>=2.7, "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": +typescript@^5.4.5: version "5.4.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== undefsafe@^2.0.5: @@ -2137,6 +2731,11 @@ undefsafe@^2.0.5: resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + undici@5.27.2: version "5.27.2" resolved "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz" @@ -2144,6 +2743,11 @@ undici@5.27.2: dependencies: "@fastify/busboy" "^2.0.0" +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" @@ -2156,6 +2760,11 @@ util-deprecate@^1.0.1: resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + uuid@^9.0.0: version "9.0.0" resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz" @@ -2166,6 +2775,11 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" @@ -2196,11 +2810,16 @@ wrappy@1: resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== -ws@^8.14.2, ws@8.14.2: +ws@8.14.2, ws@^8.14.2: version "8.14.2" - resolved "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== +ws@~8.11.0: + version "8.11.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" + integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" From d2c617c80ebd7beb7838bf7e5476d33bff57cc4f Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Mon, 6 May 2024 20:49:19 -0400 Subject: [PATCH 71/79] Delete yarn.lock --- yarn.lock | 2846 ----------------------------------------------------- 1 file changed, 2846 deletions(-) delete mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index aaec67d..0000000 --- a/yarn.lock +++ /dev/null @@ -1,2846 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@discordjs/builders@^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/builders@^1.7.0": - version "1.7.0" - resolved "https://registry.npmjs.org/@discordjs/builders/-/builders-1.7.0.tgz" - integrity sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw== - dependencies: - "@discordjs/formatters" "^0.3.3" - "@discordjs/util" "^1.0.2" - "@sapphire/shapeshift" "^3.9.3" - discord-api-types "0.37.61" - fast-deep-equal "^3.1.3" - ts-mixer "^6.0.3" - tslib "^2.6.2" - -"@discordjs/collection@1.5.3": - version "1.5.3" - resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.5.3.tgz#5a1250159ebfff9efa4f963cfa7e97f1b291be18" - integrity sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ== - -"@discordjs/collection@^0.4.0": - version "0.4.0" - resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz" - integrity sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw== - -"@discordjs/collection@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz" - integrity sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w== - -"@discordjs/formatters@^0.3.3": - version "0.3.3" - resolved "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.3.tgz" - integrity sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w== - dependencies: - discord-api-types "0.37.61" - -"@discordjs/rest@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz" - integrity sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q== - dependencies: - "@discordjs/collection" "^0.4.0" - "@sapphire/async-queue" "^1.1.9" - "@sapphire/snowflake" "^3.0.1" - discord-api-types "^0.26.1" - form-data "^4.0.0" - node-fetch "^2.6.5" - tslib "^2.3.1" - -"@discordjs/rest@^2.1.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-2.2.0.tgz" - integrity sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A== - dependencies: - "@discordjs/collection" "^2.0.0" - "@discordjs/util" "^1.0.2" - "@sapphire/async-queue" "^1.5.0" - "@sapphire/snowflake" "^3.5.1" - "@vladfrangu/async_event_emitter" "^2.2.2" - discord-api-types "0.37.61" - magic-bytes.js "^1.5.0" - tslib "^2.6.2" - undici "5.27.2" - -"@discordjs/util@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@discordjs/util/-/util-1.0.2.tgz" - integrity sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw== - -"@discordjs/ws@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@discordjs/ws/-/ws-1.0.2.tgz#3933b12d4686aabf6a95dfe5fb6e744342a661d1" - integrity sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q== - dependencies: - "@discordjs/collection" "^2.0.0" - "@discordjs/rest" "^2.1.0" - "@discordjs/util" "^1.0.2" - "@sapphire/async-queue" "^1.5.0" - "@types/ws" "^8.5.9" - "@vladfrangu/async_event_emitter" "^2.2.2" - discord-api-types "0.37.61" - tslib "^2.6.2" - ws "^8.14.2" - -"@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0": - version "4.5.1" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== - -"@eslint/eslintrc@^2.0.3": - version "2.0.3" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz" - integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.5.2" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.41.0": - version "8.41.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz" - integrity sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA== - -"@fastify/ajv-compiler@^3.5.0": - version "3.5.0" - resolved "https://registry.yarnpkg.com/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz#459bff00fefbf86c96ec30e62e933d2379e46670" - integrity sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA== - dependencies: - ajv "^8.11.0" - ajv-formats "^2.1.1" - fast-uri "^2.0.0" - -"@fastify/busboy@^2.0.0": - version "2.1.1" - resolved "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz" - integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== - -"@fastify/error@^3.3.0", "@fastify/error@^3.4.0": - version "3.4.1" - resolved "https://registry.yarnpkg.com/@fastify/error/-/error-3.4.1.tgz#b14bb4cac3dd4ec614becbc643d1511331a6425c" - integrity sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ== - -"@fastify/fast-json-stringify-compiler@^4.3.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz#5df89fa4d1592cbb8780f78998355feb471646d5" - integrity sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA== - dependencies: - fast-json-stringify "^5.7.0" - -"@fastify/merge-json-schemas@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz#3551857b8a17a24e8c799e9f51795edb07baa0bc" - integrity sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA== - dependencies: - fast-deep-equal "^3.1.3" - -"@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@noble/hashes@^1.1.5": - version "1.3.1" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz" - integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@paralleldrive/cuid2@^2.2.1": - version "2.2.1" - resolved "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.1.tgz" - integrity sha512-GJhHYlMhyT2gWemDL7BGMWfTNhspJKkikLKh9wAy3z4GTTINvTYALkUd+eGQK7aLeVkVzPuSA0VCT3H5eEWbbw== - dependencies: - "@noble/hashes" "^1.1.5" - -"@prisma/client@latest": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/client/-/client-5.11.0.tgz" - integrity sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw== - -"@prisma/debug@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/debug/-/debug-5.11.0.tgz" - integrity sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A== - -"@prisma/engines-version@5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102": - version "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" - resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102.tgz" - integrity sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA== - -"@prisma/engines@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/engines/-/engines-5.11.0.tgz" - integrity sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw== - dependencies: - "@prisma/debug" "5.11.0" - "@prisma/engines-version" "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" - "@prisma/fetch-engine" "5.11.0" - "@prisma/get-platform" "5.11.0" - -"@prisma/fetch-engine@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.11.0.tgz" - integrity sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w== - dependencies: - "@prisma/debug" "5.11.0" - "@prisma/engines-version" "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102" - "@prisma/get-platform" "5.11.0" - -"@prisma/get-platform@5.11.0": - version "5.11.0" - resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.11.0.tgz" - integrity sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw== - dependencies: - "@prisma/debug" "5.11.0" - -"@sapphire/async-queue@^1.1.9", "@sapphire/async-queue@^1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz" - integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== - -"@sapphire/shapeshift@^3.8.1", "@sapphire/shapeshift@^3.9.3": - version "3.9.7" - resolved "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.7.tgz" - integrity sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g== - dependencies: - fast-deep-equal "^3.1.3" - lodash "^4.17.21" - -"@sapphire/snowflake@3.5.1", "@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.5.1": - version "3.5.1" - resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz" - integrity sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA== - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@socket.io/component-emitter@~3.1.0": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.1.tgz#621270c02c0a5d4f4669eb1caa9723c91cf201de" - integrity sha512-dzJtaDAAoXx4GCOJpbB2eG/Qj8VDpdwkLsWGzGm+0L7E8/434RyMbAHmk9ubXWVAb9nXmc44jUf8GKqVDiKezg== - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/cookie@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.4.1.tgz#bfd02c1f2224567676c1545199f87c3a861d878d" - integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== - -"@types/cors@^2.8.12": - version "2.8.17" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.17.tgz#5d718a5e494a8166f569d986794e49c48b216b2b" - integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== - dependencies: - "@types/node" "*" - -"@types/express-serve-static-core@^4.17.33": - version "4.19.0" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.0.tgz#3ae8ab3767d98d0b682cda063c3339e1e86ccfaa" - integrity sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@^4.17.21": - version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/node@*", "@types/node@^17.0.42": - version "17.0.45" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== - -"@types/node@>=10.0.0": - version "20.12.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" - integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== - dependencies: - undici-types "~5.26.4" - -"@types/qs@*": - version "6.9.15" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" - integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - -"@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== - -"@types/send@*": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.7" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" - integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - "@types/send" "*" - -"@types/uuid@^9.0.1": - version "9.0.1" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz" - integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== - -"@types/ws@8.5.9", "@types/ws@^8.5.9": - version "8.5.9" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.9.tgz#384c489f99c83225a53f01ebc3eddf3b8e202a8c" - integrity sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg== - dependencies: - "@types/node" "*" - -"@typescript-eslint/eslint-plugin@^5.16.0": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz" - integrity sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.59.7" - "@typescript-eslint/type-utils" "5.59.7" - "@typescript-eslint/utils" "5.59.7" - debug "^4.3.4" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/parser@^5.16.0": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz" - integrity sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ== - dependencies: - "@typescript-eslint/scope-manager" "5.59.7" - "@typescript-eslint/types" "5.59.7" - "@typescript-eslint/typescript-estree" "5.59.7" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz" - integrity sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ== - dependencies: - "@typescript-eslint/types" "5.59.7" - "@typescript-eslint/visitor-keys" "5.59.7" - -"@typescript-eslint/type-utils@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz" - integrity sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ== - dependencies: - "@typescript-eslint/typescript-estree" "5.59.7" - "@typescript-eslint/utils" "5.59.7" - debug "^4.3.4" - tsutils "^3.21.0" - -"@typescript-eslint/types@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz" - integrity sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A== - -"@typescript-eslint/typescript-estree@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz" - integrity sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ== - dependencies: - "@typescript-eslint/types" "5.59.7" - "@typescript-eslint/visitor-keys" "5.59.7" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/utils@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz" - integrity sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.7" - "@typescript-eslint/types" "5.59.7" - "@typescript-eslint/typescript-estree" "5.59.7" - eslint-scope "^5.1.1" - semver "^7.3.7" - -"@typescript-eslint/visitor-keys@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz" - integrity sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ== - dependencies: - "@typescript-eslint/types" "5.59.7" - eslint-visitor-keys "^3.3.0" - -"@vladfrangu/async_event_emitter@^2.2.2": - version "2.2.4" - resolved "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.4.tgz" - integrity sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug== - -abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -abstract-logging@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/abstract-logging/-/abstract-logging-2.0.1.tgz#6b0c371df212db7129b57d2e7fcf282b8bf1c839" - integrity sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA== - -accepts@~1.3.4, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.4.1, acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv-formats@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" - integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== - dependencies: - ajv "^8.0.0" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.10.0, ajv@^8.11.0: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - -avvio@^8.3.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/avvio/-/avvio-8.3.0.tgz#1e019433d935730b814978a583eefac41a65082f" - integrity sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q== - dependencies: - "@fastify/error" "^3.3.0" - archy "^1.0.0" - debug "^4.0.0" - fastq "^1.17.1" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base64id@2.0.0, base64id@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -body-parser@1.20.2: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^3.5.2: - version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -comment-parser@^1.1.2: - version "1.3.1" - resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz" - integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.6.0, cookie@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== - -cookie@~0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -cors@~2.8.5: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-env@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" - integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== - dependencies: - cross-spawn "^7.0.1" - -cross-spawn@^7.0.1, cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4, debug@^4.0.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4, debug@~4.3.1, debug@~4.3.2, debug@~4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -discord-api-types@0.37.61, discord-api-types@^0.37.35: - version "0.37.61" - resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz" - integrity sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw== - -discord-api-types@^0.26.1: - version "0.26.1" - resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz" - integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== - -discord.js@^14.14.1: - version "14.14.1" - resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.14.1.tgz#9a2bea23bba13819705ab87612837610abce9ee3" - integrity sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w== - dependencies: - "@discordjs/builders" "^1.7.0" - "@discordjs/collection" "1.5.3" - "@discordjs/formatters" "^0.3.3" - "@discordjs/rest" "^2.1.0" - "@discordjs/util" "^1.0.2" - "@discordjs/ws" "^1.0.2" - "@sapphire/snowflake" "3.5.1" - "@types/ws" "8.5.9" - discord-api-types "0.37.61" - fast-deep-equal "3.1.3" - lodash.snakecase "4.1.1" - tslib "2.6.2" - undici "5.27.2" - ws "8.14.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -duplexify@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -engine.io-parser@~5.2.1: - version "5.2.2" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.2.tgz#37b48e2d23116919a3453738c5720455e64e1c49" - integrity sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw== - -engine.io@~6.5.2: - version "6.5.4" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.4.tgz#6822debf324e781add2254e912f8568508850cdc" - integrity sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg== - dependencies: - "@types/cookie" "^0.4.1" - "@types/cors" "^2.8.12" - "@types/node" ">=10.0.0" - accepts "~1.3.4" - base64id "2.0.0" - cookie "~0.4.1" - cors "~2.8.5" - debug "~4.3.1" - engine.io-parser "~5.2.1" - ws "~8.11.0" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-plugin-regexp@^1.6.0: - version "1.15.0" - resolved "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz" - integrity sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - comment-parser "^1.1.2" - grapheme-splitter "^1.0.4" - jsdoctypeparser "^9.0.0" - refa "^0.11.0" - regexp-ast-analysis "^0.6.0" - scslre "^0.2.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== - -eslint@^8.12.0: - version "8.41.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz" - integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.3" - "@eslint/js" "8.41.0" - "@humanwhocodes/config-array" "^0.11.8" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.5.2" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - -espree@^9.5.2: - version "9.5.2" - resolved "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz" - integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -events@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -express@^4.19.2: - version "4.19.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.2" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.6.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -fast-content-type-parse@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz#4087162bf5af3294d4726ff29b334f72e3a1092c" - integrity sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ== - -fast-decode-uri-component@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz#46f8b6c22b30ff7a81357d4f59abfae938202543" - integrity sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg== - -fast-deep-equal@3.1.3, fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-json-stringify@^5.7.0, fast-json-stringify@^5.8.0: - version "5.14.1" - resolved "https://registry.yarnpkg.com/fast-json-stringify/-/fast-json-stringify-5.14.1.tgz#3b1aa5a823e4dd5414ec079d32f51e33dd887766" - integrity sha512-J1Grbf0oSXV3lKsBf3itz1AvRk43qVrx3Ac10sNvi3LZaz1by4oDdYKFrJycPhS8+Gb7y8rgV/Jqw1UZVjyNvw== - dependencies: - "@fastify/merge-json-schemas" "^0.1.0" - ajv "^8.10.0" - ajv-formats "^3.0.1" - fast-deep-equal "^3.1.3" - fast-uri "^2.1.0" - json-schema-ref-resolver "^1.0.1" - rfdc "^1.2.0" - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fast-querystring@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fast-querystring/-/fast-querystring-1.1.2.tgz#a6d24937b4fc6f791b4ee31dcb6f53aeafb89f53" - integrity sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg== - dependencies: - fast-decode-uri-component "^1.0.1" - -fast-redact@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz" - integrity sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw== - -fast-redact@^3.1.1: - version "3.5.0" - resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" - integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== - -fast-uri@^2.0.0, fast-uri@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-2.3.0.tgz#bdae493942483d299e7285dcb4627767d42e2793" - integrity sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw== - -fastify-plugin@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/fastify-plugin/-/fastify-plugin-4.5.1.tgz#44dc6a3cc2cce0988bc09e13f160120bbd91dbee" - integrity sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ== - -fastify-socket.io@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fastify-socket.io/-/fastify-socket.io-5.0.0.tgz#7040d32a777a733b748b63ad0428b596a91b8865" - integrity sha512-BQKGLVSsLn9s4IXLWjwZRGTNuFbXt5bPY2qeXJUFYFtu/0BxLqcE2WMOrWUZdFWy12kuEvXC76ObsilQKeSfqg== - dependencies: - fastify-plugin "^4.5.1" - tslib "^2.6.1" - -fastify@^4.26.2: - version "4.26.2" - resolved "https://registry.yarnpkg.com/fastify/-/fastify-4.26.2.tgz#9389595c46e9f4648de5bf8175e750bf32fed5a1" - integrity sha512-90pjTuPGrfVKtdpLeLzND5nyC4woXZN5VadiNQCicj/iJU4viNHKhsAnb7jmv1vu2IzkLXyBiCzdWuzeXgQ5Ug== - dependencies: - "@fastify/ajv-compiler" "^3.5.0" - "@fastify/error" "^3.4.0" - "@fastify/fast-json-stringify-compiler" "^4.3.0" - abstract-logging "^2.0.1" - avvio "^8.3.0" - fast-content-type-parse "^1.1.0" - fast-json-stringify "^5.8.0" - find-my-way "^8.0.0" - light-my-request "^5.11.0" - pino "^8.17.0" - process-warning "^3.0.0" - proxy-addr "^2.0.7" - rfdc "^1.3.0" - secure-json-parse "^2.7.0" - semver "^7.5.4" - toad-cache "^3.3.0" - -fastq@^1.17.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-my-way@^8.0.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-8.1.0.tgz#cc05e8e4b145322299d0de0a839b5be528c2083e" - integrity sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA== - dependencies: - fast-deep-equal "^3.1.3" - fast-querystring "^1.0.0" - safe-regex2 "^2.0.0" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^13.19.0: - version "13.20.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== - dependencies: - type-fest "^0.20.2" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@^11.8.3: - version "11.8.6" - resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -hasown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hjson@^3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" - integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== - -http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - -ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsdoctypeparser@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz" - integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-ref-resolver@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz#6586f483b76254784fc1d2120f717bdc9f0a99bf" - integrity sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw== - dependencies: - fast-deep-equal "^3.1.3" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json5@^2.2.2: - version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -keyv@^4.0.0: - version "4.5.2" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz" - integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== - dependencies: - json-buffer "3.0.1" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -light-my-request@^5.11.0: - version "5.13.0" - resolved "https://registry.yarnpkg.com/light-my-request/-/light-my-request-5.13.0.tgz#b29905e55e8605b77fee2a946e17b219bca35113" - integrity sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ== - dependencies: - cookie "^0.6.0" - process-warning "^3.0.0" - set-cookie-parser "^2.4.1" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.snakecase@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" - integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-bytes.js@^1.5.0: - version "1.10.0" - resolved "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz" - integrity sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ== - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -nekos.life@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/nekos.life/-/nekos.life-3.0.0.tgz" - integrity sha512-7LbvSqLtfK4XRA91nJaGOWthrNADmG7Vx9d54TC77Hx5qFvRCssFUaHraI6bZGjVENBCUaF7CreisoFX+8mnKQ== - -node-fetch@^2.6.5: - version "2.6.11" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" - integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== - dependencies: - whatwg-url "^5.0.0" - -nodemon@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz" - integrity sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA== - dependencies: - chokidar "^3.5.2" - debug "^4" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^7.5.3" - simple-update-notifier "^2.0.0" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - -nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -object-assign@^4: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -on-exit-leak-free@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz" - integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== - -on-exit-leak-free@^2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" - integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pino-abstract-transport@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz#97f9f2631931e242da531b5c66d3079c12c9d1b5" - integrity sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q== - dependencies: - readable-stream "^4.0.0" - split2 "^4.0.0" - -pino-abstract-transport@v0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz" - integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== - dependencies: - duplexify "^4.1.2" - split2 "^4.0.0" - -pino-std-serializers@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz" - integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== - -pino-std-serializers@^6.0.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz#d9a9b5f2b9a402486a5fc4db0a737570a860aab3" - integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== - -pino@^7.9.2: - version "7.11.0" - resolved "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz" - integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.0.0" - on-exit-leak-free "^0.2.0" - pino-abstract-transport v0.5.0 - pino-std-serializers "^4.0.0" - process-warning "^1.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.1.0" - safe-stable-stringify "^2.1.0" - sonic-boom "^2.2.1" - thread-stream "^0.15.1" - -pino@^8.17.0: - version "8.20.0" - resolved "https://registry.yarnpkg.com/pino/-/pino-8.20.0.tgz#ccfc6fef37b165e006b923834131632a8c4f036b" - integrity sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.1.1" - on-exit-leak-free "^2.1.0" - pino-abstract-transport "^1.1.0" - pino-std-serializers "^6.0.0" - process-warning "^3.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.2.0" - safe-stable-stringify "^2.3.1" - sonic-boom "^3.7.0" - thread-stream "^2.0.0" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" - integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== - -pretty-ms@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz" - integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== - dependencies: - parse-ms "^2.1.0" - -prisma@latest: - version "5.11.0" - resolved "https://registry.npmjs.org/prisma/-/prisma-5.11.0.tgz" - integrity sha512-KCLiug2cs0Je7kGkQBN9jDWoZ90ogE/kvZTUTgz2h94FEo8pczCkPH7fPNXkD1sGU7Yh65risGGD1HQ5DF3r3g== - dependencies: - "@prisma/engines" "5.11.0" - -process-warning@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz" - integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== - -process-warning@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-3.0.0.tgz#96e5b88884187a1dce6f5c3166d611132058710b" - integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -proxy-addr@^2.0.7, proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -readable-stream@^3.1.1: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^4.0.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09" - integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g== - dependencies: - abort-controller "^3.0.0" - buffer "^6.0.3" - events "^3.3.0" - process "^0.11.10" - string_decoder "^1.3.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -real-require@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz" - integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== - -real-require@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" - integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== - -refa@^0.11.0: - version "0.11.0" - resolved "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz" - integrity sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ== - dependencies: - "@eslint-community/regexpp" "^4.5.0" - -regexp-ast-analysis@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz" - integrity sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ== - dependencies: - "@eslint-community/regexpp" "^4.5.0" - refa "^0.11.0" - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -ret@~0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.2.2.tgz#b6861782a1f4762dce43402a71eb7a283f44573c" - integrity sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.2.0, rfdc@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f" - integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex2@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-2.0.0.tgz#b287524c397c7a2994470367e0185e1916b1f5b9" - integrity sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ== - dependencies: - ret "~0.2.0" - -safe-stable-stringify@^2.1.0, safe-stable-stringify@^2.3.1: - version "2.4.3" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scslre@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz" - integrity sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w== - dependencies: - "@eslint-community/regexpp" "^4.5.0" - refa "^0.11.0" - regexp-ast-analysis "^0.6.0" - -secure-json-parse@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/secure-json-parse/-/secure-json-parse-2.7.0.tgz#5a5f9cd6ae47df23dba3151edd06855d47e09862" - integrity sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw== - -semver@^7.3.7, semver@^7.5.3, semver@^7.5.4: - version "7.6.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -set-cookie-parser@^2.4.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz#131921e50f62ff1a66a461d7d62d7b21d5d15a51" - integrity sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ== - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -simple-update-notifier@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz" - integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== - dependencies: - semver "^7.5.3" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -socket.io-adapter@~2.5.2: - version "2.5.4" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz#4fdb1358667f6d68f25343353bd99bd11ee41006" - integrity sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg== - dependencies: - debug "~4.3.4" - ws "~8.11.0" - -socket.io-parser@~4.2.4: - version "4.2.4" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.2.4.tgz#c806966cf7270601e47469ddeec30fbdfda44c83" - integrity sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew== - dependencies: - "@socket.io/component-emitter" "~3.1.0" - debug "~4.3.1" - -socket.io@^4.7.5: - version "4.7.5" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.5.tgz#56eb2d976aef9d1445f373a62d781a41c7add8f8" - integrity sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA== - dependencies: - accepts "~1.3.4" - base64id "~2.0.0" - cors "~2.8.5" - debug "~4.3.2" - engine.io "~6.5.2" - socket.io-adapter "~2.5.2" - socket.io-parser "~4.2.4" - -sonic-boom@^2.2.1: - version "2.8.0" - resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz" - integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== - dependencies: - atomic-sleep "^1.0.0" - -sonic-boom@^3.7.0: - version "3.8.1" - resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.8.1.tgz#d5ba8c4e26d6176c9a1d14d549d9ff579a163422" - integrity sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg== - dependencies: - atomic-sleep "^1.0.0" - -source-map-support@^0.5.21: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -split2@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -string_decoder@^1.1.1, string_decoder@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -thread-stream@^0.15.1: - version "0.15.2" - resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz" - integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== - dependencies: - real-require "^0.1.0" - -thread-stream@^2.0.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.6.0.tgz#4708abf99ff5c707ef51043a2b76a6019dd9923a" - integrity sha512-t4eNiKdGwd1EV6tx76mRbrOqwvkxz+ssOiQXEXw88m4p/Xp6679vg16sf39BAstRjHOiWIqp5+J2ylHk3pU30g== - dependencies: - real-require "^0.2.0" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toad-cache@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/toad-cache/-/toad-cache-3.7.0.tgz#b9b63304ea7c45ec34d91f1d2fa513517025c441" - integrity sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw== - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -touch@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -ts-mixer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz" - integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ== - -ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -ts-toolbelt@^9.6.0: - version "9.6.0" - resolved "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz" - integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== - -tsconfig-paths@^4.1.2: - version "4.2.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@2.6.2, tslib@^2.3.1, tslib@^2.6.1, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typescript-memoize@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz" - integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== - -typescript@^5.4.5: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== - -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -undici@5.27.2: - version "5.27.2" - resolved "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz" - integrity sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ== - dependencies: - "@fastify/busboy" "^2.0.0" - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@^1.2.3: - version "1.2.5" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz" - integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@8.14.2, ws@^8.14.2: - version "8.14.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.14.2.tgz#6c249a806eb2db7a20d26d51e7709eab7b2e6c7f" - integrity sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g== - -ws@~8.11.0: - version "8.11.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.11.0.tgz#6a0d36b8edfd9f96d8b25683db2f8d7de6e8e143" - integrity sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yarn@^1.22.18: - version "1.22.19" - resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" - integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zod@^3.14.3: - version "3.22.4" - resolved "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz" - integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== From d3af2708db98dbf4d11814535edab3b7af7a8800 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Mon, 6 May 2024 20:49:36 -0400 Subject: [PATCH 72/79] Delete package-lock.json --- package-lock.json | 3866 --------------------------------------------- 1 file changed, 3866 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 0bde817..0000000 --- a/package-lock.json +++ /dev/null @@ -1,3866 +0,0 @@ -{ - "name": "dbrewrite", - "version": "1.3.4", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "dbrewrite", - "version": "1.3.4", - "license": "ISC", - "dependencies": { - "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", - "@discordjs/rest": "^0.3.0", - "@paralleldrive/cuid2": "^2.2.1", - "@prisma/client": "latest", - "@sapphire/shapeshift": "^3.8.1", - "cross-env": "^7.0.3", - "discord.js": "^14.14.1", - "fast-glob": "^3.2.11", - "fastify": "^4.26.2", - "got": "^11.8.3", - "hjson": "^3.2.2", - "nekos.life": "^3.0.0", - "nodemon": "^3.1.0", - "picocolors": "^1.0.0", - "pino": "^7.9.2", - "pretty-ms": "^7.0.1", - "source-map-support": "^0.5.21", - "typescript-memoize": "^1.1.0", - "uuid": "^9.0.0", - "yarn": "^1.22.18", - "zod": "^3.14.3" - }, - "devDependencies": { - "@types/node": "^17.0.42", - "@types/uuid": "^9.0.1", - "@typescript-eslint/eslint-plugin": "^5.16.0", - "@typescript-eslint/parser": "^5.16.0", - "discord-api-types": "^0.37.35", - "eslint": "^8.12.0", - "eslint-plugin-regexp": "^1.6.0", - "prisma": "latest", - "ts-node": "^10.9.1", - "ts-toolbelt": "^9.6.0", - "tsconfig-paths": "^4.1.2", - "typescript": "^5.4.5" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@discordjs/builders": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-1.7.0.tgz", - "integrity": "sha512-GDtbKMkg433cOZur8Dv6c25EHxduNIBsxeHrsRoIM8+AwmEZ8r0tEpckx/sHwTLwQPOF3e2JWloZh9ofCaMfAw==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/formatters": "^0.3.3", - "@discordjs/util": "^1.0.2", - "@sapphire/shapeshift": "^3.9.3", - "discord-api-types": "0.37.61", - "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/formatters": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.3.tgz", - "integrity": "sha512-wTcI1Q5cps1eSGhl6+6AzzZkBBlVrBdc9IUhJbijRgVjCNIIIZPgqnUj3ntFODsHrdbGU8BEG9XmDQmgEEYn3w==", - "license": "Apache-2.0", - "dependencies": { - "discord-api-types": "0.37.61" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/rest": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz", - "integrity": "sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/collection": "^0.4.0", - "@sapphire/async-queue": "^1.1.9", - "@sapphire/snowflake": "^3.0.1", - "discord-api-types": "^0.26.1", - "form-data": "^4.0.0", - "node-fetch": "^2.6.5", - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=16.9.0" - } - }, - "node_modules/@discordjs/rest/node_modules/@discordjs/collection": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz", - "integrity": "sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw==", - "license": "Apache-2.0", - "engines": { - "node": ">=16.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@discordjs/rest/node_modules/discord-api-types": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz", - "integrity": "sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/@discordjs/util": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@discordjs/util/-/util-1.0.2.tgz", - "integrity": "sha512-IRNbimrmfb75GMNEjyznqM1tkI7HrZOf14njX7tCAAUetyZM1Pr8hX/EK2lxBCOgWDRmigbp24fD1hdMfQK5lw==", - "license": "Apache-2.0", - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/ws": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@discordjs/ws/-/ws-1.0.2.tgz", - "integrity": "sha512-+XI82Rm2hKnFwAySXEep4A7Kfoowt6weO6381jgW+wVdTpMS/56qCvoXyFRY0slcv7c/U8My2PwIB2/wEaAh7Q==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/collection": "^2.0.0", - "@discordjs/rest": "^2.1.0", - "@discordjs/util": "^1.0.2", - "@sapphire/async-queue": "^1.5.0", - "@types/ws": "^8.5.9", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.61", - "tslib": "^2.6.2", - "ws": "^8.14.2" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@discordjs/ws/node_modules/@discordjs/collection": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz", - "integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@discordjs/ws/node_modules/@discordjs/rest": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.2.0.tgz", - "integrity": "sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/collection": "^2.0.0", - "@discordjs/util": "^1.0.2", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.5.1", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.61", - "magic-bytes.js": "^1.5.0", - "tslib": "^2.6.2", - "undici": "5.27.2" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz", - "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.5.2", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz", - "integrity": "sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@fastify/ajv-compiler": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", - "integrity": "sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==", - "dependencies": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "fast-uri": "^2.0.0" - } - }, - "node_modules/@fastify/ajv-compiler/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/@fastify/busboy": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", - "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", - "license": "MIT", - "engines": { - "node": ">=14" - } - }, - "node_modules/@fastify/error": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", - "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==" - }, - "node_modules/@fastify/fast-json-stringify-compiler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", - "dependencies": { - "fast-json-stringify": "^5.7.0" - } - }, - "node_modules/@fastify/merge-json-schemas": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", - "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", - "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@noble/hashes": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", - "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@paralleldrive/cuid2": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.1.tgz", - "integrity": "sha512-GJhHYlMhyT2gWemDL7BGMWfTNhspJKkikLKh9wAy3z4GTTINvTYALkUd+eGQK7aLeVkVzPuSA0VCT3H5eEWbbw==", - "license": "MIT", - "dependencies": { - "@noble/hashes": "^1.1.5" - } - }, - "node_modules/@prisma/client": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.12.1.tgz", - "integrity": "sha512-6/JnizEdlSBxDIdiLbrBdMW5NqDxOmhXAJaNXiPpgzAPr/nLZResT6MMpbOHLo5yAbQ1Vv5UU8PTPRzb0WIxdA==", - "hasInstallScript": true, - "engines": { - "node": ">=16.13" - }, - "peerDependencies": { - "prisma": "*" - }, - "peerDependenciesMeta": { - "prisma": { - "optional": true - } - } - }, - "node_modules/@prisma/debug": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.12.1.tgz", - "integrity": "sha512-kd/wNsR0klrv79o1ITsbWxYyh4QWuBidvxsXSParPsYSu0ircUmNk3q4ojsgNc3/81b0ozg76iastOG43tbf8A==", - "devOptional": true - }, - "node_modules/@prisma/engines": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.12.1.tgz", - "integrity": "sha512-HQDdglLw2bZR/TXD2Y+YfDMvi5Q8H+acbswqOsWyq9pPjBLYJ6gzM+ptlTU/AV6tl0XSZLU1/7F4qaWa8bqpJA==", - "devOptional": true, - "hasInstallScript": true, - "dependencies": { - "@prisma/debug": "5.12.1", - "@prisma/engines-version": "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab", - "@prisma/fetch-engine": "5.12.1", - "@prisma/get-platform": "5.12.1" - } - }, - "node_modules/@prisma/engines-version": { - "version": "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab", - "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab.tgz", - "integrity": "sha512-6yvO8s80Tym61aB4QNtYZfWVmE3pwqe807jEtzm8C5VDe7nw8O1FGX3TXUaXmWV0fQTIAfRbeL2Gwrndabp/0g==", - "devOptional": true - }, - "node_modules/@prisma/fetch-engine": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.12.1.tgz", - "integrity": "sha512-qSs3KcX1HKcea1A+hlJVK/ljj0PNIUHDxAayGMvgJBqmaN32P9tCidlKz1EGv6WoRFICYnk3Dd/YFLBwnFIozA==", - "devOptional": true, - "dependencies": { - "@prisma/debug": "5.12.1", - "@prisma/engines-version": "5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab", - "@prisma/get-platform": "5.12.1" - } - }, - "node_modules/@prisma/get-platform": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.12.1.tgz", - "integrity": "sha512-pgIR+pSvhYHiUcqXVEZS31NrFOTENC9yFUdEAcx7cdQBoZPmHVjtjN4Ss6NzVDMYPrKJJ51U14EhEoeuBlMioQ==", - "devOptional": true, - "dependencies": { - "@prisma/debug": "5.12.1" - } - }, - "node_modules/@sapphire/async-queue": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz", - "integrity": "sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sapphire/shapeshift": { - "version": "3.9.7", - "resolved": "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.7.tgz", - "integrity": "sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=v16" - } - }, - "node_modules/@sapphire/snowflake": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz", - "integrity": "sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@sindresorhus/is": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", - "license": "MIT", - "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" - } - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "license": "MIT" - }, - "node_modules/@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/ws": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.9.tgz", - "integrity": "sha512-jbdrY0a8lxfdTp/+r7Z4CkycbOFN8WX+IOchLJr3juT/xzbJ8URyTVSJ/hvNdadTgM1mnedb47n+Y31GsFnQlg==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz", - "integrity": "sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/type-utils": "5.59.7", - "@typescript-eslint/utils": "5.59.7", - "debug": "^4.3.4", - "grapheme-splitter": "^1.0.4", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz", - "integrity": "sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/typescript-estree": "5.59.7", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz", - "integrity": "sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz", - "integrity": "sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "5.59.7", - "@typescript-eslint/utils": "5.59.7", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz", - "integrity": "sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz", - "integrity": "sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/visitor-keys": "5.59.7", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz", - "integrity": "sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.59.7", - "@typescript-eslint/types": "5.59.7", - "@typescript-eslint/typescript-estree": "5.59.7", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.59.7", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz", - "integrity": "sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.59.7", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vladfrangu/async_event_emitter": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.4.tgz", - "integrity": "sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug==", - "license": "MIT", - "engines": { - "node": ">=v14.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "license": "ISC" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/abstract-logging": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", - "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==" - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/atomic-sleep": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", - "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/avvio": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.3.0.tgz", - "integrity": "sha512-VBVH0jubFr9LdFASy/vNtm5giTrnbVquWBhT0fyizuNK2rQ7e7ONU2plZQWUNqtE1EmxFEb+kbSkFRkstiaS9Q==", - "dependencies": { - "@fastify/error": "^3.3.0", - "archy": "^1.0.0", - "debug": "^4.0.0", - "fastq": "^1.17.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" - }, - "node_modules/cacheable-lookup": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", - "license": "MIT", - "engines": { - "node": ">=10.6.0" - } - }, - "node_modules/cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comment-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", - "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-env": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", - "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "bin": { - "cross-env": "src/bin/cross-env.js", - "cross-env-shell": "src/bin/cross-env-shell.js" - }, - "engines": { - "node": ">=10.14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/discord-api-types": { - "version": "0.37.61", - "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.61.tgz", - "integrity": "sha512-o/dXNFfhBpYHpQFdT6FWzeO7pKc838QeeZ9d91CfVAtpr5XLK4B/zYxQbYgPdoMiTDvJfzcsLW5naXgmHGDNXw==", - "license": "MIT" - }, - "node_modules/discord.js": { - "version": "14.14.1", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-14.14.1.tgz", - "integrity": "sha512-/hUVzkIerxKHyRKopJy5xejp4MYKDPTszAnpYxzVVv4qJYf+Tkt+jnT2N29PIPschicaEEpXwF2ARrTYHYwQ5w==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/builders": "^1.7.0", - "@discordjs/collection": "1.5.3", - "@discordjs/formatters": "^0.3.3", - "@discordjs/rest": "^2.1.0", - "@discordjs/util": "^1.0.2", - "@discordjs/ws": "^1.0.2", - "@sapphire/snowflake": "3.5.1", - "@types/ws": "8.5.9", - "discord-api-types": "0.37.61", - "fast-deep-equal": "3.1.3", - "lodash.snakecase": "4.1.1", - "tslib": "2.6.2", - "undici": "5.27.2", - "ws": "8.14.2" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/discord.js/node_modules/@discordjs/collection": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz", - "integrity": "sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/discord.js/node_modules/@discordjs/rest": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@discordjs/rest/-/rest-2.2.0.tgz", - "integrity": "sha512-nXm9wT8oqrYFRMEqTXQx9DUTeEtXUDMmnUKIhZn6O2EeDY9VCdwj23XCPq7fkqMPKdF7ldAfeVKyxxFdbZl59A==", - "license": "Apache-2.0", - "dependencies": { - "@discordjs/collection": "^2.0.0", - "@discordjs/util": "^1.0.2", - "@sapphire/async-queue": "^1.5.0", - "@sapphire/snowflake": "^3.5.1", - "@vladfrangu/async_event_emitter": "^2.2.2", - "discord-api-types": "0.37.61", - "magic-bytes.js": "^1.5.0", - "tslib": "^2.6.2", - "undici": "5.27.2" - }, - "engines": { - "node": ">=16.11.0" - } - }, - "node_modules/discord.js/node_modules/@discordjs/rest/node_modules/@discordjs/collection": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-2.0.0.tgz", - "integrity": "sha512-YTWIXLrf5FsrLMycpMM9Q6vnZoR/lN2AWX23/Cuo8uOOtS8eHB2dyQaaGnaF8aZPYnttf2bkLMcXn/j6JUOi3w==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/duplexify": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", - "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.4.1", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1", - "stream-shift": "^1.0.0" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.41.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz", - "integrity": "sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.0.3", - "@eslint/js": "8.41.0", - "@humanwhocodes/config-array": "^0.11.8", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.5.2", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-regexp": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz", - "integrity": "sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "comment-parser": "^1.1.2", - "grapheme-splitter": "^1.0.4", - "jsdoctypeparser": "^9.0.0", - "refa": "^0.11.0", - "regexp-ast-analysis": "^0.6.0", - "scslre": "^0.2.0" - }, - "engines": { - "node": "^12 || >=14" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/espree": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", - "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.8.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/fast-content-type-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", - "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==" - }, - "node_modules/fast-decode-uri-component": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stringify": { - "version": "5.14.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.14.1.tgz", - "integrity": "sha512-J1Grbf0oSXV3lKsBf3itz1AvRk43qVrx3Ac10sNvi3LZaz1by4oDdYKFrJycPhS8+Gb7y8rgV/Jqw1UZVjyNvw==", - "dependencies": { - "@fastify/merge-json-schemas": "^0.1.0", - "ajv": "^8.10.0", - "ajv-formats": "^3.0.1", - "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.1.0", - "json-schema-ref-resolver": "^1.0.1", - "rfdc": "^1.2.0" - } - }, - "node_modules/fast-json-stringify/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/fast-json-stringify/node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/fast-json-stringify/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-querystring": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", - "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", - "dependencies": { - "fast-decode-uri-component": "^1.0.1" - } - }, - "node_modules/fast-redact": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz", - "integrity": "sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-uri": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.3.0.tgz", - "integrity": "sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==" - }, - "node_modules/fastify": { - "version": "4.26.2", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.26.2.tgz", - "integrity": "sha512-90pjTuPGrfVKtdpLeLzND5nyC4woXZN5VadiNQCicj/iJU4viNHKhsAnb7jmv1vu2IzkLXyBiCzdWuzeXgQ5Ug==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "dependencies": { - "@fastify/ajv-compiler": "^3.5.0", - "@fastify/error": "^3.4.0", - "@fastify/fast-json-stringify-compiler": "^4.3.0", - "abstract-logging": "^2.0.1", - "avvio": "^8.3.0", - "fast-content-type-parse": "^1.1.0", - "fast-json-stringify": "^5.8.0", - "find-my-way": "^8.0.0", - "light-my-request": "^5.11.0", - "pino": "^8.17.0", - "process-warning": "^3.0.0", - "proxy-addr": "^2.0.7", - "rfdc": "^1.3.0", - "secure-json-parse": "^2.7.0", - "semver": "^7.5.4", - "toad-cache": "^3.3.0" - } - }, - "node_modules/fastify/node_modules/on-exit-leak-free": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", - "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/fastify/node_modules/pino": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-8.20.0.tgz", - "integrity": "sha512-uhIfMj5TVp+WynVASaVEJFTncTUe4dHBq6CWplu/vBgvGHhvBvQfxz+vcOrnnBQdORH3izaGEurLfNlq3YxdFQ==", - "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.1.1", - "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^1.1.0", - "pino-std-serializers": "^6.0.0", - "process-warning": "^3.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.2.0", - "safe-stable-stringify": "^2.3.1", - "sonic-boom": "^3.7.0", - "thread-stream": "^2.0.0" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/fastify/node_modules/pino-abstract-transport": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz", - "integrity": "sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==", - "dependencies": { - "readable-stream": "^4.0.0", - "split2": "^4.0.0" - } - }, - "node_modules/fastify/node_modules/pino-std-serializers": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz", - "integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==" - }, - "node_modules/fastify/node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" - }, - "node_modules/fastify/node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/fastify/node_modules/real-require": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", - "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/fastify/node_modules/sonic-boom": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-3.8.1.tgz", - "integrity": "sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/fastify/node_modules/thread-stream": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.4.1.tgz", - "integrity": "sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==", - "dependencies": { - "real-require": "^0.2.0" - } - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-my-way": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.1.0.tgz", - "integrity": "sha512-41QwjCGcVTODUmLLqTMeoHeiozbMXYMAE1CKFiDyi9zVZ2Vjh0yz3MF0WQZoIb+cmzP/XlbFjlF2NtJmvZHznA==", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-querystring": "^1.0.0", - "safe-regex2": "^2.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" - }, - "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", - "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/hjson": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz", - "integrity": "sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q==", - "license": "MIT", - "bin": { - "hjson": "bin/hjson" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http2-wrapper": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "license": "ISC" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdoctypeparser": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", - "integrity": "sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw==", - "dev": true, - "license": "MIT", - "bin": { - "jsdoctypeparser": "bin/jsdoctypeparser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" - }, - "node_modules/json-schema-ref-resolver": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", - "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/keyv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", - "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/light-my-request": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.13.0.tgz", - "integrity": "sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==", - "dependencies": { - "cookie": "^0.6.0", - "process-warning": "^3.0.0", - "set-cookie-parser": "^2.4.1" - } - }, - "node_modules/light-my-request/node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", - "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", - "license": "MIT" - }, - "node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-bytes.js": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", - "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==", - "license": "MIT" - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true, - "license": "MIT" - }, - "node_modules/nekos.life": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/nekos.life/-/nekos.life-3.0.0.tgz", - "integrity": "sha512-7LbvSqLtfK4XRA91nJaGOWthrNADmG7Vx9d54TC77Hx5qFvRCssFUaHraI6bZGjVENBCUaF7CreisoFX+8mnKQ==", - "license": "MIT" - }, - "node_modules/node-fetch": { - "version": "2.6.11", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", - "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/nodemon": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", - "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "license": "MIT", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/on-exit-leak-free": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz", - "integrity": "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==", - "license": "MIT" - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pino": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz", - "integrity": "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg==", - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0", - "fast-redact": "^3.0.0", - "on-exit-leak-free": "^0.2.0", - "pino-abstract-transport": "v0.5.0", - "pino-std-serializers": "^4.0.0", - "process-warning": "^1.0.0", - "quick-format-unescaped": "^4.0.3", - "real-require": "^0.1.0", - "safe-stable-stringify": "^2.1.0", - "sonic-boom": "^2.2.1", - "thread-stream": "^0.15.1" - }, - "bin": { - "pino": "bin.js" - } - }, - "node_modules/pino-abstract-transport": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz", - "integrity": "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==", - "license": "MIT", - "dependencies": { - "duplexify": "^4.1.2", - "split2": "^4.0.0" - } - }, - "node_modules/pino-std-serializers": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz", - "integrity": "sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q==", - "license": "MIT" - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/pretty-ms": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", - "license": "MIT", - "dependencies": { - "parse-ms": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/prisma": { - "version": "5.12.1", - "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.12.1.tgz", - "integrity": "sha512-SkMnb6wyIxTv9ACqiHBI2u9gD6y98qXRoCoLEnZsF6yee5Qg828G+ARrESN+lQHdw4maSZFFSBPPDpvSiVTo0Q==", - "devOptional": true, - "hasInstallScript": true, - "dependencies": { - "@prisma/engines": "5.12.1" - }, - "bin": { - "prisma": "build/index.js" - }, - "engines": { - "node": ">=16.13" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-warning": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", - "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==", - "license": "MIT" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "license": "MIT" - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-format-unescaped": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/real-require": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz", - "integrity": "sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/refa": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz", - "integrity": "sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.5.0" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/regexp-ast-analysis": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz", - "integrity": "sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.5.0", - "refa": "^0.11.0" - }, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ret": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", - "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-regex2": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-2.0.0.tgz", - "integrity": "sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ==", - "dependencies": { - "ret": "~0.2.0" - } - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/scslre": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz", - "integrity": "sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.5.0", - "refa": "^0.11.0", - "regexp-ast-analysis": "^0.6.0" - } - }, - "node_modules/secure-json-parse": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" - }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sonic-boom": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz", - "integrity": "sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg==", - "license": "MIT", - "dependencies": { - "atomic-sleep": "^1.0.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/split2": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", - "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", - "license": "ISC", - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/thread-stream": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz", - "integrity": "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA==", - "license": "MIT", - "dependencies": { - "real-require": "^0.1.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toad-cache": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", - "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "license": "ISC", - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/ts-mixer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz", - "integrity": "sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ==", - "license": "MIT" - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-toolbelt": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", - "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/tsconfig-paths": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", - "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "json5": "^2.2.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-memoize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz", - "integrity": "sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==", - "license": "MIT" - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "license": "MIT" - }, - "node_modules/undici": { - "version": "5.27.2", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz", - "integrity": "sha512-iS857PdOEy/y3wlM3yRp+6SNQQ6xU0mmZcwRSriqk+et/cwWAtwmIGf6WkoDN2EK/AMdCO/dfXzIwi+rFMrjjQ==", - "license": "MIT", - "dependencies": { - "@fastify/busboy": "^2.0.0" - }, - "engines": { - "node": ">=14.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.14.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", - "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/yarn": { - "version": "1.22.19", - "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz", - "integrity": "sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==", - "hasInstallScript": true, - "license": "BSD-2-Clause", - "bin": { - "yarn": "bin/yarn.js", - "yarnpkg": "bin/yarn.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -} From 9ce8951c0dab5e185659e18ec230addeabe151db Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Mon, 6 May 2024 20:49:49 -0400 Subject: [PATCH 73/79] Delete start Cafe.bat --- start Cafe.bat | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 start Cafe.bat diff --git a/start Cafe.bat b/start Cafe.bat deleted file mode 100644 index 96256fa..0000000 --- a/start Cafe.bat +++ /dev/null @@ -1,3 +0,0 @@ -cd C:\Somewhere\AnotherFolder\Test\DB\dist -nodemon index.js -pause \ No newline at end of file From 4b5154df3a1cf534d995f573750d2c9154a8424d Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Mon, 6 May 2024 20:51:34 -0400 Subject: [PATCH 74/79] Delete src/commands/Devs/transfer.ts --- src/commands/Devs/transfer.ts | 92 ----------------------------------- 1 file changed, 92 deletions(-) delete mode 100644 src/commands/Devs/transfer.ts diff --git a/src/commands/Devs/transfer.ts b/src/commands/Devs/transfer.ts deleted file mode 100644 index 69ac840..0000000 --- a/src/commands/Devs/transfer.ts +++ /dev/null @@ -1,92 +0,0 @@ -// @ts-nocheck -// todo: fix when this file is used. -/* eslint-disable indent */ -import {PrismaClient} from "@prisma/client"; -import {CommandInteraction} from "discord.js"; -import {permissions} from "../../providers/permissions"; -import {Command} from "../../structures/Command"; - -const prisma = new PrismaClient(); - -export const command = new Command("transfer", "Transfers data from the old schema to the new schema.") - .addPermission(permissions.admin) - .setExecutor(async (int: CommandInteraction) => { - try { - // Retrieve all the existing user data - const usersData = await prisma.userInfo.findMany(); - - //console.log(`Total user data count: ${usersData.length}`); - - // Transfer the data to the new schema - for (const data of usersData) { - const userId = data.id; - const guildsXPData = data.guildsxp; - - //console.log(`Transferring data for user with ID: ${userId}`); - - const guildsXPDataObject = parseGuildsXPData(guildsXPData); - - //console.log(`GuildsXPDataObject: ${JSON.stringify(guildsXPDataObject)}`); - - for (const guildId in guildsXPDataObject) { - const { id } = guildsXPDataObject[guildId]; - - // console.log(`Transferring data for guild with ID: ${guildId}`); - - // Create or update the guildsXP data in the new schema - await prisma.guildsXP.upsert({ - where: { userId_guildId: { userId, guildId } }, - create: { - guildId: guildId, - userName: "", // Set userName as empty string for now - level: guildsXPDataObject[guildId].level, - exp: guildsXPDataObject[guildId].xp, - user: { connect: { id: userId } }, - }, - update: { - userName: "", // Set userName as empty string for now - level: guildsXPDataObject[guildId].level, - exp: guildsXPDataObject[guildId].xp, - }, - }); - - // console.log(`Data transferred for guild with ID: ${guildId}`); - } - - // Update the guildsxp field to be empty - await prisma.userInfo.update({ - where: { id: userId }, - data: { guildsxp: "{}" }, - }); - - //console.log(`Data transferred for user with ID: ${userId}`); - } - - await int.reply("Data transfer completed successfully."); - } catch (error) { - console.error("Error transferring data:", error); - await int.reply("Error transferring data. Please check the logs for more information."); - } finally { - await prisma.$disconnect(); - } - }); - -// Function to parse the guildsXPData string and handle potential errors -function parseGuildsXPData(guildsXPData: string | null): Record { - try { - if (guildsXPData === null) { - // Handle the case where guildsXPData is null - return {}; - } - - const parsedData = JSON.parse(guildsXPData); - - if (typeof parsedData === "object" && !Array.isArray(parsedData)) { - return parsedData; - } - } catch (error) { - console.error("Error parsing guildsXPData:", error); - } - - return {}; -} From 3b3ddb0fc027112f3bbbe322f01e63691c3ae085 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Mon, 6 May 2024 20:51:52 -0400 Subject: [PATCH 75/79] Delete src/commands/Devs/avatar.ts --- src/commands/Devs/avatar.ts | 76 ------------------------------------- 1 file changed, 76 deletions(-) delete mode 100644 src/commands/Devs/avatar.ts diff --git a/src/commands/Devs/avatar.ts b/src/commands/Devs/avatar.ts deleted file mode 100644 index aa91d17..0000000 --- a/src/commands/Devs/avatar.ts +++ /dev/null @@ -1,76 +0,0 @@ -import {ExtendedCommand} from "./../../structures/extendedCommand"; -/* eslint-disable quotes */ -/* eslint-disable indent */ -import {client} from "../../providers/client"; -import {permissions} from "../../providers/permissions"; -import {ChatInputCommandInteraction, CommandInteraction, EmbedBuilder} from "discord.js"; - -export const command = new ExtendedCommand({ name: "avatar", description: "Some info." }) - .addPermission(permissions.developer) // AnyRank - .addSubCommand((subcommand) => - subcommand - .setName("attach") - .setDescription("Attach an image to update the bot's avatar.") - .addAttachmentOption((option) => - option - .setName("attachment") - .setDescription("The image to attach for updating the avatar.") - .setRequired(true) - ) - ) - .setExecutor(async (int: CommandInteraction) => { - // Check the subcommand - const subcommand = int instanceof ChatInputCommandInteraction ? int.options.getSubcommand(true) : int.options.get("subcommand", true)?.value as string; - - if (subcommand === "attach") { - // Defer the reply to avoid potential issues with the interaction being deleted - await int.deferReply({ ephemeral: true }); - - // Fetch the attachment from the options - const attachment = int.options.get("attachment", true)?.attachment; - - if (!attachment) { - await int.editReply({ content: "Attachment is missing or not valid." }); - return; - } - - try { - // Read the attachment and set it as the bot's avatar - const avatarBuffer = await fetch(attachment.url).then((res) => res.arrayBuffer()); - const buffer = Buffer.from(avatarBuffer); // Convert ArrayBuffer to Buffer - await client.user?.setAvatar(buffer); - - // Example: Respond with success message - const embed = new EmbedBuilder() - .setTitle('Bot Avatar Updated') - .setDescription('Bot avatar updated successfully!') - .setColor('#00ff00') // You can customize the color - .setAuthor({ name: int.user.username, iconURL: int.user.displayAvatarURL() }) - .setFooter({ text: 'Update Avatar Command', iconURL: client.user?.displayAvatarURL() }); - - // Reply with the success message and the image embed - await int.editReply({ embeds: [embed] }); - - // Extra logging: Print the bot's current avatar URL after the update - console.log("Bot's current avatar URL:", client.user?.displayAvatarURL()); - } catch (error) { - // Cast error to Error type - const errorObject = error as Error; - - // Example: Respond with error message - console.error('Failed to update avatar:', errorObject); - - const errorEmbed = new EmbedBuilder() - .setTitle('Error Updating Avatar') - .setDescription(`Failed to update bot avatar: ${errorObject.message}`) - .setColor('#ff0000') // You can customize the color - .setAuthor({ name: int.user.username, iconURL: int.user.displayAvatarURL() }) - .setFooter({ text: 'Update Avatar Command', iconURL: client.user?.displayAvatarURL() }); - - // Reply with the error message - await int.editReply({ embeds: [errorEmbed] }); - } - } else { - // Handle other subcommands or the default behavior here - } - }); From 48782b534e30ea57ca07171a342959595f961624 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Mon, 6 May 2024 20:52:27 -0400 Subject: [PATCH 76/79] Delete src/database/clockdata.ts --- src/database/clockdata.ts | 92 --------------------------------------- 1 file changed, 92 deletions(-) delete mode 100644 src/database/clockdata.ts diff --git a/src/database/clockdata.ts b/src/database/clockdata.ts deleted file mode 100644 index 27386e0..0000000 --- a/src/database/clockdata.ts +++ /dev/null @@ -1,92 +0,0 @@ -/* eslint-disable quotes */ -/* eslint-disable indent */ -// Import necessary modules -import { PrismaClient } from "@prisma/client"; -import type { User } from "discord.js"; -import { resolveUserId } from "../utils/id"; - -// Create a PrismaClient instance -const prisma = new PrismaClient(); - -// Functions for managing user-configurable work and break times - -// Function to set user-configurable work start and end times -export const setWorkTimeConfig = async (user: User, workStartTime: string, workEndTime: string): Promise => { - const userId = resolveUserId(user); - await prisma.workConfig.upsert({ - where: { userId }, - update: { - workStartTime, - workEndTime, - }, - create: { - userId, - workStartTime, - workEndTime, - }, - }); -}; - -// Function to set user-configurable break duration -export const setBreakDurationConfig = async (user: User, breakDuration: number): Promise => { - const userId = resolveUserId(user); - await prisma.workConfig.upsert({ - where: { userId }, - update: { - breakDuration, - }, - create: { - userId, - breakDuration, - }, - }); -}; - -// Function to get user-configurable work start and end times -export const getWorkTimeConfig = async (user: User): Promise<{ workStartTime?: string | null; workEndTime?: string | null }> => { - const userId = resolveUserId(user); - const config = await prisma.workConfig.findUnique({ - where: { userId }, - select: { - workStartTime: true, - workEndTime: true, - }, - }); - return config || {}; -}; - -// Function to get user-configurable break duration -export const getBreakDurationConfig = async (user: User): Promise => { - const userId = resolveUserId(user); - const config = await prisma.workConfig.findUnique({ - where: { userId }, - select: { - breakDuration: true, - }, - }); - return config?.breakDuration; -}; - -// Functions for managing clock in, clock out, and break times - -// Function to clock in a user -export const clockIn = async (user: User): Promise => { - // Implementation... -}; - -// Function to clock out a user -export const clockOut = async (user: User): Promise => { - // Implementation... -}; - -// Function to start a break for a user -export const startBreak = async (user: User): Promise => { - // Implementation... -}; - -// Function to end a break for a user -export const endBreak = async (user: User): Promise => { - // Implementation... -}; - -// Additional utility functions or helper functions can be added as needed From 45385b9bcde3bf41470b164e0c2f9188fd63c545 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Mon, 6 May 2024 20:53:35 -0400 Subject: [PATCH 77/79] Delete yarn-error.log --- yarn-error.log | 2019 ------------------------------------------------ 1 file changed, 2019 deletions(-) delete mode 100644 yarn-error.log diff --git a/yarn-error.log b/yarn-error.log deleted file mode 100644 index 69daa46..0000000 --- a/yarn-error.log +++ /dev/null @@ -1,2019 +0,0 @@ -Arguments: - /home/mystic/.nvm/versions/node/v18.16.1/bin/node /usr/share/yarn/bin/yarn.js - -PATH: - /home/mystic/.local/bin:/home/mystic/.nvm/versions/node/v18.16.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files/Eclipse Adoptium/jdk-17.0.7.7-hotspot/bin:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/Windows/System32/Wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0/:/mnt/c/Windows/System32/OpenSSH/:/mnt/c/Program Files (x86)/NVIDIA Corporation/PhysX/Common:/mnt/c/Program Files/NVIDIA Corporation/NVIDIA NvDLISR:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program Files/PuTTY/:/mnt/c/Program Files/nodejs/:/mnt/c/Users/these/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/these/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Users/these/AppData/Roaming/npm:/snap/bin - -Yarn version: - 1.22.19 - -Node version: - 18.16.1 - -Platform: - linux x64 - -Trace: - Error: EPERM: operation not permitted, copyfile '/home/mystic/.cache/yarn/v6/npm-@discordjs-builders-1.6.3-integrity/node_modules/@discordjs/builders/CHANGELOG.md' -> '/mnt/c/Somewhere/AnotherFolder/Test/DB/node_modules/@discordjs/builders/CHANGELOG.md' - -npm manifest: - { - "name": "dbrewrite", - "version": "1.3.1", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "build": "tsc", - "start": "cross-env NODE_ENV=production node dist/", - "dev": "tsc && node dist/", - "prisma:generate": "prisma generate", - "prisma:push": "prisma db push", - "project:setup": "$npm_execpath run prisma:generate && $npm_execpath run prisma:push" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/MelnCat/DBRewrite.git" - }, - "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/MelnCat/DBRewrite/issues" - }, - "homepage": "https://github.com/MelnCat/DBRewrite#readme", - "devDependencies": { - "@types/node": "^17.0.42", - "@types/uuid": "^9.0.1", - "@typescript-eslint/eslint-plugin": "^5.16.0", - "@typescript-eslint/parser": "^5.16.0", - "discord-api-types": "^0.37.35", - "eslint": "^8.12.0", - "eslint-plugin-regexp": "^1.6.0", - "prisma": "latest", - "ts-node": "^10.9.1", - "ts-toolbelt": "^9.6.0", - "tsconfig-paths": "^4.1.2", - "typescript": "^4.9.5" - }, - "dependencies": { - "@discordjs/builders": "^1.5.0-dev.1677499471-ffdb197.0", - "@discordjs/rest": "^0.3.0", - "@paralleldrive/cuid2": "^2.2.1", - "@prisma/client": "latest", - "@sapphire/shapeshift": "^3.8.1", - "cross-env": "^7.0.3", - "discord.js": "^14.8.0", - "fast-glob": "^3.2.11", - "got": "^11.8.3", - "hjson": "^3.2.2", - "nekos.life": "^3.0.0", - "nodemon": "^2.0.20", - "picocolors": "^1.0.0", - "pino": "^7.9.2", - "pretty-ms": "^7.0.1", - "source-map-support": "^0.5.21", - "typescript-memoize": "^1.1.0", - "uuid": "^9.0.0", - "yarn": "^1.22.18", - "zod": "^3.14.3" - } - } - -yarn manifest: - No manifest - -Lockfile: - # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. - # yarn lockfile v1 - - - "@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - - "@discordjs/builders@^1.5.0-dev.1677499471-ffdb197.0", "@discordjs/builders@^1.6.3": - version "1.6.3" - resolved "https://registry.npmjs.org/@discordjs/builders/-/builders-1.6.3.tgz" - integrity sha512-CTCh8NqED3iecTNuiz49mwSsrc2iQb4d0MjMdmS/8pb69Y4IlzJ/DIy/p5GFlgOrFbNO2WzMHkWKQSiJ3VNXaw== - dependencies: - "@discordjs/formatters" "^0.3.1" - "@discordjs/util" "^0.3.1" - "@sapphire/shapeshift" "^3.8.2" - discord-api-types "^0.37.41" - fast-deep-equal "^3.1.3" - ts-mixer "^6.0.3" - tslib "^2.5.0" - - "@discordjs/collection@^0.4.0": - version "0.4.0" - resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-0.4.0.tgz" - integrity sha512-zmjq+l/rV35kE6zRrwe8BHqV78JvIh2ybJeZavBi5NySjWXqN3hmmAKg7kYMMXSeiWtSsMoZ/+MQi0DiQWy2lw== - - "@discordjs/collection@^1.5.1": - version "1.5.1" - resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.1.tgz" - integrity sha512-aWEc9DCf3TMDe9iaJoOnO2+JVAjeRNuRxPZQA6GVvBf+Z3gqUuWYBy2NWh4+5CLYq5uoc3MOvUQ5H5m8CJBqOA== - - "@discordjs/formatters@^0.3.1": - version "0.3.1" - resolved "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.3.1.tgz" - integrity sha512-M7X4IGiSeh4znwcRGcs+49B5tBkNDn4k5bmhxJDAUhRxRHTiFAOTVUNQ6yAKySu5jZTnCbSvTYHW3w0rAzV1MA== - dependencies: - discord-api-types "^0.37.41" - - "@discordjs/rest@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-0.3.0.tgz" - integrity sha512-F9aeP3odlAlllM1ciBZLdd+adiAyBj4VaZBejj4UMj4afE2wfCkNTGvYYiRxrXUE9fN7e/BuDP2ePl0tVA2m7Q== - dependencies: - "@discordjs/collection" "^0.4.0" - "@sapphire/async-queue" "^1.1.9" - "@sapphire/snowflake" "^3.0.1" - discord-api-types "^0.26.1" - form-data "^4.0.0" - node-fetch "^2.6.5" - tslib "^2.3.1" - - "@discordjs/rest@^1.7.1": - version "1.7.1" - resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-1.7.1.tgz" - integrity sha512-Ofa9UqT0U45G/eX86cURQnX7gzOJLG2oC28VhIk/G6IliYgQF7jFByBJEykPSHE4MxPhqCleYvmsrtfKh1nYmQ== - dependencies: - "@discordjs/collection" "^1.5.1" - "@discordjs/util" "^0.3.0" - "@sapphire/async-queue" "^1.5.0" - "@sapphire/snowflake" "^3.4.2" - discord-api-types "^0.37.41" - file-type "^18.3.0" - tslib "^2.5.0" - undici "^5.22.0" - - "@discordjs/util@^0.3.0", "@discordjs/util@^0.3.1": - version "0.3.1" - resolved "https://registry.npmjs.org/@discordjs/util/-/util-0.3.1.tgz" - integrity sha512-HxXKYKg7vohx2/OupUN/4Sd02Ev3PBJ5q0gtjdcvXb0ErCva8jNHWfe/v5sU3UKjIB/uxOhc+TDOnhqffj9pRA== - - "@discordjs/ws@^0.8.3": - version "0.8.3" - resolved "https://registry.npmjs.org/@discordjs/ws/-/ws-0.8.3.tgz" - integrity sha512-hcYtppanjHecbdNyCKQNH2I4RP9UrphDgmRgLYrATEQF1oo4sYSve7ZmGsBEXSzH72MO2tBPdWSThunbxUVk0g== - dependencies: - "@discordjs/collection" "^1.5.1" - "@discordjs/rest" "^1.7.1" - "@discordjs/util" "^0.3.1" - "@sapphire/async-queue" "^1.5.0" - "@types/ws" "^8.5.4" - "@vladfrangu/async_event_emitter" "^2.2.1" - discord-api-types "^0.37.41" - tslib "^2.5.0" - ws "^8.13.0" - - "@eslint-community/eslint-utils@^4.2.0": - version "4.4.0" - resolved "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - - "@eslint-community/regexpp@^4.4.0", "@eslint-community/regexpp@^4.5.0": - version "4.5.1" - resolved "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz" - integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== - - "@eslint/eslintrc@^2.0.3": - version "2.0.3" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz" - integrity sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.5.2" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - - "@eslint/js@8.41.0": - version "8.41.0" - resolved "https://registry.npmjs.org/@eslint/js/-/js-8.41.0.tgz" - integrity sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA== - - "@humanwhocodes/config-array@^0.11.8": - version "0.11.8" - resolved "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz" - integrity sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g== - dependencies: - "@humanwhocodes/object-schema" "^1.2.1" - debug "^4.1.1" - minimatch "^3.0.5" - - "@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - - "@humanwhocodes/object-schema@^1.2.1": - version "1.2.1" - resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz" - integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== - - "@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - - "@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - - "@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - - "@noble/hashes@^1.1.5": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.1.tgz#8831ef002114670c603c458ab8b11328406953a9" - integrity sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA== - - "@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - - "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - - "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - - "@paralleldrive/cuid2@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.2.1.tgz#e7c11bad9452b36ef5ad1a834b14910eb0fe4cec" - integrity sha512-GJhHYlMhyT2gWemDL7BGMWfTNhspJKkikLKh9wAy3z4GTTINvTYALkUd+eGQK7aLeVkVzPuSA0VCT3H5eEWbbw== - dependencies: - "@noble/hashes" "^1.1.5" - - "@prisma/client@latest": - version "4.15.0" - resolved "https://registry.npmjs.org/@prisma/client/-/client-4.15.0.tgz" - integrity sha512-xnROvyABcGiwqRNdrObHVZkD9EjkJYHOmVdlKy1yGgI+XOzvMzJ4tRg3dz1pUlsyhKxXGCnjIQjWW+2ur+YXuw== - dependencies: - "@prisma/engines-version" "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" - - "@prisma/engines-version@4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944": - version "4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944" - resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.15.0-28.8fbc245156db7124f997f4cecdd8d1219e360944.tgz" - integrity sha512-sVOig4tjGxxlYaFcXgE71f/rtFhzyYrfyfNFUsxCIEJyVKU9rdOWIlIwQ2NQ7PntvGnn+x0XuFo4OC1jvPJKzg== - - "@prisma/engines@4.15.0": - version "4.15.0" - resolved "https://registry.npmjs.org/@prisma/engines/-/engines-4.15.0.tgz" - integrity sha512-FTaOCGs0LL0OW68juZlGxFtYviZa4xdQj/rQEdat2txw0s3Vu/saAPKjNVXfIgUsGXmQ72HPgNr6935/P8FNAA== - - "@sapphire/async-queue@^1.1.9", "@sapphire/async-queue@^1.5.0": - version "1.5.0" - resolved "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.0.tgz" - integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== - - "@sapphire/shapeshift@^3.8.1", "@sapphire/shapeshift@^3.8.2": - version "3.9.0" - resolved "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-3.9.0.tgz" - integrity sha512-iJpHmjAdwX9aSL6MvFpVyo+tkokDtInmSjoJHbz/k4VJfnim3DjvG0hgGEKWtWZgCu45RaLgcoNgR1fCPdIz3w== - dependencies: - fast-deep-equal "^3.1.3" - lodash "^4.17.21" - - "@sapphire/snowflake@^3.0.1", "@sapphire/snowflake@^3.4.2": - version "3.5.1" - resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.1.tgz" - integrity sha512-BxcYGzgEsdlG0dKAyOm0ehLGm2CafIrfQTZGWgkfKYbj+pNNsorZ7EotuZukc2MT70E0UbppVbtpBrqpzVzjNA== - - "@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - - "@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - - "@tokenizer/token@^0.3.0": - version "0.3.0" - resolved "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz" - integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== - - "@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - - "@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - - "@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - - "@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - - "@types/cacheable-request@^6.0.1": - version "6.0.3" - resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - - "@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - - "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== - - "@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - - "@types/node@*", "@types/node@^17.0.42": - version "17.0.45" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz" - integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== - - "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - - "@types/semver@^7.3.12": - version "7.5.0" - resolved "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz" - integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== - - "@types/uuid@^9.0.1": - version "9.0.1" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.1.tgz" - integrity sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA== - - "@types/ws@^8.5.4": - version "8.5.4" - resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz" - integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== - dependencies: - "@types/node" "*" - - "@typescript-eslint/eslint-plugin@^5.16.0": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.7.tgz" - integrity sha512-BL+jYxUFIbuYwy+4fF86k5vdT9lT0CNJ6HtwrIvGh0PhH8s0yy5rjaKH2fDCrz5ITHy07WCzVGNvAmjJh4IJFA== - dependencies: - "@eslint-community/regexpp" "^4.4.0" - "@typescript-eslint/scope-manager" "5.59.7" - "@typescript-eslint/type-utils" "5.59.7" - "@typescript-eslint/utils" "5.59.7" - debug "^4.3.4" - grapheme-splitter "^1.0.4" - ignore "^5.2.0" - natural-compare-lite "^1.4.0" - semver "^7.3.7" - tsutils "^3.21.0" - - "@typescript-eslint/parser@^5.16.0": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.7.tgz" - integrity sha512-VhpsIEuq/8i5SF+mPg9jSdIwgMBBp0z9XqjiEay+81PYLJuroN+ET1hM5IhkiYMJd9MkTz8iJLt7aaGAgzWUbQ== - dependencies: - "@typescript-eslint/scope-manager" "5.59.7" - "@typescript-eslint/types" "5.59.7" - "@typescript-eslint/typescript-estree" "5.59.7" - debug "^4.3.4" - - "@typescript-eslint/scope-manager@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.7.tgz" - integrity sha512-FL6hkYWK9zBGdxT2wWEd2W8ocXMu3K94i3gvMrjXpx+koFYdYV7KprKfirpgY34vTGzEPPuKoERpP8kD5h7vZQ== - dependencies: - "@typescript-eslint/types" "5.59.7" - "@typescript-eslint/visitor-keys" "5.59.7" - - "@typescript-eslint/type-utils@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.7.tgz" - integrity sha512-ozuz/GILuYG7osdY5O5yg0QxXUAEoI4Go3Do5xeu+ERH9PorHBPSdvD3Tjp2NN2bNLh1NJQSsQu2TPu/Ly+HaQ== - dependencies: - "@typescript-eslint/typescript-estree" "5.59.7" - "@typescript-eslint/utils" "5.59.7" - debug "^4.3.4" - tsutils "^3.21.0" - - "@typescript-eslint/types@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.7.tgz" - integrity sha512-UnVS2MRRg6p7xOSATscWkKjlf/NDKuqo5TdbWck6rIRZbmKpVNTLALzNvcjIfHBE7736kZOFc/4Z3VcZwuOM/A== - - "@typescript-eslint/typescript-estree@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.7.tgz" - integrity sha512-4A1NtZ1I3wMN2UGDkU9HMBL+TIQfbrh4uS0WDMMpf3xMRursDbqEf1ahh6vAAe3mObt8k3ZATnezwG4pdtWuUQ== - dependencies: - "@typescript-eslint/types" "5.59.7" - "@typescript-eslint/visitor-keys" "5.59.7" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - - "@typescript-eslint/utils@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.7.tgz" - integrity sha512-yCX9WpdQKaLufz5luG4aJbOpdXf/fjwGMcLFXZVPUz3QqLirG5QcwwnIHNf8cjLjxK4qtzTO8udUtMQSAToQnQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@types/json-schema" "^7.0.9" - "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.59.7" - "@typescript-eslint/types" "5.59.7" - "@typescript-eslint/typescript-estree" "5.59.7" - eslint-scope "^5.1.1" - semver "^7.3.7" - - "@typescript-eslint/visitor-keys@5.59.7": - version "5.59.7" - resolved "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.7.tgz" - integrity sha512-tyN+X2jvMslUszIiYbF0ZleP+RqQsFVpGrKI6e0Eet1w8WmhsAtmzaqm8oM8WJQ1ysLwhnsK/4hYHJjOgJVfQQ== - dependencies: - "@typescript-eslint/types" "5.59.7" - eslint-visitor-keys "^3.3.0" - - "@vladfrangu/async_event_emitter@^2.2.1": - version "2.2.2" - resolved "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.2.tgz" - integrity sha512-HIzRG7sy88UZjBJamssEczH5q7t5+axva19UbZLO6u0ySbYPrwzWiXBcC0WuHyhKKoeCyneH+FvYzKQq/zTtkQ== - - abbrev@1: - version "1.1.1" - resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - - acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - - acorn-walk@^8.1.1: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - - acorn@^8.4.1, acorn@^8.8.0: - version "8.8.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== - - ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - - ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - - ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - - anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - - arg@^4.1.0: - version "4.1.3" - resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - - argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - - array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - - asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - - atomic-sleep@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz" - integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== - - balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - - binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - - brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - - braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - - buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - - busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - - cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - - cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - - callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - - chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - - chokidar@^3.5.2: - version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - - clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - - color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - - color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - - combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - - comment-parser@^1.1.2: - version "1.3.1" - resolved "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz" - integrity sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA== - - concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - - create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - - cross-env@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz" - integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== - dependencies: - cross-spawn "^7.0.1" - - cross-spawn@^7.0.1, cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - - debug@^3.2.7: - version "3.2.7" - resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - - debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - - decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - - deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - - defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - - delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - - diff@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - - dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - - discord-api-types@^0.26.1: - version "0.26.1" - resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.26.1.tgz" - integrity sha512-T5PdMQ+Y1MEECYMV5wmyi9VEYPagEDEi4S0amgsszpWY0VB9JJ/hEvM6BgLhbdnKky4gfmZEXtEEtojN8ZKJQQ== - - discord-api-types@^0.37.35, discord-api-types@^0.37.41: - version "0.37.42" - resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.42.tgz" - integrity sha512-1Huaj9cQ1W7/uryS8MZs/tZemnoKB94thM1cE40lep3rpU3q7WHqkdjN/veX0prTkYlPhcyLd/DeF/pBO8X8oQ== - - discord.js@^14.8.0: - version "14.11.0" - resolved "https://registry.npmjs.org/discord.js/-/discord.js-14.11.0.tgz" - integrity sha512-CkueWYFQ28U38YPR8HgsBR/QT35oPpMbEsTNM30Fs8loBIhnA4s70AwQEoy6JvLcpWWJO7GY0y2BUzZmuBMepQ== - dependencies: - "@discordjs/builders" "^1.6.3" - "@discordjs/collection" "^1.5.1" - "@discordjs/formatters" "^0.3.1" - "@discordjs/rest" "^1.7.1" - "@discordjs/util" "^0.3.1" - "@discordjs/ws" "^0.8.3" - "@sapphire/snowflake" "^3.4.2" - "@types/ws" "^8.5.4" - discord-api-types "^0.37.41" - fast-deep-equal "^3.1.3" - lodash.snakecase "^4.1.1" - tslib "^2.5.0" - undici "^5.22.0" - ws "^8.13.0" - - doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - - duplexify@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz" - integrity sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw== - dependencies: - end-of-stream "^1.4.1" - inherits "^2.0.3" - readable-stream "^3.1.1" - stream-shift "^1.0.0" - - end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - - escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - - eslint-plugin-regexp@^1.6.0: - version "1.15.0" - resolved "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-1.15.0.tgz" - integrity sha512-YEtQPfdudafU7RBIFci81R/Q1yErm0mVh3BkGnXD2Dk8DLwTFdc2ITYH1wCnHKim2gnHfPFgrkh+b2ozyyU7ag== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - comment-parser "^1.1.2" - grapheme-splitter "^1.0.4" - jsdoctypeparser "^9.0.0" - refa "^0.11.0" - regexp-ast-analysis "^0.6.0" - scslre "^0.2.0" - - eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - - eslint-scope@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz" - integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - - eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: - version "3.4.1" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz" - integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== - - eslint@^8.12.0: - version "8.41.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-8.41.0.tgz" - integrity sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.4.0" - "@eslint/eslintrc" "^2.0.3" - "@eslint/js" "8.41.0" - "@humanwhocodes/config-array" "^0.11.8" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.0" - eslint-visitor-keys "^3.4.1" - espree "^9.5.2" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.1" - strip-ansi "^6.0.1" - strip-json-comments "^3.1.0" - text-table "^0.2.0" - - espree@^9.5.2: - version "9.5.2" - resolved "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz" - integrity sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw== - dependencies: - acorn "^8.8.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - - esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - - esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - - estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - - estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - - esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - - fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - - fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - - fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - - fast-redact@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/fast-redact/-/fast-redact-3.2.0.tgz" - integrity sha512-zaTadChr+NekyzallAMXATXLOR8MNx3zqpZ0MUF2aGf4EathnG0f32VLODNlY8IuGY3HoRO2L6/6fSzNsLaHIw== - - fastq@^1.6.0: - version "1.15.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz" - integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== - dependencies: - reusify "^1.0.4" - - file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - - file-type@^18.3.0: - version "18.4.0" - resolved "https://registry.npmjs.org/file-type/-/file-type-18.4.0.tgz" - integrity sha512-o6MQrZKTAK6WpvmQk3jqTVUmqxYBxW5bloUfrdH1ZnRFDvvAPNr+l+rgOxM3nkqWT+3khaj3FRMDydWe0xhu+w== - dependencies: - readable-web-to-node-stream "^3.0.2" - strtok3 "^7.0.0" - token-types "^5.0.1" - - fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - - find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - - flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - - flatted@^3.1.0: - version "3.2.7" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz" - integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== - - form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - - fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - - fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - - get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - - glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - - glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - - glob@^7.1.3: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - - globals@^13.19.0: - version "13.20.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz" - integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== - dependencies: - type-fest "^0.20.2" - - globby@^11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - - got@^11.8.3: - version "11.8.6" - resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - - grapheme-splitter@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz" - integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== - - graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - - has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - - has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - - hjson@^3.2.2: - version "3.2.2" - resolved "https://registry.npmjs.org/hjson/-/hjson-3.2.2.tgz" - integrity sha512-MkUeB0cTIlppeSsndgESkfFD21T2nXPRaBStLtf3cAYA2bVEFdXlodZB0TukwZiobPD1Ksax5DK4RTZeaXCI3Q== - - http-cache-semantics@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - - http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - - ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - - ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - - ignore@^5.2.0: - version "5.2.4" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz" - integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== - - import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - - imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - - inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - - inherits@2, inherits@^2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - - is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - - is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - - is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - - is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - - isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - - js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - - jsdoctypeparser@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz" - integrity sha512-jrTA2jJIL6/DAEILBEh2/w9QxCuwmvNXIry39Ay/HVfhE3o2yVV0U44blYkqdHA/OKloJEqvJy0xU+GSdE2SIw== - - json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - - json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - - json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - - json5@^2.2.2: - version "2.2.3" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - - keyv@^4.0.0: - version "4.5.2" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz" - integrity sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g== - dependencies: - json-buffer "3.0.1" - - levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - - locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - - lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - - lodash.snakecase@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz" - integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== - - lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - - lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - - lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - - make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - - merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - - micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - - mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - - mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - - mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - - mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - - minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - - minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - - ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - - ms@^2.1.1: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - - natural-compare-lite@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz" - integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== - - natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - - nekos.life@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/nekos.life/-/nekos.life-3.0.0.tgz" - integrity sha512-7LbvSqLtfK4XRA91nJaGOWthrNADmG7Vx9d54TC77Hx5qFvRCssFUaHraI6bZGjVENBCUaF7CreisoFX+8mnKQ== - - node-fetch@^2.6.5: - version "2.6.11" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz" - integrity sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w== - dependencies: - whatwg-url "^5.0.0" - - nodemon@^2.0.20: - version "2.0.22" - resolved "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz" - integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ== - dependencies: - chokidar "^3.5.2" - debug "^3.2.7" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^5.7.1" - simple-update-notifier "^1.0.7" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - - nopt@~1.0.10: - version "1.0.10" - resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" - integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== - dependencies: - abbrev "1" - - normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - - normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - - on-exit-leak-free@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz" - integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== - - once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - - optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - - p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - - p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - - p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - - parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - - parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - - path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - - path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - - path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - - path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - - peek-readable@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/peek-readable/-/peek-readable-5.0.0.tgz" - integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A== - - picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - - picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - - pino-abstract-transport@v0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz" - integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== - dependencies: - duplexify "^4.1.2" - split2 "^4.0.0" - - pino-std-serializers@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz" - integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== - - pino@^7.9.2: - version "7.11.0" - resolved "https://registry.npmjs.org/pino/-/pino-7.11.0.tgz" - integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== - dependencies: - atomic-sleep "^1.0.0" - fast-redact "^3.0.0" - on-exit-leak-free "^0.2.0" - pino-abstract-transport v0.5.0 - pino-std-serializers "^4.0.0" - process-warning "^1.0.0" - quick-format-unescaped "^4.0.3" - real-require "^0.1.0" - safe-stable-stringify "^2.1.0" - sonic-boom "^2.2.1" - thread-stream "^0.15.1" - - prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - - pretty-ms@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz" - integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== - dependencies: - parse-ms "^2.1.0" - - prisma@latest: - version "4.15.0" - resolved "https://registry.npmjs.org/prisma/-/prisma-4.15.0.tgz" - integrity sha512-iKZZpobPl48gTcSZVawLMQ3lEy6BnXwtoMj7hluoGFYu2kQ6F9LBuBrUyF95zRVnNo8/3KzLXJXJ5TEnLSJFiA== - dependencies: - "@prisma/engines" "4.15.0" - - process-warning@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz" - integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== - - pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - - pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - - punycode@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - - queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - - quick-format-unescaped@^4.0.3: - version "4.0.4" - resolved "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz" - integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== - - quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - - readable-stream@^3.1.1, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - - readable-web-to-node-stream@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz" - integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== - dependencies: - readable-stream "^3.6.0" - - readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - - real-require@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/real-require/-/real-require-0.1.0.tgz" - integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== - - refa@^0.11.0: - version "0.11.0" - resolved "https://registry.npmjs.org/refa/-/refa-0.11.0.tgz" - integrity sha512-486O8/pQXwj9jV0mVvUnTsxq0uknpBnNJ0eCUhkZqJRQ8KutrT1PhzmumdCeM1hSBF2eMlFPmwECRER4IbKXlQ== - dependencies: - "@eslint-community/regexpp" "^4.5.0" - - regexp-ast-analysis@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.6.0.tgz" - integrity sha512-OLxjyjPkVH+rQlBLb1I/P/VTmamSjGkvN5PTV5BXP432k3uVz727J7H29GA5IFiY0m7e1xBN7049Wn59FY3DEQ== - dependencies: - "@eslint-community/regexpp" "^4.5.0" - refa "^0.11.0" - - resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - - resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - - responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - - reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - - rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - - run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - - safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - - safe-stable-stringify@^2.1.0: - version "2.4.3" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - - scslre@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/scslre/-/scslre-0.2.0.tgz" - integrity sha512-4hc49fUMmX3jM0XdFUAPBrs1xwEcdHa0KyjEsjFs+Zfc66mpFpq5YmRgDtl+Ffo6AtJIilfei+yKw8fUn3N88w== - dependencies: - "@eslint-community/regexpp" "^4.5.0" - refa "^0.11.0" - regexp-ast-analysis "^0.6.0" - - semver@^5.7.1: - version "5.7.1" - resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - - semver@^7.3.7: - version "7.5.1" - resolved "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== - dependencies: - lru-cache "^6.0.0" - - semver@~7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - - shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - - shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - - simple-update-notifier@^1.0.7: - version "1.1.0" - resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz" - integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg== - dependencies: - semver "~7.0.0" - - slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - - sonic-boom@^2.2.1: - version "2.8.0" - resolved "https://registry.npmjs.org/sonic-boom/-/sonic-boom-2.8.0.tgz" - integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== - dependencies: - atomic-sleep "^1.0.0" - - source-map-support@^0.5.21: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - - source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - - split2@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - - stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - - streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - - string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - - strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - - strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - - strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - - strtok3@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/strtok3/-/strtok3-7.0.0.tgz" - integrity sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ== - dependencies: - "@tokenizer/token" "^0.3.0" - peek-readable "^5.0.0" - - supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - - supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - - text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - - thread-stream@^0.15.1: - version "0.15.2" - resolved "https://registry.npmjs.org/thread-stream/-/thread-stream-0.15.2.tgz" - integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== - dependencies: - real-require "^0.1.0" - - to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - - token-types@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/token-types/-/token-types-5.0.1.tgz" - integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== - dependencies: - "@tokenizer/token" "^0.3.0" - ieee754 "^1.2.1" - - touch@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" - integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== - dependencies: - nopt "~1.0.10" - - tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - - ts-mixer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.3.tgz" - integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ== - - ts-node@^10.9.1: - version "10.9.1" - resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" - integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - - ts-toolbelt@^9.6.0: - version "9.6.0" - resolved "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz" - integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== - - tsconfig-paths@^4.1.2: - version "4.2.0" - resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - - tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - - tslib@^2.3.1, tslib@^2.5.0: - version "2.5.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz" - integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== - - tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - - type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - - type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - - typescript-memoize@^1.1.0: - version "1.1.1" - resolved "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz" - integrity sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA== - - typescript@^4.9.5: - version "4.9.5" - resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - - undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - - undici@^5.22.0: - version "5.22.1" - resolved "https://registry.npmjs.org/undici/-/undici-5.22.1.tgz" - integrity sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw== - dependencies: - busboy "^1.6.0" - - uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - - util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - - uuid@^9.0.0: - version "9.0.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz" - integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== - - v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - - webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - - whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - - which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - - word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - - wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - - ws@^8.13.0: - version "8.13.0" - resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - - yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - - yarn@^1.22.18: - version "1.22.19" - resolved "https://registry.npmjs.org/yarn/-/yarn-1.22.19.tgz" - integrity sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ== - - yn@3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== - - yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - - zod@^3.14.3: - version "3.21.4" - resolved "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz" - integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== From 5f144176bb41ab69dd31993c702cdc2692024245 Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Mon, 6 May 2024 21:07:11 -0400 Subject: [PATCH 78/79] Delete prisma/migrations directory --- .../20240417153138_thing/migration.sql | 185 ------------------ prisma/migrations/migration_lock.toml | 3 - 2 files changed, 188 deletions(-) delete mode 100644 prisma/migrations/20240417153138_thing/migration.sql delete mode 100644 prisma/migrations/migration_lock.toml diff --git a/prisma/migrations/20240417153138_thing/migration.sql b/prisma/migrations/20240417153138_thing/migration.sql deleted file mode 100644 index 2d33a38..0000000 --- a/prisma/migrations/20240417153138_thing/migration.sql +++ /dev/null @@ -1,185 +0,0 @@ --- CreateEnum -CREATE TYPE "CafeStatus" AS ENUM ('Unprepared', 'Preparing', 'Brewing', 'Fermenting', 'PendingDelivery', 'Delivering', 'Delivered', 'Cancelled', 'Deleted', 'Failed', 'Claimed'); - --- CreateEnum -CREATE TYPE "OrderStatus" AS ENUM ('Unprepared', 'Preparing', 'Brewing', 'Fermenting', 'PendingDelivery', 'Delivering', 'Delivered', 'Cancelled', 'Deleted', 'Failed', 'Claimed'); - --- CreateTable -CREATE TABLE "WorkerInfo" ( - "id" VARCHAR(20) NOT NULL, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "preparations" INTEGER NOT NULL DEFAULT 0, - "deliveries" INTEGER NOT NULL DEFAULT 0, - "deliveryMessage" TEXT, - "commandUsageCount" INTEGER NOT NULL, - "lastCommandName" TEXT, - "cafeDeliveryMessage" TEXT, - - CONSTRAINT "WorkerInfo_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "UserInfo" ( - "id" VARCHAR(30) NOT NULL, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "balance" INTEGER NOT NULL DEFAULT 0, - "newBalance" INTEGER, - "tabLimit" DOUBLE PRECISION NOT NULL DEFAULT 0, - "donuts" INTEGER NOT NULL DEFAULT 0, - - CONSTRAINT "UserInfo_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "trees" ( - "id" TEXT NOT NULL, - "age" INTEGER NOT NULL, - "water" TIMESTAMP(3) NOT NULL, - "maxAge" INTEGER NOT NULL, - - CONSTRAINT "trees_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Tab" ( - "id" SERIAL NOT NULL, - "userId" VARCHAR(20) NOT NULL, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "paidAt" TIMESTAMP(3), - "amount" DOUBLE PRECISION NOT NULL, - "tabLimit" DOUBLE PRECISION NOT NULL DEFAULT 0, - "amountNeeded" DOUBLE PRECISION NOT NULL DEFAULT 0, - "amountRemaining" DOUBLE PRECISION NOT NULL DEFAULT 0, - - CONSTRAINT "Tab_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Blacklist" ( - "id" VARCHAR(20) NOT NULL, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "reason" TEXT NOT NULL, - "blacklister" VARCHAR(20) NOT NULL, - - CONSTRAINT "Blacklist_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "CafeOrders" ( - "id" VARCHAR(10) NOT NULL, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "user" VARCHAR(20) NOT NULL, - "details" TEXT NOT NULL, - "status" "CafeStatus" NOT NULL DEFAULT 'Unprepared', - "channel" VARCHAR(20) NOT NULL, - "guild" VARCHAR(20) NOT NULL, - "claimer" VARCHAR(20), - "deliverer" VARCHAR(20), - "image" TEXT, - "timeout" TIMESTAMP(3), - "deleteReason" TEXT, - "bakeRating" INTEGER, - "prepRating" INTEGER, - "deliveryRating" INTEGER, - "flags" INTEGER NOT NULL DEFAULT 0, - "putOnTab" BOOLEAN, - "amount" DOUBLE PRECISION, - - CONSTRAINT "CafeOrders_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Orders" ( - "id" VARCHAR(10) NOT NULL, - "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "user" VARCHAR(20) NOT NULL, - "details" TEXT NOT NULL, - "status" "OrderStatus" NOT NULL DEFAULT 'Unprepared', - "channel" VARCHAR(20) NOT NULL, - "guild" VARCHAR(20) NOT NULL, - "claimer" VARCHAR(20), - "deliverer" VARCHAR(20), - "image" TEXT, - "timeout" TIMESTAMP(3), - "deleteReason" TEXT, - "bakeRating" INTEGER, - "prepRating" INTEGER, - "deliveryRating" INTEGER, - "flags" INTEGER NOT NULL DEFAULT 0, - "putOnTab" BOOLEAN, - "amount" DOUBLE PRECISION, - - CONSTRAINT "Orders_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "dishes" ( - "id" VARCHAR(1234) NOT NULL, - "status" INTEGER NOT NULL, - "createdAt" TIMESTAMP(6) NOT NULL, - "updatedAt" TIMESTAMP(6) NOT NULL, - - CONSTRAINT "dishes_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "GuildsXP" ( - "userId" TEXT NOT NULL, - "guildId" TEXT NOT NULL, - "level" INTEGER NOT NULL DEFAULT 0, - "exp" INTEGER NOT NULL DEFAULT 0, - "notificationChannelId" TEXT -); - --- CreateTable -CREATE TABLE "WorkerStats" ( - "id" TEXT NOT NULL, - "ordersBrewed" INTEGER NOT NULL, - "ordersDelivered" INTEGER NOT NULL, - "lastUsed" TIMESTAMP(3) NOT NULL, - "lastCommand" TEXT, - - CONSTRAINT "WorkerStats_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "MenuItem" ( - "id" TEXT NOT NULL, - "name" TEXT NOT NULL, - "description" TEXT NOT NULL, - "price" DOUBLE PRECISION NOT NULL, - "category" TEXT NOT NULL, - - CONSTRAINT "MenuItem_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "ShopItem" ( - "id" TEXT NOT NULL, - "name" TEXT NOT NULL, - "price" INTEGER NOT NULL, - "description" TEXT NOT NULL, - "type" TEXT NOT NULL, - "roleId" TEXT, - - CONSTRAINT "ShopItem_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "InventoryItem" ( - "id" TEXT NOT NULL, - "itemId" TEXT NOT NULL, - "userId" TEXT NOT NULL, - "quantity" INTEGER NOT NULL, - - CONSTRAINT "InventoryItem_pkey" PRIMARY KEY ("id") -); - --- CreateIndex -CREATE UNIQUE INDEX "Tab_userId_key" ON "Tab"("userId"); - --- CreateIndex -CREATE UNIQUE INDEX "GuildsXP_userId_guildId_key" ON "GuildsXP"("userId", "guildId"); - --- AddForeignKey -ALTER TABLE "Tab" ADD CONSTRAINT "Tab_userId_fkey" FOREIGN KEY ("userId") REFERENCES "UserInfo"("id") ON DELETE RESTRICT ON UPDATE CASCADE; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml deleted file mode 100644 index fbffa92..0000000 --- a/prisma/migrations/migration_lock.toml +++ /dev/null @@ -1,3 +0,0 @@ -# Please do not edit this file manually -# It should be added in your version-control system (i.e. Git) -provider = "postgresql" \ No newline at end of file From a8383fa28e997b20528ccb8ec219726b0ca0c9eb Mon Sep 17 00:00:00 2001 From: Mystic#9697 Date: Mon, 6 May 2024 21:10:55 -0400 Subject: [PATCH 79/79] Delete database directory --- database/userInfo.ts | 98 -------------------------------------------- 1 file changed, 98 deletions(-) delete mode 100644 database/userInfo.ts diff --git a/database/userInfo.ts b/database/userInfo.ts deleted file mode 100644 index 2c68383..0000000 --- a/database/userInfo.ts +++ /dev/null @@ -1,98 +0,0 @@ -/* eslint-disable indent */ -/* eslint-disable quotes */ -import { PrismaClient, UserInfo } from '@prisma/client'; -import type { User, UserResolvable } from 'discord.js'; -import { resolveUserId } from '../utils/id'; - -const prisma = new PrismaClient(); - -export const getUserInfo = async (user: UserResolvable) => - prisma.userInfo.findFirst({ where: { id: resolveUserId(user) } }); - -export const upsertUserInfo = async (user: User): Promise => { - let userInfo = await prisma.userInfo.findUnique({ - where: { - id: resolveUserId(user), - }, - }); - - if (!userInfo) { - userInfo = await prisma.userInfo.create({ - data: { - id: resolveUserId(user), - } as any, // Explicitly specifying the type of 'data' - }); - } - - return userInfo; -}; - - -export const getUserBalance = async (user: UserResolvable): Promise<{ balance: number; donuts: number }> => { - const userInfo = await prisma.userInfo.findUnique({ - where: { - id: resolveUserId(user), - }, - select: { - balance: true, - donuts: true, - }, - }); - - // Parse balance and donuts as numbers - const balance = userInfo ? Number(userInfo.balance) : 0; - const donuts = userInfo ? Number(userInfo.donuts) : 0; - - return { balance, donuts }; -}; - - -// Update user balance function -export const updateBalance = async ( - user: UserResolvable, - newBalance: number, - newDonuts?: number // Making newDonuts optional -): Promise => { - // Check if newBalance is a valid number - if (isNaN(newBalance) || typeof newBalance !== 'number') { - console.error('Invalid newBalance:', newBalance); - return null; - } - - // Ensure balance is a whole number - const balance = Math.floor(newBalance); - - // Update the user's balance in the database - const updatedUserInfo = await prisma.userInfo.update({ - where: { - id: resolveUserId(user), - }, - data: { - balance: balance, - // Update donuts only if newDonuts is provided - ...(newDonuts !== undefined && { donuts: Math.floor(newDonuts) }), - }, - }); - - return updatedUserInfo; -}; - -// Create guild-specific data function -export const createGuildData = async ( - userId: string, - guildId: string, - level: number, - exp: number, - notificationChannelId?: string -): Promise => { - await prisma.guildsXP.create({ - data: { - userId: userId, - guildId: guildId, - level: level, - exp: exp, - notificationChannelId: notificationChannelId, - } as any, // Explicitly specifying the type of 'data' - }); -}; -