diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index fd96ed5026eb..68360bdaa4e6 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -17,6 +17,25 @@ To get ready to work on the codebase, please do the following: 5. Run `yarn test` to run ESLint and ensure any JSDoc changes are valid 6. [Submit a pull request](https://github.com/discordjs/discord.js/compare) (Make sure you follow the [conventional commit format](https://github.com/discordjs/discord.js/blob/main/.github/COMMIT_CONVENTION.md)) +## Testing changes locally + +If you want to test changes you've made locally, you can do so by using `yarn link`. This will create a symlink to your local copy of the discord.js libraries. + +1. Create a new directory `mkdir discordjs-test` and move into it `cd discordjs-test` +2. Initialize a new yarn 3 project `yarn init -2` +3. Disable pnp `yarn config set nodeLinker node-modules` +4. Now link the local discord.js project you cloned earlier `yarn link -A {PATH_TO_DISCORDJS_REPO}` +5. Install packages you'd like to test locally `yarn add discord.js@latest`, `yarn add @discordjs/rest@latest`, etc. **Note: Make sure you use `latest` tag or else yarn will try to install the remote package from npm** +6. Import the package in your source code and test them out! + +### Working with TypeScript packages + +When testing local changes, you may notice you need to manually recompile TypeScript projects on every change in order to get the latest code changes to test locally. + +To avoid this you can use the `--watch` parameter in the package build script to automatically recompile the project when changes are detected. + +For example, to automatically recompile the `@discordjs/rest` project when changes are detected, run `yarn turbo run build --filter=@discordjs/rest -- --watch` in the root folder of where you cloned the discord.js repo. + ## Adding new packages If you'd like to create another package under the `@discordjs` organization run the following command: diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index e356e097dd96..69d82ecfc107 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -132,6 +132,8 @@ body: - DirectMessageTyping - MessageContent - GuildScheduledEvents + - AutoModerationConfiguration + - AutoModerationExecution multiple: true validations: required: true diff --git a/apps/guide/package.json b/apps/guide/package.json index 454d51ed9b7a..f31e683d3777 100644 --- a/apps/guide/package.json +++ b/apps/guide/package.json @@ -34,54 +34,54 @@ }, "homepage": "https://discord.js.org", "dependencies": { - "@astrojs/image": "^0.10.0", - "@astrojs/mdx": "^0.11.4", - "@astrojs/react": "^1.2.1", + "@astrojs/image": "^0.11.6", + "@astrojs/mdx": "^0.11.6", + "@astrojs/react": "^1.2.2", "@code-hike/mdx": "^0.7.4", "@discordjs/ui": "workspace:^", "ariakit": "^2.0.0-next.41", "cmdk": "^0.1.20", - "meilisearch": "^0.28.0", + "meilisearch": "^0.29.1", "react": "^17.0.2", "react-custom-scrollbars-2": "^4.5.0", "react-dom": "^17.0.2", "react-icons": "^4.6.0", "react-use": "^17.4.0", - "sharp": "^0.31.1", + "sharp": "^0.31.2", "shiki": "^0.11.1" }, "devDependencies": { - "@astrojs/prefetch": "^0.1.0", + "@astrojs/prefetch": "^0.1.1", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", - "@types/node": "16.11.68", - "@types/react": "^17.0.50", - "@types/react-dom": "^17.0.17", + "@types/node": "16.18.3", + "@types/react": "^17.0.52", + "@types/react-dom": "^17.0.18", "@types/react-syntax-highlighter": "^15.5.5", - "@unocss/cli": "^0.45.30", - "@unocss/reset": "^0.45.30", - "@vitejs/plugin-react": "^2.1.0", - "@vitest/coverage-c8": "^0.24.3", - "astro": "^1.5.2", - "astro-compress": "^1.0.12", - "astro-critters": "^1.0.5", + "@unocss/cli": "^0.46.5", + "@unocss/reset": "^0.46.5", + "@vitejs/plugin-react": "^2.2.0", + "@vitest/coverage-c8": "^0.25.2", + "astro": "^1.6.10", + "astro-compress": "^1.1.8", + "astro-critters": "^1.1.8", "cross-env": "^7.0.3", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", - "happy-dom": "^7.6.0", + "happy-dom": "^7.7.0", "hast-util-to-string": "^2.0.0", "hastscript": "^7.1.0", "html-escaper": "^3.0.3", "prettier": "^2.7.1", - "prettier-plugin-astro": "^0.6.0", + "prettier-plugin-astro": "^0.7.0", "prettier-plugin-tailwindcss": "^0.1.13", "rehype-autolink-headings": "^6.1.1", - "rehype-slug": "^5.0.1", - "typescript": "^4.8.4", - "unocss": "^0.45.30", - "vercel": "^28.4.12", - "vitest": "^0.24.3" + "rehype-slug": "^5.1.0", + "typescript": "^4.9.3", + "unocss": "^0.46.5", + "vercel": "^28.5.6", + "vitest": "^0.25.2" }, "engines": { "node": ">=16.9.0" diff --git a/apps/website/.prettierignore b/apps/website/.prettierignore index 10286aa98784..e1bd47e8f16f 100644 --- a/apps/website/.prettierignore +++ b/apps/website/.prettierignore @@ -13,3 +13,4 @@ api/ .next/ .vercel/ .cache/ +public/searchIndex diff --git a/apps/website/package.json b/apps/website/package.json index bbec98fe9503..21bc058a2cdc 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -45,13 +45,13 @@ "@discordjs/ui": "workspace:^", "@microsoft/api-extractor-model": "7.24.0", "@microsoft/tsdoc": "0.14.1", - "@vercel/og": "^0.0.19", + "@vercel/og": "^0.0.21", "@vscode/codicons": "^0.0.32", "ariakit": "^2.0.0-next.41", "cmdk": "^0.1.20", - "meilisearch": "^0.28.0", - "next": "^12.3.1", - "next-mdx-remote": "^4.1.0", + "meilisearch": "^0.29.1", + "next": "^12.3.4", + "next-mdx-remote": "^4.2.0", "next-progress": "^2.2.0", "next-themes": "^0.2.1", "react": "^18.2.0", @@ -60,38 +60,38 @@ "react-icons": "^4.6.0", "react-syntax-highlighter": "^15.5.0", "react-use": "^17.4.0", - "rehype-ignore": "^1.0.1", - "rehype-pretty-code": "^0.4.0", + "rehype-ignore": "^1.0.3", + "rehype-pretty-code": "^0.5.0", "rehype-raw": "^6.1.1", - "rehype-slug": "^5.0.1", + "rehype-slug": "^5.1.0", "remark-gfm": "^3.0.1", - "sharp": "^0.31.1", + "sharp": "^0.31.2", "shiki": "^0.11.1", "swr": "^1.3.0" }, "devDependencies": { "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", - "@types/node": "16.11.68", - "@types/react": "^18.0.21", - "@types/react-dom": "^18.0.6", + "@types/node": "16.18.3", + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", "@types/react-syntax-highlighter": "^15.5.5", - "@unocss/cli": "^0.45.30", - "@unocss/reset": "^0.45.30", - "@vitejs/plugin-react": "^2.1.0", - "@vitest/coverage-c8": "^0.24.3", - "concurrently": "^7.4.0", + "@unocss/cli": "^0.46.5", + "@unocss/reset": "^0.46.5", + "@vitejs/plugin-react": "^2.2.0", + "@vitest/coverage-c8": "^0.25.2", + "concurrently": "^7.6.0", "cross-env": "^7.0.3", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", - "happy-dom": "^7.6.0", + "happy-dom": "^7.7.0", "prettier": "^2.7.1", "prettier-plugin-tailwindcss": "^0.1.13", - "typescript": "^4.8.4", - "unocss": "^0.45.30", - "vercel": "^28.4.12", - "vitest": "^0.24.3" + "typescript": "^4.9.3", + "unocss": "^0.46.5", + "vercel": "^28.5.6", + "vitest": "^0.25.2" }, "engines": { "node": ">=16.9.0" diff --git a/apps/website/src/pages/docs/[...slug].tsx b/apps/website/src/pages/docs/[...slug].tsx index 1fe48ca8004f..625ad00ec299 100644 --- a/apps/website/src/pages/docs/[...slug].tsx +++ b/apps/website/src/pages/docs/[...slug].tsx @@ -1,6 +1,7 @@ /* eslint-disable no-case-declarations */ import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; +// eslint-disable-next-line n/prefer-global/process import process, { cwd } from 'node:process'; import { findPackage, diff --git a/package.json b/package.json index a1fba1e57176..751047336a13 100644 --- a/package.json +++ b/package.json @@ -38,19 +38,19 @@ }, "homepage": "https://discord.js.org", "devDependencies": { - "@commitlint/cli": "^17.1.2", - "@commitlint/config-angular": "^17.1.0", - "@favware/cliff-jumper": "^1.8.8", + "@commitlint/cli": "^17.3.0", + "@commitlint/config-angular": "^17.3.0", + "@favware/cliff-jumper": "^1.9.0", "@favware/npm-deprecate": "^1.0.5", "conventional-changelog-cli": "^2.2.2", - "husky": "^8.0.1", + "husky": "^8.0.2", "is-ci": "^3.0.1", "lint-staged": "^13.0.3", - "tsup": "^6.3.0", - "turbo": "^1.5.6", - "typescript": "^4.8.4", - "unocss": "^0.45.30", - "vitest": "^0.24.3" + "tsup": "^6.5.0", + "turbo": "^1.6.3", + "typescript": "^4.9.3", + "unocss": "^0.46.5", + "vitest": "^0.25.2" }, "resolutions": { "@microsoft/tsdoc-config": "patch:@microsoft/tsdoc-config@npm:0.16.1#.yarn/patches/@microsoft-tsdoc-config-npm-0.16.1-81031b1bbf.patch" diff --git a/packages/actions/package.json b/packages/actions/package.json index d95dfbbf91b8..3d0157db4f15 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -40,19 +40,19 @@ "homepage": "https://discord.js.org", "dependencies": { "@actions/core": "^1.10.0", - "tslib": "^2.4.0" + "tslib": "^2.4.1" }, "devDependencies": { - "@types/node": "16.11.68", - "@vitest/coverage-c8": "^0.24.3", + "@types/node": "16.18.3", + "@vitest/coverage-c8": "^0.25.2", "cross-env": "^7.0.3", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "vitest": "^0.24.3" + "tsup": "^6.5.0", + "typescript": "^4.9.3", + "vitest": "^0.25.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/api-extractor-utils/package.json b/packages/api-extractor-utils/package.json index 7b4e4fae615e..1d125f72763e 100644 --- a/packages/api-extractor-utils/package.json +++ b/packages/api-extractor-utils/package.json @@ -35,14 +35,14 @@ "@microsoft/tsdoc": "0.14.1" }, "devDependencies": { - "@types/node": "16.11.68", + "@types/node": "16.18.3", "cross-env": "^7.0.3", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.3.0", - "typescript": "^4.8.4" + "tsup": "^6.5.0", + "typescript": "^4.9.3" }, "engines": { "node": ">=16.9.0" diff --git a/packages/brokers/__tests__/index.test.ts b/packages/brokers/__tests__/index.test.ts index e133c58d9487..898be4e7b61f 100644 --- a/packages/brokers/__tests__/index.test.ts +++ b/packages/brokers/__tests__/index.test.ts @@ -2,6 +2,12 @@ import type Redis from 'ioredis'; import { test, expect, vi } from 'vitest'; import { PubSubRedisBroker } from '../src/index.js'; +vi.mock('node:fs', () => { + return { + readFileSync: vi.fn(), + }; +}); + const mockRedisClient = { defineCommand: vi.fn(), xadd: vi.fn(), diff --git a/packages/brokers/package.json b/packages/brokers/package.json index 5d14c969110e..593f54e01153 100644 --- a/packages/brokers/package.json +++ b/packages/brokers/package.json @@ -26,7 +26,8 @@ "test": "__tests__" }, "files": [ - "dist" + "dist", + "scripts" ], "contributors": [ "Crawl ", @@ -57,21 +58,21 @@ "dependencies": { "@msgpack/msgpack": "^2.8.0", "@vladfrangu/async_event_emitter": "^2.1.2", - "ioredis": "^5.2.3" + "ioredis": "^5.2.4" }, "devDependencies": { - "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.33.4", - "@types/node": "^16.11.68", - "@vitest/coverage-c8": "^0.24.3", + "@favware/cliff-jumper": "^1.9.0", + "@microsoft/api-extractor": "^7.33.6", + "@types/node": "16.18.3", + "@vitest/coverage-c8": "^0.25.2", "cross-env": "^7.0.3", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "vitest": "^0.24.3" + "tsup": "^6.5.0", + "typescript": "^4.9.3", + "vitest": "^0.25.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/brokers/src/brokers/redis/BaseRedis.ts b/packages/brokers/src/brokers/redis/BaseRedis.ts index a075c0a47e68..1e95913b4c05 100644 --- a/packages/brokers/src/brokers/redis/BaseRedis.ts +++ b/packages/brokers/src/brokers/redis/BaseRedis.ts @@ -61,7 +61,7 @@ export abstract class BaseRedisBroker> this.options = { ...DefaultBrokerOptions, ...options }; options.redisClient.defineCommand('xcleangroup', { numberOfKeys: 1, - lua: readFileSync(resolve(__dirname, '..', '..', '..', 'scripts', 'xcleangroup.lua'), 'utf8'), + lua: readFileSync(resolve(__dirname, '..', 'scripts', 'xcleangroup.lua'), 'utf8'), }); this.streamReadClient = options.redisClient.duplicate(); } diff --git a/packages/builders/__tests__/components/actionRow.test.ts b/packages/builders/__tests__/components/actionRow.test.ts index d0bb9f7b584f..b9f63b501529 100644 --- a/packages/builders/__tests__/components/actionRow.test.ts +++ b/packages/builders/__tests__/components/actionRow.test.ts @@ -9,8 +9,8 @@ import { ActionRowBuilder, ButtonBuilder, createComponentBuilder, - SelectMenuBuilder, - SelectMenuOptionBuilder, + StringSelectMenuBuilder, + StringSelectMenuOptionBuilder, } from '../../src/index.js'; const rowWithButtonData: APIActionRowComponent = { @@ -29,7 +29,7 @@ const rowWithSelectMenuData: APIActionRowComponent type: ComponentType.ActionRow, components: [ { - type: ComponentType.SelectMenu, + type: ComponentType.StringSelect, custom_id: '1234', options: [ { @@ -73,7 +73,7 @@ describe('Action Row Components', () => { url: 'https://google.com', }, { - type: ComponentType.SelectMenu, + type: ComponentType.StringSelect, placeholder: 'test', custom_id: 'test', options: [ @@ -108,7 +108,7 @@ describe('Action Row Components', () => { type: ComponentType.ActionRow, components: [ { - type: ComponentType.SelectMenu, + type: ComponentType.StringSelect, custom_id: '1234', options: [ { @@ -134,17 +134,17 @@ describe('Action Row Components', () => { test('GIVEN valid builder options THEN valid JSON output is given 2', () => { const button = new ButtonBuilder().setLabel('test').setStyle(ButtonStyle.Primary).setCustomId('123'); - const selectMenu = new SelectMenuBuilder() + const selectMenu = new StringSelectMenuBuilder() .setCustomId('1234') .setMaxValues(10) .setMinValues(12) .setOptions( - new SelectMenuOptionBuilder().setLabel('one').setValue('one'), - new SelectMenuOptionBuilder().setLabel('two').setValue('two'), + new StringSelectMenuOptionBuilder().setLabel('one').setValue('one'), + new StringSelectMenuOptionBuilder().setLabel('two').setValue('two'), ) .setOptions([ - new SelectMenuOptionBuilder().setLabel('one').setValue('one'), - new SelectMenuOptionBuilder().setLabel('two').setValue('two'), + new StringSelectMenuOptionBuilder().setLabel('one').setValue('one'), + new StringSelectMenuOptionBuilder().setLabel('two').setValue('two'), ]); expect(new ActionRowBuilder().addComponents(button).toJSON()).toEqual(rowWithButtonData); diff --git a/packages/builders/__tests__/components/components.test.ts b/packages/builders/__tests__/components/components.test.ts index 520244d438eb..fa0bd4607f65 100644 --- a/packages/builders/__tests__/components/components.test.ts +++ b/packages/builders/__tests__/components/components.test.ts @@ -13,12 +13,12 @@ import { ActionRowBuilder, ButtonBuilder, createComponentBuilder, - SelectMenuBuilder, + StringSelectMenuBuilder, TextInputBuilder, } from '../../src/index.js'; describe('createComponentBuilder', () => { - test.each([ButtonBuilder, SelectMenuBuilder, TextInputBuilder])( + test.each([ButtonBuilder, StringSelectMenuBuilder, TextInputBuilder])( 'passing an instance of %j should return itself', (Builder) => { const builder = new Builder(); @@ -45,14 +45,14 @@ describe('createComponentBuilder', () => { expect(createComponentBuilder(button)).toBeInstanceOf(ButtonBuilder); }); - test('GIVEN a select menu component THEN returns a SelectMenuBuilder', () => { + test('GIVEN a select menu component THEN returns a StringSelectMenuBuilder', () => { const selectMenu: APISelectMenuComponent = { custom_id: 'abc', options: [], - type: ComponentType.SelectMenu, + type: ComponentType.StringSelect, }; - expect(createComponentBuilder(selectMenu)).toBeInstanceOf(SelectMenuBuilder); + expect(createComponentBuilder(selectMenu)).toBeInstanceOf(StringSelectMenuBuilder); }); test('GIVEN a text input component THEN returns a TextInputBuilder', () => { diff --git a/packages/builders/__tests__/components/selectMenu.test.ts b/packages/builders/__tests__/components/selectMenu.test.ts index c5e10c53ccde..f7ab28144918 100644 --- a/packages/builders/__tests__/components/selectMenu.test.ts +++ b/packages/builders/__tests__/components/selectMenu.test.ts @@ -1,9 +1,9 @@ import { ComponentType, type APISelectMenuComponent, type APISelectMenuOption } from 'discord-api-types/v10'; import { describe, test, expect } from 'vitest'; -import { SelectMenuBuilder, SelectMenuOptionBuilder } from '../../src/index.js'; +import { StringSelectMenuBuilder, StringSelectMenuOptionBuilder } from '../../src/index.js'; -const selectMenu = () => new SelectMenuBuilder(); -const selectMenuOption = () => new SelectMenuOptionBuilder(); +const selectMenu = () => new StringSelectMenuBuilder(); +const selectMenuOption = () => new StringSelectMenuOptionBuilder(); const longStr = 'a'.repeat(256); @@ -165,16 +165,16 @@ describe('Select Menu Components', () => { test('GIVEN valid JSON input THEN valid JSON history is correct', () => { expect( - new SelectMenuBuilder(selectMenuDataWithoutOptions) - .addOptions(new SelectMenuOptionBuilder(selectMenuOptionData)) + new StringSelectMenuBuilder(selectMenuDataWithoutOptions) + .addOptions(new StringSelectMenuOptionBuilder(selectMenuOptionData)) .toJSON(), ).toEqual(selectMenuData); expect( - new SelectMenuBuilder(selectMenuDataWithoutOptions) - .addOptions([new SelectMenuOptionBuilder(selectMenuOptionData)]) + new StringSelectMenuBuilder(selectMenuDataWithoutOptions) + .addOptions([new StringSelectMenuOptionBuilder(selectMenuOptionData)]) .toJSON(), ).toEqual(selectMenuData); - expect(new SelectMenuOptionBuilder(selectMenuOptionData).toJSON()).toEqual(selectMenuOptionData); + expect(new StringSelectMenuOptionBuilder(selectMenuOptionData).toJSON()).toEqual(selectMenuOptionData); }); }); }); diff --git a/packages/builders/package.json b/packages/builders/package.json index 7639a07f2dbb..e4d7f5c60701 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -56,25 +56,25 @@ "dependencies": { "@discordjs/util": "workspace:^", "@sapphire/shapeshift": "^3.7.0", - "discord-api-types": "^0.37.14", + "discord-api-types": "^0.37.19", "fast-deep-equal": "^3.1.3", - "ts-mixer": "^6.0.1", - "tslib": "^2.4.0" + "ts-mixer": "^6.0.2", + "tslib": "^2.4.1" }, "devDependencies": { - "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.33.4", - "@types/node": "16.11.68", - "@vitest/coverage-c8": "^0.24.3", + "@favware/cliff-jumper": "^1.9.0", + "@microsoft/api-extractor": "^7.33.6", + "@types/node": "16.18.3", + "@vitest/coverage-c8": "^0.25.2", "cross-env": "^7.0.3", "esbuild-plugin-version-injector": "^1.0.0", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "vitest": "^0.24.3" + "tsup": "^6.5.0", + "typescript": "^4.9.3", + "vitest": "^0.25.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/builders/src/components/ActionRow.ts b/packages/builders/src/components/ActionRow.ts index 1f10ddc85e8c..90dda30cae9e 100644 --- a/packages/builders/src/components/ActionRow.ts +++ b/packages/builders/src/components/ActionRow.ts @@ -11,14 +11,24 @@ import { normalizeArray, type RestOrArray } from '../util/normalizeArray.js'; import { ComponentBuilder } from './Component.js'; import { createComponentBuilder } from './Components.js'; import type { ButtonBuilder } from './button/Button.js'; -import type { SelectMenuBuilder } from './selectMenu/SelectMenu.js'; +import type { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js'; +import type { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js'; +import type { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js'; +import type { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js'; +import type { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js'; import type { TextInputBuilder } from './textInput/TextInput.js'; export type MessageComponentBuilder = | ActionRowBuilder | MessageActionRowComponentBuilder; export type ModalComponentBuilder = ActionRowBuilder | ModalActionRowComponentBuilder; -export type MessageActionRowComponentBuilder = ButtonBuilder | SelectMenuBuilder; +export type MessageActionRowComponentBuilder = + | ButtonBuilder + | ChannelSelectMenuBuilder + | MentionableSelectMenuBuilder + | RoleSelectMenuBuilder + | StringSelectMenuBuilder + | UserSelectMenuBuilder; export type ModalActionRowComponentBuilder = TextInputBuilder; export type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComponentBuilder; diff --git a/packages/builders/src/components/Assertions.ts b/packages/builders/src/components/Assertions.ts index faae51dd16b7..960efd706c7c 100644 --- a/packages/builders/src/components/Assertions.ts +++ b/packages/builders/src/components/Assertions.ts @@ -1,7 +1,7 @@ import { s } from '@sapphire/shapeshift'; -import { ButtonStyle, type APIMessageComponentEmoji } from 'discord-api-types/v10'; +import { ButtonStyle, ChannelType, type APIMessageComponentEmoji } from 'discord-api-types/v10'; import { isValidationEnabled } from '../util/validation.js'; -import { SelectMenuOptionBuilder } from './selectMenu/SelectMenuOption.js'; +import { StringSelectMenuOptionBuilder } from './selectMenu/StringSelectMenuOption.js'; export const customIdValidator = s.string .lengthGreaterThanOrEqual(1) @@ -46,7 +46,7 @@ export const jsonOptionValidator = s }) .setValidationEnabled(isValidationEnabled); -export const optionValidator = s.instance(SelectMenuOptionBuilder).setValidationEnabled(isValidationEnabled); +export const optionValidator = s.instance(StringSelectMenuOptionBuilder).setValidationEnabled(isValidationEnabled); export const optionsValidator = optionValidator.array .lengthGreaterThanOrEqual(0) @@ -56,7 +56,7 @@ export const optionsLengthValidator = s.number.int .lessThanOrEqual(25) .setValidationEnabled(isValidationEnabled); -export function validateRequiredSelectMenuParameters(options: SelectMenuOptionBuilder[], customId?: string) { +export function validateRequiredSelectMenuParameters(options: StringSelectMenuOptionBuilder[], customId?: string) { customIdValidator.parse(customId); optionsValidator.parse(options); } @@ -68,6 +68,8 @@ export function validateRequiredSelectMenuOptionParameters(label?: string, value labelValueDescriptionValidator.parse(value); } +export const channelTypesValidator = s.nativeEnum(ChannelType).array.setValidationEnabled(isValidationEnabled); + export const urlValidator = s.string .url({ allowedProtocols: ['http:', 'https:', 'discord:'], diff --git a/packages/builders/src/components/Components.ts b/packages/builders/src/components/Components.ts index ea13e013de12..d3e635ece957 100644 --- a/packages/builders/src/components/Components.ts +++ b/packages/builders/src/components/Components.ts @@ -7,14 +7,22 @@ import { } from './ActionRow.js'; import { ComponentBuilder } from './Component.js'; import { ButtonBuilder } from './button/Button.js'; -import { SelectMenuBuilder } from './selectMenu/SelectMenu.js'; +import { ChannelSelectMenuBuilder } from './selectMenu/ChannelSelectMenu.js'; +import { MentionableSelectMenuBuilder } from './selectMenu/MentionableSelectMenu.js'; +import { RoleSelectMenuBuilder } from './selectMenu/RoleSelectMenu.js'; +import { StringSelectMenuBuilder } from './selectMenu/StringSelectMenu.js'; +import { UserSelectMenuBuilder } from './selectMenu/UserSelectMenu.js'; import { TextInputBuilder } from './textInput/TextInput.js'; export interface MappedComponentTypes { [ComponentType.ActionRow]: ActionRowBuilder; [ComponentType.Button]: ButtonBuilder; - [ComponentType.SelectMenu]: SelectMenuBuilder; + [ComponentType.StringSelect]: StringSelectMenuBuilder; [ComponentType.TextInput]: TextInputBuilder; + [ComponentType.UserSelect]: UserSelectMenuBuilder; + [ComponentType.RoleSelect]: RoleSelectMenuBuilder; + [ComponentType.MentionableSelect]: MentionableSelectMenuBuilder; + [ComponentType.ChannelSelect]: ChannelSelectMenuBuilder; } /** @@ -39,10 +47,18 @@ export function createComponentBuilder( return new ActionRowBuilder(data); case ComponentType.Button: return new ButtonBuilder(data); - case ComponentType.SelectMenu: - return new SelectMenuBuilder(data); + case ComponentType.StringSelect: + return new StringSelectMenuBuilder(data); case ComponentType.TextInput: return new TextInputBuilder(data); + case ComponentType.UserSelect: + return new UserSelectMenuBuilder(data); + case ComponentType.RoleSelect: + return new RoleSelectMenuBuilder(data); + case ComponentType.MentionableSelect: + return new MentionableSelectMenuBuilder(data); + case ComponentType.ChannelSelect: + return new ChannelSelectMenuBuilder(data); default: // @ts-expect-error: This case can still occur if we get a newer unsupported component type throw new Error(`Cannot properly serialize component type: ${data.type}`); diff --git a/packages/builders/src/components/selectMenu/BaseSelectMenu.ts b/packages/builders/src/components/selectMenu/BaseSelectMenu.ts new file mode 100644 index 000000000000..cd1a306ac8f8 --- /dev/null +++ b/packages/builders/src/components/selectMenu/BaseSelectMenu.ts @@ -0,0 +1,64 @@ +import type { APISelectMenuComponent } from 'discord-api-types/v10'; +import { customIdValidator, disabledValidator, minMaxValidator, placeholderValidator } from '../Assertions.js'; +import { ComponentBuilder } from '../Component.js'; + +export class BaseSelectMenuBuilder< + SelectMenuType extends APISelectMenuComponent, +> extends ComponentBuilder { + /** + * Sets the placeholder for this select menu + * + * @param placeholder - The placeholder to use for this select menu + */ + public setPlaceholder(placeholder: string) { + this.data.placeholder = placeholderValidator.parse(placeholder); + return this; + } + + /** + * Sets the minimum values that must be selected in the select menu + * + * @param minValues - The minimum values that must be selected + */ + public setMinValues(minValues: number) { + this.data.min_values = minMaxValidator.parse(minValues); + return this; + } + + /** + * Sets the maximum values that must be selected in the select menu + * + * @param maxValues - The maximum values that must be selected + */ + public setMaxValues(maxValues: number) { + this.data.max_values = minMaxValidator.parse(maxValues); + return this; + } + + /** + * Sets the custom id for this select menu + * + * @param customId - The custom id to use for this select menu + */ + public setCustomId(customId: string) { + this.data.custom_id = customIdValidator.parse(customId); + return this; + } + + /** + * Sets whether this select menu is disabled + * + * @param disabled - Whether this select menu is disabled + */ + public setDisabled(disabled = true) { + this.data.disabled = disabledValidator.parse(disabled); + return this; + } + + public toJSON(): SelectMenuType { + customIdValidator.parse(this.data.custom_id); + return { + ...this.data, + } as SelectMenuType; + } +} diff --git a/packages/builders/src/components/selectMenu/ChannelSelectMenu.ts b/packages/builders/src/components/selectMenu/ChannelSelectMenu.ts new file mode 100644 index 000000000000..a2d46f35e65c --- /dev/null +++ b/packages/builders/src/components/selectMenu/ChannelSelectMenu.ts @@ -0,0 +1,63 @@ +import type { APIChannelSelectComponent, ChannelType } from 'discord-api-types/v10'; +import { ComponentType } from 'discord-api-types/v10'; +import { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js'; +import { channelTypesValidator, customIdValidator } from '../Assertions.js'; +import { BaseSelectMenuBuilder } from './BaseSelectMenu.js'; + +export class ChannelSelectMenuBuilder extends BaseSelectMenuBuilder { + /** + * Creates a new select menu from API data + * + * @param data - The API data to create this select menu with + * @example + * Creating a select menu from an API data object + * ```ts + * const selectMenu = new ChannelSelectMenuBuilder({ + * custom_id: 'a cool select menu', + * placeholder: 'select an option', + * max_values: 2, + * }); + * ``` + * @example + * Creating a select menu using setters and API data + * ```ts + * const selectMenu = new ChannelSelectMenuBuilder({ + * custom_id: 'a cool select menu', + * }) + * .addChannelTypes(ChannelType.GuildText, ChannelType.GuildAnnouncement) + * .setMinValues(2) + * ``` + */ + public constructor(data?: Partial) { + super({ ...data, type: ComponentType.ChannelSelect }); + } + + public addChannelTypes(...types: RestOrArray) { + // eslint-disable-next-line no-param-reassign + types = normalizeArray(types); + + this.data.channel_types ??= []; + this.data.channel_types.push(...channelTypesValidator.parse(types)); + return this; + } + + public setChannelTypes(...types: RestOrArray) { + // eslint-disable-next-line no-param-reassign + types = normalizeArray(types); + + this.data.channel_types ??= []; + this.data.channel_types.splice(0, this.data.channel_types.length, ...channelTypesValidator.parse(types)); + return this; + } + + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + public override toJSON(): APIChannelSelectComponent { + customIdValidator.parse(this.data.custom_id); + + return { + ...this.data, + } as APIChannelSelectComponent; + } +} diff --git a/packages/builders/src/components/selectMenu/MentionableSelectMenu.ts b/packages/builders/src/components/selectMenu/MentionableSelectMenu.ts new file mode 100644 index 000000000000..c996e2b4776d --- /dev/null +++ b/packages/builders/src/components/selectMenu/MentionableSelectMenu.ts @@ -0,0 +1,31 @@ +import type { APIMentionableSelectComponent } from 'discord-api-types/v10'; +import { ComponentType } from 'discord-api-types/v10'; +import { BaseSelectMenuBuilder } from './BaseSelectMenu.js'; + +export class MentionableSelectMenuBuilder extends BaseSelectMenuBuilder { + /** + * Creates a new select menu from API data + * + * @param data - The API data to create this select menu with + * @example + * Creating a select menu from an API data object + * ```ts + * const selectMenu = new MentionableSelectMenuBuilder({ + * custom_id: 'a cool select menu', + * placeholder: 'select an option', + * max_values: 2, + * }); + * ``` + * @example + * Creating a select menu using setters and API data + * ```ts + * const selectMenu = new MentionableSelectMenuBuilder({ + * custom_id: 'a cool select menu', + * }) + * .setMinValues(1) + * ``` + */ + public constructor(data?: Partial) { + super({ ...data, type: ComponentType.MentionableSelect }); + } +} diff --git a/packages/builders/src/components/selectMenu/RoleSelectMenu.ts b/packages/builders/src/components/selectMenu/RoleSelectMenu.ts new file mode 100644 index 000000000000..818ef5b7763f --- /dev/null +++ b/packages/builders/src/components/selectMenu/RoleSelectMenu.ts @@ -0,0 +1,31 @@ +import type { APIRoleSelectComponent } from 'discord-api-types/v10'; +import { ComponentType } from 'discord-api-types/v10'; +import { BaseSelectMenuBuilder } from './BaseSelectMenu.js'; + +export class RoleSelectMenuBuilder extends BaseSelectMenuBuilder { + /** + * Creates a new select menu from API data + * + * @param data - The API data to create this select menu with + * @example + * Creating a select menu from an API data object + * ```ts + * const selectMenu = new RoleSelectMenuBuilder({ + * custom_id: 'a cool select menu', + * placeholder: 'select an option', + * max_values: 2, + * }); + * ``` + * @example + * Creating a select menu using setters and API data + * ```ts + * const selectMenu = new RoleSelectMenuBuilder({ + * custom_id: 'a cool select menu', + * }) + * .setMinValues(1) + * ``` + */ + public constructor(data?: Partial) { + super({ ...data, type: ComponentType.RoleSelect }); + } +} diff --git a/packages/builders/src/components/selectMenu/SelectMenu.ts b/packages/builders/src/components/selectMenu/SelectMenu.ts deleted file mode 100644 index 496138a020ac..000000000000 --- a/packages/builders/src/components/selectMenu/SelectMenu.ts +++ /dev/null @@ -1,163 +0,0 @@ -import { ComponentType, type APISelectMenuComponent, type APISelectMenuOption } from 'discord-api-types/v10'; -import { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js'; -import { - customIdValidator, - disabledValidator, - jsonOptionValidator, - minMaxValidator, - optionsLengthValidator, - placeholderValidator, - validateRequiredSelectMenuParameters, -} from '../Assertions.js'; -import { ComponentBuilder } from '../Component.js'; -import { SelectMenuOptionBuilder } from './SelectMenuOption.js'; - -/** - * Represents a select menu component - */ -export class SelectMenuBuilder extends ComponentBuilder { - /** - * The options within this select menu - */ - public readonly options: SelectMenuOptionBuilder[]; - - /** - * Creates a new select menu from API data - * - * @param data - The API data to create this select menu with - * @example - * Creating a select menu from an API data object - * ```ts - * const selectMenu = new SelectMenuBuilder({ - * custom_id: 'a cool select menu', - * placeholder: 'select an option', - * max_values: 2, - * options: [ - * { label: 'option 1', value: '1' }, - * { label: 'option 2', value: '2' }, - * { label: 'option 3', value: '3' }, - * ], - * }); - * ``` - * @example - * Creating a select menu using setters and API data - * ```ts - * const selectMenu = new SelectMenuBuilder({ - * custom_id: 'a cool select menu', - * }) - * .setMinValues(1) - * .addOptions({ - * label: 'Catchy', - * value: 'catch', - * }); - * ``` - */ - public constructor(data?: Partial) { - const { options, ...initData } = data ?? {}; - super({ type: ComponentType.SelectMenu, ...initData }); - this.options = options?.map((option) => new SelectMenuOptionBuilder(option)) ?? []; - } - - /** - * Sets the placeholder for this select menu - * - * @param placeholder - The placeholder to use for this select menu - */ - public setPlaceholder(placeholder: string) { - this.data.placeholder = placeholderValidator.parse(placeholder); - return this; - } - - /** - * Sets the minimum values that must be selected in the select menu - * - * @param minValues - The minimum values that must be selected - */ - public setMinValues(minValues: number) { - this.data.min_values = minMaxValidator.parse(minValues); - return this; - } - - /** - * Sets the maximum values that must be selected in the select menu - * - * @param maxValues - The maximum values that must be selected - */ - public setMaxValues(maxValues: number) { - this.data.max_values = minMaxValidator.parse(maxValues); - return this; - } - - /** - * Sets the custom id for this select menu - * - * @param customId - The custom id to use for this select menu - */ - public setCustomId(customId: string) { - this.data.custom_id = customIdValidator.parse(customId); - return this; - } - - /** - * Sets whether this select menu is disabled - * - * @param disabled - Whether this select menu is disabled - */ - public setDisabled(disabled = true) { - this.data.disabled = disabledValidator.parse(disabled); - return this; - } - - /** - * Adds options to this select menu - * - * @param options - The options to add to this select menu - * @returns - */ - public addOptions(...options: RestOrArray) { - // eslint-disable-next-line no-param-reassign - options = normalizeArray(options); - optionsLengthValidator.parse(this.options.length + options.length); - this.options.push( - ...options.map((option) => - option instanceof SelectMenuOptionBuilder - ? option - : new SelectMenuOptionBuilder(jsonOptionValidator.parse(option)), - ), - ); - return this; - } - - /** - * Sets the options on this select menu - * - * @param options - The options to set on this select menu - */ - public setOptions(...options: RestOrArray) { - // eslint-disable-next-line no-param-reassign - options = normalizeArray(options); - optionsLengthValidator.parse(options.length); - this.options.splice( - 0, - this.options.length, - ...options.map((option) => - option instanceof SelectMenuOptionBuilder - ? option - : new SelectMenuOptionBuilder(jsonOptionValidator.parse(option)), - ), - ); - return this; - } - - /** - * {@inheritDoc ComponentBuilder.toJSON} - */ - public toJSON(): APISelectMenuComponent { - validateRequiredSelectMenuParameters(this.options, this.data.custom_id); - - return { - ...this.data, - options: this.options.map((option) => option.toJSON()), - } as APISelectMenuComponent; - } -} diff --git a/packages/builders/src/components/selectMenu/StringSelectMenu.ts b/packages/builders/src/components/selectMenu/StringSelectMenu.ts new file mode 100644 index 000000000000..ed5f928c144b --- /dev/null +++ b/packages/builders/src/components/selectMenu/StringSelectMenu.ts @@ -0,0 +1,106 @@ +import type { APIStringSelectComponent } from 'discord-api-types/v10'; +import { ComponentType, type APISelectMenuOption } from 'discord-api-types/v10'; +import { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js'; +import { jsonOptionValidator, optionsLengthValidator, validateRequiredSelectMenuParameters } from '../Assertions.js'; +import { BaseSelectMenuBuilder } from './BaseSelectMenu.js'; +import { StringSelectMenuOptionBuilder } from './StringSelectMenuOption.js'; + +/** + * Represents a string select menu component + */ +export class StringSelectMenuBuilder extends BaseSelectMenuBuilder { + /** + * The options within this select menu + */ + public readonly options: StringSelectMenuOptionBuilder[]; + + /** + * Creates a new select menu from API data + * + * @param data - The API data to create this select menu with + * @example + * Creating a select menu from an API data object + * ```ts + * const selectMenu = new StringSelectMenuBuilder({ + * custom_id: 'a cool select menu', + * placeholder: 'select an option', + * max_values: 2, + * options: [ + * { label: 'option 1', value: '1' }, + * { label: 'option 2', value: '2' }, + * { label: 'option 3', value: '3' }, + * ], + * }); + * ``` + * @example + * Creating a select menu using setters and API data + * ```ts + * const selectMenu = new StringSelectMenuBuilder({ + * custom_id: 'a cool select menu', + * }) + * .setMinValues(1) + * .addOptions({ + * label: 'Catchy', + * value: 'catch', + * }); + * ``` + */ + public constructor(data?: Partial) { + const { options, ...initData } = data ?? {}; + super({ ...initData, type: ComponentType.StringSelect }); + this.options = options?.map((option: APISelectMenuOption) => new StringSelectMenuOptionBuilder(option)) ?? []; + } + + /** + * Adds options to this select menu + * + * @param options - The options to add to this select menu + * @returns + */ + public addOptions(...options: RestOrArray) { + // eslint-disable-next-line no-param-reassign + options = normalizeArray(options); + optionsLengthValidator.parse(this.options.length + options.length); + this.options.push( + ...options.map((option) => + option instanceof StringSelectMenuOptionBuilder + ? option + : new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(option)), + ), + ); + return this; + } + + /** + * Sets the options on this select menu + * + * @param options - The options to set on this select menu + */ + public setOptions(...options: RestOrArray) { + // eslint-disable-next-line no-param-reassign + options = normalizeArray(options); + optionsLengthValidator.parse(options.length); + this.options.splice( + 0, + this.options.length, + ...options.map((option) => + option instanceof StringSelectMenuOptionBuilder + ? option + : new StringSelectMenuOptionBuilder(jsonOptionValidator.parse(option)), + ), + ); + return this; + } + + /** + * {@inheritDoc ComponentBuilder.toJSON} + */ + public override toJSON(): APIStringSelectComponent { + validateRequiredSelectMenuParameters(this.options, this.data.custom_id); + + return { + ...this.data, + options: this.options.map((option) => option.toJSON()), + } as APIStringSelectComponent; + } +} diff --git a/packages/builders/src/components/selectMenu/SelectMenuOption.ts b/packages/builders/src/components/selectMenu/StringSelectMenuOption.ts similarity index 83% rename from packages/builders/src/components/selectMenu/SelectMenuOption.ts rename to packages/builders/src/components/selectMenu/StringSelectMenuOption.ts index 6654e7dba0dc..c43145463947 100644 --- a/packages/builders/src/components/selectMenu/SelectMenuOption.ts +++ b/packages/builders/src/components/selectMenu/StringSelectMenuOption.ts @@ -8,15 +8,15 @@ import { } from '../Assertions.js'; /** - * Represents a option within a select menu component + * Represents an option within a string select menu component */ -export class SelectMenuOptionBuilder implements JSONEncodable { +export class StringSelectMenuOptionBuilder implements JSONEncodable { /** - * Creates a new select menu option from API data + * Creates a new string select menu option from API data * - * @param data - The API data to create this select menu option with + * @param data - The API data to create this string select menu option with * @example - * Creating a select menu option from an API data object + * Creating a string select menu option from an API data object * ```ts * const selectMenuOption = new SelectMenuOptionBuilder({ * label: 'catchy label', @@ -24,7 +24,7 @@ export class SelectMenuOptionBuilder implements JSONEncodable { + /** + * Creates a new select menu from API data + * + * @param data - The API data to create this select menu with + * @example + * Creating a select menu from an API data object + * ```ts + * const selectMenu = new UserSelectMenuBuilder({ + * custom_id: 'a cool select menu', + * placeholder: 'select an option', + * max_values: 2, + * }); + * ``` + * @example + * Creating a select menu using setters and API data + * ```ts + * const selectMenu = new UserSelectMenuBuilder({ + * custom_id: 'a cool select menu', + * }) + * .setMinValues(1) + * ``` + */ + public constructor(data?: Partial) { + super({ ...data, type: ComponentType.UserSelect }); + } +} diff --git a/packages/builders/src/index.ts b/packages/builders/src/index.ts index 0db122bc6062..9f644d5b064c 100644 --- a/packages/builders/src/index.ts +++ b/packages/builders/src/index.ts @@ -11,8 +11,27 @@ export * from './components/textInput/TextInput.js'; export * as TextInputAssertions from './components/textInput/Assertions.js'; export * from './interactions/modals/Modal.js'; export * as ModalAssertions from './interactions/modals/Assertions.js'; -export * from './components/selectMenu/SelectMenu.js'; -export * from './components/selectMenu/SelectMenuOption.js'; + +export * from './components/selectMenu/BaseSelectMenu.js'; +export * from './components/selectMenu/ChannelSelectMenu.js'; +export * from './components/selectMenu/MentionableSelectMenu.js'; +export * from './components/selectMenu/RoleSelectMenu.js'; +export * from './components/selectMenu/StringSelectMenu.js'; +// TODO: Remove those aliases in v2 +export { + /** + * @deprecated Will be removed in the next major version, use {@link StringSelectMenuBuilder} instead. + */ + StringSelectMenuBuilder as SelectMenuBuilder, +} from './components/selectMenu/StringSelectMenu.js'; +export { + /** + * @deprecated Will be removed in the next major version, use {@link StringSelectMenuOptionBuilder} instead. + */ + StringSelectMenuOptionBuilder as SelectMenuOptionBuilder, +} from './components/selectMenu/StringSelectMenuOption.js'; +export * from './components/selectMenu/StringSelectMenuOption.js'; +export * from './components/selectMenu/UserSelectMenu.js'; export * as SlashCommandAssertions from './interactions/slashCommands/Assertions.js'; export * from './interactions/slashCommands/SlashCommandBuilder.js'; diff --git a/packages/builders/src/interactions/contextMenuCommands/Assertions.ts b/packages/builders/src/interactions/contextMenuCommands/Assertions.ts index 8a7b64b8609d..593da48212b9 100644 --- a/packages/builders/src/interactions/contextMenuCommands/Assertions.ts +++ b/packages/builders/src/interactions/contextMenuCommands/Assertions.ts @@ -7,7 +7,7 @@ const namePredicate = s.string .lengthGreaterThanOrEqual(1) .lengthLessThanOrEqual(32) // eslint-disable-next-line prefer-named-capture-group, unicorn/no-unsafe-regex - .regex(/^( *[\p{L}\p{N}\p{sc=Devanagari}\p{sc=Thai}_-]+ *)+$/u) + .regex(/^( *[\p{P}\p{L}\p{N}\p{sc=Devanagari}\p{sc=Thai}]+ *)+$/u) .setValidationEnabled(isValidationEnabled); const typePredicate = s .union(s.literal(ApplicationCommandType.User), s.literal(ApplicationCommandType.Message)) diff --git a/packages/collection/__tests__/collection.test.ts b/packages/collection/__tests__/collection.test.ts index b2d01213f096..73d3adaf1530 100644 --- a/packages/collection/__tests__/collection.test.ts +++ b/packages/collection/__tests__/collection.test.ts @@ -3,17 +3,17 @@ import { describe, test, expect } from 'vitest'; import { Collection } from '../src/index.js'; -type TestCollection = Collection; +type TestCollection = Collection; -function createCollection(): TestCollection { +function createCollection(): TestCollection { return new Collection(); } -function createCollectionFrom(...entries: [key: string, value: number][]): TestCollection { +function createCollectionFrom(...entries: [key: string, value: V][]): TestCollection { return new Collection(entries); } -function createTestCollection(): TestCollection { +function createTestCollection(): TestCollection { return createCollectionFrom(['a', 1], ['b', 2], ['c', 3]); } @@ -770,6 +770,19 @@ describe('sort() tests', () => { }); }); +describe('subtract() tests', () => { + const coll1 = createCollectionFrom(['a', 1], ['b', 2], ['c', 3], ['d', undefined]); + const coll2 = createCollectionFrom(['b', 2], ['c', 0]); + + test('it returns a new collection', () => { + const c = coll1.subtract(coll2); + expect(c).toBeInstanceOf(Collection); + expect(c.size).toStrictEqual(3); + + expect(c).toStrictEqual(createCollectionFrom(['a', 1], ['c', 3], ['d', undefined])); + }); +}); + describe('sweep() test', () => { const coll = createTestCollection(); diff --git a/packages/collection/package.json b/packages/collection/package.json index 68cb5ba4e5d3..4a86c2a0acf0 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -50,19 +50,19 @@ }, "homepage": "https://discord.js.org", "devDependencies": { - "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.33.4", - "@types/node": "16.11.68", - "@vitest/coverage-c8": "^0.24.3", + "@favware/cliff-jumper": "^1.9.0", + "@microsoft/api-extractor": "^7.33.6", + "@types/node": "16.18.3", + "@vitest/coverage-c8": "^0.25.2", "cross-env": "^7.0.3", "esbuild-plugin-version-injector": "^1.0.0", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "vitest": "^0.24.3" + "tsup": "^6.5.0", + "typescript": "^4.9.3", + "vitest": "^0.25.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/collection/src/collection.ts b/packages/collection/src/collection.ts index c8a14cdea52f..425fcd0fab2c 100644 --- a/packages/collection/src/collection.ts +++ b/packages/collection/src/collection.ts @@ -684,6 +684,22 @@ export class Collection extends Map { return coll; } + /** + * The subtract method returns a new structure containing items where the keys and values of the original structure are not present in the other. + * + * @param other - The other Collection to filter against + */ + public subtract(other: ReadonlyCollection): Collection { + const coll = new this.constructor[Symbol.species](); + for (const [k, v] of this) { + if (!other.has(k) || !Object.is(v, other.get(k))) { + coll.set(k, v); + } + } + + return coll; + } + /** * The difference method returns a new structure containing items where the key is present in one of the original structures but not the other. * diff --git a/packages/discord.js/package.json b/packages/discord.js/package.json index 3e9e7dc32876..38e6d73a3920 100644 --- a/packages/discord.js/package.json +++ b/packages/discord.js/package.json @@ -55,25 +55,25 @@ "@discordjs/util": "workspace:^", "@sapphire/snowflake": "^3.2.2", "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.14", + "discord-api-types": "^0.37.19", "fast-deep-equal": "^3.1.3", "lodash.snakecase": "^4.1.1", - "tslib": "^2.4.0", - "undici": "^5.11.0", - "ws": "^8.9.0" + "tslib": "^2.4.1", + "undici": "^5.12.0", + "ws": "^8.11.0" }, "devDependencies": { "@discordjs/docgen": "workspace:^", - "@favware/cliff-jumper": "^1.8.8", - "@types/node": "16.11.68", + "@favware/cliff-jumper": "^1.9.0", + "@types/node": "16.18.3", "dtslint": "^4.2.1", - "eslint": "^8.25.0", + "eslint": "^8.28.0", "eslint-formatter-pretty": "^4.1.0", - "jest": "^29.2.1", + "jest": "^29.3.1", "prettier": "^2.7.1", "tsd": "^0.24.1", "tslint": "^6.1.3", - "typescript": "^4.8.4" + "typescript": "^4.9.3" }, "engines": { "node": ">=16.9.0" diff --git a/packages/discord.js/src/client/Client.js b/packages/discord.js/src/client/Client.js index 0cf4c2543fd6..f9a91f6dd46e 100644 --- a/packages/discord.js/src/client/Client.js +++ b/packages/discord.js/src/client/Client.js @@ -214,13 +214,7 @@ class Client extends BaseClient { if (!token || typeof token !== 'string') throw new DiscordjsError(ErrorCodes.TokenInvalid); this.token = token = token.replace(/^(Bot|Bearer)\s*/i, ''); this.rest.setToken(token); - this.emit( - Events.Debug, - `Provided token: ${token - .split('.') - .map((val, i) => (i > 1 ? val.replace(/./g, '*') : val)) - .join('.')}`, - ); + this.emit(Events.Debug, `Provided token: ${this._censoredToken}`); if (this.options.presence) { this.options.ws.presence = this.presence._parse(this.options.presence); @@ -459,6 +453,21 @@ class Client extends BaseClient { }); } + /** + * Partially censored client token for debug logging purposes. + * @type {?string} + * @readonly + * @private + */ + get _censoredToken() { + if (!this.token) return null; + + return this.token + .split('.') + .map((val, i) => (i > 1 ? val.replace(/./g, '*') : val)) + .join('.'); + } + /** * Calls {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval} on a script * with the client as `this`. diff --git a/packages/discord.js/src/client/actions/ActionsManager.js b/packages/discord.js/src/client/actions/ActionsManager.js index 0ab0be1a0f58..bcb9f2744ed2 100644 --- a/packages/discord.js/src/client/actions/ActionsManager.js +++ b/packages/discord.js/src/client/actions/ActionsManager.js @@ -5,6 +5,10 @@ class ActionsManager { this.client = client; this.register(require('./ApplicationCommandPermissionsUpdate')); + this.register(require('./AutoModerationActionExecution')); + this.register(require('./AutoModerationRuleCreate')); + this.register(require('./AutoModerationRuleDelete')); + this.register(require('./AutoModerationRuleUpdate')); this.register(require('./ChannelCreate')); this.register(require('./ChannelDelete')); this.register(require('./ChannelUpdate')); diff --git a/packages/discord.js/src/client/actions/AutoModerationActionExecution.js b/packages/discord.js/src/client/actions/AutoModerationActionExecution.js new file mode 100644 index 000000000000..ad601167c41f --- /dev/null +++ b/packages/discord.js/src/client/actions/AutoModerationActionExecution.js @@ -0,0 +1,26 @@ +'use strict'; + +const Action = require('./Action'); +const AutoModerationActionExecution = require('../../structures/AutoModerationActionExecution'); +const Events = require('../../util/Events'); + +class AutoModerationActionExecutionAction extends Action { + handle(data) { + const { client } = this; + const guild = client.guilds.cache.get(data.guild_id); + + if (guild) { + /** + * Emitted whenever an auto moderation rule is triggered. + * This event requires the {@link PermissionFlagsBits.ManageGuild} permission. + * @event Client#autoModerationActionExecution + * @param {AutoModerationActionExecution} autoModerationActionExecution The data of the execution + */ + client.emit(Events.AutoModerationActionExecution, new AutoModerationActionExecution(data, guild)); + } + + return {}; + } +} + +module.exports = AutoModerationActionExecutionAction; diff --git a/packages/discord.js/src/client/actions/AutoModerationRuleCreate.js b/packages/discord.js/src/client/actions/AutoModerationRuleCreate.js new file mode 100644 index 000000000000..775b1d370cf5 --- /dev/null +++ b/packages/discord.js/src/client/actions/AutoModerationRuleCreate.js @@ -0,0 +1,27 @@ +'use strict'; + +const Action = require('./Action'); +const Events = require('../../util/Events'); + +class AutoModerationRuleCreateAction extends Action { + handle(data) { + const { client } = this; + const guild = client.guilds.cache.get(data.guild_id); + + if (guild) { + const autoModerationRule = guild.autoModerationRules._add(data); + + /** + * Emitted whenever an auto moderation rule is created. + * This event requires the {@link PermissionFlagsBits.ManageGuild} permission. + * @event Client#autoModerationRuleCreate + * @param {AutoModerationRule} autoModerationRule The created auto moderation rule + */ + client.emit(Events.AutoModerationRuleCreate, autoModerationRule); + } + + return {}; + } +} + +module.exports = AutoModerationRuleCreateAction; diff --git a/packages/discord.js/src/client/actions/AutoModerationRuleDelete.js b/packages/discord.js/src/client/actions/AutoModerationRuleDelete.js new file mode 100644 index 000000000000..641822c24b2a --- /dev/null +++ b/packages/discord.js/src/client/actions/AutoModerationRuleDelete.js @@ -0,0 +1,31 @@ +'use strict'; + +const Action = require('./Action'); +const Events = require('../../util/Events'); + +class AutoModerationRuleDeleteAction extends Action { + handle(data) { + const { client } = this; + const guild = client.guilds.cache.get(data.guild_id); + + if (guild) { + const autoModerationRule = guild.autoModerationRules.cache.get(data.id); + + if (autoModerationRule) { + guild.autoModerationRules.cache.delete(autoModerationRule.id); + + /** + * Emitted whenever an auto moderation rule is deleted. + * This event requires the {@link PermissionFlagsBits.ManageGuild} permission. + * @event Client#autoModerationRuleDelete + * @param {AutoModerationRule} autoModerationRule The deleted auto moderation rule + */ + client.emit(Events.AutoModerationRuleDelete, autoModerationRule); + } + } + + return {}; + } +} + +module.exports = AutoModerationRuleDeleteAction; diff --git a/packages/discord.js/src/client/actions/AutoModerationRuleUpdate.js b/packages/discord.js/src/client/actions/AutoModerationRuleUpdate.js new file mode 100644 index 000000000000..56e39568c5c7 --- /dev/null +++ b/packages/discord.js/src/client/actions/AutoModerationRuleUpdate.js @@ -0,0 +1,29 @@ +'use strict'; + +const Action = require('./Action'); +const Events = require('../../util/Events'); + +class AutoModerationRuleUpdateAction extends Action { + handle(data) { + const { client } = this; + const guild = client.guilds.cache.get(data.guild_id); + + if (guild) { + const oldAutoModerationRule = guild.autoModerationRules.cache.get(data.id)?._clone() ?? null; + const newAutoModerationRule = guild.autoModerationRules._add(data); + + /** + * Emitted whenever an auto moderation rule gets updated. + * This event requires the {@link PermissionFlagsBits.ManageGuild} permission. + * @event Client#autoModerationRuleUpdate + * @param {?AutoModerationRule} oldAutoModerationRule The auto moderation rule before the update + * @param {AutoModerationRule} newAutoModerationRule The auto moderation rule after the update + */ + client.emit(Events.AutoModerationRuleUpdate, oldAutoModerationRule, newAutoModerationRule); + } + + return {}; + } +} + +module.exports = AutoModerationRuleUpdateAction; diff --git a/packages/discord.js/src/client/actions/InteractionCreate.js b/packages/discord.js/src/client/actions/InteractionCreate.js index 9d2b12dceb8f..c079121c7f6f 100644 --- a/packages/discord.js/src/client/actions/InteractionCreate.js +++ b/packages/discord.js/src/client/actions/InteractionCreate.js @@ -4,11 +4,15 @@ const { InteractionType, ComponentType, ApplicationCommandType } = require('disc const Action = require('./Action'); const AutocompleteInteraction = require('../../structures/AutocompleteInteraction'); const ButtonInteraction = require('../../structures/ButtonInteraction'); +const ChannelSelectMenuInteraction = require('../../structures/ChannelSelectMenuInteraction'); const ChatInputCommandInteraction = require('../../structures/ChatInputCommandInteraction'); +const MentionableSelectMenuInteraction = require('../../structures/MentionableSelectMenuInteraction'); const MessageContextMenuCommandInteraction = require('../../structures/MessageContextMenuCommandInteraction'); const ModalSubmitInteraction = require('../../structures/ModalSubmitInteraction'); -const SelectMenuInteraction = require('../../structures/SelectMenuInteraction'); +const RoleSelectMenuInteraction = require('../../structures/RoleSelectMenuInteraction'); +const StringSelectMenuInteraction = require('../../structures/StringSelectMenuInteraction'); const UserContextMenuCommandInteraction = require('../../structures/UserContextMenuCommandInteraction'); +const UserSelectMenuInteraction = require('../../structures/UserSelectMenuInteraction'); const Events = require('../../util/Events'); class InteractionCreateAction extends Action { @@ -49,8 +53,20 @@ class InteractionCreateAction extends Action { case ComponentType.Button: InteractionClass = ButtonInteraction; break; - case ComponentType.SelectMenu: - InteractionClass = SelectMenuInteraction; + case ComponentType.StringSelect: + InteractionClass = StringSelectMenuInteraction; + break; + case ComponentType.UserSelect: + InteractionClass = UserSelectMenuInteraction; + break; + case ComponentType.RoleSelect: + InteractionClass = RoleSelectMenuInteraction; + break; + case ComponentType.MentionableSelect: + InteractionClass = MentionableSelectMenuInteraction; + break; + case ComponentType.ChannelSelect: + InteractionClass = ChannelSelectMenuInteraction; break; default: client.emit( diff --git a/packages/discord.js/src/client/websocket/WebSocketShard.js b/packages/discord.js/src/client/websocket/WebSocketShard.js index 5683938f939d..1f7a9da86127 100644 --- a/packages/discord.js/src/client/websocket/WebSocketShard.js +++ b/packages/discord.js/src/client/websocket/WebSocketShard.js @@ -64,6 +64,13 @@ class WebSocketShard extends EventEmitter { */ this.sessionId = null; + /** + * The resume url for this shard + * @type {?string} + * @private + */ + this.resumeURL = null; + /** * The previous heartbeat ping of the shard * @type {number} @@ -73,7 +80,6 @@ class WebSocketShard extends EventEmitter { /** * The last time a ping was sent (a timestamp) * @type {number} - * @private */ this.lastPingTimestamp = -1; @@ -193,12 +199,14 @@ class WebSocketShard extends EventEmitter { * or reject if we couldn't connect */ connect() { - const { gateway, client } = this.manager; + const { client } = this.manager; if (this.connection?.readyState === WebSocket.OPEN && this.status === Status.Ready) { return Promise.resolve(); } + const gateway = this.resumeURL ?? this.manager.gateway; + return new Promise((resolve, reject) => { const cleanup = () => { this.removeListener(WebSocketShardEvents.Close, onClose); @@ -416,9 +424,10 @@ class WebSocketShard extends EventEmitter { this.emit(WebSocketShardEvents.Ready); this.sessionId = packet.d.session_id; + this.resumeURL = packet.d.resume_gateway_url; this.expectedGuilds = new Set(packet.d.guilds.map(d => d.id)); this.status = Status.WaitingForGuilds; - this.debug(`[READY] Session ${this.sessionId}.`); + this.debug(`[READY] Session ${this.sessionId} | Resume url ${this.resumeURL}.`); this.lastHeartbeatAcked = true; this.sendHeartbeat('ReadyHeartbeat'); break; @@ -740,7 +749,12 @@ class WebSocketShard extends EventEmitter { */ _send(data) { if (this.connection?.readyState !== WebSocket.OPEN) { - this.debug(`Tried to send packet '${JSON.stringify(data)}' but no WebSocket is available!`); + this.debug( + `Tried to send packet '${JSON.stringify(data).replaceAll( + this.manager.client.token, + this.manager.client._censoredToken, + )}' but no WebSocket is available!`, + ); this.destroy({ closeCode: 4_000 }); return; } @@ -842,10 +856,11 @@ class WebSocketShard extends EventEmitter { // Step 4: Cache the old sequence (use to attempt a resume) if (this.sequence !== -1) this.closeSequence = this.sequence; - // Step 5: Reset the sequence and session id if requested + // Step 5: Reset the sequence, resume url and session id if requested if (reset) { this.sequence = -1; this.sessionId = null; + this.resumeURL = null; } // Step 6: reset the rate limit data diff --git a/packages/discord.js/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js b/packages/discord.js/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js new file mode 100644 index 000000000000..22463b6e1eee --- /dev/null +++ b/packages/discord.js/src/client/websocket/handlers/AUTO_MODERATION_ACTION_EXECUTION.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = (client, packet) => { + client.actions.AutoModerationActionExecution.handle(packet.d); +}; diff --git a/packages/discord.js/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js b/packages/discord.js/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js new file mode 100644 index 000000000000..af64b9cbcc98 --- /dev/null +++ b/packages/discord.js/src/client/websocket/handlers/AUTO_MODERATION_RULE_CREATE.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = (client, packet) => { + client.actions.AutoModerationRuleCreate.handle(packet.d); +}; diff --git a/packages/discord.js/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js b/packages/discord.js/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js new file mode 100644 index 000000000000..56ec504a9460 --- /dev/null +++ b/packages/discord.js/src/client/websocket/handlers/AUTO_MODERATION_RULE_DELETE.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = (client, packet) => { + client.actions.AutoModerationRuleDelete.handle(packet.d); +}; diff --git a/packages/discord.js/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js b/packages/discord.js/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js new file mode 100644 index 000000000000..3caf6ba55028 --- /dev/null +++ b/packages/discord.js/src/client/websocket/handlers/AUTO_MODERATION_RULE_UPDATE.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = (client, packet) => { + client.actions.AutoModerationRuleUpdate.handle(packet.d); +}; diff --git a/packages/discord.js/src/client/websocket/handlers/index.js b/packages/discord.js/src/client/websocket/handlers/index.js index c6b6bf53b4d6..ee90befafe7d 100644 --- a/packages/discord.js/src/client/websocket/handlers/index.js +++ b/packages/discord.js/src/client/websocket/handlers/index.js @@ -2,6 +2,10 @@ const handlers = Object.fromEntries([ ['APPLICATION_COMMAND_PERMISSIONS_UPDATE', require('./APPLICATION_COMMAND_PERMISSIONS_UPDATE')], + ['AUTO_MODERATION_ACTION_EXECUTION', require('./AUTO_MODERATION_ACTION_EXECUTION')], + ['AUTO_MODERATION_RULE_CREATE', require('./AUTO_MODERATION_RULE_CREATE')], + ['AUTO_MODERATION_RULE_DELETE', require('./AUTO_MODERATION_RULE_DELETE')], + ['AUTO_MODERATION_RULE_UPDATE', require('./AUTO_MODERATION_RULE_UPDATE')], ['CHANNEL_CREATE', require('./CHANNEL_CREATE')], ['CHANNEL_DELETE', require('./CHANNEL_DELETE')], ['CHANNEL_PINS_UPDATE', require('./CHANNEL_PINS_UPDATE')], diff --git a/packages/discord.js/src/errors/ErrorCodes.js b/packages/discord.js/src/errors/ErrorCodes.js index f0566a0433a8..b5faf0c1cefa 100644 --- a/packages/discord.js/src/errors/ErrorCodes.js +++ b/packages/discord.js/src/errors/ErrorCodes.js @@ -128,6 +128,7 @@ * @property {'InteractionAlreadyReplied'} InteractionAlreadyReplied * @property {'InteractionNotReplied'} InteractionNotReplied * @property {'InteractionEphemeralReplied'} InteractionEphemeralReplied + * This property is deprecated. * @property {'CommandInteractionOptionNotFound'} CommandInteractionOptionNotFound * @property {'CommandInteractionOptionType'} CommandInteractionOptionType diff --git a/packages/discord.js/src/index.js b/packages/discord.js/src/index.js index 1be0d3f7c0eb..35f885ed2f98 100644 --- a/packages/discord.js/src/index.js +++ b/packages/discord.js/src/index.js @@ -48,6 +48,7 @@ exports.version = require('../package.json').version; // Managers exports.ApplicationCommandManager = require('./managers/ApplicationCommandManager'); exports.ApplicationCommandPermissionsManager = require('./managers/ApplicationCommandPermissionsManager'); +exports.AutoModerationRuleManager = require('./managers/AutoModerationRuleManager'); exports.BaseGuildEmojiManager = require('./managers/BaseGuildEmojiManager'); exports.CachedManager = require('./managers/CachedManager'); exports.ChannelManager = require('./managers/ChannelManager'); @@ -88,6 +89,8 @@ exports.AnonymousGuild = require('./structures/AnonymousGuild'); exports.Application = require('./structures/interfaces/Application'); exports.ApplicationCommand = require('./structures/ApplicationCommand'); exports.AutocompleteInteraction = require('./structures/AutocompleteInteraction'); +exports.AutoModerationActionExecution = require('./structures/AutoModerationActionExecution'); +exports.AutoModerationRule = require('./structures/AutoModerationRule'); exports.Base = require('./structures/Base'); exports.BaseGuild = require('./structures/BaseGuild'); exports.BaseGuildEmoji = require('./structures/BaseGuildEmoji'); @@ -154,9 +157,27 @@ exports.ReactionEmoji = require('./structures/ReactionEmoji'); exports.RichPresenceAssets = require('./structures/Presence').RichPresenceAssets; exports.Role = require('./structures/Role').Role; exports.SelectMenuBuilder = require('./structures/SelectMenuBuilder'); +exports.ChannelSelectMenuBuilder = require('./structures/ChannelSelectMenuBuilder'); +exports.MentionableSelectMenuBuilder = require('./structures/MentionableSelectMenuBuilder'); +exports.RoleSelectMenuBuilder = require('./structures/RoleSelectMenuBuilder'); +exports.StringSelectMenuBuilder = require('./structures/StringSelectMenuBuilder'); +exports.UserSelectMenuBuilder = require('./structures/UserSelectMenuBuilder'); +exports.BaseSelectMenuComponent = require('./structures/BaseSelectMenuComponent'); exports.SelectMenuComponent = require('./structures/SelectMenuComponent'); +exports.ChannelSelectMenuComponent = require('./structures/ChannelSelectMenuComponent'); +exports.MentionableSelectMenuComponent = require('./structures/MentionableSelectMenuComponent'); +exports.RoleSelectMenuComponent = require('./structures/RoleSelectMenuComponent'); +exports.StringSelectMenuComponent = require('./structures/StringSelectMenuComponent'); +exports.UserSelectMenuComponent = require('./structures/UserSelectMenuComponent'); exports.SelectMenuInteraction = require('./structures/SelectMenuInteraction'); +exports.ChannelSelectMenuInteraction = require('./structures/ChannelSelectMenuInteraction'); +exports.MentionableSelectMenuInteraction = require('./structures/MentionableSelectMenuInteraction'); +exports.MentionableSelectMenuInteraction = require('./structures/MentionableSelectMenuInteraction'); +exports.RoleSelectMenuInteraction = require('./structures/RoleSelectMenuInteraction'); +exports.StringSelectMenuInteraction = require('./structures/StringSelectMenuInteraction'); +exports.UserSelectMenuInteraction = require('./structures/UserSelectMenuInteraction'); exports.SelectMenuOptionBuilder = require('./structures/SelectMenuOptionBuilder'); +exports.StringSelectMenuOptionBuilder = require('./structures/StringSelectMenuOptionBuilder'); exports.StageChannel = require('./structures/StageChannel'); exports.StageInstance = require('./structures/StageInstance').StageInstance; exports.Sticker = require('./structures/Sticker').Sticker; diff --git a/packages/discord.js/src/managers/AutoModerationRuleManager.js b/packages/discord.js/src/managers/AutoModerationRuleManager.js new file mode 100644 index 000000000000..22a88122c934 --- /dev/null +++ b/packages/discord.js/src/managers/AutoModerationRuleManager.js @@ -0,0 +1,276 @@ +'use strict'; + +const { Collection } = require('@discordjs/collection'); +const { Routes } = require('discord-api-types/v10'); +const CachedManager = require('./CachedManager'); +const AutoModerationRule = require('../structures/AutoModerationRule'); + +/** + * Manages API methods for auto moderation rules and stores their cache. + * @extends {CachedManager} + */ +class AutoModerationRuleManager extends CachedManager { + constructor(guild, iterable) { + super(guild.client, AutoModerationRule, iterable); + + /** + * The guild this manager belongs to. + * @type {Guild} + */ + this.guild = guild; + } + + _add(data, cache) { + return super._add(data, cache, { extras: [this.guild] }); + } + + /** + * Options used to set the trigger metadata of an auto moderation rule. + * @typedef {Object} AutoModerationTriggerMetadataOptions + * @property {string[]} [keywordFilter] The substrings that will be searched for in the content + * @property {string[]} [regexPatterns] The regular expression patterns which will be matched against the content + * Only Rust-flavored regular expressions are supported. + * @property {AutoModerationRuleKeywordPresetType[]} [presets] + * The internally pre-defined wordsets which will be searched for in the content + * @property {string[]} [allowList] The substrings that will be exempt from triggering + * {@link AutoModerationRuleTriggerType.Keyword} and {@link AutoModerationRuleTriggerType.KeywordPreset} + * @property {?number} [mentionTotalLimit] The total number of role & user mentions allowed per message + */ + + /** + * Options used to set the actions of an auto moderation rule. + * @typedef {Object} AutoModerationActionOptions + * @property {AutoModerationActionType} type The type of this auto moderation rule action + * @property {AutoModerationActionMetadataOptions} [metadata] Additional metadata needed during execution + * This property is required if using a `type` of + * {@link AutoModerationActionType.SendAlertMessage} or {@link AutoModerationActionType.Timeout}. + */ + + /** + * Options used to set the metadata of an auto moderation rule action. + * @typedef {Object} AutoModerationActionMetadataOptions + * @property {GuildTextChannelResolvable|ThreadChannel} [channel] The channel to which content will be logged + * @property {number} [durationSeconds] The timeout duration in seconds + */ + + /** + * Options used to create an auto moderation rule. + * @typedef {Object} AutoModerationRuleCreateOptions + * @property {string} name The name of the auto moderation rule + * @property {AutoModerationRuleEventType} eventType The event type of the auto moderation rule + * @property {AutoModerationRuleTriggerType} triggerType The trigger type of the auto moderation rule + * @property {AutoModerationTriggerMetadataOptions} [triggerMetadata] The trigger metadata of the auto moderation rule + * This property is required if using a `triggerType` of + * {@link AutoModerationRuleTriggerType.Keyword}, {@link AutoModerationRuleTriggerType.KeywordPreset}, + * or {@link AutoModerationRuleTriggerType.MentionSpam}. + * @property {AutoModerationActionOptions[]} actions + * The actions that will execute when the auto moderation rule is triggered + * @property {boolean} [enabled] Whether the auto moderation rule should be enabled + * @property {Collection|RoleResolvable[]} [exemptRoles] + * The roles that should not be affected by the auto moderation rule + * @property {Collection|GuildChannelResolvable[]} [exemptChannels] + * The channels that should not be affected by the auto moderation rule + * @property {string} [reason] The reason for creating the auto moderation rule + */ + + /** + * Creates a new auto moderation rule. + * @param {AutoModerationRuleCreateOptions} options Options for creating the auto moderation rule + * @returns {Promise} + */ + async create({ + name, + eventType, + triggerType, + triggerMetadata, + actions, + enabled, + exemptRoles, + exemptChannels, + reason, + }) { + const data = await this.client.rest.post(Routes.guildAutoModerationRules(this.guild.id), { + body: { + name, + event_type: eventType, + trigger_type: triggerType, + trigger_metadata: triggerMetadata && { + keyword_filter: triggerMetadata.keywordFilter, + regex_patterns: triggerMetadata.regexPatterns, + presets: triggerMetadata.presets, + allow_list: triggerMetadata.allowList, + mention_total_limit: triggerMetadata.mentionTotalLimit, + }, + actions: actions.map(action => ({ + type: action.type, + metadata: { + duration_seconds: action.metadata?.durationSeconds, + channel_id: action.metadata?.channel && this.guild.channels.resolveId(action.metadata.channel), + }, + })), + enabled, + exempt_roles: exemptRoles?.map(exemptRole => this.guild.roles.resolveId(exemptRole)), + exempt_channels: exemptChannels?.map(exemptChannel => this.guild.channels.resolveId(exemptChannel)), + }, + reason, + }); + + return this._add(data); + } + + /** + * Options used to edit an auto moderation rule. + * @typedef {Object} AutoModerationRuleEditOptions + * @property {string} [name] The name of the auto moderation rule + * @property {AutoModerationRuleEventType} [eventType] The event type of the auto moderation rule + * @property {AutoModerationTriggerMetadataOptions} [triggerMetadata] The trigger metadata of the auto moderation rule + * @property {AutoModerationActionOptions[]} [actions] + * The actions that will execute when the auto moderation rule is triggered + * @property {boolean} [enabled] Whether the auto moderation rule should be enabled + * @property {Collection|RoleResolvable[]} [exemptRoles] + * The roles that should not be affected by the auto moderation rule + * @property {Collection|GuildChannelResolvable[]} [exemptChannels] + * The channels that should not be affected by the auto moderation rule + * @property {string} [reason] The reason for creating the auto moderation rule + */ + + /** + * Edits an auto moderation rule. + * @param {AutoModerationRuleResolvable} autoModerationRule The auto moderation rule to edit + * @param {AutoModerationRuleEditOptions} options Options for editing the auto moderation rule + * @returns {Promise} + */ + async edit( + autoModerationRule, + { name, eventType, triggerMetadata, actions, enabled, exemptRoles, exemptChannels, reason }, + ) { + const autoModerationRuleId = this.resolveId(autoModerationRule); + + const data = await this.client.rest.patch(Routes.guildAutoModerationRule(this.guild.id, autoModerationRuleId), { + body: { + name, + event_type: eventType, + trigger_metadata: triggerMetadata && { + keyword_filter: triggerMetadata.keywordFilter, + regex_patterns: triggerMetadata.regexPatterns, + presets: triggerMetadata.presets, + allow_list: triggerMetadata.allowList, + mention_total_limit: triggerMetadata.mentionTotalLimit, + }, + actions: actions?.map(action => ({ + type: action.type, + metadata: { + duration_seconds: action.metadata?.durationSeconds, + channel_id: action.metadata?.channel && this.guild.channels.resolveId(action.metadata.channel), + }, + })), + enabled, + exempt_roles: exemptRoles?.map(exemptRole => this.guild.roles.resolveId(exemptRole)), + exempt_channels: exemptChannels?.map(exemptChannel => this.guild.channels.resolveId(exemptChannel)), + }, + reason, + }); + + return this._add(data); + } + + /** + * Data that can be resolved to give an AutoModerationRule object. This can be: + * * An AutoModerationRule + * * A Snowflake + * @typedef {AutoModerationRule|Snowflake} AutoModerationRuleResolvable + */ + + /** + * Options used to fetch a single auto moderation rule from a guild. + * @typedef {BaseFetchOptions} FetchAutoModerationRuleOptions + * @property {AutoModerationRuleResolvable} autoModerationRule The auto moderation rule to fetch + */ + + /** + * Options used to fetch all auto moderation rules from a guild. + * @typedef {Object} FetchAutoModerationRulesOptions + * @property {boolean} [cache] Whether to cache the fetched auto moderation rules + */ + + /** + * Fetches auto moderation rules from Discord. + * @param {AutoModerationRuleResolvable|FetchAutoModerationRuleOptions|FetchAutoModerationRulesOptions} [options] + * Options for fetching auto moderation rule(s) + * @returns {Promise>} + * @example + * // Fetch all auto moderation rules from a guild without caching + * guild.autoModerationRules.fetch({ cache: false }) + * .then(console.log) + * .catch(console.error); + * @example + * // Fetch a single auto moderation rule + * guild.autoModerationRules.fetch('979083472868098119') + * .then(console.log) + * .catch(console.error); + * @example + * // Fetch a single auto moderation rule without checking cache and without caching + * guild.autoModerationRules.fetch({ autoModerationRule: '979083472868098119', cache: false, force: true }) + * .then(console.log) + * .catch(console.error) + */ + fetch(options) { + if (!options) return this._fetchMany(); + const { autoModerationRule, cache, force } = options; + const resolvedAutoModerationRule = this.resolveId(autoModerationRule ?? options); + if (resolvedAutoModerationRule) { + return this._fetchSingle({ autoModerationRule: resolvedAutoModerationRule, cache, force }); + } + return this._fetchMany(options); + } + + async _fetchSingle({ autoModerationRule, cache, force = false }) { + if (!force) { + const existing = this.cache.get(autoModerationRule); + if (existing) return existing; + } + + const data = await this.client.rest.get(Routes.guildAutoModerationRule(this.guild.id, autoModerationRule)); + return this._add(data, cache); + } + + async _fetchMany(options = {}) { + const data = await this.client.rest.get(Routes.guildAutoModerationRules(this.guild.id)); + + return data.reduce( + (col, autoModerationRule) => col.set(autoModerationRule.id, this._add(autoModerationRule, options.cache)), + new Collection(), + ); + } + + /** + * Deletes an auto moderation rule. + * @param {AutoModerationRuleResolvable} autoModerationRule The auto moderation rule to delete + * @param {string} [reason] The reason for deleting the auto moderation rule + * @returns {Promise} + */ + async delete(autoModerationRule, reason) { + const autoModerationRuleId = this.resolveId(autoModerationRule); + await this.client.rest.delete(Routes.guildAutoModerationRule(this.guild.id, autoModerationRuleId), { reason }); + } + + /** + * Resolves an {@link AutoModerationRuleResolvable} to an {@link AutoModerationRule} object. + * @method resolve + * @memberof AutoModerationRuleManager + * @instance + * @param {AutoModerationRuleResolvable} autoModerationRule The AutoModerationRule resolvable to resolve + * @returns {?AutoModerationRule} + */ + + /** + * Resolves an {@link AutoModerationRuleResolvable} to a {@link AutoModerationRule} id. + * @method resolveId + * @memberof AutoModerationRuleManager + * @instance + * @param {AutoModerationRuleResolvable} autoModerationRule The AutoModerationRule resolvable to resolve + * @returns {?Snowflake} + */ +} + +module.exports = AutoModerationRuleManager; diff --git a/packages/discord.js/src/structures/AutoModerationActionExecution.js b/packages/discord.js/src/structures/AutoModerationActionExecution.js new file mode 100644 index 000000000000..45c2949ab1a6 --- /dev/null +++ b/packages/discord.js/src/structures/AutoModerationActionExecution.js @@ -0,0 +1,87 @@ +'use strict'; + +/** + * Represents the structure of an executed action when an {@link AutoModerationRule} is triggered. + */ +class AutoModerationActionExecution { + constructor(data, guild) { + /** + * The guild where this action was executed from. + * @type {Guild} + */ + this.guild = guild; + + /** + * The action that was executed. + * @type {AutoModerationAction} + */ + this.action = data.action; + + /** + * The id of the auto moderation rule this action belongs to. + * @type {Snowflake} + */ + this.ruleId = data.rule_id; + + /** + * The trigger type of the auto moderation rule which was triggered. + * @type {AutoModerationRuleTriggerType} + */ + this.ruleTriggerType = data.rule_trigger_type; + + /** + * The id of the user that triggered this action. + * @type {Snowflake} + */ + this.userId = data.user_id; + + /** + * The id of the channel where this action was triggered from. + * @type {?Snowflake} + */ + this.channelId = data.channel_id ?? null; + + /** + * The id of the message that triggered this action. + * @type {?Snowflake} + * This will not be present if the message was blocked or the content was not part of any message. + */ + this.messageId = data.message_id ?? null; + + /** + * The id of any system auto moderation messages posted as a result of this action. + * @type {?Snowflake} + */ + this.alertSystemMessageId = data.alert_system_message_id ?? null; + + /** + * The content that triggered this action. + * This property requires the {@link GatewayIntentBits.MessageContent} privileged gateway intent. + * @type {string} + */ + this.content = data.content; + + /** + * The word or phrase configured in the rule that triggered this action. + * @type {?string} + */ + this.matchedKeyword = data.matched_keyword ?? null; + + /** + * The substring in content that triggered this action. + * @type {?string} + */ + this.matchedContent = data.matched_content ?? null; + } + + /** + * The auto moderation rule this action belongs to. + * @type {?AutoModerationRule} + * @readonly + */ + get autoModerationRule() { + return this.guild.autoModerationRules.cache.get(this.ruleId) ?? null; + } +} + +module.exports = AutoModerationActionExecution; diff --git a/packages/discord.js/src/structures/AutoModerationRule.js b/packages/discord.js/src/structures/AutoModerationRule.js new file mode 100644 index 000000000000..2939e790983c --- /dev/null +++ b/packages/discord.js/src/structures/AutoModerationRule.js @@ -0,0 +1,273 @@ +'use strict'; + +const { Collection } = require('@discordjs/collection'); +const Base = require('./Base'); + +/** + * Represents an auto moderation rule. + * @extends {Base} + */ +class AutoModerationRule extends Base { + constructor(client, data, guild) { + super(client); + + /** + * The id of this auto moderation rule. + * @type {Snowflake} + */ + this.id = data.id; + + /** + * The guild this auto moderation rule is for. + * @type {Guild} + */ + this.guild = guild; + + /** + * The user that created this auto moderation rule. + * @type {Snowflake} + */ + this.creatorId = data.creator_id; + + /** + * The trigger type of this auto moderation rule. + * @type {AutoModerationRuleTriggerType} + */ + this.triggerType = data.trigger_type; + + this._patch(data); + } + + _patch(data) { + if ('name' in data) { + /** + * The name of this auto moderation rule. + * @type {string} + */ + this.name = data.name; + } + + if ('event_type' in data) { + /** + * The event type of this auto moderation rule. + * @type {AutoModerationRuleEventType} + */ + this.eventType = data.event_type; + } + + if ('trigger_metadata' in data) { + /** + * Additional data used to determine whether an auto moderation rule should be triggered. + * @typedef {Object} AutoModerationTriggerMetadata + * @property {string[]} keywordFilter The substrings that will be searched for in the content + * @property {string[]} regexPatterns The regular expression patterns which will be matched against the content + * Only Rust-flavored regular expressions are supported. + * @property {AutoModerationRuleKeywordPresetType[]} presets + * The internally pre-defined wordsets which will be searched for in the content + * @property {string[]} allowList The substrings that will be exempt from triggering + * {@link AutoModerationRuleTriggerType.Keyword} and {@link AutoModerationRuleTriggerType.KeywordPreset} + * @property {?number} mentionTotalLimit The total number of role & user mentions allowed per message + */ + + /** + * The trigger metadata of the rule. + * @type {AutoModerationTriggerMetadata} + */ + this.triggerMetadata = { + keywordFilter: data.trigger_metadata.keyword_filter ?? [], + regexPatterns: data.trigger_metadata.regex_patterns ?? [], + presets: data.trigger_metadata.presets ?? [], + allowList: data.trigger_metadata.allow_list ?? [], + mentionTotalLimit: data.trigger_metadata.mention_total_limit ?? null, + }; + } + + if ('actions' in data) { + /** + * An object containing information about an auto moderation rule action. + * @typedef {Object} AutoModerationAction + * @property {AutoModerationActionType} type The type of this auto moderation rule action + * @property {AutoModerationActionMetadata} metadata Additional metadata needed during execution + */ + + /** + * Additional data used when an auto moderation rule is executed. + * @typedef {Object} AutoModerationActionMetadata + * @property {?Snowflake} channelId The id of the channel to which content will be logged + * @property {?number} durationSeconds The timeout duration in seconds + */ + + /** + * The actions of this auto moderation rule. + * @type {AutoModerationAction[]} + */ + this.actions = data.actions.map(action => ({ + type: action.type, + metadata: { + durationSeconds: action.metadata.duration_seconds ?? null, + channelId: action.metadata.channel_id ?? null, + }, + })); + } + + if ('enabled' in data) { + /** + * Whether this auto moderation rule is enabled. + * @type {boolean} + */ + this.enabled = data.enabled; + } + + if ('exempt_roles' in data) { + /** + * The roles exempt by this auto moderation rule. + * @type {Collection} + */ + this.exemptRoles = new Collection( + data.exempt_roles.map(exemptRole => [exemptRole, this.guild.roles.cache.get(exemptRole)]), + ); + } + + if ('exempt_channels' in data) { + /** + * The channels exempt by this auto moderation rule. + * @type {Collection} + */ + this.exemptChannels = new Collection( + data.exempt_channels.map(exemptChannel => [exemptChannel, this.guild.channels.cache.get(exemptChannel)]), + ); + } + } + + /** + * Edits this auto moderation rule. + * @param {AutoModerationRuleEditOptions} options Options for editing this auto moderation rule + * @returns {Promise} + */ + edit(options) { + return this.guild.autoModerationRules.edit(this.id, options); + } + + /** + * Deletes this auto moderation rule. + * @param {string} [reason] The reason for deleting this auto moderation rule + * @returns {Promise} + */ + delete(reason) { + return this.guild.autoModerationRules.delete(this.id, reason); + } + + /** + * Sets the name for this auto moderation rule. + * @param {string} name The name of this auto moderation rule + * @param {string} [reason] The reason for changing the name of this auto moderation rule + * @returns {Promise} + */ + setName(name, reason) { + return this.edit({ name, reason }); + } + + /** + * Sets the event type for this auto moderation rule. + * @param {AutoModerationRuleEventType} eventType The event type of this auto moderation rule + * @param {string} [reason] The reason for changing the event type of this auto moderation rule + * @returns {Promise} + */ + setEventType(eventType, reason) { + return this.edit({ eventType, reason }); + } + + /** + * Sets the keyword filter for this auto moderation rule. + * @param {string[]} keywordFilter The keyword filter of this auto moderation rule + * @param {string} [reason] The reason for changing the keyword filter of this auto moderation rule + * @returns {Promise} + */ + setKeywordFilter(keywordFilter, reason) { + return this.edit({ triggerMetadata: { keywordFilter }, reason }); + } + + /** + * Sets the regular expression patterns for this auto moderation rule. + * @param {string[]} regexPatterns The regular expression patterns of this auto moderation rule + * Only Rust-flavored regular expressions are supported. + * @param {string} [reason] The reason for changing the regular expression patterns of this auto moderation rule + * @returns {Promise} + */ + setRegexPatterns(regexPatterns, reason) { + return this.edit({ triggerMetadata: { regexPatterns }, reason }); + } + + /** + * Sets the presets for this auto moderation rule. + * @param {AutoModerationRuleKeywordPresetType[]} presets The presets of this auto moderation rule + * @param {string} [reason] The reason for changing the presets of this auto moderation rule + * @returns {Promise} + */ + setPresets(presets, reason) { + return this.edit({ triggerMetadata: { presets }, reason }); + } + + /** + * Sets the allow list for this auto moderation rule. + * @param {string[]} allowList The allow list of this auto moderation rule + * @param {string} [reason] The reason for changing the allow list of this auto moderation rule + * @returns {Promise} + */ + setAllowList(allowList, reason) { + return this.edit({ triggerMetadata: { allowList }, reason }); + } + + /** + * Sets the mention total limit for this auto moderation rule. + * @param {number} mentionTotalLimit The mention total limit of this auto moderation rule + * @param {string} [reason] The reason for changing the mention total limit of this auto moderation rule + * @returns {Promise} + */ + setMentionTotalLimit(mentionTotalLimit, reason) { + return this.edit({ triggerMetadata: { mentionTotalLimit }, reason }); + } + + /** + * Sets the actions for this auto moderation rule. + * @param {AutoModerationActionOptions} actions The actions of this auto moderation rule + * @param {string} [reason] The reason for changing the actions of this auto moderation rule + * @returns {Promise} + */ + setActions(actions, reason) { + return this.edit({ actions, reason }); + } + + /** + * Sets whether this auto moderation rule should be enabled. + * @param {boolean} [enabled=true] Whether to enable this auto moderation rule + * @param {string} [reason] The reason for enabling or disabling this auto moderation rule + * @returns {Promise} + */ + setEnabled(enabled = true, reason) { + return this.edit({ enabled, reason }); + } + + /** + * Sets the exempt roles for this auto moderation rule. + * @param {Collection|RoleResolvable[]} [exemptRoles] The exempt roles of this auto moderation rule + * @param {string} [reason] The reason for changing the exempt roles of this auto moderation rule + * @returns {Promise} + */ + setExemptRoles(exemptRoles, reason) { + return this.edit({ exemptRoles, reason }); + } + + /** + * Sets the exempt channels for this auto moderation rule. + * @param {Collection|GuildChannelResolvable[]} [exemptChannels] + * The exempt channels of this auto moderation rule + * @param {string} [reason] The reason for changing the exempt channels of this auto moderation rule + * @returns {Promise} + */ + setExemptChannels(exemptChannels, reason) { + return this.edit({ exemptChannels, reason }); + } +} + +module.exports = AutoModerationRule; diff --git a/packages/discord.js/src/structures/BaseInteraction.js b/packages/discord.js/src/structures/BaseInteraction.js index 5278c6781381..df98cf2e1c85 100644 --- a/packages/discord.js/src/structures/BaseInteraction.js +++ b/packages/discord.js/src/structures/BaseInteraction.js @@ -1,8 +1,10 @@ 'use strict'; +const { deprecate } = require('node:util'); const { DiscordSnowflake } = require('@sapphire/snowflake'); const { InteractionType, ApplicationCommandType, ComponentType } = require('discord-api-types/v10'); const Base = require('./Base'); +const { SelectMenuTypes } = require('../util/Constants'); const PermissionsBitField = require('../util/PermissionsBitField'); /** @@ -268,12 +270,63 @@ class BaseInteraction extends Base { return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.Button; } + // TODO: Get rid of this in the next major /** - * Indicates whether this interaction is a {@link SelectMenuInteraction}. + * Indicates whether this interaction is a {@link StringSelectMenuInteraction}. * @returns {boolean} + * + * @deprecated Use {@link Interaction#isStringSelectMenu} instead */ isSelectMenu() { - return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.SelectMenu; + return this.isStringSelectMenu(); + } + + /** + * Indicates whether this interaction is a select menu of any known type. + * @returns {boolean} + */ + isAnySelectMenu() { + return this.type === InteractionType.MessageComponent && SelectMenuTypes.includes(this.componentType); + } + + /** + * Indicates whether this interaction is a {@link StringSelectMenuInteraction}. + * @returns {boolean} + */ + isStringSelectMenu() { + return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.StringSelect; + } + + /** + * Indicates whether this interaction is a {@link UserSelectMenuInteraction} + * @returns {boolean} + */ + isUserSelectMenu() { + return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.UserSelect; + } + + /** + * Indicates whether this interaction is a {@link RoleSelectMenuInteraction} + * @returns {boolean} + */ + isRoleSelectMenu() { + return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.RoleSelect; + } + + /** + * Indicates whether this interaction is a {@link ChannelSelectMenuInteraction} + * @returns {boolean} + */ + isChannelSelectMenu() { + return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.ChannelSelect; + } + + /** + * Indicates whether this interaction is a {@link MenionableSelectMenuInteraction} + * @returns {boolean} + */ + isMentionableSelectMenu() { + return this.type === InteractionType.MessageComponent && this.componentType === ComponentType.MentionableSelect; } /** @@ -285,4 +338,9 @@ class BaseInteraction extends Base { } } +BaseInteraction.prototype.isSelectMenu = deprecate( + BaseInteraction.prototype.isSelectMenu, + 'BaseInteraction#isSelectMenu() is deprecated. Use BaseInteraction#isStringSelectMenu() instead.', +); + module.exports = BaseInteraction; diff --git a/packages/discord.js/src/structures/BaseSelectMenuComponent.js b/packages/discord.js/src/structures/BaseSelectMenuComponent.js new file mode 100644 index 000000000000..bb08087630a6 --- /dev/null +++ b/packages/discord.js/src/structures/BaseSelectMenuComponent.js @@ -0,0 +1,56 @@ +'use strict'; + +const Component = require('./Component'); + +/** + * Represents a select menu component + * @extends {Component} + */ +class BaseSelectMenuComponent extends Component { + /** + * The placeholder for this select menu + * @type {?string} + * @readonly + */ + get placeholder() { + return this.data.placeholder ?? null; + } + + /** + * The maximum amount of options that can be selected + * @type {?number} + * @readonly + */ + get maxValues() { + return this.data.max_values ?? null; + } + + /** + * The minimum amount of options that must be selected + * @type {?number} + * @readonly + */ + get minValues() { + return this.data.min_values ?? null; + } + + /** + * The custom id of this select menu + * @type {string} + * @readonly + */ + get customId() { + return this.data.custom_id; + } + + /** + * Whether this select menu is disabled + * @type {?boolean} + * @readonly + */ + get disabled() { + return this.data.disabled ?? null; + } +} + +module.exports = BaseSelectMenuComponent; diff --git a/packages/discord.js/src/structures/ChannelSelectMenuBuilder.js b/packages/discord.js/src/structures/ChannelSelectMenuBuilder.js new file mode 100644 index 000000000000..324f70b3e27f --- /dev/null +++ b/packages/discord.js/src/structures/ChannelSelectMenuBuilder.js @@ -0,0 +1,33 @@ +'use strict'; + +const { ChannelSelectMenuBuilder: BuildersChannelSelectMenu, isJSONEncodable } = require('@discordjs/builders'); +const { toSnakeCase } = require('../util/Transformers'); + +/** + * Class used to build select menu components to be sent through the API + * @extends {BuildersChannelSelectMenu} + */ +class ChannelSelectMenuBuilder extends BuildersChannelSelectMenu { + constructor(data = {}) { + super(toSnakeCase(data)); + } + + /** + * Creates a new select menu builder from json data + * @param {JSONEncodable | APISelectMenuComponent} other The other data + * @returns {ChannelSelectMenuBuilder} + */ + static from(other) { + if (isJSONEncodable(other)) { + return new this(other.toJSON()); + } + return new this(other); + } +} + +module.exports = ChannelSelectMenuBuilder; + +/** + * @external BuildersChannelSelectMenu + * @see {@link https://discord.js.org/#/docs/builders/main/class/ChannelSelectMenuBuilder} + */ diff --git a/packages/discord.js/src/structures/ChannelSelectMenuComponent.js b/packages/discord.js/src/structures/ChannelSelectMenuComponent.js new file mode 100644 index 000000000000..90a706315fb0 --- /dev/null +++ b/packages/discord.js/src/structures/ChannelSelectMenuComponent.js @@ -0,0 +1,20 @@ +'use strict'; + +const BaseSelectMenuComponent = require('./BaseSelectMenuComponent'); + +/** + * Represents a channel select menu component + * @extends {BaseSelectMenuComponent} + */ +class ChannelSelectMenuComponent extends BaseSelectMenuComponent { + /** + * The options in this select menu + * @type {?(ChannelType[])} + * @readonly + */ + get channelTypes() { + return this.data.channel_types ?? null; + } +} + +module.exports = ChannelSelectMenuComponent; diff --git a/packages/discord.js/src/structures/ChannelSelectMenuInteraction.js b/packages/discord.js/src/structures/ChannelSelectMenuInteraction.js new file mode 100644 index 000000000000..0e28c01edd6d --- /dev/null +++ b/packages/discord.js/src/structures/ChannelSelectMenuInteraction.js @@ -0,0 +1,31 @@ +'use strict'; + +const { Collection } = require('@discordjs/collection'); +const MessageComponentInteraction = require('./MessageComponentInteraction'); + +/** + * Represents a {@link ComponentType.ChannelSelect} select menu interaction. + * @extends {MessageComponentInteraction} + */ +class ChannelSelectMenuInteraction extends MessageComponentInteraction { + constructor(client, data) { + super(client, data); + + /** + * An array of the selected channel ids + * @type {Snowflake[]} + */ + this.values = data.data.values ?? []; + + /** + * Collection of the selected channels + * @type {Collection} + */ + this.channels = new Collection(); + for (const channel of Object.values(data.data.resolved.channels)) { + this.channels.set(channel.id, this.client.channels._add(channel, this.guild) ?? channel); + } + } +} + +module.exports = ChannelSelectMenuInteraction; diff --git a/packages/discord.js/src/structures/Guild.js b/packages/discord.js/src/structures/Guild.js index ba1d2b3b42ae..ae925b5ca5b0 100644 --- a/packages/discord.js/src/structures/Guild.js +++ b/packages/discord.js/src/structures/Guild.js @@ -12,6 +12,7 @@ const Integration = require('./Integration'); const Webhook = require('./Webhook'); const WelcomeScreen = require('./WelcomeScreen'); const { DiscordjsError, DiscordjsTypeError, ErrorCodes } = require('../errors'); +const AutoModerationRuleManager = require('../managers/AutoModerationRuleManager'); const GuildApplicationCommandManager = require('../managers/GuildApplicationCommandManager'); const GuildBanManager = require('../managers/GuildBanManager'); const GuildChannelManager = require('../managers/GuildChannelManager'); @@ -99,6 +100,12 @@ class Guild extends AnonymousGuild { */ this.scheduledEvents = new GuildScheduledEventManager(this); + /** + * A manager of the auto moderation rules of this guild. + * @type {AutoModerationRuleManager} + */ + this.autoModerationRules = new AutoModerationRuleManager(this); + if (!data) return; if (data.unavailable) { /** diff --git a/packages/discord.js/src/structures/GuildAuditLogs.js b/packages/discord.js/src/structures/GuildAuditLogs.js index b5635a37807d..e4ddfe0ab726 100644 --- a/packages/discord.js/src/structures/GuildAuditLogs.js +++ b/packages/discord.js/src/structures/GuildAuditLogs.js @@ -61,6 +61,17 @@ class GuildAuditLogs { } } + /** + * Cached auto moderation rules. + * @type {Collection} + * @private + */ + this.autoModerationRules = data.auto_moderation_rules.reduce( + (autoModerationRules, autoModerationRule) => + autoModerationRules.set(autoModerationRule.id, guild.autoModerationRules._add(autoModerationRule)), + new Collection(), + ); + /** * The entries for this guild's audit logs * @type {Collection} diff --git a/packages/discord.js/src/structures/GuildAuditLogsEntry.js b/packages/discord.js/src/structures/GuildAuditLogsEntry.js index dde8b6e136a0..b5c1620c604d 100644 --- a/packages/discord.js/src/structures/GuildAuditLogsEntry.js +++ b/packages/discord.js/src/structures/GuildAuditLogsEntry.js @@ -2,6 +2,7 @@ const { DiscordSnowflake } = require('@sapphire/snowflake'); const { AuditLogOptionsType, AuditLogEvent } = require('discord-api-types/v10'); +const AutoModerationRule = require('./AutoModerationRule'); const { GuildScheduledEvent } = require('./GuildScheduledEvent'); const Integration = require('./Integration'); const Invite = require('./Invite'); @@ -27,6 +28,7 @@ const Targets = { Sticker: 'Sticker', Thread: 'Thread', ApplicationCommand: 'ApplicationCommand', + AutoModeration: 'AutoModeration', Unknown: 'Unknown', }; @@ -46,10 +48,11 @@ const Targets = { * * A guild scheduled event * * A thread * * An application command + * * An auto moderation rule * * An object with an id key if target was deleted or fake entity * * An object where the keys represent either the new value or the old value * @typedef {?(Object|Guild|BaseChannel|User|Role|Invite|Webhook|GuildEmoji|Message|Integration|StageInstance|Sticker| - * GuildScheduledEvent|ApplicationCommand)} AuditLogEntryTarget + * GuildScheduledEvent|ApplicationCommand|AutoModerationRule)} AuditLogEntryTarget */ /** @@ -223,6 +226,15 @@ class GuildAuditLogsEntry { }; break; + case AuditLogEvent.AutoModerationBlockMessage: + case AuditLogEvent.AutoModerationFlagToChannel: + case AuditLogEvent.AutoModerationUserCommunicationDisabled: + this.extra = { + autoModerationRuleName: data.options.auto_moderation_rule_name, + autoModerationRuleTriggerType: data.options.auto_moderation_rule_trigger_type, + }; + break; + default: break; } @@ -352,6 +364,20 @@ class GuildAuditLogsEntry { ); } else if (targetType === Targets.ApplicationCommand) { this.target = logs.applicationCommands.get(data.target_id) ?? { id: data.target_id }; + } else if (targetType === Targets.AutoModeration) { + this.target = + guild.autoModerationRules.cache.get(data.target_id) ?? + new AutoModerationRule( + guild.client, + this.changes.reduce( + (o, c) => { + o[c.key] = c.new ?? c.old; + return o; + }, + { id: data.target_id, guild_id: guild.id }, + ), + guild, + ); } else if (data.target_id) { this.target = guild[`${targetType.toLowerCase()}s`]?.cache.get(data.target_id) ?? { id: data.target_id }; } @@ -377,6 +403,7 @@ class GuildAuditLogsEntry { if (target < 110) return Targets.GuildScheduledEvent; if (target < 120) return Targets.Thread; if (target < 130) return Targets.ApplicationCommand; + if (target >= 140 && target < 150) return Targets.AutoModeration; return Targets.Unknown; } @@ -402,6 +429,8 @@ class GuildAuditLogsEntry { AuditLogEvent.StickerCreate, AuditLogEvent.GuildScheduledEventCreate, AuditLogEvent.ThreadCreate, + AuditLogEvent.AutoModerationRuleCreate, + AuditLogEvent.AutoModerationBlockMessage, ].includes(action) ) { return 'Create'; @@ -427,6 +456,7 @@ class GuildAuditLogsEntry { AuditLogEvent.StickerDelete, AuditLogEvent.GuildScheduledEventDelete, AuditLogEvent.ThreadDelete, + AuditLogEvent.AutoModerationRuleDelete, ].includes(action) ) { return 'Delete'; @@ -450,6 +480,7 @@ class GuildAuditLogsEntry { AuditLogEvent.GuildScheduledEventUpdate, AuditLogEvent.ThreadUpdate, AuditLogEvent.ApplicationCommandPermissionUpdate, + AuditLogEvent.AutoModerationRuleUpdate, ].includes(action) ) { return 'Update'; diff --git a/packages/discord.js/src/structures/InteractionCollector.js b/packages/discord.js/src/structures/InteractionCollector.js index 92f4d63a9ee4..0e63c7d1c20b 100644 --- a/packages/discord.js/src/structures/InteractionCollector.js +++ b/packages/discord.js/src/structures/InteractionCollector.js @@ -147,10 +147,17 @@ class InteractionCollector extends Collector { * @event InteractionCollector#collect * @param {BaseInteraction} interaction The interaction that was collected */ + if (this.interactionType && interaction.type !== this.interactionType) return null; if (this.componentType && interaction.componentType !== this.componentType) return null; if (this.messageId && interaction.message?.id !== this.messageId) return null; - if (this.messageInteractionId && interaction.message?.interaction?.id !== this.messageInteractionId) return null; + if ( + this.messageInteractionId && + interaction.message?.interaction?.id && + interaction.message.interaction.id !== this.messageInteractionId + ) { + return null; + } if (this.channelId && interaction.channelId !== this.channelId) return null; if (this.guildId && interaction.guildId !== this.guildId) return null; diff --git a/packages/discord.js/src/structures/MentionableSelectMenuBuilder.js b/packages/discord.js/src/structures/MentionableSelectMenuBuilder.js new file mode 100644 index 000000000000..d5673db6865e --- /dev/null +++ b/packages/discord.js/src/structures/MentionableSelectMenuBuilder.js @@ -0,0 +1,33 @@ +'use strict'; + +const { MentionableSelectMenuBuilder: BuildersMentionableSelectMenu, isJSONEncodable } = require('@discordjs/builders'); +const { toSnakeCase } = require('../util/Transformers'); + +/** + * Class used to build select menu components to be sent through the API + * @extends {BuildersMentionableSelectMenu} + */ +class MentionableSelectMenuBuilder extends BuildersMentionableSelectMenu { + constructor(data = {}) { + super(toSnakeCase(data)); + } + + /** + * Creates a new select menu builder from json data + * @param {JSONEncodable | APISelectMenuComponent} other The other data + * @returns {MentionableSelectMenuBuilder} + */ + static from(other) { + if (isJSONEncodable(other)) { + return new this(other.toJSON()); + } + return new this(other); + } +} + +module.exports = MentionableSelectMenuBuilder; + +/** + * @external BuildersMentionableSelectMenu + * @see {@link https://discord.js.org/#/docs/builders/main/class/MentionableSelectMenuBuilder} + */ diff --git a/packages/discord.js/src/structures/MentionableSelectMenuComponent.js b/packages/discord.js/src/structures/MentionableSelectMenuComponent.js new file mode 100644 index 000000000000..d0f75c356e0c --- /dev/null +++ b/packages/discord.js/src/structures/MentionableSelectMenuComponent.js @@ -0,0 +1,11 @@ +'use strict'; + +const BaseSelectMenuComponent = require('./BaseSelectMenuComponent'); + +/** + * Represents a mentionable select menu component + * @extends {BaseSelectMenuComponent} + */ +class MentionableSelectMenuComponent extends BaseSelectMenuComponent {} + +module.exports = MentionableSelectMenuComponent; diff --git a/packages/discord.js/src/structures/MentionableSelectMenuInteraction.js b/packages/discord.js/src/structures/MentionableSelectMenuInteraction.js new file mode 100644 index 000000000000..4e14bda6137b --- /dev/null +++ b/packages/discord.js/src/structures/MentionableSelectMenuInteraction.js @@ -0,0 +1,71 @@ +'use strict'; + +const { Collection } = require('@discordjs/collection'); +const MessageComponentInteraction = require('./MessageComponentInteraction'); +const Events = require('../util/Events'); + +/** + * Represents a {@link ComponentType.MentionableSelect} select menu interaction. + * @extends {MessageComponentInteraction} + */ +class MentionableSelectMenuInteraction extends MessageComponentInteraction { + constructor(client, data) { + super(client, data); + + /** + * An array of the selected user and role ids + * @type {Snowflake[]} + */ + this.values = data.data.values ?? []; + + const { members, users, roles } = data.data.resolved ?? {}; + + /** + * Collection of the selected users + * @type {Collection} + */ + this.users = new Collection(); + + /** + * Collection of the selected users + * @type {Collection} + */ + this.members = new Collection(); + + /** + * Collection of the selected roles + * @type {Collection} + */ + this.roles = new Collection(); + + if (members) { + for (const [id, member] of Object.entries(members)) { + const user = users[id]; + if (!user) { + this.client.emit( + Events.Debug, + `[MentionableSelectMenuInteraction] Received a member without a user, skipping ${id}`, + ); + + continue; + } + + this.members.set(id, this.guild?.members._add({ user, ...member }) ?? { user, ...member }); + } + } + + if (users) { + for (const user of Object.values(users)) { + this.users.set(user.id, this.client.users._add(user)); + } + } + + if (roles) { + for (const role of Object.values(roles)) { + this.roles.set(role.id, this.guild?.roles._add(role) ?? role); + } + } + } +} + +module.exports = MentionableSelectMenuInteraction; diff --git a/packages/discord.js/src/structures/Message.js b/packages/discord.js/src/structures/Message.js index 7245e004bf61..dd5a4b6ff12e 100644 --- a/packages/discord.js/src/structures/Message.js +++ b/packages/discord.js/src/structures/Message.js @@ -22,7 +22,7 @@ const { Sticker } = require('./Sticker'); const { DiscordjsError, ErrorCodes } = require('../errors'); const ReactionManager = require('../managers/ReactionManager'); const { createComponent } = require('../util/Components'); -const { NonSystemMessageTypes } = require('../util/Constants'); +const { NonSystemMessageTypes, MaxBulkDeletableMessageAge } = require('../util/Constants'); const MessageFlagsBitField = require('../util/MessageFlagsBitField'); const PermissionsBitField = require('../util/PermissionsBitField'); const { cleanContent, resolvePartialEmoji } = require('../util/Util'); @@ -611,6 +611,25 @@ class Message extends Base { ); } + /** + * Whether the message is bulk deletable by the client user + * @type {boolean} + * @readonly + * @example + * // Filter for bulk deletable messages + * channel.bulkDelete(messages.filter(message => message.bulkDeletable)); + */ + get bulkDeletable() { + const permissions = this.channel?.permissionsFor(this.client.user); + return ( + (this.inGuild() && + Date.now() - this.createdTimestamp < MaxBulkDeletableMessageAge && + this.deletable && + permissions?.has(PermissionFlagsBits.ManageMessages, false)) ?? + false + ); + } + /** * Whether the message is pinnable by the client user * @type {boolean} @@ -769,7 +788,6 @@ class Message extends Base { /** * Options provided when sending a message as an inline reply. * @typedef {BaseMessageCreateOptions} MessageReplyOptions - * @property {StickerResolvable[]} [stickers=[]] The stickers to send in the message * @property {boolean} [failIfNotExists=this.client.options.failIfNotExists] Whether to error if the referenced * message does not exist (creates a standard message in this case when false) * @property {StickerResolvable[]} [stickers=[]] Stickers to send in the message diff --git a/packages/discord.js/src/structures/MessageComponentInteraction.js b/packages/discord.js/src/structures/MessageComponentInteraction.js index 9ffa99354481..47b31e04c12c 100644 --- a/packages/discord.js/src/structures/MessageComponentInteraction.js +++ b/packages/discord.js/src/structures/MessageComponentInteraction.js @@ -66,10 +66,15 @@ class MessageComponentInteraction extends BaseInteraction { } /** - * Raw message components from the API - * * APIMessageButton - * * APIMessageSelectMenu - * @typedef {APIMessageButton|APIMessageSelectMenu} APIMessageActionRowComponent + * Components that can be placed in an action row for messages. + * * ButtonComponent + * * StringSelectMenuComponent + * * UserSelectMenuComponent + * * RoleSelectMenuComponent + * * MentionableSelectMenuComponent + * * ChannelSelectMenuComponent + * @typedef {ButtonComponent|StringSelectMenuComponent|UserSelectMenuComponent| + * RoleSelectMenuComponent|MentionableSelectMenuComponent|ChannelSelectMenuComponent} MessageActionRowComponent */ /** @@ -100,13 +105,3 @@ class MessageComponentInteraction extends BaseInteraction { InteractionResponses.applyToClass(MessageComponentInteraction); module.exports = MessageComponentInteraction; - -/** - * @external APIMessageSelectMenu - * @see {@link https://discord.com/developers/docs/interactions/message-components#select-menu-object} - */ - -/** - * @external APIMessageButton - * @see {@link https://discord.com/developers/docs/interactions/message-components#button-object} - */ diff --git a/packages/discord.js/src/structures/RoleSelectMenuBuilder.js b/packages/discord.js/src/structures/RoleSelectMenuBuilder.js new file mode 100644 index 000000000000..a42b436fa2c8 --- /dev/null +++ b/packages/discord.js/src/structures/RoleSelectMenuBuilder.js @@ -0,0 +1,33 @@ +'use strict'; + +const { RoleSelectMenuBuilder: BuildersRoleSelectMenu, isJSONEncodable } = require('@discordjs/builders'); +const { toSnakeCase } = require('../util/Transformers'); + +/** + * Class used to build select menu components to be sent through the API + * @extends {BuildersRoleSelectMenu} + */ +class RoleSelectMenuBuilder extends BuildersRoleSelectMenu { + constructor(data = {}) { + super(toSnakeCase(data)); + } + + /** + * Creates a new select menu builder from json data + * @param {JSONEncodable | APISelectMenuComponent} other The other data + * @returns {RoleSelectMenuBuilder} + */ + static from(other) { + if (isJSONEncodable(other)) { + return new this(other.toJSON()); + } + return new this(other); + } +} + +module.exports = RoleSelectMenuBuilder; + +/** + * @external BuildersRoleSelectMenu + * @see {@link https://discord.js.org/#/docs/builders/main/class/RoleSelectMenuBuilder} + */ diff --git a/packages/discord.js/src/structures/RoleSelectMenuComponent.js b/packages/discord.js/src/structures/RoleSelectMenuComponent.js new file mode 100644 index 000000000000..1b279428d57c --- /dev/null +++ b/packages/discord.js/src/structures/RoleSelectMenuComponent.js @@ -0,0 +1,11 @@ +'use strict'; + +const BaseSelectMenuComponent = require('./BaseSelectMenuComponent'); + +/** + * Represents a role select menu component + * @extends {BaseSelectMenuComponent} + */ +class RoleSelectMenuComponent extends BaseSelectMenuComponent {} + +module.exports = RoleSelectMenuComponent; diff --git a/packages/discord.js/src/structures/RoleSelectMenuInteraction.js b/packages/discord.js/src/structures/RoleSelectMenuInteraction.js new file mode 100644 index 000000000000..7c7896329156 --- /dev/null +++ b/packages/discord.js/src/structures/RoleSelectMenuInteraction.js @@ -0,0 +1,31 @@ +'use strict'; + +const { Collection } = require('@discordjs/collection'); +const MessageComponentInteraction = require('./MessageComponentInteraction'); + +/** + * Represents a {@link ComponentType.RoleSelect} select menu interaction. + * @extends {MessageComponentInteraction} + */ +class RoleSelectMenuInteraction extends MessageComponentInteraction { + constructor(client, data) { + super(client, data); + + /** + * An array of the selected role ids + * @type {Snowflake[]} + */ + this.values = data.data.values ?? []; + + /** + * Collection of the selected roles + * @type {Collection} + */ + this.roles = new Collection(); + for (const role of Object.values(data.data.resolved.roles)) { + this.roles.set(role.id, this.guild?.roles._add(role) ?? role); + } + } +} + +module.exports = RoleSelectMenuInteraction; diff --git a/packages/discord.js/src/structures/SelectMenuBuilder.js b/packages/discord.js/src/structures/SelectMenuBuilder.js index 738a18fe2950..bae3e66fc5e8 100644 --- a/packages/discord.js/src/structures/SelectMenuBuilder.js +++ b/packages/discord.js/src/structures/SelectMenuBuilder.js @@ -1,78 +1,26 @@ 'use strict'; -const { SelectMenuBuilder: BuildersSelectMenu, isJSONEncodable, normalizeArray } = require('@discordjs/builders'); -const { toSnakeCase } = require('../util/Transformers'); -const { resolvePartialEmoji } = require('../util/Util'); +const process = require('node:process'); +const StringSelectMenuBuilder = require('./StringSelectMenuBuilder'); + +let deprecationEmitted = false; /** - * Class used to build select menu components to be sent through the API - * @extends {BuildersSelectMenu} + * @deprecated Use {@link StringSelectMenuBuilder} instead. + * @extends {StringSelectMenuBuilder} */ -class SelectMenuBuilder extends BuildersSelectMenu { - constructor({ options, ...data } = {}) { - super( - toSnakeCase({ - ...data, - options: options?.map(({ emoji, ...option }) => ({ - ...option, - emoji: emoji && typeof emoji === 'string' ? resolvePartialEmoji(emoji) : emoji, - })), - }), - ); - } - - /** - * Normalizes a select menu option emoji - * @param {SelectMenuOptionData|JSONEncodable} selectMenuOption The option to normalize - * @returns {Array} - * @private - */ - static normalizeEmoji(selectMenuOption) { - if (isJSONEncodable(selectMenuOption)) { - return selectMenuOption; - } - - const { emoji, ...option } = selectMenuOption; - return { - ...option, - emoji: typeof emoji === 'string' ? resolvePartialEmoji(emoji) : emoji, - }; - } - - /** - * Adds options to this select menu - * @param {RestOrArray} options The options to add to this select menu - * @returns {SelectMenuBuilder} - */ - addOptions(...options) { - return super.addOptions(normalizeArray(options).map(option => SelectMenuBuilder.normalizeEmoji(option))); - } - - /** - * Sets the options on this select menu - * @param {RestOrArray} options The options to set on this select menu - * @returns {SelectMenuBuilder} - */ - setOptions(...options) { - return super.setOptions(normalizeArray(options).map(option => SelectMenuBuilder.normalizeEmoji(option))); - } - - /** - * Creates a new select menu builder from json data - * @param {JSONEncodable | APISelectMenuComponent} other The other data - * @returns {SelectMenuBuilder} - */ - static from(other) { - if (isJSONEncodable(other)) { - return new this(other.toJSON()); +class SelectMenuBuilder extends StringSelectMenuBuilder { + constructor(...params) { + super(...params); + + if (!deprecationEmitted) { + process.emitWarning( + 'The SelectMenuBuilder class is deprecated, use StringSelectMenuBuilder instead.', + 'DeprecationWarning', + ); + deprecationEmitted = true; } - return new this(other); } } module.exports = SelectMenuBuilder; - -/** - * @external BuildersSelectMenu - * @see {@link https://discord.js.org/#/docs/builders/main/class/SelectMenuBuilder} - */ diff --git a/packages/discord.js/src/structures/SelectMenuComponent.js b/packages/discord.js/src/structures/SelectMenuComponent.js index 1d3e80bc77d0..540acb7e2b8b 100644 --- a/packages/discord.js/src/structures/SelectMenuComponent.js +++ b/packages/discord.js/src/structures/SelectMenuComponent.js @@ -1,64 +1,25 @@ 'use strict'; -const Component = require('./Component'); +const process = require('node:process'); +const StringSelectMenuComponent = require('./StringSelectMenuComponent'); + +let deprecationEmitted = false; /** - * Represents a select menu component - * @extends {Component} + * @deprecated Use {@link StringSelectMenuComponent} instead. + * @extends {StringSelectMenuComponent} */ -class SelectMenuComponent extends Component { - /** - * The placeholder for this select menu - * @type {?string} - * @readonly - */ - get placeholder() { - return this.data.placeholder ?? null; - } - - /** - * The maximum amount of options that can be selected - * @type {?number} - * @readonly - */ - get maxValues() { - return this.data.max_values ?? null; - } - - /** - * The minimum amount of options that must be selected - * @type {?number} - * @readonly - */ - get minValues() { - return this.data.min_values ?? null; - } - - /** - * The custom id of this select menu - * @type {string} - * @readonly - */ - get customId() { - return this.data.custom_id; - } - - /** - * Whether this select menu is disabled - * @type {?boolean} - * @readonly - */ - get disabled() { - return this.data.disabled ?? null; - } - - /** - * The options in this select menu - * @type {APISelectMenuOption[]} - * @readonly - */ - get options() { - return this.data.options; +class SelectMenuComponent extends StringSelectMenuComponent { + constructor(...params) { + super(...params); + + if (!deprecationEmitted) { + process.emitWarning( + 'The SelectMenuComponent class is deprecated, use StringSelectMenuComponent instead.', + 'DeprecationWarning', + ); + deprecationEmitted = true; + } } } diff --git a/packages/discord.js/src/structures/SelectMenuInteraction.js b/packages/discord.js/src/structures/SelectMenuInteraction.js index 42ef0c1069ff..923725ece6ed 100644 --- a/packages/discord.js/src/structures/SelectMenuInteraction.js +++ b/packages/discord.js/src/structures/SelectMenuInteraction.js @@ -1,20 +1,25 @@ 'use strict'; -const MessageComponentInteraction = require('./MessageComponentInteraction'); +const process = require('node:process'); +const StringSelectMenuInteraction = require('./StringSelectMenuInteraction'); + +let deprecationEmitted = false; /** - * Represents a select menu interaction. - * @extends {MessageComponentInteraction} + * @deprecated Use {@link StringSelectMenuInteraction} instead. + * @extends {StringSelectMenuInteraction} */ -class SelectMenuInteraction extends MessageComponentInteraction { - constructor(client, data) { - super(client, data); +class SelectMenuInteraction extends StringSelectMenuInteraction { + constructor(...params) { + super(...params); - /** - * The values selected, if the component which was interacted with was a select menu - * @type {string[]} - */ - this.values = data.data.values ?? []; + if (!deprecationEmitted) { + process.emitWarning( + 'The SelectMenuInteraction class is deprecated, use StringSelectMenuInteraction instead.', + 'DeprecationWarning', + ); + deprecationEmitted = true; + } } } diff --git a/packages/discord.js/src/structures/SelectMenuOptionBuilder.js b/packages/discord.js/src/structures/SelectMenuOptionBuilder.js index 8c9d87a22779..4646848ce30b 100644 --- a/packages/discord.js/src/structures/SelectMenuOptionBuilder.js +++ b/packages/discord.js/src/structures/SelectMenuOptionBuilder.js @@ -1,50 +1,26 @@ 'use strict'; -const { SelectMenuOptionBuilder: BuildersSelectMenuOption, isJSONEncodable } = require('@discordjs/builders'); -const { toSnakeCase } = require('../util/Transformers'); -const { resolvePartialEmoji } = require('../util/Util'); +const process = require('node:process'); +const StringSelectMenuOptionBuilder = require('./StringSelectMenuOptionBuilder'); + +let deprecationEmitted = false; /** - * Represents a select menu option builder. - * @extends {BuildersSelectMenuOption} + * @deprecated Use {@link StringSelectMenuOptionBuilder} instead. + * @extends {StringSelectMenuOptionBuilder} */ -class SelectMenuOptionBuilder extends BuildersSelectMenuOption { - constructor({ emoji, ...data } = {}) { - super( - toSnakeCase({ - ...data, - emoji: emoji && typeof emoji === 'string' ? resolvePartialEmoji(emoji) : emoji, - }), - ); - } - /** - * Sets the emoji to display on this option - * @param {ComponentEmojiResolvable} emoji The emoji to display on this option - * @returns {SelectMenuOptionBuilder} - */ - setEmoji(emoji) { - if (typeof emoji === 'string') { - return super.setEmoji(resolvePartialEmoji(emoji)); - } - return super.setEmoji(emoji); - } +class SelectMenuOptionBuilder extends StringSelectMenuOptionBuilder { + constructor(...params) { + super(...params); - /** - * Creates a new select menu option builder from JSON data - * @param {JSONEncodable|APISelectMenuOption} other The other data - * @returns {SelectMenuOptionBuilder} - */ - static from(other) { - if (isJSONEncodable(other)) { - return new this(other.toJSON()); + if (!deprecationEmitted) { + process.emitWarning( + 'The SelectMenuOptionBuilder class is deprecated, use StringSelectMenuOptionBuilder instead.', + 'DeprecationWarning', + ); + deprecationEmitted = true; } - return new this(other); } } module.exports = SelectMenuOptionBuilder; - -/** - * @external BuildersSelectMenuOption - * @see {@link https://discord.js.org/#/docs/builders/main/class/SelectMenuOptionBuilder} - */ diff --git a/packages/discord.js/src/structures/StringSelectMenuBuilder.js b/packages/discord.js/src/structures/StringSelectMenuBuilder.js new file mode 100644 index 000000000000..3dd645e3cb53 --- /dev/null +++ b/packages/discord.js/src/structures/StringSelectMenuBuilder.js @@ -0,0 +1,78 @@ +'use strict'; + +const { SelectMenuBuilder: BuildersSelectMenu, isJSONEncodable, normalizeArray } = require('@discordjs/builders'); +const { toSnakeCase } = require('../util/Transformers'); +const { resolvePartialEmoji } = require('../util/Util'); + +/** + * Class used to build select menu components to be sent through the API + * @extends {BuildersSelectMenu} + */ +class StringSelectMenuBuilder extends BuildersSelectMenu { + constructor({ options, ...data } = {}) { + super( + toSnakeCase({ + ...data, + options: options?.map(({ emoji, ...option }) => ({ + ...option, + emoji: emoji && typeof emoji === 'string' ? resolvePartialEmoji(emoji) : emoji, + })), + }), + ); + } + + /** + * Normalizes a select menu option emoji + * @param {SelectMenuOptionData|JSONEncodable} selectMenuOption The option to normalize + * @returns {SelectMenuOptionBuilder|APISelectMenuOption} + * @private + */ + static normalizeEmoji(selectMenuOption) { + if (isJSONEncodable(selectMenuOption)) { + return selectMenuOption; + } + + const { emoji, ...option } = selectMenuOption; + return { + ...option, + emoji: typeof emoji === 'string' ? resolvePartialEmoji(emoji) : emoji, + }; + } + + /** + * Adds options to this select menu + * @param {RestOrArray} options The options to add to this select menu + * @returns {StringSelectMenuBuilder} + */ + addOptions(...options) { + return super.addOptions(normalizeArray(options).map(option => StringSelectMenuBuilder.normalizeEmoji(option))); + } + + /** + * Sets the options on this select menu + * @param {RestOrArray} options The options to set on this select menu + * @returns {StringSelectMenuBuilder} + */ + setOptions(...options) { + return super.setOptions(normalizeArray(options).map(option => StringSelectMenuBuilder.normalizeEmoji(option))); + } + + /** + * Creates a new select menu builder from json data + * @param {JSONEncodable | APISelectMenuComponent} other The other data + * @returns {StringSelectMenuBuilder} + */ + static from(other) { + if (isJSONEncodable(other)) { + return new this(other.toJSON()); + } + return new this(other); + } +} + +module.exports = StringSelectMenuBuilder; + +/** + * @external BuildersSelectMenu + * @see {@link https://discord.js.org/#/docs/builders/main/class/SelectMenuBuilder} + */ diff --git a/packages/discord.js/src/structures/StringSelectMenuComponent.js b/packages/discord.js/src/structures/StringSelectMenuComponent.js new file mode 100644 index 000000000000..e008ae5f2b08 --- /dev/null +++ b/packages/discord.js/src/structures/StringSelectMenuComponent.js @@ -0,0 +1,20 @@ +'use strict'; + +const BaseSelectMenuComponent = require('./BaseSelectMenuComponent'); + +/** + * Represents a string select menu component + * @extends {BaseSelectMenuComponent} + */ +class StringSelectMenuComponent extends BaseSelectMenuComponent { + /** + * The options in this select menu + * @type {APISelectMenuOption[]} + * @readonly + */ + get options() { + return this.data.options; + } +} + +module.exports = StringSelectMenuComponent; diff --git a/packages/discord.js/src/structures/StringSelectMenuInteraction.js b/packages/discord.js/src/structures/StringSelectMenuInteraction.js new file mode 100644 index 000000000000..1db8c28f6711 --- /dev/null +++ b/packages/discord.js/src/structures/StringSelectMenuInteraction.js @@ -0,0 +1,21 @@ +'use strict'; + +const MessageComponentInteraction = require('./MessageComponentInteraction'); + +/** + * Represents a {@link ComponentType.StringSelect} select menu interaction. + * @extends {MessageComponentInteraction} + */ +class StringSelectMenuInteraction extends MessageComponentInteraction { + constructor(client, data) { + super(client, data); + + /** + * The values selected + * @type {string[]} + */ + this.values = data.data.values ?? []; + } +} + +module.exports = StringSelectMenuInteraction; diff --git a/packages/discord.js/src/structures/StringSelectMenuOptionBuilder.js b/packages/discord.js/src/structures/StringSelectMenuOptionBuilder.js new file mode 100644 index 000000000000..f5fa6d9e6884 --- /dev/null +++ b/packages/discord.js/src/structures/StringSelectMenuOptionBuilder.js @@ -0,0 +1,51 @@ +'use strict'; + +const { SelectMenuOptionBuilder: BuildersSelectMenuOption, isJSONEncodable } = require('@discordjs/builders'); +const { toSnakeCase } = require('../util/Transformers'); +const { resolvePartialEmoji } = require('../util/Util'); + +/** + * Represents a select menu option builder. + * @extends {BuildersSelectMenuOption} + */ +class StringSelectMenuOptionBuilder extends BuildersSelectMenuOption { + constructor({ emoji, ...data } = {}) { + super( + toSnakeCase({ + ...data, + emoji: emoji && typeof emoji === 'string' ? resolvePartialEmoji(emoji) : emoji, + }), + ); + } + + /** + * Sets the emoji to display on this option + * @param {ComponentEmojiResolvable} emoji The emoji to display on this option + * @returns {StringSelectMenuOptionBuilder} + */ + setEmoji(emoji) { + if (typeof emoji === 'string') { + return super.setEmoji(resolvePartialEmoji(emoji)); + } + return super.setEmoji(emoji); + } + + /** + * Creates a new select menu option builder from JSON data + * @param {JSONEncodable|APISelectMenuOption} other The other data + * @returns {StringSelectMenuOptionBuilder} + */ + static from(other) { + if (isJSONEncodable(other)) { + return new this(other.toJSON()); + } + return new this(other); + } +} + +module.exports = StringSelectMenuOptionBuilder; + +/** + * @external BuildersSelectMenuOption + * @see {@link https://discord.js.org/#/docs/builders/main/class/SelectMenuOptionBuilder} + */ diff --git a/packages/discord.js/src/structures/ThreadChannel.js b/packages/discord.js/src/structures/ThreadChannel.js index ea10d1f8781c..dc135560f67c 100644 --- a/packages/discord.js/src/structures/ThreadChannel.js +++ b/packages/discord.js/src/structures/ThreadChannel.js @@ -1,6 +1,6 @@ 'use strict'; -const { ChannelType, PermissionFlagsBits, Routes } = require('discord-api-types/v10'); +const { ChannelType, PermissionFlagsBits, Routes, ChannelFlags } = require('discord-api-types/v10'); const { BaseChannel } = require('./BaseChannel'); const TextBasedChannel = require('./interfaces/TextBasedChannel'); const { DiscordjsRangeError, ErrorCodes } = require('../errors'); @@ -457,6 +457,24 @@ class ThreadChannel extends BaseChannel { return this.edit({ appliedTags, reason }); } + /** + * Pins this thread from the forum channel (only applicable to forum threads). + * @param {string} [reason] Reason for pinning + * @returns {Promise} + */ + pin(reason) { + return this.edit({ flags: this.flags.add(ChannelFlags.Pinned), reason }); + } + + /** + * Unpins this thread from the forum channel (only applicable to forum threads). + * @param {string} [reason] Reason for unpinning + * @returns {Promise} + */ + unpin(reason) { + return this.edit({ flags: this.flags.remove(ChannelFlags.Pinned), reason }); + } + /** * Whether the client user is a member of the thread. * @type {boolean} diff --git a/packages/discord.js/src/structures/UserSelectMenuBuilder.js b/packages/discord.js/src/structures/UserSelectMenuBuilder.js new file mode 100644 index 000000000000..39db60fff326 --- /dev/null +++ b/packages/discord.js/src/structures/UserSelectMenuBuilder.js @@ -0,0 +1,33 @@ +'use strict'; + +const { UserSelectMenuBuilder: BuildersUserSelectMenu, isJSONEncodable } = require('@discordjs/builders'); +const { toSnakeCase } = require('../util/Transformers'); + +/** + * Class used to build select menu components to be sent through the API + * @extends {BuildersUserSelectMenu} + */ +class UserSelectMenuBuilder extends BuildersUserSelectMenu { + constructor(data = {}) { + super(toSnakeCase(data)); + } + + /** + * Creates a new select menu builder from json data + * @param {JSONEncodable | APISelectMenuComponent} other The other data + * @returns {UserSelectMenuBuilder} + */ + static from(other) { + if (isJSONEncodable(other)) { + return new this(other.toJSON()); + } + return new this(other); + } +} + +module.exports = UserSelectMenuBuilder; + +/** + * @external BuildersUserSelectMenu + * @see {@link https://discord.js.org/#/docs/builders/main/class/UserSelectMenuBuilder} + */ diff --git a/packages/discord.js/src/structures/UserSelectMenuComponent.js b/packages/discord.js/src/structures/UserSelectMenuComponent.js new file mode 100644 index 000000000000..0acacdfab2e5 --- /dev/null +++ b/packages/discord.js/src/structures/UserSelectMenuComponent.js @@ -0,0 +1,11 @@ +'use strict'; + +const BaseSelectMenuComponent = require('./BaseSelectMenuComponent'); + +/** + * Represents a user select menu component + * @extends {BaseSelectMenuComponent} + */ +class UserSelectMenuComponent extends BaseSelectMenuComponent {} + +module.exports = UserSelectMenuComponent; diff --git a/packages/discord.js/src/structures/UserSelectMenuInteraction.js b/packages/discord.js/src/structures/UserSelectMenuInteraction.js new file mode 100644 index 000000000000..f6d2623a93ab --- /dev/null +++ b/packages/discord.js/src/structures/UserSelectMenuInteraction.js @@ -0,0 +1,55 @@ +'use strict'; + +const { Collection } = require('@discordjs/collection'); +const MessageComponentInteraction = require('./MessageComponentInteraction'); +const Events = require('../util/Events'); + +/** + * Represents a {@link ComponentType.UserSelect} select menu interaction. + * @extends {MessageComponentInteraction} + */ +class UserSelectMenuInteraction extends MessageComponentInteraction { + constructor(client, data) { + super(client, data); + + /** + * An array of the selected user ids + * @type {Snowflake[]} + */ + this.values = data.data.values ?? []; + + /** + * Collection of the selected users + * @type {Collection} + */ + this.users = new Collection(); + + /** + * Collection of the selected members + * @type {Collection} + */ + this.members = new Collection(); + + for (const user of Object.values(data.data.resolved.users)) { + this.users.set(user.id, this.client.users._add(user)); + } + + if (data.data.resolved.members) { + for (const [id, member] of Object.entries(data.data.resolved.members)) { + const user = data.data.resolved.users[id]; + if (!user) { + this.client.emit( + Events.Debug, + `[UserSelectMenuInteraction] Received a member without a user, skipping ${id}`, + ); + + continue; + } + + this.members.set(id, this.guild?.members._add({ user, ...member }) ?? { user, ...member }); + } + } + } +} + +module.exports = UserSelectMenuInteraction; diff --git a/packages/discord.js/src/structures/interfaces/InteractionResponses.js b/packages/discord.js/src/structures/interfaces/InteractionResponses.js index f8f32ebe607d..5d07325756b0 100644 --- a/packages/discord.js/src/structures/interfaces/InteractionResponses.js +++ b/packages/discord.js/src/structures/interfaces/InteractionResponses.js @@ -122,50 +122,56 @@ class InteractionResponses { } /** - * Fetches the initial reply to this interaction. + * Fetches a reply to this interaction. * @see Webhook#fetchMessage + * @param {Snowflake|'@original'} [message='@original'] The response to fetch * @returns {Promise} * @example - * // Fetch the reply to this interaction + * // Fetch the initial reply to this interaction * interaction.fetchReply() * .then(reply => console.log(`Replied with ${reply.content}`)) * .catch(console.error); */ - fetchReply() { - return this.webhook.fetchMessage('@original'); + fetchReply(message = '@original') { + return this.webhook.fetchMessage(message); } /** - * Edits the initial reply to this interaction. + * @typedef {WebhookEditMessageOptions} InteractionEditReplyOptions + * @property {MessageResolvable|'@original'} [message='@original'] The response to edit + */ + + /** + * Edits a reply to this interaction. * @see Webhook#editMessage - * @param {string|MessagePayload|WebhookEditMessageOptions} options The new options for the message + * @param {string|MessagePayload|InteractionEditReplyOptions} options The new options for the message * @returns {Promise} * @example - * // Edit the reply to this interaction + * // Edit the initial reply to this interaction * interaction.editReply('New content') * .then(console.log) * .catch(console.error); */ async editReply(options) { if (!this.deferred && !this.replied) throw new DiscordjsError(ErrorCodes.InteractionNotReplied); - const message = await this.webhook.editMessage('@original', options); + const msg = await this.webhook.editMessage(options.message ?? '@original', options); this.replied = true; - return message; + return msg; } /** - * Deletes the initial reply to this interaction. + * Deletes a reply to this interaction. * @see Webhook#deleteMessage + * @param {MessageResolvable|'@original'} [message='@original'] The response to delete * @returns {Promise} * @example - * // Delete the reply to this interaction + * // Delete the initial reply to this interaction * interaction.deleteReply() * .then(console.log) * .catch(console.error); */ - async deleteReply() { - if (this.ephemeral) throw new DiscordjsError(ErrorCodes.InteractionEphemeralReplied); - await this.webhook.deleteMessage('@original'); + async deleteReply(message = '@original') { + await this.webhook.deleteMessage(message); } /** diff --git a/packages/discord.js/src/structures/interfaces/TextBasedChannel.js b/packages/discord.js/src/structures/interfaces/TextBasedChannel.js index 905b5bac5f92..8de15805b1b1 100644 --- a/packages/discord.js/src/structures/interfaces/TextBasedChannel.js +++ b/packages/discord.js/src/structures/interfaces/TextBasedChannel.js @@ -4,6 +4,7 @@ const { Collection } = require('@discordjs/collection'); const { DiscordSnowflake } = require('@sapphire/snowflake'); const { InteractionType, Routes } = require('discord-api-types/v10'); const { DiscordjsTypeError, DiscordjsError, ErrorCodes } = require('../../errors'); +const { MaxBulkDeletableMessageAge } = require('../../util/Constants'); const InteractionCollector = require('../InteractionCollector'); const MessageCollector = require('../MessageCollector'); const MessagePayload = require('../MessagePayload'); @@ -60,7 +61,7 @@ class TextBasedChannel { * (see [here](https://discord.com/developers/docs/resources/channel#allowed-mentions-object) for more details) * @property {Array>|BufferResolvable[]|Attachment[]|AttachmentBuilder[]} [files] * The files to send with the message. - * @property {ActionRow[]|ActionRowOptions[]} [components] + * @property {ActionRow[]|ActionRowBuilder[]} [components] * Action rows containing interactive components for the message (buttons, select menus) */ @@ -294,7 +295,9 @@ class TextBasedChannel { if (Array.isArray(messages) || messages instanceof Collection) { let messageIds = messages instanceof Collection ? [...messages.keys()] : messages.map(m => m.id ?? m); if (filterOld) { - messageIds = messageIds.filter(id => Date.now() - DiscordSnowflake.timestampFrom(id) < 1_209_600_000); + messageIds = messageIds.filter( + id => Date.now() - DiscordSnowflake.timestampFrom(id) < MaxBulkDeletableMessageAge, + ); } if (messageIds.length === 0) return new Collection(); if (messageIds.length === 1) { diff --git a/packages/discord.js/src/util/APITypes.js b/packages/discord.js/src/util/APITypes.js index cfde0d4dbe95..648ac5882880 100644 --- a/packages/discord.js/src/util/APITypes.js +++ b/packages/discord.js/src/util/APITypes.js @@ -98,6 +98,11 @@ * @see {@link https://discord-api-types.dev/api/discord-api-types-v10/interface/APIMessage} */ +/** + * @external APIMessageActionRowComponent + * @see {@link https://discord-api-types.dev/api/discord-api-types-v10#APIMessageActionRowComponent} + */ + /** * @external APIMessageComponent * @see {@link https://discord-api-types.dev/api/discord-api-types-v10#APIMessageComponent} @@ -168,6 +173,26 @@ * @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/ApplicationFlags} */ +/** + * @external AutoModerationActionType + * @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/AutoModerationActionType} + */ + +/** + * @external AutoModerationRuleEventType + * @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/AutoModerationRuleEventType} + */ + +/** + * @external AutoModerationRuleTriggerType + * @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/AutoModerationRuleTriggerType} + */ + +/** + * @external AutoModerationRuleKeywordPresetType + * @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/AutoModerationRuleKeywordPresetType} + */ + /** * @external AuditLogEvent * @see {@link https://discord-api-types.dev/api/discord-api-types-v10/enum/AuditLogEvent} diff --git a/packages/discord.js/src/util/Components.js b/packages/discord.js/src/util/Components.js index 02411f42b11c..42bee7f2afa0 100644 --- a/packages/discord.js/src/util/Components.js +++ b/packages/discord.js/src/util/Components.js @@ -82,10 +82,18 @@ function createComponent(data) { return new ActionRow(data); case ComponentType.Button: return new ButtonComponent(data); - case ComponentType.SelectMenu: - return new SelectMenuComponent(data); + case ComponentType.StringSelect: + return new StringSelectMenuComponent(data); case ComponentType.TextInput: return new TextInputComponent(data); + case ComponentType.UserSelect: + return new UserSelectMenuComponent(data); + case ComponentType.RoleSelect: + return new RoleSelectMenuComponent(data); + case ComponentType.MentionableSelect: + return new MentionableSelectMenuComponent(data); + case ComponentType.ChannelSelect: + return new ChannelSelectMenuComponent(data); default: return new Component(data); } @@ -106,10 +114,18 @@ function createComponentBuilder(data) { return new ActionRowBuilder(data); case ComponentType.Button: return new ButtonBuilder(data); - case ComponentType.SelectMenu: - return new SelectMenuBuilder(data); + case ComponentType.StringSelect: + return new StringSelectMenuBuilder(data); case ComponentType.TextInput: return new TextInputBuilder(data); + case ComponentType.UserSelect: + return new UserSelectMenuBuilder(data); + case ComponentType.RoleSelect: + return new RoleSelectMenuBuilder(data); + case ComponentType.MentionableSelect: + return new MentionableSelectMenuBuilder(data); + case ComponentType.ChannelSelect: + return new ChannelSelectMenuBuilder(data); default: return new ComponentBuilder(data); } @@ -121,11 +137,19 @@ const ActionRow = require('../structures/ActionRow'); const ActionRowBuilder = require('../structures/ActionRowBuilder'); const ButtonBuilder = require('../structures/ButtonBuilder'); const ButtonComponent = require('../structures/ButtonComponent'); +const ChannelSelectMenuBuilder = require('../structures/ChannelSelectMenuBuilder'); +const ChannelSelectMenuComponent = require('../structures/ChannelSelectMenuComponent'); const Component = require('../structures/Component'); -const SelectMenuBuilder = require('../structures/SelectMenuBuilder'); -const SelectMenuComponent = require('../structures/SelectMenuComponent'); +const MentionableSelectMenuBuilder = require('../structures/MentionableSelectMenuBuilder'); +const MentionableSelectMenuComponent = require('../structures/MentionableSelectMenuComponent'); +const RoleSelectMenuBuilder = require('../structures/RoleSelectMenuBuilder'); +const RoleSelectMenuComponent = require('../structures/RoleSelectMenuComponent'); +const StringSelectMenuBuilder = require('../structures/StringSelectMenuBuilder'); +const StringSelectMenuComponent = require('../structures/StringSelectMenuComponent'); const TextInputBuilder = require('../structures/TextInputBuilder'); const TextInputComponent = require('../structures/TextInputComponent'); +const UserSelectMenuBuilder = require('../structures/UserSelectMenuBuilder'); +const UserSelectMenuComponent = require('../structures/UserSelectMenuComponent'); /** * @external JSONEncodable diff --git a/packages/discord.js/src/util/Constants.js b/packages/discord.js/src/util/Constants.js index 61a5d191eac7..b43e610ba8a2 100644 --- a/packages/discord.js/src/util/Constants.js +++ b/packages/discord.js/src/util/Constants.js @@ -1,9 +1,16 @@ 'use strict'; -const { ChannelType, MessageType } = require('discord-api-types/v10'); +const { ChannelType, MessageType, ComponentType } = require('discord-api-types/v10'); + +/** + * Max bulk deletable message age + * @typedef {number} MaxBulkDeletableMessageAge + */ +exports.MaxBulkDeletableMessageAge = 1_209_600_000; /** * The name of an item to be swept in Sweepers + * * `autoModerationRules` * * `applicationCommands` - both global and guild commands * * `bans` * * `emojis` @@ -21,6 +28,7 @@ const { ChannelType, MessageType } = require('discord-api-types/v10'); * @typedef {string} SweeperKey */ exports.SweeperKeys = [ + 'autoModerationRules', 'applicationCommands', 'bans', 'emojis', @@ -113,11 +121,30 @@ exports.ThreadChannelTypes = [ChannelType.AnnouncementThread, ChannelType.Public */ exports.VoiceBasedChannelTypes = [ChannelType.GuildVoice, ChannelType.GuildStageVoice]; +/** + * The types of select menus. The available types are: + * * {@link ComponentType.StringSelect} + * * {@link ComponentType.UserSelect} + * * {@link ComponentType.RoleSelect} + * * {@link ComponentType.MentionableSelect} + * * {@link ComponentType.ChannelSelect} + * @typedef {ComponentType[]} SelectMenuTypes + */ +exports.SelectMenuTypes = [ + ComponentType.StringSelect, + ComponentType.UserSelect, + ComponentType.RoleSelect, + ComponentType.MentionableSelect, + ComponentType.ChannelSelect, +]; + /** * @typedef {Object} Constants Constants that can be used in an enum or object-like way. + * @property {number} MaxBulkDeletableMessageAge Max bulk deletable message age * @property {SweeperKey[]} SweeperKeys The possible names of items that can be swept in sweepers * @property {NonSystemMessageTypes} NonSystemMessageTypes The types of messages that are not deemed a system type * @property {TextBasedChannelTypes} TextBasedChannelTypes The types of channels that are text-based * @property {ThreadChannelTypes} ThreadChannelTypes The types of channels that are threads * @property {VoiceBasedChannelTypes} VoiceBasedChannelTypes The types of channels that are voice-based + * @property {SelectMenuTypes} SelectMenuTypes The types of components that are select menus. */ diff --git a/packages/discord.js/src/util/Events.js b/packages/discord.js/src/util/Events.js index 38f81a0a8513..630034a10af5 100644 --- a/packages/discord.js/src/util/Events.js +++ b/packages/discord.js/src/util/Events.js @@ -79,6 +79,10 @@ */ module.exports = { ApplicationCommandPermissionsUpdate: 'applicationCommandPermissionsUpdate', + AutoModerationActionExecution: 'autoModerationActionExecution', + AutoModerationRuleCreate: 'autoModerationRuleCreate', + AutoModerationRuleDelete: 'autoModerationRuleDelete', + AutoModerationRuleUpdate: 'autoModerationRuleUpdate', CacheSweep: 'cacheSweep', ChannelCreate: 'channelCreate', ChannelDelete: 'channelDelete', diff --git a/packages/discord.js/src/util/Sweepers.js b/packages/discord.js/src/util/Sweepers.js index 83892592ac6f..7796ddc99a96 100644 --- a/packages/discord.js/src/util/Sweepers.js +++ b/packages/discord.js/src/util/Sweepers.js @@ -78,6 +78,16 @@ class Sweepers { return guildCommands + globalCommands; } + /** + * Sweeps all auto moderation rules and removes the ones which are indicated by the filter. + * @param {Function} filter The function used to determine + * which auto moderation rules will be removed from the caches + * @returns {number} Amount of auto moderation rules that were removed from the caches + */ + sweepAutoModerationRules(filter) { + return this._sweepGuildDirectProp('autoModerationRules', filter).items; + } + /** * Sweeps all guild bans and removes the ones which are indicated by the filter. * @param {Function} filter The function used to determine which bans will be removed from the caches. diff --git a/packages/discord.js/src/util/Transformers.js b/packages/discord.js/src/util/Transformers.js index 63edd0689549..6b096dfc9f9e 100644 --- a/packages/discord.js/src/util/Transformers.js +++ b/packages/discord.js/src/util/Transformers.js @@ -1,5 +1,6 @@ 'use strict'; +const { isJSONEncodable } = require('@discordjs/util'); const snakeCase = require('lodash.snakecase'); /** @@ -10,6 +11,7 @@ const snakeCase = require('lodash.snakecase'); function toSnakeCase(obj) { if (typeof obj !== 'object' || !obj) return obj; if (obj instanceof Date) return obj; + if (isJSONEncodable(obj)) return toSnakeCase(obj.toJSON()); if (Array.isArray(obj)) return obj.map(toSnakeCase); return Object.fromEntries(Object.entries(obj).map(([key, value]) => [snakeCase(key), toSnakeCase(value)])); } diff --git a/packages/discord.js/src/util/Util.js b/packages/discord.js/src/util/Util.js index dc722e13f636..44c0e1e6a4b6 100644 --- a/packages/discord.js/src/util/Util.js +++ b/packages/discord.js/src/util/Util.js @@ -140,6 +140,7 @@ function escapeMarkdown( }) .join(inlineCode ? '\\`' : '`'); } + if (escape) text = escapeEscape(text); if (inlineCode) text = escapeInlineCode(text); if (codeBlock) text = escapeCodeBlock(text); if (italic) text = escapeItalic(text); @@ -147,7 +148,6 @@ function escapeMarkdown( if (underline) text = escapeUnderline(text); if (strikethrough) text = escapeStrikethrough(text); if (spoiler) text = escapeSpoiler(text); - if (escape) text = escapeEscape(text); if (heading) text = escapeHeading(text); if (bulletedList) text = escapeBulletedList(text); if (numberedList) text = escapeNumberedList(text); diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index e2586331a58d..eaa6e83bad87 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -14,14 +14,17 @@ import { italic, quote, roleMention, - SelectMenuBuilder as BuilderSelectMenuComponent, + ChannelSelectMenuBuilder as BuilderChannelSelectMenuComponent, + MentionableSelectMenuBuilder as BuilderMentionableSelectMenuComponent, + RoleSelectMenuBuilder as BuilderRoleSelectMenuComponent, + StringSelectMenuBuilder as BuilderStringSelectMenuComponent, + UserSelectMenuBuilder as BuilderUserSelectMenuComponent, TextInputBuilder as BuilderTextInputComponent, SelectMenuOptionBuilder as BuildersSelectMenuOption, spoiler, strikethrough, time, TimestampStyles, - TimestampStylesString, underscore, userMention, ModalActionRowComponentBuilder, @@ -35,7 +38,6 @@ import { Collection } from '@discordjs/collection'; import { BaseImageURLOptions, ImageURLOptions, RawFile, REST, RESTOptions } from '@discordjs/rest'; import { APIActionRowComponent, - APIApplicationCommand, APIApplicationCommandInteractionData, APIApplicationCommandOption, APIAuditLogChange, @@ -126,6 +128,24 @@ import { TextChannelType, ChannelFlags, SortOrderType, + APIMessageStringSelectInteractionData, + APIMessageUserSelectInteractionData, + APIStringSelectComponent, + APIUserSelectComponent, + APIRoleSelectComponent, + APIMentionableSelectComponent, + APIChannelSelectComponent, + APIGuildMember, + APIMessageRoleSelectInteractionData, + APIMessageMentionableSelectInteractionData, + APIMessageChannelSelectInteractionData, + AutoModerationRuleKeywordPresetType, + AutoModerationActionType, + AutoModerationRuleEventType, + AutoModerationRuleTriggerType, + AuditLogRuleTriggerType, + GatewayAutoModerationActionExecutionDispatchData, + APIAutoModerationRule, } from 'discord-api-types/v10'; import { ChildProcess } from 'node:child_process'; import { EventEmitter } from 'node:events'; @@ -158,13 +178,11 @@ import { RawInviteData, RawInviteGuildData, RawInviteStageInstance, - RawAttachmentData, RawMessageButtonInteractionData, RawMessageComponentInteractionData, RawMessageData, RawMessagePayloadData, RawMessageReactionData, - RawMessageSelectMenuInteractionData, RawOAuth2GuildData, RawPartialGroupDMChannelData, RawPartialMessageData, @@ -242,7 +260,11 @@ export interface BaseComponentData { export type MessageActionRowComponentData = | JSONEncodable | ButtonComponentData - | SelectMenuComponentData; + | StringSelectMenuComponentData + | UserSelectMenuComponentData + | RoleSelectMenuComponentData + | MentionableSelectMenuComponentData + | ChannelSelectMenuComponentData; export type ModalActionRowComponentData = JSONEncodable | TextInputComponentData; @@ -269,7 +291,13 @@ export class ActionRowBuilder extends Component< @@ -298,6 +326,56 @@ export abstract class AnonymousGuild extends BaseGuild { public splashURL(options?: ImageURLOptions): string | null; } +export class AutoModerationActionExecution { + private constructor(data: GatewayAutoModerationActionExecutionDispatchData, guild: Guild); + public guild: Guild; + public action: AutoModerationAction; + public ruleId: Snowflake; + public ruleTriggerType: AutoModerationRuleTriggerType; + public userId: Snowflake; + public channelId: Snowflake | null; + public messageId: Snowflake | null; + public alertSystemMessageId: Snowflake | null; + public content: string; + public matchedKeyword: string | null; + public matchedContent: string | null; + public get autoModerationRule(): AutoModerationRule | null; +} + +export class AutoModerationRule extends Base { + private constructor(client: Client, data: APIAutoModerationRule, guild: Guild); + public id: Snowflake; + public guild: Guild; + public name: string; + public creatorId: Snowflake; + public eventType: AutoModerationRuleEventType; + public triggerType: AutoModerationRuleTriggerType; + public triggerMetadata: AutoModerationTriggerMetadata; + public actions: AutoModerationAction[]; + public enabled: boolean; + public exemptRoles: Collection; + public exemptChannels: Collection; + public edit(options: AutoModerationRuleEditOptions): Promise; + public delete(reason?: string): Promise; + public setName(name: string, reason?: string): Promise; + public setEventType(eventType: AutoModerationRuleEventType, reason?: string): Promise; + public setKeywordFilter(keywordFilter: string[], reason?: string): Promise; + public setRegexPatterns(regexPatterns: string[], reason?: string): Promise; + public setPresets(presets: AutoModerationRuleKeywordPresetType[], reason?: string): Promise; + public setAllowList(allowList: string[], reason?: string): Promise; + public setMentionTotalLimit(mentionTotalLimit: number, reason?: string): Promise; + public setActions(actions: AutoModerationActionOptions, reason?: string): Promise; + public setEnabled(enabled?: boolean, reason?: string): Promise; + public setExemptRoles( + roles: Collection | RoleResolvable[], + reason?: string, + ): Promise; + public setExemptChannels( + channels: Collection | GuildChannelResolvable[], + reason?: string, + ): Promise; +} + export abstract class Application extends Base { protected constructor(client: Client, data: RawApplicationData); public get createdAt(): Date; @@ -377,6 +455,8 @@ export class ApplicationFlagsBitField extends BitField { public static resolve(bit?: BitFieldResolvable): number; } +export type AutoModerationRuleResolvable = AutoModerationRule | Snowflake; + export abstract class Base { public constructor(client: Client); public readonly client: Client; @@ -439,11 +519,11 @@ export abstract class CommandInteraction e options: InteractionDeferReplyOptions & { fetchReply: true }, ): Promise>>; public deferReply(options?: InteractionDeferReplyOptions): Promise>>; - public deleteReply(): Promise; + public deleteReply(message?: MessageResolvable | '@original'): Promise; public editReply( - options: string | MessagePayload | WebhookEditMessageOptions, + options: string | MessagePayload | InteractionEditReplyOptions, ): Promise>>; - public fetchReply(): Promise>>; + public fetchReply(message?: Snowflake | '@original'): Promise>>; public followUp(options: string | MessagePayload | InteractionReplyOptions): Promise>>; public reply(options: InteractionReplyOptions & { fetchReply: true }): Promise>>; public reply( @@ -604,8 +684,8 @@ export class ButtonBuilder extends BuilderButtonComponent { public override setEmoji(emoji: ComponentEmojiResolvable): this; } -export class SelectMenuBuilder extends BuilderSelectMenuComponent { - public constructor(data?: Partial); +export class StringSelectMenuBuilder extends BuilderStringSelectMenuComponent { + public constructor(data?: Partial); private static normalizeEmoji( selectMenuOption: JSONEncodable | SelectMenuComponentOptionData, ): (APISelectMenuOption | SelectMenuOptionBuilder)[]; @@ -615,7 +695,34 @@ export class SelectMenuBuilder extends BuilderSelectMenuComponent { public override setOptions( ...options: RestOrArray ): this; - public static from(other: JSONEncodable | APISelectMenuComponent): SelectMenuBuilder; + public static from(other: JSONEncodable | APISelectMenuComponent): StringSelectMenuBuilder; +} + +export { + /** @deprecated Use {@link StringSelectMenuBuilder} instead */ + StringSelectMenuBuilder as SelectMenuBuilder, +}; + +export class UserSelectMenuBuilder extends BuilderUserSelectMenuComponent { + public constructor(data?: Partial); + public static from(other: JSONEncodable | APISelectMenuComponent): UserSelectMenuBuilder; +} + +export class RoleSelectMenuBuilder extends BuilderRoleSelectMenuComponent { + public constructor(data?: Partial); + public static from(other: JSONEncodable | APISelectMenuComponent): RoleSelectMenuBuilder; +} + +export class MentionableSelectMenuBuilder extends BuilderMentionableSelectMenuComponent { + public constructor(data?: Partial); + public static from( + other: JSONEncodable | APISelectMenuComponent, + ): MentionableSelectMenuBuilder; +} + +export class ChannelSelectMenuBuilder extends BuilderChannelSelectMenuComponent { + public constructor(data?: Partial); + public static from(other: JSONEncodable | APISelectMenuComponent): ChannelSelectMenuBuilder; } export class SelectMenuOptionBuilder extends BuildersSelectMenuOption { @@ -639,16 +746,34 @@ export class TextInputComponent extends Component { public get value(): string; } -export class SelectMenuComponent extends Component { - private constructor(data: APISelectMenuComponent); +export class BaseSelectMenuComponent extends Component { + protected constructor(data: Data); public get placeholder(): string | null; public get maxValues(): number | null; public get minValues(): number | null; public get customId(): string; public get disabled(): boolean | null; +} + +export class StringSelectMenuComponent extends BaseSelectMenuComponent { public get options(): APISelectMenuOption[]; } +export { + /** @deprecated Use {@link StringSelectMenuComponent} instead */ + StringSelectMenuComponent as SelectMenuComponent, +}; + +export class UserSelectMenuComponent extends BaseSelectMenuComponent {} + +export class RoleSelectMenuComponent extends BaseSelectMenuComponent {} + +export class MentionableSelectMenuComponent extends BaseSelectMenuComponent {} + +export class ChannelSelectMenuComponent extends BaseSelectMenuComponent { + public getChannelTypes(): ChannelType[] | null; +} + export interface EmbedData { title?: string; type?: EmbedType; @@ -766,6 +891,7 @@ export class Client extends BaseClient { private presence: ClientPresence; private _eval(script: string): unknown; private _validateOptions(options: ClientOptions): void; + private get _censoredToken(): string | null; public application: If; public channels: ChannelManager; @@ -1090,6 +1216,7 @@ export class Guild extends AnonymousGuild { public maxVideoChannelUsers: number | null; public approximateMemberCount: number | null; public approximatePresenceCount: number | null; + public autoModerationRules: AutoModerationRuleManager; public available: boolean; public bans: GuildBanManager; public channels: GuildChannelManager; @@ -1188,6 +1315,7 @@ export class GuildAuditLogs private webhooks: Collection; private integrations: Collection; private guildScheduledEvents: Collection; + private autoModerationRules: Collection; public entries: Collection>; public toJSON(): unknown; } @@ -1500,7 +1628,7 @@ export type Interaction = | ChatInputCommandInteraction | MessageContextMenuCommandInteraction | UserContextMenuCommandInteraction - | SelectMenuInteraction + | AnySelectMenuInteraction | ButtonInteraction | AutocompleteInteraction | ModalSubmitInteraction; @@ -1549,7 +1677,14 @@ export class BaseInteraction extends Base public isMessageContextMenuCommand(): this is MessageContextMenuCommandInteraction; public isModalSubmit(): this is ModalSubmitInteraction; public isUserContextMenuCommand(): this is UserContextMenuCommandInteraction; - public isSelectMenu(): this is SelectMenuInteraction; + /** @deprecated Use {@link BaseInteraction#isStringSelectMenu} instead */ + public isSelectMenu(): this is StringSelectMenuInteraction; + public isAnySelectMenu(): this is AnySelectMenuInteraction; + public isStringSelectMenu(): this is StringSelectMenuInteraction; + public isUserSelectMenu(): this is UserSelectMenuInteraction; + public isRoleSelectMenu(): this is RoleSelectMenuInteraction; + public isMentionableSelectMenu(): this is MentionableSelectMenuInteraction; + public isChannelSelectMenu(): this is ChannelSelectMenuInteraction; public isRepliable(): this is RepliableInteraction; } @@ -1672,7 +1807,11 @@ export type AwaitMessageCollectorOptionsParams { Button: ButtonInteraction; - SelectMenu: SelectMenuInteraction; + StringSelectMenu: StringSelectMenuInteraction; + UserSelectMenu: UserSelectMenuInteraction; + RoleSelectMenu: RoleSelectMenuInteraction; + MentionableSelectMenu: MentionableSelectMenuInteraction; + ChannelSelectMenu: ChannelSelectMenuInteraction; ActionRow: MessageComponentInteraction; } @@ -1680,7 +1819,11 @@ export type WrapBooleanCache = If; export interface MappedInteractionTypes { [ComponentType.Button]: ButtonInteraction>; - [ComponentType.SelectMenu]: SelectMenuInteraction>; + [ComponentType.StringSelect]: StringSelectMenuInteraction>; + [ComponentType.UserSelect]: UserSelectMenuInteraction>; + [ComponentType.RoleSelect]: RoleSelectMenuInteraction>; + [ComponentType.MentionableSelect]: MentionableSelectMenuInteraction>; + [ComponentType.ChannelSelect]: ChannelSelectMenuInteraction>; } export class Message extends Base { @@ -1692,6 +1835,7 @@ export class Message extends Base { public applicationId: Snowflake | null; public attachments: Collection; public author: User; + public get bulkDeletable(): boolean; public get channel(): If; public channelId: Snowflake; public get cleanContent(): string; @@ -1829,11 +1973,11 @@ export class MessageComponentInteraction e options: InteractionDeferUpdateOptions & { fetchReply: true }, ): Promise>>; public deferUpdate(options?: InteractionDeferUpdateOptions): Promise>>; - public deleteReply(): Promise; + public deleteReply(message?: MessageResolvable | '@original'): Promise; public editReply( - options: string | MessagePayload | WebhookEditMessageOptions, + options: string | MessagePayload | InteractionEditReplyOptions, ): Promise>>; - public fetchReply(): Promise>>; + public fetchReply(message?: Snowflake | '@original'): Promise>>; public followUp(options: string | MessagePayload | InteractionReplyOptions): Promise>>; public reply(options: InteractionReplyOptions & { fetchReply: true }): Promise>>; public reply( @@ -2019,15 +2163,15 @@ export class ModalSubmitInteraction extend public reply( options: string | MessagePayload | InteractionReplyOptions, ): Promise>>; - public deleteReply(): Promise; + public deleteReply(message?: MessageResolvable | '@original'): Promise; public editReply( - options: string | MessagePayload | WebhookEditMessageOptions, + options: string | MessagePayload | InteractionEditReplyOptions, ): Promise>>; public deferReply( options: InteractionDeferReplyOptions & { fetchReply: true }, ): Promise>>; public deferReply(options?: InteractionDeferReplyOptions): Promise>>; - public fetchReply(): Promise>>; + public fetchReply(message?: Snowflake | '@original'): Promise>>; public followUp(options: string | MessagePayload | InteractionReplyOptions): Promise>>; public deferUpdate( options: InteractionDeferUpdateOptions & { fetchReply: true }, @@ -2253,22 +2397,129 @@ export class Role extends Base { public toString(): RoleMention; } -export class SelectMenuInteraction extends MessageComponentInteraction { - public constructor(client: Client, data: RawMessageSelectMenuInteractionData); +export class StringSelectMenuInteraction< + Cached extends CacheType = CacheType, +> extends MessageComponentInteraction { + public constructor(client: Client, data: APIMessageStringSelectInteractionData); public get component(): CacheTypeReducer< Cached, - SelectMenuComponent, - APISelectMenuComponent, - SelectMenuComponent | APISelectMenuComponent, - SelectMenuComponent | APISelectMenuComponent + StringSelectMenuComponent, + APIStringSelectComponent, + StringSelectMenuComponent | APIStringSelectComponent, + StringSelectMenuComponent | APIStringSelectComponent >; - public componentType: ComponentType.SelectMenu; + public componentType: ComponentType.StringSelect; public values: string[]; - public inGuild(): this is SelectMenuInteraction<'raw' | 'cached'>; - public inCachedGuild(): this is SelectMenuInteraction<'cached'>; - public inRawGuild(): this is SelectMenuInteraction<'raw'>; + public inGuild(): this is StringSelectMenuInteraction<'raw' | 'cached'>; + public inCachedGuild(): this is StringSelectMenuInteraction<'cached'>; + public inRawGuild(): this is StringSelectMenuInteraction<'raw'>; +} + +export { + /** @deprecated Use {@link StringSelectMenuInteraction} instead */ + StringSelectMenuInteraction as SelectMenuInteraction, +}; + +export class UserSelectMenuInteraction< + Cached extends CacheType = CacheType, +> extends MessageComponentInteraction { + public constructor(client: Client, data: APIMessageUserSelectInteractionData); + public get component(): CacheTypeReducer< + Cached, + UserSelectMenuComponent, + APIUserSelectComponent, + UserSelectMenuComponent | APIUserSelectComponent, + UserSelectMenuComponent | APIUserSelectComponent + >; + public componentType: ComponentType.UserSelect; + public values: Snowflake[]; + public users: Collection; + public members: Collection< + Snowflake, + CacheTypeReducer + >; + public inGuild(): this is UserSelectMenuInteraction<'raw' | 'cached'>; + public inCachedGuild(): this is UserSelectMenuInteraction<'cached'>; + public inRawGuild(): this is UserSelectMenuInteraction<'raw'>; +} + +export class RoleSelectMenuInteraction< + Cached extends CacheType = CacheType, +> extends MessageComponentInteraction { + public constructor(client: Client, data: APIMessageRoleSelectInteractionData); + public get component(): CacheTypeReducer< + Cached, + RoleSelectMenuComponent, + APIRoleSelectComponent, + RoleSelectMenuComponent | APIRoleSelectComponent, + RoleSelectMenuComponent | APIRoleSelectComponent + >; + public componentType: ComponentType.RoleSelect; + public values: Snowflake[]; + public roles: Collection>; + public inGuild(): this is RoleSelectMenuInteraction<'raw' | 'cached'>; + public inCachedGuild(): this is RoleSelectMenuInteraction<'cached'>; + public inRawGuild(): this is RoleSelectMenuInteraction<'raw'>; } +export class MentionableSelectMenuInteraction< + Cached extends CacheType = CacheType, +> extends MessageComponentInteraction { + public constructor(client: Client, data: APIMessageMentionableSelectInteractionData); + public get component(): CacheTypeReducer< + Cached, + MentionableSelectMenuComponent, + APIMentionableSelectComponent, + MentionableSelectMenuComponent | APIMentionableSelectComponent, + MentionableSelectMenuComponent | APIMentionableSelectComponent + >; + public componentType: ComponentType.MentionableSelect; + public values: Snowflake[]; + public users: Collection; + public members: Collection< + Snowflake, + CacheTypeReducer + >; + public roles: Collection>; + public inGuild(): this is MentionableSelectMenuInteraction<'raw' | 'cached'>; + public inCachedGuild(): this is MentionableSelectMenuInteraction<'cached'>; + public inRawGuild(): this is MentionableSelectMenuInteraction<'raw'>; +} + +export class ChannelSelectMenuInteraction< + Cached extends CacheType = CacheType, +> extends MessageComponentInteraction { + public constructor(client: Client, data: APIMessageChannelSelectInteractionData); + public get component(): CacheTypeReducer< + Cached, + ChannelSelectMenuComponent, + APIChannelSelectComponent, + ChannelSelectMenuComponent | APIChannelSelectComponent, + ChannelSelectMenuComponent | APIChannelSelectComponent + >; + public componentType: ComponentType.ChannelSelect; + public values: Snowflake[]; + public channels: Collection< + Snowflake, + CacheTypeReducer + >; + public inGuild(): this is ChannelSelectMenuInteraction<'raw' | 'cached'>; + public inCachedGuild(): this is ChannelSelectMenuInteraction<'cached'>; + public inRawGuild(): this is ChannelSelectMenuInteraction<'raw'>; +} + +// Ideally this should be named SelectMenuInteraction, but that's the name of the "old" StringSelectMenuInteraction, meaning +// the type name is reserved as a re-export to prevent a breaking change from being made, as such: +// TODO: Rename this to SelectMenuInteraction in the next major +export type AnySelectMenuInteraction = + | StringSelectMenuInteraction + | UserSelectMenuInteraction + | RoleSelectMenuInteraction + | MentionableSelectMenuInteraction + | ChannelSelectMenuInteraction; + +export type SelectMenuType = APISelectMenuComponent['type']; + export interface ShardEventTypes { death: [process: ChildProcess | Worker]; disconnect: []; @@ -2481,6 +2732,12 @@ export class Sweepers { SweeperDefinitions['applicationCommands'][1] >, ): number; + public sweepAutoModerationRules( + filter: CollectionSweepFilter< + SweeperDefinitions['autoModerationRules'][0], + SweeperDefinitions['autoModerationRules'][1] + >, + ): number; public sweepBans(filter: CollectionSweepFilter): number; public sweepEmojis( filter: CollectionSweepFilter, @@ -2639,7 +2896,10 @@ export class ThreadChannel extends TextBasedCha public setInvitable(invitable?: boolean, reason?: string): Promise; public setLocked(locked?: boolean, reason?: string): Promise; public setName(name: string, reason?: string): Promise; + // The following 3 methods can only be run on forum threads. public setAppliedTags(appliedTags: Snowflake[], reason?: string): Promise>; + public pin(reason?: string): Promise>; + public unpin(reason?: string): Promise>; public toString(): ChannelMention; } @@ -2769,14 +3029,22 @@ export function parseWebhookURL(url: string): WebhookClientDataIdWithToken | nul export interface MappedComponentBuilderTypes { [ComponentType.Button]: ButtonBuilder; - [ComponentType.SelectMenu]: SelectMenuBuilder; + [ComponentType.StringSelect]: StringSelectMenuBuilder; + [ComponentType.UserSelect]: UserSelectMenuBuilder; + [ComponentType.RoleSelect]: RoleSelectMenuBuilder; + [ComponentType.MentionableSelect]: MentionableSelectMenuBuilder; + [ComponentType.ChannelSelect]: ChannelSelectMenuBuilder; [ComponentType.ActionRow]: ActionRowBuilder; [ComponentType.TextInput]: TextInputBuilder; } export interface MappedComponentTypes { [ComponentType.Button]: ButtonComponent; - [ComponentType.SelectMenu]: SelectMenuComponent; + [ComponentType.StringSelect]: StringSelectMenuComponent; + [ComponentType.UserSelect]: UserSelectMenuComponent; + [ComponentType.RoleSelect]: RoleSelectMenuComponent; + [ComponentType.MentionableSelect]: MentionableSelectMenuComponent; + [ComponentType.ChannelSelect]: ChannelSelectMenuComponent; [ComponentType.ActionRow]: ActionRowComponent; [ComponentType.TextInput]: TextInputComponent; } @@ -2994,7 +3262,8 @@ export class WebSocketShard extends EventEmitter { private sequence: number; private closeSequence: number; private sessionId: string | null; - private lastPingTimestamp: number; + private resumeURL: string | null; + public lastPingTimestamp: number; private lastHeartbeatAcked: boolean; private readonly ratelimit: { queue: unknown[]; @@ -3109,11 +3378,13 @@ export type NonSystemMessageType = | MessageType.ContextMenuCommand; export const Constants: { + MaxBulkDeletableMessageAge: 1_209_600_000; SweeperKeys: SweeperKey[]; NonSystemMessageTypes: NonSystemMessageType[]; TextBasedChannelTypes: TextBasedChannelTypes[]; ThreadChannelTypes: ThreadChannelType[]; VoiceBasedChannelTypes: VoiceBasedChannelTypes[]; + SelectMenuTypes: SelectMenuType[]; }; export const version: string; @@ -3246,6 +3517,7 @@ export enum DiscordjsErrorCodes { InteractionAlreadyReplied = 'InteractionAlreadyReplied', InteractionNotReplied = 'InteractionNotReplied', + /** @deprecated */ InteractionEphemeralReplied = 'InteractionEphemeralReplied', CommandInteractionOptionNotFound = 'CommandInteractionOptionNotFound', @@ -3405,6 +3677,23 @@ export class ApplicationCommandPermissionsManager< private permissionsPath(guildId: Snowflake, commandId?: Snowflake): string; } +export class AutoModerationRuleManager extends CachedManager< + Snowflake, + AutoModerationRule, + AutoModerationRuleResolvable +> { + private constructor(guild: Guild, iterable: unknown); + public guild: Guild; + public create(options: AutoModerationRuleCreateOptions): Promise; + public edit( + autoModerationRule: AutoModerationRuleResolvable, + options: AutoModerationRuleEditOptions, + ): Promise; + public fetch(options: AutoModerationRuleResolvable | FetchAutoModerationRuleOptions): Promise; + public fetch(options?: FetchAutoModerationRulesOptions): Promise>; + public delete(autoModerationRule: AutoModerationRuleResolvable, reason?: string): Promise; +} + export class BaseGuildEmojiManager extends CachedManager { protected constructor(client: Client, iterable?: Iterable); public resolveIdentifier(emoji: EmojiIdentifierResolvable): string | null; @@ -4157,6 +4446,24 @@ export interface AuditLogChange { new?: APIAuditLogChange['new_value']; } +export interface AutoModerationAction { + type: AutoModerationActionType; + metadata: AutoModerationActionMetadata; +} + +export interface AutoModerationActionMetadata { + channelId: Snowflake | null; + durationSeconds: number | null; +} + +export interface AutoModerationTriggerMetadata { + keywordFilter: string[]; + regexPatterns: string[]; + presets: AutoModerationRuleKeywordPresetType[]; + allowList: string[]; + mentionTotalLimit: number | null; +} + export type AwaitMessageComponentOptions = Omit< MessageComponentCollectorOptions, 'max' | 'maxComponents' | 'maxUsers' @@ -4208,6 +4515,7 @@ export type BitFieldResolvable = export type BufferResolvable = Buffer | string; export interface Caches { + AutoModerationRuleManager: [manager: typeof AutoModerationRuleManager, holds: typeof AutoModerationRule]; ApplicationCommandManager: [manager: typeof ApplicationCommandManager, holds: typeof ApplicationCommand]; BaseGuildEmojiManager: [manager: typeof BaseGuildEmojiManager, holds: typeof GuildEmoji]; GuildEmojiManager: [manager: typeof GuildEmojiManager, holds: typeof GuildEmoji]; @@ -4300,6 +4608,13 @@ export interface WebhookCreateOptions extends ChannelWebhookCreateOptions { export interface ClientEvents { applicationCommandPermissionsUpdate: [data: ApplicationCommandPermissionsUpdateData]; + autoModerationActionExecution: [autoModerationActionExecution: AutoModerationActionExecution]; + autoModerationRuleCreate: [autoModerationRule: AutoModerationRule]; + autoModerationRuleDelete: [autoModerationRule: AutoModerationRule]; + autoModerationRuleUpdate: [ + oldAutoModerationRule: AutoModerationRule | null, + newAutoModerationRule: AutoModerationRule, + ]; cacheSweep: [message: string]; channelCreate: [channel: NonThreadGuildBasedChannel]; channelDelete: [channel: DMChannel | NonThreadGuildBasedChannel]; @@ -4515,6 +4830,10 @@ export declare const Colors: { export enum Events { ApplicationCommandPermissionsUpdate = 'applicationCommandPermissionsUpdate', + AutoModerationActionExecution = 'autoModerationActionExecution', + AutoModerationRuleCreate = 'autoModerationRuleCreate', + AutoModerationRuleDelete = 'autoModerationRuleDelete', + AutoModerationRuleUpdate = 'autoModerationRuleUpdate', ClientReady = 'ready', GuildCreate = 'guildCreate', GuildDelete = 'guildDelete', @@ -4695,6 +5014,14 @@ export interface FetchArchivedThreadOptions { limit?: number; } +export interface FetchAutoModerationRuleOptions extends BaseFetchOptions { + autoModerationRule: AutoModerationRuleResolvable; +} + +export interface FetchAutoModerationRulesOptions { + cache?: boolean; +} + export interface FetchBanOptions extends BaseFetchOptions { user: UserResolvable; } @@ -4851,6 +5178,12 @@ interface GuildAuditLogsTypes { [AuditLogEvent.ThreadUpdate]: ['Thread', 'Update']; [AuditLogEvent.ThreadDelete]: ['Thread', 'Delete']; [AuditLogEvent.ApplicationCommandPermissionUpdate]: ['ApplicationCommand', 'Update']; + [AuditLogEvent.AutoModerationRuleCreate]: ['AutoModerationRule', 'Create']; + [AuditLogEvent.AutoModerationRuleUpdate]: ['AutoModerationRule', 'Update']; + [AuditLogEvent.AutoModerationRuleDelete]: ['AutoModerationRule', 'Delete']; + [AuditLogEvent.AutoModerationBlockMessage]: ['AutoModerationRule', 'Create']; + [AuditLogEvent.AutoModerationFlagToChannel]: ['AutoModerationRule', 'Create']; + [AuditLogEvent.AutoModerationUserCommunicationDisabled]: ['AutoModerationRule', 'Create']; } export type GuildAuditLogsActionType = GuildAuditLogsTypes[keyof GuildAuditLogsTypes][1] | 'All'; @@ -4882,6 +5215,18 @@ export interface GuildAuditLogsEntryExtraField { [AuditLogEvent.StageInstanceDelete]: StageChannel | { id: Snowflake }; [AuditLogEvent.StageInstanceUpdate]: StageChannel | { id: Snowflake }; [AuditLogEvent.ApplicationCommandPermissionUpdate]: { applicationId: Snowflake }; + [AuditLogEvent.AutoModerationBlockMessage]: { + autoModerationRuleName: string; + autoModerationRuleTriggerType: AuditLogRuleTriggerType; + }; + [AuditLogEvent.AutoModerationFlagToChannel]: { + autoModerationRuleName: string; + autoModerationRuleTriggerType: AuditLogRuleTriggerType; + }; + [AuditLogEvent.AutoModerationUserCommunicationDisabled]: { + autoModerationRuleName: string; + autoModerationRuleTriggerType: AuditLogRuleTriggerType; + }; } export interface GuildAuditLogsEntryTargetField { @@ -4897,6 +5242,7 @@ export interface GuildAuditLogsEntryTargetField { @@ -4918,6 +5264,31 @@ export type GuildBanResolvable = GuildBan | UserResolvable; export type GuildChannelResolvable = Snowflake | GuildBasedChannel; +export interface AutoModerationRuleCreateOptions { + name: string; + eventType: AutoModerationRuleEventType; + triggerType: AutoModerationRuleTriggerType; + triggerMetadata?: AutoModerationTriggerMetadataOptions; + actions: AutoModerationActionOptions; + enabled?: boolean; + exemptRoles?: Collection | RoleResolvable[]; + exemptChannels?: Collection | GuildChannelResolvable[]; + reason?: string; +} + +export interface AutoModerationRuleEditOptions extends Partial> {} + +export interface AutoModerationTriggerMetadataOptions extends Partial {} + +export interface AutoModerationActionOptions { + type: AutoModerationActionType; + metadata?: AutoModerationActionMetadataOptions; +} + +export interface AutoModerationActionMetadataOptions extends Partial> { + channel: GuildTextChannelResolvable | ThreadChannel; +} + export interface GuildChannelCreateOptions extends Omit { parent?: CategoryChannelResolvable | null; type?: Exclude< @@ -5141,7 +5512,11 @@ export interface IntegrationAccount { export type IntegrationType = 'twitch' | 'youtube' | 'discord'; export type CollectedInteraction = - | SelectMenuInteraction + | StringSelectMenuInteraction + | UserSelectMenuInteraction + | RoleSelectMenuInteraction + | MentionableSelectMenuInteraction + | ChannelSelectMenuInteraction | ButtonInteraction | ModalSubmitInteraction; @@ -5213,7 +5588,13 @@ export interface MakeErrorOptions { stack: string; } -export type ActionRowComponentOptions = ButtonComponentData | SelectMenuComponentData; +export type ActionRowComponentOptions = + | ButtonComponentData + | StringSelectMenuComponentData + | UserSelectMenuComponentData + | RoleSelectMenuComponentData + | MentionableSelectMenuComponentData + | ChannelSelectMenuComponentData; export type MessageActionRowComponentResolvable = MessageActionRowComponent | ActionRowComponentOptions; @@ -5250,7 +5631,11 @@ export type MessageComponent = | Component | ActionRowBuilder | ButtonComponent - | SelectMenuComponent; + | StringSelectMenuComponent + | UserSelectMenuComponent + | RoleSelectMenuComponent + | MentionableSelectMenuComponent + | ChannelSelectMenuComponent; export type CollectedMessageInteraction = Exclude< CollectedInteraction, @@ -5348,16 +5733,36 @@ export interface MessageReference { export type MessageResolvable = Message | Snowflake; -export interface SelectMenuComponentData extends BaseComponentData { - type: ComponentType.SelectMenu; +export interface BaseSelectMenuComponentData extends BaseComponentData { customId: string; disabled?: boolean; maxValues?: number; minValues?: number; - options?: SelectMenuComponentOptionData[]; placeholder?: string; } +export interface StringSelectMenuComponentData extends BaseSelectMenuComponentData { + type: ComponentType.StringSelect; + options?: SelectMenuComponentOptionData[]; +} + +export interface UserSelectMenuComponentData extends BaseSelectMenuComponentData { + type: ComponentType.UserSelect; +} + +export interface RoleSelectMenuComponentData extends BaseSelectMenuComponentData { + type: ComponentType.RoleSelect; +} + +export interface MentionableSelectMenuComponentData extends BaseSelectMenuComponentData { + type: ComponentType.MentionableSelect; +} + +export interface ChannelSelectMenuComponentData extends BaseSelectMenuComponentData { + type: ComponentType.ChannelSelect; + channelTypes?: ChannelType[]; +} + export interface MessageSelectOption { default: boolean; description: string | null; @@ -5625,6 +6030,7 @@ export interface LifetimeSweepOptions { export interface SweeperDefinitions { applicationCommands: [Snowflake, ApplicationCommand]; + autoModerationRules: [Snowflake, AutoModerationRule]; bans: [Snowflake, GuildBan]; emojis: [Snowflake, GuildEmoji]; invites: [string, Invite, true]; @@ -5755,6 +6161,10 @@ export interface WebhookEditMessageOptions extends Omit + expectType(autoModerationActionExecution), +); + +client.on('autoModerationRuleCreate', ({ client }) => expectType>(client)); +client.on('autoModerationRuleDelete', ({ client }) => expectType>(client)); + +client.on('autoModerationRuleUpdate', (oldAutoModerationRule, { client: newClient }) => { + expectType>(oldAutoModerationRule!.client); + expectType>(newClient); +}); client.on('channelCreate', ({ client }) => expectType>(client)); client.on('channelDelete', ({ client }) => expectType>(client)); @@ -361,14 +380,14 @@ client.on('messageCreate', async message => { expectAssignable>(buttonCollector); // Verify that select menus interaction are inferred. - const selectMenuCollector = message.createMessageComponentCollector({ componentType: ComponentType.SelectMenu }); - expectAssignable>( - message.awaitMessageComponent({ componentType: ComponentType.SelectMenu }), + const selectMenuCollector = message.createMessageComponentCollector({ componentType: ComponentType.StringSelect }); + expectAssignable>( + message.awaitMessageComponent({ componentType: ComponentType.StringSelect }), ); - expectAssignable>( - channel.awaitMessageComponent({ componentType: ComponentType.SelectMenu }), + expectAssignable>( + channel.awaitMessageComponent({ componentType: ComponentType.StringSelect }), ); - expectAssignable>(selectMenuCollector); + expectAssignable>(selectMenuCollector); // Verify that message component interactions are default collected types. const defaultCollector = message.createMessageComponentCollector(); @@ -405,9 +424,9 @@ client.on('messageCreate', async message => { }); message.createMessageComponentCollector({ - componentType: ComponentType.SelectMenu, + componentType: ComponentType.StringSelect, filter: i => { - expectType(i); + expectType(i); return true; }, }); @@ -428,9 +447,9 @@ client.on('messageCreate', async message => { }); message.awaitMessageComponent({ - componentType: ComponentType.SelectMenu, + componentType: ComponentType.StringSelect, filter: i => { - expectType(i); + expectType(i); return true; }, }); @@ -464,9 +483,9 @@ client.on('messageCreate', async message => { }); channel.awaitMessageComponent({ - componentType: ComponentType.SelectMenu, + componentType: ComponentType.StringSelect, filter: i => { - expectType>(i); + expectType>(i); return true; }, }); @@ -489,9 +508,9 @@ client.on('messageCreate', async message => { const selectsRow: ActionRowData = { type: ComponentType.ActionRow, components: [ - new SelectMenuBuilder(), + new StringSelectMenuBuilder(), { - type: ComponentType.SelectMenu, + type: ComponentType.StringSelect, label: 'select menu', options: [{ label: 'test', value: 'test' }], customId: 'test', @@ -549,6 +568,9 @@ client.on('presenceUpdate', (oldPresence, { client }) => { expectType>(client); }); +declare const slashCommandBuilder: SlashCommandBuilder; +declare const contextMenuCommandBuilder: ContextMenuCommandBuilder; + client.on('ready', async client => { expectType>(client); console.log(`Client is logged in as ${client.user.tag} and ready!`); @@ -1122,8 +1144,8 @@ client.on('guildCreate', async g => { new ButtonBuilder(), { type: ComponentType.Button, style: ButtonStyle.Primary, label: 'string', customId: 'foo' }, { type: ComponentType.Button, style: ButtonStyle.Link, label: 'test', url: 'test' }, - { type: ComponentType.SelectMenu, customId: 'foo' }, - new SelectMenuBuilder(), + { type: ComponentType.StringSelect, customId: 'foo' }, + new StringSelectMenuBuilder(), // @ts-expect-error { type: ComponentType.TextInput, style: TextInputStyle.Paragraph, customId: 'foo', label: 'test' }, // @ts-expect-error @@ -1136,7 +1158,7 @@ client.on('guildCreate', async g => { components: [ { type: ComponentType.Button, style: ButtonStyle.Primary, label: 'string', customId: 'foo' }, { type: ComponentType.Button, style: ButtonStyle.Link, label: 'test', url: 'test' }, - { type: ComponentType.SelectMenu, customId: 'foo' }, + { type: ComponentType.StringSelect, customId: 'foo' }, ], }); @@ -1355,6 +1377,26 @@ declare const applicationSubGroupCommandData: ApplicationCommandSubGroupData; expectType(applicationSubGroupCommandData.options); } +declare const autoModerationRuleManager: AutoModerationRuleManager; +{ + expectType>(autoModerationRuleManager.fetch('1234567890')); + expectType>(autoModerationRuleManager.fetch({ autoModerationRule: '1234567890' })); + expectType>( + autoModerationRuleManager.fetch({ autoModerationRule: '1234567890', cache: false }), + ); + expectType>( + autoModerationRuleManager.fetch({ autoModerationRule: '1234567890', force: true }), + ); + expectType>( + autoModerationRuleManager.fetch({ autoModerationRule: '1234567890', cache: false, force: true }), + ); + expectType>>(autoModerationRuleManager.fetch()); + expectType>>(autoModerationRuleManager.fetch({})); + expectType>>(autoModerationRuleManager.fetch({ cache: false })); + // @ts-expect-error The `force` option cannot be used alongside fetching all auto moderation rules. + autoModerationRuleManager.fetch({ force: false }); +} + declare const guildApplicationCommandManager: GuildApplicationCommandManager; expectType>>(guildApplicationCommandManager.fetch()); expectType>>(guildApplicationCommandManager.fetch(undefined, {})); @@ -1508,7 +1550,7 @@ if (interaction.inGuild()) { client.on('interactionCreate', async interaction => { if (interaction.type === InteractionType.MessageComponent) { - expectType(interaction); + expectType(interaction); expectType(interaction.component); expectType(interaction.message); if (interaction.inCachedGuild()) { @@ -1640,25 +1682,28 @@ client.on('interactionCreate', async interaction => { } } - if (interaction.type === InteractionType.MessageComponent && interaction.componentType === ComponentType.SelectMenu) { - expectType(interaction); - expectType(interaction.component); + if ( + interaction.type === InteractionType.MessageComponent && + interaction.componentType === ComponentType.StringSelect + ) { + expectType(interaction); + expectType(interaction.component); expectType(interaction.message); if (interaction.inCachedGuild()) { - expectAssignable(interaction); + expectAssignable(interaction); expectType(interaction.component); expectType>(interaction.message); expectType(interaction.guild); expectType>>(interaction.reply({ fetchReply: true })); } else if (interaction.inRawGuild()) { - expectAssignable(interaction); - expectType(interaction.component); + expectAssignable(interaction); + expectType(interaction.component); expectType>(interaction.message); expectType(interaction.guild); expectType>>(interaction.reply({ fetchReply: true })); } else if (interaction.inGuild()) { - expectAssignable(interaction); - expectType(interaction.component); + expectAssignable(interaction); + expectType(interaction.component); expectType(interaction.message); expectType(interaction.guild); expectType>(interaction.reply({ fetchReply: true })); @@ -1882,7 +1927,7 @@ const button = new ButtonBuilder({ customId: 'test', }); -const selectMenu = new SelectMenuBuilder({ +const selectMenu = new StringSelectMenuBuilder({ maxValues: 10, minValues: 2, customId: 'test', @@ -1892,7 +1937,7 @@ new ActionRowBuilder({ components: [selectMenu.toJSON(), button.toJSON()], }); -new SelectMenuBuilder({ +new StringSelectMenuBuilder({ customId: 'foo', }); @@ -1951,10 +1996,10 @@ chatInputInteraction.showModal({ }); declare const selectMenuData: APISelectMenuComponent; -SelectMenuBuilder.from(selectMenuData); +StringSelectMenuBuilder.from(selectMenuData); declare const selectMenuComp: SelectMenuComponent; -SelectMenuBuilder.from(selectMenuComp); +StringSelectMenuBuilder.from(selectMenuComp); declare const buttonData: APIButtonComponent; ButtonBuilder.from(buttonData); @@ -2025,3 +2070,22 @@ expectType>(categoryChannel.flags); expectType>(threadChannel.flags); expectType(partialGroupDMChannel.flags); + +// Select menu type narrowing +if (interaction.isAnySelectMenu()) { + expectType(interaction); +} + +declare const anySelectMenu: AnySelectMenuInteraction; + +if (anySelectMenu.isStringSelectMenu()) { + expectType(anySelectMenu); +} else if (anySelectMenu.isUserSelectMenu()) { + expectType(anySelectMenu); +} else if (anySelectMenu.isRoleSelectMenu()) { + expectType(anySelectMenu); +} else if (anySelectMenu.isChannelSelectMenu()) { + expectType(anySelectMenu); +} else if (anySelectMenu.isMentionableSelectMenu()) { + expectType(anySelectMenu); +} diff --git a/packages/docgen/package.json b/packages/docgen/package.json index 8ed9a8b67565..180061dbb9a4 100644 --- a/packages/docgen/package.json +++ b/packages/docgen/package.json @@ -42,20 +42,20 @@ "dependencies": { "commander": "^9.4.1", "jsdoc-to-markdown": "^7.1.1", - "tslib": "^2.4.0", - "typedoc": "^0.23.17" + "tslib": "^2.4.1", + "typedoc": "^0.23.21" }, "devDependencies": { - "@favware/cliff-jumper": "^1.8.8", + "@favware/cliff-jumper": "^1.9.0", "@types/jsdoc-to-markdown": "^7.0.3", - "@types/node": "16.11.68", + "@types/node": "16.18.3", "cross-env": "^7.0.3", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.3.0", - "typescript": "^4.8.4" + "tsup": "^6.5.0", + "typescript": "^4.9.3" }, "engines": { "node": ">=16.9.0" diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index 762696582c3f..d6ac3047046a 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -45,17 +45,17 @@ "dependencies": { "@discordjs/proxy": "^1.2.0", "@discordjs/rest": "^1.3.0", - "tslib": "^2.4.0" + "tslib": "^2.4.1" }, "devDependencies": { - "@types/node": "16.11.68", + "@types/node": "16.18.3", "cross-env": "^7.0.3", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.3.0", - "typescript": "^4.8.4" + "tsup": "^6.5.0", + "typescript": "^4.9.3" }, "engines": { "node": ">=16.9.0" diff --git a/packages/proxy/package.json b/packages/proxy/package.json index d2e0b1ced365..f20346c84162 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -56,24 +56,24 @@ "dependencies": { "@discordjs/rest": "^1.0.0", "@discordjs/util": "workspace:^", - "tslib": "^2.4.0", - "undici": "^5.11.0" + "tslib": "^2.4.1", + "undici": "^5.12.0" }, "devDependencies": { - "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.33.4", - "@types/node": "16.11.68", + "@favware/cliff-jumper": "^1.9.0", + "@microsoft/api-extractor": "^7.33.6", + "@types/node": "16.18.3", "@types/supertest": "^2.0.12", - "@vitest/coverage-c8": "^0.24.3", + "@vitest/coverage-c8": "^0.25.2", "cross-env": "^7.0.3", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "supertest": "^6.3.0", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "vitest": "^0.24.3" + "supertest": "^6.3.1", + "tsup": "^6.5.0", + "typescript": "^4.9.3", + "vitest": "^0.25.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/rest/package.json b/packages/rest/package.json index 21d5d334c5cf..f00303cbf2ad 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -56,25 +56,25 @@ "@discordjs/util": "workspace:^", "@sapphire/async-queue": "^1.5.0", "@sapphire/snowflake": "^3.2.2", - "discord-api-types": "^0.37.14", + "discord-api-types": "^0.37.19", "file-type": "^18.0.0", - "tslib": "^2.4.0", - "undici": "^5.11.0" + "tslib": "^2.4.1", + "undici": "^5.12.0" }, "devDependencies": { - "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.33.4", - "@types/node": "16.11.68", - "@vitest/coverage-c8": "^0.24.3", + "@favware/cliff-jumper": "^1.9.0", + "@microsoft/api-extractor": "^7.33.6", + "@types/node": "16.18.3", + "@vitest/coverage-c8": "^0.25.2", "cross-env": "^7.0.3", "esbuild-plugin-version-injector": "^1.0.0", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "vitest": "^0.24.3" + "tsup": "^6.5.0", + "typescript": "^4.9.3", + "vitest": "^0.25.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/rest/src/lib/RequestManager.ts b/packages/rest/src/lib/RequestManager.ts index 2e2732c53a4a..4fa8dab221bf 100644 --- a/packages/rest/src/lib/RequestManager.ts +++ b/packages/rest/src/lib/RequestManager.ts @@ -499,7 +499,7 @@ export class RequestManager extends EventEmitter { const baseRoute = endpoint // Strip out all ids - .replace(/\d{16,19}/g, ':id') + .replaceAll(/\d{16,19}/g, ':id') // Strip out reaction as they fall under the same bucket .replace(/\/reactions\/(.*)/, '/reactions/:reaction'); diff --git a/packages/rest/src/lib/handlers/SequentialHandler.ts b/packages/rest/src/lib/handlers/SequentialHandler.ts index 60ca20851f91..4f5e5ccde7b8 100644 --- a/packages/rest/src/lib/handlers/SequentialHandler.ts +++ b/packages/rest/src/lib/handlers/SequentialHandler.ts @@ -8,7 +8,7 @@ import { DiscordAPIError, type DiscordErrorData, type OAuthErrorData } from '../ import { HTTPError } from '../errors/HTTPError.js'; import { RateLimitError } from '../errors/RateLimitError.js'; import { RESTEvents } from '../utils/constants.js'; -import { hasSublimit, parseHeader, parseResponse } from '../utils/utils.js'; +import { hasSublimit, parseHeader, parseResponse, shouldRetry } from '../utils/utils.js'; import type { IHandler } from './IHandler.js'; /** @@ -137,7 +137,7 @@ export class SequentialHandler implements IHandler { * @param time - The amount of time to delay all requests for */ private async globalDelayFor(time: number): Promise { - await sleep(time, undefined, { ref: false }); + await sleep(time); this.manager.globalDelay = null; } @@ -307,8 +307,9 @@ export class SequentialHandler implements IHandler { try { res = await request(url, { ...options, signal: controller.signal }); } catch (error: unknown) { - // Retry the specified number of times for possible timed out requests - if (error instanceof Error && error.name === 'AbortError' && retries !== this.manager.options.retries) { + if (!(error instanceof Error)) throw error; + // Retry the specified number of times if needed + if (shouldRetry(error) && retries !== this.manager.options.retries) { // eslint-disable-next-line no-param-reassign return await this.runRequest(routeId, url, options, requestData, ++retries); } @@ -460,7 +461,7 @@ export class SequentialHandler implements IHandler { this.#sublimitPromise?.resolve(); this.#sublimitPromise = null; - await sleep(sublimitTimeout, undefined, { ref: false }); + await sleep(sublimitTimeout); let resolve: () => void; // eslint-disable-next-line promise/param-names, no-promise-executor-return const promise = new Promise((res) => (resolve = res)); diff --git a/packages/rest/src/lib/utils/utils.ts b/packages/rest/src/lib/utils/utils.ts index 770cc59c5168..6034fdaa5a41 100644 --- a/packages/rest/src/lib/utils/utils.ts +++ b/packages/rest/src/lib/utils/utils.ts @@ -135,3 +135,16 @@ export async function resolveBody(body: RequestInit['body']): Promise=16.9.0" diff --git a/packages/ui/package.json b/packages/ui/package.json index 807e6ab999d0..b84ec0ead009 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -49,24 +49,24 @@ "react-icons": "^4.6.0" }, "devDependencies": { - "@favware/cliff-jumper": "^1.8.8", + "@favware/cliff-jumper": "^1.9.0", "@ladle/react": "^2.4.5", - "@types/node": "16.11.68", - "@types/react": "^18.0.21", - "@types/react-dom": "^18.0.6", - "@unocss/reset": "^0.45.30", - "@vitejs/plugin-react": "^2.1.0", - "@vitest/coverage-c8": "^0.24.3", + "@types/node": "16.18.3", + "@types/react": "^18.0.25", + "@types/react-dom": "^18.0.9", + "@unocss/reset": "^0.46.5", + "@vitejs/plugin-react": "^2.2.0", + "@vitest/coverage-c8": "^0.25.2", "cross-env": "^7.0.3", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "typescript": "^4.8.4", - "unocss": "^0.45.30", - "vite": "^3.1.8", - "vite-plugin-dts": "^1.6.6", - "vitest": "^0.24.3" + "typescript": "^4.9.3", + "unocss": "^0.46.5", + "vite": "^3.2.4", + "vite-plugin-dts": "^1.7.1", + "vitest": "^0.25.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/util/package.json b/packages/util/package.json index 37a7c2093ab4..f05038a6674b 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -51,19 +51,19 @@ }, "homepage": "https://discord.js.org", "devDependencies": { - "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.33.4", - "@types/node": "16.11.68", - "@vitest/coverage-c8": "^0.24.3", + "@favware/cliff-jumper": "^1.9.0", + "@microsoft/api-extractor": "^7.33.6", + "@types/node": "16.18.3", + "@vitest/coverage-c8": "^0.25.2", "cross-env": "^7.0.3", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", "tsd": "^0.24.1", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "vitest": "^0.24.3" + "tsup": "^6.5.0", + "typescript": "^4.9.3", + "vitest": "^0.25.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/voice/package.json b/packages/voice/package.json index 21675f83be5f..e12b85b19bcf 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -53,31 +53,31 @@ "homepage": "https://discord.js.org", "dependencies": { "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.14", + "discord-api-types": "^0.37.19", "prism-media": "^1.3.4", - "tslib": "^2.4.0", - "ws": "^8.9.0" + "tslib": "^2.4.1", + "ws": "^8.11.0" }, "devDependencies": { - "@babel/core": "^7.19.3", - "@babel/preset-env": "^7.19.4", + "@babel/core": "^7.20.2", + "@babel/preset-env": "^7.20.2", "@babel/preset-typescript": "^7.18.6", - "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.33.4", - "@types/jest": "^29.2.0", - "@types/node": "16.11.68", + "@favware/cliff-jumper": "^1.9.0", + "@microsoft/api-extractor": "^7.33.6", + "@types/jest": "^29.2.3", + "@types/node": "16.18.3", "cross-env": "^7.0.3", "esbuild-plugin-version-injector": "^1.0.0", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", - "jest": "^29.2.1", + "jest": "^29.3.1", "jest-websocket-mock": "^2.4.0", "mock-socket": "^9.1.5", "prettier": "^2.7.1", - "tsup": "^6.3.0", + "tsup": "^6.5.0", "tweetnacl": "^1.0.3", - "typescript": "^4.8.4" + "typescript": "^4.9.3" }, "engines": { "node": ">=16.9.0" diff --git a/packages/ws/package.json b/packages/ws/package.json index ed96837a8b7f..4e43ee706b06 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -58,26 +58,26 @@ "@sapphire/async-queue": "^1.5.0", "@types/ws": "^8.5.3", "@vladfrangu/async_event_emitter": "^2.1.2", - "discord-api-types": "^0.37.14", - "tslib": "^2.4.0", - "ws": "^8.9.0" + "discord-api-types": "^0.37.19", + "tslib": "^2.4.1", + "ws": "^8.11.0" }, "devDependencies": { - "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.33.4", - "@types/node": "16.11.68", - "@vitest/coverage-c8": "^0.24.3", + "@favware/cliff-jumper": "^1.9.0", + "@microsoft/api-extractor": "^7.33.6", + "@types/node": "16.18.3", + "@vitest/coverage-c8": "^0.25.2", "cross-env": "^7.0.3", "esbuild-plugin-version-injector": "^1.0.0", - "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.39", + "eslint": "^8.28.0", + "eslint-config-neon": "^0.1.40", "eslint-formatter-pretty": "^4.1.0", "mock-socket": "^9.1.5", "prettier": "^2.7.1", - "tsup": "^6.3.0", - "typescript": "^4.8.4", - "undici": "^5.11.0", - "vitest": "^0.24.3", + "tsup": "^6.5.0", + "typescript": "^4.9.3", + "undici": "^5.12.0", + "vitest": "^0.25.2", "zlib-sync": "^0.1.7" }, "engines": { diff --git a/turbo.json b/turbo.json index d50a29be2067..225428982d4a 100644 --- a/turbo.json +++ b/turbo.json @@ -15,7 +15,7 @@ }, "test": { "dependsOn": ["^build"], - "outputs": [] + "outputs": ["coverage/**"] }, "lint": { "dependsOn": ["^build"], diff --git a/yarn.lock b/yarn.lock index 4ad919155112..9dbd587e25a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -41,65 +41,66 @@ __metadata: languageName: node linkType: hard -"@angular-eslint/bundled-angular-compiler@npm:14.1.2": - version: 14.1.2 - resolution: "@angular-eslint/bundled-angular-compiler@npm:14.1.2" - checksum: 92a893823ab282fa8e518ce7a2d13389eb37d6396aa3c1c05552f63d91f7af9490cafae2b5acaac529b6bc9219eb6e8f408aac7184f93a0cec91669ef88c3c89 +"@angular-eslint/bundled-angular-compiler@npm:14.4.0": + version: 14.4.0 + resolution: "@angular-eslint/bundled-angular-compiler@npm:14.4.0" + checksum: 6e775b548d4bd245a8653c3ebc2586507b6c4601675b74a51ed16c3001192fc0ae323389938770d9d917c2af5d86b41bac744bb7a26da76a8bc3d07a6e4ebe61 languageName: node linkType: hard -"@angular-eslint/eslint-plugin-template@npm:^14.1.2": - version: 14.1.2 - resolution: "@angular-eslint/eslint-plugin-template@npm:14.1.2" +"@angular-eslint/eslint-plugin-template@npm:^14.4.0": + version: 14.4.0 + resolution: "@angular-eslint/eslint-plugin-template@npm:14.4.0" dependencies: - "@angular-eslint/bundled-angular-compiler": 14.1.2 - "@typescript-eslint/type-utils": 5.37.0 - "@typescript-eslint/utils": 5.37.0 - aria-query: 5.0.2 - axobject-query: 3.0.1 + "@angular-eslint/bundled-angular-compiler": 14.4.0 + "@angular-eslint/utils": 14.4.0 + "@typescript-eslint/type-utils": 5.43.0 + "@typescript-eslint/utils": 5.43.0 + aria-query: 5.1.3 + axobject-query: 3.1.1 peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: "*" - checksum: e83046ac20d7ec95f79b0f4402f368223108907d5a0509908acb7da12e27a82f8337a25e4ceddc808204e601a848d74ea6c634bbf2bee70560e36cdc824a9e5c + checksum: bb733a90f4e07c840cc38b097795084edcedf13ce9db19635497c3dfdaf27981f09ff2b9a240d349a876bf2e9b7a4313c970cd953afbb392e82c23f8875e9265 languageName: node linkType: hard -"@angular-eslint/eslint-plugin@npm:^14.1.2": - version: 14.1.2 - resolution: "@angular-eslint/eslint-plugin@npm:14.1.2" +"@angular-eslint/eslint-plugin@npm:^14.4.0": + version: 14.4.0 + resolution: "@angular-eslint/eslint-plugin@npm:14.4.0" dependencies: - "@angular-eslint/utils": 14.1.2 - "@typescript-eslint/utils": 5.37.0 + "@angular-eslint/utils": 14.4.0 + "@typescript-eslint/utils": 5.43.0 peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: "*" - checksum: dc7cdef4a09cf25e64c7bea3647912ff5d62a1cd7772728338f94df94566345b0910a77a42f15165bd2cb49f1359e1ac5361c15603bad8f888903a9e8b5a858c + checksum: a3780ea8022c62eeb8263a4f8210f18b0e1dfd646e955ca9a63385a060f4e19fe8e454c6e8bdd0110c8a6dc22d900e12d1b77271977f6c78acbc9475e4580b84 languageName: node linkType: hard -"@angular-eslint/template-parser@npm:^14.1.2": - version: 14.1.2 - resolution: "@angular-eslint/template-parser@npm:14.1.2" +"@angular-eslint/template-parser@npm:^14.4.0": + version: 14.4.0 + resolution: "@angular-eslint/template-parser@npm:14.4.0" dependencies: - "@angular-eslint/bundled-angular-compiler": 14.1.2 - eslint-scope: ^5.1.0 + "@angular-eslint/bundled-angular-compiler": 14.4.0 + eslint-scope: ^7.0.0 peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: "*" - checksum: 07a27fcb612212e023f8d65cc344088d4b803839d4a56aeba0e0099d994f0ecfcbde2f163fa6ec117fd099cc35533f6afae42b2daa8463ffeff06cf54431c662 + checksum: 7cbef2028e3746ef07ff16b597afade8a18c60d2cbc00fcdbd398871b31f3191f14e9e063ad482935aa076180cd1d69b63f2bf4cc70821fb237e33fff4220d63 languageName: node linkType: hard -"@angular-eslint/utils@npm:14.1.2": - version: 14.1.2 - resolution: "@angular-eslint/utils@npm:14.1.2" +"@angular-eslint/utils@npm:14.4.0": + version: 14.4.0 + resolution: "@angular-eslint/utils@npm:14.4.0" dependencies: - "@angular-eslint/bundled-angular-compiler": 14.1.2 - "@typescript-eslint/utils": 5.37.0 + "@angular-eslint/bundled-angular-compiler": 14.4.0 + "@typescript-eslint/utils": 5.43.0 peerDependencies: eslint: ^7.0.0 || ^8.0.0 typescript: "*" - checksum: 7a0605ba885362ee47f7e32f42c0d38ac1886f8931f1f1b20a1524f1a04206f92651903f51cdcdaac47524cc0f088e69fa534eae623674852e6af23fd0192344 + checksum: 9ce6e983887f6dbfcfca317524fff642e2cf56de52ec0f534dd613adba84e1eb6e59b68da401379222fb108fe03f3b49d3b9c46e26f25b5c96d89203e5d266f8 languageName: node linkType: hard @@ -120,30 +121,16 @@ __metadata: languageName: node linkType: hard -"@astrojs/compiler@npm:0.27.2, @astrojs/compiler@npm:^0.27.1": - version: 0.27.2 - resolution: "@astrojs/compiler@npm:0.27.2" - checksum: 10e823c4c89e63414c4479f966ed2026f5f0c005d741668d4293d09de49a671946481405e1917f6e1c9f574a846993ac18ae4e6367a72b39d0712b0743d91b43 +"@astrojs/compiler@npm:^0.27.0 || ^0.28.0 || ^0.29.0, @astrojs/compiler@npm:^0.29.15, @astrojs/compiler@npm:^0.29.3": + version: 0.29.17 + resolution: "@astrojs/compiler@npm:0.29.17" + checksum: 7b9e7ccd4fda0eb793dcbe4030db8cc2f65d7fac3bdb4cd8c0ab11cf753ebb1c50521b79b433b8e69c59e98466252dba9d6d3ac63214a8c31f8066b385157e12 languageName: node linkType: hard -"@astrojs/compiler@npm:^0.23.4": - version: 0.23.5 - resolution: "@astrojs/compiler@npm:0.23.5" - checksum: 9779b8a7fab2b467ea8637fca8129110fe3b6dbee4fc2e9fe4ec162c3f91ffd77fd447abab01a926b7440749e03c269dda65c4ca1d8759d9662f9198e56eeb01 - languageName: node - linkType: hard - -"@astrojs/compiler@npm:^0.27.0": - version: 0.27.1 - resolution: "@astrojs/compiler@npm:0.27.1" - checksum: 66a15bd5a858c37b25b869fab99f27bcd7acf3b715f1de5b9943ae3d97494b65d5490e2cb798cad832569dbca4ed60100a7209bb2483123363e43cd395a3a6ea - languageName: node - linkType: hard - -"@astrojs/image@npm:^0.10.0": - version: 0.10.0 - resolution: "@astrojs/image@npm:0.10.0" +"@astrojs/image@npm:^0.11.6": + version: 0.11.6 + resolution: "@astrojs/image@npm:0.11.6" dependencies: "@altano/tiny-async-pool": ^1.0.2 http-cache-semantics: ^4.1.0 @@ -152,23 +139,24 @@ __metadata: magic-string: ^0.25.9 mime: ^3.0.0 slash: ^4.0.0 + web-streams-polyfill: ^3.2.1 peerDependencies: sharp: ">=0.31.0" peerDependenciesMeta: sharp: optional: true - checksum: 3c32b1662a1a0c54cce0a2e3d08da66639ba7c9a41980a397c058e5ca7856c08bcbfb5e8dc0940e6cb2e5b26621f2ea4b8bddd8f612693045e29a67c691547e5 + checksum: 1fdcd109076ad6d396732f3edd571998b72864e9b1883a08b003400c69df5f2115cc3539052a983e94bb00acf0f480ad29988452548c2704976275252c42f275 languageName: node linkType: hard -"@astrojs/language-server@npm:^0.26.2": - version: 0.26.2 - resolution: "@astrojs/language-server@npm:0.26.2" +"@astrojs/language-server@npm:^0.28.3": + version: 0.28.3 + resolution: "@astrojs/language-server@npm:0.28.3" dependencies: "@vscode/emmet-helper": ^2.8.4 events: ^3.3.0 prettier: ^2.7.1 - prettier-plugin-astro: ^0.5.3 + prettier-plugin-astro: ^0.7.0 source-map: ^0.7.3 vscode-css-languageservice: ^6.0.1 vscode-html-languageservice: ^5.0.0 @@ -179,7 +167,7 @@ __metadata: vscode-uri: ^3.0.3 bin: astro-ls: bin/nodeServer.js - checksum: 1e130a011a9ac8c6e45808e8564c352bb75028e2696ba673e8db7ba4ff7aa8c0132e70ac7c9b3df0b59dc7eca94f57447b85bc7d9a392dd72c48d0dd0c055ab6 + checksum: 41da1e6388c314103e8f1539a01c4b516885d7b4f6faa29ab0ee064909c47d91315bac8d71c591a7792896463e6eab5ee6b608f40413c04afc6aa33caf71fd8e languageName: node linkType: hard @@ -215,11 +203,11 @@ __metadata: languageName: node linkType: hard -"@astrojs/mdx@npm:^0.11.4": - version: 0.11.4 - resolution: "@astrojs/mdx@npm:0.11.4" +"@astrojs/mdx@npm:^0.11.6": + version: 0.11.6 + resolution: "@astrojs/mdx@npm:0.11.6" dependencies: - "@astrojs/prism": ^1.0.1 + "@astrojs/prism": ^1.0.2 "@mdx-js/mdx": ^2.1.2 "@mdx-js/rollup": ^2.1.1 acorn: ^8.8.0 @@ -235,7 +223,7 @@ __metadata: shiki: ^0.11.1 unist-util-visit: ^4.1.0 vfile: ^5.3.2 - checksum: 7f4045dcab683e0a6ca7247b7a687175f5eba7ecaf710a120a0ff4058443ed4b56e802e621b2ebb9df552ef1abda7f1f0361c438bea4d21da441b2a15d5e529d + checksum: f20526bcb9885f0e22aee47de52252ef44a2e2011b2b184e469463b0774f66b5f03e02c63aee4b08146448d6a3248e36f492be0ef9f6ac7c004be8a8fbc5ca74 languageName: node linkType: hard @@ -256,16 +244,16 @@ __metadata: languageName: node linkType: hard -"@astrojs/prefetch@npm:^0.1.0": - version: 0.1.0 - resolution: "@astrojs/prefetch@npm:0.1.0" +"@astrojs/prefetch@npm:^0.1.1": + version: 0.1.1 + resolution: "@astrojs/prefetch@npm:0.1.1" dependencies: throttles: ^1.0.1 - checksum: c91adb117c4e700f71655cd4b061fc69ab8731fa68e884bdfc5eaa8a1b1609276d476c420f779ab1f79f11bed9962fed35f70846a8ed310c97d01968ece59aef + checksum: 788b4e8cf33d0381aaba9ab18fdf2f2aa4dce8c6bef05640201b5d6635b22ab6ac5f396ea307ddba7a62c8f2ee967bf8bc7ec3ea50d6f7aa4f9ffda7070974fa languageName: node linkType: hard -"@astrojs/prism@npm:^1.0.0, @astrojs/prism@npm:^1.0.1": +"@astrojs/prism@npm:^1.0.0": version: 1.0.1 resolution: "@astrojs/prism@npm:1.0.1" dependencies: @@ -274,9 +262,18 @@ __metadata: languageName: node linkType: hard -"@astrojs/react@npm:^1.2.1": - version: 1.2.1 - resolution: "@astrojs/react@npm:1.2.1" +"@astrojs/prism@npm:^1.0.2": + version: 1.0.2 + resolution: "@astrojs/prism@npm:1.0.2" + dependencies: + prismjs: ^1.28.0 + checksum: ff6a222b402c156c157515ae08d71cebea7ab11807bb0ffcad3ac62e28a85beef93814f040d3706f3e178d825cbf444a315b5bdac3b5412c87df0f83b091d0e6 + languageName: node + linkType: hard + +"@astrojs/react@npm:^1.2.2": + version: 1.2.2 + resolution: "@astrojs/react@npm:1.2.2" dependencies: "@babel/core": ">=7.0.0-0 <8.0.0" "@babel/plugin-transform-react-jsx": ^7.17.12 @@ -285,7 +282,7 @@ __metadata: "@types/react-dom": ^17.0.17 || ^18.0.6 react: ^17.0.2 || ^18.0.0 react-dom: ^17.0.2 || ^18.0.0 - checksum: 6e5d37821c4128d26447605371c9fe466303154386303fda94b4e1011d5232db894d815cf5b9663c5a8fcb9d8ec42edf14a72610214849ac23a6c65883f1c780 + checksum: 38f3d8df5d48cb4e07452b75355d246b51e0768126ee5d23fd6dc1e69b578004a372633ea1419e4edd388f1f852f99eada32611ac66225d99b025826bc96cbe2 languageName: node linkType: hard @@ -305,13 +302,13 @@ __metadata: languageName: node linkType: hard -"@astrojs/webapi@npm:^1.1.0": - version: 1.1.0 - resolution: "@astrojs/webapi@npm:1.1.0" +"@astrojs/webapi@npm:^1.1.1": + version: 1.1.1 + resolution: "@astrojs/webapi@npm:1.1.1" dependencies: global-agent: ^3.0.0 node-fetch: ^3.2.5 - checksum: 12f82c603622ac84513262de0408fff06652df7c0c9e6972cee3086e414e5079a8aa47525f2338d1862a22e5fddca8ef521021d350be4387fc462d6d12fb79f1 + checksum: 28639022452e784bb5415075a15223bc0b476401ac7bf956495529e2c9736dfaaffd619968811db91d57b7c97a8306b59b77159e5cc874d5c8ffaa081699fb80 languageName: node linkType: hard @@ -331,7 +328,14 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:>=7.0.0-0 <8.0.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.13, @babel/core@npm:^7.18.2, @babel/core@npm:^7.19.3": +"@babel/compat-data@npm:^7.20.0, @babel/compat-data@npm:^7.20.1": + version: 7.20.1 + resolution: "@babel/compat-data@npm:7.20.1" + checksum: 989b9b7a6fe43c547bb8329241bd0ba6983488b83d29cc59de35536272ee6bb4cc7487ba6c8a4bceebb3a57f8c5fea1434f80bbbe75202bc79bc1110f955ff25 + languageName: node + linkType: hard + +"@babel/core@npm:>=7.0.0-0 <8.0.0, @babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.13, @babel/core@npm:^7.18.2": version: 7.19.3 resolution: "@babel/core@npm:7.19.3" dependencies: @@ -354,6 +358,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.19.6, @babel/core@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/core@npm:7.20.2" + dependencies: + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.2 + "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-module-transforms": ^7.20.2 + "@babel/helpers": ^7.20.1 + "@babel/parser": ^7.20.2 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.1 + "@babel/types": ^7.20.2 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.1 + semver: ^6.3.0 + checksum: 98faaaef26103a276a30a141b951a93bc8418d100d1f668bf7a69d12f3e25df57958e8b6b9100d95663f720db62da85ade736f6629a5ebb1e640251a1b43c0e4 + languageName: node + linkType: hard + "@babel/generator@npm:^7.18.13, @babel/generator@npm:^7.18.2, @babel/generator@npm:^7.19.3, @babel/generator@npm:^7.19.4, @babel/generator@npm:^7.7.2": version: 7.19.5 resolution: "@babel/generator@npm:7.19.5" @@ -365,6 +392,17 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.20.1, @babel/generator@npm:^7.20.2": + version: 7.20.4 + resolution: "@babel/generator@npm:7.20.4" + dependencies: + "@babel/types": ^7.20.2 + "@jridgewell/gen-mapping": ^0.3.2 + jsesc: ^2.5.1 + checksum: 967b59f18e5ce999e5a741825bcecb2be4bbfc1824a92c21b47d0b5694e0eb09314a70f8b9142e9591c149c7fb83d51f73ae8fbd96d30a42666425889e51ceb1 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -398,6 +436,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.20.0": + version: 7.20.0 + resolution: "@babel/helper-compilation-targets@npm:7.20.0" + dependencies: + "@babel/compat-data": ^7.20.0 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.21.3 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: bc183f2109648849c8fde0b3c5cf08adf2f7ad6dc617b546fd20f34c8ef574ee5ee293c8d1bd0ed0221212e8f5907cdc2c42097870f1dcc769a654107d82c95b + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.19.0": version: 7.19.0 resolution: "@babel/helper-create-class-features-plugin@npm:7.19.0" @@ -512,6 +564,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.19.6, @babel/helper-module-transforms@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-module-transforms@npm:7.20.2" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-simple-access": ^7.20.2 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.1 + "@babel/types": ^7.20.2 + checksum: 33a60ca115f6fce2c9d98e2a2e5649498aa7b23e2ae3c18745d7a021487708fc311458c33542f299387a0da168afccba94116e077f2cce49ae9e5ab83399e8a2 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" @@ -528,6 +596,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-plugin-utils@npm:7.20.2" + checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.18.6, @babel/helper-remap-async-to-generator@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" @@ -542,7 +617,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.18.9": +"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.18.9, @babel/helper-replace-supers@npm:^7.19.1": version: 7.19.1 resolution: "@babel/helper-replace-supers@npm:7.19.1" dependencies: @@ -564,6 +639,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.19.4, @babel/helper-simple-access@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/helper-simple-access@npm:7.20.2" + dependencies: + "@babel/types": ^7.20.2 + checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 + languageName: node + linkType: hard + "@babel/helper-skip-transparent-expression-wrappers@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.18.9" @@ -626,6 +710,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.20.1": + version: 7.20.1 + resolution: "@babel/helpers@npm:7.20.1" + dependencies: + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.20.1 + "@babel/types": ^7.20.0 + checksum: be35f78666bdab895775ed94dbeb098f7b4fa08ce4cfb0c3a9e69b7220cce56960dcdc2b14f5df9d3b80388d4bf7df155c97f6cf6768c0138f4e6931d0f44955 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" @@ -646,6 +741,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.20.1, @babel/parser@npm:^7.20.2": + version: 7.20.3 + resolution: "@babel/parser@npm:7.20.3" + bin: + parser: ./bin/babel-parser.js + checksum: 33bcdb45de65a3cf27ed376cb34f32be3c3485a10e3252f8d0126f6a034efc3145c0d219e57fcd5a8956361552008bc30b9bae4a723823fb3633027071be8a45 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" @@ -684,6 +788,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-async-generator-functions@npm:^7.20.1": + version: 7.20.1 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.1" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-remap-async-to-generator": ^7.18.9 + "@babel/plugin-syntax-async-generators": ^7.8.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 518483a68c5618932109913eb7316ed5e656c575cbd9d22667bc0451e35a1be45f8eaeb8e2065834b36c8a93c4840f78cebf8f1d067b07c422f7be16d58eca60 + languageName: node + linkType: hard + "@babel/plugin-proposal-class-properties@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" @@ -796,6 +914,21 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-object-rest-spread@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.2" + dependencies: + "@babel/compat-data": ^7.20.1 + "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.20.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 9764d1a4735fcd384fdb9b6c6ccb20d1bea2f88f648640d26ce5d9cd5880ce1e389d2f852d7bea7e86ff343726225dc16e1deb92c7b3dc5c5721ed905a602318 + languageName: node + linkType: hard + "@babel/plugin-proposal-optional-catch-binding@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.18.6" @@ -936,6 +1069,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-import-assertions@npm:^7.20.0": + version: 7.20.0 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.20.0" + dependencies: + "@babel/helper-plugin-utils": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6a86220e0aae40164cd3ffaf80e7c076a1be02a8f3480455dddbae05fda8140f429290027604df7a11b3f3f124866e8a6d69dbfa1dda61ee7377b920ad144d5b + languageName: node + linkType: hard + "@babel/plugin-syntax-import-meta@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" @@ -1114,6 +1258,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-block-scoping@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/plugin-transform-block-scoping@npm:7.20.2" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 550b983277557ecfa3ef1e7a2367eaa9e0616a56f0d4106812cbc8aeca057b0f0b8bbc5c548b9b3b57399868f916e89e17303c802c8c46d18fba5bc174d4e794 + languageName: node + linkType: hard + "@babel/plugin-transform-classes@npm:^7.19.0": version: 7.19.0 resolution: "@babel/plugin-transform-classes@npm:7.19.0" @@ -1133,6 +1288,25 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-classes@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/plugin-transform-classes@npm:7.20.2" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-replace-supers": ^7.19.1 + "@babel/helper-split-export-declaration": ^7.18.6 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 57f3467a8eb7853cdb61cda963cfb6c6568ad276d77c9de2ff5a2194650010217aa318ef3733975537c6fb906b73a019afb6ea650b01852e7d2e1fab4034361b + languageName: node + linkType: hard + "@babel/plugin-transform-computed-properties@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-computed-properties@npm:7.18.9" @@ -1155,6 +1329,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-destructuring@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/plugin-transform-destructuring@npm:7.20.2" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 09033e09b28ca1b0d46a8d82f5a677b1d718a739b3c199886908c3ef1af23369317d0c429b21507d480ee82721c15892a9893be18e50ad6fc219e69312f4b097 + languageName: node + linkType: hard + "@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.4.4": version: 7.18.6 resolution: "@babel/plugin-transform-dotall-regex@npm:7.18.6" @@ -1249,6 +1434,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-amd@npm:^7.19.6": + version: 7.19.6 + resolution: "@babel/plugin-transform-modules-amd@npm:7.19.6" + dependencies: + "@babel/helper-module-transforms": ^7.19.6 + "@babel/helper-plugin-utils": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4236aad970025bc10c772c1589b1e2eab8b7681933bb5ffa6e395d4c1a52532b28c47c553e3011b4272ea81e5ab39fe969eb5349584e8390e59771055c467d42 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-commonjs@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.18.6" @@ -1263,6 +1460,19 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-commonjs@npm:^7.19.6": + version: 7.19.6 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.19.6" + dependencies: + "@babel/helper-module-transforms": ^7.19.6 + "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-simple-access": ^7.19.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 85d46945ab5ba3fff89e962d560a5d40253f228b9659a697683db3de07c0236e8cd60e5eb41958007359951a42bc268bf32350fcdb5b4a86f58dff1e032c096e + languageName: node + linkType: hard + "@babel/plugin-transform-modules-systemjs@npm:^7.19.0": version: 7.19.0 resolution: "@babel/plugin-transform-modules-systemjs@npm:7.19.0" @@ -1278,6 +1488,20 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-modules-systemjs@npm:^7.19.6": + version: 7.19.6 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.19.6" + dependencies: + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-module-transforms": ^7.19.6 + "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-validator-identifier": ^7.19.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8526431cc81ea3eb232ad50862d0ed1cbb422b5251d14a8d6610d0ca0617f6e75f35179e98eb1235d0cccb980120350b9f112594e5646dd45378d41eaaf87342 + languageName: node + linkType: hard + "@babel/plugin-transform-modules-umd@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-modules-umd@npm:7.18.6" @@ -1336,6 +1560,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-parameters@npm:^7.20.1": + version: 7.20.3 + resolution: "@babel/plugin-transform-parameters@npm:7.20.3" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 69054c93d744574e06b0244623140718ecba87e1cc34bd5c7bd5824fd4dbef764ac4832046ea1ba5d2c6a2f12e03289555c9f65f0aafae4871f3d740ff61b9ec + languageName: node + linkType: hard + "@babel/plugin-transform-property-literals@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-property-literals@npm:7.18.6" @@ -1391,7 +1626,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.17.12, @babel/plugin-transform-react-jsx@npm:^7.18.10, @babel/plugin-transform-react-jsx@npm:^7.18.6": +"@babel/plugin-transform-react-jsx-source@npm:^7.19.6": + version: 7.19.6 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.19.6" + dependencies: + "@babel/helper-plugin-utils": ^7.19.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 1e9e29a4efc5b79840bd4f68e404f5ab7765ce48c7bd22f12f2b185f9c782c66933bdf54a1b21879e4e56e6b50b4e88aca82789ecb1f61123af6dfa9ab16c555 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx@npm:^7.17.12, @babel/plugin-transform-react-jsx@npm:^7.18.10, @babel/plugin-transform-react-jsx@npm:^7.18.6, @babel/plugin-transform-react-jsx@npm:^7.19.0": version: 7.19.0 resolution: "@babel/plugin-transform-react-jsx@npm:7.19.0" dependencies: @@ -1533,7 +1779,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.18.10, @babel/preset-env@npm:^7.19.4": +"@babel/preset-env@npm:^7.18.10": version: 7.19.4 resolution: "@babel/preset-env@npm:7.19.4" dependencies: @@ -1618,6 +1864,91 @@ __metadata: languageName: node linkType: hard +"@babel/preset-env@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/preset-env@npm:7.20.2" + dependencies: + "@babel/compat-data": ^7.20.1 + "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-validator-option": ^7.18.6 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 + "@babel/plugin-proposal-async-generator-functions": ^7.20.1 + "@babel/plugin-proposal-class-properties": ^7.18.6 + "@babel/plugin-proposal-class-static-block": ^7.18.6 + "@babel/plugin-proposal-dynamic-import": ^7.18.6 + "@babel/plugin-proposal-export-namespace-from": ^7.18.9 + "@babel/plugin-proposal-json-strings": ^7.18.6 + "@babel/plugin-proposal-logical-assignment-operators": ^7.18.9 + "@babel/plugin-proposal-nullish-coalescing-operator": ^7.18.6 + "@babel/plugin-proposal-numeric-separator": ^7.18.6 + "@babel/plugin-proposal-object-rest-spread": ^7.20.2 + "@babel/plugin-proposal-optional-catch-binding": ^7.18.6 + "@babel/plugin-proposal-optional-chaining": ^7.18.9 + "@babel/plugin-proposal-private-methods": ^7.18.6 + "@babel/plugin-proposal-private-property-in-object": ^7.18.6 + "@babel/plugin-proposal-unicode-property-regex": ^7.18.6 + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-class-properties": ^7.12.13 + "@babel/plugin-syntax-class-static-block": ^7.14.5 + "@babel/plugin-syntax-dynamic-import": ^7.8.3 + "@babel/plugin-syntax-export-namespace-from": ^7.8.3 + "@babel/plugin-syntax-import-assertions": ^7.20.0 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.10.4 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-private-property-in-object": ^7.14.5 + "@babel/plugin-syntax-top-level-await": ^7.14.5 + "@babel/plugin-transform-arrow-functions": ^7.18.6 + "@babel/plugin-transform-async-to-generator": ^7.18.6 + "@babel/plugin-transform-block-scoped-functions": ^7.18.6 + "@babel/plugin-transform-block-scoping": ^7.20.2 + "@babel/plugin-transform-classes": ^7.20.2 + "@babel/plugin-transform-computed-properties": ^7.18.9 + "@babel/plugin-transform-destructuring": ^7.20.2 + "@babel/plugin-transform-dotall-regex": ^7.18.6 + "@babel/plugin-transform-duplicate-keys": ^7.18.9 + "@babel/plugin-transform-exponentiation-operator": ^7.18.6 + "@babel/plugin-transform-for-of": ^7.18.8 + "@babel/plugin-transform-function-name": ^7.18.9 + "@babel/plugin-transform-literals": ^7.18.9 + "@babel/plugin-transform-member-expression-literals": ^7.18.6 + "@babel/plugin-transform-modules-amd": ^7.19.6 + "@babel/plugin-transform-modules-commonjs": ^7.19.6 + "@babel/plugin-transform-modules-systemjs": ^7.19.6 + "@babel/plugin-transform-modules-umd": ^7.18.6 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.19.1 + "@babel/plugin-transform-new-target": ^7.18.6 + "@babel/plugin-transform-object-super": ^7.18.6 + "@babel/plugin-transform-parameters": ^7.20.1 + "@babel/plugin-transform-property-literals": ^7.18.6 + "@babel/plugin-transform-regenerator": ^7.18.6 + "@babel/plugin-transform-reserved-words": ^7.18.6 + "@babel/plugin-transform-shorthand-properties": ^7.18.6 + "@babel/plugin-transform-spread": ^7.19.0 + "@babel/plugin-transform-sticky-regex": ^7.18.6 + "@babel/plugin-transform-template-literals": ^7.18.9 + "@babel/plugin-transform-typeof-symbol": ^7.18.9 + "@babel/plugin-transform-unicode-escapes": ^7.18.10 + "@babel/plugin-transform-unicode-regex": ^7.18.6 + "@babel/preset-modules": ^0.1.5 + "@babel/types": ^7.20.2 + babel-plugin-polyfill-corejs2: ^0.3.3 + babel-plugin-polyfill-corejs3: ^0.6.0 + babel-plugin-polyfill-regenerator: ^0.4.1 + core-js-compat: ^3.25.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ece2d7e9c7789db6116e962b8e1a55eb55c110c44c217f0c8f6ffea4ca234954e66557f7bd019b7affadf7fbb3a53ccc807e93fc935aacd48146234b73b6947e + languageName: node + linkType: hard + "@babel/preset-modules@npm:^0.1.5": version: 0.1.5 resolution: "@babel/preset-modules@npm:0.1.5" @@ -1710,6 +2041,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.20.1": + version: 7.20.1 + resolution: "@babel/traverse@npm:7.20.1" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.20.1 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.20.1 + "@babel/types": ^7.20.0 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 6696176d574b7ff93466848010bc7e94b250169379ec2a84f1b10da46a7cc2018ea5e3a520c3078487db51e3a4afab9ecff48f25d1dbad8c1319362f4148fb4b + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.10.3, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.4, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.19.3, @babel/types@npm:^7.19.4, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.19.4 resolution: "@babel/types@npm:7.19.4" @@ -1721,6 +2070,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2": + version: 7.20.2 + resolution: "@babel/types@npm:7.20.2" + dependencies: + "@babel/helper-string-parser": ^7.19.4 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: 57e76e5f21876135f481bfd4010c87f2d38196bb0a2bc60a28d6e55e3afa90cdd9accf164e4cb71bdfb620517fa0a0cb5600cdce36c21d59fdaccfbb899c024c + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -1746,23 +2106,23 @@ __metadata: languageName: node linkType: hard -"@commitlint/cli@npm:^17.1.2": - version: 17.1.2 - resolution: "@commitlint/cli@npm:17.1.2" +"@commitlint/cli@npm:^17.3.0": + version: 17.3.0 + resolution: "@commitlint/cli@npm:17.3.0" dependencies: "@commitlint/format": ^17.0.0 - "@commitlint/lint": ^17.1.0 - "@commitlint/load": ^17.1.2 - "@commitlint/read": ^17.1.0 + "@commitlint/lint": ^17.3.0 + "@commitlint/load": ^17.3.0 + "@commitlint/read": ^17.2.0 "@commitlint/types": ^17.0.0 execa: ^5.0.0 - lodash: ^4.17.19 + lodash.isfunction: ^3.0.9 resolve-from: 5.0.0 resolve-global: 1.0.0 yargs: ^17.0.0 bin: commitlint: cli.js - checksum: 2f87c560ede9c731574ceb3a4be0d4a12fed60aedef57a567a98b978537105da0aa70d189803f7894ee7a079038f63ee45345ebd29e9d29789d9fdf4c64006d4 + checksum: 9f544ea528198bbb8ee00c54dc68a4933c680bd6e995817b7acabe3352835ee77b7c86f522a0bb749684422d469365fdc86c134012c9b1c0af42a2e1ed3b342c languageName: node linkType: hard @@ -1773,12 +2133,12 @@ __metadata: languageName: node linkType: hard -"@commitlint/config-angular@npm:^17.1.0": - version: 17.1.0 - resolution: "@commitlint/config-angular@npm:17.1.0" +"@commitlint/config-angular@npm:^17.3.0": + version: 17.3.0 + resolution: "@commitlint/config-angular@npm:17.3.0" dependencies: "@commitlint/config-angular-type-enum": ^17.0.0 - checksum: 6e5293db135ffa0869cf548c0364dcc64e019b61b0f1b576bf51565b523f3c727ce38c8a368c20cd6221e3100e5fd3cd8468c873fa1133fdd5ec4b58ceeba1f6 + checksum: 5c44fe377a47566583edb182eac047a4626b7e4e6253cbc75252d150727041a38b0a1abe8ec8cf7ab79f0ab1ae16a572ec659c3b73a948f4422d520106c6fd1d languageName: node linkType: hard @@ -1792,13 +2152,17 @@ __metadata: languageName: node linkType: hard -"@commitlint/ensure@npm:^17.0.0": - version: 17.0.0 - resolution: "@commitlint/ensure@npm:17.0.0" +"@commitlint/ensure@npm:^17.3.0": + version: 17.3.0 + resolution: "@commitlint/ensure@npm:17.3.0" dependencies: "@commitlint/types": ^17.0.0 - lodash: ^4.17.19 - checksum: 5ce3c624417dc64ed0d406954b7684ed287142535b0f55df6984093d0f82eadf0da5ab3e472e3020139304cd007c682a4bdfb95cf53fb99e7c7ae6d4711ada6b + lodash.camelcase: ^4.3.0 + lodash.kebabcase: ^4.1.1 + lodash.snakecase: ^4.1.1 + lodash.startcase: ^4.4.0 + lodash.upperfirst: ^4.3.1 + checksum: 55f880497fd5858d60e1664372c644819c8095f29b8587b7151d6c75d4d22fcfa201b159f6b8c917e13f5960479ec0daaae89b2b72fdd2ba2abc383f609d0798 languageName: node linkType: hard @@ -1819,103 +2183,105 @@ __metadata: languageName: node linkType: hard -"@commitlint/is-ignored@npm:^17.1.0": - version: 17.1.0 - resolution: "@commitlint/is-ignored@npm:17.1.0" +"@commitlint/is-ignored@npm:^17.2.0": + version: 17.2.0 + resolution: "@commitlint/is-ignored@npm:17.2.0" dependencies: "@commitlint/types": ^17.0.0 semver: 7.3.7 - checksum: d371e7dbf137dee40d06b54f7edd1ac079d6ff696d756fb8b6a9c1a69b12a92295ecd2cf6d7079db229783c510b57a5f88080f486d3810177aef85b098f2464d + checksum: ae88eae5f4661d963a46ed39ae58dd3e3b0a1139cbab59f76f535170eb263c203e25d67286f3a0dedb7cfd77606d65d65a9eaa8e4a1949cd82d342064c4e5cc3 languageName: node linkType: hard -"@commitlint/lint@npm:^17.1.0": - version: 17.1.0 - resolution: "@commitlint/lint@npm:17.1.0" +"@commitlint/lint@npm:^17.3.0": + version: 17.3.0 + resolution: "@commitlint/lint@npm:17.3.0" dependencies: - "@commitlint/is-ignored": ^17.1.0 - "@commitlint/parse": ^17.0.0 - "@commitlint/rules": ^17.0.0 + "@commitlint/is-ignored": ^17.2.0 + "@commitlint/parse": ^17.2.0 + "@commitlint/rules": ^17.3.0 "@commitlint/types": ^17.0.0 - checksum: a457461da400d9adc5fa52bdc78c0e97f9b0f3e021f4b74efae2e7aae1b3febea759ef4a952cde2330a247cd48203345b038197ed1fcc750433ac042a4a7217d + checksum: 71a7b2cbb0eaeebcf50d66260112abe30c1118a55c7c4c89f72c40bdc52149455023877a9906d272d53f6c9673713dbd3baac14a7bcf6c81e618db3fc8d83e05 languageName: node linkType: hard -"@commitlint/load@npm:^17.1.2": - version: 17.1.2 - resolution: "@commitlint/load@npm:17.1.2" +"@commitlint/load@npm:^17.3.0": + version: 17.3.0 + resolution: "@commitlint/load@npm:17.3.0" dependencies: "@commitlint/config-validator": ^17.1.0 "@commitlint/execute-rule": ^17.0.0 - "@commitlint/resolve-extends": ^17.1.0 + "@commitlint/resolve-extends": ^17.3.0 "@commitlint/types": ^17.0.0 "@types/node": ^14.0.0 chalk: ^4.1.0 cosmiconfig: ^7.0.0 cosmiconfig-typescript-loader: ^4.0.0 - lodash: ^4.17.19 + lodash.isplainobject: ^4.0.6 + lodash.merge: ^4.6.2 + lodash.uniq: ^4.5.0 resolve-from: ^5.0.0 ts-node: ^10.8.1 typescript: ^4.6.4 - checksum: c01e2d8a5b9b20706d91d7930f960b901450aa1e306d597eb0fca56f60d692bd1f63495914614bd59b0a6bcc51e11036a2291c79beb96ab7e8463034c5c5ecbb + checksum: 7049eb87f53af960761bcabb04a5b05cde0d41a540d9d7138e766dd4489a067d70bfd1c558892d87bc30ccceb1b8db1ff019ca9966caff94c6fa83c5ea836c18 languageName: node linkType: hard -"@commitlint/message@npm:^17.0.0": - version: 17.0.0 - resolution: "@commitlint/message@npm:17.0.0" - checksum: ec80ea7f98082e48116fda1203277ac139bf2f442a8f58f87f8b823c6e526ec3771a9de7821b249254d580bff59a3fe205d044d1e9df29c34c3014a41e851c5d +"@commitlint/message@npm:^17.2.0": + version: 17.2.0 + resolution: "@commitlint/message@npm:17.2.0" + checksum: 504760cfb1004d571f198d60641d2dc3e59e0ac28a244ba767fe938ee1124399acbe5be3b074da9ec88a9cb6b0378e198833c4b983feaeb0e4f1f886bbe927b6 languageName: node linkType: hard -"@commitlint/parse@npm:^17.0.0": - version: 17.0.0 - resolution: "@commitlint/parse@npm:17.0.0" +"@commitlint/parse@npm:^17.2.0": + version: 17.2.0 + resolution: "@commitlint/parse@npm:17.2.0" dependencies: "@commitlint/types": ^17.0.0 conventional-changelog-angular: ^5.0.11 conventional-commits-parser: ^3.2.2 - checksum: 86610df080665b8ba83037c598f4e6d0538a5ec40fdb0c2ad1925bfdf0f494934deafa020d2e21663f64dbc20fec4e889d21675573d3860c379c2d305db7a141 + checksum: a6be0e9124debb2e2d97dd442a855c9dafcc86999b970f52e77bddf4a5e5ff569011ea1a2f5ab6075ec1f5634b8354e68033fd01542abf9c72b026ae77306189 languageName: node linkType: hard -"@commitlint/read@npm:^17.1.0": - version: 17.1.0 - resolution: "@commitlint/read@npm:17.1.0" +"@commitlint/read@npm:^17.2.0": + version: 17.2.0 + resolution: "@commitlint/read@npm:17.2.0" dependencies: "@commitlint/top-level": ^17.0.0 "@commitlint/types": ^17.0.0 fs-extra: ^10.0.0 git-raw-commits: ^2.0.0 minimist: ^1.2.6 - checksum: b9f728860a17db3e6c2e7872eca788b83192e1b83fbed3c4acdc0a83674573576df40041ca136eec9e19c1d0964efe31cfa98ec3f0907ccdefa80f6b5e7eeca4 + checksum: b2adcbe1f1853a0d6b477c245a22ce18eda0e15c47d0211aa141f5101acf84b77e4c9bace076021e8d0a78b3d05c1f7f4e04e550ea0317992b592686e07b81ac languageName: node linkType: hard -"@commitlint/resolve-extends@npm:^17.1.0": - version: 17.1.0 - resolution: "@commitlint/resolve-extends@npm:17.1.0" +"@commitlint/resolve-extends@npm:^17.3.0": + version: 17.3.0 + resolution: "@commitlint/resolve-extends@npm:17.3.0" dependencies: "@commitlint/config-validator": ^17.1.0 "@commitlint/types": ^17.0.0 import-fresh: ^3.0.0 - lodash: ^4.17.19 + lodash.mergewith: ^4.6.2 resolve-from: ^5.0.0 resolve-global: ^1.0.0 - checksum: cc50ed7ca987dc9e308d49b8620d014a84b26f2354b247dddd74e40406c3554946c4565d978e63538527fa46c6be2ca73c05b29e5c6d6f4c4c6f97bd1d0d29fb + checksum: 9f4a89f412d6505a7154dd27fbfd428cb261e3aa39bd825c1f3d6257b5674a9cb3dcdaf65e6dab7b64f379b2984fea7fb4a37142cec7bb8df8a6df8e0761763c languageName: node linkType: hard -"@commitlint/rules@npm:^17.0.0": - version: 17.0.0 - resolution: "@commitlint/rules@npm:17.0.0" +"@commitlint/rules@npm:^17.3.0": + version: 17.3.0 + resolution: "@commitlint/rules@npm:17.3.0" dependencies: - "@commitlint/ensure": ^17.0.0 - "@commitlint/message": ^17.0.0 + "@commitlint/ensure": ^17.3.0 + "@commitlint/message": ^17.2.0 "@commitlint/to-lines": ^17.0.0 "@commitlint/types": ^17.0.0 execa: ^5.0.0 - checksum: cd0944069932bee738a0ed70cb972fa0d14c0e35642310ca856d5e368ddc48513d05ece00f2e309ebcf4ecb119f8b44b322ff086edaa5208edb3cec0968dac06 + checksum: bc8c16701af4634e7ef260c41602d628dc49bcaaa0cae97674d9ce303db68b703a5fa7f2e8edfc67dfb115e4d0d8616261d11a472833d61c248b54bee9d84748 languageName: node linkType: hard @@ -1999,17 +2365,17 @@ __metadata: resolution: "@discordjs/actions@workspace:packages/actions" dependencies: "@actions/core": ^1.10.0 - "@types/node": 16.11.68 - "@vitest/coverage-c8": ^0.24.3 + "@types/node": 16.18.3 + "@vitest/coverage-c8": ^0.25.2 cross-env: ^7.0.3 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 - tslib: ^2.4.0 - tsup: ^6.3.0 - typescript: ^4.8.4 - vitest: ^0.24.3 + tslib: ^2.4.1 + tsup: ^6.5.0 + typescript: ^4.9.3 + vitest: ^0.25.2 languageName: unknown linkType: soft @@ -2019,14 +2385,14 @@ __metadata: dependencies: "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": 0.14.1 - "@types/node": 16.11.68 + "@types/node": 16.18.3 cross-env: ^7.0.3 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 - tsup: ^6.3.0 - typescript: ^4.8.4 + tsup: ^6.5.0 + typescript: ^4.9.3 languageName: unknown linkType: soft @@ -2034,21 +2400,21 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/brokers@workspace:packages/brokers" dependencies: - "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.33.4 + "@favware/cliff-jumper": ^1.9.0 + "@microsoft/api-extractor": ^7.33.6 "@msgpack/msgpack": ^2.8.0 - "@types/node": ^16.11.68 - "@vitest/coverage-c8": ^0.24.3 + "@types/node": 16.18.3 + "@vitest/coverage-c8": ^0.25.2 "@vladfrangu/async_event_emitter": ^2.1.2 cross-env: ^7.0.3 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 - ioredis: ^5.2.3 + ioredis: ^5.2.4 prettier: ^2.7.1 - tsup: ^6.3.0 - typescript: ^4.8.4 - vitest: ^0.24.3 + tsup: ^6.5.0 + typescript: ^4.9.3 + vitest: ^0.25.2 languageName: unknown linkType: soft @@ -2057,24 +2423,24 @@ __metadata: resolution: "@discordjs/builders@workspace:packages/builders" dependencies: "@discordjs/util": "workspace:^" - "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.33.4 + "@favware/cliff-jumper": ^1.9.0 + "@microsoft/api-extractor": ^7.33.6 "@sapphire/shapeshift": ^3.7.0 - "@types/node": 16.11.68 - "@vitest/coverage-c8": ^0.24.3 + "@types/node": 16.18.3 + "@vitest/coverage-c8": ^0.25.2 cross-env: ^7.0.3 - discord-api-types: ^0.37.14 + discord-api-types: ^0.37.19 esbuild-plugin-version-injector: ^1.0.0 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 fast-deep-equal: ^3.1.3 prettier: ^2.7.1 - ts-mixer: ^6.0.1 - tslib: ^2.4.0 - tsup: ^6.3.0 - typescript: ^4.8.4 - vitest: ^0.24.3 + ts-mixer: ^6.0.2 + tslib: ^2.4.1 + tsup: ^6.5.0 + typescript: ^4.9.3 + vitest: ^0.25.2 languageName: unknown linkType: soft @@ -2082,19 +2448,19 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/collection@workspace:packages/collection" dependencies: - "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.33.4 - "@types/node": 16.11.68 - "@vitest/coverage-c8": ^0.24.3 + "@favware/cliff-jumper": ^1.9.0 + "@microsoft/api-extractor": ^7.33.6 + "@types/node": 16.18.3 + "@vitest/coverage-c8": ^0.25.2 cross-env: ^7.0.3 esbuild-plugin-version-injector: ^1.0.0 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 - tsup: ^6.3.0 - typescript: ^4.8.4 - vitest: ^0.24.3 + tsup: ^6.5.0 + typescript: ^4.9.3 + vitest: ^0.25.2 languageName: unknown linkType: soft @@ -2102,19 +2468,19 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/discord.js@workspace:." dependencies: - "@commitlint/cli": ^17.1.2 - "@commitlint/config-angular": ^17.1.0 - "@favware/cliff-jumper": ^1.8.8 + "@commitlint/cli": ^17.3.0 + "@commitlint/config-angular": ^17.3.0 + "@favware/cliff-jumper": ^1.9.0 "@favware/npm-deprecate": ^1.0.5 conventional-changelog-cli: ^2.2.2 - husky: ^8.0.1 + husky: ^8.0.2 is-ci: ^3.0.1 lint-staged: ^13.0.3 - tsup: ^6.3.0 - turbo: ^1.5.6 - typescript: ^4.8.4 - unocss: ^0.45.30 - vitest: ^0.24.3 + tsup: ^6.5.0 + turbo: ^1.6.3 + typescript: ^4.9.3 + unocss: ^0.46.5 + vitest: ^0.25.2 languageName: unknown linkType: soft @@ -2122,20 +2488,20 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/docgen@workspace:packages/docgen" dependencies: - "@favware/cliff-jumper": ^1.8.8 + "@favware/cliff-jumper": ^1.9.0 "@types/jsdoc-to-markdown": ^7.0.3 - "@types/node": 16.11.68 + "@types/node": 16.18.3 commander: ^9.4.1 cross-env: ^7.0.3 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 jsdoc-to-markdown: ^7.1.1 prettier: ^2.7.1 - tslib: ^2.4.0 - tsup: ^6.3.0 - typedoc: ^0.23.17 - typescript: ^4.8.4 + tslib: ^2.4.1 + tsup: ^6.5.0 + typedoc: ^0.23.21 + typescript: ^4.9.3 bin: docgen: ./dist/cli.js languageName: unknown @@ -2145,38 +2511,38 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/guide@workspace:apps/guide" dependencies: - "@astrojs/image": ^0.10.0 - "@astrojs/mdx": ^0.11.4 - "@astrojs/prefetch": ^0.1.0 - "@astrojs/react": ^1.2.1 + "@astrojs/image": ^0.11.6 + "@astrojs/mdx": ^0.11.6 + "@astrojs/prefetch": ^0.1.1 + "@astrojs/react": ^1.2.2 "@code-hike/mdx": ^0.7.4 "@discordjs/ui": "workspace:^" "@testing-library/react": ^13.4.0 "@testing-library/user-event": ^14.4.3 - "@types/node": 16.11.68 - "@types/react": ^17.0.50 - "@types/react-dom": ^17.0.17 + "@types/node": 16.18.3 + "@types/react": ^17.0.52 + "@types/react-dom": ^17.0.18 "@types/react-syntax-highlighter": ^15.5.5 - "@unocss/cli": ^0.45.30 - "@unocss/reset": ^0.45.30 - "@vitejs/plugin-react": ^2.1.0 - "@vitest/coverage-c8": ^0.24.3 + "@unocss/cli": ^0.46.5 + "@unocss/reset": ^0.46.5 + "@vitejs/plugin-react": ^2.2.0 + "@vitest/coverage-c8": ^0.25.2 ariakit: ^2.0.0-next.41 - astro: ^1.5.2 - astro-compress: ^1.0.12 - astro-critters: ^1.0.5 + astro: ^1.6.10 + astro-compress: ^1.1.8 + astro-critters: ^1.1.8 cmdk: ^0.1.20 cross-env: ^7.0.3 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 - happy-dom: ^7.6.0 + happy-dom: ^7.7.0 hast-util-to-string: ^2.0.0 hastscript: ^7.1.0 html-escaper: ^3.0.3 - meilisearch: ^0.28.0 + meilisearch: ^0.29.1 prettier: ^2.7.1 - prettier-plugin-astro: ^0.6.0 + prettier-plugin-astro: ^0.7.0 prettier-plugin-tailwindcss: ^0.1.13 react: ^17.0.2 react-custom-scrollbars-2: ^4.5.0 @@ -2184,13 +2550,13 @@ __metadata: react-icons: ^4.6.0 react-use: ^17.4.0 rehype-autolink-headings: ^6.1.1 - rehype-slug: ^5.0.1 - sharp: ^0.31.1 + rehype-slug: ^5.1.0 + sharp: ^0.31.2 shiki: ^0.11.1 - typescript: ^4.8.4 - unocss: ^0.45.30 - vercel: ^28.4.12 - vitest: ^0.24.3 + typescript: ^4.9.3 + unocss: ^0.46.5 + vercel: ^28.5.6 + vitest: ^0.25.2 languageName: unknown linkType: soft @@ -2200,15 +2566,15 @@ __metadata: dependencies: "@discordjs/proxy": ^1.2.0 "@discordjs/rest": ^1.3.0 - "@types/node": 16.11.68 + "@types/node": 16.18.3 cross-env: ^7.0.3 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 - tslib: ^2.4.0 - tsup: ^6.3.0 - typescript: ^4.8.4 + tslib: ^2.4.1 + tsup: ^6.5.0 + typescript: ^4.9.3 languageName: unknown linkType: soft @@ -2218,22 +2584,22 @@ __metadata: dependencies: "@discordjs/rest": ^1.0.0 "@discordjs/util": "workspace:^" - "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.33.4 - "@types/node": 16.11.68 + "@favware/cliff-jumper": ^1.9.0 + "@microsoft/api-extractor": ^7.33.6 + "@types/node": 16.18.3 "@types/supertest": ^2.0.12 - "@vitest/coverage-c8": ^0.24.3 + "@vitest/coverage-c8": ^0.25.2 cross-env: ^7.0.3 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 - supertest: ^6.3.0 - tslib: ^2.4.0 - tsup: ^6.3.0 - typescript: ^4.8.4 - undici: ^5.11.0 - vitest: ^0.24.3 + supertest: ^6.3.1 + tslib: ^2.4.1 + tsup: ^6.5.0 + typescript: ^4.9.3 + undici: ^5.12.0 + vitest: ^0.25.2 languageName: unknown linkType: soft @@ -2243,25 +2609,25 @@ __metadata: dependencies: "@discordjs/collection": "workspace:^" "@discordjs/util": "workspace:^" - "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.33.4 + "@favware/cliff-jumper": ^1.9.0 + "@microsoft/api-extractor": ^7.33.6 "@sapphire/async-queue": ^1.5.0 "@sapphire/snowflake": ^3.2.2 - "@types/node": 16.11.68 - "@vitest/coverage-c8": ^0.24.3 + "@types/node": 16.18.3 + "@vitest/coverage-c8": ^0.25.2 cross-env: ^7.0.3 - discord-api-types: ^0.37.14 + discord-api-types: ^0.37.19 esbuild-plugin-version-injector: ^1.0.0 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 file-type: ^18.0.0 prettier: ^2.7.1 - tslib: ^2.4.0 - tsup: ^6.3.0 - typescript: ^4.8.4 - undici: ^5.11.0 - vitest: ^0.24.3 + tslib: ^2.4.1 + tsup: ^6.5.0 + typescript: ^4.9.3 + undici: ^5.12.0 + vitest: ^0.25.2 languageName: unknown linkType: soft @@ -2274,20 +2640,20 @@ __metadata: "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": 0.16.1 "@types/fs-extra": ^9.0.13 - "@types/node": 16.11.68 - "@vitest/coverage-c8": ^0.24.3 + "@types/node": 16.18.3 + "@vitest/coverage-c8": ^0.25.2 commander: ^9.4.1 cross-env: ^7.0.3 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 fs-extra: ^10.1.0 prettier: ^2.7.1 - tslib: ^2.4.0 - tsup: ^6.3.0 - typescript: ^4.8.4 - undici: ^5.11.0 - vitest: ^0.24.3 + tslib: ^2.4.1 + tsup: ^6.5.0 + typescript: ^4.9.3 + undici: ^5.12.0 + vitest: ^0.25.2 yaml: ^2.1.3 languageName: unknown linkType: soft @@ -2296,28 +2662,28 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/ui@workspace:packages/ui" dependencies: - "@favware/cliff-jumper": ^1.8.8 + "@favware/cliff-jumper": ^1.9.0 "@ladle/react": ^2.4.5 - "@types/node": 16.11.68 - "@types/react": ^18.0.21 - "@types/react-dom": ^18.0.6 - "@unocss/reset": ^0.45.30 - "@vitejs/plugin-react": ^2.1.0 - "@vitest/coverage-c8": ^0.24.3 + "@types/node": 16.18.3 + "@types/react": ^18.0.25 + "@types/react-dom": ^18.0.9 + "@unocss/reset": ^0.46.5 + "@vitejs/plugin-react": ^2.2.0 + "@vitest/coverage-c8": ^0.25.2 ariakit: ^2.0.0-next.41 cross-env: ^7.0.3 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 react: ^18.2.0 react-dom: ^18.2.0 react-icons: ^4.6.0 - typescript: ^4.8.4 - unocss: ^0.45.30 - vite: ^3.1.8 - vite-plugin-dts: ^1.6.6 - vitest: ^0.24.3 + typescript: ^4.9.3 + unocss: ^0.46.5 + vite: ^3.2.4 + vite-plugin-dts: ^1.7.1 + vitest: ^0.25.2 languageName: unknown linkType: soft @@ -2325,19 +2691,19 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/util@workspace:packages/util" dependencies: - "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.33.4 - "@types/node": 16.11.68 - "@vitest/coverage-c8": ^0.24.3 + "@favware/cliff-jumper": ^1.9.0 + "@microsoft/api-extractor": ^7.33.6 + "@types/node": 16.18.3 + "@vitest/coverage-c8": ^0.25.2 cross-env: ^7.0.3 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 tsd: ^0.24.1 - tsup: ^6.3.0 - typescript: ^4.8.4 - vitest: ^0.24.3 + tsup: ^6.5.0 + typescript: ^4.9.3 + vitest: ^0.25.2 languageName: unknown linkType: soft @@ -2345,30 +2711,30 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/voice@workspace:packages/voice" dependencies: - "@babel/core": ^7.19.3 - "@babel/preset-env": ^7.19.4 + "@babel/core": ^7.20.2 + "@babel/preset-env": ^7.20.2 "@babel/preset-typescript": ^7.18.6 - "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.33.4 - "@types/jest": ^29.2.0 - "@types/node": 16.11.68 + "@favware/cliff-jumper": ^1.9.0 + "@microsoft/api-extractor": ^7.33.6 + "@types/jest": ^29.2.3 + "@types/node": 16.18.3 "@types/ws": ^8.5.3 cross-env: ^7.0.3 - discord-api-types: ^0.37.14 + discord-api-types: ^0.37.19 esbuild-plugin-version-injector: ^1.0.0 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 - jest: ^29.2.1 + jest: ^29.3.1 jest-websocket-mock: ^2.4.0 mock-socket: ^9.1.5 prettier: ^2.7.1 prism-media: ^1.3.4 - tslib: ^2.4.0 - tsup: ^6.3.0 + tslib: ^2.4.1 + tsup: ^6.5.0 tweetnacl: ^1.0.3 - typescript: ^4.8.4 - ws: ^8.9.0 + typescript: ^4.9.3 + ws: ^8.11.0 languageName: unknown linkType: soft @@ -2383,27 +2749,27 @@ __metadata: "@microsoft/tsdoc": 0.14.1 "@testing-library/react": ^13.4.0 "@testing-library/user-event": ^14.4.3 - "@types/node": 16.11.68 - "@types/react": ^18.0.21 - "@types/react-dom": ^18.0.6 + "@types/node": 16.18.3 + "@types/react": ^18.0.25 + "@types/react-dom": ^18.0.9 "@types/react-syntax-highlighter": ^15.5.5 - "@unocss/cli": ^0.45.30 - "@unocss/reset": ^0.45.30 - "@vercel/og": ^0.0.19 - "@vitejs/plugin-react": ^2.1.0 - "@vitest/coverage-c8": ^0.24.3 + "@unocss/cli": ^0.46.5 + "@unocss/reset": ^0.46.5 + "@vercel/og": ^0.0.21 + "@vitejs/plugin-react": ^2.2.0 + "@vitest/coverage-c8": ^0.25.2 "@vscode/codicons": ^0.0.32 ariakit: ^2.0.0-next.41 cmdk: ^0.1.20 - concurrently: ^7.4.0 + concurrently: ^7.6.0 cross-env: ^7.0.3 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 - happy-dom: ^7.6.0 - meilisearch: ^0.28.0 - next: ^12.3.1 - next-mdx-remote: ^4.1.0 + happy-dom: ^7.7.0 + meilisearch: ^0.29.1 + next: ^12.3.4 + next-mdx-remote: ^4.2.0 next-progress: ^2.2.0 next-themes: ^0.2.1 prettier: ^2.7.1 @@ -2414,18 +2780,18 @@ __metadata: react-icons: ^4.6.0 react-syntax-highlighter: ^15.5.0 react-use: ^17.4.0 - rehype-ignore: ^1.0.1 - rehype-pretty-code: ^0.4.0 + rehype-ignore: ^1.0.3 + rehype-pretty-code: ^0.5.0 rehype-raw: ^6.1.1 - rehype-slug: ^5.0.1 + rehype-slug: ^5.1.0 remark-gfm: ^3.0.1 - sharp: ^0.31.1 + sharp: ^0.31.2 shiki: ^0.11.1 swr: ^1.3.0 - typescript: ^4.8.4 - unocss: ^0.45.30 - vercel: ^28.4.12 - vitest: ^0.24.3 + typescript: ^4.9.3 + unocss: ^0.46.5 + vercel: ^28.5.6 + vitest: ^0.25.2 languageName: unknown linkType: soft @@ -2436,51 +2802,51 @@ __metadata: "@discordjs/collection": "workspace:^" "@discordjs/rest": "workspace:^" "@discordjs/util": "workspace:^" - "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.33.4 + "@favware/cliff-jumper": ^1.9.0 + "@microsoft/api-extractor": ^7.33.6 "@sapphire/async-queue": ^1.5.0 - "@types/node": 16.11.68 + "@types/node": 16.18.3 "@types/ws": ^8.5.3 - "@vitest/coverage-c8": ^0.24.3 + "@vitest/coverage-c8": ^0.25.2 "@vladfrangu/async_event_emitter": ^2.1.2 cross-env: ^7.0.3 - discord-api-types: ^0.37.14 + discord-api-types: ^0.37.19 esbuild-plugin-version-injector: ^1.0.0 - eslint: ^8.25.0 - eslint-config-neon: ^0.1.39 + eslint: ^8.28.0 + eslint-config-neon: ^0.1.40 eslint-formatter-pretty: ^4.1.0 mock-socket: ^9.1.5 prettier: ^2.7.1 - tslib: ^2.4.0 - tsup: ^6.3.0 - typescript: ^4.8.4 - undici: ^5.11.0 - vitest: ^0.24.3 - ws: ^8.9.0 + tslib: ^2.4.1 + tsup: ^6.5.0 + typescript: ^4.9.3 + undici: ^5.12.0 + vitest: ^0.25.2 + ws: ^8.11.0 zlib-sync: ^0.1.7 languageName: unknown linkType: soft -"@edge-runtime/format@npm:1.1.0-beta.34": - version: 1.1.0-beta.34 - resolution: "@edge-runtime/format@npm:1.1.0-beta.34" - checksum: 009bbd53d2772505c680db734e6f1cfbbd3caaa1394f064c1c942c7348dbb56e7682472931f6f07912edc943e60e834ad56811fcf83f1e2c8751d5ebf9202c4a +"@edge-runtime/format@npm:1.1.0": + version: 1.1.0 + resolution: "@edge-runtime/format@npm:1.1.0" + checksum: b017896197776eed3490bcb92ce6265d9cd1c46ab66a8eb65f1895093a163fbef281bf44acd2129d0d92882437876281a71e160f174ec0b43ef34893a3fe96fd languageName: node linkType: hard -"@edge-runtime/primitives@npm:1.1.0-beta.37": - version: 1.1.0-beta.37 - resolution: "@edge-runtime/primitives@npm:1.1.0-beta.37" - checksum: 2d9766eb88de103f6ab7f75db318892cd20304f00b5f7c93ee12c016e2655b8aa6fb9e2eb4982b1dc7579096765d7d65ae09d7a10680e918c3a8f442ff8c28a9 +"@edge-runtime/primitives@npm:2.0.0": + version: 2.0.0 + resolution: "@edge-runtime/primitives@npm:2.0.0" + checksum: f383faab52bafb3fe3f8f24bd6b963f2fd173ae8e76724b9a0b66653f76f14d936efadbaf520c0983a8354a59e7b85241650a24ae230b8aa135ba8d1cd7f5c06 languageName: node linkType: hard -"@edge-runtime/vm@npm:1.1.0-beta.37": - version: 1.1.0-beta.37 - resolution: "@edge-runtime/vm@npm:1.1.0-beta.37" +"@edge-runtime/vm@npm:2.0.0": + version: 2.0.0 + resolution: "@edge-runtime/vm@npm:2.0.0" dependencies: - "@edge-runtime/primitives": 1.1.0-beta.37 - checksum: 05419ebd835c37ee7bf0d892106fc10e258c411ad9a62d2a6fe43da5bbf3b4957df2f1ce14cd6493249c89c186707aa7ed30329a34c1d28228a74cfc59efabaa + "@edge-runtime/primitives": 2.0.0 + checksum: fee554b8fbc6887a4a23a4c65b947fc7a5c7901c2b12d5b211d80cd210e3885168985513ea278488afd0e107c470a6e8f535e010e3fc7903bc5f306a3c8094f7 languageName: node linkType: hard @@ -2509,14 +2875,14 @@ __metadata: languageName: node linkType: hard -"@es-joy/jsdoccomment@npm:~0.33.0": - version: 0.33.0 - resolution: "@es-joy/jsdoccomment@npm:0.33.0" +"@es-joy/jsdoccomment@npm:~0.36.0": + version: 0.36.0 + resolution: "@es-joy/jsdoccomment@npm:0.36.0" dependencies: comment-parser: 1.3.1 esquery: ^1.4.0 jsdoc-type-pratt-parser: ~3.1.0 - checksum: fe91f9d236fbae44b752b65d95fc6174f89f9b90b9a4cc270247f1f64ed1fe50b438f01303738677ee8c18e5746266bd65e3cba68708bf8190d503039e417f45 + checksum: c2fa95bc01f6b2a0caa521adaa37562b10b12095b5308948f3e122880d2ae9684c09e5b0e0809ac3e31e17580886d2d3b41fbf4ff4831649efce8cba8e30cf5c languageName: node linkType: hard @@ -2558,23 +2924,23 @@ __metadata: languageName: node linkType: hard -"@favware/cliff-jumper@npm:^1.8.8": - version: 1.8.8 - resolution: "@favware/cliff-jumper@npm:1.8.8" +"@favware/cliff-jumper@npm:^1.9.0": + version: 1.9.0 + resolution: "@favware/cliff-jumper@npm:1.9.0" dependencies: - "@sapphire/result": ^2.5.0 - "@sapphire/utilities": ^3.9.3 + "@sapphire/result": ^2.6.0 + "@sapphire/utilities": 3.11.0 colorette: ^2.0.19 commander: ^9.4.1 conventional-changelog-angular: ^5.0.13 conventional-recommended-bump: ^6.1.0 js-yaml: ^4.1.0 - semver: ^7.3.7 + semver: ^7.3.8 typescript: ^4.8.4 bin: cj: ./dist/cli.js cliff-jumper: ./dist/cli.js - checksum: 1e82daac8d975b7835b7326db794502d0aebd4f141dd18fdf5ccb80d4e2566050272bf2be5d82d918ea81a2a5a0245c71cb6738f366142e4da8d95403c08ab3e + checksum: 4218704159a44b25fed0bbe71babc37d26b63231b72343f580fa22cd132e5d1dba6717bd6d53365b49b1e8acd8906f1d391d6b8cc0fe0b59541c43d3aa82765e languageName: node linkType: hard @@ -2620,14 +2986,14 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.10.5": - version: 0.10.7 - resolution: "@humanwhocodes/config-array@npm:0.10.7" +"@humanwhocodes/config-array@npm:^0.11.6": + version: 0.11.7 + resolution: "@humanwhocodes/config-array@npm:0.11.7" dependencies: "@humanwhocodes/object-schema": ^1.2.1 debug: ^4.1.1 - minimatch: ^3.0.4 - checksum: 009d64be8d5bd098ff04e10af79e34f5633245250581fca032fac12a8667b2df8e7d169e69c05bff4d83ea3dd3c7d2d0e05ea9b94d89a7d092e26530caf6f8a3 + minimatch: ^3.0.5 + checksum: cf506dc45d9488af7fbf108ea6ac2151ba1a25e6d2b94b9b4fc36d2c1e4099b89ff560296dbfa13947e44604d4ca4a90d97a4fb167370bf8dd01a6ca2b6d83ac languageName: node linkType: hard @@ -2700,29 +3066,29 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/console@npm:29.2.1" +"@jest/console@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/console@npm:29.3.1" dependencies: - "@jest/types": ^29.2.1 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.2.1 - jest-util: ^29.2.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 slash: ^3.0.0 - checksum: b5f08dc60c32a0212d27782cda86dfeba6d53f24cd023e6e52257224948a17eec77db55782ba1b18e37f10b7ba2481464e6c658bafaba6f8f8f129f1e95c3496 + checksum: 9eecbfb6df4f5b810374849b7566d321255e6fd6e804546236650384966be532ff75a3e445a3277eadefe67ddf4dc56cd38332abd72d6a450f1bea9866efc6d7 languageName: node linkType: hard -"@jest/core@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/core@npm:29.2.1" +"@jest/core@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/core@npm:29.3.1" dependencies: - "@jest/console": ^29.2.1 - "@jest/reporters": ^29.2.1 - "@jest/test-result": ^29.2.1 - "@jest/transform": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/console": ^29.3.1 + "@jest/reporters": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 @@ -2730,20 +3096,20 @@ __metadata: exit: ^0.1.2 graceful-fs: ^4.2.9 jest-changed-files: ^29.2.0 - jest-config: ^29.2.1 - jest-haste-map: ^29.2.1 - jest-message-util: ^29.2.1 + jest-config: ^29.3.1 + jest-haste-map: ^29.3.1 + jest-message-util: ^29.3.1 jest-regex-util: ^29.2.0 - jest-resolve: ^29.2.1 - jest-resolve-dependencies: ^29.2.1 - jest-runner: ^29.2.1 - jest-runtime: ^29.2.1 - jest-snapshot: ^29.2.1 - jest-util: ^29.2.1 - jest-validate: ^29.2.1 - jest-watcher: ^29.2.1 + jest-resolve: ^29.3.1 + jest-resolve-dependencies: ^29.3.1 + jest-runner: ^29.3.1 + jest-runtime: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 + jest-watcher: ^29.3.1 micromatch: ^4.0.4 - pretty-format: ^29.2.1 + pretty-format: ^29.3.1 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -2751,19 +3117,19 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 849f9287a0d32b92c052a59de47d4b483c47f45463a94cb3156ecb869a41cc829b8ecdb1de8638b629b16b6e4cb2bd0d03e1d18590c4bfbe73b8fbbd6072d045 + checksum: e3ac9201e8a084ccd832b17877b56490402b919f227622bb24f9372931e77b869e60959d34144222ce20fb619d0a6a6be20b257adb077a6b0f430a4584a45b0f languageName: node linkType: hard -"@jest/environment@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/environment@npm:29.2.1" +"@jest/environment@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/environment@npm:29.3.1" dependencies: - "@jest/fake-timers": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/fake-timers": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" - jest-mock: ^29.2.1 - checksum: 632d023c9e514a3d5647cbc7bc27a97113ef1647d9c7e205f90e0af359804dc7eaddfe43928b6180f2fc4914761878e671edcccacca4012e2e9f594979adbfac + jest-mock: ^29.3.1 + checksum: 974102aba7cc80508f787bb5504dcc96e5392e0a7776a63dffbf54ddc2c77d52ef4a3c08ed2eedec91965befff873f70cd7c9ed56f62bb132dcdb821730e6076 languageName: node linkType: hard @@ -2776,60 +3142,60 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/expect-utils@npm:29.2.1" +"@jest/expect-utils@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/expect-utils@npm:29.3.1" dependencies: jest-get-type: ^29.2.0 - checksum: 7e6e156f452330b64983f8169f2cd1f378129090d02ad097ef89dadfc78269501991d6d6daf91058ef4334fd9f5fc1a6389d887bbebfe7e4ad1ec58ea78e9f93 + checksum: 7f3b853eb1e4299988f66b9aa49c1aacb7b8da1cf5518dca4ccd966e865947eed8f1bde6c8f5207d8400e9af870112a44b57aa83515ad6ea5e4a04a971863adb languageName: node linkType: hard -"@jest/expect@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/expect@npm:29.2.1" +"@jest/expect@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/expect@npm:29.3.1" dependencies: - expect: ^29.2.1 - jest-snapshot: ^29.2.1 - checksum: c64b939200e88b947c4e1209fbfd3d54f0f24ad1cd1d5882e0238631a7839f96c3e513c802610b039ab2d2ed6024834c6de002b639d3afa8ad077364ef08ab75 + expect: ^29.3.1 + jest-snapshot: ^29.3.1 + checksum: 1d7b5cc735c8a99bfbed884d80fdb43b23b3456f4ec88c50fd86404b097bb77fba84f44e707fc9b49f106ca1154ae03f7c54dc34754b03f8a54eeb420196e5bf languageName: node linkType: hard -"@jest/fake-timers@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/fake-timers@npm:29.2.1" +"@jest/fake-timers@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/fake-timers@npm:29.3.1" dependencies: - "@jest/types": ^29.2.1 + "@jest/types": ^29.3.1 "@sinonjs/fake-timers": ^9.1.2 "@types/node": "*" - jest-message-util: ^29.2.1 - jest-mock: ^29.2.1 - jest-util: ^29.2.1 - checksum: e4f42a2677b91fed6e59ca466de2247bca5767c4922b5edb67ce34d47477757599f2760c3abae3d76e65917ac60c876223ac2c9d3f06d4f2a49d4be7e076f9bb + jest-message-util: ^29.3.1 + jest-mock: ^29.3.1 + jest-util: ^29.3.1 + checksum: b1dafa8cdc439ef428cd772c775f0b22703677f52615513eda11a104bbfc352d7ec69b1225db95d4ef2e1b4ef0f23e1a7d96de5313aeb0950f672e6548ae069d languageName: node linkType: hard -"@jest/globals@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/globals@npm:29.2.1" +"@jest/globals@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/globals@npm:29.3.1" dependencies: - "@jest/environment": ^29.2.1 - "@jest/expect": ^29.2.1 - "@jest/types": ^29.2.1 - jest-mock: ^29.2.1 - checksum: 42046693669009a4ac890578e18544433effeaa760e60e3fc7360ab197ebf7b66bf7fce11f1143e43e665d1801108ae9a3588f5ec95d518ca9664e7f8098a4a3 + "@jest/environment": ^29.3.1 + "@jest/expect": ^29.3.1 + "@jest/types": ^29.3.1 + jest-mock: ^29.3.1 + checksum: 4d2b9458aabf7c28fd167e53984477498c897b64eec67a7f84b8fff465235cae1456ee0721cb0e7943f0cda443c7656adb9801f9f34e27495b8ebbd9f3033100 languageName: node linkType: hard -"@jest/reporters@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/reporters@npm:29.2.1" +"@jest/reporters@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/reporters@npm:29.3.1" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.2.1 - "@jest/test-result": ^29.2.1 - "@jest/transform": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/console": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 @@ -2842,9 +3208,9 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.2.1 - jest-util: ^29.2.1 - jest-worker: ^29.2.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 + jest-worker: ^29.3.1 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -2854,7 +3220,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 8f6419d67ba9c4f33ff01d8fa506538f32f4edd32df806a496c705858712405e6930b6064ac54cfe7b1c01a447d2feb46e8be69eb2e655e8b5f497e77ee79777 + checksum: 273e0c6953285f01151e9d84ac1e55744802a1ec79fb62dafeea16a49adfe7b24e7f35bef47a0214e5e057272dbfdacf594208286b7766046fd0f3cfa2043840 languageName: node linkType: hard @@ -2887,50 +3253,50 @@ __metadata: languageName: node linkType: hard -"@jest/test-result@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/test-result@npm:29.2.1" +"@jest/test-result@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/test-result@npm:29.3.1" dependencies: - "@jest/console": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/console": ^29.3.1 + "@jest/types": ^29.3.1 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 8f5f069dcfd54413559544f164950503d6cef587e3596a134a868c11e6b3fe6a99cc691732027500c962bdd22bc46685798b006a5b542359b30883e0d2489615 + checksum: b24ac283321189b624c372a6369c0674b0ee6d9e3902c213452c6334d037113718156b315364bee8cee0f03419c2bdff5e2c63967193fb422830e79cbb26866a languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/test-sequencer@npm:29.2.1" +"@jest/test-sequencer@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/test-sequencer@npm:29.3.1" dependencies: - "@jest/test-result": ^29.2.1 + "@jest/test-result": ^29.3.1 graceful-fs: ^4.2.9 - jest-haste-map: ^29.2.1 + jest-haste-map: ^29.3.1 slash: ^3.0.0 - checksum: ff73ce30d51e3304986097a5e02f24c60bc6f8246a7b3a1d35f898bd6b9515c576c2fce98dd6a605b885c8c0fea34e135420eb6e6a6d6656b74bed8ff280fe45 + checksum: a8325b1ea0ce644486fb63bb67cedd3524d04e3d7b1e6c1e3562bf12ef477ecd0cf34044391b2a07d925e1c0c8b4e0f3285035ceca3a474a2c55980f1708caf3 languageName: node linkType: hard -"@jest/transform@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/transform@npm:29.2.1" +"@jest/transform@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/transform@npm:29.3.1" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^29.2.1 + "@jest/types": ^29.3.1 "@jridgewell/trace-mapping": ^0.3.15 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 - convert-source-map: ^1.4.0 + convert-source-map: ^2.0.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.2.1 + jest-haste-map: ^29.3.1 jest-regex-util: ^29.2.0 - jest-util: ^29.2.1 + jest-util: ^29.3.1 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 write-file-atomic: ^4.0.1 - checksum: bb50bfce34d8c648475a7d65e91787a0232cdcc0445331dba8d3d80180dff1b43d97872568be795c8f92d419b3f0e6114297349cc892fdf50e8471cb227f674a + checksum: 673df5900ffc95bc811084e09d6e47948034dea6ab6cc4f81f80977e3a52468a6c2284d0ba9796daf25a62ae50d12f7e97fc9a3a0c587f11f2a479ff5493ca53 languageName: node linkType: hard @@ -2948,9 +3314,9 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.2.1": - version: 29.2.1 - resolution: "@jest/types@npm:29.2.1" +"@jest/types@npm:^29.3.1": + version: 29.3.1 + resolution: "@jest/types@npm:29.3.1" dependencies: "@jest/schemas": ^29.0.0 "@types/istanbul-lib-coverage": ^2.0.0 @@ -2958,7 +3324,7 @@ __metadata: "@types/node": "*" "@types/yargs": ^17.0.8 chalk: ^4.0.0 - checksum: a83f20727425179aa05974aa7553c307d207fbb6b7ae5ab1e37fbb6ba9b6655f26655301fc804f2545d33f4c4a6b59d41eed1737c005d2b83fce9e14841b4150 + checksum: 6f9faf27507b845ff3839c1adc6dbd038d7046d03d37e84c9fc956f60718711a801a5094c7eeee6b39ccf42c0ab61347fdc0fa49ab493ae5a8efd2fd41228ee8 languageName: node linkType: hard @@ -3180,27 +3546,27 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.25.1": - version: 7.25.1 - resolution: "@microsoft/api-extractor-model@npm:7.25.1" +"@microsoft/api-extractor-model@npm:7.25.2": + version: 7.25.2 + resolution: "@microsoft/api-extractor-model@npm:7.25.2" dependencies: - "@microsoft/tsdoc": 0.14.1 + "@microsoft/tsdoc": 0.14.2 "@microsoft/tsdoc-config": ~0.16.1 "@rushstack/node-core-library": 3.53.2 - checksum: fd63f794358b92de84dda95c545ad8147ebd0c71bb4aff63d2ef4f727243d5de7251aa3301f3f917dda1e84248683d9a569a5aa884124fc1f1f6e40444ba8633 + checksum: b91782eacbe5cc519bbb048289237bef4fdd49fcd2e5c9bd716d6ee63360d1ab4279c0b64deeb83b5df54b074372edb64631fb7d2395757980240031c83f3097 languageName: node linkType: hard -"@microsoft/api-extractor@npm:^7.33.1, @microsoft/api-extractor@npm:^7.33.4": - version: 7.33.4 - resolution: "@microsoft/api-extractor@npm:7.33.4" +"@microsoft/api-extractor@npm:^7.33.5, @microsoft/api-extractor@npm:^7.33.6": + version: 7.33.6 + resolution: "@microsoft/api-extractor@npm:7.33.6" dependencies: - "@microsoft/api-extractor-model": 7.25.1 - "@microsoft/tsdoc": 0.14.1 + "@microsoft/api-extractor-model": 7.25.2 + "@microsoft/tsdoc": 0.14.2 "@microsoft/tsdoc-config": ~0.16.1 "@rushstack/node-core-library": 3.53.2 "@rushstack/rig-package": 0.3.17 - "@rushstack/ts-command-line": 4.13.0 + "@rushstack/ts-command-line": 4.13.1 colors: ~1.2.1 lodash: ~4.17.15 resolve: ~1.17.0 @@ -3209,7 +3575,7 @@ __metadata: typescript: ~4.8.4 bin: api-extractor: bin/api-extractor - checksum: 9462c36c00b3b718ddc00a3cee98236c1ec322244a677485ccec00f7bc2d487ac0e08610870db3aa72eb18eabd7d918c9e7f9909383b4eb56eb055471895c72b + checksum: f279f316e9dbabb269afde1f8b06068f60d8e3bb3969185758218b8a5a54adac99f563eb5ca9dd75f4028c774613e0246fc5fb0e29ae1cb9576ef912fbae7cba languageName: node linkType: hard @@ -3258,113 +3624,129 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:12.3.1": - version: 12.3.1 - resolution: "@next/env@npm:12.3.1" - checksum: ea7f2ad9080bdec91dd9e7d84db063793717fb1e6c668ff99cdd9103b9a7f2dd0afd153f04882944d24124965f2f78cdf24dc71da3dcd5afad3a078816abc528 +"@next/env@npm:12.3.4": + version: 12.3.4 + resolution: "@next/env@npm:12.3.4" + checksum: daa3fc11efd1344c503eab41311a0e503ba7fd08607eeb3dc571036a6211eb37959cc4ed48b71dcc411cc214e7623ffd02411080aad3e09dc6a1192d5b256e60 languageName: node linkType: hard -"@next/eslint-plugin-next@npm:^12.3.1": - version: 12.3.1 - resolution: "@next/eslint-plugin-next@npm:12.3.1" +"@next/eslint-plugin-next@npm:^13.0.4": + version: 13.0.4 + resolution: "@next/eslint-plugin-next@npm:13.0.4" dependencies: glob: 7.1.7 - checksum: 157b1126f016a0090b62f590d9c331c58221c4efaf3453c294a0d26e75497704617549480e9bba3ddaf278a355359133dd239c3960f684f2abe575553ec59a96 + checksum: 012afa22ce363c7571b6c5d3782c448390b93ee8d1b54d4ea366391c9e98a33ade6b7d4d9e280eeacd97a08b36b3e69019b3fe3c999563249af6cb2f3bf74d87 languageName: node linkType: hard -"@next/swc-android-arm-eabi@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-android-arm-eabi@npm:12.3.1" +"@next/swc-android-arm-eabi@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-android-arm-eabi@npm:12.3.4" conditions: os=android & cpu=arm languageName: node linkType: hard -"@next/swc-android-arm64@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-android-arm64@npm:12.3.1" +"@next/swc-android-arm64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-android-arm64@npm:12.3.4" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-darwin-arm64@npm:12.3.1" +"@next/swc-darwin-arm64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-darwin-arm64@npm:12.3.4" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-darwin-x64@npm:12.3.1" +"@next/swc-darwin-x64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-darwin-x64@npm:12.3.4" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-freebsd-x64@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-freebsd-x64@npm:12.3.1" +"@next/swc-freebsd-x64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-freebsd-x64@npm:12.3.4" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@next/swc-linux-arm-gnueabihf@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-linux-arm-gnueabihf@npm:12.3.1" +"@next/swc-linux-arm-gnueabihf@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-arm-gnueabihf@npm:12.3.4" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@next/swc-linux-arm64-gnu@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-linux-arm64-gnu@npm:12.3.1" +"@next/swc-linux-arm64-gnu@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-arm64-gnu@npm:12.3.4" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-linux-arm64-musl@npm:12.3.1" +"@next/swc-linux-arm64-musl@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-arm64-musl@npm:12.3.4" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-linux-x64-gnu@npm:12.3.1" +"@next/swc-linux-x64-gnu@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-x64-gnu@npm:12.3.4" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-musl@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-linux-x64-musl@npm:12.3.1" +"@next/swc-linux-x64-musl@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-x64-musl@npm:12.3.4" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-win32-arm64-msvc@npm:12.3.1" +"@next/swc-win32-arm64-msvc@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-win32-arm64-msvc@npm:12.3.4" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-ia32-msvc@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-win32-ia32-msvc@npm:12.3.1" +"@next/swc-win32-ia32-msvc@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-win32-ia32-msvc@npm:12.3.4" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@next/swc-win32-x64-msvc@npm:12.3.1": - version: 12.3.1 - resolution: "@next/swc-win32-x64-msvc@npm:12.3.1" +"@next/swc-win32-x64-msvc@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-win32-x64-msvc@npm:12.3.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard +"@nikolarhristov/pipeline@npm:0.0.1": + version: 0.0.1 + resolution: "@nikolarhristov/pipeline@npm:0.0.1" + dependencies: + critters: 0.0.16 + csso: 5.0.5 + deepmerge-ts: 4.2.2 + fast-glob: 3.2.12 + html-minifier-terser: 7.0.0 + sharp: 0.31.2 + svgo: 3.0.2 + terser: 5.15.1 + checksum: d0fe82f16256cf571310b0f5dd7065ba87dbdc2d1b3380fa62ad5f7124fc6522b625d9606fb6e148112f1b0c478e0e1873b64d7e29791d69e6636f197fb877c1 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -3382,7 +3764,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3": +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -3412,7 +3794,7 @@ __metadata: languageName: node linkType: hard -"@pkgr/utils@npm:^2.3.0, @pkgr/utils@npm:^2.3.1": +"@pkgr/utils@npm:^2.3.1": version: 2.3.1 resolution: "@pkgr/utils@npm:2.3.1" dependencies: @@ -3720,6 +4102,22 @@ __metadata: languageName: node linkType: hard +"@rollup/pluginutils@npm:^5.0.2": + version: 5.0.2 + resolution: "@rollup/pluginutils@npm:5.0.2" + dependencies: + "@types/estree": ^1.0.0 + estree-walker: ^2.0.2 + picomatch: ^2.3.1 + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: edea15e543bebc7dcac3b0ac8bc7b8e8e6dbd46e2864dbe5dd28072de1fbd5b0e10d545a610c0edaa178e8a7ac432e2a2a52e547ece1308471412caba47db8ce + languageName: node + linkType: hard + "@rushstack/eslint-patch@npm:^1.2.0": version: 1.2.0 resolution: "@rushstack/eslint-patch@npm:1.2.0" @@ -3769,15 +4167,15 @@ __metadata: languageName: node linkType: hard -"@rushstack/ts-command-line@npm:4.13.0": - version: 4.13.0 - resolution: "@rushstack/ts-command-line@npm:4.13.0" +"@rushstack/ts-command-line@npm:4.13.1": + version: 4.13.1 + resolution: "@rushstack/ts-command-line@npm:4.13.1" dependencies: "@types/argparse": 1.0.38 argparse: ~1.0.9 colors: ~1.2.1 string-argv: ~0.3.1 - checksum: a5b488d51f5d06bdb1e4aa03d6826049187adc00ddb5aad4e7559f48981d036fb5811f03572831f8026e87c262422ef9afb7c90a0d05130bdb80b239db02f415 + checksum: fea24b2549ecb7d3409b6b485d7c58bf8af8f8d1dd19c43a6b3532c45579ffc546bc4533b5db29c91ae1716581fdee4cb725f6a81ecb300e902ef06600e59f1d languageName: node linkType: hard @@ -3804,6 +4202,13 @@ __metadata: languageName: node linkType: hard +"@sapphire/result@npm:^2.6.0": + version: 2.6.0 + resolution: "@sapphire/result@npm:2.6.0" + checksum: bab9e963c85c7ea0a410c36617b7d32fca8749739b7fbb61bf7a2eff566d002af78606c379b1a71f2857bf9c04d3f5f1af67f02278da75ac660f2f6ddfef26b5 + languageName: node + linkType: hard + "@sapphire/shapeshift@npm:^3.7.0": version: 3.7.0 resolution: "@sapphire/shapeshift@npm:3.7.0" @@ -3821,7 +4226,7 @@ __metadata: languageName: node linkType: hard -"@sapphire/utilities@npm:^3.8.0, @sapphire/utilities@npm:^3.9.3": +"@sapphire/utilities@npm:3.11.0, @sapphire/utilities@npm:^3.8.0": version: 3.11.0 resolution: "@sapphire/utilities@npm:3.11.0" checksum: 3c8521038b8879524e8114f39eefc8b3b06cf825995f709684238b5cb14bd7df06d232a26a88f79160df290a66f9aa3133f5ce4ff8e2398033db9f301ad31e0d @@ -4217,13 +4622,13 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^29.2.0": - version: 29.2.0 - resolution: "@types/jest@npm:29.2.0" +"@types/jest@npm:^29.2.3": + version: 29.2.3 + resolution: "@types/jest@npm:29.2.3" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 6779e63d8d7507b116a61b2935a200e48531849fc1ac74090212759fe17716777ca6d2c3a8d927a563e9cfa474ae91d40b1688376ae80e3a08974b3c9e9691e1 + checksum: 55370906711b600a05b9e497c22aa74d80d8adcdbe4ac2f1bc9311f6f6ca0dd192862b6f38df6ac0d45e92396bcd796e377b1d8058c10bdfd584aeee580c3ce1 languageName: node linkType: hard @@ -4348,10 +4753,17 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:16.11.68, @types/node@npm:^16.11.68": - version: 16.11.68 - resolution: "@types/node@npm:16.11.68" - checksum: a35293b6b8867e10ab9e10b6cd5f0e4224a86256d5ef102581dcb9f79f35f255ad87443e8584ddf8dce1229ee28885c58187e41822cf8d1e82495e7897c47c3f +"@types/node@npm:14.18.33": + version: 14.18.33 + resolution: "@types/node@npm:14.18.33" + checksum: 4e23f95186d8ae1d38c999bc6b46fe94e790da88744b0a3bfeedcbd0d9ffe2cb0ff39e85f43014f6739e5270292c1a1f6f97a1fc606fd573a0c17fda9a1d42de + languageName: node + linkType: hard + +"@types/node@npm:16.18.3": + version: 16.18.3 + resolution: "@types/node@npm:16.18.3" + checksum: 6b8ba2ea5d842f7986e366cb9184c54d273d492784dc62e08fd5afeae938d9b61aec6e4222d2541cd18f9b1412ba361bbcb3f4204fb003608af80a2a6af959f9 languageName: node linkType: hard @@ -4425,16 +4837,16 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^17.0.17": - version: 17.0.17 - resolution: "@types/react-dom@npm:17.0.17" +"@types/react-dom@npm:^17.0.18": + version: 17.0.18 + resolution: "@types/react-dom@npm:17.0.18" dependencies: "@types/react": ^17 - checksum: 23caf98aa03e968811560f92a2c8f451694253ebe16b670929b24eaf0e7fa62ba549abe9db0ac028a9d8a9086acd6ab9c6c773f163fa21224845edbc00ba6232 + checksum: b74525b1a13a0e27fe20859ff7a7e8f7e4581fb9d45ed1b6447ad1534d86f813818353c39d0df2e28f9d2b9be2e3af1908c244b2214a979393d19f217665e614 languageName: node linkType: hard -"@types/react-dom@npm:^18.0.0, @types/react-dom@npm:^18.0.6": +"@types/react-dom@npm:^18.0.0": version: 18.0.6 resolution: "@types/react-dom@npm:18.0.6" dependencies: @@ -4443,6 +4855,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^18.0.9": + version: 18.0.9 + resolution: "@types/react-dom@npm:18.0.9" + dependencies: + "@types/react": "*" + checksum: e744e3feba25fc43733289d4df4d9c0e59fcca7f34e8c89d75f81a339accb2bd70236d69382d47d2c0ad06a1529b2e56aa6171fe175854d60e07156ddceedfcb + languageName: node + linkType: hard + "@types/react-syntax-highlighter@npm:^15.5.5": version: 15.5.5 resolution: "@types/react-syntax-highlighter@npm:15.5.5" @@ -4452,7 +4873,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*, @types/react@npm:>=16, @types/react@npm:^18.0.21": +"@types/react@npm:*, @types/react@npm:>=16": version: 18.0.21 resolution: "@types/react@npm:18.0.21" dependencies: @@ -4463,7 +4884,7 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:^17, @types/react@npm:^17.0.50": +"@types/react@npm:^17": version: 17.0.50 resolution: "@types/react@npm:17.0.50" dependencies: @@ -4474,6 +4895,28 @@ __metadata: languageName: node linkType: hard +"@types/react@npm:^17.0.52": + version: 17.0.52 + resolution: "@types/react@npm:17.0.52" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: a51b98dd87838d161278fdf9dd78e6a4ff8c018f406d6647f77963e144fb52a8beee40c89fd0e7e840eaeaa8bd9fe2f34519410540b1a52d43a6f8b4d2fbce33 + languageName: node + linkType: hard + +"@types/react@npm:^18.0.25": + version: 18.0.25 + resolution: "@types/react@npm:18.0.25" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: 231d658c45abdef044a716b4502774f1585d8336d73b2f5bd68f181acbfc874b7a457686ecd29b415b43ed0922c309bab7e2cf96832d188a3f4f1b02f2af760a + languageName: node + linkType: hard + "@types/resolve@npm:^1.17.0": version: 1.20.2 resolution: "@types/resolve@npm:1.20.2" @@ -4569,15 +5012,16 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/eslint-plugin@npm:5.40.1" +"@typescript-eslint/eslint-plugin@npm:^5.44.0": + version: 5.44.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.44.0" dependencies: - "@typescript-eslint/scope-manager": 5.40.1 - "@typescript-eslint/type-utils": 5.40.1 - "@typescript-eslint/utils": 5.40.1 + "@typescript-eslint/scope-manager": 5.44.0 + "@typescript-eslint/type-utils": 5.44.0 + "@typescript-eslint/utils": 5.44.0 debug: ^4.3.4 ignore: ^5.2.0 + natural-compare-lite: ^1.4.0 regexpp: ^3.2.0 semver: ^7.3.7 tsutils: ^3.21.0 @@ -4587,7 +5031,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 61f19bde0f1206beb20aeb28d18c1ef26a98cf4d2ead9f1d2f204cb91af31582eb5ee9422fe5f92d6aa10cebf85cd50f1b41e8cf8ce65808e2208664c3b1d66a + checksum: 88784e77e8e35ea50ca9c49d46df94cabc3447f4b332f3ca53974d3b5370cb5dcd85cc9ee0e317b91083812012369209574725dcfc3b2b4056b60371b68ca854 languageName: node linkType: hard @@ -4602,30 +5046,20 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/parser@npm:5.40.1" +"@typescript-eslint/parser@npm:^5.44.0": + version: 5.44.0 + resolution: "@typescript-eslint/parser@npm:5.44.0" dependencies: - "@typescript-eslint/scope-manager": 5.40.1 - "@typescript-eslint/types": 5.40.1 - "@typescript-eslint/typescript-estree": 5.40.1 + "@typescript-eslint/scope-manager": 5.44.0 + "@typescript-eslint/types": 5.44.0 + "@typescript-eslint/typescript-estree": 5.44.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 9fe410c1b14934803bb7c26de9b8de5d46ef9b6fe5dcbee1d7e111f0259659c214549b60dacdc729a3e23da835e6a44f08a9aa6bcb73ffff3c4fd5b9142358ed - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:5.37.0": - version: 5.37.0 - resolution: "@typescript-eslint/scope-manager@npm:5.37.0" - dependencies: - "@typescript-eslint/types": 5.37.0 - "@typescript-eslint/visitor-keys": 5.37.0 - checksum: 1c439e21ffa63ebaadb8c8363e9d668132a835a28203e5b779366bfa56772f332e5dedb50d63dffb836839b9d9c4e66aa9e3ea47b8c59465b18a0cbd063ec7a3 + checksum: 2d09a1a1547a7ae3f76c9a33a54e11d79a194fbb9dbae69988e7aed3370bdf12bafde669211152769d89db822e0cdee4173affc126664fa6f17abba56daa7261 languageName: node linkType: hard @@ -4639,22 +5073,32 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/scope-manager@npm:5.40.1" +"@typescript-eslint/scope-manager@npm:5.43.0": + version: 5.43.0 + resolution: "@typescript-eslint/scope-manager@npm:5.43.0" + dependencies: + "@typescript-eslint/types": 5.43.0 + "@typescript-eslint/visitor-keys": 5.43.0 + checksum: e594c7a32c3fa29e46dd0b0bc62f97f154bd864682ae7da87a14b6f4336f4cb02f6ed0602bbdb15783e4230ecdf8a0ccc6f7c5820850e8f11240c9e4fb0e388d + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:5.44.0": + version: 5.44.0 + resolution: "@typescript-eslint/scope-manager@npm:5.44.0" dependencies: - "@typescript-eslint/types": 5.40.1 - "@typescript-eslint/visitor-keys": 5.40.1 - checksum: 5f25b86bfd09fbf8cdfdf932eaf0b41a7594c9b4539d3c8321f882bf7b4bf486454256fdb9a5a8c4eae305419d377fa93d382f80004711d759ff77b3d565c1dc + "@typescript-eslint/types": 5.44.0 + "@typescript-eslint/visitor-keys": 5.44.0 + checksum: 4cfe4b55eb428eda740e6b967e3a87f3e1f9c4bbd8e1d6b8d64a11666abe33ffe7a21e4e614444ccde2da6930fa85f3e0ffca43d6e339943ff7a4fbccb09c8fc languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.37.0": - version: 5.37.0 - resolution: "@typescript-eslint/type-utils@npm:5.37.0" +"@typescript-eslint/type-utils@npm:5.43.0": + version: 5.43.0 + resolution: "@typescript-eslint/type-utils@npm:5.43.0" dependencies: - "@typescript-eslint/typescript-estree": 5.37.0 - "@typescript-eslint/utils": 5.37.0 + "@typescript-eslint/typescript-estree": 5.43.0 + "@typescript-eslint/utils": 5.43.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -4662,16 +5106,16 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 79dac78eefdbdb3c168da6b303381461af3523e2b45fdeb821eb05e6a5cac797a8850e1dd9e1b6cd1a7c22408acfa2a09854a0f85ff038518c312db8eae9aa4f + checksum: 08dbc0b194d0ef1454a95d76c082503e04d9957e89a056068002e233f8d98113f50b2707f7c4b9b44f428e223d5b4485ee2b4df4e0cde354827c5edc92ede973 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/type-utils@npm:5.40.1" +"@typescript-eslint/type-utils@npm:5.44.0": + version: 5.44.0 + resolution: "@typescript-eslint/type-utils@npm:5.44.0" dependencies: - "@typescript-eslint/typescript-estree": 5.40.1 - "@typescript-eslint/utils": 5.40.1 + "@typescript-eslint/typescript-estree": 5.44.0 + "@typescript-eslint/utils": 5.44.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -4679,14 +5123,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 6771196b8f16f4893bae70aa1371ff004b0058e8edef9b935143e2f1272e471049e9c34beb1d625fb6423db95dd377e01e938b70dd4506fbf071566e2bfb574d - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:5.37.0": - version: 5.37.0 - resolution: "@typescript-eslint/types@npm:5.37.0" - checksum: 899e59e7775fa95c2d9fcac5cc02cc49d83af5f1ffc706df495046c3b3733f79d5489568b01bfaf8c9ae4636e057056866adc783113036f774580086d0189f21 + checksum: 4c7b594f8afa52d57d0512951a874fa390eb791dcefcd0e1efff8817872293b2e4e04eff3c54d1595c1720a34d5fd315729af4e459882033d13cb6069ae9d28f languageName: node linkType: hard @@ -4697,28 +5134,17 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/types@npm:5.40.1" - checksum: 2430c799667c820903df7ef39bc4c2762cb7654dbb8525d56f37e73f8cefb82186b80654dbbe0294c5b55affe929c641cdb90232e2749dcd7838f9e500a41549 +"@typescript-eslint/types@npm:5.43.0": + version: 5.43.0 + resolution: "@typescript-eslint/types@npm:5.43.0" + checksum: fc5e5431c305feee4a3faae84f34df482e08d74b910a6f9376b01326c682ceefeeb0e270d03d7778787bc94ef05b3b85ee6d3c9d732290fbdb4a67ae1b110226 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.37.0": - version: 5.37.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.37.0" - dependencies: - "@typescript-eslint/types": 5.37.0 - "@typescript-eslint/visitor-keys": 5.37.0 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 80365a50fa11ed39bf54d9ef06e264fbbf3bdbcc55b7d7d555ef0be915edae40ec30e98d08b3f6ef048e1874450cbcb1e7d9f429d4f420dacbbde45d3376a7bc +"@typescript-eslint/types@npm:5.44.0": + version: 5.44.0 + resolution: "@typescript-eslint/types@npm:5.44.0" + checksum: ced7d32abecfc62ccb67cf27e30c0785b9c153ec7b1a05153ced58fa5a2031ab3845bc2e477b83e4cebdcc5881c5845d23053c6739c62549d41ae6208e547e85 languageName: node linkType: hard @@ -4740,12 +5166,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/typescript-estree@npm:5.40.1" +"@typescript-eslint/typescript-estree@npm:5.43.0": + version: 5.43.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.43.0" dependencies: - "@typescript-eslint/types": 5.40.1 - "@typescript-eslint/visitor-keys": 5.40.1 + "@typescript-eslint/types": 5.43.0 + "@typescript-eslint/visitor-keys": 5.43.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -4754,23 +5180,25 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: d0426a55d24b76a3f042816dd8baaaa7a8da0158870bb08fff5a5524821c13ca196117dc269f098b8887ef75e01da1a498637153ab3c29c370ca356bfe4a1716 + checksum: 3479f9413d73369ab3d574580c90a72f74d2ae1ec4afe485eebfad054c3d15c89f23a137bb9d6197dfdae33e444a76a99f6832688787feabbb064e09d39a3f55 languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.37.0": - version: 5.37.0 - resolution: "@typescript-eslint/utils@npm:5.37.0" +"@typescript-eslint/typescript-estree@npm:5.44.0": + version: 5.44.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.44.0" dependencies: - "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.37.0 - "@typescript-eslint/types": 5.37.0 - "@typescript-eslint/typescript-estree": 5.37.0 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: dc6c19ab07b50113f6fa3722518b2f31ce04036ec018855587d4c467108cb4e3c2866e54ed2e18ce61d1e7d0eaab24f94ee39574031b7d8e1c05e4b83ff84ef2 + "@typescript-eslint/types": 5.44.0 + "@typescript-eslint/visitor-keys": 5.44.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 758731108497cca7ff81cf0a78d086b5a85757a983979d6bb25ad8252b7acbc738c642ecb5f5df82f925a45926b9846e431d5cf9fee5ed2613300b4d0c5d6c3f languageName: node linkType: hard @@ -4791,31 +5219,39 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/utils@npm:5.40.1" +"@typescript-eslint/utils@npm:5.43.0": + version: 5.43.0 + resolution: "@typescript-eslint/utils@npm:5.43.0" dependencies: "@types/json-schema": ^7.0.9 "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.40.1 - "@typescript-eslint/types": 5.40.1 - "@typescript-eslint/typescript-estree": 5.40.1 + "@typescript-eslint/scope-manager": 5.43.0 + "@typescript-eslint/types": 5.43.0 + "@typescript-eslint/typescript-estree": 5.43.0 eslint-scope: ^5.1.1 eslint-utils: ^3.0.0 semver: ^7.3.7 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: a971101bb2f4c742a1734a87e17997addb7ffa6639d472097fe098f6c5f09567b858949b97f05892aabb20f38479abecdfdd69cf740046aa601dd3fc39a44090 + checksum: 4c6b383b51506b57230f2624f883ae21e5d8411d138587c04fe3145f915bf8c289cc2a9f7b0b3faba98345ba230504e5014922bcc578aa0badd594d9eaa8f9ef languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.37.0": - version: 5.37.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.37.0" +"@typescript-eslint/utils@npm:5.44.0": + version: 5.44.0 + resolution: "@typescript-eslint/utils@npm:5.44.0" dependencies: - "@typescript-eslint/types": 5.37.0 - eslint-visitor-keys: ^3.3.0 - checksum: d6193550f77413aead0cb267e058df80b80a488c8fb4e39beb5f0a70b971c41682a6391903fbc5f3dd859a872016288c434d631b8efc3ac5a04edbdb7b63b5f6 + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.44.0 + "@typescript-eslint/types": 5.44.0 + "@typescript-eslint/typescript-estree": 5.44.0 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: bc5bb28e41898464d35b8eb47cc452103852541e3b6be56252c15a5a81c45e10aad3db4c749eb92d752b0c358df8074e23ec6f9e65f8089baadeda7f395c7e31 languageName: node linkType: hard @@ -4829,36 +5265,46 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.40.1": - version: 5.40.1 - resolution: "@typescript-eslint/visitor-keys@npm:5.40.1" +"@typescript-eslint/visitor-keys@npm:5.43.0": + version: 5.43.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.43.0" + dependencies: + "@typescript-eslint/types": 5.43.0 + eslint-visitor-keys: ^3.3.0 + checksum: 4820679e50096dcdaadc7c95d32e5dca3ba8510acf1a865e283822bae3940a2faec02ad8abe793f8a25f75b600f1e7215e1fd3b3ba73779eff737fa90d092550 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.44.0": + version: 5.44.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.44.0" dependencies: - "@typescript-eslint/types": 5.40.1 + "@typescript-eslint/types": 5.44.0 eslint-visitor-keys: ^3.3.0 - checksum: b5dbf1e484ba2832ca1883ee9cf7da5967f70aa5624f3fb67f13c3be90a3770b0bb96e64ccfb0c31b5d8f80794b5727e14b6c0d8c5184634a686f0ea6e798772 + checksum: a012c888209e1d6ae684b2a44fd460ae5a80f5faf07bca4bda6c9c0d8c063ad3297d4c53f7151ae86cf1a43dee09625dc3ee72183323c91089c7288fd573c6f4 languageName: node linkType: hard -"@unocss/astro@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/astro@npm:0.45.30" +"@unocss/astro@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/astro@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 - "@unocss/reset": 0.45.30 - "@unocss/vite": 0.45.30 - checksum: 05a89f45494c71757308baad320717818733877cf67ef8ee73b45aa88b00de616d1539ba4cbb31f79a093012c7db201c9cb2f7dfa4abe92bcc5844257c1e8398 + "@unocss/core": 0.46.5 + "@unocss/reset": 0.46.5 + "@unocss/vite": 0.46.5 + checksum: 88296d827a8aa72c898b234de2799e99b2cc360e3d0db222fc2ff6d18588ba7f6d7adb27dd123d1eeab40ea357cb7ebfb036e5608fb8ea9e015b5a202cdf6a5b languageName: node linkType: hard -"@unocss/cli@npm:0.45.30, @unocss/cli@npm:^0.45.30": - version: 0.45.30 - resolution: "@unocss/cli@npm:0.45.30" +"@unocss/cli@npm:0.46.5, @unocss/cli@npm:^0.46.5": + version: 0.46.5 + resolution: "@unocss/cli@npm:0.46.5" dependencies: "@ampproject/remapping": ^2.2.0 "@rollup/pluginutils": ^5.0.1 - "@unocss/config": 0.45.30 - "@unocss/core": 0.45.30 - "@unocss/preset-uno": 0.45.30 + "@unocss/config": 0.46.5 + "@unocss/core": 0.46.5 + "@unocss/preset-uno": 0.46.5 cac: ^6.7.14 chokidar: ^3.5.3 colorette: ^2.0.19 @@ -4869,209 +5315,209 @@ __metadata: perfect-debounce: ^0.1.3 bin: unocss: bin/unocss.mjs - checksum: 393e16b1ff81b0d3ddaa58da10ca1b3eb2a3c3c77ea72b0cdadaebae52a383ae2395ef1767b603bdc220110d3d4e41d63d1233c5ce04bb3dd9f780266aac49fa + checksum: ebdf4e568118a32ee47dc3f8456288c1a3d301debad162f6dfbff2b9ee7a9ba62b296fae140d227bf24f51dccba3b5c520a35099feecda26e69d6438ef69f8f2 languageName: node linkType: hard -"@unocss/config@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/config@npm:0.45.30" +"@unocss/config@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/config@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 + "@unocss/core": 0.46.5 unconfig: ^0.3.7 - checksum: 6a206f9df9d2b51ad982757c8da170729e8f5e988f558078b7c630fd575bb417e286510ede1498aa159102e3985cea6dda133715d1638c564643fc9096c0bf13 + checksum: 6f8e613b966656f3c4f2fb026160f6a78e2208abeefaaa34ba9088694c5c19dc0ed86c597cfc45a68ae0eb77fc9ddb2d401865b0c1b2ac21786bd2109f4c6e50 languageName: node linkType: hard -"@unocss/core@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/core@npm:0.45.30" - checksum: 055062c5526e3841c3529bb3ac97cf36a8f458a7354c53919de9ff137303b72ec288fb55637edd4e40d6fac23550ec4359f284f750e08a0b8e648f2bc0bb00fd +"@unocss/core@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/core@npm:0.46.5" + checksum: 1461613cff9fe608b6d71367d6d118598f415dd792a36dcb5e591de05bb18b4dc16b3c8b7a4e6c5e4a18dc6c472aafe87e48e25aa265a2577b2419b21584d91e languageName: node linkType: hard -"@unocss/inspector@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/inspector@npm:0.45.30" +"@unocss/inspector@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/inspector@npm:0.46.5" dependencies: gzip-size: ^6.0.0 sirv: ^2.0.2 - checksum: b18e07d858dd98ffb14dad5a23c23cd972bb2be0d548a1ec53aeb3e9bdcb92b66ba4b5b87549840e74f8e4246afe78997fffe8479510bc7ac8f35c2501c29c22 + checksum: 85987611d0a7bd281671d3156e370fb22ce713f0458f90bd0070f48d2c46b74aebbb2278c036b9c21f226c0632b80304db351917cdaef7bfba7fa51435927ddf languageName: node linkType: hard -"@unocss/preset-attributify@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/preset-attributify@npm:0.45.30" +"@unocss/preset-attributify@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/preset-attributify@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 - checksum: 6dc367819bc89b88df42a82918f42e35b20324ea07eefd27b421bc28508ca7c321c6d204d6de18643c8b1859685dcfc2beccc42e75d95b4650bcaa7742f09a6e + "@unocss/core": 0.46.5 + checksum: 7247d553293300a04b74f79e788abdf4122cee503116b0a17f657e8344c9ed6ea0b193ef15d0674abc15df68ca815ebc2e4533af1b21817b302bd6246748d0f7 languageName: node linkType: hard -"@unocss/preset-icons@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/preset-icons@npm:0.45.30" +"@unocss/preset-icons@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/preset-icons@npm:0.46.5" dependencies: "@iconify/utils": ^2.0.1 - "@unocss/core": 0.45.30 + "@unocss/core": 0.46.5 ohmyfetch: ^0.4.20 - checksum: 9631ecd7fd7de45543dd10801f6de64982944098c463877b23984b5d1b90dc186dbac35e8ac1596a50a8861c708d8b8d6631a81d79253a0ddba57a9b152a2105 + checksum: cf0b430023ad69e03d895cf527760ae7314b8f4ed54a292be60e3d97d9187454c5b280bfa2b3570910dd156dabc7d4f1be5cfa60dfc077f4980116970e94d8ee languageName: node linkType: hard -"@unocss/preset-mini@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/preset-mini@npm:0.45.30" +"@unocss/preset-mini@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/preset-mini@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 - checksum: 518099e2c570ac42a95e9af21c576c55ba3811f172dfa4a83e419579d8ef431abd2fd59214122315377379f89662f893b8cd3c2246dd1aba5781057d400131b9 + "@unocss/core": 0.46.5 + checksum: ab83700ed021f850441892fa6282814ae658f5c6befb80c79e1127db88099a625b78b3f4953e8e2c63ea00c22b1fa3abd749a0e21513176e219cf8c4362eb77b languageName: node linkType: hard -"@unocss/preset-tagify@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/preset-tagify@npm:0.45.30" +"@unocss/preset-tagify@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/preset-tagify@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 - checksum: 8bd6cc3771f3c7d09c3ef881f9bd373ba7e00df95a4cfdd59ef0e9c5f5190903f2aa3842b5d50810f7376171e125e35bfe8d5da72bf58588c8e20fb5f53fac7a + "@unocss/core": 0.46.5 + checksum: ea8c36ba389c46a99a77ae9127f15cd609c1ffdf7b842a6272a14dae0fae7d2f4d40a1e024a856c6bc0a36f35fdd3438f81ef6104fa96f079d3f4d1adf22664f languageName: node linkType: hard -"@unocss/preset-typography@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/preset-typography@npm:0.45.30" +"@unocss/preset-typography@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/preset-typography@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 - checksum: c78ac33ad88fccdf252f6e13ce3d77c86521a7d84df066848ffda9bc3667a625a4d92987054ef3ad579ba389bb3e46c5a957f0a504dd230d64140a2e819265a8 + "@unocss/core": 0.46.5 + checksum: 80cdd88e6622a3cdef043c6d241a869f5689e12b382edc9b1f9a255b1f902f8d8fd06b6a28b3929e04dff2c664b9b849d5db4f15c718361ef64064ea43e43785 languageName: node linkType: hard -"@unocss/preset-uno@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/preset-uno@npm:0.45.30" +"@unocss/preset-uno@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/preset-uno@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 - "@unocss/preset-mini": 0.45.30 - "@unocss/preset-wind": 0.45.30 - checksum: 66d781aedacb2106fccfc6d1221991fa27d702794e05b5e01773676d63873c2c15a7193b460a650bcb536ef4c82623fdf3e5b85066082c194c30970567992dae + "@unocss/core": 0.46.5 + "@unocss/preset-mini": 0.46.5 + "@unocss/preset-wind": 0.46.5 + checksum: a08d393e5f14823152d533e0e3defa7fedc773c7af9f2fd15f9b2abf8db2d9609883c734ab66aa9960fc8c7587a42d7601768128ae675bd40f24decc8b0e59ba languageName: node linkType: hard -"@unocss/preset-web-fonts@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/preset-web-fonts@npm:0.45.30" +"@unocss/preset-web-fonts@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/preset-web-fonts@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 + "@unocss/core": 0.46.5 ohmyfetch: ^0.4.20 - checksum: c2fca321c6e727edb928ff6d99683f2fff2a83fc8a96cfbc1fdbfc87f3626f0af234310206cc412ba09fa173f637142db0ffc53f0b513de74827bbb09598ec06 + checksum: 1ce5d78e9f3879b9721c727a54aafbc02f3899dac0434af7c18b8937390ba9477d13a0514afd9bdbcf6ce7cb787b7a0301ce8004c05af3d0b00639444a0a7e66 languageName: node linkType: hard -"@unocss/preset-wind@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/preset-wind@npm:0.45.30" +"@unocss/preset-wind@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/preset-wind@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 - "@unocss/preset-mini": 0.45.30 - checksum: 93e73dfa503f3070f68ec14719311e1b5f8b23905b05c6ff7936c5e48e95ee32d90cad50922b82f9eb190d58499e1c29a8fa3fc1d7a2099393d59b9c636a5000 + "@unocss/core": 0.46.5 + "@unocss/preset-mini": 0.46.5 + checksum: c31bae52b1df2dfc9a3a088e3106dfea06dbdd80fc1c519281f6ed6f44b4c22bdbeeafa1b7c611b1364f93392f11479830400c937fe8894c7305bfbf920d2b73 languageName: node linkType: hard -"@unocss/reset@npm:0.45.30, @unocss/reset@npm:^0.45.30": - version: 0.45.30 - resolution: "@unocss/reset@npm:0.45.30" - checksum: c647a14088e689c6bc983118462cf17a4c44acf3f9ad614c140ae11ec11b38cdbbb2dd80ad5d12f5213bae2d7f5a0a609fc946af4717642a8ba1a8ac118a6acd +"@unocss/reset@npm:0.46.5, @unocss/reset@npm:^0.46.5": + version: 0.46.5 + resolution: "@unocss/reset@npm:0.46.5" + checksum: 2eb85804bedcec2a2ed04bae698ba800b750b38c6d8daf2203d58bf6c4c11ab73f486f8fa55eaa0a33507f859f0a29a4b4f2803195f09d145c9253c0049a9fd1 languageName: node linkType: hard -"@unocss/scope@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/scope@npm:0.45.30" - checksum: 3dd2df49ab40cd8f6b9684b0b157ddadbc5710e1d9510de9258746773212a5ad74fdf1e00e3fb12df3fae75a93adae9b041e1a06639f87ec1d2ed924654765cb +"@unocss/scope@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/scope@npm:0.46.5" + checksum: 05395f3ca5cf02da4ba405ddefe6fd50fab7b60811410b2dbfe9b384426e54f891a5d1affeeb7092678f0899c1cd2012b70e6f17fa6455f80d184d1393b1b9fc languageName: node linkType: hard -"@unocss/transformer-attributify-jsx@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/transformer-attributify-jsx@npm:0.45.30" +"@unocss/transformer-attributify-jsx@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/transformer-attributify-jsx@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 - checksum: cb7901f2e221c99e6909de27d8925c5e548819495364212c7f600d8eeafa93283baa3fbbe6846c61450297eb4c4346cbd6e5174dd933fd0b36fa11519420c1a7 + "@unocss/core": 0.46.5 + checksum: ca7f72ee818628fe81e8af48a91914b0a42c605aa90957b0cf13e6555027a639d0c2fa9bd6b9889d6105b02e53fd4860e9ef1280b8ff22669881135844c3adc5 languageName: node linkType: hard -"@unocss/transformer-compile-class@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/transformer-compile-class@npm:0.45.30" +"@unocss/transformer-compile-class@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/transformer-compile-class@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 - checksum: 3b371b37f6f66363e270af78322f6465ef34021aa01e619151f021e151262afcb4293904fb365dbea25225121757d5d7b8774ca9396c62e3a6d96ca8a927e4ce + "@unocss/core": 0.46.5 + checksum: 71aa6e70baf8b2b0862c8c0bac29e3cb9c6269e20ca8e2ba8d9ed168730831a8b0a750708df7cc3497ed0c9f6960e0d51c7bbb8d307cf6385431c4a472735936 languageName: node linkType: hard -"@unocss/transformer-directives@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/transformer-directives@npm:0.45.30" +"@unocss/transformer-directives@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/transformer-directives@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 + "@unocss/core": 0.46.5 css-tree: ^2.2.1 - checksum: 20f4018fa7bc7cb2d70e5a402221cd6a17c162fe4861e3a92c1d153fddf8720569cba1f5a29c81f8a86518d6bad215afdcdaae01f0b8ef3c7bf5065ce4756eb7 + checksum: 900ce57637bb056464c45526e7da97440970675b2ac89d09b7291cb3961de69144c02f922d5ace02cd1a45098baac151d789627a306aeeb61494a0839385f834 languageName: node linkType: hard -"@unocss/transformer-variant-group@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/transformer-variant-group@npm:0.45.30" +"@unocss/transformer-variant-group@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/transformer-variant-group@npm:0.46.5" dependencies: - "@unocss/core": 0.45.30 - checksum: 472346216f6d0941530a8ef68d9755bb84e256ecdb7df735e604664174b9f448b6c8f171e02d62bd5572841a0242112a41dfda8ad3dd203ff5bb79cff8a4e1a7 + "@unocss/core": 0.46.5 + checksum: a15f39cb6f246f35fc7cf90726aa26377d3f720ba0dc8a0d2a05f6513325ec40370b75657fb826921806baf54517eaba9e575e306e6dd4e68a9ef5fd32f81832 languageName: node linkType: hard -"@unocss/vite@npm:0.45.30": - version: 0.45.30 - resolution: "@unocss/vite@npm:0.45.30" +"@unocss/vite@npm:0.46.5": + version: 0.46.5 + resolution: "@unocss/vite@npm:0.46.5" dependencies: "@ampproject/remapping": ^2.2.0 "@rollup/pluginutils": ^5.0.1 - "@unocss/config": 0.45.30 - "@unocss/core": 0.45.30 - "@unocss/inspector": 0.45.30 - "@unocss/scope": 0.45.30 - "@unocss/transformer-directives": 0.45.30 + "@unocss/config": 0.46.5 + "@unocss/core": 0.46.5 + "@unocss/inspector": 0.46.5 + "@unocss/scope": 0.46.5 + "@unocss/transformer-directives": 0.46.5 magic-string: ^0.26.7 peerDependencies: vite: ^2.9.0 || ^3.0.0-0 - checksum: 9e7a71b1037828cbc43dc2c32aef03805204d717a374fdb6afccb8753dc80fdffe82b247a54a4ae4b2af4c9b72ccf857c58892815ae4f2bb848f18180e8dc5ff + checksum: 3af19932161c3bfe0da0e090143e56734cd8b0798d9d4cde5da45bfeed3f9302298c338bad0edd67d81e841b3a66a874235830888bbb26b7c9821d3110556532 languageName: node linkType: hard -"@vercel/build-utils@npm:5.5.5": - version: 5.5.5 - resolution: "@vercel/build-utils@npm:5.5.5" - checksum: fc4f65a3c5586e91f9df2a49ae40885b9b4d9c941f4077c0bb886260ec041cfe03143c8a1302ad8d9e2141f0ac113fdac2d69c766f5a578f2b32c31a1cfa59be +"@vercel/build-utils@npm:5.5.9": + version: 5.5.9 + resolution: "@vercel/build-utils@npm:5.5.9" + checksum: 2df8921587255f24fae62c8f49db05a4782eb9111c7585dcc23c2bd4d7744973ff53c9c32401cf8f5c45679549e4274e560cbffd329524d2556393bbd317ed4d languageName: node linkType: hard -"@vercel/go@npm:2.2.13": - version: 2.2.13 - resolution: "@vercel/go@npm:2.2.13" - checksum: 8474e55bf26c386cad1465a8f74b66cdb01663bd617d6501bff3bee296bd25dd5999e4b3184e3c0eaed7ce8ce5283cea1e83da2e22191d051575883182ce3204 +"@vercel/go@npm:2.2.17": + version: 2.2.17 + resolution: "@vercel/go@npm:2.2.17" + checksum: 73b42888c21b84b7b00bc82666c3c8ed9dca4406776571825ce46a0edfcd44191f4708c66c11fbe2f13c2f89383b75e6fe3be980d02e2ea3767ff823153dacee languageName: node linkType: hard -"@vercel/hydrogen@npm:0.0.26": - version: 0.0.26 - resolution: "@vercel/hydrogen@npm:0.0.26" - checksum: 8f869ee8c3bb8903130c22290d9082c03e32819dfd0d0f9adc670eaac13b0b3695fb8146aca736f99d6758e091b96b88758cdf0d84958b46be0a24722e446b5e +"@vercel/hydrogen@npm:0.0.31": + version: 0.0.31 + resolution: "@vercel/hydrogen@npm:0.0.31" + checksum: 4b51fe81b862c2a1a67f5bdc0040aa6e0f9bf35536d0f2cdfb47f40d5de0136093015b5b2ce611b9a1fa44add70c7312026f14673efa319ce006a04ab94e5fe8 languageName: node linkType: hard -"@vercel/next@npm:3.2.6": - version: 3.2.6 - resolution: "@vercel/next@npm:3.2.6" - checksum: 187ce93a7091585778e0033b3f9bf8f6f91c5338d778b0525cd019b5d5994441464875f8612f745e626db9268c7f376c2c8c0864f93d7a6d33a17436a6612e19 +"@vercel/next@npm:3.2.13": + version: 3.2.13 + resolution: "@vercel/next@npm:3.2.13" + checksum: 4c3e7fa05a6874f40ba81b6ae01c89f453855ee807b273101ea54cfbd4ff40304d700b2b16465eca462ada279bac86cd98bd28792923c7812e94861f25848e06 languageName: node linkType: hard @@ -5096,109 +5542,109 @@ __metadata: languageName: node linkType: hard -"@vercel/node-bridge@npm:3.0.0": - version: 3.0.0 - resolution: "@vercel/node-bridge@npm:3.0.0" - checksum: cead2c1a6eea411249d9e960d395319839824dba3053ab04ee5fa72e3580a509dd1865d9b5c3eaa2e8401ba772f8b834b42fc2f8cb412495e9c3d2a2efb5e1c6 +"@vercel/node-bridge@npm:3.1.2": + version: 3.1.2 + resolution: "@vercel/node-bridge@npm:3.1.2" + checksum: b82b46b3fcb727063af576b5f043dce978579ea0a70c64a096eed0621cd7abdd87e9184fb40cd1a58095f0408a63168278c84a9a8b24c72fcfb99173e8c8e83e languageName: node linkType: hard -"@vercel/node@npm:2.5.26": - version: 2.5.26 - resolution: "@vercel/node@npm:2.5.26" +"@vercel/node@npm:2.6.4": + version: 2.6.4 + resolution: "@vercel/node@npm:2.6.4" dependencies: - "@edge-runtime/vm": 1.1.0-beta.37 - "@types/node": "*" - "@vercel/build-utils": 5.5.5 - "@vercel/node-bridge": 3.0.0 - "@vercel/static-config": 2.0.3 - edge-runtime: 1.1.0-beta.40 + "@edge-runtime/vm": 2.0.0 + "@types/node": 14.18.33 + "@vercel/build-utils": 5.5.9 + "@vercel/node-bridge": 3.1.2 + "@vercel/static-config": 2.0.6 + edge-runtime: 2.0.0 esbuild: 0.14.47 exit-hook: 2.2.1 node-fetch: 2.6.7 ts-node: 8.9.1 typescript: 4.3.4 - checksum: 00fcf151db51936d32fa5a35ea59f56e9e3f4310c61f31db409b16210e9493bc32e52f85ff9326bab5035c7375a0974110e557bc283b04f672de772fedd3da78 + checksum: 52056d171fb3c13aae91cf1c5e5edac4d9ef1a1db34ff72cfd40f25428b3817ddaf4229dfb7ee0e2abb2c4f6df13608ecceddefc21b1a5d018d0ca21eb46d27f languageName: node linkType: hard -"@vercel/og@npm:^0.0.19": - version: 0.0.19 - resolution: "@vercel/og@npm:0.0.19" +"@vercel/og@npm:^0.0.21": + version: 0.0.21 + resolution: "@vercel/og@npm:0.0.21" dependencies: "@resvg/resvg-wasm": 2.0.0-alpha.4 - satori: 0.0.42 + satori: 0.0.44 yoga-wasm-web: 0.1.2 - checksum: ab71223d1e9c172d2f058c15763018a88a154557e31dbfe85b1c99a3978f93634855c7b12af1dfe90baf2a7f15a3e367ecfb4deaca38adc6735f72c44e1f2be9 + checksum: 6db209c43e170ce6b9db5181b24b7db2c41c2c79dde7e14a59f296e74f3aeb99944001a6827708397e287a5cf6eaeca21521aef07466d2d206c3c9f780c7b13d languageName: node linkType: hard -"@vercel/python@npm:3.1.22": - version: 3.1.22 - resolution: "@vercel/python@npm:3.1.22" - checksum: 43adaad331cf308ba3aad3ef073f115bb8543a8b715f6761debe2c3b55ac3e9c4bb200b5ebea77ec6440a629be879d32e92fcf010288447e3fd1083405d83749 +"@vercel/python@npm:3.1.27": + version: 3.1.27 + resolution: "@vercel/python@npm:3.1.27" + checksum: 461f5c1e684f207b24e48de29c8d835f269c3d60e6ab84e0b703348d15a1cb812ab45b6eca94a93156e6356825fb303afa2891e1c747c434b4d21f10eac44d2d languageName: node linkType: hard -"@vercel/redwood@npm:1.0.31": - version: 1.0.31 - resolution: "@vercel/redwood@npm:1.0.31" +"@vercel/redwood@npm:1.0.37": + version: 1.0.37 + resolution: "@vercel/redwood@npm:1.0.37" dependencies: "@vercel/nft": 0.22.1 - "@vercel/routing-utils": 2.0.2 + "@vercel/routing-utils": 2.1.3 semver: 6.1.1 - checksum: 476f7f987c214e027748537e2d3bd0ade934bdb7042d03b24c80f05bc3623751212bb408349f368e0a2928c98bd9903d4754e39ab3a27692785d1478b47a8463 + checksum: ab8bcf8e86db8b31500280bb51ae707fcdc1594b67ef66c603205917cc918932e5e3499b02245ca9ef0a13e81c1cf87197ab46a90cb2a1ce3bb4556eeb05786b languageName: node linkType: hard -"@vercel/remix@npm:1.0.32": - version: 1.0.32 - resolution: "@vercel/remix@npm:1.0.32" +"@vercel/remix@npm:1.0.37": + version: 1.0.37 + resolution: "@vercel/remix@npm:1.0.37" dependencies: "@vercel/nft": 0.22.1 - checksum: 580519818ac3c832841a3fdc98f3ded98e1bf109e613bbff5ab2c6669071e261032e8f58df43d2c9e9fe74332633d3d03b5acf575589a95434f927dd4e20f573 + checksum: 8d005d029a97cef01575091095a790492eff725a7a58ea7917651e8ad8c42f552e408bca3da3df17bd7e063d4e8e1b3e147b85d954e407bca769e0c88596b7ec languageName: node linkType: hard -"@vercel/routing-utils@npm:2.0.2": - version: 2.0.2 - resolution: "@vercel/routing-utils@npm:2.0.2" +"@vercel/routing-utils@npm:2.1.3": + version: 2.1.3 + resolution: "@vercel/routing-utils@npm:2.1.3" dependencies: ajv: ^6.0.0 path-to-regexp: 6.1.0 dependenciesMeta: ajv: optional: true - checksum: 27dc1ce4df3c60c42334284e4f7734f41bf64674d4c583ec62e405fd9dfad409c6ddf1f7782aef0dde4217edf4c8248cac90d3ff0b5b89a6e18ef8f85a9e4d01 + checksum: bd802e0b35c48bec6aeaabdb6e7a88b6d1a26123b15c3f61b04f92d18df147427a3047981c13ac53a1c76065c8e67c5e5f407245540e4bfaac7765cafbf21f7f languageName: node linkType: hard -"@vercel/ruby@npm:1.3.39": - version: 1.3.39 - resolution: "@vercel/ruby@npm:1.3.39" - checksum: 7567560b7677b5639f1097b416b4fa2ce52890e142f40dcb583d3ee098fe29ac3fc862212408d3396b3430633f9a91928e00c6196196801f937bfc45f3866509 +"@vercel/ruby@npm:1.3.43": + version: 1.3.43 + resolution: "@vercel/ruby@npm:1.3.43" + checksum: d541f18fd045473bdd3a4e5d6cacc18024b23aefbf37a4da85a205127c950f65ac25352c0955f551d4e04b7582445ed31040e2c61eb0e5e12bae7badd74d4af6 languageName: node linkType: hard -"@vercel/static-build@npm:1.0.32": - version: 1.0.32 - resolution: "@vercel/static-build@npm:1.0.32" - checksum: 6a47f04044157c8a38259e0f53f771cef2091c1023d2c19c309034d9580b0362f16527dc051eac325942a5f9df452e1d4eb2cf2a33a634a2e088c1be1989858c +"@vercel/static-build@npm:1.0.39": + version: 1.0.39 + resolution: "@vercel/static-build@npm:1.0.39" + checksum: e1ac29e66e49ddbf492003836734ebcce7d9d3b50f3a8823a28fe19b0736782b37c19638367f6bcf2964762efd3777db66605ea32273b41a2f69523e110c25aa languageName: node linkType: hard -"@vercel/static-config@npm:2.0.3": - version: 2.0.3 - resolution: "@vercel/static-config@npm:2.0.3" +"@vercel/static-config@npm:2.0.6": + version: 2.0.6 + resolution: "@vercel/static-config@npm:2.0.6" dependencies: ajv: 8.6.3 json-schema-to-ts: 1.6.4 ts-morph: 12.0.0 - checksum: 6380673d9f979c8d412b0ecabfd918256f3eb01671ecef747b22d891311a80342b73f7d96415a0519e272a300498f2952d60b6ececf628c1d49c14ca28afe83d + checksum: a1aa38a9fa36bf25783bf5beb89a1004b832b5c57ed9354694993a928dd20a86d8e5a9cb38913aec1d0f48fae11d733726790c78ad61e032eab8a592b98e4f2d languageName: node linkType: hard -"@vitejs/plugin-react@npm:^2.0.1, @vitejs/plugin-react@npm:^2.1.0": +"@vitejs/plugin-react@npm:^2.0.1": version: 2.1.0 resolution: "@vitejs/plugin-react@npm:2.1.0" dependencies: @@ -5215,13 +5661,30 @@ __metadata: languageName: node linkType: hard -"@vitest/coverage-c8@npm:^0.24.3": - version: 0.24.3 - resolution: "@vitest/coverage-c8@npm:0.24.3" +"@vitejs/plugin-react@npm:^2.2.0": + version: 2.2.0 + resolution: "@vitejs/plugin-react@npm:2.2.0" + dependencies: + "@babel/core": ^7.19.6 + "@babel/plugin-transform-react-jsx": ^7.19.0 + "@babel/plugin-transform-react-jsx-development": ^7.18.6 + "@babel/plugin-transform-react-jsx-self": ^7.18.6 + "@babel/plugin-transform-react-jsx-source": ^7.19.6 + magic-string: ^0.26.7 + react-refresh: ^0.14.0 + peerDependencies: + vite: ^3.0.0 + checksum: cc85ab31b4689ab137c4b1e65383dccce494371523eb164c579096e513a2abbaa7efb49ba08655fae9f6692f5b7b2602ad339bdce4ae5982fc08fe444fb8a4e5 + languageName: node + linkType: hard + +"@vitest/coverage-c8@npm:^0.25.2": + version: 0.25.2 + resolution: "@vitest/coverage-c8@npm:0.25.2" dependencies: c8: ^7.12.0 - vitest: 0.24.3 - checksum: 75f79fcf7cee7dbdfa4b8978aa80d791288e5975ed6ca723d8b4985ea744c3b022138075065058a9a679346910ae054e23f6ee922b779e8f6e7b88baf0a496fa + vitest: 0.25.2 + checksum: 2e6554b0f060fb3f2f8c021bdacb1eabd7471e1fb8568c49c5db84c1edb1f5af642bfc579531942c389dfce85a3ced632e4967548d1a8fe85475f512863a516f languageName: node linkType: hard @@ -5298,7 +5761,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.1.1": +"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 @@ -5580,10 +6043,12 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:5.0.2, aria-query@npm:^5.0.0": - version: 5.0.2 - resolution: "aria-query@npm:5.0.2" - checksum: 2ecb77a64b9bbb030f5267b8672042b9559bdc507348d7c5efc14a6c180b06704c63481b162913f0466391837569b6d84f93ab18d73629e7bfa34c4f927c1fbc +"aria-query@npm:5.1.3": + version: 5.1.3 + resolution: "aria-query@npm:5.1.3" + dependencies: + deep-equal: ^2.0.5 + checksum: 929ff95f02857b650fb4cbcd2f41072eee2f46159a6605ea03bf63aa572e35ffdff43d69e815ddc462e16e07de8faba3978afc2813650b4448ee18c9895d982b languageName: node linkType: hard @@ -5597,6 +6062,13 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:^5.0.0": + version: 5.0.2 + resolution: "aria-query@npm:5.0.2" + checksum: 2ecb77a64b9bbb030f5267b8672042b9559bdc507348d7c5efc14a6c180b06704c63481b162913f0466391837569b6d84f93ab18d73629e7bfa34c4f927c1fbc + languageName: node + linkType: hard + "ariakit-utils@npm:0.17.0-next.26": version: 0.17.0-next.26 resolution: "ariakit-utils@npm:0.17.0-next.26" @@ -5692,6 +6164,19 @@ __metadata: languageName: node linkType: hard +"array-includes@npm:^3.1.6": + version: 3.1.6 + resolution: "array-includes@npm:3.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 + is-string: ^1.0.7 + checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 + languageName: node + linkType: hard + "array-iterate@npm:^1.0.0": version: 1.1.4 resolution: "array-iterate@npm:1.1.4" @@ -5718,15 +6203,15 @@ __metadata: languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.3.0": - version: 1.3.0 - resolution: "array.prototype.flatmap@npm:1.3.0" +"array.prototype.flatmap@npm:^1.3.1": + version: 1.3.1 + resolution: "array.prototype.flatmap@npm:1.3.1" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 es-shim-unscopables: ^1.0.0 - checksum: 818538f39409c4045d874be85df0dbd195e1446b14d22f95bdcfefea44ae77db44e42dcd89a559254ec5a7c8b338cfc986cc6d641e3472f9a5326b21eb2976a2 + checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 languageName: node linkType: hard @@ -5743,6 +6228,19 @@ __metadata: languageName: node linkType: hard +"array.prototype.tosorted@npm:^1.1.1": + version: 1.1.1 + resolution: "array.prototype.tosorted@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + get-intrinsic: ^1.1.3 + checksum: 7923324a67e70a2fc0a6e40237405d92395e45ebd76f5cb89c2a5cf1e66b47aca6baacd0cd628ffd88830b90d47fff268071493d09c9ae123645613dac2c2ca3 + languageName: node + linkType: hard + "arrify@npm:^1.0.1": version: 1.0.1 resolution: "arrify@npm:1.0.1" @@ -5812,55 +6310,48 @@ __metadata: languageName: node linkType: hard -"astro-compress@npm:^1.0.12": - version: 1.0.12 - resolution: "astro-compress@npm:1.0.12" +"astro-compress@npm:^1.1.8": + version: 1.1.8 + resolution: "astro-compress@npm:1.1.8" dependencies: - csso: 5.0.5 - deepmerge-ts: 4.2.2 - fast-glob: 3.2.12 - html-minifier-terser: 7.0.0 - sharp: 0.31.1 - svgo: 2.8.0 - terser: 5.15.1 - checksum: bbcdc12b1ee21d7b19c60de8c60f6a2bbb3242f6f4864099eede8947ed584ef87a6ad97d7f48446b077b548f62911a87e1110b679cbf5becf8a81c8b07070e1b + "@nikolarhristov/pipeline": 0.0.1 + checksum: f7466f3c99e32b659dcf863142b7f5284089c401bdc15d5cf466c003f4e5396af1362e99581536af3dde738fe8f386f38849a77cf4e99dd383badb0b7a561b18 languageName: node linkType: hard -"astro-critters@npm:^1.0.5": - version: 1.0.5 - resolution: "astro-critters@npm:1.0.5" +"astro-critters@npm:^1.1.8": + version: 1.1.8 + resolution: "astro-critters@npm:1.1.8" dependencies: - critters: 0.0.16 - deepmerge-ts: 4.2.2 - fast-glob: 3.2.12 - checksum: 04eb9e1c7f8823fc1236df655175ad4a7f2662707c086a8dda3b4f2633f9ece88b32113e8be9175236699b5790facd1629777d07d034bdfc7668c64201426e88 + "@nikolarhristov/pipeline": 0.0.1 + checksum: c4d6cfc1a0f97b39b708138306532e0182f5e82637f28e5b319ec3e59834b451ffd87e493db856802b43bae59f7aad4b0e633e473c8842384903042ec46c4af9 languageName: node linkType: hard -"astro-eslint-parser@npm:^0.7.0, astro-eslint-parser@npm:^0.7.2": - version: 0.7.2 - resolution: "astro-eslint-parser@npm:0.7.2" +"astro-eslint-parser@npm:^0.9.0": + version: 0.9.0 + resolution: "astro-eslint-parser@npm:0.9.0" dependencies: - "@astrojs/compiler": ^0.27.0 + "@astrojs/compiler": ^0.27.0 || ^0.28.0 || ^0.29.0 "@typescript-eslint/types": ^5.25.0 astrojs-compiler-sync: ^0.3.0 debug: ^4.3.4 + eslint-scope: ^7.1.1 eslint-visitor-keys: ^3.0.0 espree: ^9.0.0 - checksum: 9d9ff321c6d9e0863335c833e0f15be098c000d16ca794ae9ce6b32b79c83b7be779be54a24b0be43bc427c419d0527dc5f466426643a74eb5d55476e9bc77ac + checksum: 32b23fe3c685d5b18039543a4f5ed2d9ec62798f78a987c71423b7bc9ed2a422a07ff4895a70a2b12ef9a33a48de420c03e6dbd89625306843e0c5fdaac2137f languageName: node linkType: hard -"astro@npm:^1.5.2": - version: 1.5.2 - resolution: "astro@npm:1.5.2" +"astro@npm:^1.6.10": + version: 1.6.10 + resolution: "astro@npm:1.6.10" dependencies: - "@astrojs/compiler": ^0.27.1 - "@astrojs/language-server": ^0.26.2 + "@astrojs/compiler": ^0.29.15 + "@astrojs/language-server": ^0.28.3 "@astrojs/markdown-remark": ^1.1.3 "@astrojs/telemetry": ^1.0.1 - "@astrojs/webapi": ^1.1.0 + "@astrojs/webapi": ^1.1.1 "@babel/core": ^7.18.2 "@babel/generator": ^7.18.2 "@babel/parser": ^7.18.4 @@ -5879,7 +6370,6 @@ __metadata: debug: ^4.3.4 deepmerge-ts: ^4.2.2 diff: ^5.1.0 - eol: ^0.9.1 es-module-lexer: ^0.10.5 esbuild: ^0.14.43 execa: ^6.1.0 @@ -5902,7 +6392,7 @@ __metadata: recast: ^0.20.5 rehype: ^12.0.1 resolve: ^1.22.0 - rollup: ~2.78.0 + rollup: ^2.79.1 semver: ^7.3.7 shiki: ^0.11.1 sirv: ^2.0.2 @@ -5914,12 +6404,13 @@ __metadata: typescript: "*" unist-util-visit: ^4.1.0 vfile: ^5.3.2 - vite: ~3.1.3 + vite: ~3.2.4 + vitefu: ^0.2.1 yargs-parser: ^21.0.1 zod: ^3.17.3 bin: astro: astro.js - checksum: 0893ee9880203ce0ff577c3ee66647912c56487ecfceb01d16dab857a023d14ddf39c2d0dd32fddd9ed2b0d1afa09291033ec13a028cea7ee9cba3476b806f23 + checksum: 644458cea3e394a15e0a5ea2ffc183ec593d7971bbd4f80fdb213f19c70f15585fd3d75fbffb4dec7781eaa912a4902bb469423d076e3709167ea95d335e1626 languageName: node linkType: hard @@ -5948,6 +6439,13 @@ __metadata: languageName: node linkType: hard +"available-typed-arrays@npm:^1.0.5": + version: 1.0.5 + resolution: "available-typed-arrays@npm:1.0.5" + checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a + languageName: node + linkType: hard + "aws-sign2@npm:~0.7.0": version: 0.7.0 resolution: "aws-sign2@npm:0.7.0" @@ -5969,10 +6467,12 @@ __metadata: languageName: node linkType: hard -"axobject-query@npm:3.0.1": - version: 3.0.1 - resolution: "axobject-query@npm:3.0.1" - checksum: c4eede240d332936c85b15725695f55797304366063ee025db5a0c5df98bb35ec826129191c3e91a0355a56854029c7bd6f63b505022737b6e3ab83cef6bf7df +"axobject-query@npm:3.1.1": + version: 3.1.1 + resolution: "axobject-query@npm:3.1.1" + dependencies: + deep-equal: ^2.0.5 + checksum: c12a5da10dc7bab75e1cda9b6a3b5fcf10eba426ddf1a17b71ef65a434ed707ede7d1c4f013ba1609e970bc8c0cddac01365080d376204314e9b294719acd8a5 languageName: node linkType: hard @@ -5994,11 +6494,11 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.2.1": - version: 29.2.1 - resolution: "babel-jest@npm:29.2.1" +"babel-jest@npm:^29.3.1": + version: 29.3.1 + resolution: "babel-jest@npm:29.3.1" dependencies: - "@jest/transform": ^29.2.1 + "@jest/transform": ^29.3.1 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 babel-preset-jest: ^29.2.0 @@ -6007,7 +6507,7 @@ __metadata: slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: c340c10d8cee4b3ef5990443627b5f70dbe2649faa1fef671c8b4fd4a9f8d559b78e5644e18de8063974cd6606033caf1afcaa52744309f6e3176c0b37c2e8f9 + checksum: 793848238a771a931ddeb5930b9ec8ab800522ac8d64933665698f4a39603d157e572e20b57d79610277e1df88d3ee82b180d59a21f3570388f602beeb38a595 languageName: node linkType: hard @@ -6430,14 +6930,14 @@ __metadata: languageName: node linkType: hard -"bundle-require@npm:^3.1.0": - version: 3.1.0 - resolution: "bundle-require@npm:3.1.0" +"bundle-require@npm:^3.1.2": + version: 3.1.2 + resolution: "bundle-require@npm:3.1.2" dependencies: load-tsconfig: ^0.2.0 peerDependencies: esbuild: ">=0.13" - checksum: e433dd18ad2ccaf9d210040c5ce300a8c60f4caf0472856fd5162ec407f7b5b3e0559e540aa92b7381a18a6ff2b45bbe9270dc2fd7ace17e445e72a9cbc7fa95 + checksum: 71f8cb81bcde97825317b0e516b7e479ec70bd2370f55a8f02795c0df6d541e6562c4b9ec0427cc7b5b835103a8dcf306da04e3846fa468146358471490fcf81 languageName: node linkType: hard @@ -6809,13 +7309,20 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.2.0, ci-info@npm:^3.3.1, ci-info@npm:^3.4.0": +"ci-info@npm:^3.2.0, ci-info@npm:^3.3.1": version: 3.5.0 resolution: "ci-info@npm:3.5.0" checksum: 7def3789706ec18db3dc371dc699bd0df12057d54b796201f50ba87200e0849d3d83c68da00ab2ab8cdd738d91b25ab9e31620588f8d7e64ffaa1f760fd121cf languageName: node linkType: hard +"ci-info@npm:^3.6.1": + version: 3.6.1 + resolution: "ci-info@npm:3.6.1" + checksum: e463ed7152e795467c298268d58974d5e769fc7a0da2f72a53480042e01809e87908544b883a073391f446f46045b0d656c4a1fda3796c93740cd2be1c2d5f6f + languageName: node + linkType: hard + "cjs-module-lexer@npm:^1.0.0": version: 1.2.2 resolution: "cjs-module-lexer@npm:1.2.2" @@ -7281,9 +7788,9 @@ __metadata: languageName: node linkType: hard -"concurrently@npm:^7.4.0": - version: 7.4.0 - resolution: "concurrently@npm:7.4.0" +"concurrently@npm:^7.6.0": + version: 7.6.0 + resolution: "concurrently@npm:7.6.0" dependencies: chalk: ^4.1.0 date-fns: ^2.29.1 @@ -7297,7 +7804,7 @@ __metadata: bin: conc: dist/bin/concurrently.js concurrently: dist/bin/concurrently.js - checksum: cc547866ad8d009d184ca3a7115d6636052a5f56f5429d123092d651286043d7233f6429257e30e50f509894cd12798ea831896ac18092d8135f67ffcc8ac3ea + checksum: f705c9a7960f1b16559ca64958043faeeef6385c0bf30a03d1375e15ab2d96dba4f8166f1bbbb1c85e8da35ca0ce3c353875d71dff2aa132b2357bb533b3332e languageName: node linkType: hard @@ -7572,13 +8079,20 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": +"convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -7765,7 +8279,7 @@ __metadata: languageName: node linkType: hard -"css-select@npm:^4.1.3, css-select@npm:^4.2.0": +"css-select@npm:^4.2.0": version: 4.3.0 resolution: "css-select@npm:4.3.0" dependencies: @@ -7778,6 +8292,19 @@ __metadata: languageName: node linkType: hard +"css-select@npm:^5.1.0": + version: 5.1.0 + resolution: "css-select@npm:5.1.0" + dependencies: + boolbase: ^1.0.0 + css-what: ^6.1.0 + domhandler: ^5.0.2 + domutils: ^3.0.1 + nth-check: ^2.0.1 + checksum: 2772c049b188d3b8a8159907192e926e11824aea525b8282981f72ba3f349cf9ecd523fdf7734875ee2cb772246c22117fc062da105b6d59afe8dcd5c99c9bda + languageName: node + linkType: hard + "css-selector-parser@npm:^1.0.0": version: 1.4.1 resolution: "css-selector-parser@npm:1.4.1" @@ -7796,7 +8323,7 @@ __metadata: languageName: node linkType: hard -"css-tree@npm:^1.1.2, css-tree@npm:^1.1.3": +"css-tree@npm:^1.1.2": version: 1.1.3 resolution: "css-tree@npm:1.1.3" dependencies: @@ -7816,7 +8343,7 @@ __metadata: languageName: node linkType: hard -"css-what@npm:^6.0.1": +"css-what@npm:^6.0.1, css-what@npm:^6.1.0": version: 6.1.0 resolution: "css-what@npm:6.1.0" checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe @@ -7839,7 +8366,7 @@ __metadata: languageName: node linkType: hard -"csso@npm:5.0.5": +"csso@npm:5.0.5, csso@npm:^5.0.5": version: 5.0.5 resolution: "csso@npm:5.0.5" dependencies: @@ -7848,15 +8375,6 @@ __metadata: languageName: node linkType: hard -"csso@npm:^4.2.0": - version: 4.2.0 - resolution: "csso@npm:4.2.0" - dependencies: - css-tree: ^1.1.2 - checksum: 380ba9663da3bcea58dee358a0d8c4468bb6539be3c439dc266ac41c047217f52fd698fb7e4b6b6ccdfb8cf53ef4ceed8cc8ceccb8dfca2aa628319826b5b998 - languageName: node - linkType: hard - "csstype@npm:^3.0.2, csstype@npm:^3.0.6": version: 3.1.1 resolution: "csstype@npm:3.1.1" @@ -8012,6 +8530,29 @@ __metadata: languageName: node linkType: hard +"deep-equal@npm:^2.0.5": + version: 2.1.0 + resolution: "deep-equal@npm:2.1.0" + dependencies: + call-bind: ^1.0.2 + es-get-iterator: ^1.1.2 + get-intrinsic: ^1.1.3 + is-arguments: ^1.1.1 + is-date-object: ^1.0.5 + is-regex: ^1.1.4 + isarray: ^2.0.5 + object-is: ^1.1.5 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.4.3 + side-channel: ^1.0.4 + which-boxed-primitive: ^1.0.2 + which-collection: ^1.0.1 + which-typed-array: ^1.1.8 + checksum: a3efc772f14372d2a88bb1e414ab2218cf23cc77673521bbccbb2fc128dd8b6cccfad05eb35b9a8a4669bd7f3ecebaa137beebdf549b7be56c617bd5488ca987 + languageName: node + linkType: hard + "deep-extend@npm:^0.6.0, deep-extend@npm:~0.6.0": version: 0.6.0 resolution: "deep-extend@npm:0.6.0" @@ -8210,10 +8751,10 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.2.0": - version: 29.2.0 - resolution: "diff-sequences@npm:29.2.0" - checksum: e7b874cc7a4ce76fd199794c4d5fabb099ab4bce069592407ac2933e3a10e05f035111498e2f2c86572f5cfa9668a191b09e79f1d967dc39d9ca0a12aacde41a +"diff-sequences@npm:^29.3.1": + version: 29.3.1 + resolution: "diff-sequences@npm:29.3.1" + checksum: 8edab8c383355022e470779a099852d595dd856f9f5bd7af24f177e74138a668932268b4c4fd54096eed643861575c3652d4ecbbb1a9d710488286aed3ffa443 languageName: node linkType: hard @@ -8256,10 +8797,10 @@ __metadata: languageName: node linkType: hard -"discord-api-types@npm:^0.37.14": - version: 0.37.14 - resolution: "discord-api-types@npm:0.37.14" - checksum: 8f45f202e66acfd7b25624c8f4d225b363d9d8991d766959bcf246761548b99e21c12d9f7eafe00903913af66058595e5e56329dfb219eab8bb75a84f6413983 +"discord-api-types@npm:^0.37.19": + version: 0.37.19 + resolution: "discord-api-types@npm:0.37.19" + checksum: 532263d9bda3daf1855978e16bf44333876439f17070e966dd46f4cc931cc12d546d7ac5013618b66d9cb0f6a7f8751b604c01b88f948aa053a9a0154a0b47d6 languageName: node linkType: hard @@ -8272,24 +8813,24 @@ __metadata: "@discordjs/docgen": "workspace:^" "@discordjs/rest": "workspace:^" "@discordjs/util": "workspace:^" - "@favware/cliff-jumper": ^1.8.8 + "@favware/cliff-jumper": ^1.9.0 "@sapphire/snowflake": ^3.2.2 - "@types/node": 16.11.68 + "@types/node": 16.18.3 "@types/ws": ^8.5.3 - discord-api-types: ^0.37.14 + discord-api-types: ^0.37.19 dtslint: ^4.2.1 - eslint: ^8.25.0 + eslint: ^8.28.0 eslint-formatter-pretty: ^4.1.0 fast-deep-equal: ^3.1.3 - jest: ^29.2.1 + jest: ^29.3.1 lodash.snakecase: ^4.1.1 prettier: ^2.7.1 tsd: ^0.24.1 - tslib: ^2.4.0 + tslib: ^2.4.1 tslint: ^6.1.3 - typescript: ^4.8.4 - undici: ^5.11.0 - ws: ^8.9.0 + typescript: ^4.9.3 + undici: ^5.12.0 + ws: ^8.11.0 languageName: unknown linkType: soft @@ -8367,7 +8908,18 @@ __metadata: languageName: node linkType: hard -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": +"dom-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "dom-serializer@npm:2.0.0" + dependencies: + domelementtype: ^2.3.0 + domhandler: ^5.0.2 + entities: ^4.2.0 + checksum: cd1810544fd8cdfbd51fa2c0c1128ec3a13ba92f14e61b7650b5de421b88205fd2e3f0cc6ace82f13334114addb90ed1c2f23074a51770a8e9c1273acbc7f3e6 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0, domelementtype@npm:^2.3.0": version: 2.3.0 resolution: "domelementtype@npm:2.3.0" checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 @@ -8383,6 +8935,15 @@ __metadata: languageName: node linkType: hard +"domhandler@npm:^5.0.1, domhandler@npm:^5.0.2": + version: 5.0.3 + resolution: "domhandler@npm:5.0.3" + dependencies: + domelementtype: ^2.3.0 + checksum: 0f58f4a6af63e6f3a4320aa446d28b5790a009018707bce2859dcb1d21144c7876482b5188395a188dfa974238c019e0a1e610d2fc269a12b2c192ea2b0b131c + languageName: node + linkType: hard + "domutils@npm:^2.8.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" @@ -8394,6 +8955,17 @@ __metadata: languageName: node linkType: hard +"domutils@npm:^3.0.1": + version: 3.0.1 + resolution: "domutils@npm:3.0.1" + dependencies: + dom-serializer: ^2.0.0 + domelementtype: ^2.3.0 + domhandler: ^5.0.1 + checksum: 23aa7a840572d395220e173cb6263b0d028596e3950100520870a125af33ff819e6f609e1606d6f7d73bd9e7feb03bb404286e57a39063b5384c62b724d987b3 + languageName: node + linkType: hard + "dot-case@npm:^3.0.4": version: 3.0.4 resolution: "dot-case@npm:3.0.4" @@ -8489,12 +9061,12 @@ __metadata: languageName: node linkType: hard -"edge-runtime@npm:1.1.0-beta.40": - version: 1.1.0-beta.40 - resolution: "edge-runtime@npm:1.1.0-beta.40" +"edge-runtime@npm:2.0.0": + version: 2.0.0 + resolution: "edge-runtime@npm:2.0.0" dependencies: - "@edge-runtime/format": 1.1.0-beta.34 - "@edge-runtime/vm": 1.1.0-beta.37 + "@edge-runtime/format": 1.1.0 + "@edge-runtime/vm": 2.0.0 exit-hook: 2.2.1 http-status: 1.5.3 mri: 1.2.0 @@ -8504,7 +9076,7 @@ __metadata: time-span: 4.0.0 bin: edge-runtime: dist/cli/index.js - checksum: 7094c8df29480a3eac05d7b2828e5a3c3a6139acc6df9b98d3087e43278af98d6ca4d168d8f8705d85f3aeb62dc7f196f4bda4c8f5f463fb3482dc0183f77ed1 + checksum: 406dd2a6ffdc19e54e14dcac1d9433f12069c1f867ca9a6264108f1a38397e5910f48c0e5999a7eb1bfd705747f056e1f0eb479f88003663a817819f61212149 languageName: node linkType: hard @@ -8522,10 +9094,10 @@ __metadata: languageName: node linkType: hard -"emittery@npm:^0.10.2": - version: 0.10.2 - resolution: "emittery@npm:0.10.2" - checksum: ee3e21788b043b90885b18ea756ec3105c1cedc50b29709c92b01e239c7e55345d4bb6d3aef4ddbaf528eef448a40b3bb831bad9ee0fc9c25cbf1367ab1ab5ac +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 languageName: node linkType: hard @@ -8539,6 +9111,13 @@ __metadata: languageName: node linkType: hard +"emoji-regex@npm:^10.2.1": + version: 10.2.1 + resolution: "emoji-regex@npm:10.2.1" + checksum: 1aa2d16881c56531fdfc03d0b36f5c2b6221cc4097499a5665b88b711dc3fb4d5b8804f0ca6f00c56e5dcf89bac75f0487eee85da1da77df3a33accc6ecbe426 + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -8585,7 +9164,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:^4.3.1": +"entities@npm:^4.2.0, entities@npm:^4.3.1": version: 4.4.0 resolution: "entities@npm:4.4.0" checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 @@ -8600,16 +9179,9 @@ __metadata: linkType: hard "env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e - languageName: node - linkType: hard - -"eol@npm:^0.9.1": - version: 0.9.1 - resolution: "eol@npm:0.9.1" - checksum: ba9fa998bc8148b935dcf85585eacf049eeaf18d2ab6196710d4d1f59e7dfd0e87b18508dc67144ff8ba12f835a4a4989aeea64c98b13cca77b74b9d4b33bce5 + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e languageName: node linkType: hard @@ -8638,7 +9210,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.1": +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.1, es-abstract@npm:^1.20.4": version: 1.20.4 resolution: "es-abstract@npm:1.20.4" dependencies: @@ -8677,6 +9249,22 @@ __metadata: languageName: node linkType: hard +"es-get-iterator@npm:^1.1.2": + version: 1.1.2 + resolution: "es-get-iterator@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.0 + has-symbols: ^1.0.1 + is-arguments: ^1.1.0 + is-map: ^2.0.2 + is-set: ^2.0.2 + is-string: ^1.0.5 + isarray: ^2.0.5 + checksum: f75e66acb6a45686fa08b3ade9c9421a70d36a0c43ed4363e67f4d7aab2226cb73dd977cb48abbaf75721b946d3cd810682fcf310c7ad0867802fbf929b17dcf + languageName: node + linkType: hard + "es-module-lexer@npm:^0.10.5": version: 0.10.5 resolution: "es-module-lexer@npm:0.10.5" @@ -9411,29 +9999,29 @@ __metadata: languageName: node linkType: hard -"eslint-config-neon@npm:^0.1.39": - version: 0.1.39 - resolution: "eslint-config-neon@npm:0.1.39" +"eslint-config-neon@npm:^0.1.40": + version: 0.1.40 + resolution: "eslint-config-neon@npm:0.1.40" dependencies: - "@angular-eslint/eslint-plugin": ^14.1.2 - "@angular-eslint/eslint-plugin-template": ^14.1.2 - "@angular-eslint/template-parser": ^14.1.2 - "@next/eslint-plugin-next": ^12.3.1 + "@angular-eslint/eslint-plugin": ^14.4.0 + "@angular-eslint/eslint-plugin-template": ^14.4.0 + "@angular-eslint/template-parser": ^14.4.0 + "@next/eslint-plugin-next": ^13.0.4 "@rushstack/eslint-patch": ^1.2.0 - "@typescript-eslint/eslint-plugin": ^5.40.1 - "@typescript-eslint/parser": ^5.40.1 - astro-eslint-parser: ^0.7.2 + "@typescript-eslint/eslint-plugin": ^5.44.0 + "@typescript-eslint/parser": ^5.44.0 + astro-eslint-parser: ^0.9.0 eslint-config-prettier: ^8.5.0 - eslint-plugin-astro: ^0.20.0 + eslint-plugin-astro: ^0.21.0 eslint-plugin-cypress: ^2.12.1 eslint-plugin-import: "npm:eslint-plugin-i@latest" - eslint-plugin-jest: ^27.1.3 - eslint-plugin-jsdoc: ^39.3.14 + eslint-plugin-jest: ^27.1.5 + eslint-plugin-jsdoc: ^39.6.2 eslint-plugin-jsx-a11y: ^6.6.1 eslint-plugin-lodash: ^7.4.0 - eslint-plugin-n: ^15.3.0 + eslint-plugin-n: ^15.5.1 eslint-plugin-promise: ^6.1.1 - eslint-plugin-react: ^7.31.10 + eslint-plugin-react: ^7.31.11 eslint-plugin-react-hooks: ^4.6.0 eslint-plugin-rxjs: ^5.0.2 eslint-plugin-rxjs-angular: ^2.0.0 @@ -9441,10 +10029,10 @@ __metadata: eslint-plugin-svelte3: ^4.0.0 eslint-plugin-tsdoc: ^0.2.17 eslint-plugin-typescript-sort-keys: ^2.1.0 - eslint-plugin-unicorn: ^44.0.2 - eslint-plugin-vue: ^9.6.0 + eslint-plugin-unicorn: ^45.0.0 + eslint-plugin-vue: ^9.7.0 vue-eslint-parser: ^9.1.0 - checksum: 8a4792fa90e7043c91906a3476a09b9c180217954a23970dce194ab8fe8751ea78349a1e36c91ca74ca019cb1c66aa2276932c12343890053b6afff4b34c0796 + checksum: 04de9f352eb83e7561712d30b502d61df693f70a5e106eb0939813ef76f17992db8cbde07b52f615fc12fea8e5514dda94ca18e0fcb18ec8604d4bcbae94b782 languageName: node linkType: hard @@ -9511,19 +10099,19 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-astro@npm:^0.20.0": - version: 0.20.0 - resolution: "eslint-plugin-astro@npm:0.20.0" +"eslint-plugin-astro@npm:^0.21.0": + version: 0.21.0 + resolution: "eslint-plugin-astro@npm:0.21.0" dependencies: "@typescript-eslint/types": ^5.25.0 - astro-eslint-parser: ^0.7.0 + astro-eslint-parser: ^0.9.0 eslint-utils: ^3.0.0 postcss: ^8.4.14 postcss-selector-parser: ^6.0.10 sourcemap-codec: ^1.4.8 peerDependencies: eslint: ">=7.0.0" - checksum: eb046fd5644c788c32a1c6f553b945c2c2511c3d6b67a8ed9377b30bd9500cac068fa38b59b3a8efda087ab06aadf3b23ba8593279fc225ad795d8d358cd29d7 + checksum: fb94a670b20c55827cc50b78eac4bfb447d39577b728288eb6b3464852ca11de50a389d902c4fd288584de5ce8c67ca02f9c60b3f9f24071dd9810183dad77ee languageName: node linkType: hard @@ -9575,9 +10163,9 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^27.1.3": - version: 27.1.3 - resolution: "eslint-plugin-jest@npm:27.1.3" +"eslint-plugin-jest@npm:^27.1.5": + version: 27.1.5 + resolution: "eslint-plugin-jest@npm:27.1.5" dependencies: "@typescript-eslint/utils": ^5.10.0 peerDependencies: @@ -9588,15 +10176,15 @@ __metadata: optional: true jest: optional: true - checksum: 427f39ad4bb50b4e50a1f6aba04962ee3686e25b716d3e4dff47a304c2a352a35b032fec7350b84dc6362838525d93a70f7ae0f961b182c79bf602e90ebb1a55 + checksum: 7c9de765793f7161afa0bdcdce67f4d072944152880fa638b25d228188dcee47a4b4aada26c57db72bc10193c96a1979e17afb8a7c3e400e961d8adfbf23ddbe languageName: node linkType: hard -"eslint-plugin-jsdoc@npm:^39.3.14": - version: 39.3.14 - resolution: "eslint-plugin-jsdoc@npm:39.3.14" +"eslint-plugin-jsdoc@npm:^39.6.2": + version: 39.6.2 + resolution: "eslint-plugin-jsdoc@npm:39.6.2" dependencies: - "@es-joy/jsdoccomment": ~0.33.0 + "@es-joy/jsdoccomment": ~0.36.0 comment-parser: 1.3.1 debug: ^4.3.4 escape-string-regexp: ^4.0.0 @@ -9605,7 +10193,7 @@ __metadata: spdx-expression-parse: ^3.0.1 peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: 448cc78968a9d3481c21d1a2e99be4e8ccb73c9669ae0949df68957d8c219471501f68eb02095f869d91fde8c3d135563492fce5128523325d81dc5eb8112a15 + checksum: 613c541a644d441e5465139b2a1934842a29c701fb89f0380f105be28180c1fa2f3c08b421b134b87fef194d4fb4dab4006a972a084e476eebb14cf5bb9399fe languageName: node linkType: hard @@ -9643,21 +10231,21 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-n@npm:^15.3.0": - version: 15.3.0 - resolution: "eslint-plugin-n@npm:15.3.0" +"eslint-plugin-n@npm:^15.5.1": + version: 15.5.1 + resolution: "eslint-plugin-n@npm:15.5.1" dependencies: builtins: ^5.0.1 eslint-plugin-es: ^4.1.0 eslint-utils: ^3.0.0 ignore: ^5.1.1 - is-core-module: ^2.10.0 + is-core-module: ^2.11.0 minimatch: ^3.1.2 resolve: ^1.22.1 - semver: ^7.3.7 + semver: ^7.3.8 peerDependencies: eslint: ">=7.0.0" - checksum: a5a4c778804a0d343ca904c917b8e583b4df28aaad593ea6d41893befac45d4f92ab38d895aac018ac757583697d38e99397d4deda783ec8ff650bb2041d23c8 + checksum: b97e547fd5429a564c84aace2803d82f4b031e0c4a8896fbe06ab2a116618d08e97435edd9f58e380771adc2ad43d53039e87fb0c91a007425a1ae412708714a languageName: node linkType: hard @@ -9679,27 +10267,28 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.31.10": - version: 7.31.10 - resolution: "eslint-plugin-react@npm:7.31.10" +"eslint-plugin-react@npm:^7.31.11": + version: 7.31.11 + resolution: "eslint-plugin-react@npm:7.31.11" dependencies: - array-includes: ^3.1.5 - array.prototype.flatmap: ^1.3.0 + array-includes: ^3.1.6 + array.prototype.flatmap: ^1.3.1 + array.prototype.tosorted: ^1.1.1 doctrine: ^2.1.0 estraverse: ^5.3.0 jsx-ast-utils: ^2.4.1 || ^3.0.0 minimatch: ^3.1.2 - object.entries: ^1.1.5 - object.fromentries: ^2.0.5 - object.hasown: ^1.1.1 - object.values: ^1.1.5 + object.entries: ^1.1.6 + object.fromentries: ^2.0.6 + object.hasown: ^1.1.2 + object.values: ^1.1.6 prop-types: ^15.8.1 resolve: ^2.0.0-next.3 semver: ^6.3.0 - string.prototype.matchall: ^4.0.7 + string.prototype.matchall: ^4.0.8 peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: f013669c296483559a760648fa06425f161b1aff93c668f14c4561c933d22a7836b745b88a795c53cab929c71513d5fd1f2ffdddff915709f01b77ac25f5b71b + checksum: a3d612f6647bef33cf2a67c81a6b37b42c075300ed079cffecf5fb475c0d6ab855c1de340d1cbf361a0126429fb906dda597527235d2d12c4404453dbc712fc6 languageName: node linkType: hard @@ -9783,33 +10372,35 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-unicorn@npm:^44.0.2": - version: 44.0.2 - resolution: "eslint-plugin-unicorn@npm:44.0.2" +"eslint-plugin-unicorn@npm:^45.0.0": + version: 45.0.0 + resolution: "eslint-plugin-unicorn@npm:45.0.0" dependencies: "@babel/helper-validator-identifier": ^7.19.1 - ci-info: ^3.4.0 + ci-info: ^3.6.1 clean-regexp: ^1.0.0 eslint-utils: ^3.0.0 esquery: ^1.4.0 indent-string: ^4.0.0 is-builtin-module: ^3.2.0 + jsesc: 3.0.2 lodash: ^4.17.21 pluralize: ^8.0.0 read-pkg-up: ^7.0.1 regexp-tree: ^0.1.24 + regjsparser: 0.9.1 safe-regex: ^2.1.1 - semver: ^7.3.7 + semver: ^7.3.8 strip-indent: ^3.0.0 peerDependencies: - eslint: ">=8.23.1" - checksum: b0ed6b3a60e36efab5b19a0e2a1ea4e4faba79ef315aa1eff9bdebaf28b70ada059837a0a4cdf20e0b678d8eee6155afc2c6300d0ff7d51b68eced4f0bcb56e0 + eslint: ">=8.28.0" + checksum: 585b9ac164937d97bf59341b9593f9679b56df96ab462bcdec1931de5553ec093dc9c1b1407dcb92c392508d67962406110197beaf2a6ca2282f5217399d084e languageName: node linkType: hard -"eslint-plugin-vue@npm:^9.6.0": - version: 9.6.0 - resolution: "eslint-plugin-vue@npm:9.6.0" +"eslint-plugin-vue@npm:^9.7.0": + version: 9.7.0 + resolution: "eslint-plugin-vue@npm:9.7.0" dependencies: eslint-utils: ^3.0.0 natural-compare: ^1.4.0 @@ -9820,7 +10411,7 @@ __metadata: xml-name-validator: ^4.0.0 peerDependencies: eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 - checksum: fcfb333b09af4d1db027f8a52b7ffdf0ebaa649f5738b7a6124bd02aaa1e075daaaa97e490a863667dda16c79e1d37688a8311d7685b9a63d3c4c0dd5f1d9622 + checksum: 733abf4f9ce2e355cc8d5501e6df94d7b332d9f8e0b5b5436ff24455e376c4c20a03d689e0502bd8facfb4953f1b1bf943fb0f7b0f2bc10c77a45bed9a8a9105 languageName: node linkType: hard @@ -9831,7 +10422,7 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^5.1.0, eslint-scope@npm:^5.1.1": +"eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" dependencies: @@ -9841,7 +10432,7 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^7.1.1": +"eslint-scope@npm:^7.0.0, eslint-scope@npm:^7.1.1": version: 7.1.1 resolution: "eslint-scope@npm:7.1.1" dependencies: @@ -9892,13 +10483,14 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.25.0": - version: 8.25.0 - resolution: "eslint@npm:8.25.0" +"eslint@npm:^8.28.0": + version: 8.28.0 + resolution: "eslint@npm:8.28.0" dependencies: "@eslint/eslintrc": ^1.3.3 - "@humanwhocodes/config-array": ^0.10.5 + "@humanwhocodes/config-array": ^0.11.6 "@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 @@ -9914,14 +10506,14 @@ __metadata: fast-deep-equal: ^3.1.3 file-entry-cache: ^6.0.1 find-up: ^5.0.0 - glob-parent: ^6.0.1 + glob-parent: ^6.0.2 globals: ^13.15.0 - globby: ^11.1.0 grapheme-splitter: ^1.0.4 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-sdsl: ^4.1.4 js-yaml: ^4.1.0 json-stable-stringify-without-jsonify: ^1.0.1 @@ -9936,7 +10528,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 7acf2693b522b573657b53d2245b5522d3a131e4224b1cbf01e2c3579632fdbf62599284f68bc483e6e4eba23ae3643c9544744e0214a86e727cc361cedcd0fa + checksum: 1b793486b2ec80f0602d75fff7116f7c39a3286f523608a999eead9bec4154a06841785d2b4fb87f8292a94cf85778c1dbfaec727772a09c4d604fdb9ff0809a languageName: node linkType: hard @@ -10178,16 +10770,16 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.2.1": - version: 29.2.1 - resolution: "expect@npm:29.2.1" +"expect@npm:^29.3.1": + version: 29.3.1 + resolution: "expect@npm:29.3.1" dependencies: - "@jest/expect-utils": ^29.2.1 + "@jest/expect-utils": ^29.3.1 jest-get-type: ^29.2.0 - jest-matcher-utils: ^29.2.1 - jest-message-util: ^29.2.1 - jest-util: ^29.2.1 - checksum: 0a1347b569de246b8e988a282e1b037746a64f890c89197cff891087673e0ccdc0c485c40f182659d7cc0e910dc40546719c8a00f0e2bdabcc6f627f2af49891 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 + checksum: e9588c2a430b558b9a3dc72d4ad05f36b047cb477bc6a7bb9cfeef7614fe7e5edbab424c2c0ce82739ee21ecbbbd24596259528209f84cd72500cc612d910d30 languageName: node linkType: hard @@ -10501,6 +11093,15 @@ __metadata: languageName: node linkType: hard +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + languageName: node + linkType: hard + "foreground-child@npm:^2.0.0": version: 2.0.0 resolution: "foreground-child@npm:2.0.0" @@ -10958,13 +11559,20 @@ __metadata: languageName: node linkType: hard -"github-slugger@npm:^1.1.1, github-slugger@npm:^1.4.0": +"github-slugger@npm:^1.4.0": version: 1.4.0 resolution: "github-slugger@npm:1.4.0" checksum: 4f52e7a21f5c6a4c5328f01fe4fe13ae8881fea78bfe31f9e72c4038f97e3e70d52fb85aa7633a52c501dc2486874474d9abd22aa61cbe9b113099a495551c6b languageName: node linkType: hard +"github-slugger@npm:^2.0.0": + version: 2.0.0 + resolution: "github-slugger@npm:2.0.0" + checksum: 250375cde2058f21454872c2c79f72c4637340c30c51ff158ca4ec71cbc478f33d54477d787a662f9207aeb095a2060f155bc01f15329ba8a5fb6698e0fc81f8 + languageName: node + linkType: hard + "glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -10974,7 +11582,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^6.0.1": +"glob-parent@npm:^6.0.2": version: 6.0.2 resolution: "glob-parent@npm:6.0.2" dependencies: @@ -11143,6 +11751,15 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + "got@npm:^9.6.0": version: 9.6.0 resolution: "got@npm:9.6.0" @@ -11215,9 +11832,9 @@ __metadata: languageName: node linkType: hard -"happy-dom@npm:^7.6.0": - version: 7.6.0 - resolution: "happy-dom@npm:7.6.0" +"happy-dom@npm:^7.7.0": + version: 7.7.0 + resolution: "happy-dom@npm:7.7.0" dependencies: css.escape: ^1.5.1 he: ^1.2.0 @@ -11226,7 +11843,7 @@ __metadata: webidl-conversions: ^7.0.0 whatwg-encoding: ^2.0.0 whatwg-mimetype: ^3.0.0 - checksum: 96fd73ccea28edfbbe97bc900d358ac0bff340694ccdc4fb6b6cd45ab60701329c047f4c6071770f88d29b3b640d50d039772529df8042e12452e7f9a8204ce9 + checksum: 39badc7c6da27f459780d11acd0d0bd9a48d146d5c32588ed765c2f16b1da605670dbbcfaf11e030215a53a1036f32519a338deef77211e86a2ec2eaea3048f3 languageName: node linkType: hard @@ -11302,7 +11919,7 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": +"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 @@ -11783,12 +12400,12 @@ __metadata: languageName: node linkType: hard -"husky@npm:^8.0.1": - version: 8.0.1 - resolution: "husky@npm:8.0.1" +"husky@npm:^8.0.2": + version: 8.0.2 + resolution: "husky@npm:8.0.2" bin: husky: lib/bin.js - checksum: 943a73a13d0201318fd30e83d299bb81d866bd245b69e6277804c3b462638dc1921694cb94c2b8c920a4a187060f7d6058d3365152865406352e934c5fff70dc + checksum: e101656fcb56163d610488f186448c78b132626aa427094489d886ce9374955a90274912b0f3a34af3326eaa74977883b032e5f701d7aaf4554daa5a7931be43 languageName: node linkType: hard @@ -11973,9 +12590,9 @@ __metadata: languageName: node linkType: hard -"ioredis@npm:^5.2.3": - version: 5.2.3 - resolution: "ioredis@npm:5.2.3" +"ioredis@npm:^5.2.4": + version: 5.2.4 + resolution: "ioredis@npm:5.2.4" dependencies: "@ioredis/commands": ^1.1.1 cluster-key-slot: ^1.1.0 @@ -11986,7 +12603,7 @@ __metadata: redis-errors: ^1.2.0 redis-parser: ^3.0.0 standard-as-callback: ^2.1.0 - checksum: 2cb7f0f4217e6774accad3620af1b7114722721c1d1824be2c9f0c2a77ab9629f2e0848d18b1a7208bc37796ae1207cb3e0898fce61900cfe797da0382724ad1 + checksum: c3a7df407a41ae516bede8b6db853c568198b13fe4a4785f66be5cd541087121b9d45fb9a6b1b6a5fb668c29ce52ab4685642b994803bdfa0a35f794ea8ef7ae languageName: node linkType: hard @@ -12045,6 +12662,16 @@ __metadata: languageName: node linkType: hard +"is-arguments@npm:^1.1.0, is-arguments@npm:^1.1.1": + version: 1.1.1 + resolution: "is-arguments@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -12103,7 +12730,7 @@ __metadata: languageName: node linkType: hard -"is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": version: 1.2.7 resolution: "is-callable@npm:1.2.7" checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac @@ -12132,7 +12759,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.1.0, is-core-module@npm:^2.10.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.9.0": +"is-core-module@npm:^2.1.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.9.0": version: 2.10.0 resolution: "is-core-module@npm:2.10.0" dependencies: @@ -12141,7 +12768,16 @@ __metadata: languageName: node linkType: hard -"is-date-object@npm:^1.0.1": +"is-core-module@npm:^2.11.0": + version: 2.11.0 + resolution: "is-core-module@npm:2.11.0" + dependencies: + has: ^1.0.3 + checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" dependencies: @@ -12273,6 +12909,13 @@ __metadata: languageName: node linkType: hard +"is-map@npm:^2.0.1, is-map@npm:^2.0.2": + version: 2.0.2 + resolution: "is-map@npm:2.0.2" + checksum: ace3d0ecd667bbdefdb1852de601268f67f2db725624b1958f279316e13fecb8fa7df91fd60f690d7417b4ec180712f5a7ee967008e27c65cfd475cc84337728 + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -12310,7 +12953,7 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.2": +"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 @@ -12364,6 +13007,13 @@ __metadata: languageName: node linkType: hard +"is-set@npm:^2.0.1, is-set@npm:^2.0.2": + version: 2.0.2 + resolution: "is-set@npm:2.0.2" + checksum: b64343faf45e9387b97a6fd32be632ee7b269bd8183701f3b3f5b71a7cf00d04450ed8669d0bd08753e08b968beda96fca73a10fd0ff56a32603f64deba55a57 + languageName: node + linkType: hard + "is-shared-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "is-shared-array-buffer@npm:1.0.2" @@ -12414,6 +13064,19 @@ __metadata: languageName: node linkType: hard +"is-typed-array@npm:^1.1.10": + version: 1.1.10 + resolution: "is-typed-array@npm:1.1.10" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + checksum: aac6ecb59d4c56a1cdeb69b1f129154ef462bbffe434cb8a8235ca89b42f258b7ae94073c41b3cb7bce37f6a1733ad4499f07882d5d5093a7ba84dfc4ebb8017 + languageName: node + linkType: hard + "is-typedarray@npm:^1.0.0, is-typedarray@npm:~1.0.0": version: 1.0.0 resolution: "is-typedarray@npm:1.0.0" @@ -12435,6 +13098,13 @@ __metadata: languageName: node linkType: hard +"is-weakmap@npm:^2.0.1": + version: 2.0.1 + resolution: "is-weakmap@npm:2.0.1" + checksum: 1222bb7e90c32bdb949226e66d26cb7bce12e1e28e3e1b40bfa6b390ba3e08192a8664a703dff2a00a84825f4e022f9cd58c4599ff9981ab72b1d69479f4f7f6 + languageName: node + linkType: hard + "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -12444,6 +13114,16 @@ __metadata: languageName: node linkType: hard +"is-weakset@npm:^2.0.1": + version: 2.0.2 + resolution: "is-weakset@npm:2.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 5d8698d1fa599a0635d7ca85be9c26d547b317ed8fd83fc75f03efbe75d50001b5eececb1e9971de85fcde84f69ae6f8346bc92d20d55d46201d328e4c74a367 + languageName: node + linkType: hard + "is-wsl@npm:^2.2.0": version: 2.2.0 resolution: "is-wsl@npm:2.2.0" @@ -12460,6 +13140,13 @@ __metadata: languageName: node linkType: hard +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + "isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" @@ -12550,47 +13237,47 @@ __metadata: languageName: node linkType: hard -"jest-circus@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-circus@npm:29.2.1" +"jest-circus@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-circus@npm:29.3.1" dependencies: - "@jest/environment": ^29.2.1 - "@jest/expect": ^29.2.1 - "@jest/test-result": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/environment": ^29.3.1 + "@jest/expect": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 is-generator-fn: ^2.0.0 - jest-each: ^29.2.1 - jest-matcher-utils: ^29.2.1 - jest-message-util: ^29.2.1 - jest-runtime: ^29.2.1 - jest-snapshot: ^29.2.1 - jest-util: ^29.2.1 + jest-each: ^29.3.1 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-runtime: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 p-limit: ^3.1.0 - pretty-format: ^29.2.1 + pretty-format: ^29.3.1 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 3fe8bf27a42d25e68ba869fe5ef0103acf67294c3a2e63c0895b5efaa4ed7fcb35f8c14eeab1a7e6bdee0cb46740fe24177d581976391da740b468aa81bccbbb + checksum: 125710debd998ad9693893e7c1235e271b79f104033b8169d82afe0bc0d883f8f5245feef87adcbb22ad27ff749fd001aa998d11a132774b03b4e2b8af77d5d8 languageName: node linkType: hard -"jest-cli@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-cli@npm:29.2.1" +"jest-cli@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-cli@npm:29.3.1" dependencies: - "@jest/core": ^29.2.1 - "@jest/test-result": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/core": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.2.1 - jest-util: ^29.2.1 - jest-validate: ^29.2.1 + jest-config: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 prompts: ^2.0.1 yargs: ^17.3.1 peerDependencies: @@ -12600,34 +13287,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 6f190450a6cc462fdb63617ad6fa67fc5e0daaa2ea47e41e2fcc1b16d02886b5be9228066295ba51847be0aee1317dad71648e4ad3b5373f7db0ba93eb8e50f2 + checksum: 829895d33060042443bd1e9e87eb68993773d74f2c8a9b863acf53cece39d227ae0e7d76df2e9c5934c414bdf70ce398a34b3122cfe22164acb2499a74d7288d languageName: node linkType: hard -"jest-config@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-config@npm:29.2.1" +"jest-config@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-config@npm:29.3.1" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.2.1 - "@jest/types": ^29.2.1 - babel-jest: ^29.2.1 + "@jest/test-sequencer": ^29.3.1 + "@jest/types": ^29.3.1 + babel-jest: ^29.3.1 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.2.1 - jest-environment-node: ^29.2.1 + jest-circus: ^29.3.1 + jest-environment-node: ^29.3.1 jest-get-type: ^29.2.0 jest-regex-util: ^29.2.0 - jest-resolve: ^29.2.1 - jest-runner: ^29.2.1 - jest-util: ^29.2.1 - jest-validate: ^29.2.1 + jest-resolve: ^29.3.1 + jest-runner: ^29.3.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.2.1 + pretty-format: ^29.3.1 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -12638,7 +13325,7 @@ __metadata: optional: true ts-node: optional: true - checksum: a2052eb47d4cd964b1bb9e34cddf608bd252d185e58376c012447afb2fe6c93d17d452a0f38ce45b0621adaec60d68e6d3538146928bb7e5e553523f805dc80d + checksum: 6e663f04ae1024a53a4c2c744499b4408ca9a8b74381dd5e31b11bb3c7393311ecff0fb61b06287768709eb2c9e5a2fd166d258f5a9123abbb4c5812f99c12fe languageName: node linkType: hard @@ -12666,15 +13353,15 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-diff@npm:29.2.1" +"jest-diff@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-diff@npm:29.3.1" dependencies: chalk: ^4.0.0 - diff-sequences: ^29.2.0 + diff-sequences: ^29.3.1 jest-get-type: ^29.2.0 - pretty-format: ^29.2.1 - checksum: e3553e5bf556b786b864e3da0ef0a2cde8b260a7bb281eaf47d34aee0bf303bf557bc75416c20f9454e2e1b6ac0ae53684d5be7af5cfc010dc08805bdcb3f457 + pretty-format: ^29.3.1 + checksum: ac5c09745f2b1897e6f53216acaf6ed44fc4faed8e8df053ff4ac3db5d2a1d06a17b876e49faaa15c8a7a26f5671bcbed0a93781dcc2835f781c79a716a591a9 languageName: node linkType: hard @@ -12687,30 +13374,30 @@ __metadata: languageName: node linkType: hard -"jest-each@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-each@npm:29.2.1" +"jest-each@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-each@npm:29.3.1" dependencies: - "@jest/types": ^29.2.1 + "@jest/types": ^29.3.1 chalk: ^4.0.0 jest-get-type: ^29.2.0 - jest-util: ^29.2.1 - pretty-format: ^29.2.1 - checksum: 877bd64a08ff4245400c4d84d65a6fb87898e53498b65f53915c7e66e66bf49a4559bc5ca584a3dab57251e88815f48c1053e40c0c1017fbb7d9813f40eb25b8 + jest-util: ^29.3.1 + pretty-format: ^29.3.1 + checksum: 16d51ef8f96fba44a3479f1c6f7672027e3b39236dc4e41217c38fe60a3b66b022ffcee72f8835a442f7a8a0a65980a93fb8e73a9782d192452526e442ad049a languageName: node linkType: hard -"jest-environment-node@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-environment-node@npm:29.2.1" +"jest-environment-node@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-environment-node@npm:29.3.1" dependencies: - "@jest/environment": ^29.2.1 - "@jest/fake-timers": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/environment": ^29.3.1 + "@jest/fake-timers": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" - jest-mock: ^29.2.1 - jest-util: ^29.2.1 - checksum: fc001e4292ae7516829008c1f030ff176cce9e63d845e3b209bf0c9088d32fc464174032fd41c7cf7c9899801033991aa7bd9f661729cb5691c9179b29188888 + jest-mock: ^29.3.1 + jest-util: ^29.3.1 + checksum: 16d4854bd2d35501bd4862ca069baf27ce9f5fd7642fdcab9d2dab49acd28c082d0c8882bf2bb28ed7bbaada486da577c814c9688ddc62d1d9f74a954fde996a languageName: node linkType: hard @@ -12735,11 +13422,11 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-haste-map@npm:29.2.1" +"jest-haste-map@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-haste-map@npm:29.3.1" dependencies: - "@jest/types": ^29.2.1 + "@jest/types": ^29.3.1 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 @@ -12747,24 +13434,24 @@ __metadata: fsevents: ^2.3.2 graceful-fs: ^4.2.9 jest-regex-util: ^29.2.0 - jest-util: ^29.2.1 - jest-worker: ^29.2.1 + jest-util: ^29.3.1 + jest-worker: ^29.3.1 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: 1880e5dd12b83c8ffbd527b80c81bd694a9018ed003d1ecc72ed4e1a0c2be0bc2a26a96c7439c4be8954912cd01ecaea807d2739b24d2ac7dd23f5aa672d9da1 + checksum: 97ea26af0c28a2ba568c9c65d06211487bbcd501cb4944f9d55e07fd2b00ad96653ea2cc9033f3d5b7dc1feda33e47ae9cc56b400191ea4533be213c9f82e67c languageName: node linkType: hard -"jest-leak-detector@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-leak-detector@npm:29.2.1" +"jest-leak-detector@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-leak-detector@npm:29.3.1" dependencies: jest-get-type: ^29.2.0 - pretty-format: ^29.2.1 - checksum: c30107ae583c7b1a30b8ac32f98997597ac5c46c243ef69a2b4bbaf803eefe0a696c6049a75434afdd0b0adbff418081a202903fcf00d38e4f8c1fe442c0f660 + pretty-format: ^29.3.1 + checksum: 0dd8ed31ae0b5a3d14f13f567ca8567f2663dd2d540d1e55511d3b3fd7f80a1d075392179674ebe9fab9be0b73678bf4d2f8bbbc0f4bdd52b9815259194da559 languageName: node linkType: hard @@ -12780,15 +13467,15 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-matcher-utils@npm:29.2.1" +"jest-matcher-utils@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-matcher-utils@npm:29.3.1" dependencies: chalk: ^4.0.0 - jest-diff: ^29.2.1 + jest-diff: ^29.3.1 jest-get-type: ^29.2.0 - pretty-format: ^29.2.1 - checksum: d2a2f1ca8389e6ee529dc160786d912dec6cadfb395139fa1afa0f2e175775c7cf50dfe00981baae71ee0cbcab0d7f9f2d9cf9b9665dcda1d2cc04294fbd9979 + pretty-format: ^29.3.1 + checksum: 311e8d9f1e935216afc7dd8c6acf1fbda67a7415e1afb1bf72757213dfb025c1f2dc5e2c185c08064a35cdc1f2d8e40c57616666774ed1b03e57eb311c20ec77 languageName: node linkType: hard @@ -12809,31 +13496,31 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-message-util@npm:29.2.1" +"jest-message-util@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-message-util@npm:29.3.1" dependencies: "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.2.1 + "@jest/types": ^29.3.1 "@types/stack-utils": ^2.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 micromatch: ^4.0.4 - pretty-format: ^29.2.1 + pretty-format: ^29.3.1 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 1ec1341dea7f0f04dfa9912647e5c4a092954c122becd9560e43e317407fd401745d99766048be7ee5f0b0b5ff09c84d3c853aa777af57139050efed0ad78376 + checksum: 15d0a2fca3919eb4570bbf575734780c4b9e22de6aae903c4531b346699f7deba834c6c86fe6e9a83ad17fac0f7935511cf16dce4d71a93a71ebb25f18a6e07b languageName: node linkType: hard -"jest-mock@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-mock@npm:29.2.1" +"jest-mock@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-mock@npm:29.3.1" dependencies: - "@jest/types": ^29.2.1 + "@jest/types": ^29.3.1 "@types/node": "*" - jest-util: ^29.2.1 - checksum: fb28fc277ed788fec45adb8ed1e45d6c7fc02938b5db2e87bfaccc83e385f6fcabfe3433562c50a051efffa02676c07e9e7fdc90d177be67d87a6831c5fc19fe + jest-util: ^29.3.1 + checksum: 9098852cb2866db4a1a59f9f7581741dfc572f648e9e574a1b187fd69f5f2f6190ad387ede21e139a8b80a6a1343ecc3d6751cd2ae1ae11d7ea9fa1950390fb2 languageName: node linkType: hard @@ -12856,95 +13543,95 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-resolve-dependencies@npm:29.2.1" +"jest-resolve-dependencies@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-resolve-dependencies@npm:29.3.1" dependencies: jest-regex-util: ^29.2.0 - jest-snapshot: ^29.2.1 - checksum: d29908195298f3f3d22f4632bc6eecde89d586d8b8563539072ffbfc5e6ea8973051ef7cbc8336060fcd8b91ea2e42353e8e20958d1fa68dbd6e1c8511a68023 + jest-snapshot: ^29.3.1 + checksum: 6ec4727a87c6e7954e93de9949ab9967b340ee2f07626144c273355f05a2b65fa47eb8dece2d6e5f4fd99cdb893510a3540aa5e14ba443f70b3feb63f6f98982 languageName: node linkType: hard -"jest-resolve@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-resolve@npm:29.2.1" +"jest-resolve@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-resolve@npm:29.3.1" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.2.1 + jest-haste-map: ^29.3.1 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.2.1 - jest-validate: ^29.2.1 + jest-util: ^29.3.1 + jest-validate: ^29.3.1 resolve: ^1.20.0 resolve.exports: ^1.1.0 slash: ^3.0.0 - checksum: d9ea07ccfa91fcbc7461a0c90bdf9b928f86c9b5de0b01a0a5f73c55aa9cf4f6f7b00439248d4babb9a021070df08be8e4716bc3c73d91311719a400c76f9c82 + checksum: 0dea22ed625e07b8bfee52dea1391d3a4b453c1a0c627a0fa7c22e44bb48e1c289afe6f3c316def70753773f099c4e8f436c7a2cc12fcc6c7dd6da38cba2cd5f languageName: node linkType: hard -"jest-runner@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-runner@npm:29.2.1" +"jest-runner@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-runner@npm:29.3.1" dependencies: - "@jest/console": ^29.2.1 - "@jest/environment": ^29.2.1 - "@jest/test-result": ^29.2.1 - "@jest/transform": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/console": ^29.3.1 + "@jest/environment": ^29.3.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 - emittery: ^0.10.2 + emittery: ^0.13.1 graceful-fs: ^4.2.9 jest-docblock: ^29.2.0 - jest-environment-node: ^29.2.1 - jest-haste-map: ^29.2.1 - jest-leak-detector: ^29.2.1 - jest-message-util: ^29.2.1 - jest-resolve: ^29.2.1 - jest-runtime: ^29.2.1 - jest-util: ^29.2.1 - jest-watcher: ^29.2.1 - jest-worker: ^29.2.1 + jest-environment-node: ^29.3.1 + jest-haste-map: ^29.3.1 + jest-leak-detector: ^29.3.1 + jest-message-util: ^29.3.1 + jest-resolve: ^29.3.1 + jest-runtime: ^29.3.1 + jest-util: ^29.3.1 + jest-watcher: ^29.3.1 + jest-worker: ^29.3.1 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: 5aaa04b80eb9d2c78cf5e0ae815a2b418ec5ab24e3fa0bd5a1fa17c886a4c5e9938f5d8508f2ac24ed9dc8cf93c0742c8e538ae31833ed3dfa9fe6e2bc612fa9 + checksum: 61ad445d8a5f29573332f27a21fc942fb0d2a82bf901a0ea1035bf3bd7f349d1e425f71f54c3a3f89b292a54872c3248d395a2829d987f26b6025b15530ea5d2 languageName: node linkType: hard -"jest-runtime@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-runtime@npm:29.2.1" +"jest-runtime@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-runtime@npm:29.3.1" dependencies: - "@jest/environment": ^29.2.1 - "@jest/fake-timers": ^29.2.1 - "@jest/globals": ^29.2.1 + "@jest/environment": ^29.3.1 + "@jest/fake-timers": ^29.3.1 + "@jest/globals": ^29.3.1 "@jest/source-map": ^29.2.0 - "@jest/test-result": ^29.2.1 - "@jest/transform": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/test-result": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.2.1 - jest-message-util: ^29.2.1 - jest-mock: ^29.2.1 + jest-haste-map: ^29.3.1 + jest-message-util: ^29.3.1 + jest-mock: ^29.3.1 jest-regex-util: ^29.2.0 - jest-resolve: ^29.2.1 - jest-snapshot: ^29.2.1 - jest-util: ^29.2.1 + jest-resolve: ^29.3.1 + jest-snapshot: ^29.3.1 + jest-util: ^29.3.1 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: bfd535ece219f5a1e36758b51c498246e7aac63458a12cb85b3b2156a632d5ee802f43fdc566714fb36c12521589fe495727e9838cdae14b3369e122e44e8c2b + checksum: 82f27b48f000be074064a854e16e768f9453e9b791d8c5f9316606c37f871b5b10f70544c1b218ab9784f00bd972bb77f868c5ab6752c275be2cd219c351f5a7 languageName: node linkType: hard -"jest-snapshot@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-snapshot@npm:29.2.1" +"jest-snapshot@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-snapshot@npm:29.3.1" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 @@ -12952,25 +13639,25 @@ __metadata: "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.2.1 - "@jest/transform": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/expect-utils": ^29.3.1 + "@jest/transform": ^29.3.1 + "@jest/types": ^29.3.1 "@types/babel__traverse": ^7.0.6 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^29.2.1 + expect: ^29.3.1 graceful-fs: ^4.2.9 - jest-diff: ^29.2.1 + jest-diff: ^29.3.1 jest-get-type: ^29.2.0 - jest-haste-map: ^29.2.1 - jest-matcher-utils: ^29.2.1 - jest-message-util: ^29.2.1 - jest-util: ^29.2.1 + jest-haste-map: ^29.3.1 + jest-matcher-utils: ^29.3.1 + jest-message-util: ^29.3.1 + jest-util: ^29.3.1 natural-compare: ^1.4.0 - pretty-format: ^29.2.1 + pretty-format: ^29.3.1 semver: ^7.3.5 - checksum: bb09952d13477f403d20c72803ea1b07e0ae7b7abb658bee0a03d3e16f75bb4c85502dbca1e3f5d8b3885063308b4a9acfdb0316339a16bfddd4907c7c79a662 + checksum: d7d0077935e78c353c828be78ccb092e12ba7622cb0577f21641fadd728ae63a7c1f4a0d8113bfb38db3453a64bfa232fb1cdeefe0e2b48c52ef4065b0ab75ae languageName: node linkType: hard @@ -12988,47 +13675,47 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-util@npm:29.2.1" +"jest-util@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-util@npm:29.3.1" dependencies: - "@jest/types": ^29.2.1 + "@jest/types": ^29.3.1 "@types/node": "*" chalk: ^4.0.0 ci-info: ^3.2.0 graceful-fs: ^4.2.9 picomatch: ^2.2.3 - checksum: 781bd14a65599d24b7449877020f4da32e8cb8fbc31c4e849c589ffde58f0eec27de9f690dba182e3ca369fe651c0bb9c307de29a0927d12777677ded56bafb8 + checksum: f67c60f062b94d21cb60e84b3b812d64b7bfa81fe980151de5c17a74eb666042d0134e2e756d099b7606a1fcf1d633824d2e58197d01d76dde1e2dc00dfcd413 languageName: node linkType: hard -"jest-validate@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-validate@npm:29.2.1" +"jest-validate@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-validate@npm:29.3.1" dependencies: - "@jest/types": ^29.2.1 + "@jest/types": ^29.3.1 camelcase: ^6.2.0 chalk: ^4.0.0 jest-get-type: ^29.2.0 leven: ^3.1.0 - pretty-format: ^29.2.1 - checksum: 33bf2671f9c72f542ac3847b62d96c6717dabab1738c172aef46de06c98ae4c78ed1972ca39c5b1360eaebe47460a39e1d04fd0f7e724241a648d33f3b4d0466 + pretty-format: ^29.3.1 + checksum: 92584f0b8ac284235f12b3b812ccbc43ef6dea080a3b98b1aa81adbe009e962d0aa6131f21c8157b30ac3d58f335961694238a93d553d1d1e02ab264c923778c languageName: node linkType: hard -"jest-watcher@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-watcher@npm:29.2.1" +"jest-watcher@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-watcher@npm:29.3.1" dependencies: - "@jest/test-result": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/test-result": ^29.3.1 + "@jest/types": ^29.3.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 - emittery: ^0.10.2 - jest-util: ^29.2.1 + emittery: ^0.13.1 + jest-util: ^29.3.1 string-length: ^4.0.1 - checksum: c14224af26d1f8c4664d9731d28bb21a6959ce32c4a4ed76b21a5447eca9d635963db5e7a8dbc30df46535b5e4bad589092f47c26bfb705ed203ce80061e744f + checksum: 60d189473486c73e9d540406a30189da5a3c67bfb0fb4ad4a83991c189135ef76d929ec99284ca5a505fe4ee9349ae3c99b54d2e00363e72837b46e77dec9642 languageName: node linkType: hard @@ -13042,26 +13729,26 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.2.1": - version: 29.2.1 - resolution: "jest-worker@npm:29.2.1" +"jest-worker@npm:^29.3.1": + version: 29.3.1 + resolution: "jest-worker@npm:29.3.1" dependencies: "@types/node": "*" - jest-util: ^29.2.1 + jest-util: ^29.3.1 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 10365612fae02412376e963de9f069d854deaf5aec8ff818ce49c299cd0373256a387a2da68db8225fb0f18483f2cc9072a52d1846881d44b756b1e36bc7f4ed + checksum: 38687fcbdc2b7ddc70bbb5dfc703ae095b46b3c7f206d62ecdf5f4d16e336178e217302138f3b906125576bb1cfe4cfe8d43681276fa5899d138ed9422099fb3 languageName: node linkType: hard -"jest@npm:^29.2.1": - version: 29.2.1 - resolution: "jest@npm:29.2.1" +"jest@npm:^29.3.1": + version: 29.3.1 + resolution: "jest@npm:29.3.1" dependencies: - "@jest/core": ^29.2.1 - "@jest/types": ^29.2.1 + "@jest/core": ^29.3.1 + "@jest/types": ^29.3.1 import-local: ^3.0.2 - jest-cli: ^29.2.1 + jest-cli: ^29.3.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -13069,7 +13756,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: b19bf0b490b08c99ec221f9eb69302e02b8f220b080bde22032200b7638896a7d7ae2e559455859b7158e43d07454690b638dd4be5a35d33f00cc973da2da9aa + checksum: 613f4ec657b14dd84c0056b2fef1468502927fd551bef0b19d4a91576a609678fb316c6a5b5fc6120dd30dd4ff4569070ffef3cb507db9bb0260b28ddaa18d7a languageName: node linkType: hard @@ -13243,6 +13930,15 @@ __metadata: languageName: node linkType: hard +"jsesc@npm:3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: a36d3ca40574a974d9c2063bf68c2b6141c20da8f2a36bd3279fc802563f35f0527a6c828801295bdfb2803952cf2cf387786c2c90ed564f88d5782475abfe3c + languageName: node + linkType: hard + "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -13336,7 +14032,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.3, json5@npm:^2.2.1": +"json5@npm:2.2.1, json5@npm:^2.1.3, json5@npm:^2.2.1": version: 2.2.1 resolution: "json5@npm:2.2.1" bin: @@ -13690,6 +14386,13 @@ __metadata: languageName: node linkType: hard +"lodash.isfunction@npm:^3.0.9": + version: 3.0.9 + resolution: "lodash.isfunction@npm:3.0.9" + checksum: 99e54c34b1e8a9ba75c034deb39cedbd2aca7af685815e67a2a8ec4f73ec9748cda6ebee5a07d7de4b938e90d421fd280e9c385cc190f903ac217ac8aff30314 + languageName: node + linkType: hard + "lodash.ismatch@npm:^4.4.0": version: 4.4.0 resolution: "lodash.ismatch@npm:4.4.0" @@ -13697,6 +14400,20 @@ __metadata: languageName: node linkType: hard +"lodash.isplainobject@npm:^4.0.6": + version: 4.0.6 + resolution: "lodash.isplainobject@npm:4.0.6" + checksum: 29c6351f281e0d9a1d58f1a4c8f4400924b4c79f18dfc4613624d7d54784df07efaff97c1ff2659f3e085ecf4fff493300adc4837553104cef2634110b0d5337 + languageName: node + linkType: hard + +"lodash.kebabcase@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.kebabcase@npm:4.1.1" + checksum: 5a6c59161914e1bae23438a298c7433e83d935e0f59853fa862e691164696bc07f6dfa4c313d499fbf41ba8d53314e9850416502376705a357d24ee6ca33af78 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -13704,6 +14421,13 @@ __metadata: languageName: node linkType: hard +"lodash.mergewith@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.mergewith@npm:4.6.2" + checksum: a6db2a9339752411f21b956908c404ec1e088e783a65c8b29e30ae5b3b6384f82517662d6f425cc97c2070b546cc2c7daaa8d33f78db7b6e9be06cd834abdeb8 + languageName: node + linkType: hard + "lodash.omit@npm:^4.5.0": version: 4.5.0 resolution: "lodash.omit@npm:4.5.0" @@ -13739,6 +14463,20 @@ __metadata: languageName: node linkType: hard +"lodash.startcase@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.startcase@npm:4.4.0" + checksum: c03a4a784aca653845fe09d0ef67c902b6e49288dc45f542a4ab345a9c406a6dc194c774423fa313ee7b06283950301c1221dd2a1d8ecb2dac8dfbb9ed5606b5 + languageName: node + linkType: hard + +"lodash.uniq@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.uniq@npm:4.5.0" + checksum: a4779b57a8d0f3c441af13d9afe7ecff22dd1b8ce1129849f71d9bbc8e8ee4e46dfb4b7c28f7ad3d67481edd6e51126e4e2a6ee276e25906d10f7140187c392d + languageName: node + linkType: hard + "lodash.uniqwith@npm:^4.5.0": version: 4.5.0 resolution: "lodash.uniqwith@npm:4.5.0" @@ -13746,7 +14484,14 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.21, lodash@npm:~4.17.15": +"lodash.upperfirst@npm:^4.3.1": + version: 4.3.1 + resolution: "lodash.upperfirst@npm:4.3.1" + checksum: cadec6955900afe1928cc60cdc4923a79c2ef991e42665419cc81630ed9b4f952a1093b222e0141ab31cbc4dba549f97ec28ff67929d71e01861c97188a5fa83 + languageName: node + linkType: hard + +"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.21, lodash@npm:~4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -14309,12 +15054,12 @@ __metadata: languageName: node linkType: hard -"meilisearch@npm:^0.28.0": - version: 0.28.0 - resolution: "meilisearch@npm:0.28.0" +"meilisearch@npm:^0.29.1": + version: 0.29.1 + resolution: "meilisearch@npm:0.29.1" dependencies: cross-fetch: ^3.1.5 - checksum: f83758249c15e13b0b88b1a491980d8d7a1c52ff0353c9bbffe3e0f42f1decf7c5de87f51d5b7850f39e4e526684677c9c2f2975f07070fb2c376ce1be70d069 + checksum: fb5b5a15541a3715bc3d5f6ec16aaad55037f3f182ce6fea40d90592f85c5d47a08a99d1447f08989cf14dc00b90705916689a52889d98093a3a0bcc90714028 languageName: node linkType: hard @@ -14919,7 +15664,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -15201,9 +15946,9 @@ __metadata: languageName: node linkType: hard -"next-mdx-remote@npm:^4.1.0": - version: 4.1.0 - resolution: "next-mdx-remote@npm:4.1.0" +"next-mdx-remote@npm:^4.2.0": + version: 4.2.0 + resolution: "next-mdx-remote@npm:4.2.0" dependencies: "@mdx-js/mdx": ^2.0.0 "@mdx-js/react": ^2.0.0 @@ -15212,7 +15957,7 @@ __metadata: peerDependencies: react: ">=16.x <=18.x" react-dom: ">=16.x <=18.x" - checksum: 17a5b41ee47d90bf48cdc13850e635ea419cd281231f84cf0d66ed149ce416f82a5999d7e6eab59a8ceb1559aaf76e4c1d90ccb28a03645f3e52a2e717d7e678 + checksum: 06fc3787187bbe359930ee7f8aca5f12aa979e7a2e6773430bf7ed304506dc011550c7f34606dca0058bc37cd0ce98a51d016b22a211f3fbec0e9ea78b8d436e languageName: node linkType: hard @@ -15239,24 +15984,24 @@ __metadata: languageName: node linkType: hard -"next@npm:^12.3.1": - version: 12.3.1 - resolution: "next@npm:12.3.1" - dependencies: - "@next/env": 12.3.1 - "@next/swc-android-arm-eabi": 12.3.1 - "@next/swc-android-arm64": 12.3.1 - "@next/swc-darwin-arm64": 12.3.1 - "@next/swc-darwin-x64": 12.3.1 - "@next/swc-freebsd-x64": 12.3.1 - "@next/swc-linux-arm-gnueabihf": 12.3.1 - "@next/swc-linux-arm64-gnu": 12.3.1 - "@next/swc-linux-arm64-musl": 12.3.1 - "@next/swc-linux-x64-gnu": 12.3.1 - "@next/swc-linux-x64-musl": 12.3.1 - "@next/swc-win32-arm64-msvc": 12.3.1 - "@next/swc-win32-ia32-msvc": 12.3.1 - "@next/swc-win32-x64-msvc": 12.3.1 +"next@npm:^12.3.4": + version: 12.3.4 + resolution: "next@npm:12.3.4" + dependencies: + "@next/env": 12.3.4 + "@next/swc-android-arm-eabi": 12.3.4 + "@next/swc-android-arm64": 12.3.4 + "@next/swc-darwin-arm64": 12.3.4 + "@next/swc-darwin-x64": 12.3.4 + "@next/swc-freebsd-x64": 12.3.4 + "@next/swc-linux-arm-gnueabihf": 12.3.4 + "@next/swc-linux-arm64-gnu": 12.3.4 + "@next/swc-linux-arm64-musl": 12.3.4 + "@next/swc-linux-x64-gnu": 12.3.4 + "@next/swc-linux-x64-musl": 12.3.4 + "@next/swc-win32-arm64-msvc": 12.3.4 + "@next/swc-win32-ia32-msvc": 12.3.4 + "@next/swc-win32-x64-msvc": 12.3.4 "@swc/helpers": 0.4.11 caniuse-lite: ^1.0.30001406 postcss: 8.4.14 @@ -15304,7 +16049,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: ac78592379999650f596a945019b14827818879e792ab37876bc71443bd697510d9ea00881787918f1543e6c6c5588111aeecb10342c2166a344e10ccd6bbc3e + checksum: d96fc4f5bcd5a630d74111519f4820dcbd75dddf16c6d00d2167bd3cb8d74965d46d83c8e5ec301bf999013c7d96f1bfff9424f0221317d68b594c4d01f5825e languageName: node linkType: hard @@ -15655,6 +16400,16 @@ __metadata: languageName: node linkType: hard +"object-is@npm:^1.1.5": + version: 1.1.5 + resolution: "object-is@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -15681,25 +16436,25 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.5": - version: 1.1.5 - resolution: "object.entries@npm:1.1.5" +"object.entries@npm:^1.1.6": + version: 1.1.6 + resolution: "object.entries@npm:1.1.6" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: d658696f74fd222060d8428d2a9fda2ce736b700cb06f6bdf4a16a1892d145afb746f453502b2fa55d1dca8ead6f14ddbcf66c545df45adadea757a6c4cd86c7 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 0f8c47517e6a9a980241eafe3b73de11e59511883173c2b93d67424a008e47e11b77c80e431ad1d8a806f6108b225a1cab9223e53e555776c612a24297117d28 languageName: node linkType: hard -"object.fromentries@npm:^2.0.5": - version: 2.0.5 - resolution: "object.fromentries@npm:2.0.5" +"object.fromentries@npm:^2.0.6": + version: 2.0.6 + resolution: "object.fromentries@npm:2.0.6" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: 61a0b565ded97b76df9e30b569729866e1824cce902f98e90bb106e84f378aea20163366f66dc75c9000e2aad2ed0caf65c6f530cb2abc4c0c0f6c982102db4b + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 453c6d694180c0c30df451b60eaf27a5b9bca3fb43c37908fd2b78af895803dc631242bcf05582173afa40d8d0e9c96e16e8874b39471aa53f3ac1f98a085d85 languageName: node linkType: hard @@ -15715,13 +16470,13 @@ __metadata: languageName: node linkType: hard -"object.hasown@npm:^1.1.1": - version: 1.1.1 - resolution: "object.hasown@npm:1.1.1" +"object.hasown@npm:^1.1.2": + version: 1.1.2 + resolution: "object.hasown@npm:1.1.2" dependencies: define-properties: ^1.1.4 - es-abstract: ^1.19.5 - checksum: d8ed4907ce57f48b93e3b53c418fd6787bf226a51e8d698c91e39b78e80fe5b124cb6282f6a9d5be21cf9e2c7829ab10206dcc6112b7748860eefe641880c793 + es-abstract: ^1.20.4 + checksum: b936572536db0cdf38eb30afd2f1026a8b6f2cc5d2c4497c9d9bbb01eaf3e980dead4fd07580cfdd098e6383e5a9db8212d3ea0c6bdd2b5e68c60aa7e3b45566 languageName: node linkType: hard @@ -15736,6 +16491,17 @@ __metadata: languageName: node linkType: hard +"object.values@npm:^1.1.6": + version: 1.1.6 + resolution: "object.values@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e + languageName: node + linkType: hard + "ohmyfetch@npm:^0.4.20": version: 0.4.20 resolution: "ohmyfetch@npm:0.4.20" @@ -16336,6 +17102,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.18": + version: 8.4.19 + resolution: "postcss@npm:8.4.19" + dependencies: + nanoid: ^3.3.4 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: 62782723a385f92b7525f66d29614624de7c5643855423db3a5efd9287e677650300192749adddbbb6734cea9b1d5f5fd4f6ea00ca3f9a95dbbb88f835f5ca64 + languageName: node + linkType: hard + "prebuild-install@npm:^7.1.1": version: 7.1.1 resolution: "prebuild-install@npm:7.1.1" @@ -16391,27 +17168,15 @@ __metadata: languageName: node linkType: hard -"prettier-plugin-astro@npm:^0.5.3": - version: 0.5.5 - resolution: "prettier-plugin-astro@npm:0.5.5" - dependencies: - "@astrojs/compiler": ^0.23.4 - prettier: ^2.7.1 - sass-formatter: ^0.7.5 - synckit: ^0.7.0 - checksum: b0e527645158c97c2726aaf532e920ff4a1b98fe9cd594612e2c9c399f64eaa395255ec4371b2d0a527e5dc80af93b214adbcfe2a306e622878c35e128b6a761 - languageName: node - linkType: hard - -"prettier-plugin-astro@npm:^0.6.0": - version: 0.6.0 - resolution: "prettier-plugin-astro@npm:0.6.0" +"prettier-plugin-astro@npm:^0.7.0": + version: 0.7.0 + resolution: "prettier-plugin-astro@npm:0.7.0" dependencies: - "@astrojs/compiler": 0.27.2 + "@astrojs/compiler": ^0.29.3 prettier: ^2.7.1 sass-formatter: ^0.7.5 synckit: ^0.8.4 - checksum: a2632b625e7fa048f6ddb522e0f2a20ad20b9215c83286b9450ee94271fd628747ea0ffd812dd626102a7d80599a549d2f18447ef481bf64140c93e9e649ca7c + checksum: 589c17bbc809354a062ac0fbdc9cfe869232a689ef3febb991ddfd0b60c553e3a90a2c15cc2510a6014c1ed447a8b0af7c30f525819e2b846644e342c67516b9 languageName: node linkType: hard @@ -16474,14 +17239,14 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.2.1": - version: 29.2.1 - resolution: "pretty-format@npm:29.2.1" +"pretty-format@npm:^29.3.1": + version: 29.3.1 + resolution: "pretty-format@npm:29.3.1" dependencies: "@jest/schemas": ^29.0.0 ansi-styles: ^5.0.0 react-is: ^18.0.0 - checksum: d192cbd3dee72e9b60764629d1f098d60fddc3fc9435f44774a01dd1c5794f36a81fa6a7377a527f994317950d8fc6c5bf9c9915387c5d32f107525996e32a1c + checksum: 9917a0bb859cd7a24a343363f70d5222402c86d10eb45bcc2f77b23a4e67586257390e959061aec22762a782fe6bafb59bf34eb94527bc2e5d211afdb287eb4e languageName: node linkType: hard @@ -16672,7 +17437,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.11.0, qs@npm:^6.10.3, qs@npm:^6.4.0": +"qs@npm:6.11.0, qs@npm:^6.11.0, qs@npm:^6.4.0": version: 6.11.0 resolution: "qs@npm:6.11.0" dependencies: @@ -17218,7 +17983,7 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.4.1, regexp.prototype.flags@npm:^1.4.3": +"regexp.prototype.flags@npm:^1.4.3": version: 1.4.3 resolution: "regexp.prototype.flags@npm:1.4.3" dependencies: @@ -17275,7 +18040,7 @@ __metadata: languageName: node linkType: hard -"regjsparser@npm:^0.9.1": +"regjsparser@npm:0.9.1, regjsparser@npm:^0.9.1": version: 0.9.1 resolution: "regjsparser@npm:0.9.1" dependencies: @@ -17301,14 +18066,14 @@ __metadata: languageName: node linkType: hard -"rehype-ignore@npm:^1.0.1": - version: 1.0.1 - resolution: "rehype-ignore@npm:1.0.1" +"rehype-ignore@npm:^1.0.3": + version: 1.0.3 + resolution: "rehype-ignore@npm:1.0.3" dependencies: hast-util-select: ~5.0.1 unified: ~10.1.2 unist-util-visit: ~4.1.0 - checksum: b7d48742c9f98ab25b4d3b8c329b0761767ed0678d756625315712879c7aae27120cdb34328b84329bebb79914cc4c7969e48deeaf6d0e001c7794e7f4e22ddd + checksum: d886ec276f97e838ed34f55a8e8f5d5a4c8106dcd35d37e84aa1bb625a8f7fc8e9776ecf4d36fda2af9853a3dab11dbb4d28362d84aea739c4b3d2789280f2e0 languageName: node linkType: hard @@ -17324,14 +18089,14 @@ __metadata: languageName: node linkType: hard -"rehype-pretty-code@npm:^0.4.0": - version: 0.4.0 - resolution: "rehype-pretty-code@npm:0.4.0" +"rehype-pretty-code@npm:^0.5.0": + version: 0.5.0 + resolution: "rehype-pretty-code@npm:0.5.0" dependencies: parse-numeric-range: ^1.3.0 peerDependencies: shiki: "*" - checksum: 1d6f45b06cac20958a03d16c27b09ccd5b3f89fe4bc7047052ee9b3005e464ec69b3efafe8382f01b7e5d1e24f1262963ce1a7e26f00e770b49945b2c20a200e + checksum: 792d153960b6cd54e802e1d54353b6c55e40f784ac443c52d35a33f529e45595ae41df67825217ebff83828da8fff7c014a74df96fc2fad720fdd0f5c91de8b6 languageName: node linkType: hard @@ -17346,18 +18111,18 @@ __metadata: languageName: node linkType: hard -"rehype-slug@npm:^5.0.1": - version: 5.0.1 - resolution: "rehype-slug@npm:5.0.1" +"rehype-slug@npm:^5.1.0": + version: 5.1.0 + resolution: "rehype-slug@npm:5.1.0" dependencies: "@types/hast": ^2.0.0 - github-slugger: ^1.1.1 + github-slugger: ^2.0.0 hast-util-has-property: ^2.0.0 hast-util-heading-rank: ^2.0.0 hast-util-to-string: ^2.0.0 unified: ^10.0.0 unist-util-visit: ^4.0.0 - checksum: 33e6e9419fc8ac54d5bdac736fe788e3b1ae71b10a8bf1ea4be4af17c504afda9ae0438ce827a13cde0fe334725e9624d9fbde2f5d9fc061378ec5f0bb4c247d + checksum: 2a7c17fd74d83040e2f2ed2085b0a3274c19feb2c29eba6553fe007ff887c31f21b8aa6e07eaf59f4de610a5293c6339c59fafa8e231c43949a2f136e6ab6187 languageName: node linkType: hard @@ -17811,7 +18576,7 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^2.74.1": +"rollup@npm:^2.79.1": version: 2.79.1 resolution: "rollup@npm:2.79.1" dependencies: @@ -17825,6 +18590,20 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^3.2.5": + version: 3.4.0 + resolution: "rollup@npm:3.4.0" + dependencies: + fsevents: ~2.3.2 + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 6c6cd76a89b44d5798d1e5e15bc9fe3e33177e0c49cc94cf4460252826cc69fec8df9c3c0415578d2b8e173fe8e0c799e943d311a8d0aacc6e57860f058fbbf6 + languageName: node + linkType: hard + "rollup@npm:~2.78.0": version: 2.78.1 resolution: "rollup@npm:2.78.1" @@ -17958,17 +18737,18 @@ __metadata: languageName: node linkType: hard -"satori@npm:0.0.42": - version: 0.0.42 - resolution: "satori@npm:0.0.42" +"satori@npm:0.0.44": + version: 0.0.44 + resolution: "satori@npm:0.0.44" dependencies: "@shuding/opentype.js": 1.4.0-beta.0 css-background-parser: ^0.1.0 css-box-shadow: 1.0.0-3 css-to-react-native: ^3.0.0 + emoji-regex: ^10.2.1 postcss-value-parser: ^4.2.0 yoga-layout-prebuilt: ^1.10.0 - checksum: 31287c9f9991f9a61de2d67e2d777db9188e6bea3eee02bd6d6f3018d27b200831183afb4e4113659275370b80b281667dc61f87a8e3ea50d6729479b9b6f863 + checksum: a6087d9c615d1239c7d0864bac61c21b5fab7c78260127e72de60368d26aaaff7aeb90a7c6f8a632eabc43f05668e28ba19345ceff82d534b7a94b309876315d languageName: node linkType: hard @@ -18136,20 +18916,20 @@ __metadata: languageName: node linkType: hard -"sharp@npm:0.31.1, sharp@npm:^0.31.1": - version: 0.31.1 - resolution: "sharp@npm:0.31.1" +"sharp@npm:0.31.2, sharp@npm:^0.31.2": + version: 0.31.2 + resolution: "sharp@npm:0.31.2" dependencies: color: ^4.2.3 detect-libc: ^2.0.1 node-addon-api: ^5.0.0 node-gyp: latest prebuild-install: ^7.1.1 - semver: ^7.3.7 + semver: ^7.3.8 simple-get: ^4.0.1 tar-fs: ^2.1.1 tunnel-agent: ^0.6.0 - checksum: 42d00c9c6c61e5cf752c29583253782b3d821ee15fc2648c1f59892b94e9bc170a47ee9d138aa0a61c1c2ee9b7573ee54444c857fff887908701c4208710480d + checksum: 076717b7a073ea47bb522ff2931b74b6608daeb6f7ae334e4848d47fdf4d23bcb18cd49044fd5fb27ef27a1a4aa87d141894d67d1c4bb15a6e2e63cf4dbe329e languageName: node linkType: hard @@ -18549,13 +19329,6 @@ __metadata: languageName: node linkType: hard -"stable@npm:^0.1.8": - version: 0.1.8 - resolution: "stable@npm:0.1.8" - checksum: 2ff482bb100285d16dd75cd8f7c60ab652570e8952c0bfa91828a2b5f646a0ff533f14596ea4eabd48bb7f4aeea408dce8f8515812b975d958a4cc4fa6b9dfeb - languageName: node - linkType: hard - "stack-generator@npm:^2.0.5": version: 2.0.10 resolution: "stack-generator@npm:2.0.10" @@ -18703,19 +19476,19 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.7": - version: 4.0.7 - resolution: "string.prototype.matchall@npm:4.0.7" +"string.prototype.matchall@npm:^4.0.8": + version: 4.0.8 + resolution: "string.prototype.matchall@npm:4.0.8" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - get-intrinsic: ^1.1.1 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 has-symbols: ^1.0.3 internal-slot: ^1.0.3 - regexp.prototype.flags: ^1.4.1 + regexp.prototype.flags: ^1.4.3 side-channel: ^1.0.4 - checksum: fc09f3ccbfb325de0472bcc87a6be0598a7499e0b4a31db5789676155b15754a4cc4bb83924f15fc9ed48934dac7366ee52c8b9bd160bed6fd072c93b489e75c + checksum: 952da3a818de42ad1c10b576140a5e05b4de7b34b8d9dbf00c3ac8c1293e9c0f533613a39c5cda53e0a8221f2e710bc2150e730b1c2278d60004a8a35726efb6 languageName: node linkType: hard @@ -18936,9 +19709,9 @@ __metadata: languageName: node linkType: hard -"superagent@npm:^8.0.0": - version: 8.0.0 - resolution: "superagent@npm:8.0.0" +"superagent@npm:^8.0.3": + version: 8.0.3 + resolution: "superagent@npm:8.0.3" dependencies: component-emitter: ^1.3.0 cookiejar: ^2.1.3 @@ -18948,20 +19721,19 @@ __metadata: formidable: ^2.0.1 methods: ^1.1.2 mime: 2.6.0 - qs: ^6.10.3 - readable-stream: ^3.6.0 - semver: ^7.3.7 - checksum: 14343e59327eafd85fa230acb876017079d5efcecc72a56566abc0f965220bb460af2e070dddecd9e2856410b2d2b318d81d9cc1d342aa5922da93c29a295dd7 + qs: ^6.11.0 + semver: ^7.3.8 + checksum: 5329310f3f9fe1217ccd515a2f06dd99c97d08355ae5e4c387349c9bffdd52115fe02ba6b0fb37199f05977522778e1350d0a68caef1363c8079aa49af8ce6c8 languageName: node linkType: hard -"supertest@npm:^6.3.0": - version: 6.3.0 - resolution: "supertest@npm:6.3.0" +"supertest@npm:^6.3.1": + version: 6.3.1 + resolution: "supertest@npm:6.3.1" dependencies: methods: ^1.1.2 - superagent: ^8.0.0 - checksum: 95062161af3a16669231dcde0375f89a8c57339ca8e5820b483959dd77c88a89c9d63241cad000f6178822666ae818fd2e158b44a10d865366809e173737720e + superagent: ^8.0.3 + checksum: 024d10e305bbaf926efff3d2dc68d339ae8d8650917a82ad121886c4a3a70707af92fdd1a1fd139054235d65ddab842ec54d48bb7161f6969bf98ef29eea3740 languageName: node linkType: hard @@ -19025,20 +19797,19 @@ __metadata: languageName: node linkType: hard -"svgo@npm:2.8.0": - version: 2.8.0 - resolution: "svgo@npm:2.8.0" +"svgo@npm:3.0.2": + version: 3.0.2 + resolution: "svgo@npm:3.0.2" dependencies: "@trysound/sax": 0.2.0 commander: ^7.2.0 - css-select: ^4.1.3 - css-tree: ^1.1.3 - csso: ^4.2.0 + css-select: ^5.1.0 + css-tree: ^2.2.1 + csso: ^5.0.5 picocolors: ^1.0.0 - stable: ^0.1.8 bin: svgo: bin/svgo - checksum: b92f71a8541468ffd0b81b8cdb36b1e242eea320bf3c1a9b2c8809945853e9d8c80c19744267eb91cabf06ae9d5fff3592d677df85a31be4ed59ff78534fa420 + checksum: 381ba14aa782e71ab7033227634a3041c11fa3e2769aeaf0df43a08a615de61925108e34f55af6e7c5146f4a3109e78deabb4fa9d687e36d45d1f848b4e23d17 languageName: node linkType: hard @@ -19071,16 +19842,6 @@ __metadata: languageName: node linkType: hard -"synckit@npm:^0.7.0": - version: 0.7.3 - resolution: "synckit@npm:0.7.3" - dependencies: - "@pkgr/utils": ^2.3.0 - tslib: ^2.4.0 - checksum: 15b1841c16e80e84e4eb7b43680f37ad94377a032cd9f5f6fd1c9cbd32bb1b7d1cf1c32111821d4f1b5477dffb599aeda7f0c1e70c7333fbedd80951d41bf5e8 - languageName: node - linkType: hard - "synckit@npm:^0.8.0, synckit@npm:^0.8.4": version: 0.8.4 resolution: "synckit@npm:0.8.4" @@ -19339,10 +20100,10 @@ __metadata: languageName: node linkType: hard -"tinybench@npm:^2.3.0": - version: 2.3.0 - resolution: "tinybench@npm:2.3.0" - checksum: 6556e42b3b7700795caca07f5bbc2c78e33261ffe5db4c434d54bcfa1cd5c64863357c5b7fff53e031ee236d098313dac78938e12f8f1a9b47f1d7ad55417ce8 +"tinybench@npm:^2.3.1": + version: 2.3.1 + resolution: "tinybench@npm:2.3.1" + checksum: 74d45fa546d964a8123f98847fc59550945ed7f0d3e5a4ce0f9596d836b51c1d340c2ae0277a8023c15dc9ea3d7cb948a79173bfc46338c9b367c6323ea1eaf3 languageName: node linkType: hard @@ -19539,10 +20300,10 @@ __metadata: languageName: node linkType: hard -"ts-mixer@npm:^6.0.1": - version: 6.0.1 - resolution: "ts-mixer@npm:6.0.1" - checksum: 7050f6e85a24155d18cecdcc0a098d1038991cc498317fcffa9d7a8654c776d417fb97e65de1ce8e7ed54ef4814abd8057d0efb9c3b24e9cc78ac3c0f48bbf53 +"ts-mixer@npm:^6.0.2": + version: 6.0.2 + resolution: "ts-mixer@npm:6.0.2" + checksum: cbe9935886fab201f2265ebde8e7e4147a3147ba6b6b4701ed5b92fd52729cda340f45f80f486131d203ed25c8c896a2a3623b2c33cd14314bd7ba961e97ee2e languageName: node linkType: hard @@ -19686,6 +20447,13 @@ __metadata: languageName: node linkType: hard +"tslib@npm:^2.4.1": + version: 2.4.1 + resolution: "tslib@npm:2.4.1" + checksum: 19480d6e0313292bd6505d4efe096a6b31c70e21cf08b5febf4da62e95c265c8f571f7b36fcc3d1a17e068032f59c269fab3459d6cd3ed6949eafecf64315fca + languageName: node + linkType: hard + "tslint@npm:5.14.0": version: 5.14.0 resolution: "tslint@npm:5.14.0" @@ -19747,11 +20515,11 @@ __metadata: languageName: node linkType: hard -"tsup@npm:^6.3.0": - version: 6.3.0 - resolution: "tsup@npm:6.3.0" +"tsup@npm:^6.5.0": + version: 6.5.0 + resolution: "tsup@npm:6.5.0" dependencies: - bundle-require: ^3.1.0 + bundle-require: ^3.1.2 cac: ^6.7.12 chokidar: ^3.5.1 debug: ^4.3.1 @@ -19761,7 +20529,7 @@ __metadata: joycon: ^3.0.1 postcss-load-config: ^3.0.1 resolve-from: ^5.0.0 - rollup: ^2.74.1 + rollup: ^3.2.5 source-map: 0.8.0-beta.0 sucrase: ^3.20.3 tree-kill: ^1.2.2 @@ -19779,7 +20547,7 @@ __metadata: bin: tsup: dist/cli-default.js tsup-node: dist/cli-node.js - checksum: f1fccd555a77ff82b3b3d4ce28188f5703695af5e9d593a4edcfc3807cbebb5b04e619ad9ae0b0c92830cbbcbf6d76356365a8986ebe82d7389151a4f66a6c49 + checksum: 625082f2a2afc63024ddd54f5aca28372a7b4ec4f7c402f8aacefd0c56d8da7250665dbb4097d40edcf2cbd4168d96ed4593ecb903ab36e625628f375980e266 languageName: node linkType: hard @@ -19837,58 +20605,58 @@ __metadata: languageName: node linkType: hard -"turbo-darwin-64@npm:1.5.6": - version: 1.5.6 - resolution: "turbo-darwin-64@npm:1.5.6" +"turbo-darwin-64@npm:1.6.3": + version: 1.6.3 + resolution: "turbo-darwin-64@npm:1.6.3" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"turbo-darwin-arm64@npm:1.5.6": - version: 1.5.6 - resolution: "turbo-darwin-arm64@npm:1.5.6" +"turbo-darwin-arm64@npm:1.6.3": + version: 1.6.3 + resolution: "turbo-darwin-arm64@npm:1.6.3" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"turbo-linux-64@npm:1.5.6": - version: 1.5.6 - resolution: "turbo-linux-64@npm:1.5.6" +"turbo-linux-64@npm:1.6.3": + version: 1.6.3 + resolution: "turbo-linux-64@npm:1.6.3" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"turbo-linux-arm64@npm:1.5.6": - version: 1.5.6 - resolution: "turbo-linux-arm64@npm:1.5.6" +"turbo-linux-arm64@npm:1.6.3": + version: 1.6.3 + resolution: "turbo-linux-arm64@npm:1.6.3" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"turbo-windows-64@npm:1.5.6": - version: 1.5.6 - resolution: "turbo-windows-64@npm:1.5.6" +"turbo-windows-64@npm:1.6.3": + version: 1.6.3 + resolution: "turbo-windows-64@npm:1.6.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"turbo-windows-arm64@npm:1.5.6": - version: 1.5.6 - resolution: "turbo-windows-arm64@npm:1.5.6" +"turbo-windows-arm64@npm:1.6.3": + version: 1.6.3 + resolution: "turbo-windows-arm64@npm:1.6.3" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"turbo@npm:^1.5.6": - version: 1.5.6 - resolution: "turbo@npm:1.5.6" +"turbo@npm:^1.6.3": + version: 1.6.3 + resolution: "turbo@npm:1.6.3" dependencies: - turbo-darwin-64: 1.5.6 - turbo-darwin-arm64: 1.5.6 - turbo-linux-64: 1.5.6 - turbo-linux-arm64: 1.5.6 - turbo-windows-64: 1.5.6 - turbo-windows-arm64: 1.5.6 + turbo-darwin-64: 1.6.3 + turbo-darwin-arm64: 1.6.3 + turbo-linux-64: 1.6.3 + turbo-linux-arm64: 1.6.3 + turbo-windows-64: 1.6.3 + turbo-windows-arm64: 1.6.3 dependenciesMeta: turbo-darwin-64: optional: true @@ -19904,7 +20672,7 @@ __metadata: optional: true bin: turbo: bin/turbo - checksum: 5a243f0113fb886c90e8d7b4e94b590acef9813b1cfb13330b3d62c2b09e89647b5aabbe3ecf80d5fe3d8c1ee74ad4eb81f25de30ef62eb1c8a15c23383bd943 + checksum: 35195f4b7623014c25ba152c11a8cb23e51cbd75dc9266d0656692665f85b28faf3496dea8cecacf52795a917410668124186ffbdcf276325ccc3e11df9e9623 languageName: node linkType: hard @@ -20013,19 +20781,19 @@ __metadata: languageName: node linkType: hard -"typedoc@npm:^0.23.17": - version: 0.23.17 - resolution: "typedoc@npm:0.23.17" +"typedoc@npm:^0.23.21": + version: 0.23.21 + resolution: "typedoc@npm:0.23.21" dependencies: lunr: ^2.3.9 marked: ^4.0.19 minimatch: ^5.1.0 shiki: ^0.11.1 peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x bin: typedoc: bin/typedoc - checksum: 9bfcfa762205f42645a5c545cf75399346663209e1f91f3e630880a6f48a5676a2efab23305df7aca69c6fe19bd4b1c42470bf39b95a369811f6eb4d5a8549e8 + checksum: 931520b21ae25ba8ea86111ea7c66f474468bb83cbe1d04c0ea19490f130ea44ba58b7ee4d12f7f02368cfe053ed1fa291c8843c466c8af383ef956de177360d languageName: node linkType: hard @@ -20049,6 +20817,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^4.9.3": + version: 4.9.3 + resolution: "typescript@npm:4.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 17b8f816050b412403e38d48eef0e893deb6be522d6dc7caf105e54a72e34daf6835c447735fd2b28b66784e72bfbf87f627abb4818a8e43d1fa8106396128dc + languageName: node + linkType: hard + "typescript@patch:typescript@*#~builtin, typescript@patch:typescript@^4.6.4#~builtin, typescript@patch:typescript@^4.8.4#~builtin, typescript@patch:typescript@~4.8.4#~builtin": version: 4.8.4 resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin::version=4.8.4&hash=701156" @@ -20069,6 +20847,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@^4.9.3#~builtin": + version: 4.9.3 + resolution: "typescript@patch:typescript@npm%3A4.9.3#~builtin::version=4.9.3&hash=701156" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: ef65c22622d864497d0a0c5db693523329b3284c15fe632e93ad9aa059e8dc38ef3bd767d6f26b1e5ecf9446f49bd0f6c4e5714a2eeaf352805dc002479843d1 + languageName: node + linkType: hard + "typical@npm:^2.4.2, typical@npm:^2.6.0, typical@npm:^2.6.1": version: 2.6.1 resolution: "typical@npm:2.6.1" @@ -20152,6 +20940,15 @@ __metadata: languageName: node linkType: hard +"undici@npm:^5.12.0": + version: 5.12.0 + resolution: "undici@npm:5.12.0" + dependencies: + busboy: ^1.6.0 + checksum: fbc227704943c05aa3dc1630695e10309c17d0a535678594d136db107c50593248e9ace70e1ab77496a6c837bf14aa2ab3c501a7a6c45fb6277dbf0846e15ffe + languageName: node + linkType: hard + "unherit@npm:^3.0.0": version: 3.0.0 resolution: "unherit@npm:3.0.0" @@ -20424,33 +21221,33 @@ __metadata: languageName: node linkType: hard -"unocss@npm:^0.45.30": - version: 0.45.30 - resolution: "unocss@npm:0.45.30" - dependencies: - "@unocss/astro": 0.45.30 - "@unocss/cli": 0.45.30 - "@unocss/core": 0.45.30 - "@unocss/preset-attributify": 0.45.30 - "@unocss/preset-icons": 0.45.30 - "@unocss/preset-mini": 0.45.30 - "@unocss/preset-tagify": 0.45.30 - "@unocss/preset-typography": 0.45.30 - "@unocss/preset-uno": 0.45.30 - "@unocss/preset-web-fonts": 0.45.30 - "@unocss/preset-wind": 0.45.30 - "@unocss/reset": 0.45.30 - "@unocss/transformer-attributify-jsx": 0.45.30 - "@unocss/transformer-compile-class": 0.45.30 - "@unocss/transformer-directives": 0.45.30 - "@unocss/transformer-variant-group": 0.45.30 - "@unocss/vite": 0.45.30 +"unocss@npm:^0.46.5": + version: 0.46.5 + resolution: "unocss@npm:0.46.5" + dependencies: + "@unocss/astro": 0.46.5 + "@unocss/cli": 0.46.5 + "@unocss/core": 0.46.5 + "@unocss/preset-attributify": 0.46.5 + "@unocss/preset-icons": 0.46.5 + "@unocss/preset-mini": 0.46.5 + "@unocss/preset-tagify": 0.46.5 + "@unocss/preset-typography": 0.46.5 + "@unocss/preset-uno": 0.46.5 + "@unocss/preset-web-fonts": 0.46.5 + "@unocss/preset-wind": 0.46.5 + "@unocss/reset": 0.46.5 + "@unocss/transformer-attributify-jsx": 0.46.5 + "@unocss/transformer-compile-class": 0.46.5 + "@unocss/transformer-directives": 0.46.5 + "@unocss/transformer-variant-group": 0.46.5 + "@unocss/vite": 0.46.5 peerDependencies: - "@unocss/webpack": 0.45.30 + "@unocss/webpack": 0.46.5 peerDependenciesMeta: "@unocss/webpack": optional: true - checksum: 9c46d75f78fb4021bd4943ceca01f69986fdd5fa7ec1c0f6328ccb8a1f17670d04648a4319cb7a81f45581c56abb8ec800f1941d6a94039f39dd7c75760341c7 + checksum: 35d614b49d0402345444f3ccdb41c67b5c96ab0efa9bba1909c95515eed000f692e6a03e0786c7af715cdabce7df9335d41727dac91c568fa9a7b6308359eb4c languageName: node linkType: hard @@ -20668,25 +21465,26 @@ __metadata: languageName: node linkType: hard -"vercel@npm:^28.4.12": - version: 28.4.12 - resolution: "vercel@npm:28.4.12" +"vercel@npm:^28.5.6": + version: 28.5.6 + resolution: "vercel@npm:28.5.6" dependencies: - "@vercel/build-utils": 5.5.5 - "@vercel/go": 2.2.13 - "@vercel/hydrogen": 0.0.26 - "@vercel/next": 3.2.6 - "@vercel/node": 2.5.26 - "@vercel/python": 3.1.22 - "@vercel/redwood": 1.0.31 - "@vercel/remix": 1.0.32 - "@vercel/ruby": 1.3.39 - "@vercel/static-build": 1.0.32 + "@vercel/build-utils": 5.5.9 + "@vercel/go": 2.2.17 + "@vercel/hydrogen": 0.0.31 + "@vercel/next": 3.2.13 + "@vercel/node": 2.6.4 + "@vercel/python": 3.1.27 + "@vercel/redwood": 1.0.37 + "@vercel/remix": 1.0.37 + "@vercel/ruby": 1.3.43 + "@vercel/static-build": 1.0.39 + json5: 2.2.1 update-notifier: 5.1.0 bin: vc: dist/index.js vercel: dist/index.js - checksum: fab0e2b954a1a739cb091a176739639fca6d9015f88e41b6298c676122299b7275c7159cdf36739ccac5a5c7dd7b5d0deb8881a48e58c6d2c2a1e2a5ae5c9c84 + checksum: ff0fef78d8b6d8884f3690046a30185a21081183969b9efb0a6e78780de0ccc692bcedb3061f30cea51b6b55c0b857286bf0d53f3048ea5ea5c15c206ddfca5b languageName: node linkType: hard @@ -20766,11 +21564,12 @@ __metadata: languageName: node linkType: hard -"vite-plugin-dts@npm:^1.6.6": - version: 1.6.6 - resolution: "vite-plugin-dts@npm:1.6.6" +"vite-plugin-dts@npm:^1.7.1": + version: 1.7.1 + resolution: "vite-plugin-dts@npm:1.7.1" dependencies: - "@microsoft/api-extractor": ^7.33.1 + "@microsoft/api-extractor": ^7.33.5 + "@rollup/pluginutils": ^5.0.2 "@rushstack/node-core-library": ^3.53.2 debug: ^4.3.4 fast-glob: ^3.2.12 @@ -20779,7 +21578,7 @@ __metadata: ts-morph: ^16.0.0 peerDependencies: vite: ">=2.9.0" - checksum: 718096a98c3fb8e3e793590fd215101dfa8fe7c18c8abe9f255314db6ae4d75ef71d0846bc8dc77a547657a1ccf5467da9dbd28c711dfec2003c6c556cfc379b + checksum: e2714a9e1727860cb217308b000d7306f98ba626998893a72d8b0e5db577d989457827033c76125a87491ace453325726da3795f17c3fea3e8af0d5e81820e89 languageName: node linkType: hard @@ -20797,7 +21596,7 @@ __metadata: languageName: node linkType: hard -"vite@npm:^3.0.0, vite@npm:^3.0.9, vite@npm:~3.1.3": +"vite@npm:^3.0.0, vite@npm:^3.0.9": version: 3.1.7 resolution: "vite@npm:3.1.7" dependencies: @@ -20829,50 +21628,71 @@ __metadata: languageName: node linkType: hard -"vite@npm:^3.1.8": - version: 3.1.8 - resolution: "vite@npm:3.1.8" +"vite@npm:^3.2.4, vite@npm:~3.2.4": + version: 3.2.4 + resolution: "vite@npm:3.2.4" dependencies: esbuild: ^0.15.9 fsevents: ~2.3.2 - postcss: ^8.4.16 + postcss: ^8.4.18 resolve: ^1.22.1 - rollup: ~2.78.0 + rollup: ^2.79.1 peerDependencies: + "@types/node": ">= 14" less: "*" sass: "*" stylus: "*" + sugarss: "*" terser: ^5.4.0 dependenciesMeta: fsevents: optional: true peerDependenciesMeta: + "@types/node": + optional: true less: optional: true sass: optional: true stylus: optional: true + sugarss: + optional: true terser: optional: true bin: vite: bin/vite.js - checksum: 982696ad134577dd9915c4c3548ad36ddcf5dc6d341058548a670a13d860e4cdaaf2b320a59221f178018df089d148b9980e9a344316bef12b698a1c1abc7390 + checksum: 0f3e8f89c15809bd6bd8dec54b04b7c9b87374314d00928035f9d70190b4b220e8206b5d77a1e4097a5019cebf7862df4fbc11fbbb35c4f75f359999123d2c25 + languageName: node + linkType: hard + +"vitefu@npm:^0.2.1": + version: 0.2.1 + resolution: "vitefu@npm:0.2.1" + peerDependencies: + vite: ^3.0.0 + peerDependenciesMeta: + vite: + optional: true + checksum: e604b88523cd157a3a20df23e66d7fb36d7751b8a97f171ada7b64120109be694a326827f57c86d6417dd160864ff6be338c1fde58fb6ca23efa345f6dc6ccc5 languageName: node linkType: hard -"vitest@npm:0.24.3, vitest@npm:^0.24.3": - version: 0.24.3 - resolution: "vitest@npm:0.24.3" +"vitest@npm:0.25.2, vitest@npm:^0.25.2": + version: 0.25.2 + resolution: "vitest@npm:0.25.2" dependencies: "@types/chai": ^4.3.3 "@types/chai-subset": ^1.3.3 "@types/node": "*" + acorn: ^8.8.0 + acorn-walk: ^8.2.0 chai: ^4.3.6 debug: ^4.3.4 local-pkg: ^0.4.2 + source-map: ^0.6.1 strip-literal: ^0.4.2 - tinybench: ^2.3.0 + tinybench: ^2.3.1 tinypool: ^0.3.0 tinyspy: ^1.0.2 vite: ^3.0.0 @@ -20895,7 +21715,7 @@ __metadata: optional: true bin: vitest: vitest.mjs - checksum: dd954f57396b81df466dd4346aa6c95709a1b3c2409d5526d3172fa34ec684f756a855f885778929a6b903a22b2517ff79d22f936fb3e4d7d54ff24e8e577459 + checksum: f41fe7c2c1fe8142ceb90f4d4bebca90c62615c168ff82ea5e797affb8cfd78a49c8900f6d9c552e0da1208961750b6cc705113ad99315e69afba5cd3fdef794 languageName: node linkType: hard @@ -21063,7 +21883,7 @@ __metadata: languageName: node linkType: hard -"web-streams-polyfill@npm:^3.0.3": +"web-streams-polyfill@npm:^3.0.3, web-streams-polyfill@npm:^3.2.1": version: 3.2.1 resolution: "web-streams-polyfill@npm:3.2.1" checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 @@ -21141,6 +21961,18 @@ __metadata: languageName: node linkType: hard +"which-collection@npm:^1.0.1": + version: 1.0.1 + resolution: "which-collection@npm:1.0.1" + dependencies: + is-map: ^2.0.1 + is-set: ^2.0.1 + is-weakmap: ^2.0.1 + is-weakset: ^2.0.1 + checksum: c815bbd163107ef9cb84f135e6f34453eaf4cca994e7ba85ddb0d27cea724c623fae2a473ceccfd5549c53cc65a5d82692de418166df3f858e1e5dc60818581c + languageName: node + linkType: hard + "which-module@npm:^2.0.0": version: 2.0.0 resolution: "which-module@npm:2.0.0" @@ -21165,6 +21997,20 @@ __metadata: languageName: node linkType: hard +"which-typed-array@npm:^1.1.8": + version: 1.1.9 + resolution: "which-typed-array@npm:1.1.9" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + is-typed-array: ^1.1.10 + checksum: fe0178ca44c57699ca2c0e657b64eaa8d2db2372a4e2851184f568f98c478ae3dc3fdb5f7e46c384487046b0cf9e23241423242b277e03e8ba3dabc7c84c98ef + languageName: node + linkType: hard + "which@npm:^1.2.8": version: 1.3.1 resolution: "which@npm:1.3.1" @@ -21300,9 +22146,9 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.9.0": - version: 8.9.0 - resolution: "ws@npm:8.9.0" +"ws@npm:^8.11.0": + version: 8.11.0 + resolution: "ws@npm:8.11.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ^5.0.2 @@ -21311,7 +22157,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 23aa0f021b2eb65c108ec4c3e08c0d81ba01f82b500432dfe327fd6be36079c1d81fdb0eac6464d2a0eb49904d34a9ab8c59619d673fa07b8346f83aeb0cbf12 + checksum: 316b33aba32f317cd217df66dbfc5b281a2f09ff36815de222bc859e3424d83766d9eb2bd4d667de658b6ab7be151f258318fb1da812416b30be13103e5b5c67 languageName: node linkType: hard