diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 31c7875b7886..29eadb2e05bd 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -38,10 +38,9 @@ jobs: uses: actions/setup-node@v3 with: node-version: 16 - cache: 'yarn' - name: Install dependencies - run: yarn --immutable + uses: ./packages/actions/src/yarnCache - name: Build dependencies run: yarn build @@ -81,10 +80,9 @@ jobs: uses: actions/setup-node@v3 with: node-version: 16 - cache: 'yarn' - name: Install dependencies - run: yarn --immutable + uses: ./packages/actions/src/yarnCache - name: Build actions run: yarn workspace @discordjs/actions build diff --git a/.github/workflows/npm-auto-deprecate.yml b/.github/workflows/npm-auto-deprecate.yml index 9774b2f259a4..c57e71e670b8 100644 --- a/.github/workflows/npm-auto-deprecate.yml +++ b/.github/workflows/npm-auto-deprecate.yml @@ -16,10 +16,9 @@ jobs: uses: actions/setup-node@v3 with: node-version: 16 - cache: 'yarn' - name: Install dependencies - run: yarn --immutable + uses: ./packages/actions/src/yarnCache - name: Deprecate versions run: 'yarn npm-deprecate --name "*dev*" --package @discordjs/brokers @discordjs/builders @discordjs/collection discord.js @discordjs/proxy @discordjs/rest @discordjs/util @discordjs/voice @discordjs/ws' diff --git a/.github/workflows/publish-dev.yml b/.github/workflows/publish-dev.yml index ea51cee9baad..2630fe615d40 100644 --- a/.github/workflows/publish-dev.yml +++ b/.github/workflows/publish-dev.yml @@ -42,10 +42,9 @@ jobs: with: node-version: 16 registry-url: https://registry.npmjs.org/ - cache: 'yarn' - name: Install dependencies - run: yarn --immutable + uses: ./packages/actions/src/yarnCache - name: Build dependencies run: yarn build diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 901c900453cd..371758b99e0b 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -20,10 +20,9 @@ jobs: uses: actions/setup-node@v3 with: node-version: 16 - cache: 'yarn' - name: Install dependencies - run: yarn install --immutable + uses: ./packages/actions/src/yarnCache - name: Build dependencies run: yarn build diff --git a/apps/guide/package.json b/apps/guide/package.json index 6f16f5669706..454d51ed9b7a 100644 --- a/apps/guide/package.json +++ b/apps/guide/package.json @@ -34,9 +34,9 @@ }, "homepage": "https://discord.js.org", "dependencies": { - "@astrojs/image": "^0.9.3", + "@astrojs/image": "^0.10.0", "@astrojs/mdx": "^0.11.4", - "@astrojs/react": "^1.2.0", + "@astrojs/react": "^1.2.1", "@code-hike/mdx": "^0.7.4", "@discordjs/ui": "workspace:^", "ariakit": "^2.0.0-next.41", @@ -45,43 +45,43 @@ "react": "^17.0.2", "react-custom-scrollbars-2": "^4.5.0", "react-dom": "^17.0.2", - "react-icons": "^4.4.0", + "react-icons": "^4.6.0", "react-use": "^17.4.0", "sharp": "^0.31.1", "shiki": "^0.11.1" }, "devDependencies": { - "@astrojs/prefetch": "^0.0.8", + "@astrojs/prefetch": "^0.1.0", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", - "@types/node": "16.11.64", + "@types/node": "16.11.68", "@types/react": "^17.0.50", "@types/react-dom": "^17.0.17", "@types/react-syntax-highlighter": "^15.5.5", - "@unocss/cli": "^0.45.29", - "@unocss/reset": "^0.45.29", + "@unocss/cli": "^0.45.30", + "@unocss/reset": "^0.45.30", "@vitejs/plugin-react": "^2.1.0", - "@vitest/coverage-c8": "^0.24.1", - "astro": "^1.4.7", - "astro-compress": "^1.0.11", + "@vitest/coverage-c8": "^0.24.3", + "astro": "^1.5.2", + "astro-compress": "^1.0.12", "astro-critters": "^1.0.5", "cross-env": "^7.0.3", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", - "happy-dom": "^7.5.6", + "happy-dom": "^7.6.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.5.5", + "prettier-plugin-astro": "^0.6.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.29", - "vercel": "^28.4.9", - "vitest": "^0.24.1" + "unocss": "^0.45.30", + "vercel": "^28.4.12", + "vitest": "^0.24.3" }, "engines": { "node": ">=16.9.0" diff --git a/apps/website/package.json b/apps/website/package.json index d81744306745..bbec98fe9503 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -45,7 +45,7 @@ "@discordjs/ui": "workspace:^", "@microsoft/api-extractor-model": "7.24.0", "@microsoft/tsdoc": "0.14.1", - "@vercel/og": "^0.0.15", + "@vercel/og": "^0.0.19", "@vscode/codicons": "^0.0.32", "ariakit": "^2.0.0-next.41", "cmdk": "^0.1.20", @@ -57,11 +57,11 @@ "react": "^18.2.0", "react-custom-scrollbars-2": "^4.5.0", "react-dom": "^18.2.0", - "react-icons": "^4.4.0", + "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.3.2", + "rehype-pretty-code": "^0.4.0", "rehype-raw": "^6.1.1", "rehype-slug": "^5.0.1", "remark-gfm": "^3.0.1", @@ -72,26 +72,26 @@ "devDependencies": { "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", - "@types/node": "16.11.64", + "@types/node": "16.11.68", "@types/react": "^18.0.21", "@types/react-dom": "^18.0.6", "@types/react-syntax-highlighter": "^15.5.5", - "@unocss/cli": "^0.45.29", - "@unocss/reset": "^0.45.29", + "@unocss/cli": "^0.45.30", + "@unocss/reset": "^0.45.30", "@vitejs/plugin-react": "^2.1.0", - "@vitest/coverage-c8": "^0.24.1", + "@vitest/coverage-c8": "^0.24.3", "concurrently": "^7.4.0", "cross-env": "^7.0.3", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", - "happy-dom": "^7.5.6", + "happy-dom": "^7.6.0", "prettier": "^2.7.1", "prettier-plugin-tailwindcss": "^0.1.13", "typescript": "^4.8.4", - "unocss": "^0.45.29", - "vercel": "^28.4.9", - "vitest": "^0.24.1" + "unocss": "^0.45.30", + "vercel": "^28.4.12", + "vitest": "^0.24.3" }, "engines": { "node": ">=16.9.0" diff --git a/apps/website/src/components/CodeListing.tsx b/apps/website/src/components/CodeListing.tsx index b20affd00d04..7ddf5275327b 100644 --- a/apps/website/src/components/CodeListing.tsx +++ b/apps/website/src/components/CodeListing.tsx @@ -34,7 +34,7 @@ export function CodeListing({ }>) { return (
-
+
{summary || inheritanceData ? ( -
+
{deprecation ? : null} {summary ? : null} {comment ? : null} diff --git a/apps/website/src/components/model/Enum.tsx b/apps/website/src/components/model/Enum.tsx index 5ff1fdd16ad2..56bc4700b338 100644 --- a/apps/website/src/components/model/Enum.tsx +++ b/apps/website/src/components/model/Enum.tsx @@ -1,5 +1,6 @@ import type { ApiEnumJSON } from '@discordjs/api-extractor-utils'; import { Section } from '@discordjs/ui'; +import { Fragment } from 'react'; import { VscSymbolEnumMember } from 'react-icons/vsc'; import { useMedia } from 'react-use'; import { CodeListing, CodeListingSeparatorType } from '../CodeListing'; @@ -13,13 +14,15 @@ export function Enum({ data }: { data: ApiEnumJSON }) {
} padded title="Members">
{data.members.map((member) => ( - + + +
+ ))}
diff --git a/package.json b/package.json index 86037216ee7e..a1fba1e57176 100644 --- a/package.json +++ b/package.json @@ -46,11 +46,11 @@ "husky": "^8.0.1", "is-ci": "^3.0.1", "lint-staged": "^13.0.3", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "turbo": "^1.5.6", "typescript": "^4.8.4", - "unocss": "^0.45.29", - "vitest": "^0.24.1" + "unocss": "^0.45.30", + "vitest": "^0.24.3" }, "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 b4dd94df96e4..d95dfbbf91b8 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -43,16 +43,16 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "16.11.64", - "@vitest/coverage-c8": "^0.24.1", + "@types/node": "16.11.68", + "@vitest/coverage-c8": "^0.24.3", "cross-env": "^7.0.3", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "typescript": "^4.8.4", - "vitest": "^0.24.1" + "vitest": "^0.24.3" }, "engines": { "node": ">=16.9.0" diff --git a/packages/actions/src/yarnCache/action.yml b/packages/actions/src/yarnCache/action.yml new file mode 100644 index 000000000000..dd0a4235d584 --- /dev/null +++ b/packages/actions/src/yarnCache/action.yml @@ -0,0 +1,35 @@ +name: 'yarn install' +description: 'Run yarn install with node_modules linker and cache enabled' +runs: + using: 'composite' + steps: + - name: Expose yarn config as "$GITHUB_OUTPUT" + id: yarn-config + shell: bash + run: | + echo "CACHE_FOLDER=$(yarn config get cacheFolder)" >> $GITHUB_OUTPUT + + - name: Restore yarn cache + uses: actions/cache@v3 + id: yarn-download-cache + with: + path: ${{ steps.yarn-config.outputs.CACHE_FOLDER }} + key: yarn-download-cache-${{ hashFiles('yarn.lock') }} + restore-keys: | + yarn-download-cache- + + - name: Restore yarn install state + id: yarn-install-state-cache + uses: actions/cache@v3 + with: + path: .yarn/ci-cache/ + key: ${{ runner.os }}-yarn-install-state-cache-${{ hashFiles('yarn.lock', '.yarnrc.yml') }} + + - name: Install dependencies + shell: bash + run: | + yarn install --immutable --inline-builds + env: + YARN_ENABLE_GLOBAL_CACHE: 'false' + YARN_NM_MODE: 'hardlinks-local' + YARN_INSTALL_STATE_PATH: .yarn/ci-cache/install-state.gz diff --git a/packages/api-extractor-utils/package.json b/packages/api-extractor-utils/package.json index c173b55b415e..7b4e4fae615e 100644 --- a/packages/api-extractor-utils/package.json +++ b/packages/api-extractor-utils/package.json @@ -35,13 +35,13 @@ "@microsoft/tsdoc": "0.14.1" }, "devDependencies": { - "@types/node": "16.11.64", + "@types/node": "16.11.68", "cross-env": "^7.0.3", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "typescript": "^4.8.4" }, "engines": { 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 c6c98860054d..dcd626c2e41d 100644 --- a/packages/brokers/package.json +++ b/packages/brokers/package.json @@ -26,7 +26,8 @@ "test": "__tests__" }, "files": [ - "dist" + "dist", + "scripts" ], "contributors": [ "Crawl ", @@ -61,17 +62,17 @@ }, "devDependencies": { "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.32.1", - "@types/node": "^16.11.52", - "@vitest/coverage-c8": "^0.22.1", + "@microsoft/api-extractor": "^7.33.4", + "@types/node": "^16.11.68", + "@vitest/coverage-c8": "^0.24.3", "cross-env": "^7.0.3", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "typescript": "^4.8.4", - "vitest": "^0.22.1" + "vitest": "^0.24.3" }, "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 d8693c686898..fd481908da84 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.13", + "discord-api-types": "^0.37.15", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.1", "tslib": "^2.4.0" }, "devDependencies": { "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.32.0", - "@types/node": "16.11.64", - "@vitest/coverage-c8": "^0.24.1", + "@microsoft/api-extractor": "^7.33.4", + "@types/node": "16.11.68", + "@vitest/coverage-c8": "^0.24.3", "cross-env": "^7.0.3", "esbuild-plugin-version-injector": "^1.0.0", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "typescript": "^4.8.4", - "vitest": "^0.24.1" + "vitest": "^0.24.3" }, "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/package.json b/packages/collection/package.json index 53e96e8ef6cb..68cb5ba4e5d3 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -51,18 +51,18 @@ "homepage": "https://discord.js.org", "devDependencies": { "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.32.0", - "@types/node": "16.11.64", - "@vitest/coverage-c8": "^0.24.1", + "@microsoft/api-extractor": "^7.33.4", + "@types/node": "16.11.68", + "@vitest/coverage-c8": "^0.24.3", "cross-env": "^7.0.3", "esbuild-plugin-version-injector": "^1.0.0", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "typescript": "^4.8.4", - "vitest": "^0.24.1" + "vitest": "^0.24.3" }, "engines": { "node": ">=16.9.0" diff --git a/packages/discord.js/package.json b/packages/discord.js/package.json index 07dece73e724..48f3461df95c 100644 --- a/packages/discord.js/package.json +++ b/packages/discord.js/package.json @@ -55,7 +55,7 @@ "@discordjs/util": "workspace:^", "@sapphire/snowflake": "^3.2.2", "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.13", + "discord-api-types": "^0.37.15", "fast-deep-equal": "^3.1.3", "lodash.snakecase": "^4.1.1", "tslib": "^2.4.0", @@ -65,11 +65,11 @@ "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.8", - "@types/node": "16.11.64", + "@types/node": "16.11.68", "dtslint": "^4.2.1", "eslint": "^8.25.0", "eslint-formatter-pretty": "^4.1.0", - "jest": "^29.1.2", + "jest": "^29.2.1", "prettier": "^2.7.1", "tsd": "^0.24.1", "tslint": "^6.1.3", 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/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/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..61927e2b964c 100644 --- a/packages/discord.js/src/index.js +++ b/packages/discord.js/src/index.js @@ -154,9 +154,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/GuildChannelManager.js b/packages/discord.js/src/managers/GuildChannelManager.js index 22358885ee22..81974c01a201 100644 --- a/packages/discord.js/src/managers/GuildChannelManager.js +++ b/packages/discord.js/src/managers/GuildChannelManager.js @@ -98,6 +98,24 @@ class GuildChannelManager extends CachedManager { return super.resolveId(channel); } + /** + * Adds the target channel to a channel's followers. + * @param {NewsChannel|Snowflake} channel The channel to follow + * @param {TextChannelResolvable} targetChannel The channel where published announcements will be posted at + * @param {string} [reason] Reason for creating the webhook + * @returns {Promise} Returns created target webhook id. + */ + async addFollower(channel, targetChannel, reason) { + const channelId = this.resolveId(channel); + const targetChannelId = this.resolveId(targetChannel); + if (!channelId || !targetChannelId) throw new Error(ErrorCodes.GuildChannelResolve); + const { webhook_id } = await this.client.rest.post(Routes.channelFollowers(channelId), { + body: { webhook_channel_id: targetChannelId }, + reason, + }); + return webhook_id; + } + /** * Options used to create a new channel in a guild. * @typedef {CategoryCreateChannelOptions} GuildChannelCreateOptions 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..04d076e599f0 --- /dev/null +++ b/packages/discord.js/src/structures/ChannelSelectMenuInteraction.js @@ -0,0 +1,25 @@ +'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); + + /** + * 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/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..bd294a04a74a --- /dev/null +++ b/packages/discord.js/src/structures/MentionableSelectMenuInteraction.js @@ -0,0 +1,65 @@ +'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); + + 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 6d5bc84d3d4d..dd5a4b6ff12e 100644 --- a/packages/discord.js/src/structures/Message.js +++ b/packages/discord.js/src/structures/Message.js @@ -788,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/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..b45d356a2828 --- /dev/null +++ b/packages/discord.js/src/structures/RoleSelectMenuInteraction.js @@ -0,0 +1,25 @@ +'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); + + /** + * 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..caa971b468e9 100644 --- a/packages/discord.js/src/structures/SelectMenuBuilder.js +++ b/packages/discord.js/src/structures/SelectMenuBuilder.js @@ -1,78 +1,25 @@ '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. */ -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..850c985275c2 100644 --- a/packages/discord.js/src/structures/SelectMenuComponent.js +++ b/packages/discord.js/src/structures/SelectMenuComponent.js @@ -1,64 +1,24 @@ '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. */ -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..9ee092d008b1 100644 --- a/packages/discord.js/src/structures/SelectMenuInteraction.js +++ b/packages/discord.js/src/structures/SelectMenuInteraction.js @@ -1,20 +1,24 @@ '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. */ -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..ac4d265379d7 100644 --- a/packages/discord.js/src/structures/SelectMenuOptionBuilder.js +++ b/packages/discord.js/src/structures/SelectMenuOptionBuilder.js @@ -1,50 +1,25 @@ '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. */ -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/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..d2af4176a5e7 --- /dev/null +++ b/packages/discord.js/src/structures/UserSelectMenuInteraction.js @@ -0,0 +1,49 @@ +'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); + + /** + * 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/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 ac012e5f97b0..3f06c3fd50d1 100644 --- a/packages/discord.js/src/util/Constants.js +++ b/packages/discord.js/src/util/Constants.js @@ -1,6 +1,6 @@ 'use strict'; -const { ChannelType, MessageType } = require('discord-api-types/v10'); +const { ChannelType, MessageType, ComponentType } = require('discord-api-types/v10'); /** * Max bulk deletable message age @@ -119,6 +119,23 @@ 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 @@ -127,4 +144,5 @@ exports.VoiceBasedChannelTypes = [ChannelType.GuildVoice, ChannelType.GuildStage * @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/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 6b7eeb531c4a..437db959f4d5 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,17 @@ import { TextChannelType, ChannelFlags, SortOrderType, + APIMessageStringSelectInteractionData, + APIMessageUserSelectInteractionData, + APIStringSelectComponent, + APIUserSelectComponent, + APIRoleSelectComponent, + APIMentionableSelectComponent, + APIChannelSelectComponent, + APIGuildMember, + APIMessageRoleSelectInteractionData, + APIMessageMentionableSelectInteractionData, + APIMessageChannelSelectInteractionData, } from 'discord-api-types/v10'; import { ChildProcess } from 'node:child_process'; import { EventEmitter } from 'node:events'; @@ -158,13 +171,11 @@ import { RawInviteData, RawInviteGuildData, RawInviteStageInstance, - RawAttachmentData, RawMessageButtonInteractionData, RawMessageComponentInteractionData, RawMessageData, RawMessagePayloadData, RawMessageReactionData, - RawMessageSelectMenuInteractionData, RawOAuth2GuildData, RawPartialGroupDMChannelData, RawPartialMessageData, @@ -242,7 +253,11 @@ export interface BaseComponentData { export type MessageActionRowComponentData = | JSONEncodable | ButtonComponentData - | SelectMenuComponentData; + | StringSelectMenuComponentData + | UserSelectMenuComponentData + | RoleSelectMenuComponentData + | MentionableSelectMenuComponentData + | ChannelSelectMenuComponentData; export type ModalActionRowComponentData = JSONEncodable | TextInputComponentData; @@ -269,7 +284,13 @@ export class ActionRowBuilder extends Component< @@ -439,11 +460,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 +625,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 +636,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 +687,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 +832,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; @@ -1500,7 +1567,7 @@ export type Interaction = | ChatInputCommandInteraction | MessageContextMenuCommandInteraction | UserContextMenuCommandInteraction - | SelectMenuInteraction + | AnySelectMenuInteraction | ButtonInteraction | AutocompleteInteraction | ModalSubmitInteraction; @@ -1549,7 +1616,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 +1746,11 @@ export type AwaitMessageCollectorOptionsParams { Button: ButtonInteraction; - SelectMenu: SelectMenuInteraction; + StringSelectMenu: StringSelectMenuInteraction; + UserSelectMenu: UserSelectMenuInteraction; + RoleSelectMenu: RoleSelectMenuInteraction; + MentionableSelectMenu: MentionableSelectMenuInteraction; + ChannelSelectMenu: ChannelSelectMenuInteraction; ActionRow: MessageComponentInteraction; } @@ -1680,7 +1758,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 { @@ -1830,11 +1912,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( @@ -2020,15 +2102,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 }, @@ -2254,22 +2336,116 @@ 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 users: Collection; + public members: Collection>; + 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 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 users: Collection; + public members: Collection>; + 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 channels: Collection>; + 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: []; @@ -2770,14 +2946,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; } @@ -2995,7 +3179,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[]; @@ -3116,6 +3301,7 @@ export const Constants: { TextBasedChannelTypes: TextBasedChannelTypes[]; ThreadChannelTypes: ThreadChannelType[]; VoiceBasedChannelTypes: VoiceBasedChannelTypes[]; + SelectMenuTypes: SelectMenuType[]; }; export const version: string; @@ -3248,6 +3434,7 @@ export enum DiscordjsErrorCodes { InteractionAlreadyReplied = 'InteractionAlreadyReplied', InteractionNotReplied = 'InteractionNotReplied', + /** @deprecated */ InteractionEphemeralReplied = 'InteractionEphemeralReplied', CommandInteractionOptionNotFound = 'CommandInteractionOptionNotFound', @@ -3459,6 +3646,11 @@ export class GuildChannelManager extends CachedManager; public create( options: GuildChannelCreateOptions & { type: T }, ): Promise; @@ -5138,7 +5330,11 @@ export interface IntegrationAccount { export type IntegrationType = 'twitch' | 'youtube' | 'discord'; export type CollectedInteraction = - | SelectMenuInteraction + | StringSelectMenuInteraction + | UserSelectMenuInteraction + | RoleSelectMenuInteraction + | MentionableSelectMenuInteraction + | ChannelSelectMenuInteraction | ButtonInteraction | ModalSubmitInteraction; @@ -5210,7 +5406,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; @@ -5247,7 +5449,11 @@ export type MessageComponent = | Component | ActionRowBuilder | ButtonComponent - | SelectMenuComponent; + | StringSelectMenuComponent + | UserSelectMenuComponent + | RoleSelectMenuComponent + | MentionableSelectMenuComponent + | ChannelSelectMenuComponent; export type CollectedMessageInteraction = Exclude< CollectedInteraction, @@ -5345,16 +5551,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; @@ -5752,6 +5978,10 @@ export interface WebhookEditMessageOptions extends Omit { 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 +412,9 @@ client.on('messageCreate', async message => { }); message.createMessageComponentCollector({ - componentType: ComponentType.SelectMenu, + componentType: ComponentType.StringSelect, filter: i => { - expectType(i); + expectType(i); return true; }, }); @@ -428,9 +435,9 @@ client.on('messageCreate', async message => { }); message.awaitMessageComponent({ - componentType: ComponentType.SelectMenu, + componentType: ComponentType.StringSelect, filter: i => { - expectType(i); + expectType(i); return true; }, }); @@ -464,9 +471,9 @@ client.on('messageCreate', async message => { }); channel.awaitMessageComponent({ - componentType: ComponentType.SelectMenu, + componentType: ComponentType.StringSelect, filter: i => { - expectType>(i); + expectType>(i); return true; }, }); @@ -489,9 +496,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', @@ -1122,8 +1129,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 +1143,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' }, ], }); @@ -1508,7 +1515,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 +1647,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 +1892,7 @@ const button = new ButtonBuilder({ customId: 'test', }); -const selectMenu = new SelectMenuBuilder({ +const selectMenu = new StringSelectMenuBuilder({ maxValues: 10, minValues: 2, customId: 'test', @@ -1892,7 +1902,7 @@ new ActionRowBuilder({ components: [selectMenu.toJSON(), button.toJSON()], }); -new SelectMenuBuilder({ +new StringSelectMenuBuilder({ customId: 'foo', }); @@ -1951,10 +1961,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 +2035,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 4366fd36ffa1..8ed9a8b67565 100644 --- a/packages/docgen/package.json +++ b/packages/docgen/package.json @@ -43,18 +43,18 @@ "commander": "^9.4.1", "jsdoc-to-markdown": "^7.1.1", "tslib": "^2.4.0", - "typedoc": "^0.23.16" + "typedoc": "^0.23.17" }, "devDependencies": { "@favware/cliff-jumper": "^1.8.8", "@types/jsdoc-to-markdown": "^7.0.3", - "@types/node": "16.11.64", + "@types/node": "16.11.68", "cross-env": "^7.0.3", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "typescript": "^4.8.4" }, "engines": { diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index a6aaf4000e27..762696582c3f 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -48,13 +48,13 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "16.11.64", + "@types/node": "16.11.68", "cross-env": "^7.0.3", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "typescript": "^4.8.4" }, "engines": { diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 5108e66dca15..d2e0b1ced365 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -61,19 +61,19 @@ }, "devDependencies": { "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.32.0", - "@types/node": "16.11.64", + "@microsoft/api-extractor": "^7.33.4", + "@types/node": "16.11.68", "@types/supertest": "^2.0.12", - "@vitest/coverage-c8": "^0.24.1", + "@vitest/coverage-c8": "^0.24.3", "cross-env": "^7.0.3", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", "supertest": "^6.3.0", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "typescript": "^4.8.4", - "vitest": "^0.24.1" + "vitest": "^0.24.3" }, "engines": { "node": ">=16.9.0" diff --git a/packages/rest/package.json b/packages/rest/package.json index 9008e96744ec..cb40dd28a283 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.13", + "discord-api-types": "^0.37.15", "file-type": "^18.0.0", "tslib": "^2.4.0", "undici": "^5.11.0" }, "devDependencies": { "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.32.0", - "@types/node": "16.11.64", - "@vitest/coverage-c8": "^0.24.1", + "@microsoft/api-extractor": "^7.33.4", + "@types/node": "16.11.68", + "@vitest/coverage-c8": "^0.24.3", "cross-env": "^7.0.3", "esbuild-plugin-version-injector": "^1.0.0", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "typescript": "^4.8.4", - "vitest": "^0.24.1" + "vitest": "^0.24.3" }, "engines": { "node": ">=16.9.0" 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 6f759b3da610..807e6ab999d0 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -46,27 +46,27 @@ "ariakit": "^2.0.0-next.41", "react": "^18.2.0", "react-dom": "^18.2.0", - "react-icons": "^4.4.0" + "react-icons": "^4.6.0" }, "devDependencies": { "@favware/cliff-jumper": "^1.8.8", - "@ladle/react": "^2.4.3", - "@types/node": "16.11.64", + "@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.29", + "@unocss/reset": "^0.45.30", "@vitejs/plugin-react": "^2.1.0", - "@vitest/coverage-c8": "^0.24.1", + "@vitest/coverage-c8": "^0.24.3", "cross-env": "^7.0.3", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", "typescript": "^4.8.4", - "unocss": "^0.45.29", - "vite": "^3.1.7", - "vite-plugin-dts": "^1.6.5", - "vitest": "^0.24.1" + "unocss": "^0.45.30", + "vite": "^3.1.8", + "vite-plugin-dts": "^1.6.6", + "vitest": "^0.24.3" }, "engines": { "node": ">=16.9.0" diff --git a/packages/util/package.json b/packages/util/package.json index 4089231d9517..37a7c2093ab4 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -52,18 +52,18 @@ "homepage": "https://discord.js.org", "devDependencies": { "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.32.0", - "@types/node": "16.11.64", - "@vitest/coverage-c8": "^0.24.1", + "@microsoft/api-extractor": "^7.33.4", + "@types/node": "16.11.68", + "@vitest/coverage-c8": "^0.24.3", "cross-env": "^7.0.3", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", "prettier": "^2.7.1", "tsd": "^0.24.1", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "typescript": "^4.8.4", - "vitest": "^0.24.1" + "vitest": "^0.24.3" }, "engines": { "node": ">=16.9.0" diff --git a/packages/voice/package.json b/packages/voice/package.json index bd9507860818..6eacc40ac6ce 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -53,7 +53,7 @@ "homepage": "https://discord.js.org", "dependencies": { "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.13", + "discord-api-types": "^0.37.15", "prism-media": "^1.3.4", "tslib": "^2.4.0", "ws": "^8.9.0" @@ -63,19 +63,19 @@ "@babel/preset-env": "^7.19.4", "@babel/preset-typescript": "^7.18.6", "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.32.0", - "@types/jest": "^29.1.2", - "@types/node": "16.11.64", + "@microsoft/api-extractor": "^7.33.4", + "@types/jest": "^29.2.0", + "@types/node": "16.11.68", "cross-env": "^7.0.3", "esbuild-plugin-version-injector": "^1.0.0", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", - "jest": "^29.1.2", + "jest": "^29.2.1", "jest-websocket-mock": "^2.4.0", "mock-socket": "^9.1.5", "prettier": "^2.7.1", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "tweetnacl": "^1.0.3", "typescript": "^4.8.4" }, diff --git a/packages/ws/package.json b/packages/ws/package.json index a19109415a1b..f768c6430f60 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.13", + "discord-api-types": "^0.37.15", "tslib": "^2.4.0", "ws": "^8.9.0" }, "devDependencies": { "@favware/cliff-jumper": "^1.8.8", - "@microsoft/api-extractor": "^7.32.0", - "@types/node": "16.11.64", - "@vitest/coverage-c8": "^0.24.1", + "@microsoft/api-extractor": "^7.33.4", + "@types/node": "16.11.68", + "@vitest/coverage-c8": "^0.24.3", "cross-env": "^7.0.3", "esbuild-plugin-version-injector": "^1.0.0", "eslint": "^8.25.0", - "eslint-config-neon": "^0.1.38", + "eslint-config-neon": "^0.1.39", "eslint-formatter-pretty": "^4.1.0", "mock-socket": "^9.1.5", "prettier": "^2.7.1", - "tsup": "^6.2.3", + "tsup": "^6.3.0", "typescript": "^4.8.4", "undici": "^5.11.0", - "vitest": "^0.24.1", + "vitest": "^0.24.3", "zlib-sync": "^0.1.7" }, "engines": { diff --git a/yarn.lock b/yarn.lock index 519de0f2e67d..972837c67d03 100644 --- a/yarn.lock +++ b/yarn.lock @@ -120,6 +120,13 @@ __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 + languageName: node + linkType: hard + "@astrojs/compiler@npm:^0.23.4": version: 0.23.5 resolution: "@astrojs/compiler@npm:0.23.5" @@ -127,13 +134,6 @@ __metadata: languageName: node linkType: hard -"@astrojs/compiler@npm:^0.26.0": - version: 0.26.1 - resolution: "@astrojs/compiler@npm:0.26.1" - checksum: c4751efd93103f727e9b371e0d0a6e3e382fdc6fb737bc7a32de202d7040a75640c3fca50d4d60e3ba46a2445e2c45fa72f64ba74677d87f80d6f3e640097391 - languageName: node - linkType: hard - "@astrojs/compiler@npm:^0.27.0": version: 0.27.1 resolution: "@astrojs/compiler@npm:0.27.1" @@ -141,9 +141,9 @@ __metadata: languageName: node linkType: hard -"@astrojs/image@npm:^0.9.3": - version: 0.9.3 - resolution: "@astrojs/image@npm:0.9.3" +"@astrojs/image@npm:^0.10.0": + version: 0.10.0 + resolution: "@astrojs/image@npm:0.10.0" dependencies: "@altano/tiny-async-pool": ^1.0.2 http-cache-semantics: ^4.1.0 @@ -157,7 +157,7 @@ __metadata: peerDependenciesMeta: sharp: optional: true - checksum: 42021db9a2174ea84ac3ce2e41e6f1ad63d930bb70ff86a4a5fa9e197bfc2e09aba7c808bae90ca5e9f2b1828b48c62c08b873e67dfdeb2c84923cc0c295f90a + checksum: 3c32b1662a1a0c54cce0a2e3d08da66639ba7c9a41980a397c058e5ca7856c08bcbfb5e8dc0940e6cb2e5b26621f2ea4b8bddd8f612693045e29a67c691547e5 languageName: node linkType: hard @@ -256,12 +256,12 @@ __metadata: languageName: node linkType: hard -"@astrojs/prefetch@npm:^0.0.8": - version: 0.0.8 - resolution: "@astrojs/prefetch@npm:0.0.8" +"@astrojs/prefetch@npm:^0.1.0": + version: 0.1.0 + resolution: "@astrojs/prefetch@npm:0.1.0" dependencies: throttles: ^1.0.1 - checksum: 2e68855b570b498bd7431a0be24d8c45975ff7b2b79ad6d853d0539ee03351d24ff281fcc7902ea93da32bcfe6d887187495e412a04b0679cb65da7341f63c92 + checksum: c91adb117c4e700f71655cd4b061fc69ab8731fa68e884bdfc5eaa8a1b1609276d476c420f779ab1f79f11bed9962fed35f70846a8ed310c97d01968ece59aef languageName: node linkType: hard @@ -274,16 +274,18 @@ __metadata: languageName: node linkType: hard -"@astrojs/react@npm:^1.2.0": - version: 1.2.0 - resolution: "@astrojs/react@npm:1.2.0" +"@astrojs/react@npm:^1.2.1": + version: 1.2.1 + resolution: "@astrojs/react@npm:1.2.1" dependencies: "@babel/core": ">=7.0.0-0 <8.0.0" "@babel/plugin-transform-react-jsx": ^7.17.12 peerDependencies: + "@types/react": ^17.0.50 || ^18.0.21 + "@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: 05b3cd36e0d41e1d774c8846bbb8f999730a9d5337e7268f4b550469dee96ac6fe6be0c3802821e49dec96f733a9b5e712b52ff9d23d531b55553ff26e228d3a + checksum: 6e5d37821c4128d26447605371c9fe466303154386303fda94b4e1011d5232db894d815cf5b9663c5a8fcb9d8ec42edf14a72610214849ac23a6c65883f1c780 languageName: node linkType: hard @@ -1997,17 +1999,17 @@ __metadata: resolution: "@discordjs/actions@workspace:packages/actions" dependencies: "@actions/core": ^1.10.0 - "@types/node": 16.11.64 - "@vitest/coverage-c8": ^0.24.1 + "@types/node": 16.11.68 + "@vitest/coverage-c8": ^0.24.3 cross-env: ^7.0.3 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 tslib: ^2.4.0 - tsup: ^6.2.3 + tsup: ^6.3.0 typescript: ^4.8.4 - vitest: ^0.24.1 + vitest: ^0.24.3 languageName: unknown linkType: soft @@ -2017,13 +2019,13 @@ __metadata: dependencies: "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": 0.14.1 - "@types/node": 16.11.64 + "@types/node": 16.11.68 cross-env: ^7.0.3 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 - tsup: ^6.2.3 + tsup: ^6.3.0 typescript: ^4.8.4 languageName: unknown linkType: soft @@ -2033,20 +2035,20 @@ __metadata: resolution: "@discordjs/brokers@workspace:packages/brokers" dependencies: "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.32.1 + "@microsoft/api-extractor": ^7.33.4 "@msgpack/msgpack": ^2.8.0 - "@types/node": ^16.11.52 - "@vitest/coverage-c8": ^0.22.1 + "@types/node": ^16.11.68 + "@vitest/coverage-c8": ^0.24.3 "@vladfrangu/async_event_emitter": ^2.1.2 cross-env: ^7.0.3 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 ioredis: ^5.2.3 prettier: ^2.7.1 - tsup: ^6.2.3 + tsup: ^6.3.0 typescript: ^4.8.4 - vitest: ^0.22.1 + vitest: ^0.24.3 languageName: unknown linkType: soft @@ -2056,23 +2058,23 @@ __metadata: dependencies: "@discordjs/util": "workspace:^" "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.32.0 + "@microsoft/api-extractor": ^7.33.4 "@sapphire/shapeshift": ^3.7.0 - "@types/node": 16.11.64 - "@vitest/coverage-c8": ^0.24.1 + "@types/node": 16.11.68 + "@vitest/coverage-c8": ^0.24.3 cross-env: ^7.0.3 - discord-api-types: ^0.37.13 + discord-api-types: ^0.37.15 esbuild-plugin-version-injector: ^1.0.0 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 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.2.3 + tsup: ^6.3.0 typescript: ^4.8.4 - vitest: ^0.24.1 + vitest: ^0.24.3 languageName: unknown linkType: soft @@ -2081,18 +2083,18 @@ __metadata: resolution: "@discordjs/collection@workspace:packages/collection" dependencies: "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.32.0 - "@types/node": 16.11.64 - "@vitest/coverage-c8": ^0.24.1 + "@microsoft/api-extractor": ^7.33.4 + "@types/node": 16.11.68 + "@vitest/coverage-c8": ^0.24.3 cross-env: ^7.0.3 esbuild-plugin-version-injector: ^1.0.0 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 - tsup: ^6.2.3 + tsup: ^6.3.0 typescript: ^4.8.4 - vitest: ^0.24.1 + vitest: ^0.24.3 languageName: unknown linkType: soft @@ -2108,11 +2110,11 @@ __metadata: husky: ^8.0.1 is-ci: ^3.0.1 lint-staged: ^13.0.3 - tsup: ^6.2.3 + tsup: ^6.3.0 turbo: ^1.5.6 typescript: ^4.8.4 - unocss: ^0.45.29 - vitest: ^0.24.1 + unocss: ^0.45.30 + vitest: ^0.24.3 languageName: unknown linkType: soft @@ -2122,17 +2124,17 @@ __metadata: dependencies: "@favware/cliff-jumper": ^1.8.8 "@types/jsdoc-to-markdown": ^7.0.3 - "@types/node": 16.11.64 + "@types/node": 16.11.68 commander: ^9.4.1 cross-env: ^7.0.3 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 jsdoc-to-markdown: ^7.1.1 prettier: ^2.7.1 tslib: ^2.4.0 - tsup: ^6.2.3 - typedoc: ^0.23.16 + tsup: ^6.3.0 + typedoc: ^0.23.17 typescript: ^4.8.4 bin: docgen: ./dist/cli.js @@ -2143,52 +2145,52 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/guide@workspace:apps/guide" dependencies: - "@astrojs/image": ^0.9.3 + "@astrojs/image": ^0.10.0 "@astrojs/mdx": ^0.11.4 - "@astrojs/prefetch": ^0.0.8 - "@astrojs/react": ^1.2.0 + "@astrojs/prefetch": ^0.1.0 + "@astrojs/react": ^1.2.1 "@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.64 + "@types/node": 16.11.68 "@types/react": ^17.0.50 "@types/react-dom": ^17.0.17 "@types/react-syntax-highlighter": ^15.5.5 - "@unocss/cli": ^0.45.29 - "@unocss/reset": ^0.45.29 + "@unocss/cli": ^0.45.30 + "@unocss/reset": ^0.45.30 "@vitejs/plugin-react": ^2.1.0 - "@vitest/coverage-c8": ^0.24.1 + "@vitest/coverage-c8": ^0.24.3 ariakit: ^2.0.0-next.41 - astro: ^1.4.7 - astro-compress: ^1.0.11 + astro: ^1.5.2 + astro-compress: ^1.0.12 astro-critters: ^1.0.5 cmdk: ^0.1.20 cross-env: ^7.0.3 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 - happy-dom: ^7.5.6 + happy-dom: ^7.6.0 hast-util-to-string: ^2.0.0 hastscript: ^7.1.0 html-escaper: ^3.0.3 meilisearch: ^0.28.0 prettier: ^2.7.1 - prettier-plugin-astro: ^0.5.5 + prettier-plugin-astro: ^0.6.0 prettier-plugin-tailwindcss: ^0.1.13 react: ^17.0.2 react-custom-scrollbars-2: ^4.5.0 react-dom: ^17.0.2 - react-icons: ^4.4.0 + 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 shiki: ^0.11.1 typescript: ^4.8.4 - unocss: ^0.45.29 - vercel: ^28.4.9 - vitest: ^0.24.1 + unocss: ^0.45.30 + vercel: ^28.4.12 + vitest: ^0.24.3 languageName: unknown linkType: soft @@ -2198,14 +2200,14 @@ __metadata: dependencies: "@discordjs/proxy": ^1.2.0 "@discordjs/rest": ^1.3.0 - "@types/node": 16.11.64 + "@types/node": 16.11.68 cross-env: ^7.0.3 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 tslib: ^2.4.0 - tsup: ^6.2.3 + tsup: ^6.3.0 typescript: ^4.8.4 languageName: unknown linkType: soft @@ -2217,21 +2219,21 @@ __metadata: "@discordjs/rest": ^1.0.0 "@discordjs/util": "workspace:^" "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.32.0 - "@types/node": 16.11.64 + "@microsoft/api-extractor": ^7.33.4 + "@types/node": 16.11.68 "@types/supertest": ^2.0.12 - "@vitest/coverage-c8": ^0.24.1 + "@vitest/coverage-c8": ^0.24.3 cross-env: ^7.0.3 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 supertest: ^6.3.0 tslib: ^2.4.0 - tsup: ^6.2.3 + tsup: ^6.3.0 typescript: ^4.8.4 undici: ^5.11.0 - vitest: ^0.24.1 + vitest: ^0.24.3 languageName: unknown linkType: soft @@ -2242,24 +2244,24 @@ __metadata: "@discordjs/collection": "workspace:^" "@discordjs/util": "workspace:^" "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.32.0 + "@microsoft/api-extractor": ^7.33.4 "@sapphire/async-queue": ^1.5.0 "@sapphire/snowflake": ^3.2.2 - "@types/node": 16.11.64 - "@vitest/coverage-c8": ^0.24.1 + "@types/node": 16.11.68 + "@vitest/coverage-c8": ^0.24.3 cross-env: ^7.0.3 - discord-api-types: ^0.37.13 + discord-api-types: ^0.37.15 esbuild-plugin-version-injector: ^1.0.0 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 file-type: ^18.0.0 prettier: ^2.7.1 tslib: ^2.4.0 - tsup: ^6.2.3 + tsup: ^6.3.0 typescript: ^4.8.4 undici: ^5.11.0 - vitest: ^0.24.1 + vitest: ^0.24.3 languageName: unknown linkType: soft @@ -2272,20 +2274,20 @@ __metadata: "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": 0.16.1 "@types/fs-extra": ^9.0.13 - "@types/node": 16.11.64 - "@vitest/coverage-c8": ^0.24.1 + "@types/node": 16.11.68 + "@vitest/coverage-c8": ^0.24.3 commander: ^9.4.1 cross-env: ^7.0.3 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 fs-extra: ^10.1.0 prettier: ^2.7.1 tslib: ^2.4.0 - tsup: ^6.2.3 + tsup: ^6.3.0 typescript: ^4.8.4 undici: ^5.11.0 - vitest: ^0.24.1 + vitest: ^0.24.3 yaml: ^2.1.3 languageName: unknown linkType: soft @@ -2295,27 +2297,27 @@ __metadata: resolution: "@discordjs/ui@workspace:packages/ui" dependencies: "@favware/cliff-jumper": ^1.8.8 - "@ladle/react": ^2.4.3 - "@types/node": 16.11.64 + "@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.29 + "@unocss/reset": ^0.45.30 "@vitejs/plugin-react": ^2.1.0 - "@vitest/coverage-c8": ^0.24.1 + "@vitest/coverage-c8": ^0.24.3 ariakit: ^2.0.0-next.41 cross-env: ^7.0.3 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 react: ^18.2.0 react-dom: ^18.2.0 - react-icons: ^4.4.0 + react-icons: ^4.6.0 typescript: ^4.8.4 - unocss: ^0.45.29 - vite: ^3.1.7 - vite-plugin-dts: ^1.6.5 - vitest: ^0.24.1 + unocss: ^0.45.30 + vite: ^3.1.8 + vite-plugin-dts: ^1.6.6 + vitest: ^0.24.3 languageName: unknown linkType: soft @@ -2324,18 +2326,18 @@ __metadata: resolution: "@discordjs/util@workspace:packages/util" dependencies: "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.32.0 - "@types/node": 16.11.64 - "@vitest/coverage-c8": ^0.24.1 + "@microsoft/api-extractor": ^7.33.4 + "@types/node": 16.11.68 + "@vitest/coverage-c8": ^0.24.3 cross-env: ^7.0.3 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 prettier: ^2.7.1 tsd: ^0.24.1 - tsup: ^6.2.3 + tsup: ^6.3.0 typescript: ^4.8.4 - vitest: ^0.24.1 + vitest: ^0.24.3 languageName: unknown linkType: soft @@ -2347,23 +2349,23 @@ __metadata: "@babel/preset-env": ^7.19.4 "@babel/preset-typescript": ^7.18.6 "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.32.0 - "@types/jest": ^29.1.2 - "@types/node": 16.11.64 + "@microsoft/api-extractor": ^7.33.4 + "@types/jest": ^29.2.0 + "@types/node": 16.11.68 "@types/ws": ^8.5.3 cross-env: ^7.0.3 - discord-api-types: ^0.37.13 + discord-api-types: ^0.37.15 esbuild-plugin-version-injector: ^1.0.0 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 - jest: ^29.1.2 + jest: ^29.2.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.2.3 + tsup: ^6.3.0 tweetnacl: ^1.0.3 typescript: ^4.8.4 ws: ^8.9.0 @@ -2381,24 +2383,24 @@ __metadata: "@microsoft/tsdoc": 0.14.1 "@testing-library/react": ^13.4.0 "@testing-library/user-event": ^14.4.3 - "@types/node": 16.11.64 + "@types/node": 16.11.68 "@types/react": ^18.0.21 "@types/react-dom": ^18.0.6 "@types/react-syntax-highlighter": ^15.5.5 - "@unocss/cli": ^0.45.29 - "@unocss/reset": ^0.45.29 - "@vercel/og": ^0.0.15 + "@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.1 + "@vitest/coverage-c8": ^0.24.3 "@vscode/codicons": ^0.0.32 ariakit: ^2.0.0-next.41 cmdk: ^0.1.20 concurrently: ^7.4.0 cross-env: ^7.0.3 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 - happy-dom: ^7.5.6 + happy-dom: ^7.6.0 meilisearch: ^0.28.0 next: ^12.3.1 next-mdx-remote: ^4.1.0 @@ -2409,11 +2411,11 @@ __metadata: react: ^18.2.0 react-custom-scrollbars-2: ^4.5.0 react-dom: ^18.2.0 - react-icons: ^4.4.0 + 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.3.2 + rehype-pretty-code: ^0.4.0 rehype-raw: ^6.1.1 rehype-slug: ^5.0.1 remark-gfm: ^3.0.1 @@ -2421,9 +2423,9 @@ __metadata: shiki: ^0.11.1 swr: ^1.3.0 typescript: ^4.8.4 - unocss: ^0.45.29 - vercel: ^28.4.9 - vitest: ^0.24.1 + unocss: ^0.45.30 + vercel: ^28.4.12 + vitest: ^0.24.3 languageName: unknown linkType: soft @@ -2435,50 +2437,50 @@ __metadata: "@discordjs/rest": "workspace:^" "@discordjs/util": "workspace:^" "@favware/cliff-jumper": ^1.8.8 - "@microsoft/api-extractor": ^7.32.0 + "@microsoft/api-extractor": ^7.33.4 "@sapphire/async-queue": ^1.5.0 - "@types/node": 16.11.64 + "@types/node": 16.11.68 "@types/ws": ^8.5.3 - "@vitest/coverage-c8": ^0.24.1 + "@vitest/coverage-c8": ^0.24.3 "@vladfrangu/async_event_emitter": ^2.1.2 cross-env: ^7.0.3 - discord-api-types: ^0.37.13 + discord-api-types: ^0.37.15 esbuild-plugin-version-injector: ^1.0.0 eslint: ^8.25.0 - eslint-config-neon: ^0.1.38 + eslint-config-neon: ^0.1.39 eslint-formatter-pretty: ^4.1.0 mock-socket: ^9.1.5 prettier: ^2.7.1 tslib: ^2.4.0 - tsup: ^6.2.3 + tsup: ^6.3.0 typescript: ^4.8.4 undici: ^5.11.0 - vitest: ^0.24.1 + vitest: ^0.24.3 ws: ^8.9.0 zlib-sync: ^0.1.7 languageName: unknown linkType: soft -"@edge-runtime/format@npm:1.1.0-beta.33": - version: 1.1.0-beta.33 - resolution: "@edge-runtime/format@npm:1.1.0-beta.33" - checksum: 507f772a80b3c89ecc6f4ef569c63d180d82a1060798b513b741dd925a2e57054c9a5940eeaf6a4a5647c590ae6d9449d1f5460eebc23ff807624dc4ce4e09f3 +"@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 languageName: node linkType: hard -"@edge-runtime/primitives@npm:1.1.0-beta.36": - version: 1.1.0-beta.36 - resolution: "@edge-runtime/primitives@npm:1.1.0-beta.36" - checksum: c168824e5ce7c6fa89c86acbdfda4eb2e63d11622027b66bf078cf86519a58d49aca0ec6cab48639b28032ffef2b8b2bfb9d346edf735d20c9d839eae7e9a591 +"@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 languageName: node linkType: hard -"@edge-runtime/vm@npm:1.1.0-beta.36": - version: 1.1.0-beta.36 - resolution: "@edge-runtime/vm@npm:1.1.0-beta.36" +"@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" dependencies: - "@edge-runtime/primitives": 1.1.0-beta.36 - checksum: bdfdd69dee0063cf50dd2a0b547bb6050d4159fa87023112afcb1b1cd106d7dc1000db0aed0927050f580ff9335fffcb53d7141fb13ab20859ec721a5726db1a + "@edge-runtime/primitives": 1.1.0-beta.37 + checksum: 05419ebd835c37ee7bf0d892106fc10e258c411ad9a62d2a6fe43da5bbf3b4957df2f1ce14cd6493249c89c186707aa7ed30329a34c1d28228a74cfc59efabaa languageName: node linkType: hard @@ -2507,14 +2509,14 @@ __metadata: languageName: node linkType: hard -"@es-joy/jsdoccomment@npm:~0.31.0": - version: 0.31.0 - resolution: "@es-joy/jsdoccomment@npm:0.31.0" +"@es-joy/jsdoccomment@npm:~0.33.0": + version: 0.33.0 + resolution: "@es-joy/jsdoccomment@npm:0.33.0" dependencies: comment-parser: 1.3.1 esquery: ^1.4.0 jsdoc-type-pratt-parser: ~3.1.0 - checksum: 1691ff501559f45593e5f080d2c08dea4fadba5f48e526b9ff2943c050fbb40408f5e83968542e5b6bf47219c7573796d00bfe80dacfd1ba8187904cc475cefb + checksum: fe91f9d236fbae44b752b65d95fc6174f89f9b90b9a4cc270247f1f64ed1fe50b438f01303738677ee8c18e5746266bd65e3cba68708bf8190d503039e417f45 languageName: node linkType: hard @@ -2698,50 +2700,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.1.2": - version: 29.1.2 - resolution: "@jest/console@npm:29.1.2" +"@jest/console@npm:^29.2.1": + version: 29.2.1 + resolution: "@jest/console@npm:29.2.1" dependencies: - "@jest/types": ^29.1.2 + "@jest/types": ^29.2.1 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.1.2 - jest-util: ^29.1.2 + jest-message-util: ^29.2.1 + jest-util: ^29.2.1 slash: ^3.0.0 - checksum: cb67e35a4e780062fbb776580e7a9a5a464ced103f356a2ae6753366bfcadf5d532da61368642bc2b0e511db1a46ef4bdf39fe1f1543a7788478daf314b93cd4 + checksum: b5f08dc60c32a0212d27782cda86dfeba6d53f24cd023e6e52257224948a17eec77db55782ba1b18e37f10b7ba2481464e6c658bafaba6f8f8f129f1e95c3496 languageName: node linkType: hard -"@jest/core@npm:^29.1.2": - version: 29.1.2 - resolution: "@jest/core@npm:29.1.2" +"@jest/core@npm:^29.2.1": + version: 29.2.1 + resolution: "@jest/core@npm:29.2.1" dependencies: - "@jest/console": ^29.1.2 - "@jest/reporters": ^29.1.2 - "@jest/test-result": ^29.1.2 - "@jest/transform": ^29.1.2 - "@jest/types": ^29.1.2 + "@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 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^29.0.0 - jest-config: ^29.1.2 - jest-haste-map: ^29.1.2 - jest-message-util: ^29.1.2 - jest-regex-util: ^29.0.0 - jest-resolve: ^29.1.2 - jest-resolve-dependencies: ^29.1.2 - jest-runner: ^29.1.2 - jest-runtime: ^29.1.2 - jest-snapshot: ^29.1.2 - jest-util: ^29.1.2 - jest-validate: ^29.1.2 - jest-watcher: ^29.1.2 + jest-changed-files: ^29.2.0 + jest-config: ^29.2.1 + jest-haste-map: ^29.2.1 + jest-message-util: ^29.2.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 micromatch: ^4.0.4 - pretty-format: ^29.1.2 + pretty-format: ^29.2.1 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -2749,19 +2751,19 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: a986c0a1a9beb64fceb3fe7c2f0a1c1f8bd1f214a5ab37a53072d7073e5a4932738ad6396c5a95dc365720f27bbe2e2e6ff193b411b0dafe7a8bf25b4ad0925e + checksum: 849f9287a0d32b92c052a59de47d4b483c47f45463a94cb3156ecb869a41cc829b8ecdb1de8638b629b16b6e4cb2bd0d03e1d18590c4bfbe73b8fbbd6072d045 languageName: node linkType: hard -"@jest/environment@npm:^29.1.2": - version: 29.1.2 - resolution: "@jest/environment@npm:29.1.2" +"@jest/environment@npm:^29.2.1": + version: 29.2.1 + resolution: "@jest/environment@npm:29.2.1" dependencies: - "@jest/fake-timers": ^29.1.2 - "@jest/types": ^29.1.2 + "@jest/fake-timers": ^29.2.1 + "@jest/types": ^29.2.1 "@types/node": "*" - jest-mock: ^29.1.2 - checksum: 084614290016788807753965d35afe6b06c217f8b896139f766a603dc2d38ffdcb40563cf1510fd5c1168a6eaa97cc12d5bbe878c3ad25a34c942f06b1ddff23 + jest-mock: ^29.2.1 + checksum: 632d023c9e514a3d5647cbc7bc27a97113ef1647d9c7e205f90e0af359804dc7eaddfe43928b6180f2fc4914761878e671edcccacca4012e2e9f594979adbfac languageName: node linkType: hard @@ -2774,51 +2776,60 @@ __metadata: languageName: node linkType: hard -"@jest/expect@npm:^29.1.2": - version: 29.1.2 - resolution: "@jest/expect@npm:29.1.2" +"@jest/expect-utils@npm:^29.2.1": + version: 29.2.1 + resolution: "@jest/expect-utils@npm:29.2.1" dependencies: - expect: ^29.1.2 - jest-snapshot: ^29.1.2 - checksum: e7c5db9f95210d1769064cbb1cb4f35c10a37c38d51764f8baf5c10e343475a8e5c49e62af230e4e427ea9e7dcfb92c7d0ee2695177949bf4280933731f0e9b4 + jest-get-type: ^29.2.0 + checksum: 7e6e156f452330b64983f8169f2cd1f378129090d02ad097ef89dadfc78269501991d6d6daf91058ef4334fd9f5fc1a6389d887bbebfe7e4ad1ec58ea78e9f93 languageName: node linkType: hard -"@jest/fake-timers@npm:^29.1.2": - version: 29.1.2 - resolution: "@jest/fake-timers@npm:29.1.2" +"@jest/expect@npm:^29.2.1": + version: 29.2.1 + resolution: "@jest/expect@npm:29.2.1" dependencies: - "@jest/types": ^29.1.2 + expect: ^29.2.1 + jest-snapshot: ^29.2.1 + checksum: c64b939200e88b947c4e1209fbfd3d54f0f24ad1cd1d5882e0238631a7839f96c3e513c802610b039ab2d2ed6024834c6de002b639d3afa8ad077364ef08ab75 + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.2.1": + version: 29.2.1 + resolution: "@jest/fake-timers@npm:29.2.1" + dependencies: + "@jest/types": ^29.2.1 "@sinonjs/fake-timers": ^9.1.2 "@types/node": "*" - jest-message-util: ^29.1.2 - jest-mock: ^29.1.2 - jest-util: ^29.1.2 - checksum: a5331ffdaaabeaded69b41f46ec85f8768fbfa5d3953be24111b2849a93626c851c6ebbb64ae718ab9ebea86c21083702985caeb2812f51941b111a9ead377e1 + jest-message-util: ^29.2.1 + jest-mock: ^29.2.1 + jest-util: ^29.2.1 + checksum: e4f42a2677b91fed6e59ca466de2247bca5767c4922b5edb67ce34d47477757599f2760c3abae3d76e65917ac60c876223ac2c9d3f06d4f2a49d4be7e076f9bb languageName: node linkType: hard -"@jest/globals@npm:^29.1.2": - version: 29.1.2 - resolution: "@jest/globals@npm:29.1.2" +"@jest/globals@npm:^29.2.1": + version: 29.2.1 + resolution: "@jest/globals@npm:29.2.1" dependencies: - "@jest/environment": ^29.1.2 - "@jest/expect": ^29.1.2 - "@jest/types": ^29.1.2 - jest-mock: ^29.1.2 - checksum: 4baffd630ed6b4748d980bb57142dbe624b59f139c9e278dd1ee0916e574c5322e2aeb0c44059d70c67d594072024811c6577e736bfffddc1f6b8696d3188d4e + "@jest/environment": ^29.2.1 + "@jest/expect": ^29.2.1 + "@jest/types": ^29.2.1 + jest-mock: ^29.2.1 + checksum: 42046693669009a4ac890578e18544433effeaa760e60e3fc7360ab197ebf7b66bf7fce11f1143e43e665d1801108ae9a3588f5ec95d518ca9664e7f8098a4a3 languageName: node linkType: hard -"@jest/reporters@npm:^29.1.2": - version: 29.1.2 - resolution: "@jest/reporters@npm:29.1.2" +"@jest/reporters@npm:^29.2.1": + version: 29.2.1 + resolution: "@jest/reporters@npm:29.2.1" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.1.2 - "@jest/test-result": ^29.1.2 - "@jest/transform": ^29.1.2 - "@jest/types": ^29.1.2 + "@jest/console": ^29.2.1 + "@jest/test-result": ^29.2.1 + "@jest/transform": ^29.2.1 + "@jest/types": ^29.2.1 "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 @@ -2831,20 +2842,19 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.1.2 - jest-util: ^29.1.2 - jest-worker: ^29.1.2 + jest-message-util: ^29.2.1 + jest-util: ^29.2.1 + jest-worker: ^29.2.1 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 - terminal-link: ^2.0.0 v8-to-istanbul: ^9.0.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: node-notifier: optional: true - checksum: 0447ae768ff303605926494db48f683fca780d363337372ac93a8a4a60cef4cfceb7c63e6580e67122d19c711dc32d3f15dc984632aadbf7b113408b9942abe7 + checksum: 8f6419d67ba9c4f33ff01d8fa506538f32f4edd32df806a496c705858712405e6930b6064ac54cfe7b1c01a447d2feb46e8be69eb2e655e8b5f497e77ee79777 languageName: node linkType: hard @@ -2866,61 +2876,61 @@ __metadata: languageName: node linkType: hard -"@jest/source-map@npm:^29.0.0": - version: 29.0.0 - resolution: "@jest/source-map@npm:29.0.0" +"@jest/source-map@npm:^29.2.0": + version: 29.2.0 + resolution: "@jest/source-map@npm:29.2.0" dependencies: "@jridgewell/trace-mapping": ^0.3.15 callsites: ^3.0.0 graceful-fs: ^4.2.9 - checksum: dd97bc5826cf68d6eb5565383816332f800476232fd12800bd027a259cbf3ef216f1633405f3ad0861dde3b12a7886301798c078b334f6d3012044d43abcf4f6 + checksum: 09f76ab63d15dcf44b3035a79412164f43be34ec189575930f1a00c87e36ea0211ebd6a4fbe2253c2516e19b49b131f348ddbb86223ca7b6bbac9a6bc76ec96e languageName: node linkType: hard -"@jest/test-result@npm:^29.1.2": - version: 29.1.2 - resolution: "@jest/test-result@npm:29.1.2" +"@jest/test-result@npm:^29.2.1": + version: 29.2.1 + resolution: "@jest/test-result@npm:29.2.1" dependencies: - "@jest/console": ^29.1.2 - "@jest/types": ^29.1.2 + "@jest/console": ^29.2.1 + "@jest/types": ^29.2.1 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 6086cc518155565ec37a27659669a48e41cf80bb47b6bb080eed74dd744dbc87bfb00904bf63eba00ad9c36be908c6fa615bd29b00d59746b7d5c8a33b5493cb + checksum: 8f5f069dcfd54413559544f164950503d6cef587e3596a134a868c11e6b3fe6a99cc691732027500c962bdd22bc46685798b006a5b542359b30883e0d2489615 languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.1.2": - version: 29.1.2 - resolution: "@jest/test-sequencer@npm:29.1.2" +"@jest/test-sequencer@npm:^29.2.1": + version: 29.2.1 + resolution: "@jest/test-sequencer@npm:29.2.1" dependencies: - "@jest/test-result": ^29.1.2 + "@jest/test-result": ^29.2.1 graceful-fs: ^4.2.9 - jest-haste-map: ^29.1.2 + jest-haste-map: ^29.2.1 slash: ^3.0.0 - checksum: 5e084063192b311a2ee12cbbe43f79204c5a91e9359eeea644fcad5ab4540ceedf280d7c5a746429b6ac6dabfe178c53024daa414faf35eccfb6bc40c530f736 + checksum: ff73ce30d51e3304986097a5e02f24c60bc6f8246a7b3a1d35f898bd6b9515c576c2fce98dd6a605b885c8c0fea34e135420eb6e6a6d6656b74bed8ff280fe45 languageName: node linkType: hard -"@jest/transform@npm:^29.1.2": - version: 29.1.2 - resolution: "@jest/transform@npm:29.1.2" +"@jest/transform@npm:^29.2.1": + version: 29.2.1 + resolution: "@jest/transform@npm:29.2.1" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^29.1.2 + "@jest/types": ^29.2.1 "@jridgewell/trace-mapping": ^0.3.15 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 convert-source-map: ^1.4.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.1.2 - jest-regex-util: ^29.0.0 - jest-util: ^29.1.2 + jest-haste-map: ^29.2.1 + jest-regex-util: ^29.2.0 + jest-util: ^29.2.1 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 write-file-atomic: ^4.0.1 - checksum: af1c4c0d13e4b4308628bfc27b93c4129a4c1def3cca21f9f78b49d7ec6f32d432f07ef027e930bd28e7025252f5ce71175cb8d2a8fcdcbbb0f931380bde500c + checksum: bb50bfce34d8c648475a7d65e91787a0232cdcc0445331dba8d3d80180dff1b43d97872568be795c8f92d419b3f0e6114297349cc892fdf50e8471cb227f674a languageName: node linkType: hard @@ -2938,6 +2948,20 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^29.2.1": + version: 29.2.1 + resolution: "@jest/types@npm:29.2.1" + dependencies: + "@jest/schemas": ^29.0.0 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: a83f20727425179aa05974aa7553c307d207fbb6b7ae5ab1e37fbb6ba9b6655f26655301fc804f2545d33f4c4a6b59d41eed1737c005d2b83fce9e14841b4150 + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.1.0": version: 0.1.1 resolution: "@jridgewell/gen-mapping@npm:0.1.1" @@ -3020,9 +3044,9 @@ __metadata: languageName: node linkType: hard -"@ladle/react@npm:^2.4.3": - version: 2.4.3 - resolution: "@ladle/react@npm:2.4.3" +"@ladle/react@npm:^2.4.5": + version: 2.4.5 + resolution: "@ladle/react@npm:2.4.5" dependencies: "@babel/code-frame": ^7.18.6 "@babel/core": ^7.18.13 @@ -3064,7 +3088,7 @@ __metadata: react-dom: ">=16.14.0" bin: ladle: lib/cli/cli.js - checksum: aad781b2a7fc67069b6aca514334887674c4f5302291658b5a3ad9097c7842255a9db7e57a21bf97fd0e0cfc980d5fac0b5ee430d29aee428bf9966a7bd8192b + checksum: 26c37787bc086fbacc95ec17302c78d3e75e47b5f75f846507de5452f1fced52c77437467e5bf63df671dec1b3a71760454700d37d6af050fb8925bc305adc38 languageName: node linkType: hard @@ -3156,27 +3180,27 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.24.4": - version: 7.24.4 - resolution: "@microsoft/api-extractor-model@npm:7.24.4" +"@microsoft/api-extractor-model@npm:7.25.1": + version: 7.25.1 + resolution: "@microsoft/api-extractor-model@npm:7.25.1" dependencies: "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.53.1 - checksum: 17fc07d245e8c9b3ada7ea9920871416d2ecf62d80bd5868b5193c331e684ea9fca9ecec397043ebf61a52b5d87f2bf2dcec2d546eb94e083171aee871799067 + "@rushstack/node-core-library": 3.53.2 + checksum: fd63f794358b92de84dda95c545ad8147ebd0c71bb4aff63d2ef4f727243d5de7251aa3301f3f917dda1e84248683d9a569a5aa884124fc1f1f6e40444ba8633 languageName: node linkType: hard -"@microsoft/api-extractor@npm:^7.32.0, @microsoft/api-extractor@npm:^7.32.1": - version: 7.32.1 - resolution: "@microsoft/api-extractor@npm:7.32.1" +"@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" dependencies: - "@microsoft/api-extractor-model": 7.24.4 + "@microsoft/api-extractor-model": 7.25.1 "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.53.1 + "@rushstack/node-core-library": 3.53.2 "@rushstack/rig-package": 0.3.17 - "@rushstack/ts-command-line": 4.12.5 + "@rushstack/ts-command-line": 4.13.0 colors: ~1.2.1 lodash: ~4.17.15 resolve: ~1.17.0 @@ -3185,7 +3209,7 @@ __metadata: typescript: ~4.8.4 bin: api-extractor: bin/api-extractor - checksum: b1aacf29b391103774008b07a513e6e4d7643d4ecf1ba19f666a938c15c96571f092a1aa290c5dc2f6736b9372891bf638a6f0e95a86f6af70d3f6da4bba86c2 + checksum: 9462c36c00b3b718ddc00a3cee98236c1ec322244a677485ccec00f7bc2d487ac0e08610870db3aa72eb18eabd7d918c9e7f9909383b4eb56eb055471895c72b languageName: node linkType: hard @@ -3670,7 +3694,7 @@ __metadata: languageName: node linkType: hard -"@rollup/pluginutils@npm:^4.0.0, @rollup/pluginutils@npm:^4.2.1": +"@rollup/pluginutils@npm:^4.0.0": version: 4.2.1 resolution: "@rollup/pluginutils@npm:4.2.1" dependencies: @@ -3680,6 +3704,22 @@ __metadata: languageName: node linkType: hard +"@rollup/pluginutils@npm:^5.0.1": + version: 5.0.1 + resolution: "@rollup/pluginutils@npm:5.0.1" + 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: c96c8041436842d6a13dfb5ef066625185546b93da2b0a1b135c19b2722d073a5075a842240531a12befb0d05d1856a270f00a655014bd54cfe19c8279ed5322 + languageName: node + linkType: hard + "@rushstack/eslint-patch@npm:^1.2.0": version: 1.2.0 resolution: "@rushstack/eslint-patch@npm:1.2.0" @@ -3703,9 +3743,9 @@ __metadata: languageName: node linkType: hard -"@rushstack/node-core-library@npm:3.53.1, @rushstack/node-core-library@npm:^3.53.0": - version: 3.53.1 - resolution: "@rushstack/node-core-library@npm:3.53.1" +"@rushstack/node-core-library@npm:3.53.2, @rushstack/node-core-library@npm:^3.53.2": + version: 3.53.2 + resolution: "@rushstack/node-core-library@npm:3.53.2" dependencies: "@types/node": 12.20.24 colors: ~1.2.1 @@ -3715,7 +3755,7 @@ __metadata: resolve: ~1.17.0 semver: ~7.3.0 z-schema: ~5.0.2 - checksum: 71a9b8745d146656675d5611aa0b7081642fd1a286e4d09f8bd13166de4fd7ad17b16f6e00b1861593489cc3198e897edb2a9943cd0ef9bb4ccc66418c1a8f7f + checksum: eca9ef5dd099649c7e54ac7c6f1019c831e9405ce66210f76d6a597d83341bcd8de197d69539042029ea8aa9862e0515b8102e16a4980c66812f599f7c63479d languageName: node linkType: hard @@ -3729,15 +3769,15 @@ __metadata: languageName: node linkType: hard -"@rushstack/ts-command-line@npm:4.12.5": - version: 4.12.5 - resolution: "@rushstack/ts-command-line@npm:4.12.5" +"@rushstack/ts-command-line@npm:4.13.0": + version: 4.13.0 + resolution: "@rushstack/ts-command-line@npm:4.13.0" dependencies: "@types/argparse": 1.0.38 argparse: ~1.0.9 colors: ~1.2.1 string-argv: ~0.3.1 - checksum: 4da741e10382b119d46e3fcdbc2daf0747c63f98c97d44c354b45da1f7e31e7ccf45753668fe636f515663930340e4ac2c0535f2178130e04ce1714d4b8dd688 + checksum: a5b488d51f5d06bdb1e4aa03d6826049187adc00ddb5aad4e7559f48981d036fb5811f03572831f8026e87c262422ef9afb7c90a0d05130bdb80b239db02f415 languageName: node linkType: hard @@ -4177,13 +4217,13 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^29.1.2": - version: 29.1.2 - resolution: "@types/jest@npm:29.1.2" +"@types/jest@npm:^29.2.0": + version: 29.2.0 + resolution: "@types/jest@npm:29.2.0" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: a6761b5ac132c641740886f9c0714607255ebffb6add5989f51ea9e392fc3c5cd474e7590f12b003d5b67ce177dfbc8d3d60d0baa335c48c50deeee6b755a473 + checksum: 6779e63d8d7507b116a61b2935a200e48531849fc1ac74090212759fe17716777ca6d2c3a8d927a563e9cfa474ae91d40b1688376ae80e3a08974b3c9e9691e1 languageName: node linkType: hard @@ -4308,10 +4348,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:16.11.64": - version: 16.11.64 - resolution: "@types/node@npm:16.11.64" - checksum: 3634477efbeb586f8cdc1baf7670d8ea89c1eba1beac0354fa9123ca193d794da84ec40d4f8a54f694587ba5469e4124ebbba37542ed88eca95a3980ec45551a +"@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 languageName: node linkType: hard @@ -4329,13 +4369,6 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^16.11.52": - version: 16.11.65 - resolution: "@types/node@npm:16.11.65" - checksum: 81d84cb1e7aa305574cd35acf1a5e47f4a7f52783ba096f4bc511314540dee33a27cbd4fddc8bddd4535f1c87a96a76907157bcde093a25c89e8851d6dd63022 - languageName: node - linkType: hard - "@types/node@npm:^8.0.0": version: 8.10.66 resolution: "@types/node@npm:8.10.66" @@ -4464,6 +4497,13 @@ __metadata: languageName: node linkType: hard +"@types/semver@npm:^7.3.12": + version: 7.3.12 + resolution: "@types/semver@npm:7.3.12" + checksum: 35536b2fc5602904f21cae681f6c9498e177dab3f54ae37c92f9a1b7e43c35f18bcd81e1c98c1cf0d33ee046bb06c771e9928c1c00a401d56a03f56549252a15 + languageName: node + linkType: hard + "@types/stack-utils@npm:^2.0.0": version: 2.0.1 resolution: "@types/stack-utils@npm:2.0.1" @@ -4529,13 +4569,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.39.0": - version: 5.40.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.40.0" +"@typescript-eslint/eslint-plugin@npm:^5.40.1": + version: 5.40.1 + resolution: "@typescript-eslint/eslint-plugin@npm:5.40.1" dependencies: - "@typescript-eslint/scope-manager": 5.40.0 - "@typescript-eslint/type-utils": 5.40.0 - "@typescript-eslint/utils": 5.40.0 + "@typescript-eslint/scope-manager": 5.40.1 + "@typescript-eslint/type-utils": 5.40.1 + "@typescript-eslint/utils": 5.40.1 debug: ^4.3.4 ignore: ^5.2.0 regexpp: ^3.2.0 @@ -4547,7 +4587,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: ac9e8fcea3545eb33353373c5094fd0a7b79647b37066adbcbd8edcb6fc17c6a601fd0e1b8db0a39200e8238acb33d4b1b036bfe09ebb9899cfb43f6c271a8fd + checksum: 61f19bde0f1206beb20aeb28d18c1ef26a98cf4d2ead9f1d2f204cb91af31582eb5ee9422fe5f92d6aa10cebf85cd50f1b41e8cf8ce65808e2208664c3b1d66a languageName: node linkType: hard @@ -4562,20 +4602,20 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.39.0": - version: 5.40.0 - resolution: "@typescript-eslint/parser@npm:5.40.0" +"@typescript-eslint/parser@npm:^5.40.1": + version: 5.40.1 + resolution: "@typescript-eslint/parser@npm:5.40.1" dependencies: - "@typescript-eslint/scope-manager": 5.40.0 - "@typescript-eslint/types": 5.40.0 - "@typescript-eslint/typescript-estree": 5.40.0 + "@typescript-eslint/scope-manager": 5.40.1 + "@typescript-eslint/types": 5.40.1 + "@typescript-eslint/typescript-estree": 5.40.1 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: a8d02950dd12fcb1d19ad5f24cbfd186ca88d8a099160f93f99767896a45198a9f9bfbdd1a57c1ae50d452e6c895ae5b4d7e4623dfc87bca55a45c5ba16491f8 + checksum: 9fe410c1b14934803bb7c26de9b8de5d46ef9b6fe5dcbee1d7e111f0259659c214549b60dacdc729a3e23da835e6a44f08a9aa6bcb73ffff3c4fd5b9142358ed languageName: node linkType: hard @@ -4599,6 +4639,16 @@ __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" + dependencies: + "@typescript-eslint/types": 5.40.1 + "@typescript-eslint/visitor-keys": 5.40.1 + checksum: 5f25b86bfd09fbf8cdfdf932eaf0b41a7594c9b4539d3c8321f882bf7b4bf486454256fdb9a5a8c4eae305419d377fa93d382f80004711d759ff77b3d565c1dc + 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" @@ -4616,12 +4666,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.40.0": - version: 5.40.0 - resolution: "@typescript-eslint/type-utils@npm:5.40.0" +"@typescript-eslint/type-utils@npm:5.40.1": + version: 5.40.1 + resolution: "@typescript-eslint/type-utils@npm:5.40.1" dependencies: - "@typescript-eslint/typescript-estree": 5.40.0 - "@typescript-eslint/utils": 5.40.0 + "@typescript-eslint/typescript-estree": 5.40.1 + "@typescript-eslint/utils": 5.40.1 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -4629,7 +4679,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: eabe86de93b0bd4bcbfb13cace097ff7addbd992c91b80c73bbaa677ce26f1c2abd1c63fe585f2fd9c80df07d3d54bd6e4a46aebc908cef0f870f1d6955d6b8a + checksum: 6771196b8f16f4893bae70aa1371ff004b0058e8edef9b935143e2f1272e471049e9c34beb1d625fb6423db95dd377e01e938b70dd4506fbf071566e2bfb574d languageName: node linkType: hard @@ -4647,6 +4697,13 @@ __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 + 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" @@ -4683,6 +4740,24 @@ __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" + dependencies: + "@typescript-eslint/types": 5.40.1 + "@typescript-eslint/visitor-keys": 5.40.1 + 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: d0426a55d24b76a3f042816dd8baaaa7a8da0158870bb08fff5a5524821c13ca196117dc269f098b8887ef75e01da1a498637153ab3c29c370ca356bfe4a1716 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:5.37.0": version: 5.37.0 resolution: "@typescript-eslint/utils@npm:5.37.0" @@ -4716,6 +4791,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:5.40.1": + version: 5.40.1 + resolution: "@typescript-eslint/utils@npm:5.40.1" + 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 + 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 + 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" @@ -4736,239 +4829,249 @@ __metadata: languageName: node linkType: hard -"@unocss/astro@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/astro@npm:0.45.29" +"@typescript-eslint/visitor-keys@npm:5.40.1": + version: 5.40.1 + resolution: "@typescript-eslint/visitor-keys@npm:5.40.1" dependencies: - "@unocss/core": 0.45.29 - "@unocss/reset": 0.45.29 - "@unocss/vite": 0.45.29 - checksum: 98ad78c1b8c2c841d4314dd6410dd5aea6947fbd3cf7089c67ba7f99d6eeb1a759febf3a76f5c290c0b6826c6986c7f805227503ee6a53a7ab39fac19a9f906e + "@typescript-eslint/types": 5.40.1 + eslint-visitor-keys: ^3.3.0 + checksum: b5dbf1e484ba2832ca1883ee9cf7da5967f70aa5624f3fb67f13c3be90a3770b0bb96e64ccfb0c31b5d8f80794b5727e14b6c0d8c5184634a686f0ea6e798772 languageName: node linkType: hard -"@unocss/cli@npm:0.45.29, @unocss/cli@npm:^0.45.29": - version: 0.45.29 - resolution: "@unocss/cli@npm:0.45.29" +"@unocss/astro@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/astro@npm:0.45.30" + dependencies: + "@unocss/core": 0.45.30 + "@unocss/reset": 0.45.30 + "@unocss/vite": 0.45.30 + checksum: 05a89f45494c71757308baad320717818733877cf67ef8ee73b45aa88b00de616d1539ba4cbb31f79a093012c7db201c9cb2f7dfa4abe92bcc5844257c1e8398 + 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" dependencies: "@ampproject/remapping": ^2.2.0 - "@rollup/pluginutils": ^4.2.1 - "@unocss/config": 0.45.29 - "@unocss/core": 0.45.29 - "@unocss/preset-uno": 0.45.29 + "@rollup/pluginutils": ^5.0.1 + "@unocss/config": 0.45.30 + "@unocss/core": 0.45.30 + "@unocss/preset-uno": 0.45.30 cac: ^6.7.14 chokidar: ^3.5.3 colorette: ^2.0.19 consola: ^2.15.3 fast-glob: ^3.2.12 - magic-string: ^0.26.6 + magic-string: ^0.26.7 pathe: ^0.3.9 perfect-debounce: ^0.1.3 bin: unocss: bin/unocss.mjs - checksum: 7f42774d7ca6af544c6eb09e1c850bd652a3ef679e81c7af4ba49258f688372e0f48fb995815c726acf9a20aa1e2b448923d53ca801484cc0927c149318295e6 + checksum: 393e16b1ff81b0d3ddaa58da10ca1b3eb2a3c3c77ea72b0cdadaebae52a383ae2395ef1767b603bdc220110d3d4e41d63d1233c5ce04bb3dd9f780266aac49fa languageName: node linkType: hard -"@unocss/config@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/config@npm:0.45.29" +"@unocss/config@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/config@npm:0.45.30" dependencies: - "@unocss/core": 0.45.29 + "@unocss/core": 0.45.30 unconfig: ^0.3.7 - checksum: c2aa9aaccf811f14d5515a50a88c84aef46298d7b33614a74e07088fbd5eb5a9cb276cbdca477f383e7b9304ff6652131b0c143f52f698d7b8d4fa80a80dc1ba + checksum: 6a206f9df9d2b51ad982757c8da170729e8f5e988f558078b7c630fd575bb417e286510ede1498aa159102e3985cea6dda133715d1638c564643fc9096c0bf13 languageName: node linkType: hard -"@unocss/core@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/core@npm:0.45.29" - checksum: 86706cdabd27e9c7fb7fb0ce3b433cbe7a815c22921dad38676a707312d28bcd380886066cfe42eda89bd0add067fe86300a273303b53f533bf0895e140c0f66 +"@unocss/core@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/core@npm:0.45.30" + checksum: 055062c5526e3841c3529bb3ac97cf36a8f458a7354c53919de9ff137303b72ec288fb55637edd4e40d6fac23550ec4359f284f750e08a0b8e648f2bc0bb00fd languageName: node linkType: hard -"@unocss/inspector@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/inspector@npm:0.45.29" +"@unocss/inspector@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/inspector@npm:0.45.30" dependencies: gzip-size: ^6.0.0 sirv: ^2.0.2 - checksum: af04bddb4ac53ca7bc3ea76a4c0724c43837d54eae93976d863d55d55b18a0c6be8770ea7b28e61d758424d1c6702ce2aea9edc16ed64ffbb1def9887bcbe9d8 + checksum: b18e07d858dd98ffb14dad5a23c23cd972bb2be0d548a1ec53aeb3e9bdcb92b66ba4b5b87549840e74f8e4246afe78997fffe8479510bc7ac8f35c2501c29c22 languageName: node linkType: hard -"@unocss/preset-attributify@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/preset-attributify@npm:0.45.29" +"@unocss/preset-attributify@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/preset-attributify@npm:0.45.30" dependencies: - "@unocss/core": 0.45.29 - checksum: 177a80001e5275fb304cebe7e799fd467211210d5adff060e017bbf914445b0927c8f4a1992dc191382c6edd088e2f95c898513b6f8df04c5ee603a91ea8793e + "@unocss/core": 0.45.30 + checksum: 6dc367819bc89b88df42a82918f42e35b20324ea07eefd27b421bc28508ca7c321c6d204d6de18643c8b1859685dcfc2beccc42e75d95b4650bcaa7742f09a6e languageName: node linkType: hard -"@unocss/preset-icons@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/preset-icons@npm:0.45.29" +"@unocss/preset-icons@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/preset-icons@npm:0.45.30" dependencies: "@iconify/utils": ^2.0.1 - "@unocss/core": 0.45.29 - ohmyfetch: ^0.4.19 - checksum: 8e7de7d776947dcd7475696d701c68f3d75cadc40f02b89c6fae4fb19baff1569691a056c9b6633ae271789a7155a7cc3ec2beb2e3195ceb64b220f24967dc59 + "@unocss/core": 0.45.30 + ohmyfetch: ^0.4.20 + checksum: 9631ecd7fd7de45543dd10801f6de64982944098c463877b23984b5d1b90dc186dbac35e8ac1596a50a8861c708d8b8d6631a81d79253a0ddba57a9b152a2105 languageName: node linkType: hard -"@unocss/preset-mini@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/preset-mini@npm:0.45.29" +"@unocss/preset-mini@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/preset-mini@npm:0.45.30" dependencies: - "@unocss/core": 0.45.29 - checksum: 7e25ab5c0ca33532859390110e28976b0088b7676fd93b1acdcbfc88ba34d00d575ff470c94c386b2b72f667ff21363e512439e9004f6e0f08b83ca32bcc402f + "@unocss/core": 0.45.30 + checksum: 518099e2c570ac42a95e9af21c576c55ba3811f172dfa4a83e419579d8ef431abd2fd59214122315377379f89662f893b8cd3c2246dd1aba5781057d400131b9 languageName: node linkType: hard -"@unocss/preset-tagify@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/preset-tagify@npm:0.45.29" +"@unocss/preset-tagify@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/preset-tagify@npm:0.45.30" dependencies: - "@unocss/core": 0.45.29 - checksum: ac5a72fc12fad7c4267d56f2a4062e30243cdf1414a386fff3d85a1f519cefbb002d9de4fb99eddb127f2bf86e944c83b7f8d66e620aadb4bc967603acdfad8f + "@unocss/core": 0.45.30 + checksum: 8bd6cc3771f3c7d09c3ef881f9bd373ba7e00df95a4cfdd59ef0e9c5f5190903f2aa3842b5d50810f7376171e125e35bfe8d5da72bf58588c8e20fb5f53fac7a languageName: node linkType: hard -"@unocss/preset-typography@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/preset-typography@npm:0.45.29" +"@unocss/preset-typography@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/preset-typography@npm:0.45.30" dependencies: - "@unocss/core": 0.45.29 - checksum: 4ea6704f1d4238c7639dfae9a2825021bc7fe4e119111c806f1843bcb2e7aaf49bd567307b5e305669714d20a00b853f8942d6a35430ff444cf9b33d7b40e71b + "@unocss/core": 0.45.30 + checksum: c78ac33ad88fccdf252f6e13ce3d77c86521a7d84df066848ffda9bc3667a625a4d92987054ef3ad579ba389bb3e46c5a957f0a504dd230d64140a2e819265a8 languageName: node linkType: hard -"@unocss/preset-uno@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/preset-uno@npm:0.45.29" +"@unocss/preset-uno@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/preset-uno@npm:0.45.30" dependencies: - "@unocss/core": 0.45.29 - "@unocss/preset-mini": 0.45.29 - "@unocss/preset-wind": 0.45.29 - checksum: 0a30467d85ffcc52cf2444fda0fadc085b1f88125a1b1b800b8a0d85265ad6cf32720f65d79aca1230b2cae2ea46cc81914ba3e731229c96cad7708bea3b428f + "@unocss/core": 0.45.30 + "@unocss/preset-mini": 0.45.30 + "@unocss/preset-wind": 0.45.30 + checksum: 66d781aedacb2106fccfc6d1221991fa27d702794e05b5e01773676d63873c2c15a7193b460a650bcb536ef4c82623fdf3e5b85066082c194c30970567992dae languageName: node linkType: hard -"@unocss/preset-web-fonts@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/preset-web-fonts@npm:0.45.29" +"@unocss/preset-web-fonts@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/preset-web-fonts@npm:0.45.30" dependencies: - "@unocss/core": 0.45.29 - ohmyfetch: ^0.4.19 - checksum: 8b4378748c060a92fdb3df306e24a8a36143d4a4836628a0c6f2c6cb9249dde5277bde0c746ae225afea281a7e54275bfe8e7a54940fe969ce6e7263c415e513 + "@unocss/core": 0.45.30 + ohmyfetch: ^0.4.20 + checksum: c2fca321c6e727edb928ff6d99683f2fff2a83fc8a96cfbc1fdbfc87f3626f0af234310206cc412ba09fa173f637142db0ffc53f0b513de74827bbb09598ec06 languageName: node linkType: hard -"@unocss/preset-wind@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/preset-wind@npm:0.45.29" +"@unocss/preset-wind@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/preset-wind@npm:0.45.30" dependencies: - "@unocss/core": 0.45.29 - "@unocss/preset-mini": 0.45.29 - checksum: 424832325dea56af5e40efe9cbb6f8231ebe2392468ad1c04e8f588024aade2b1e7fadc5e19c7c0484eaa0370c138393fda7a5355486299aeeca237340fa41b6 + "@unocss/core": 0.45.30 + "@unocss/preset-mini": 0.45.30 + checksum: 93e73dfa503f3070f68ec14719311e1b5f8b23905b05c6ff7936c5e48e95ee32d90cad50922b82f9eb190d58499e1c29a8fa3fc1d7a2099393d59b9c636a5000 languageName: node linkType: hard -"@unocss/reset@npm:0.45.29, @unocss/reset@npm:^0.45.29": - version: 0.45.29 - resolution: "@unocss/reset@npm:0.45.29" - checksum: 016ca010935e9f281e81d35f4daeea4c4766239382099952d71af925aa4e0d641d298452f0dff8b3801f18d43856b3745436f49f9d62898a7c498ac4c561b395 +"@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 languageName: node linkType: hard -"@unocss/scope@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/scope@npm:0.45.29" - checksum: d224e903dd55cbffcac2ba6b4f7035643ed43413c307d399e1093dcf213e4d62769f6ab1f14135fa5ae29b6689ea40faa1aec091cd611f7a1de96eca665fec95 +"@unocss/scope@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/scope@npm:0.45.30" + checksum: 3dd2df49ab40cd8f6b9684b0b157ddadbc5710e1d9510de9258746773212a5ad74fdf1e00e3fb12df3fae75a93adae9b041e1a06639f87ec1d2ed924654765cb languageName: node linkType: hard -"@unocss/transformer-attributify-jsx@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/transformer-attributify-jsx@npm:0.45.29" +"@unocss/transformer-attributify-jsx@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/transformer-attributify-jsx@npm:0.45.30" dependencies: - "@unocss/core": 0.45.29 - checksum: ebfd55ddf91d993fd19203273b9a887ea7e19145e73b86e50d17a020c448fe267be8f313a0bc7c18eaa22c5739215b93e737a27ce7d95e17dd69fc406c05ace6 + "@unocss/core": 0.45.30 + checksum: cb7901f2e221c99e6909de27d8925c5e548819495364212c7f600d8eeafa93283baa3fbbe6846c61450297eb4c4346cbd6e5174dd933fd0b36fa11519420c1a7 languageName: node linkType: hard -"@unocss/transformer-compile-class@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/transformer-compile-class@npm:0.45.29" +"@unocss/transformer-compile-class@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/transformer-compile-class@npm:0.45.30" dependencies: - "@unocss/core": 0.45.29 - checksum: 2af90f97cab9eb944a6585525b7821b1e1405cb06f34f2cb988a40afd4d87a95bdefd7a9f83c1733023f453436d5f589ab3313822cda389f0c9e4f726216aa2d + "@unocss/core": 0.45.30 + checksum: 3b371b37f6f66363e270af78322f6465ef34021aa01e619151f021e151262afcb4293904fb365dbea25225121757d5d7b8774ca9396c62e3a6d96ca8a927e4ce languageName: node linkType: hard -"@unocss/transformer-directives@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/transformer-directives@npm:0.45.29" +"@unocss/transformer-directives@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/transformer-directives@npm:0.45.30" dependencies: - "@unocss/core": 0.45.29 + "@unocss/core": 0.45.30 css-tree: ^2.2.1 - checksum: 6d080dff9a0ee789a9ec72613505b1fcc3adeb5fdf493d2e8e6ed06092cfd6db47d13aa3fb268c7c8263328babb85353740ce25c409a02e2a0ba60e3199bfa49 + checksum: 20f4018fa7bc7cb2d70e5a402221cd6a17c162fe4861e3a92c1d153fddf8720569cba1f5a29c81f8a86518d6bad215afdcdaae01f0b8ef3c7bf5065ce4756eb7 languageName: node linkType: hard -"@unocss/transformer-variant-group@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/transformer-variant-group@npm:0.45.29" +"@unocss/transformer-variant-group@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/transformer-variant-group@npm:0.45.30" dependencies: - "@unocss/core": 0.45.29 - checksum: 2a8ec07c612f37c40f9ff9bb929bb12ea2d786cea65ca85dd34a54af82066bd96b9379d941f4d5b2eaf1dbe0c29df44762b58f502a4b55ef76710c4a93383d38 + "@unocss/core": 0.45.30 + checksum: 472346216f6d0941530a8ef68d9755bb84e256ecdb7df735e604664174b9f448b6c8f171e02d62bd5572841a0242112a41dfda8ad3dd203ff5bb79cff8a4e1a7 languageName: node linkType: hard -"@unocss/vite@npm:0.45.29": - version: 0.45.29 - resolution: "@unocss/vite@npm:0.45.29" +"@unocss/vite@npm:0.45.30": + version: 0.45.30 + resolution: "@unocss/vite@npm:0.45.30" dependencies: "@ampproject/remapping": ^2.2.0 - "@rollup/pluginutils": ^4.2.1 - "@unocss/config": 0.45.29 - "@unocss/core": 0.45.29 - "@unocss/inspector": 0.45.29 - "@unocss/scope": 0.45.29 - "@unocss/transformer-directives": 0.45.29 - magic-string: ^0.26.6 + "@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 + magic-string: ^0.26.7 peerDependencies: vite: ^2.9.0 || ^3.0.0-0 - checksum: 5105c791c1e838e064021bce41e4c96001f47ff2de2c6565701527a824f63853f7221bc39aac929ee791220b43d1fe5858084d0d8007a60369404ce0b2209631 + checksum: 9e7a71b1037828cbc43dc2c32aef03805204d717a374fdb6afccb8753dc80fdffe82b247a54a4ae4b2af4c9b72ccf857c58892815ae4f2bb848f18180e8dc5ff languageName: node linkType: hard -"@vercel/build-utils@npm:5.5.4": - version: 5.5.4 - resolution: "@vercel/build-utils@npm:5.5.4" - checksum: f8862d1d9b77155b01ba56a03a12e1b34f09208bee72d4c71d0f9fc1b9972bba5e909e18bce84c7ab354314d6a738ea7c63f90d0f2b41344d1c206fdd799126f +"@vercel/build-utils@npm:5.5.5": + version: 5.5.5 + resolution: "@vercel/build-utils@npm:5.5.5" + checksum: fc4f65a3c5586e91f9df2a49ae40885b9b4d9c941f4077c0bb886260ec041cfe03143c8a1302ad8d9e2141f0ac113fdac2d69c766f5a578f2b32c31a1cfa59be languageName: node linkType: hard -"@vercel/go@npm:2.2.12": - version: 2.2.12 - resolution: "@vercel/go@npm:2.2.12" - checksum: e11c3c27e526462ac66114427f6e7afd7a045c691c84cd3f6261849e62b90e271cab3797a8e86031603880bcea6753265febe495ef27a400288f3ef80df17854 +"@vercel/go@npm:2.2.13": + version: 2.2.13 + resolution: "@vercel/go@npm:2.2.13" + checksum: 8474e55bf26c386cad1465a8f74b66cdb01663bd617d6501bff3bee296bd25dd5999e4b3184e3c0eaed7ce8ce5283cea1e83da2e22191d051575883182ce3204 languageName: node linkType: hard -"@vercel/hydrogen@npm:0.0.25": - version: 0.0.25 - resolution: "@vercel/hydrogen@npm:0.0.25" - checksum: 70b765f7dad3a573d4987dcaa9f75b6e6baf3f076d7bf499e51c6f59081fa8bdb0388731a318be1694cf7dc46ac94585d2f66d88a204f391984e34ce6b8fbc8c +"@vercel/hydrogen@npm:0.0.26": + version: 0.0.26 + resolution: "@vercel/hydrogen@npm:0.0.26" + checksum: 8f869ee8c3bb8903130c22290d9082c03e32819dfd0d0f9adc670eaac13b0b3695fb8146aca736f99d6758e091b96b88758cdf0d84958b46be0a24722e446b5e languageName: node linkType: hard -"@vercel/next@npm:3.2.4": - version: 3.2.4 - resolution: "@vercel/next@npm:3.2.4" - checksum: dfba4ffed9e91dae5a93972c0c5b4eed645d7decf3ccc04789a7ee22814792384dd10dc849b17b6ec4dd1e9ab87b3e457a7e5fd379d68c0ae9de4a82db8eb953 +"@vercel/next@npm:3.2.6": + version: 3.2.6 + resolution: "@vercel/next@npm:3.2.6" + checksum: 187ce93a7091585778e0033b3f9bf8f6f91c5338d778b0525cd019b5d5994441464875f8612f745e626db9268c7f376c2c8c0864f93d7a6d33a17436a6612e19 languageName: node linkType: hard @@ -5000,60 +5103,60 @@ __metadata: languageName: node linkType: hard -"@vercel/node@npm:2.5.23": - version: 2.5.23 - resolution: "@vercel/node@npm:2.5.23" +"@vercel/node@npm:2.5.26": + version: 2.5.26 + resolution: "@vercel/node@npm:2.5.26" dependencies: - "@edge-runtime/vm": 1.1.0-beta.36 + "@edge-runtime/vm": 1.1.0-beta.37 "@types/node": "*" - "@vercel/build-utils": 5.5.4 + "@vercel/build-utils": 5.5.5 "@vercel/node-bridge": 3.0.0 "@vercel/static-config": 2.0.3 - edge-runtime: 1.1.0-beta.37 + edge-runtime: 1.1.0-beta.40 esbuild: 0.14.47 exit-hook: 2.2.1 node-fetch: 2.6.7 ts-node: 8.9.1 typescript: 4.3.4 - checksum: 2471c1d1bd651427dabe3d3f598a6c3cbb1415fab637bf14536a54ada9077b8ac4287315da17d745c78d7a8f268c6753d66385ecae6472cf2205c51a5b41c91d + checksum: 00fcf151db51936d32fa5a35ea59f56e9e3f4310c61f31db409b16210e9493bc32e52f85ff9326bab5035c7375a0974110e557bc283b04f672de772fedd3da78 languageName: node linkType: hard -"@vercel/og@npm:^0.0.15": - version: 0.0.15 - resolution: "@vercel/og@npm:0.0.15" +"@vercel/og@npm:^0.0.19": + version: 0.0.19 + resolution: "@vercel/og@npm:0.0.19" dependencies: "@resvg/resvg-wasm": 2.0.0-alpha.4 - satori: 0.0.38 + satori: 0.0.42 yoga-wasm-web: 0.1.2 - checksum: 4dbc5af8b7ea2a8b19ed7fa54ed790f7b2531d027a5bec494b3e12adf868150751b980034e70c1cb85437feb9dee24a5b5b52ed99190e844eb0b4e969446ccf2 + checksum: ab71223d1e9c172d2f058c15763018a88a154557e31dbfe85b1c99a3978f93634855c7b12af1dfe90baf2a7f15a3e367ecfb4deaca38adc6735f72c44e1f2be9 languageName: node linkType: hard -"@vercel/python@npm:3.1.21": - version: 3.1.21 - resolution: "@vercel/python@npm:3.1.21" - checksum: b4d3c9ba6176b25c01b88c49e99c0dcbc3bc492d33da5f944a717560a30c41a6bd6f6e4ea3bbf31d8f1f536fd6e1c9db2f6c0d8eabcb3873f07e8d88eafc16f5 +"@vercel/python@npm:3.1.22": + version: 3.1.22 + resolution: "@vercel/python@npm:3.1.22" + checksum: 43adaad331cf308ba3aad3ef073f115bb8543a8b715f6761debe2c3b55ac3e9c4bb200b5ebea77ec6440a629be879d32e92fcf010288447e3fd1083405d83749 languageName: node linkType: hard -"@vercel/redwood@npm:1.0.30": - version: 1.0.30 - resolution: "@vercel/redwood@npm:1.0.30" +"@vercel/redwood@npm:1.0.31": + version: 1.0.31 + resolution: "@vercel/redwood@npm:1.0.31" dependencies: "@vercel/nft": 0.22.1 "@vercel/routing-utils": 2.0.2 semver: 6.1.1 - checksum: 4d25e8bf0e4f8dae1eef783ffd2e1b9bd2abf5604dccac7ed688921f9ebeca09b10b76b2e4095e2c9b78aec31b7ea5318413bc5e183dd5c1d77588255fbf1482 + checksum: 476f7f987c214e027748537e2d3bd0ade934bdb7042d03b24c80f05bc3623751212bb408349f368e0a2928c98bd9903d4754e39ab3a27692785d1478b47a8463 languageName: node linkType: hard -"@vercel/remix@npm:1.0.31": - version: 1.0.31 - resolution: "@vercel/remix@npm:1.0.31" +"@vercel/remix@npm:1.0.32": + version: 1.0.32 + resolution: "@vercel/remix@npm:1.0.32" dependencies: "@vercel/nft": 0.22.1 - checksum: 851b4931ab0213e63aa8d488adde59516e2c1f551fcc12a38dc17f7280799640641a04b35eae2031bfca9b5b5dc21a829fde8490072c311d30e852ff919a1a50 + checksum: 580519818ac3c832841a3fdc98f3ded98e1bf109e613bbff5ab2c6669071e261032e8f58df43d2c9e9fe74332633d3d03b5acf575589a95434f927dd4e20f573 languageName: node linkType: hard @@ -5070,17 +5173,17 @@ __metadata: languageName: node linkType: hard -"@vercel/ruby@npm:1.3.38": - version: 1.3.38 - resolution: "@vercel/ruby@npm:1.3.38" - checksum: ab67636172aeb5986036b89b4ba8e5319986aff80ca58937b575bd3ba05f1d076fffaef9cc94c02d99ea4ec32880fa5f4ad005d4f1ce77ea06added9596a99d1 +"@vercel/ruby@npm:1.3.39": + version: 1.3.39 + resolution: "@vercel/ruby@npm:1.3.39" + checksum: 7567560b7677b5639f1097b416b4fa2ce52890e142f40dcb583d3ee098fe29ac3fc862212408d3396b3430633f9a91928e00c6196196801f937bfc45f3866509 languageName: node linkType: hard -"@vercel/static-build@npm:1.0.30": - version: 1.0.30 - resolution: "@vercel/static-build@npm:1.0.30" - checksum: f59a3283300c64a6a26c60bf4eb2e4db20fdd1b6a7e11f8a9b00020503263768c9f8ef2fc4ebc3429a6a5a7c1f17ee0fcddf819979a626ca1307b32c4708c8d7 +"@vercel/static-build@npm:1.0.32": + version: 1.0.32 + resolution: "@vercel/static-build@npm:1.0.32" + checksum: 6a47f04044157c8a38259e0f53f771cef2091c1023d2c19c309034d9580b0362f16527dc051eac325942a5f9df452e1d4eb2cf2a33a634a2e088c1be1989858c languageName: node linkType: hard @@ -5112,23 +5215,13 @@ __metadata: languageName: node linkType: hard -"@vitest/coverage-c8@npm:^0.22.1": - version: 0.22.1 - resolution: "@vitest/coverage-c8@npm:0.22.1" - dependencies: - c8: ^7.12.0 - vitest: 0.22.1 - checksum: 141c10127a556ff32e43c6d92a468d800d7c62c767feef1a4123e204a07b58456b410efdba720fa3035639903098dc12767602aa7dabadd40e2d60abc0b008f1 - languageName: node - linkType: hard - -"@vitest/coverage-c8@npm:^0.24.1": - version: 0.24.1 - resolution: "@vitest/coverage-c8@npm:0.24.1" +"@vitest/coverage-c8@npm:^0.24.3": + version: 0.24.3 + resolution: "@vitest/coverage-c8@npm:0.24.3" dependencies: c8: ^7.12.0 - vitest: 0.24.1 - checksum: bf30aab6f3f41915472566ee6780958bd53787218198f5a424099ac9922559b84f45ca52816ba80af7179baa75f229fa4b5a53f8d447065a8a3356de797c90e9 + vitest: 0.24.3 + checksum: 75f79fcf7cee7dbdfa4b8978aa80d791288e5975ed6ca723d8b4985ea744c3b022138075065058a9a679346910ae054e23f6ee922b779e8f6e7b88baf0a496fa languageName: node linkType: hard @@ -5719,9 +5812,9 @@ __metadata: languageName: node linkType: hard -"astro-compress@npm:^1.0.11": - version: 1.0.11 - resolution: "astro-compress@npm:1.0.11" +"astro-compress@npm:^1.0.12": + version: 1.0.12 + resolution: "astro-compress@npm:1.0.12" dependencies: csso: 5.0.5 deepmerge-ts: 4.2.2 @@ -5730,7 +5823,7 @@ __metadata: sharp: 0.31.1 svgo: 2.8.0 terser: 5.15.1 - checksum: 2ed696d9153c39c6532b300d2759a5b6636c5c09701d472dd4e0d5c7a7290779c19f1dc3f1762db241137d3ee040068302b47a2394e85aa3bb3d06d0139e57cd + checksum: bbcdc12b1ee21d7b19c60de8c60f6a2bbb3242f6f4864099eede8947ed584ef87a6ad97d7f48446b077b548f62911a87e1110b679cbf5becf8a81c8b07070e1b languageName: node linkType: hard @@ -5759,11 +5852,11 @@ __metadata: languageName: node linkType: hard -"astro@npm:^1.4.7": - version: 1.4.7 - resolution: "astro@npm:1.4.7" +"astro@npm:^1.5.2": + version: 1.5.2 + resolution: "astro@npm:1.5.2" dependencies: - "@astrojs/compiler": ^0.26.0 + "@astrojs/compiler": ^0.27.1 "@astrojs/language-server": ^0.26.2 "@astrojs/markdown-remark": ^1.1.3 "@astrojs/telemetry": ^1.0.1 @@ -5784,6 +5877,7 @@ __metadata: common-ancestor-path: ^1.0.1 cookie: ^0.5.0 debug: ^4.3.4 + deepmerge-ts: ^4.2.2 diff: ^5.1.0 eol: ^0.9.1 es-module-lexer: ^0.10.5 @@ -5794,6 +5888,7 @@ __metadata: gray-matter: ^4.0.3 html-entities: ^2.3.3 html-escaper: ^3.0.3 + import-meta-resolve: ^2.1.0 kleur: ^4.1.4 magic-string: ^0.25.9 mime: ^3.0.0 @@ -5824,7 +5919,7 @@ __metadata: zod: ^3.17.3 bin: astro: astro.js - checksum: a4791867f567f9b7207fbfecee81e51ba79f4d21cb815f670523f1c3f4d0c0ddb9bf15f4f542eb573e5e73dc627af935fee4f881d1a598b0f0e8c541eeb37498 + checksum: 0893ee9880203ce0ff577c3ee66647912c56487ecfceb01d16dab857a023d14ddf39c2d0dd32fddd9ed2b0d1afa09291033ec13a028cea7ee9cba3476b806f23 languageName: node linkType: hard @@ -5899,20 +5994,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.1.2": - version: 29.1.2 - resolution: "babel-jest@npm:29.1.2" +"babel-jest@npm:^29.2.1": + version: 29.2.1 + resolution: "babel-jest@npm:29.2.1" dependencies: - "@jest/transform": ^29.1.2 + "@jest/transform": ^29.2.1 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.0.2 + babel-preset-jest: ^29.2.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 7180628db07516029390c1892bcea6adeb7b3b7a5bffa9b071ac0178502afc2eb6eb9934f20947b66a55feb75ad8e9aebe1360f6365259a0eb002ddf2bdca274 + checksum: c340c10d8cee4b3ef5990443627b5f70dbe2649faa1fef671c8b4fd4a9f8d559b78e5644e18de8063974cd6606033caf1afcaa52744309f6e3176c0b37c2e8f9 languageName: node linkType: hard @@ -5938,15 +6033,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^29.0.2": - version: 29.0.2 - resolution: "babel-plugin-jest-hoist@npm:29.0.2" +"babel-plugin-jest-hoist@npm:^29.2.0": + version: 29.2.0 + resolution: "babel-plugin-jest-hoist@npm:29.2.0" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: e02ab2c56b471940bc147d75808f6fb5d18b81382088beb36088d2fee8c5f9699b2a814a98884539191d43871d66770928e09c268c095ec39aad5766c3337f34 + checksum: 368d271ceae491ae6b96cd691434859ea589fbe5fd5aead7660df75d02394077273c6442f61f390e9347adffab57a32b564d0fabcf1c53c4b83cd426cb644072 languageName: node linkType: hard @@ -6008,15 +6103,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^29.0.2": - version: 29.0.2 - resolution: "babel-preset-jest@npm:29.0.2" +"babel-preset-jest@npm:^29.2.0": + version: 29.2.0 + resolution: "babel-preset-jest@npm:29.2.0" dependencies: - babel-plugin-jest-hoist: ^29.0.2 + babel-plugin-jest-hoist: ^29.2.0 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 485db525f4cd38c02c29edcd7240dd232e8d6dbcaef88bfa4765ad3057ed733512f1b7aad06f4bf9661afefeb0ada2c4e259d130113b0289d7db574f82bbd4f8 + checksum: 1b09a2db968c36e064daf98082cfffa39c849b63055112ddc56fc2551fd0d4783897265775b1d2f8a257960a3339745de92e74feb01bad86d41c4cecbfa854fc languageName: node linkType: hard @@ -7931,7 +8026,7 @@ __metadata: languageName: node linkType: hard -"deepmerge-ts@npm:4.2.2": +"deepmerge-ts@npm:4.2.2, deepmerge-ts@npm:^4.2.2": version: 4.2.2 resolution: "deepmerge-ts@npm:4.2.2" checksum: 137c3650519d9b1a220db7e23a3f56304cd02e7f97b2b8392e2767251055a29318425bacdb2ab2ff175a4645f7179643acf0e038d5dafbfdbc11bdf322f79697 @@ -8115,6 +8210,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^29.2.0": + version: 29.2.0 + resolution: "diff-sequences@npm:29.2.0" + checksum: e7b874cc7a4ce76fd199794c4d5fabb099ab4bce069592407ac2933e3a10e05f035111498e2f2c86572f5cfa9668a191b09e79f1d967dc39d9ca0a12aacde41a + languageName: node + linkType: hard + "diff@npm:^3.2.0": version: 3.5.0 resolution: "diff@npm:3.5.0" @@ -8154,10 +8256,10 @@ __metadata: languageName: node linkType: hard -"discord-api-types@npm:^0.37.13": - version: 0.37.13 - resolution: "discord-api-types@npm:0.37.13" - checksum: ff3fe9cc1bdeee93b76f6ac4fd76a5e204298cbb1e71b72bb0e21039a970689d675a6a935e45265287ff756a0973e1e8635829d719d9a01d95ab5b0c772e5d47 +"discord-api-types@npm:^0.37.15": + version: 0.37.15 + resolution: "discord-api-types@npm:0.37.15" + checksum: c54d2feeb8074509bdda430fb8ec0f6ff315512e7327d47399e0e7a78bbd0a6f0f0dcfc4b5e39825eb6141a13f33efa942711af89c9a5936a721cfc1e1d69d19 languageName: node linkType: hard @@ -8172,14 +8274,14 @@ __metadata: "@discordjs/util": "workspace:^" "@favware/cliff-jumper": ^1.8.8 "@sapphire/snowflake": ^3.2.2 - "@types/node": 16.11.64 + "@types/node": 16.11.68 "@types/ws": ^8.5.3 - discord-api-types: ^0.37.13 + discord-api-types: ^0.37.15 dtslint: ^4.2.1 eslint: ^8.25.0 eslint-formatter-pretty: ^4.1.0 fast-deep-equal: ^3.1.3 - jest: ^29.1.2 + jest: ^29.2.1 lodash.snakecase: ^4.1.1 prettier: ^2.7.1 tsd: ^0.24.1 @@ -8387,12 +8489,12 @@ __metadata: languageName: node linkType: hard -"edge-runtime@npm:1.1.0-beta.37": - version: 1.1.0-beta.37 - resolution: "edge-runtime@npm:1.1.0-beta.37" +"edge-runtime@npm:1.1.0-beta.40": + version: 1.1.0-beta.40 + resolution: "edge-runtime@npm:1.1.0-beta.40" dependencies: - "@edge-runtime/format": 1.1.0-beta.33 - "@edge-runtime/vm": 1.1.0-beta.36 + "@edge-runtime/format": 1.1.0-beta.34 + "@edge-runtime/vm": 1.1.0-beta.37 exit-hook: 2.2.1 http-status: 1.5.3 mri: 1.2.0 @@ -8402,7 +8504,7 @@ __metadata: time-span: 4.0.0 bin: edge-runtime: dist/cli/index.js - checksum: 4d65c4aa47ff05b80d0b2e33f7a8b3dbe9e5d7bbf5ef95744234cb6128a04bda9ac15043dbf387f45aa436c6ebda4f754f28f30056a7677557bbe3ec86b70a6e + checksum: 7094c8df29480a3eac05d7b2828e5a3c3a6139acc6df9b98d3087e43278af98d6ca4d168d8f8705d85f3aeb62dc7f196f4bda4c8f5f463fb3482dc0183f77ed1 languageName: node linkType: hard @@ -9309,40 +9411,40 @@ __metadata: languageName: node linkType: hard -"eslint-config-neon@npm:^0.1.38": - version: 0.1.38 - resolution: "eslint-config-neon@npm:0.1.38" +"eslint-config-neon@npm:^0.1.39": + version: 0.1.39 + resolution: "eslint-config-neon@npm:0.1.39" 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 "@rushstack/eslint-patch": ^1.2.0 - "@typescript-eslint/eslint-plugin": ^5.39.0 - "@typescript-eslint/parser": ^5.39.0 + "@typescript-eslint/eslint-plugin": ^5.40.1 + "@typescript-eslint/parser": ^5.40.1 astro-eslint-parser: ^0.7.2 eslint-config-prettier: ^8.5.0 eslint-plugin-astro: ^0.20.0 eslint-plugin-cypress: ^2.12.1 eslint-plugin-import: "npm:eslint-plugin-i@latest" - eslint-plugin-jest: ^27.1.1 - eslint-plugin-jsdoc: ^39.3.6 + eslint-plugin-jest: ^27.1.3 + eslint-plugin-jsdoc: ^39.3.14 eslint-plugin-jsx-a11y: ^6.6.1 eslint-plugin-lodash: ^7.4.0 eslint-plugin-n: ^15.3.0 - eslint-plugin-promise: ^6.0.1 - eslint-plugin-react: ^7.31.9 + eslint-plugin-promise: ^6.1.1 + eslint-plugin-react: ^7.31.10 eslint-plugin-react-hooks: ^4.6.0 eslint-plugin-rxjs: ^5.0.2 eslint-plugin-rxjs-angular: ^2.0.0 - eslint-plugin-sonarjs: ^0.15.0 + eslint-plugin-sonarjs: ^0.16.0 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 vue-eslint-parser: ^9.1.0 - checksum: 787df4db5b769a392ffe31005c57a570a225cd9de7004980daa6dd0aa90df583be03eafb98a0c38b052ca5c62c8151f3e715b1a48db7fc420f64425b893a5c41 + checksum: 8a4792fa90e7043c91906a3476a09b9c180217954a23970dce194ab8fe8751ea78349a1e36c91ca74ca019cb1c66aa2276932c12343890053b6afff4b34c0796 languageName: node linkType: hard @@ -9473,9 +9575,9 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^27.1.1": - version: 27.1.1 - resolution: "eslint-plugin-jest@npm:27.1.1" +"eslint-plugin-jest@npm:^27.1.3": + version: 27.1.3 + resolution: "eslint-plugin-jest@npm:27.1.3" dependencies: "@typescript-eslint/utils": ^5.10.0 peerDependencies: @@ -9486,24 +9588,24 @@ __metadata: optional: true jest: optional: true - checksum: 215a60d0c9ca641f3c1c7c5e4ff78093ad80c5f0ee22f44c50b9c8625ec0624ec4f47bf281684157f6231a4c480a4ca40bafad4ac6438a2105bb8527920e341f + checksum: 427f39ad4bb50b4e50a1f6aba04962ee3686e25b716d3e4dff47a304c2a352a35b032fec7350b84dc6362838525d93a70f7ae0f961b182c79bf602e90ebb1a55 languageName: node linkType: hard -"eslint-plugin-jsdoc@npm:^39.3.6": - version: 39.3.6 - resolution: "eslint-plugin-jsdoc@npm:39.3.6" +"eslint-plugin-jsdoc@npm:^39.3.14": + version: 39.3.14 + resolution: "eslint-plugin-jsdoc@npm:39.3.14" dependencies: - "@es-joy/jsdoccomment": ~0.31.0 + "@es-joy/jsdoccomment": ~0.33.0 comment-parser: 1.3.1 debug: ^4.3.4 escape-string-regexp: ^4.0.0 esquery: ^1.4.0 - semver: ^7.3.7 + semver: ^7.3.8 spdx-expression-parse: ^3.0.1 peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: 0825a5eba6cdcb250e45cd5ad488bd234da346f324a11160ad4b8c9fb3c76d8e1457d462fa91c24f11bdff5ef0013375d65c366b648202254c4bcc79eed89060 + checksum: 448cc78968a9d3481c21d1a2e99be4e8ccb73c9669ae0949df68957d8c219471501f68eb02095f869d91fde8c3d135563492fce5128523325d81dc5eb8112a15 languageName: node linkType: hard @@ -9559,12 +9661,12 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-promise@npm:^6.0.1": - version: 6.0.1 - resolution: "eslint-plugin-promise@npm:6.0.1" +"eslint-plugin-promise@npm:^6.1.1": + version: 6.1.1 + resolution: "eslint-plugin-promise@npm:6.1.1" peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: c1bb3c2e591787e97133dcaf764f908420a3a1959a3132e199db8f14d70dfa79fc9caf991ca60a4b60ae5f1f9823bc96c2e52304828a4278ef2f3964fe121de9 + checksum: 46b9a4f79dae5539987922afc27cc17cbccdecf4f0ba19c0ccbf911b0e31853e9f39d9959eefb9637461b52772afa1a482f1f87ff16c1ba38bdb6fcf21897e9a languageName: node linkType: hard @@ -9577,7 +9679,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.31.9": +"eslint-plugin-react@npm:^7.31.10": version: 7.31.10 resolution: "eslint-plugin-react@npm:7.31.10" dependencies: @@ -9637,12 +9739,12 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-sonarjs@npm:^0.15.0": - version: 0.15.0 - resolution: "eslint-plugin-sonarjs@npm:0.15.0" +"eslint-plugin-sonarjs@npm:^0.16.0": + version: 0.16.0 + resolution: "eslint-plugin-sonarjs@npm:0.16.0" peerDependencies: eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 0718232626057e9a30c58350ef79af3bbc5ea7c3a880d1609965b0c1cbe347e4834ddf831962f755464f7a6350cb715c1c76e2670dc7bdf1a48c37bf0fe269c8 + checksum: 8421059eb208da147fc5652aa8bbe2aeedd8b57e7f6810a27b6e33c3042a7066870d7647e125d3f9e6a28db4809976c1c260d98a13fcda2360f8b0ae7a416908 languageName: node linkType: hard @@ -9953,7 +10055,7 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:2.0.2, estree-walker@npm:^2.0.1": +"estree-walker@npm:2.0.2, estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" checksum: 6151e6f9828abe2259e57f5fd3761335bb0d2ebd76dc1a01048ccee22fabcfef3c0859300f6d83ff0d1927849368775ec5a6d265dde2f6de5a1be1721cd94efc @@ -10063,7 +10165,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.1.2": +"expect@npm:^29.0.0": version: 29.1.2 resolution: "expect@npm:29.1.2" dependencies: @@ -10076,6 +10178,19 @@ __metadata: languageName: node linkType: hard +"expect@npm:^29.2.1": + version: 29.2.1 + resolution: "expect@npm:29.2.1" + dependencies: + "@jest/expect-utils": ^29.2.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 + languageName: node + linkType: hard + "express@npm:^4.18.1": version: 4.18.2 resolution: "express@npm:4.18.2" @@ -11100,9 +11215,9 @@ __metadata: languageName: node linkType: hard -"happy-dom@npm:^7.5.6": - version: 7.5.6 - resolution: "happy-dom@npm:7.5.6" +"happy-dom@npm:^7.6.0": + version: 7.6.0 + resolution: "happy-dom@npm:7.6.0" dependencies: css.escape: ^1.5.1 he: ^1.2.0 @@ -11111,7 +11226,7 @@ __metadata: webidl-conversions: ^7.0.0 whatwg-encoding: ^2.0.0 whatwg-mimetype: ^3.0.0 - checksum: 2cce96d52e96e4093ee6d97525a8dc8b6917b6aef875bad7a5b7242061a0323a3452c8d62e808b6cc1f3474878daadbaedcfcf42a247b584dce2dfb0c4011772 + checksum: 96fd73ccea28edfbbe97bc900d358ac0bff340694ccdc4fb6b6cd45ab60701329c047f4c6071770f88d29b3b640d50d039772529df8042e12452e7f9a8204ce9 languageName: node linkType: hard @@ -12425,57 +12540,57 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^29.0.0": - version: 29.0.0 - resolution: "jest-changed-files@npm:29.0.0" +"jest-changed-files@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-changed-files@npm:29.2.0" dependencies: execa: ^5.0.0 p-limit: ^3.1.0 - checksum: 5642ace8cd1e7e4f9e3ee423b97d0b018b00ad85ea7e5864592b4657e8500ef56ec50d2189229b912223046bbf31c9196c8ef2442a917be9726a5911d40db1b2 + checksum: 8ad8290324db1de2ee3c9443d3e3fbfdcb6d72ec7054c5796be2854b2bc239dea38a7c797c8c9c2bd959f539d44305790f2f75b18f3046b04317ed77c7480cb1 languageName: node linkType: hard -"jest-circus@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-circus@npm:29.1.2" +"jest-circus@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-circus@npm:29.2.1" dependencies: - "@jest/environment": ^29.1.2 - "@jest/expect": ^29.1.2 - "@jest/test-result": ^29.1.2 - "@jest/types": ^29.1.2 + "@jest/environment": ^29.2.1 + "@jest/expect": ^29.2.1 + "@jest/test-result": ^29.2.1 + "@jest/types": ^29.2.1 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 is-generator-fn: ^2.0.0 - jest-each: ^29.1.2 - jest-matcher-utils: ^29.1.2 - jest-message-util: ^29.1.2 - jest-runtime: ^29.1.2 - jest-snapshot: ^29.1.2 - jest-util: ^29.1.2 + 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 p-limit: ^3.1.0 - pretty-format: ^29.1.2 + pretty-format: ^29.2.1 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 27893239ba0eba2b3a7c6778d0c5da22a443ce911f2b399a5216af722c0aca45090b392ee82db75fdcfc09526791df105523ce59a7dad376f12e36110a1d8dd1 + checksum: 3fe8bf27a42d25e68ba869fe5ef0103acf67294c3a2e63c0895b5efaa4ed7fcb35f8c14eeab1a7e6bdee0cb46740fe24177d581976391da740b468aa81bccbbb languageName: node linkType: hard -"jest-cli@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-cli@npm:29.1.2" +"jest-cli@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-cli@npm:29.2.1" dependencies: - "@jest/core": ^29.1.2 - "@jest/test-result": ^29.1.2 - "@jest/types": ^29.1.2 + "@jest/core": ^29.2.1 + "@jest/test-result": ^29.2.1 + "@jest/types": ^29.2.1 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.1.2 - jest-util: ^29.1.2 - jest-validate: ^29.1.2 + jest-config: ^29.2.1 + jest-util: ^29.2.1 + jest-validate: ^29.2.1 prompts: ^2.0.1 yargs: ^17.3.1 peerDependencies: @@ -12485,34 +12600,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 2962060e3e0c3d3578201d58afdf617dce5c48fc686ac7897fb39318598131925bec299a981f5ceda87be9eba52fd8023573d4119603234eb25370f5cb8d8462 + checksum: 6f190450a6cc462fdb63617ad6fa67fc5e0daaa2ea47e41e2fcc1b16d02886b5be9228066295ba51847be0aee1317dad71648e4ad3b5373f7db0ba93eb8e50f2 languageName: node linkType: hard -"jest-config@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-config@npm:29.1.2" +"jest-config@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-config@npm:29.2.1" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.1.2 - "@jest/types": ^29.1.2 - babel-jest: ^29.1.2 + "@jest/test-sequencer": ^29.2.1 + "@jest/types": ^29.2.1 + babel-jest: ^29.2.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.1.2 - jest-environment-node: ^29.1.2 - jest-get-type: ^29.0.0 - jest-regex-util: ^29.0.0 - jest-resolve: ^29.1.2 - jest-runner: ^29.1.2 - jest-util: ^29.1.2 - jest-validate: ^29.1.2 + jest-circus: ^29.2.1 + jest-environment-node: ^29.2.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 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.1.2 + pretty-format: ^29.2.1 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -12523,7 +12638,7 @@ __metadata: optional: true ts-node: optional: true - checksum: 095fdae03b0d856613dfc909182653c327c56378fe318ccac201f5ea7c414828856462039493ee973907260431524a648c8dd229c8db2df29e30a77d8b59d66e + checksum: a2052eb47d4cd964b1bb9e34cddf608bd252d185e58376c012447afb2fe6c93d17d452a0f38ce45b0621adaec60d68e6d3538146928bb7e5e553523f805dc80d languageName: node linkType: hard @@ -12551,39 +12666,51 @@ __metadata: languageName: node linkType: hard -"jest-docblock@npm:^29.0.0": - version: 29.0.0 - resolution: "jest-docblock@npm:29.0.0" +"jest-diff@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-diff@npm:29.2.1" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.2.0 + jest-get-type: ^29.2.0 + pretty-format: ^29.2.1 + checksum: e3553e5bf556b786b864e3da0ef0a2cde8b260a7bb281eaf47d34aee0bf303bf557bc75416c20f9454e2e1b6ac0ae53684d5be7af5cfc010dc08805bdcb3f457 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-docblock@npm:29.2.0" dependencies: detect-newline: ^3.0.0 - checksum: b4f81426cc0dffb05b873d3cc373a1643040be62d72cce4dfed499fbcb57c55ac02c44af7aba5e7753915ff5e85b8d6030456981156eaea20be1cb57d2719904 + checksum: b3f1227b7d73fc9e4952180303475cf337b36fa65c7f730ac92f0580f1c08439983262fee21cf3dba11429aa251b4eee1e3bc74796c5777116b400d78f9d2bbe languageName: node linkType: hard -"jest-each@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-each@npm:29.1.2" +"jest-each@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-each@npm:29.2.1" dependencies: - "@jest/types": ^29.1.2 + "@jest/types": ^29.2.1 chalk: ^4.0.0 - jest-get-type: ^29.0.0 - jest-util: ^29.1.2 - pretty-format: ^29.1.2 - checksum: 785c1b785c8ad9f7c712f0b0cc31f95cb8813bde59cd123d24d555f6fb18bd0a01328febfb6480e400b324566b5bd9084e86ffd4a86025265f32d36424cc1270 + jest-get-type: ^29.2.0 + jest-util: ^29.2.1 + pretty-format: ^29.2.1 + checksum: 877bd64a08ff4245400c4d84d65a6fb87898e53498b65f53915c7e66e66bf49a4559bc5ca584a3dab57251e88815f48c1053e40c0c1017fbb7d9813f40eb25b8 languageName: node linkType: hard -"jest-environment-node@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-environment-node@npm:29.1.2" +"jest-environment-node@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-environment-node@npm:29.2.1" dependencies: - "@jest/environment": ^29.1.2 - "@jest/fake-timers": ^29.1.2 - "@jest/types": ^29.1.2 + "@jest/environment": ^29.2.1 + "@jest/fake-timers": ^29.2.1 + "@jest/types": ^29.2.1 "@types/node": "*" - jest-mock: ^29.1.2 - jest-util: ^29.1.2 - checksum: 9af99f8ede5f99781dc88e5fef164292a95cb3b4291ed117c6755fb6048bd8b0a4b597efd87d673976c8a3d2f1d42265613dbfddef628bc9af290d303a061737 + jest-mock: ^29.2.1 + jest-util: ^29.2.1 + checksum: fc001e4292ae7516829008c1f030ff176cce9e63d845e3b209bf0c9088d32fc464174032fd41c7cf7c9899801033991aa7bd9f661729cb5691c9179b29188888 languageName: node linkType: hard @@ -12601,36 +12728,43 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-haste-map@npm:29.1.2" +"jest-get-type@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-get-type@npm:29.2.0" + checksum: e396fd880a30d08940ed8a8e43cd4595db1b8ff09649018eb358ca701811137556bae82626af73459e3c0f8c5e972ed1e57fd3b1537b13a260893dac60a90942 + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-haste-map@npm:29.2.1" dependencies: - "@jest/types": ^29.1.2 + "@jest/types": ^29.2.1 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 fb-watchman: ^2.0.0 fsevents: ^2.3.2 graceful-fs: ^4.2.9 - jest-regex-util: ^29.0.0 - jest-util: ^29.1.2 - jest-worker: ^29.1.2 + jest-regex-util: ^29.2.0 + jest-util: ^29.2.1 + jest-worker: ^29.2.1 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: 848f41046f3b587ae619b963859164e3220bf6811dcf3c23e198734aad892fff96210d5dd6b2cf5228dbe3dbc8102ee534b8264730e2c107598c50f048dfbf60 + checksum: 1880e5dd12b83c8ffbd527b80c81bd694a9018ed003d1ecc72ed4e1a0c2be0bc2a26a96c7439c4be8954912cd01ecaea807d2739b24d2ac7dd23f5aa672d9da1 languageName: node linkType: hard -"jest-leak-detector@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-leak-detector@npm:29.1.2" +"jest-leak-detector@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-leak-detector@npm:29.2.1" dependencies: - jest-get-type: ^29.0.0 - pretty-format: ^29.1.2 - checksum: 5a2de24ba80473754f926cbe0ca6c0fec59fa01a6c9b184190b2ef93be8e9c4a8e1f81d3daf2b4fa142f103b140d8c339fab639195a033d6d644031f060641f9 + jest-get-type: ^29.2.0 + pretty-format: ^29.2.1 + checksum: c30107ae583c7b1a30b8ac32f98997597ac5c46c243ef69a2b4bbaf803eefe0a696c6049a75434afdd0b0adbff418081a202903fcf00d38e4f8c1fe442c0f660 languageName: node linkType: hard @@ -12646,6 +12780,18 @@ __metadata: languageName: node linkType: hard +"jest-matcher-utils@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-matcher-utils@npm:29.2.1" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.2.1 + jest-get-type: ^29.2.0 + pretty-format: ^29.2.1 + checksum: d2a2f1ca8389e6ee529dc160786d912dec6cadfb395139fa1afa0f2e175775c7cf50dfe00981baae71ee0cbcab0d7f9f2d9cf9b9665dcda1d2cc04294fbd9979 + languageName: node + linkType: hard + "jest-message-util@npm:^29.1.2": version: 29.1.2 resolution: "jest-message-util@npm:29.1.2" @@ -12663,14 +12809,31 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-mock@npm:29.1.2" +"jest-message-util@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-message-util@npm:29.2.1" dependencies: - "@jest/types": ^29.1.2 + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.2.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 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 1ec1341dea7f0f04dfa9912647e5c4a092954c122becd9560e43e317407fd401745d99766048be7ee5f0b0b5ff09c84d3c853aa777af57139050efed0ad78376 + languageName: node + linkType: hard + +"jest-mock@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-mock@npm:29.2.1" + dependencies: + "@jest/types": ^29.2.1 "@types/node": "*" - jest-util: ^29.1.2 - checksum: 145817b10c79e8d1801dba8ae5c6e305f17f2497ed1eb9b54336fa7b448ffcafb2cc97b57cef650cc5b3f7d77a063d586b3d446bcd907161e2ca7e5d68184e8f + jest-util: ^29.2.1 + checksum: fb28fc277ed788fec45adb8ed1e45d6c7fc02938b5db2e87bfaccc83e385f6fcabfe3433562c50a051efffa02676c07e9e7fdc90d177be67d87a6831c5fc19fe languageName: node linkType: hard @@ -12686,102 +12849,102 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^29.0.0": - version: 29.0.0 - resolution: "jest-regex-util@npm:29.0.0" - checksum: dce16394c357213008e6f84f2288f77c64bba59b7cb48ea614e85c5aae036a7e46dbfd1f45aa08180b7e7c576102bf4f8f0ff8bc60fb9721fb80874adc3ae0ea +"jest-regex-util@npm:^29.2.0": + version: 29.2.0 + resolution: "jest-regex-util@npm:29.2.0" + checksum: 7c533e51c51230dac20c0d7395b19b8366cb022f7c6e08e6bcf2921626840ff90424af4c9b4689f02f0addfc9b071c4cd5f8f7a989298a4c8e0f9c94418ca1c3 languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-resolve-dependencies@npm:29.1.2" +"jest-resolve-dependencies@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-resolve-dependencies@npm:29.2.1" dependencies: - jest-regex-util: ^29.0.0 - jest-snapshot: ^29.1.2 - checksum: 6aee77d61ba57eb511fe4357c85019e3d15110638dd73c336cd9d28f2716b6d09ab3604db9a1240e91bbcdd93d6542e3ac736e768e2c49e3a58f8a43058da640 + jest-regex-util: ^29.2.0 + jest-snapshot: ^29.2.1 + checksum: d29908195298f3f3d22f4632bc6eecde89d586d8b8563539072ffbfc5e6ea8973051ef7cbc8336060fcd8b91ea2e42353e8e20958d1fa68dbd6e1c8511a68023 languageName: node linkType: hard -"jest-resolve@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-resolve@npm:29.1.2" +"jest-resolve@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-resolve@npm:29.2.1" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.1.2 + jest-haste-map: ^29.2.1 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.1.2 - jest-validate: ^29.1.2 + jest-util: ^29.2.1 + jest-validate: ^29.2.1 resolve: ^1.20.0 resolve.exports: ^1.1.0 slash: ^3.0.0 - checksum: 3b91f6197139e7f7a5ca5bcc9608054b675aada5083e4a2ef7afe75ce4b53724d64c03ade4a11b10578601268fa598f508aacf3cdbc3c118b57a2613f96cd072 + checksum: d9ea07ccfa91fcbc7461a0c90bdf9b928f86c9b5de0b01a0a5f73c55aa9cf4f6f7b00439248d4babb9a021070df08be8e4716bc3c73d91311719a400c76f9c82 languageName: node linkType: hard -"jest-runner@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-runner@npm:29.1.2" +"jest-runner@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-runner@npm:29.2.1" dependencies: - "@jest/console": ^29.1.2 - "@jest/environment": ^29.1.2 - "@jest/test-result": ^29.1.2 - "@jest/transform": ^29.1.2 - "@jest/types": ^29.1.2 + "@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 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.10.2 graceful-fs: ^4.2.9 - jest-docblock: ^29.0.0 - jest-environment-node: ^29.1.2 - jest-haste-map: ^29.1.2 - jest-leak-detector: ^29.1.2 - jest-message-util: ^29.1.2 - jest-resolve: ^29.1.2 - jest-runtime: ^29.1.2 - jest-util: ^29.1.2 - jest-watcher: ^29.1.2 - jest-worker: ^29.1.2 + 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 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: 717633249beaeefb3bb431558e356e03dd498102e8127fd20ab2a17cbe4bf04cd939cd10caf5abec6a093605da2322ab821b41b0599482d501f2ff0045ab63c5 + checksum: 5aaa04b80eb9d2c78cf5e0ae815a2b418ec5ab24e3fa0bd5a1fa17c886a4c5e9938f5d8508f2ac24ed9dc8cf93c0742c8e538ae31833ed3dfa9fe6e2bc612fa9 languageName: node linkType: hard -"jest-runtime@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-runtime@npm:29.1.2" - dependencies: - "@jest/environment": ^29.1.2 - "@jest/fake-timers": ^29.1.2 - "@jest/globals": ^29.1.2 - "@jest/source-map": ^29.0.0 - "@jest/test-result": ^29.1.2 - "@jest/transform": ^29.1.2 - "@jest/types": ^29.1.2 +"jest-runtime@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-runtime@npm:29.2.1" + dependencies: + "@jest/environment": ^29.2.1 + "@jest/fake-timers": ^29.2.1 + "@jest/globals": ^29.2.1 + "@jest/source-map": ^29.2.0 + "@jest/test-result": ^29.2.1 + "@jest/transform": ^29.2.1 + "@jest/types": ^29.2.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.1.2 - jest-message-util: ^29.1.2 - jest-mock: ^29.1.2 - jest-regex-util: ^29.0.0 - jest-resolve: ^29.1.2 - jest-snapshot: ^29.1.2 - jest-util: ^29.1.2 + jest-haste-map: ^29.2.1 + jest-message-util: ^29.2.1 + jest-mock: ^29.2.1 + jest-regex-util: ^29.2.0 + jest-resolve: ^29.2.1 + jest-snapshot: ^29.2.1 + jest-util: ^29.2.1 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: 88011109a85712bb9fc18bf910310eaf353706cf50a778b4c9da673929f4fac2b089c39d68a93eeb7fed99d880888568713b55494df7f7df52c05f303ec66372 + checksum: bfd535ece219f5a1e36758b51c498246e7aac63458a12cb85b3b2156a632d5ee802f43fdc566714fb36c12521589fe495727e9838cdae14b3369e122e44e8c2b languageName: node linkType: hard -"jest-snapshot@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-snapshot@npm:29.1.2" +"jest-snapshot@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-snapshot@npm:29.2.1" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 @@ -12789,25 +12952,25 @@ __metadata: "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.1.2 - "@jest/transform": ^29.1.2 - "@jest/types": ^29.1.2 + "@jest/expect-utils": ^29.2.1 + "@jest/transform": ^29.2.1 + "@jest/types": ^29.2.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.1.2 + expect: ^29.2.1 graceful-fs: ^4.2.9 - jest-diff: ^29.1.2 - jest-get-type: ^29.0.0 - jest-haste-map: ^29.1.2 - jest-matcher-utils: ^29.1.2 - jest-message-util: ^29.1.2 - jest-util: ^29.1.2 + jest-diff: ^29.2.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 natural-compare: ^1.4.0 - pretty-format: ^29.1.2 + pretty-format: ^29.2.1 semver: ^7.3.5 - checksum: fe2d57767cb12160f484e7e774c443aa8533248834deda7cb4f6fe666834ad2e87391ef124e4784afd061077e10eb440e74049be58bfd9d6e713072827edcfce + checksum: bb09952d13477f403d20c72803ea1b07e0ae7b7abb658bee0a03d3e16f75bb4c85502dbca1e3f5d8b3885063308b4a9acfdb0316339a16bfddd4907c7c79a662 languageName: node linkType: hard @@ -12825,33 +12988,47 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-validate@npm:29.1.2" +"jest-util@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-util@npm:29.2.1" dependencies: - "@jest/types": ^29.1.2 + "@jest/types": ^29.2.1 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 781bd14a65599d24b7449877020f4da32e8cb8fbc31c4e849c589ffde58f0eec27de9f690dba182e3ca369fe651c0bb9c307de29a0927d12777677ded56bafb8 + languageName: node + linkType: hard + +"jest-validate@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-validate@npm:29.2.1" + dependencies: + "@jest/types": ^29.2.1 camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^29.0.0 + jest-get-type: ^29.2.0 leven: ^3.1.0 - pretty-format: ^29.1.2 - checksum: e25dc8f87bf9536903b5b2aed740ef8b02c229d8512c635d0ac3112c241a1e488bf99ca98e6c0cc8e3619be782b2d77c05ee21a42ee5f997025a9631788fa4ea + pretty-format: ^29.2.1 + checksum: 33bf2671f9c72f542ac3847b62d96c6717dabab1738c172aef46de06c98ae4c78ed1972ca39c5b1360eaebe47460a39e1d04fd0f7e724241a648d33f3b4d0466 languageName: node linkType: hard -"jest-watcher@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-watcher@npm:29.1.2" +"jest-watcher@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-watcher@npm:29.2.1" dependencies: - "@jest/test-result": ^29.1.2 - "@jest/types": ^29.1.2 + "@jest/test-result": ^29.2.1 + "@jest/types": ^29.2.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.10.2 - jest-util: ^29.1.2 + jest-util: ^29.2.1 string-length: ^4.0.1 - checksum: 79577ff1dcf1a9c2bf0939f37f9ce23aa24f43eb337b33b04b017bb45151b7f79e7c64f888020caa38df5fba37f8915e4bde77514ccbbcdb4389aa5f7c67ab05 + checksum: c14224af26d1f8c4664d9731d28bb21a6959ce32c4a4ed76b21a5447eca9d635963db5e7a8dbc30df46535b5e4bad589092f47c26bfb705ed203ce80061e744f languageName: node linkType: hard @@ -12865,26 +13042,26 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.1.2": - version: 29.1.2 - resolution: "jest-worker@npm:29.1.2" +"jest-worker@npm:^29.2.1": + version: 29.2.1 + resolution: "jest-worker@npm:29.2.1" dependencies: "@types/node": "*" - jest-util: ^29.1.2 + jest-util: ^29.2.1 merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 788d14b2a051bf548a316dd177175c0e46127e63d794677fb0ba67e9b0b9f579cbc6a602a72671c80a020bf4d3f502b0a2dff7bf380986e5f30d30ec0f69168b + checksum: 10365612fae02412376e963de9f069d854deaf5aec8ff818ce49c299cd0373256a387a2da68db8225fb0f18483f2cc9072a52d1846881d44b756b1e36bc7f4ed languageName: node linkType: hard -"jest@npm:^29.1.2": - version: 29.1.2 - resolution: "jest@npm:29.1.2" +"jest@npm:^29.2.1": + version: 29.2.1 + resolution: "jest@npm:29.2.1" dependencies: - "@jest/core": ^29.1.2 - "@jest/types": ^29.1.2 + "@jest/core": ^29.2.1 + "@jest/types": ^29.2.1 import-local: ^3.0.2 - jest-cli: ^29.1.2 + jest-cli: ^29.2.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -12892,7 +13069,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 6b5fca89c6ad1a0c9338a70144542933ed3491d849b6256618ec8d3a420bc6e60ed2c5b952e452ee4bdeaf590bf4c81c6727581c71d6b989faa8dedd7b6e2905 + checksum: b19bf0b490b08c99ec221f9eb69302e02b8f220b080bde22032200b7638896a7d7ae2e559455859b7158e43d07454690b638dd4be5a35d33f00cc973da2da9aa languageName: node linkType: hard @@ -13719,7 +13896,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.26.2, magic-string@npm:^0.26.6": +"magic-string@npm:^0.26.2, magic-string@npm:^0.26.7": version: 0.26.7 resolution: "magic-string@npm:0.26.7" dependencies: @@ -15182,10 +15359,10 @@ __metadata: languageName: node linkType: hard -"node-fetch-native@npm:^0.1.5": - version: 0.1.7 - resolution: "node-fetch-native@npm:0.1.7" - checksum: 0e342f2e26b1c4970fc0c88469661813ad3f755df8ecd42cfacfc781e5a1a5de363fe50b9e9227d98a43368660e791af7a5f7a6566329caaeb7ea21017410539 +"node-fetch-native@npm:^0.1.8": + version: 0.1.8 + resolution: "node-fetch-native@npm:0.1.8" + checksum: 1cea29dc30e9b570b5510656f41050e7d2df70acc41937911d4374c404ac35b4592d6b6959a81f336f00f2d74b321d039b80d8a1b62eaaa395747733bc31c799 languageName: node linkType: hard @@ -15559,15 +15736,15 @@ __metadata: languageName: node linkType: hard -"ohmyfetch@npm:^0.4.19": - version: 0.4.19 - resolution: "ohmyfetch@npm:0.4.19" +"ohmyfetch@npm:^0.4.20": + version: 0.4.20 + resolution: "ohmyfetch@npm:0.4.20" dependencies: destr: ^1.1.1 - node-fetch-native: ^0.1.5 - ufo: ^0.8.5 - undici: ^5.10.0 - checksum: dbd3670f79c830c854fefedc113d5e750574fa09dbf6ffaa70733217486f534c3703be09fb8e566d0e335c74e1f705bb81671fb1b47f5db5ab348749d761c7e5 + node-fetch-native: ^0.1.8 + ufo: ^0.8.6 + undici: ^5.11.0 + checksum: dfaffa9f38bdcd6926281aaab9689a9dcdf9181c8d56a45278d7f6ed81d3c0ba3eed60e24078798c9e144b4ad348c92481dfcfb5106115d6864b4408dc7050f6 languageName: node linkType: hard @@ -16214,7 +16391,7 @@ __metadata: languageName: node linkType: hard -"prettier-plugin-astro@npm:^0.5.3, prettier-plugin-astro@npm:^0.5.5": +"prettier-plugin-astro@npm:^0.5.3": version: 0.5.5 resolution: "prettier-plugin-astro@npm:0.5.5" dependencies: @@ -16226,6 +16403,18 @@ __metadata: languageName: node linkType: hard +"prettier-plugin-astro@npm:^0.6.0": + version: 0.6.0 + resolution: "prettier-plugin-astro@npm:0.6.0" + dependencies: + "@astrojs/compiler": 0.27.2 + prettier: ^2.7.1 + sass-formatter: ^0.7.5 + synckit: ^0.8.4 + checksum: a2632b625e7fa048f6ddb522e0f2a20ad20b9215c83286b9450ee94271fd628747ea0ffd812dd626102a7d80599a549d2f18447ef481bf64140c93e9e649ca7c + languageName: node + linkType: hard + "prettier-plugin-tailwindcss@npm:^0.1.13": version: 0.1.13 resolution: "prettier-plugin-tailwindcss@npm:0.1.13" @@ -16285,6 +16474,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.2.1": + version: 29.2.1 + resolution: "pretty-format@npm:29.2.1" + dependencies: + "@jest/schemas": ^29.0.0 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: d192cbd3dee72e9b60764629d1f098d60fddc3fc9435f44774a01dd1c5794f36a81fa6a7377a527f994317950d8fc6c5bf9c9915387c5d32f107525996e32a1c + languageName: node + linkType: hard + "pretty-ms@npm:7.0.1": version: 7.0.1 resolution: "pretty-ms@npm:7.0.1" @@ -16622,12 +16822,12 @@ __metadata: languageName: node linkType: hard -"react-icons@npm:^4.4.0": - version: 4.4.0 - resolution: "react-icons@npm:4.4.0" +"react-icons@npm:^4.6.0": + version: 4.6.0 + resolution: "react-icons@npm:4.6.0" peerDependencies: react: "*" - checksum: dd93a1dcc8ac8a3cf46a2b33e80b586fa967331fa5fcb90d061abf276155a8363a331643e203d67cb9bab4261d00a757da854bcce1fce2c6e4258bf3e33f711b + checksum: a08375d4563e381e156d826a8d551dd26c1bf7c424a79139173bf4c8df71e884badd7d4f5fe9faa0d73d18ace265bcc89891b65fd8f808812b1011b612ebbc53 languageName: node linkType: hard @@ -17124,14 +17324,14 @@ __metadata: languageName: node linkType: hard -"rehype-pretty-code@npm:^0.3.2": - version: 0.3.2 - resolution: "rehype-pretty-code@npm:0.3.2" +"rehype-pretty-code@npm:^0.4.0": + version: 0.4.0 + resolution: "rehype-pretty-code@npm:0.4.0" dependencies: parse-numeric-range: ^1.3.0 peerDependencies: shiki: "*" - checksum: 7d5f5dc4758e65f4a141bb22fe6863d3d7f1e9b1712fab5bde3a0e5611c89cc4d5945fda59b5d51f993404785d62c1dcac14ccc368ac7892fbed8cee026c843b + checksum: 1d6f45b06cac20958a03d16c27b09ccd5b3f89fe4bc7047052ee9b3005e464ec69b3efafe8382f01b7e5d1e24f1262963ce1a7e26f00e770b49945b2c20a200e languageName: node linkType: hard @@ -17758,9 +17958,9 @@ __metadata: languageName: node linkType: hard -"satori@npm:0.0.38": - version: 0.0.38 - resolution: "satori@npm:0.0.38" +"satori@npm:0.0.42": + version: 0.0.42 + resolution: "satori@npm:0.0.42" dependencies: "@shuding/opentype.js": 1.4.0-beta.0 css-background-parser: ^0.1.0 @@ -17768,7 +17968,7 @@ __metadata: css-to-react-native: ^3.0.0 postcss-value-parser: ^4.2.0 yoga-layout-prebuilt: ^1.10.0 - checksum: 42b3cdb665326b7d5f66d64a58bc701b630a550b5e14eef7e6640e4c1d7b37f841f868f9d4776ab23a8f09cabca4ce8ee3c6245f21c9e61e20fc1fe33d9a0d32 + checksum: 31287c9f9991f9a61de2d67e2d777db9188e6bea3eee02bd6d6f3018d27b200831183afb4e4113659275370b80b281667dc61f87a8e3ea50d6729479b9b6f863 languageName: node linkType: hard @@ -17824,7 +18024,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 >=2.2.1 || 3.x || 4 || 5 || 7, semver@npm:^7.0.0, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.6, semver@npm:^7.3.7, semver@npm:~7.3.0": +"semver@npm:2 >=2.2.1 || 3.x || 4 || 5 || 7, semver@npm:^7.0.0, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.6, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:~7.3.0": version: 7.3.8 resolution: "semver@npm:7.3.8" dependencies: @@ -18881,7 +19081,7 @@ __metadata: languageName: node linkType: hard -"synckit@npm:^0.8.0": +"synckit@npm:^0.8.0, synckit@npm:^0.8.4": version: 0.8.4 resolution: "synckit@npm:0.8.4" dependencies: @@ -18974,16 +19174,6 @@ __metadata: languageName: node linkType: hard -"terminal-link@npm:^2.0.0": - version: 2.1.1 - resolution: "terminal-link@npm:2.1.1" - dependencies: - ansi-escapes: ^4.2.1 - supports-hyperlinks: ^2.0.0 - checksum: ce3d2cd3a438c4a9453947aa664581519173ea40e77e2534d08c088ee6dda449eabdbe0a76d2a516b8b73c33262fedd10d5270ccf7576ae316e3db170ce6562f - languageName: node - linkType: hard - "terser@npm:5.15.1, terser@npm:^5.14.2": version: 5.15.1 resolution: "terser@npm:5.15.1" @@ -19156,13 +19346,6 @@ __metadata: languageName: node linkType: hard -"tinypool@npm:^0.2.4": - version: 0.2.4 - resolution: "tinypool@npm:0.2.4" - checksum: f050bd36c89529a2a0d3f9c1fdbba3f317114e3ee6eb5d5ba72c51e887d45ef3ef8d8533fb2ca2eba7189d19d2231712b81b3a75e099248532f5563369929c33 - languageName: node - linkType: hard - "tinypool@npm:^0.3.0": version: 0.3.0 resolution: "tinypool@npm:0.3.0" @@ -19564,9 +19747,9 @@ __metadata: languageName: node linkType: hard -"tsup@npm:^6.2.3": - version: 6.2.3 - resolution: "tsup@npm:6.2.3" +"tsup@npm:^6.3.0": + version: 6.3.0 + resolution: "tsup@npm:6.3.0" dependencies: bundle-require: ^3.1.0 cac: ^6.7.12 @@ -19596,7 +19779,7 @@ __metadata: bin: tsup: dist/cli-default.js tsup-node: dist/cli-node.js - checksum: f1cb8f4f83a4a304f61d57dc62fb7176d1fa8842485a7dec4c3fd7cb98e169dbdc4bf52c45ff8cede6843b791fe4a0f70579b34684f568af3c2c3cb2f8469af4 + checksum: f1fccd555a77ff82b3b3d4ce28188f5703695af5e9d593a4edcfc3807cbebb5b04e619ad9ae0b0c92830cbbcbf6d76356365a8986ebe82d7389151a4f66a6c49 languageName: node linkType: hard @@ -19830,9 +20013,9 @@ __metadata: languageName: node linkType: hard -"typedoc@npm:^0.23.16": - version: 0.23.16 - resolution: "typedoc@npm:0.23.16" +"typedoc@npm:^0.23.17": + version: 0.23.17 + resolution: "typedoc@npm:0.23.17" dependencies: lunr: ^2.3.9 marked: ^4.0.19 @@ -19842,7 +20025,7 @@ __metadata: typescript: 4.6.x || 4.7.x || 4.8.x bin: typedoc: bin/typedoc - checksum: 3574ee4a5fe3ca485b8a7d18cbe745bffe6d21886fcbc09c59551d0442d90b6391d435b06245199293914500c4f237fd0e7cc3eec678f1f8ee796b88b3d96089 + checksum: 9bfcfa762205f42645a5c545cf75399346663209e1f91f3e630880a6f48a5676a2efab23305df7aca69c6fe19bd4b1c42470bf39b95a369811f6eb4d5a8549e8 languageName: node linkType: hard @@ -19914,10 +20097,10 @@ __metadata: languageName: node linkType: hard -"ufo@npm:^0.8.5": - version: 0.8.5 - resolution: "ufo@npm:0.8.5" - checksum: 4dcf657a906550112ab1eb045110ebb768a914fb653373a2c363776a1f6ba25ea9d20bd5ed7f4bb44fb72bd4421b37d62991cd5ce4e3a2aef7e3eae450bb9508 +"ufo@npm:^0.8.6": + version: 0.8.6 + resolution: "ufo@npm:0.8.6" + checksum: 5d483576230c7bfa2c9c9e5d864995e18d6c08ee3955c2237cc1a0d4b35a52991a0f5d26fe8cbf11952109a925a88dc14d973e0d14159b5b96b0fe7393a52899 languageName: node linkType: hard @@ -19960,7 +20143,7 @@ __metadata: languageName: node linkType: hard -"undici@npm:^5.10.0, undici@npm:^5.11.0": +"undici@npm:^5.11.0": version: 5.11.0 resolution: "undici@npm:5.11.0" dependencies: @@ -20241,33 +20424,33 @@ __metadata: languageName: node linkType: hard -"unocss@npm:^0.45.29": - version: 0.45.29 - resolution: "unocss@npm:0.45.29" - dependencies: - "@unocss/astro": 0.45.29 - "@unocss/cli": 0.45.29 - "@unocss/core": 0.45.29 - "@unocss/preset-attributify": 0.45.29 - "@unocss/preset-icons": 0.45.29 - "@unocss/preset-mini": 0.45.29 - "@unocss/preset-tagify": 0.45.29 - "@unocss/preset-typography": 0.45.29 - "@unocss/preset-uno": 0.45.29 - "@unocss/preset-web-fonts": 0.45.29 - "@unocss/preset-wind": 0.45.29 - "@unocss/reset": 0.45.29 - "@unocss/transformer-attributify-jsx": 0.45.29 - "@unocss/transformer-compile-class": 0.45.29 - "@unocss/transformer-directives": 0.45.29 - "@unocss/transformer-variant-group": 0.45.29 - "@unocss/vite": 0.45.29 +"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 peerDependencies: - "@unocss/webpack": 0.45.29 + "@unocss/webpack": 0.45.30 peerDependenciesMeta: "@unocss/webpack": optional: true - checksum: 753c4befcb749535531234b3a711124b337f509ea9bf5a65dd43c1691a517c75aa8f32f1f6a95c230f369281225a7554d74b6ea79b186418c7d05e0b23732255 + checksum: 9c46d75f78fb4021bd4943ceca01f69986fdd5fa7ec1c0f6328ccb8a1f17670d04648a4319cb7a81f45581c56abb8ec800f1941d6a94039f39dd7c75760341c7 languageName: node linkType: hard @@ -20485,25 +20668,25 @@ __metadata: languageName: node linkType: hard -"vercel@npm:^28.4.9": - version: 28.4.9 - resolution: "vercel@npm:28.4.9" +"vercel@npm:^28.4.12": + version: 28.4.12 + resolution: "vercel@npm:28.4.12" dependencies: - "@vercel/build-utils": 5.5.4 - "@vercel/go": 2.2.12 - "@vercel/hydrogen": 0.0.25 - "@vercel/next": 3.2.4 - "@vercel/node": 2.5.23 - "@vercel/python": 3.1.21 - "@vercel/redwood": 1.0.30 - "@vercel/remix": 1.0.31 - "@vercel/ruby": 1.3.38 - "@vercel/static-build": 1.0.30 + "@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 update-notifier: 5.1.0 bin: vc: dist/index.js vercel: dist/index.js - checksum: 27393a20aca64ae4c5c097862c2246f78936571383449e8f3fd92d065d5f4b69c9711f9c8d70c6b72c6f9dcf39cecd22562aa64475dcebbad88a3178818674e8 + checksum: fab0e2b954a1a739cb091a176739639fca6d9015f88e41b6298c676122299b7275c7159cdf36739ccac5a5c7dd7b5d0deb8881a48e58c6d2c2a1e2a5ae5c9c84 languageName: node linkType: hard @@ -20583,13 +20766,12 @@ __metadata: languageName: node linkType: hard -"vite-plugin-dts@npm:^1.6.5": - version: 1.6.5 - resolution: "vite-plugin-dts@npm:1.6.5" +"vite-plugin-dts@npm:^1.6.6": + version: 1.6.6 + resolution: "vite-plugin-dts@npm:1.6.6" dependencies: - "@microsoft/api-extractor": ^7.32.0 - "@rushstack/node-core-library": ^3.53.0 - chalk: ^4.1.2 + "@microsoft/api-extractor": ^7.33.1 + "@rushstack/node-core-library": ^3.53.2 debug: ^4.3.4 fast-glob: ^3.2.12 fs-extra: ^10.1.0 @@ -20597,7 +20779,7 @@ __metadata: ts-morph: ^16.0.0 peerDependencies: vite: ">=2.9.0" - checksum: 1e9691dd03b32e69084601b065db6c39e74d047005c16c271f0c0573f9b8b807ce871f14605ccfed519e16ed8c142575db216c82931ba6b3bc5a6dce9e4cecec + checksum: 718096a98c3fb8e3e793590fd215101dfa8fe7c18c8abe9f255314db6ae4d75ef71d0846bc8dc77a547657a1ccf5467da9dbd28c711dfec2003c6c556cfc379b languageName: node linkType: hard @@ -20615,7 +20797,7 @@ __metadata: languageName: node linkType: hard -"vite@npm:^2.9.12 || ^3.0.0-0, vite@npm:^3.0.0, vite@npm:^3.0.9, vite@npm:^3.1.7, vite@npm:~3.1.3": +"vite@npm:^3.0.0, vite@npm:^3.0.9, vite@npm:~3.1.3": version: 3.1.7 resolution: "vite@npm:3.1.7" dependencies: @@ -20647,45 +20829,41 @@ __metadata: languageName: node linkType: hard -"vitest@npm:0.22.1, vitest@npm:^0.22.1": - version: 0.22.1 - resolution: "vitest@npm:0.22.1" +"vite@npm:^3.1.8": + version: 3.1.8 + resolution: "vite@npm:3.1.8" dependencies: - "@types/chai": ^4.3.3 - "@types/chai-subset": ^1.3.3 - "@types/node": "*" - chai: ^4.3.6 - debug: ^4.3.4 - local-pkg: ^0.4.2 - tinypool: ^0.2.4 - tinyspy: ^1.0.2 - vite: ^2.9.12 || ^3.0.0-0 + esbuild: ^0.15.9 + fsevents: ~2.3.2 + postcss: ^8.4.16 + resolve: ^1.22.1 + rollup: ~2.78.0 peerDependencies: - "@edge-runtime/vm": "*" - "@vitest/browser": "*" - "@vitest/ui": "*" - happy-dom: "*" - jsdom: "*" - peerDependenciesMeta: - "@edge-runtime/vm": + less: "*" + sass: "*" + stylus: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: optional: true - "@vitest/browser": + peerDependenciesMeta: + less: optional: true - "@vitest/ui": + sass: optional: true - happy-dom: + stylus: optional: true - jsdom: + terser: optional: true bin: - vitest: vitest.mjs - checksum: 7abe50ceb51181e77cd62eb3a07c2da17f13078f09be34cc2e98f1f94a77eba33a56c644d48ae16bb474945ffc1cfc8664b1f4976c3de495c5e474057420c4ca + vite: bin/vite.js + checksum: 982696ad134577dd9915c4c3548ad36ddcf5dc6d341058548a670a13d860e4cdaaf2b320a59221f178018df089d148b9980e9a344316bef12b698a1c1abc7390 languageName: node linkType: hard -"vitest@npm:0.24.1, vitest@npm:^0.24.1": - version: 0.24.1 - resolution: "vitest@npm:0.24.1" +"vitest@npm:0.24.3, vitest@npm:^0.24.3": + version: 0.24.3 + resolution: "vitest@npm:0.24.3" dependencies: "@types/chai": ^4.3.3 "@types/chai-subset": ^1.3.3 @@ -20717,7 +20895,7 @@ __metadata: optional: true bin: vitest: vitest.mjs - checksum: 52e87aec70351eade4f0fd4c240046cedf68fba8b2bb2d8a592036c69b8a1501a9ad0a790d5d7f8927faf27dd3cafb3609174e7bd3602a2c4dd26fb28e922337 + checksum: dd954f57396b81df466dd4346aa6c95709a1b3c2409d5526d3172fa34ec684f756a855f885778929a6b903a22b2517ff79d22f936fb3e4d7d54ff24e8e577459 languageName: node linkType: hard