diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 24054dd..00843da 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,13 +7,11 @@ on: - master jobs: - publish: + build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: 20 - registry-url: https://registry.npmjs.org/ - scope: '@hunteroi' - run: yarn diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index e3a3e64..d0905b9 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -9,8 +9,8 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: 20 registry-url: https://registry.npmjs.org/ diff --git a/.gitignore b/.gitignore index 85bc86f..f257a4f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ # Node -node_modules +node_modules/ # Compiled files -lib - -# Tests -**test** +lib/ +examples/index.js +examples/index2.js diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index e97ea1b..0000000 --- a/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "tabWidth": 2, - "useTabs": false, - "singleQuote": true -} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..cd6fc20 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "editor.codeActionsOnSave": { + "quickfix.biome": "explicit", + "source.organizeImports.biome": "explicit" + }, + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true +} \ No newline at end of file diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..a58e954 --- /dev/null +++ b/biome.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.6.4/schema.json", + "organizeImports": { + "enabled": true + }, + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true, + "defaultBranch": "master" + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "formatter": { + "enabled": true, + "indentStyle": "space", + "indentWidth": 4, + "lineEnding": "lf" + } +} diff --git a/docs/api-docs/classes/ClientWithTempManager.html b/docs/api-docs/classes/ClientWithTempManager.html index f50b35b..77de5d6 100644 --- a/docs/api-docs/classes/ClientWithTempManager.html +++ b/docs/api-docs/classes/ClientWithTempManager.html @@ -1,10 +1,10 @@ -ClientWithTempManager | @hunteroi/discord-temp-channels

A wrapper of Client that provides a support for the TempChannelsManager.

+ClientWithTempManager | @hunteroi/discord-temp-channels

A wrapper of Client that provides a support for the TempChannelsManager.

Export

ClientWithTempManager

-

Hierarchy

  • Client
    • ClientWithTempManager

Constructors

Hierarchy

  • Client
    • ClientWithTempManager

Constructors

Properties

Constructors

Properties

tempChannelsManager: TempChannelsManager

An instance of TempChannelsManager that currently manages all the temporary channels for the client.

+

Properties

tempChannelsManager: TempChannelsManager

An instance of TempChannelsManager that currently manages all the temporary channels for the client.

Name

ClientWithTempManager#tempChannelsManager

-
\ No newline at end of file +
\ No newline at end of file diff --git a/docs/api-docs/classes/TempChannelsManager.html b/docs/api-docs/classes/TempChannelsManager.html index 9172581..509aa97 100644 --- a/docs/api-docs/classes/TempChannelsManager.html +++ b/docs/api-docs/classes/TempChannelsManager.html @@ -1,6 +1,6 @@ -TempChannelsManager | @hunteroi/discord-temp-channels

The temporary channels manager.

+TempChannelsManager | @hunteroi/discord-temp-channels

The temporary channels manager.

Export

TempChannelsManager

-

Hierarchy

  • VoiceChannelsManager
    • TempChannelsManager

Constructors

Hierarchy

  • VoiceChannelsManager
    • TempChannelsManager

Constructors

Properties

Methods

Constructors

Properties

client: Client<boolean>

Methods

  • Adds a voice channel as a child of a parent. +

Properties

client: Client<boolean>

Methods

  • Protected

    Gets the parent channel either based on its ID or by looking for a match +

  • Protected

    Gets the parent channel either based on its ID or by looking for a match on the provided ID and its list of children.

    -

    Parameters

    • channelId: string
    • Optional lookAsChild: boolean = false

    Returns ParentChannelData

    {ParentChannelData}

    -

    Memberof

    VoiceChannelsManager

    -
  • Registers a parent channel. When a user joins a it, a child will be created and they will be moved to it.

    +

    Parameters

    • channelId: string
    • Optional lookAsChild: boolean = false

    Returns undefined | ParentChannelData

    Memberof

    VoiceChannelsManager

    +
  • Registers a parent channel. When a user joins a it, a child will be created and they will be moved to it.

    Parameters

    • channelId: string
    • Optional options: ParentChannelOptions = ...

      [DRoom #${count}] ${name}, childFormatRegex: /^[DRoom #\d+]\s+.+/i, - childPermissionOverwriteOption: { 'ManageChannels': true } + childPermissionOverwriteOption: { ManageChannels: true } }]

      -

    Returns void

  • Removes a voice channel from the list of children of a parent. +

Returns void

  • Unregisters a parent channel. When a user joins it, nothing will happen.

    -

    Parameters

    • channelId: string

    Returns boolean

\ No newline at end of file +
  • Unregisters a parent channel. When a user joins it, nothing will happen.

    +

    Parameters

    • channelId: string

    Returns boolean

\ No newline at end of file diff --git a/docs/api-docs/enums/TempChannelsManagerEvents.html b/docs/api-docs/enums/TempChannelsManagerEvents.html index 73fa20e..281af39 100644 --- a/docs/api-docs/enums/TempChannelsManagerEvents.html +++ b/docs/api-docs/enums/TempChannelsManagerEvents.html @@ -1,7 +1,7 @@ -TempChannelsManagerEvents | @hunteroi/discord-temp-channels

Enumeration Members

channelRegister +TempChannelsManagerEvents | @hunteroi/discord-temp-channels

Enumeration Members

channelRegister: "channelRegister"
channelUnregister: "channelUnregister"
childAdd: "childAdd"
childPrefixChange: "childPrefixChange"
childRemove: "childRemove"
error: "error"
\ No newline at end of file +

Enumeration Members

channelRegister: "channelRegister"
channelUnregister: "channelUnregister"
childAdd: "childAdd"
childPrefixChange: "childPrefixChange"
childRemove: "childRemove"
error: "error"
\ No newline at end of file diff --git a/docs/api-docs/index.html b/docs/api-docs/index.html index 8e246f5..bd1d6c9 100644 --- a/docs/api-docs/index.html +++ b/docs/api-docs/index.html @@ -1,4 +1,4 @@ -@hunteroi/discord-temp-channels

@hunteroi/discord-temp-channels

release version +@hunteroi/discord-temp-channels

@hunteroi/discord-temp-channels

release version nb downloads npm

Discord Temporary Voice Channels

This library works the same way its parent does (see discord-temp-channels of Androz2091) except that it brings a few new features:

    diff --git a/docs/api-docs/interfaces/ChildChannelData.html b/docs/api-docs/interfaces/ChildChannelData.html index 558fbe3..12361d8 100644 --- a/docs/api-docs/interfaces/ChildChannelData.html +++ b/docs/api-docs/interfaces/ChildChannelData.html @@ -1,9 +1,9 @@ -ChildChannelData | @hunteroi/discord-temp-channels

    The data about a temporary channel ticket

    +ChildChannelData | @hunteroi/discord-temp-channels

    The data about a temporary channel ticket

    Export

    ChildChannelData

    -
    interface ChildChannelData {
        owner: GuildMember;
        voiceChannel: VoiceChannel;
    }

    Properties

    interface ChildChannelData {
        owner: GuildMember;
        voiceChannel: VoiceChannel;
    }

    Properties

    Properties

    owner: GuildMember

    The owner of the ticket

    Memberof

    ChildChannelData

    -
    voiceChannel: VoiceChannel

    The created voice channel

    +
    voiceChannel: VoiceChannel

    The created voice channel

    Memberof

    ChildChannelData

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/api-docs/interfaces/ParentChannelData.html b/docs/api-docs/interfaces/ParentChannelData.html index 8c58cc5..e518133 100644 --- a/docs/api-docs/interfaces/ParentChannelData.html +++ b/docs/api-docs/interfaces/ParentChannelData.html @@ -1,12 +1,12 @@ -ParentChannelData | @hunteroi/discord-temp-channels

    The data about the channel allowing creation of temporary channels

    +ParentChannelData | @hunteroi/discord-temp-channels

    The data about the channel allowing creation of temporary channels

    Export

    ParentChannelData

    -
    interface ParentChannelData {
        channelId: string;
        children: ChildChannelData[];
        options: ParentChannelOptions;
    }

    Properties

    interface ParentChannelData {
        channelId: string;
        children: ChildChannelData[];
        options: ParentChannelOptions;
    }

    Properties

    channelId: string

    The unique identifier of the channel

    Memberof

    ParentChannelData

    -
    children: ChildChannelData[]

    The related children channels related to this parent.

    +
    children: ChildChannelData[]

    The related children channels related to this parent.

    Memberof

    ParentChannelData

    -

    The customization parameters of this channel and the related children.

    +

    The customization parameters of this channel and the related children.

    Memberof

    ParentChannelData

    -
    \ No newline at end of file +
    \ No newline at end of file diff --git a/docs/api-docs/interfaces/ParentChannelOptions.html b/docs/api-docs/interfaces/ParentChannelOptions.html index c85e7d7..55539c9 100644 --- a/docs/api-docs/interfaces/ParentChannelOptions.html +++ b/docs/api-docs/interfaces/ParentChannelOptions.html @@ -1,6 +1,6 @@ -ParentChannelOptions | @hunteroi/discord-temp-channels

    The configuration for the channel that triggers the system.

    +ParentChannelOptions | @hunteroi/discord-temp-channels

    The configuration for the channel that triggers the system.

    Export

    ParentChannelOptions

    -
    interface ParentChannelOptions {
        childAutoDeleteIfEmpty: boolean;
        childAutoDeleteIfOwnerLeaves: boolean;
        childAutoDeleteIfParentGetsUnregistered?: boolean;
        childBitrate?: number;
        childCanBeRenamed?: boolean;
        childCategory?: string;
        childMaxUsers?: number;
        childOverwriteRolesAndUsers?: Resolvables[];
        childPermissionOverwriteOptions?: Partial<Record<"CreateInstantInvite" | "KickMembers" | "BanMembers" | "Administrator" | "ManageChannels" | "ManageGuild" | "AddReactions" | "ViewAuditLog" | "PrioritySpeaker" | "Stream" | "ViewChannel" | "SendMessages" | "SendTTSMessages" | "ManageMessages" | "EmbedLinks" | "AttachFiles" | "ReadMessageHistory" | "MentionEveryone" | "UseExternalEmojis" | "ViewGuildInsights" | "Connect" | "Speak" | "MuteMembers" | "DeafenMembers" | "MoveMembers" | "UseVAD" | "ChangeNickname" | "ManageNicknames" | "ManageRoles" | "ManageWebhooks" | "ManageEmojisAndStickers" | "UseApplicationCommands" | "RequestToSpeak" | "ManageEvents" | "ManageThreads" | "CreatePublicThreads" | "CreatePrivateThreads" | "UseExternalStickers" | "SendMessagesInThreads" | "UseEmbeddedActivities" | "ModerateMembers", boolean>>;
        childShouldBeACopyOfParent?: boolean;
        childVoiceFormatRegex: RegExp;
        childVoiceFormat(str, count): string;
    }

    Properties

    interface ParentChannelOptions {
        childAutoDeleteIfEmpty: boolean;
        childAutoDeleteIfOwnerLeaves: boolean;
        childAutoDeleteIfParentGetsUnregistered?: boolean;
        childBitrate?: number;
        childCanBeRenamed?: boolean;
        childCategory?: null | string;
        childMaxUsers?: number;
        childOverwriteRolesAndUsers?: Resolvables[];
        childPermissionOverwriteOptions?: Partial<Record<"CreateInstantInvite" | "KickMembers" | "BanMembers" | "Administrator" | "ManageChannels" | "ManageGuild" | "AddReactions" | "ViewAuditLog" | "PrioritySpeaker" | "Stream" | "ViewChannel" | "SendMessages" | "SendTTSMessages" | "ManageMessages" | "EmbedLinks" | "AttachFiles" | "ReadMessageHistory" | "MentionEveryone" | "UseExternalEmojis" | "ViewGuildInsights" | "Connect" | "Speak" | "MuteMembers" | "DeafenMembers" | "MoveMembers" | "UseVAD" | "ChangeNickname" | "ManageNicknames" | "ManageRoles" | "ManageWebhooks" | "ManageEmojisAndStickers" | "ManageGuildExpressions" | "UseApplicationCommands" | "RequestToSpeak" | "ManageEvents" | "ManageThreads" | "CreatePublicThreads" | "CreatePrivateThreads" | "UseExternalStickers" | "SendMessagesInThreads" | "UseEmbeddedActivities" | "ModerateMembers" | "ViewCreatorMonetizationAnalytics" | "UseSoundboard" | "CreateGuildExpressions" | "CreateEvents" | "UseExternalSounds" | "SendVoiceMessages" | "SendPolls", null | boolean>>;
        childShouldBeACopyOfParent?: boolean;
        childVoiceFormatRegex: RegExp;
        childVoiceFormat(str, count): string;
    }

    Properties

    childAutoDeleteIfEmpty: boolean

    Whether the child channel should be removed when empty.

    Memberof

    ParentChannelOptions

    -
    childAutoDeleteIfOwnerLeaves: boolean

    Whether the child channel should be removed +

    childAutoDeleteIfOwnerLeaves: boolean

    Whether the child channel should be removed when its owner leaves it.

    Memberof

    ParentChannelOptions

    -
    childAutoDeleteIfParentGetsUnregistered?: boolean

    Whether the child channel should be removed if its parent becomes unregistered.

    +
    childAutoDeleteIfParentGetsUnregistered?: boolean

    Whether the child channel should be removed if its parent becomes unregistered.

    Memberof

    ParentChannelOptions

    -
    childBitrate?: number

    The bitrate of a child voice channel.

    +
    childBitrate?: number

    The bitrate of a child voice channel.

    Remark

    Will be ignored if childShouldBeACopyOfParent is set to true.

    Memberof

    ParentChannelOptions

    -
    childCanBeRenamed?: boolean

    Whether the child channel can be renamed or not without forcing the add of the prefix. +

    childCanBeRenamed?: boolean

    Whether the child channel can be renamed or not without forcing the add of the prefix. Please notice that if set on true, the capacity to reload channels into memory on bot restart cannot be guaranteed.

    Memberof

    ParentChannelOptions

    -
    childCategory?: string

    The category in which the child channels should be created.

    +
    childCategory?: null | string

    The category in which the child channels should be created.

    Memberof

    ParentChannelOptions

    -
    childMaxUsers?: number

    The maximum number of users in a child channel.

    +
    childMaxUsers?: number

    The maximum number of users in a child channel.

    Remark

    Will be ignored if childShouldBeACopyOfParent is set to true.

    Memberof

    ParentChannelOptions

    -
    childOverwriteRolesAndUsers?: Resolvables[]

    The list of users or roles to which the childPermissionOverwriteOption are applied.

    +
    childOverwriteRolesAndUsers?: Resolvables[]

    The list of users or roles to which the childPermissionOverwriteOption are applied.

    Memberof

    ParentChannelOptions

    -
    childPermissionOverwriteOptions?: Partial<Record<"CreateInstantInvite" | "KickMembers" | "BanMembers" | "Administrator" | "ManageChannels" | "ManageGuild" | "AddReactions" | "ViewAuditLog" | "PrioritySpeaker" | "Stream" | "ViewChannel" | "SendMessages" | "SendTTSMessages" | "ManageMessages" | "EmbedLinks" | "AttachFiles" | "ReadMessageHistory" | "MentionEveryone" | "UseExternalEmojis" | "ViewGuildInsights" | "Connect" | "Speak" | "MuteMembers" | "DeafenMembers" | "MoveMembers" | "UseVAD" | "ChangeNickname" | "ManageNicknames" | "ManageRoles" | "ManageWebhooks" | "ManageEmojisAndStickers" | "UseApplicationCommands" | "RequestToSpeak" | "ManageEvents" | "ManageThreads" | "CreatePublicThreads" | "CreatePrivateThreads" | "UseExternalStickers" | "SendMessagesInThreads" | "UseEmbeddedActivities" | "ModerateMembers", boolean>>

    The permissions overwrites of a child channel.

    +
    childPermissionOverwriteOptions?: Partial<Record<"CreateInstantInvite" | "KickMembers" | "BanMembers" | "Administrator" | "ManageChannels" | "ManageGuild" | "AddReactions" | "ViewAuditLog" | "PrioritySpeaker" | "Stream" | "ViewChannel" | "SendMessages" | "SendTTSMessages" | "ManageMessages" | "EmbedLinks" | "AttachFiles" | "ReadMessageHistory" | "MentionEveryone" | "UseExternalEmojis" | "ViewGuildInsights" | "Connect" | "Speak" | "MuteMembers" | "DeafenMembers" | "MoveMembers" | "UseVAD" | "ChangeNickname" | "ManageNicknames" | "ManageRoles" | "ManageWebhooks" | "ManageEmojisAndStickers" | "ManageGuildExpressions" | "UseApplicationCommands" | "RequestToSpeak" | "ManageEvents" | "ManageThreads" | "CreatePublicThreads" | "CreatePrivateThreads" | "UseExternalStickers" | "SendMessagesInThreads" | "UseEmbeddedActivities" | "ModerateMembers" | "ViewCreatorMonetizationAnalytics" | "UseSoundboard" | "CreateGuildExpressions" | "CreateEvents" | "UseExternalSounds" | "SendVoiceMessages" | "SendPolls", null | boolean>>

    The permissions overwrites of a child channel.

    Memberof

    ParentChannelOptions

    -
    childShouldBeACopyOfParent?: boolean

    Whether the child channel should be a clone of the parent's channel or not.

    +
    childShouldBeACopyOfParent?: boolean

    Whether the child channel should be a clone of the parent's channel or not.

    Remark

    Setting this parameter to true will force the manager to fully clone the parent's channel, giving no use to childBitrate and childMaxUsers. Only the name of the child channel will be customized.

    Default

    false
     

    Memberof

    ParentChannelOptions

    -
    childVoiceFormatRegex: RegExp

    The regular expression that should fit the childVoiceFormat in order to detect +

    childVoiceFormatRegex: RegExp

    The regular expression that should fit the childVoiceFormat in order to detect the child channels in case the bot crashes and reconnects.

    Memberof

    ParentChannelOptions

    -

    Methods

    Methods

    • The function that resolves the name of the child voice channels when automatically generated.

      Parameters

      • str: string
      • count: number

      Returns string

      {string}

      Memberof

      ParentChannelOptions

      -
    \ No newline at end of file +
\ No newline at end of file diff --git a/docs/api-docs/modules.html b/docs/api-docs/modules.html index a11208d..3ddf3bc 100644 --- a/docs/api-docs/modules.html +++ b/docs/api-docs/modules.html @@ -1,4 +1,4 @@ -@hunteroi/discord-temp-channels

@hunteroi/discord-temp-channels

Index

Enumerations

TempChannelsManagerEvents +@hunteroi/discord-temp-channels

@hunteroi/discord-temp-channels

Index

Enumerations

Classes

Interfaces

ChildChannelData diff --git a/eslint.config.js b/eslint.config.js deleted file mode 100644 index 3bb3fca..0000000 --- a/eslint.config.js +++ /dev/null @@ -1,14 +0,0 @@ -// @ts-check - -import eslint from '@eslint/js'; -import tseslint from 'typescript-eslint'; - -export default tseslint.config( - eslint.configs.recommended, - ...tseslint.configs.recommended, - { - rules: { - "@typescript-eslint/no-unused-vars": "warn", - } - } -); \ No newline at end of file diff --git a/examples/index.js b/examples/index.ts similarity index 80% rename from examples/index.js rename to examples/index.ts index 1f348a9..a4c03f6 100644 --- a/examples/index.js +++ b/examples/index.ts @@ -1,5 +1,6 @@ -const { Client, IntentsBitField } = require('discord.js'); -const { TempChannelsManager, TempChannelsManagerEvents } = require('../lib'); +import { Client, IntentsBitField } from 'discord.js'; + +import { TempChannelsManager, TempChannelsManagerEvents } from '../lib/index.js'; const client = new Client({ intents: [ @@ -17,7 +18,7 @@ const manager = new TempChannelsManager(client); client.on('ready', () => { console.log('Connected!'); - manager.registerChannel('CHANNEL_ID', { + manager.registerChannel('VOICE_CHANNEL_ID', { childCategory: 'CATEGORY_ID', childAutoDeleteIfEmpty: true, childAutoDeleteIfParentGetsUnregistered: true, @@ -30,7 +31,10 @@ client.on('ready', () => { }); }); -client.on('messageCreate', (message) => message.content === 'unregister' && manager.unregisterChannel('CHANNEL_ID')); +client.on('messageCreate', (message) => { + if (message.content === 'unregister') + manager.unregisterChannel('VOICE_CHANNEL_ID'); +}); manager.on(TempChannelsManagerEvents.channelRegister, (parent) => console.log('Registered', parent)); manager.on(TempChannelsManagerEvents.channelUnregister, (parent) => console.log('Unregistered', parent)); diff --git a/examples/index2.js b/examples/index2.ts similarity index 82% rename from examples/index2.js rename to examples/index2.ts index 205819d..0bdf606 100644 --- a/examples/index2.js +++ b/examples/index2.ts @@ -1,5 +1,6 @@ -const { IntentsBitField } = require('discord.js'); -const { ClientWithTempManager, TempChannelsManagerEvents } = require('../lib'); +import { IntentsBitField } from 'discord.js'; + +import { ClientWithTempManager, TempChannelsManagerEvents } from '../lib/index.js'; const client = new ClientWithTempManager({ intents: [ @@ -27,7 +28,10 @@ client.on('ready', () => { childShouldBeACopyOfParent: false }); - client.on('messageCreate', (message) => message.content === 'unregister' && manager.unregisterChannel('CHANNEL_ID')); + client.on('messageCreate', (message) => { + if (message.content === 'unregister') + client.tempChannelsManager.unregisterChannel('VOICE_CHANNEL_ID'); + }); client.tempChannelsManager.on(TempChannelsManagerEvents.channelRegister, (parent) => console.log('Registered', parent)); client.tempChannelsManager.on(TempChannelsManagerEvents.channelUnregister, (parent) => console.log('Unregistered', parent)); diff --git a/package.json b/package.json index 8923f81..7aac484 100644 --- a/package.json +++ b/package.json @@ -1,49 +1,48 @@ { - "name": "@hunteroi/discord-temp-channels", - "version": "3.2.1", - "type": "module", - "description": "Based on Androz2091's package, this is a simple framework to facilitate the creation of a temporary voice & text channels system using Discord.js", - "main": "lib/index.js", + "author": "HunteRoi (https://tinaeldevresse.eu/)", "bugs": { "url": "https://github.com/HunteRoi/discord-temp-channels/issues" }, + "dependencies": {}, + "description": "Based on Androz2091's package, this is a simple framework to facilitate the creation of a temporary voice & text channels system using Discord.js", + "devDependencies": { + "@biomejs/biome": "1.6.4", + "@types/node": "^20.14.6", + "discord.js": "^14.15.3", + "typedoc": "^0.25.13", + "typescript": "^5.4.5" + }, + "directories": { + "lib": "lib" + }, + "engines": { + "node": ">=20.x" + }, + "files": [ + "lib/**/*" + ], + "funding": "https://github.com/sponsors/hunteroi", "homepage": "https://github.com/HunteRoi/discord-temp-channels#readme", "keywords": [ "discordjs", "temporary channels", "discordbot" ], - "repository": "git://github.com/hunteroi/discord-temp-channels.git", - "author": "HunteRoi (https://tinaeldevresse.eu/)", - "funding": "https://github.com/sponsors/hunteroi", - "engines": { - "node": ">=20.x" - }, "license": "MIT", + "main": "lib/index.js", + "name": "@hunteroi/discord-temp-channels", + "peerDependencies": { + "discord.js": "^14.x" + }, + "repository": "git://github.com/hunteroi/discord-temp-channels.git", "scripts": { "build": "tsc", "build:docs": "typedoc", + "lint": "biome check --apply ./src", "prepublish": "yarn lint && yarn build && yarn build:docs", - "lint": "eslint ./src", - "start": "yarn build & node ./examples/index.js", - "start:example2": "yarn build & node ./examples/index2.js" - }, - "dependencies": { - "discord-logs": "^2.2.1", - "discord.js": "14.x" + "start": "yarn build && tsc ./examples/index.ts --target esnext --module nodenext --moduleResolution nodenext && node ./examples/index.js", + "start:2": "yarn build && tsc ./examples/index2.ts --target esnext --module nodenext --moduleResolution nodenext && node ./examples/index2.js" }, - "devDependencies": { - "@eslint/js": "^9.0.0", - "discord-sync-commands": "^0.3.0", - "eslint": "^9.0.0", - "typedoc": "^0.25.13", - "typescript": "^5.4.4", - "typescript-eslint": "^7.6.0" - }, - "directories": { - "lib": "lib" - }, - "files": [ - "lib/**/*" - ] + "type": "module", + "version": "3.3.0" } diff --git a/src/ClientWithTempManager.ts b/src/ClientWithTempManager.ts index 7c49367..e1e8d17 100644 --- a/src/ClientWithTempManager.ts +++ b/src/ClientWithTempManager.ts @@ -1,5 +1,6 @@ -import { Client, ClientOptions } from 'discord.js'; -import { TempChannelsManager } from './TempChannelsManager'; +import { Client, type ClientOptions } from "discord.js"; + +import { TempChannelsManager } from "./TempChannelsManager.js"; /** * A wrapper of {@link Client} that provides a support for the {@link TempChannelsManager}. @@ -8,22 +9,22 @@ import { TempChannelsManager } from './TempChannelsManager'; * @extends {Client} */ export class ClientWithTempManager extends Client { - /** - * An instance of {@link TempChannelsManager} that currently manages all the temporary channels for the client. - * - * @name ClientWithTempManager#tempChannelsManager - * @type {TempChannelsManager} - */ - public readonly tempChannelsManager: TempChannelsManager; + /** + * An instance of {@link TempChannelsManager} that currently manages all the temporary channels for the client. + * + * @name ClientWithTempManager#tempChannelsManager + * @type {TempChannelsManager} + */ + public readonly tempChannelsManager: TempChannelsManager; - /** - * Creates an instance of ClientWithTempManager. - * @param {ClientOptions} [options] Options for the client - * @memberof ClientWithTempManager - */ - constructor(options?: ClientOptions) { - super(options); + /** + * Creates an instance of ClientWithTempManager. + * @param {ClientOptions} [options] Options for the client + * @memberof ClientWithTempManager + */ + constructor(options: ClientOptions) { + super(options); - this.tempChannelsManager = new TempChannelsManager(this); - } + this.tempChannelsManager = new TempChannelsManager(this); + } } diff --git a/src/TempChannelsManager.ts b/src/TempChannelsManager.ts index 0d2465e..1551ae4 100644 --- a/src/TempChannelsManager.ts +++ b/src/TempChannelsManager.ts @@ -1,8 +1,25 @@ -import { CategoryChannel, ChannelType, Client, DMChannel, Events, Guild, GuildMember, IntentsBitField, NonThreadGuildBasedChannel, OverwriteType, PermissionsBitField, Snowflake, VoiceChannel } from 'discord.js'; -import { ChildChannelData, ParentChannelData, ParentChannelOptions } from './types'; -import { VoiceChannelsManager } from './VoiceChannelsManager'; -import { TempChannelsManagerEvents } from './TempChannelsManagerEvents'; -import addDiscordLogs from 'discord-logs'; +import { + type CategoryChannel, + ChannelType, + type Client, + type DMChannel, + Events, + type GuildMember, + IntentsBitField, + type NonThreadGuildBasedChannel, + OverwriteType, + type Snowflake, + type VoiceChannel, +} from "discord.js"; + +import { TempChannelsManagerEvents } from "./TempChannelsManagerEvents.js"; +import { VoiceChannelsManager } from "./VoiceChannelsManager.js"; +import { + ChildChannelData, + type ParentChannelData, + type ParentChannelOptions, +} from "./types/index.js"; + /** * The temporary channels manager. * @export @@ -22,16 +39,17 @@ export class TempChannelsManager extends VoiceChannelsManager { const intents = new IntentsBitField(client.options.intents); if (!intents.has(IntentsBitField.Flags.GuildVoiceStates)) { - throw new Error('GUILD_VOICE_STATES intent is required to use this package!'); + throw new Error( + "GUILD_VOICE_STATES intent is required to use this package!", + ); } if (!intents.has(IntentsBitField.Flags.Guilds)) { - throw new Error('GUILDS intent is required to use this package!'); + throw new Error("GUILDS intent is required to use this package!"); } this.client = client; this.#listenToChannelEvents(); - addDiscordLogs(client); } /** @@ -44,7 +62,7 @@ export class TempChannelsManager extends VoiceChannelsManager { * childAutoDeleteIfOwnerLeaves: false, * childFormat: (name, count) => `[DRoom #${count}] ${name}`, * childFormatRegex: /^\[DRoom #\d+\]\s+.+/i, - * childPermissionOverwriteOption: { 'ManageChannels': true } + * childPermissionOverwriteOption: { ManageChannels: true } * }] */ public registerChannel( @@ -55,9 +73,9 @@ export class TempChannelsManager extends VoiceChannelsManager { childAutoDeleteIfOwnerLeaves: false, childVoiceFormat: (name, count) => `[DRoom #${count}] ${name}`, childVoiceFormatRegex: /^\[DRoom #\d+\]\s+.+/i, - childPermissionOverwriteOptions: { 'ManageChannels': true }, - childShouldBeACopyOfParent: false - } + childPermissionOverwriteOptions: { ManageChannels: true }, + childShouldBeACopyOfParent: false, + }, ): void { super.registerChannel(channelId, options); } @@ -70,35 +88,90 @@ export class TempChannelsManager extends VoiceChannelsManager { public unregisterChannel(channelId: Snowflake): boolean { const hasBeenUnregistered = super.unregisterChannel(channelId); if (!hasBeenUnregistered) { - this.emit(TempChannelsManagerEvents.error, null, `Could not unregister the channel with the id ${channelId}`); + this.emit( + TempChannelsManagerEvents.error, + null, + `Could not unregister the channel with the id ${channelId}`, + ); } return hasBeenUnregistered; } #listenToChannelEvents(): void { - this.client.on('voiceChannelJoin', async (member: GuildMember, channel: VoiceChannel) => await this.#createNewChild.apply(this, [member, channel])); - this.client.on('voiceChannelSwitch', async (member: GuildMember, previousChannel: VoiceChannel, currentChannel: VoiceChannel) => await this.#handleChild.apply(this, [member, previousChannel, currentChannel])); - this.client.on('voiceChannelLeave', async (member: GuildMember, channel: VoiceChannel) => await this.#checkChildForDeletion.apply(this, [channel])); - - this.client.on(Events.ChannelUpdate, async (oldState: DMChannel | NonThreadGuildBasedChannel, newState: DMChannel | NonThreadGuildBasedChannel) => await this.#handleChannelRenaming.apply(this, [oldState, newState])); - this.client.on(Events.ChannelDelete, (channel: DMChannel | NonThreadGuildBasedChannel) => this.#cleanUpAfterDeletion.apply(this, [channel])); - this.on(TempChannelsManagerEvents.channelRegister, async (parent: ParentChannelData) => await this.#restoreAfterCrash.apply(this, [parent])); - this.on(TempChannelsManagerEvents.channelUnregister, async (parent: ParentChannelData) => { - if (parent.options.childAutoDeleteIfParentGetsUnregistered) { - for (const child of parent.children) { - await this.#deleteVoiceChannel.apply(this, [child.voiceChannel]); - } + this.client.on(Events.VoiceStateUpdate, async (oldState, newState) => { + if (!oldState.channel && newState.channel && newState.member) { + // User joins a channel + await this.#createNewChild.apply(this, [ + newState.member, + newState.channel as VoiceChannel, + ]); + } + if (oldState.channel && !newState.channel) { + // User leaves a channel + await this.#checkChildForDeletion.apply(this, [ + oldState.channel as VoiceChannel, + ]); + } + if ( + oldState.channel && + newState.channel && + oldState.channel.id !== newState.channel.id && + newState.member + ) { + // User moves to another channel + await this.#handleChild.apply(this, [ + newState.member, + oldState.channel as VoiceChannel, + newState.channel as VoiceChannel, + ]); } }); + + this.client.on( + Events.ChannelUpdate, + async ( + oldState: DMChannel | NonThreadGuildBasedChannel, + newState: DMChannel | NonThreadGuildBasedChannel, + ) => + await this.#handleChannelRenaming.apply(this, [ + oldState, + newState, + ]), + ); + this.client.on( + Events.ChannelDelete, + (channel: DMChannel | NonThreadGuildBasedChannel) => + this.#cleanUpAfterDeletion.apply(this, [channel]), + ); + this.on( + TempChannelsManagerEvents.channelRegister, + async (parent: ParentChannelData) => + await this.#restoreAfterCrash.apply(this, [parent]), + ); + this.on( + TempChannelsManagerEvents.channelUnregister, + async (parent: ParentChannelData) => { + if (parent.options.childAutoDeleteIfParentGetsUnregistered) { + for (const child of parent.children) { + await this.#deleteVoiceChannel.apply(this, [ + child.voiceChannel, + ]); + } + } + }, + ); } async #deleteVoiceChannel(channel: VoiceChannel): Promise { try { await channel.delete(); - } - catch (error) { - this.emit(TempChannelsManagerEvents.error, error, 'Cannot auto delete channel ' + channel.id); + } catch (error) { + this.emit( + TempChannelsManagerEvents.error, + error, + `Cannot auto delete channel ${channel.id}`, + ); } } @@ -106,32 +179,69 @@ export class TempChannelsManager extends VoiceChannelsManager { if (!parentData) return; const parent = this.getParentChannel(parentData.channelId); - const voiceChannel = await this.client.channels.fetch(parent.channelId) as VoiceChannel; + if (!parent) return; + + const voiceChannel = (await this.client.channels.fetch( + parent.channelId, + )) as VoiceChannel; if (!voiceChannel) return; - const bot = await voiceChannel.guild.members.fetch(this.client.user); - const category = await voiceChannel.guild.channels.fetch(parent.options.childCategory ?? voiceChannel.parentId) as CategoryChannel; - const children = (category?.children ?? voiceChannel.guild.channels).cache - .filter(c => parent.options.childVoiceFormatRegex.test(c.name) && c.type === ChannelType.GuildVoice && c.permissionOverwrites.cache.some((po) => po.type === OverwriteType.Member)); + const bot: GuildMember = await voiceChannel.guild.members.fetch( + // biome-ignore lint: the user is always defined here + this.client.user!, + ); + + const parentId = parent.options.childCategory ?? voiceChannel.parentId; + if (!parentId) return; + const category = (await voiceChannel.guild.channels.fetch( + parentId, + )) as CategoryChannel; + const children = ( + category?.children ?? voiceChannel.guild.channels + ).cache.filter( + (c) => + parent.options.childVoiceFormatRegex.test(c.name) && + c.type === ChannelType.GuildVoice && + c.permissionOverwrites.cache.some( + (po) => po.type === OverwriteType.Member, + ), + ); for (let child of [...children.values()] as VoiceChannel[]) { - child = await this.client.channels.fetch(child.id) as VoiceChannel; - this.bindChannelToParent(parent, child, child.members.size > 0 ? child.members.first() : bot); + child = (await this.client.channels.fetch( + child.id, + )) as VoiceChannel; + this.bindChannelToParent( + parent, + child, + // biome-ignore lint: the members collection always has at least one member + child.members.size > 0 ? child.members.first()! : bot, + ); await this.#checkChildForDeletion(child); } } - async #handleChannelRenaming(oldState: DMChannel | NonThreadGuildBasedChannel, newState: DMChannel | NonThreadGuildBasedChannel): Promise { + async #handleChannelRenaming( + oldState: DMChannel | NonThreadGuildBasedChannel, + newState: DMChannel | NonThreadGuildBasedChannel, + ): Promise { if (oldState.isDMBased() || newState.isDMBased()) return; if (oldState.name === newState.name) return; const parent = this.getParentChannel(newState.id, true); if (!parent) return; - const child = parent.children.find(c => c.voiceChannel.id === newState.id); - const nameDoesNotHavePrefix = !parent.options.childVoiceFormatRegex.test(newState.name); + const child = parent.children.find( + (c) => c.voiceChannel.id === newState.id, + ); + if (!child) return; + const nameDoesNotHavePrefix = + !parent.options.childVoiceFormatRegex.test(newState.name); if (!parent.options.childCanBeRenamed && nameDoesNotHavePrefix) { const count = parent.children.indexOf(child) + 1; - const nameWithPrefix = parent.options.childVoiceFormat(newState.name, count); + const nameWithPrefix = parent.options.childVoiceFormat( + newState.name, + count, + ); await newState.setName(nameWithPrefix); this.emit(TempChannelsManagerEvents.childPrefixChange, child); @@ -142,42 +252,66 @@ export class TempChannelsManager extends VoiceChannelsManager { const parent = this.getParentChannel(channel.id, true); if (!parent) return; - const child = parent.children.find(c => c.voiceChannel.id === channel.id); - const shouldBeDeleted = (parent.options.childAutoDeleteIfEmpty && child.voiceChannel.members.size === 0) - || (parent.options.childAutoDeleteIfOwnerLeaves && !child.voiceChannel.members.has(child.owner.id)); + const child = parent.children.find( + (c) => c.voiceChannel.id === channel.id, + ); + if (!child) return; + const shouldBeDeleted = + (parent.options.childAutoDeleteIfEmpty && + child.voiceChannel.members.size === 0) || + (parent.options.childAutoDeleteIfOwnerLeaves && + !child.voiceChannel.members.has(child.owner.id)); if (!shouldBeDeleted) return; await this.#deleteVoiceChannel(channel); } - async #handleChild(member: GuildMember, oldChannel: VoiceChannel, newChannel: VoiceChannel): Promise { + async #handleChild( + member: GuildMember, + oldChannel: VoiceChannel, + newChannel: VoiceChannel, + ): Promise { await this.#checkChildForDeletion(oldChannel); await this.#createNewChild(member, newChannel); } - async #createNewChild(member: GuildMember, channel: VoiceChannel): Promise { + async #createNewChild( + member: GuildMember, + channel: VoiceChannel, + ): Promise { const parent = this.getParentChannel(channel.id); if (!parent) return; - const parentChannel = await this.client.channels.fetch(parent.channelId) as VoiceChannel; + const parentChannel = (await this.client.channels.fetch( + parent.channelId, + )) as VoiceChannel; const count = Math.max( 0, - ...parent.children.map(child => Number(child.voiceChannel.name.match(/\d+/).shift())) + ...parent.children.map((child) => + Number((child.voiceChannel.name.match(/\d+/) ?? [0]).shift()), + ), + ); + + const name = parent.options.childVoiceFormat( + member.displayName, + count + 1, ); - const name = parent.options.childVoiceFormat(member.displayName, count + 1); let categoryChannel: CategoryChannel | null = null; if (parent.options.childCategory) { - categoryChannel = await channel.guild.channels.fetch(parent.options.childCategory) as CategoryChannel; - } - else if (parentChannel.parentId) { - categoryChannel = await channel.guild.channels.fetch(parentChannel.parentId) as CategoryChannel; + categoryChannel = (await channel.guild.channels.fetch( + parent.options.childCategory, + )) as CategoryChannel; + } else if (parentChannel.parentId) { + categoryChannel = (await channel.guild.channels.fetch( + parentChannel.parentId, + )) as CategoryChannel; } let voiceChannel: VoiceChannel | null = null; if (parent.options.childShouldBeACopyOfParent) { voiceChannel = await parentChannel.clone({ - name + name, }); } else { voiceChannel = await channel.guild.channels.create({ @@ -186,18 +320,31 @@ export class TempChannelsManager extends VoiceChannelsManager { bitrate: parent.options.childBitrate, userLimit: parent.options.childMaxUsers, type: ChannelType.GuildVoice, - permissionOverwrites: categoryChannel ? [...categoryChannel.permissionOverwrites.cache.values()] : [] + permissionOverwrites: categoryChannel + ? [...categoryChannel.permissionOverwrites.cache.values()] + : [], }); } - await voiceChannel.permissionOverwrites.edit(member.id, { 'ManageChannels': true }); + await voiceChannel.permissionOverwrites.edit(member.id, { + ManageChannels: true, + }); if (parent.options.childPermissionOverwriteOptions) { - for (const roleOrUser of parent.options.childOverwriteRolesAndUsers) { + for (const roleOrUser of parent.options + .childOverwriteRolesAndUsers ?? []) { try { - await voiceChannel.permissionOverwrites.edit(roleOrUser, parent.options.childPermissionOverwriteOptions); - } - catch (error) { - this.emit(TempChannelsManagerEvents.error, error, `Couldn't update the permissions of the channel ${voiceChannel.id} for role or user ${roleOrUser.toString()}`); + await voiceChannel.permissionOverwrites.edit( + roleOrUser, + parent.options.childPermissionOverwriteOptions, + ); + } catch (error) { + this.emit( + TempChannelsManagerEvents.error, + error, + `Couldn't update the permissions of the channel ${ + voiceChannel.id + } for role or user ${roleOrUser.toString()}`, + ); } } } @@ -206,7 +353,9 @@ export class TempChannelsManager extends VoiceChannelsManager { await member.voice.setChannel(voiceChannel); } - #cleanUpAfterDeletion(channel: DMChannel | NonThreadGuildBasedChannel): void { + #cleanUpAfterDeletion( + channel: DMChannel | NonThreadGuildBasedChannel, + ): void { if (!channel || channel.type !== ChannelType.GuildVoice) return; let parent = this.getParentChannel(channel.id); @@ -222,7 +371,6 @@ export class TempChannelsManager extends VoiceChannelsManager { } } - /** * Emitted when a voice channel name is changed because it does not respect the prefix regular expression. * @event TempChannelsManager#childPrefixChange diff --git a/src/TempChannelsManagerEvents.ts b/src/TempChannelsManagerEvents.ts index c04c345..e348a43 100644 --- a/src/TempChannelsManagerEvents.ts +++ b/src/TempChannelsManagerEvents.ts @@ -1,10 +1,10 @@ export enum TempChannelsManagerEvents { - channelRegister = 'channelRegister', - channelUnregister = 'channelUnregister', + channelRegister = "channelRegister", + channelUnregister = "channelUnregister", - childAdd = 'childAdd', - childRemove = 'childRemove', - childPrefixChange = 'childPrefixChange', + childAdd = "childAdd", + childRemove = "childRemove", + childPrefixChange = "childPrefixChange", - error = 'error', + error = "error", } diff --git a/src/VoiceChannelsManager.ts b/src/VoiceChannelsManager.ts index acd517d..1e01d7f 100644 --- a/src/VoiceChannelsManager.ts +++ b/src/VoiceChannelsManager.ts @@ -1,7 +1,17 @@ -import { Collection, GuildMember, Snowflake, VoiceChannel } from 'discord.js'; -import { ChildChannelData, ParentChannelData, ParentChannelOptions } from './types'; -import { EventEmitter } from 'events'; -import { TempChannelsManagerEvents } from './TempChannelsManagerEvents'; +import { EventEmitter } from "node:events"; +import { + Collection, + type GuildMember, + type Snowflake, + type VoiceChannel, +} from "discord.js"; + +import { TempChannelsManagerEvents } from "./TempChannelsManagerEvents.js"; +import type { + ChildChannelData, + ParentChannelData, + ParentChannelOptions, +} from "./types/index.js"; /** * A voice channels manager, handling the relationship between parents and children channels. @@ -30,13 +40,18 @@ export class VoiceChannelsManager extends EventEmitter { * @protected * @param {Snowflake} channelId * @param {boolean} [lookAsChild=false] - * @return {*} {ParentChannelData} + * @return {ParentChannelData | undefined} * @memberof VoiceChannelsManager */ - protected getParentChannel(channelId: Snowflake, lookAsChild: boolean = false): ParentChannelData { + protected getParentChannel( + channelId: Snowflake, + lookAsChild = false, + ): ParentChannelData | undefined { if (lookAsChild) { - return this.#channels.find(parent => - parent.children.some(child => child.voiceChannel.id === channelId) + return this.#channels.find((parent) => + parent.children.some( + (child) => child.voiceChannel.id === channelId, + ), ); } return this.#channels.get(channelId); @@ -50,7 +65,10 @@ export class VoiceChannelsManager extends EventEmitter { * @param {ParentChannelOptions} options * @memberof VoiceChannelsManager */ - public registerChannel(channelId: Snowflake, options: ParentChannelOptions): void { + public registerChannel( + channelId: Snowflake, + options: ParentChannelOptions, + ): void { const parent: ParentChannelData = { channelId, options, children: [] }; this.#channels.set(channelId, parent); this.emit(TempChannelsManagerEvents.channelRegister, parent); @@ -71,7 +89,9 @@ export class VoiceChannelsManager extends EventEmitter { const unregisteredSuccessfully = this.#channels.delete(channelId); if (unregisteredSuccessfully) { this.emit(TempChannelsManagerEvents.channelUnregister, parent); - parent.children.forEach(child => this.unbindChannelFromParent(parent, child.voiceChannel.id)); + for (const child of parent.children) { + this.unbindChannelFromParent(parent, child.voiceChannel.id); + } } return unregisteredSuccessfully; @@ -87,7 +107,11 @@ export class VoiceChannelsManager extends EventEmitter { * @return {*} {void} * @memberof VoiceChannelsManager */ - public bindChannelToParent(parent: ParentChannelData, voiceChannel: VoiceChannel, owner: GuildMember): void { + public bindChannelToParent( + parent: ParentChannelData, + voiceChannel: VoiceChannel, + owner: GuildMember, + ): void { if (!parent) return; const child: ChildChannelData = { owner, voiceChannel }; @@ -104,10 +128,15 @@ export class VoiceChannelsManager extends EventEmitter { * @return {*} {void} * @memberof VoiceChannelsManager */ - public unbindChannelFromParent(parent: ParentChannelData, voiceChannelId: Snowflake): void { + public unbindChannelFromParent( + parent: ParentChannelData, + voiceChannelId: Snowflake, + ): void { if (!parent) return; - const index = parent.children.findIndex(c => c.voiceChannel.id === voiceChannelId); + const index = parent.children.findIndex( + (c) => c.voiceChannel.id === voiceChannelId, + ); if (index === -1) return; const [child] = parent.children.splice(index, 1); @@ -151,4 +180,4 @@ export class VoiceChannelsManager extends EventEmitter { * @param {ParentChannelData} parent The parent channel data * @example * manager.on('childRemove', (child, parent) => {}); - */ \ No newline at end of file + */ diff --git a/src/index.ts b/src/index.ts index 10b0102..ef02ef5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -export * from './ClientWithTempManager'; -export * from './TempChannelsManager'; -export * from './TempChannelsManagerEvents'; -export * from './types'; +export * from "./ClientWithTempManager.js"; +export * from "./TempChannelsManager.js"; +export * from "./TempChannelsManagerEvents.js"; +export * from "./types/index.js"; diff --git a/src/types/ChildChannelData.ts b/src/types/ChildChannelData.ts index 2decb6b..196c900 100644 --- a/src/types/ChildChannelData.ts +++ b/src/types/ChildChannelData.ts @@ -1,7 +1,4 @@ -import { - GuildMember, - VoiceChannel -} from 'discord.js'; +import type { GuildMember, VoiceChannel } from "discord.js"; /** * The data about a temporary channel ticket @@ -10,19 +7,19 @@ import { * @interface ChildChannelData */ export interface ChildChannelData { - /** - * The owner of the ticket - * - * @type {GuildMember} - * @memberof ChildChannelData - */ - owner: GuildMember; + /** + * The owner of the ticket + * + * @type {GuildMember} + * @memberof ChildChannelData + */ + owner: GuildMember; - /** - * The created voice channel - * - * @type {VoiceChannel} - * @memberof ChildChannelData - */ - voiceChannel: VoiceChannel; + /** + * The created voice channel + * + * @type {VoiceChannel} + * @memberof ChildChannelData + */ + voiceChannel: VoiceChannel; } diff --git a/src/types/ParentChannelData.ts b/src/types/ParentChannelData.ts index 11151f7..b948579 100644 --- a/src/types/ParentChannelData.ts +++ b/src/types/ParentChannelData.ts @@ -1,5 +1,7 @@ -import { Snowflake } from 'discord.js'; -import { ChildChannelData, ParentChannelOptions } from './'; +import type { Snowflake } from "discord.js"; + +import type { ChildChannelData } from "./ChildChannelData.js"; +import type { ParentChannelOptions } from "./ParentChannelOptions.js"; /** * The data about the channel allowing creation of temporary channels @@ -8,27 +10,27 @@ import { ChildChannelData, ParentChannelOptions } from './'; * @interface ParentChannelData */ export interface ParentChannelData { - /** - * The unique identifier of the channel - * - * @type {Snowflake} - * @memberof ParentChannelData - */ - channelId: Snowflake; + /** + * The unique identifier of the channel + * + * @type {Snowflake} + * @memberof ParentChannelData + */ + channelId: Snowflake; - /** - * The customization parameters of this channel and the related children. - * - * @type {ParentChannelOptions} - * @memberof ParentChannelData - */ - options: ParentChannelOptions; + /** + * The customization parameters of this channel and the related children. + * + * @type {ParentChannelOptions} + * @memberof ParentChannelData + */ + options: ParentChannelOptions; - /** - * The related children channels related to this parent. - * - * @type {ChildChannelData[]} - * @memberof ParentChannelData - */ - children: ChildChannelData[]; + /** + * The related children channels related to this parent. + * + * @type {ChildChannelData[]} + * @memberof ParentChannelData + */ + children: ChildChannelData[]; } diff --git a/src/types/ParentChannelOptions.ts b/src/types/ParentChannelOptions.ts index 588fe74..d158da2 100644 --- a/src/types/ParentChannelOptions.ts +++ b/src/types/ParentChannelOptions.ts @@ -1,10 +1,16 @@ -import { - PermissionOverwriteOptions, - RoleResolvable, - Snowflake, - UserResolvable, -} from 'discord.js'; +import type { + PermissionOverwriteOptions, + RoleResolvable, + Snowflake, + UserResolvable, +} from "discord.js"; +/** + * A specific type that can be either a role or a user. + * + * @type {RoleResolvable | UserResolvable} + * @see {@link https://discord.js.org/docs/packages/discord.js/14.14.1/RoleResolvable:TypeAlias} and {@link https://discord.js.org/docs/packages/discord.js/14.14.1/UserResolvable:TypeAlias} for more information. + */ type Resolvables = RoleResolvable | UserResolvable; /** @@ -14,114 +20,114 @@ type Resolvables = RoleResolvable | UserResolvable; * @interface ParentChannelOptions */ export interface ParentChannelOptions { - /** - * Whether the child channel should be removed if its parent becomes unregistered. - * - * @type {boolean} - * @memberof ParentChannelOptions - */ - childAutoDeleteIfParentGetsUnregistered?: boolean; + /** + * Whether the child channel should be removed if its parent becomes unregistered. + * + * @type {boolean} + * @memberof ParentChannelOptions + */ + childAutoDeleteIfParentGetsUnregistered?: boolean; - /** - * The category in which the child channels should be created. - * - * @type {Snowflake} - * @memberof ParentChannelOptions - */ - childCategory?: Snowflake; + /** + * The category in which the child channels should be created. + * + * @type {Snowflake? | null} + * @memberof ParentChannelOptions + */ + childCategory?: Snowflake | null; - /** - * Whether the child channel should be removed when empty. - * - * @type {boolean} - * @memberof ParentChannelOptions - */ - childAutoDeleteIfEmpty: boolean; + /** + * Whether the child channel should be removed when empty. + * + * @type {boolean} + * @memberof ParentChannelOptions + */ + childAutoDeleteIfEmpty: boolean; - /** - * Whether the child channel should be removed - * when its owner leaves it. - * - * @type {boolean} - * @memberof ParentChannelOptions - */ - childAutoDeleteIfOwnerLeaves: boolean; + /** + * Whether the child channel should be removed + * when its owner leaves it. + * + * @type {boolean} + * @memberof ParentChannelOptions + */ + childAutoDeleteIfOwnerLeaves: boolean; - /** - * Whether the child channel can be renamed or not without forcing the add of the prefix. - * Please notice that if set on true, the capacity to reload channels into memory on bot restart cannot be guaranteed. - * - * @type {boolean} - * @memberof ParentChannelOptions - */ - childCanBeRenamed?: boolean; + /** + * Whether the child channel can be renamed or not without forcing the add of the prefix. + * Please notice that if set on true, the capacity to reload channels into memory on bot restart cannot be guaranteed. + * + * @type {boolean} + * @memberof ParentChannelOptions + */ + childCanBeRenamed?: boolean; - /** - * The function that resolves the name of the child voice channels - * when automatically generated. - * - * @param {string} str - * @param {number} count - * @return {*} {string} - * @memberof ParentChannelOptions - */ - childVoiceFormat(str: string, count: number): string; + /** + * The function that resolves the name of the child voice channels + * when automatically generated. + * + * @param {string} str + * @param {number} count + * @return {*} {string} + * @memberof ParentChannelOptions + */ + childVoiceFormat(str: string, count: number): string; - /** - * The regular expression that should fit the childVoiceFormat in order to detect - * the child channels in case the bot crashes and reconnects. - * - * @type {RegExp} - * @memberof ParentChannelOptions - */ - childVoiceFormatRegex: RegExp; + /** + * The regular expression that should fit the childVoiceFormat in order to detect + * the child channels in case the bot crashes and reconnects. + * + * @type {RegExp} + * @memberof ParentChannelOptions + */ + childVoiceFormatRegex: RegExp; - /** - * The maximum number of users in a child channel. - * - * @remark Will be ignored if {@link childShouldBeACopyOfParent} is set to true. - * - * @type {number} - * @memberof ParentChannelOptions - */ - childMaxUsers?: number; + /** + * The maximum number of users in a child channel. + * + * @remark Will be ignored if {@link childShouldBeACopyOfParent} is set to true. + * + * @type {number} + * @memberof ParentChannelOptions + */ + childMaxUsers?: number; - /** - * The bitrate of a child voice channel. - * - * @remark Will be ignored if {@link childShouldBeACopyOfParent} is set to true. - * - * @type {number} - * @memberof ParentChannelOptions - */ - childBitrate?: number; + /** + * The bitrate of a child voice channel. + * + * @remark Will be ignored if {@link childShouldBeACopyOfParent} is set to true. + * + * @type {number} + * @memberof ParentChannelOptions + */ + childBitrate?: number; - /** - * The permissions overwrites of a child channel. - * - * @type {PermissionOverwriteOptions} - * @memberof ParentChannelOptions - */ - childPermissionOverwriteOptions?: PermissionOverwriteOptions; + /** + * The permissions overwrites of a child channel. + * + * @type {PermissionOverwriteOptions} + * @memberof ParentChannelOptions + */ + childPermissionOverwriteOptions?: PermissionOverwriteOptions; - /** - * The list of users or roles to which the childPermissionOverwriteOption are applied. - * - * @type {Resolvables[]} - * @memberof ParentChannelOptions - */ - childOverwriteRolesAndUsers?: Resolvables[]; + /** + * The list of users or roles to which the childPermissionOverwriteOption are applied. + * + * @type {Resolvables[]} + * @memberof ParentChannelOptions + */ + childOverwriteRolesAndUsers?: Resolvables[]; - /** - * Whether the child channel should be a clone of the parent's channel or not. - * - * @remark Setting this parameter to true will force the manager to fully clone the parent's channel, - * giving no use to {@link childBitrate} and {@link childMaxUsers}. Only the name of the child channel - * will be customized. - * - * @default false - * @type {boolean} - * @memberof ParentChannelOptions - */ - childShouldBeACopyOfParent?: boolean; + /** + * Whether the child channel should be a clone of the parent's channel or not. + * + * @remark Setting this parameter to true will force the manager to fully clone the parent's channel, + * giving no use to {@link childBitrate} and {@link childMaxUsers}. Only the name of the child channel + * will be customized. + * + * @default false + * @type {boolean} + * @memberof ParentChannelOptions + */ + childShouldBeACopyOfParent?: boolean; } diff --git a/src/types/index.ts b/src/types/index.ts index 381e17d..1b293f5 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,3 @@ -export * from './ChildChannelData'; -export * from './ParentChannelData'; -export * from './ParentChannelOptions'; +export * from "./ChildChannelData.js"; +export * from "./ParentChannelData.js"; +export * from "./ParentChannelOptions.js"; diff --git a/tsconfig.json b/tsconfig.json index 07a54ef..a1907d8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,23 +1,22 @@ { "compilerOptions": { - "target": "ESNext", - "module": "commonjs", + "baseUrl": "./src", "declaration": true, + "esModuleInterop": true, "outDir": "./lib", - "strict": true, "resolveJsonModule": true, - "strictNullChecks": false, - "esModuleInterop": true, "skipLibCheck": true, - "moduleResolution": "node" + "strict": true, + "strictNullChecks": true, + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext" }, - "include": ["src/**/*"], - "exclude": ["lib/*", "node_modules/*"], - "typedocOptions": { - "entryPoints": ["src/index.ts"], - "out": "docs/api-docs", - "excludePrivate": true, - "excludeExternals": true, - "hideGenerator": true - } -} + "exclude": [ + "lib/*", + "node_modules/*" + ], + "include": [ + "src/**/*" + ] +} \ No newline at end of file diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 80607bd..0000000 --- a/tslint.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "defaultSeverity": "error", - "extends": ["tslint:recommended", "tslint-config-prettier"], - "jsRules": { - "no-unused-expression": true - }, - "rulesDirectory": [] -} diff --git a/typedoc.config.js b/typedoc.config.js new file mode 100644 index 0000000..70af344 --- /dev/null +++ b/typedoc.config.js @@ -0,0 +1,12 @@ +/** @type {import('typedoc').TypeDocOptions} */ +export default { + entryPoints: ["src/index.ts"], + out: "docs/api-docs", + hideGenerator: true, + excludePrivate: true, + excludeExternals: true, + navigationLinks: { + GitHub: "https://github.com/hunteroi/discord-temp-channels", + "Breaking Changes": "https://github.com/hunteroi/discord-temp-channels/blob/master/BREAKING_CHANGES.md" + } +} diff --git a/yarn.lock b/yarn.lock index 9462468..21ef3dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,377 +2,177 @@ # yarn lockfile v1 -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@discordjs/builders@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-0.5.0.tgz#646cbea9cc67f68639e6fb70ed1278b26dacdb14" - integrity sha512-HP5y4Rqw68o61Qv4qM5tVmDbWi4mdTFftqIOGRo33SNPpLJ1Ga3KEIR2ibKofkmsoQhEpLmopD1AZDs3cKpHuw== - dependencies: - "@sindresorhus/is" "^4.0.1" - discord-api-types "^0.22.0" - ow "^0.27.0" - ts-mixer "^6.0.0" - tslib "^2.3.0" - -"@discordjs/builders@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.5.0.tgz#f6dd4684e46707eb600eabdfdacd3b44c9e924cd" - integrity sha512-7XxT78mnNBPigHn2y6KAXkicxIBFtZREGWaRZ249EC1l6gBUEP8IyVY5JTciIjJArxkF+tg675aZvsTNTKBpmA== - dependencies: - "@discordjs/formatters" "^0.2.0" - "@discordjs/util" "^0.2.0" - "@sapphire/shapeshift" "^3.8.1" - discord-api-types "^0.37.35" +"@biomejs/biome@1.6.4": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-1.6.4.tgz#d09ab44c1df2a0cbbbb15901779a164beacd356d" + integrity sha512-3groVd2oWsLC0ZU+XXgHSNbq31lUcOCBkCcA7sAQGBopHcmL+jmmdoWlY3S61zIh+f2mqQTQte1g6PZKb3JJjA== + optionalDependencies: + "@biomejs/cli-darwin-arm64" "1.6.4" + "@biomejs/cli-darwin-x64" "1.6.4" + "@biomejs/cli-linux-arm64" "1.6.4" + "@biomejs/cli-linux-arm64-musl" "1.6.4" + "@biomejs/cli-linux-x64" "1.6.4" + "@biomejs/cli-linux-x64-musl" "1.6.4" + "@biomejs/cli-win32-arm64" "1.6.4" + "@biomejs/cli-win32-x64" "1.6.4" + +"@biomejs/cli-darwin-arm64@1.6.4": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.6.4.tgz#a2b07cacb0d2769ae5545b6a3cf40907fbfd4ab0" + integrity sha512-2WZef8byI9NRzGajGj5RTrroW9BxtfbP9etigW1QGAtwu/6+cLkdPOWRAs7uFtaxBNiKFYA8j/BxV5zeAo5QOQ== + +"@biomejs/cli-darwin-x64@1.6.4": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.6.4.tgz#476720d731864508312b12fbef62a35609ef5f96" + integrity sha512-uo1zgM7jvzcoDpF6dbGizejDLCqNpUIRkCj/oEK0PB0NUw8re/cn1EnxuOLZqDpn+8G75COLQTOx8UQIBBN/Kg== + +"@biomejs/cli-linux-arm64-musl@1.6.4": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.6.4.tgz#403f5889a4ec290e35a0b910c1c26723373cf5fc" + integrity sha512-Hp8Jwt6rjj0wCcYAEN6/cfwrrPLLlGOXZ56Lei4Pt4jy39+UuPeAVFPeclrrCfxyL1wQ2xPrhd/saTHSL6DoJg== + +"@biomejs/cli-linux-arm64@1.6.4": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.6.4.tgz#7eff2af0fc5d9af9affc963bb594ec2ebf89668f" + integrity sha512-wAOieaMNIpLrxGc2/xNvM//CIZg7ueWy3V5A4T7gDZ3OL/Go27EKE59a+vMKsBCYmTt7jFl4yHz0TUkUbodA/w== + +"@biomejs/cli-linux-x64-musl@1.6.4": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.6.4.tgz#aeca8dd886b19b7779dfb43898ec896c71da279f" + integrity sha512-wqi0hr8KAx5kBO0B+m5u8QqiYFFBJOSJVSuRqTeGWW+GYLVUtXNidykNqf1JsW6jJDpbkSp2xHKE/bTlVaG2Kg== + +"@biomejs/cli-linux-x64@1.6.4": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-1.6.4.tgz#545b205dea20195b1fa64f5a0e60331a70133518" + integrity sha512-qTWhuIw+/ePvOkjE9Zxf5OqSCYxtAvcTJtVmZT8YQnmY2I62JKNV2m7tf6O5ViKZUOP0mOQ6NgqHKcHH1eT8jw== + +"@biomejs/cli-win32-arm64@1.6.4": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.6.4.tgz#2c377c0965749d01280baac6cb273bcbe11cd652" + integrity sha512-Wp3FiEeF6v6C5qMfLkHwf4YsoNHr/n0efvoC8jCKO/kX05OXaVExj+1uVQ1eGT7Pvx0XVm/TLprRO0vq/V6UzA== + +"@biomejs/cli-win32-x64@1.6.4": + version "1.6.4" + resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-1.6.4.tgz#317fed21b863d43778665d42a41cbd0f94351051" + integrity sha512-mz183Di5hTSGP7KjNWEhivcP1wnHLGmOxEROvoFsIxMYtDhzJDad4k5gI/1JbmA0xe4n52vsgqo09tBhrMT/Zg== + +"@discordjs/builders@^1.8.2": + version "1.8.2" + resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.8.2.tgz#535d970331ee40f20dec9ef8079e43092f323ce9" + integrity sha512-6wvG3QaCjtMu0xnle4SoOIeFB4y6fKMN6WZfy3BMKJdQQtPLik8KGzDwBVL/+wTtcE/ZlFjgEk74GublyEVZ7g== + dependencies: + "@discordjs/formatters" "^0.4.0" + "@discordjs/util" "^1.1.0" + "@sapphire/shapeshift" "^3.9.7" + discord-api-types "0.37.83" fast-deep-equal "^3.1.3" - ts-mixer "^6.0.3" - tslib "^2.5.0" - -"@discordjs/collection@^0.2.1": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-0.2.4.tgz#c8ff2250430dcec7324dd4aafd1ccbcbdfa9ac14" - integrity sha512-PVrEJH+V6Ob0OwfagYQ/57kwt/HNEJxt5jqY4P+S3st9y29t9iokdnGMQoJXG5VEMAQIPbzu9Snw1F6yE8PdLA== + ts-mixer "^6.0.4" + tslib "^2.6.2" -"@discordjs/collection@^1.4.0": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.4.0.tgz#6b5d5429db0691a3f5a962c21f6bc7859eef3333" - integrity sha512-hiOJyk2CPFf1+FL3a4VKCuu1f448LlROVuu8nLz1+jCOAPokUcdFAV+l4pd3B3h6uJlJQSASoZzrdyNdjdtfzQ== - -"@discordjs/form-data@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@discordjs/form-data/-/form-data-3.0.1.tgz#5c9e6be992e2e57d0dfa0e39979a850225fb4697" - integrity sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -"@discordjs/formatters@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.2.0.tgz#a861d9c385dfc6c7294e44c5441beee933820a4f" - integrity sha512-vn4oMSXuMZUm8ITqVOtvE7/fMMISj4cI5oLsR09PEQXHKeKDAMLltG/DWeeIs7Idfy6V8Fk3rn1e69h7NfzuNA== - dependencies: - discord-api-types "^0.37.35" - -"@discordjs/rest@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-1.6.0.tgz#d77c9b5533f6d2079468d4fd497d3fabeb529c20" - integrity sha512-HGvqNCZ5Z5j0tQHjmT1lFvE5ETO4hvomJ1r0cbnpC1zM23XhCpZ9wgTCiEmaxKz05cyf2CI9p39+9LL+6Yz1bA== - dependencies: - "@discordjs/collection" "^1.4.0" - "@discordjs/util" "^0.2.0" - "@sapphire/async-queue" "^1.5.0" - "@sapphire/snowflake" "^3.4.0" - discord-api-types "^0.37.35" - file-type "^18.2.1" - tslib "^2.5.0" - undici "^5.20.0" - -"@discordjs/util@^0.2.0": - version "0.2.0" - resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-0.2.0.tgz#91b590dae3934ffa5fe34530afc5212c569d6751" - integrity sha512-/8qNbebFzLWKOOg+UV+RB8itp4SmU5jw0tBUD3ifElW6rYNOj1Ku5JaSW7lLl/WgjjxF01l/1uQPCzkwr110vg== - -"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - -"@eslint/eslintrc@^3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.0.2.tgz#36180f8e85bf34d2fe3ccc2261e8e204a411ab4e" - integrity sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^10.0.1" - globals "^14.0.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" +"@discordjs/collection@1.5.3": + version "1.5.3" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.5.3.tgz#5a1250159ebfff9efa4f963cfa7e97f1b291be18" + integrity sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ== -"@eslint/js@9.0.0", "@eslint/js@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.0.0.tgz#1a9e4b4c96d8c7886e0110ed310a0135144a1691" - integrity sha512-RThY/MnKrhubF6+s1JflwUjPEsnCEmYCWwqa/aRISKWNXGZ9epUwft4bUMM35SdKF9xvBrLydAM1RDHd1Z//ZQ== - -"@humanwhocodes/config-array@^0.12.3": - version "0.12.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.12.3.tgz#a6216d90f81a30bedd1d4b5d799b47241f318072" - integrity sha512-jsNnTBlMWuTpDkeE3on7+dWJi0D6fdDfeANj/w7MpS8ztROCoLvIO2nG0CcFj+E4k8j4QrSTh4Oryi3i2G669g== - dependencies: - "@humanwhocodes/object-schema" "^2.0.3" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.3": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" - integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== +"@discordjs/collection@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-2.1.0.tgz#f327d944ab2dcf9a1f674470a481f78a120a5e3b" + integrity sha512-mLcTACtXUuVgutoznkh6hS3UFqYirDYAg5Dc1m8xn6OvPjetnUlf/xjtqnnc47OwWdaoCQnHmHh9KofhD6uRqw== -"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" +"@discordjs/formatters@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.4.0.tgz#066a2c2163b26ac066e6f621f17445be9690c6a9" + integrity sha512-fJ06TLC1NiruF35470q3Nr1bi95BdvKFAF+T5bNfZJ4bNdqZ3VZ+Ttg6SThqTxm6qumSG3choxLBHMC69WXNXQ== + dependencies: + discord-api-types "0.37.83" + +"@discordjs/rest@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-2.3.0.tgz#06d37c7fb54a9be61134b5bbb201abd760343472" + integrity sha512-C1kAJK8aSYRv3ZwMG8cvrrW4GN0g5eMdP8AuN8ODH5DyOCbHgJspze1my3xHOAgwLJdKUbWNVyAeJ9cEdduqIg== + dependencies: + "@discordjs/collection" "^2.1.0" + "@discordjs/util" "^1.1.0" + "@sapphire/async-queue" "^1.5.2" + "@sapphire/snowflake" "^3.5.3" + "@vladfrangu/async_event_emitter" "^2.2.4" + discord-api-types "0.37.83" + magic-bytes.js "^1.10.0" + tslib "^2.6.2" + undici "6.13.0" + +"@discordjs/util@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-1.1.0.tgz#dcffd2b61aab8eadd66bea67811bc34fc769bb2a" + integrity sha512-IndcI5hzlNZ7GS96RV3Xw1R2kaDuXEp7tRIy/KlhidpN/BQ1qh1NZt3377dMLTa44xDUNKT7hnXkA/oUAzD/lg== -"@sapphire/async-queue@^1.1.4": +"@discordjs/ws@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@discordjs/ws/-/ws-1.1.1.tgz#bffbfd46838258ab09054ed98ddef1a36f6507a3" + integrity sha512-PZ+vLpxGCRtmr2RMkqh8Zp+BenUaJqlS6xhgWKEZcgC/vfHLEzpHtKkB0sl3nZWpwtcKk6YWy+pU3okL2I97FA== + dependencies: + "@discordjs/collection" "^2.1.0" + "@discordjs/rest" "^2.3.0" + "@discordjs/util" "^1.1.0" + "@sapphire/async-queue" "^1.5.2" + "@types/ws" "^8.5.10" + "@vladfrangu/async_event_emitter" "^2.2.4" + discord-api-types "0.37.83" + tslib "^2.6.2" + ws "^8.16.0" + +"@sapphire/async-queue@^1.5.2": version "1.5.2" resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.2.tgz#2982dce16e5b8b1ea792604d20c23c0585877b97" integrity sha512-7X7FFAA4DngXUl95+hYbUF19bp1LGiffjJtu7ygrZrbdCSsdDDBaSjB7Akw0ZbOu6k0xpXyljnJ6/RZUvLfRdg== -"@sapphire/async-queue@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.0.tgz#2f255a3f186635c4fb5a2381e375d3dfbc5312d8" - integrity sha512-JkLdIsP8fPAdh9ZZjrbHWR/+mZj0wvKS5ICibcLrRI1j84UmLMshx5n9QmL8b95d4onJ2xxiyugTgSAX7AalmA== - -"@sapphire/shapeshift@^3.8.1": - version "3.8.1" - resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-3.8.1.tgz#b98dc6a7180f9b38219267917b2e6fa33f9ec656" - integrity sha512-xG1oXXBhCjPKbxrRTlox9ddaZTvVpOhYLmKmApD/vIWOV1xEYXnpoFs68zHIZBGbqztq6FrUPNPerIrO1Hqeaw== +"@sapphire/shapeshift@^3.9.7": + version "3.9.7" + resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-3.9.7.tgz#43e23243cac8a0c046bf1e73baf3dbf407d33a0c" + integrity sha512-4It2mxPSr4OGn4HSQWGmhFMsNFGfFVhWeRPCRwbH972Ek2pzfGRZtb0pJ4Ze6oIzcyh2jw7nUDa6qGlWofgd9g== dependencies: fast-deep-equal "^3.1.3" lodash "^4.17.21" -"@sapphire/snowflake@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.4.0.tgz#25c012158a9feea2256c718985dbd6c1859a5022" - integrity sha512-zZxymtVO6zeXVMPds+6d7gv/OfnCc25M1Z+7ZLB0oPmeMTPeRWVPQSS16oDJy5ZsyCOLj7M6mbZml5gWXcVRNw== - -"@sindresorhus/is@^4.0.1": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@tokenizer/token@^0.3.0": - version "0.3.0" - resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" - integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== - -"@types/json-schema@^7.0.15": - version "7.0.15" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" - integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@sapphire/snowflake@3.5.3", "@sapphire/snowflake@^3.5.3": + version "3.5.3" + resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.5.3.tgz#0c102aa2ec5b34f806e9bc8625fc6a5e1d0a0c6a" + integrity sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ== "@types/node@*": version "17.0.30" resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.30.tgz#2c6e8512acac70815e8176aa30c38025067880ef" integrity sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw== -"@types/node@^18.7.11": - version "18.11.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.7.tgz#8ccef136f240770c1379d50100796a6952f01f94" - integrity sha512-LhFTglglr63mNXUSRYD8A+ZAIu5sFqNJ4Y2fPuY7UlrySJH87rRRlhtVmMHplmfk5WkoJGmDjE9oiTfyX94CpQ== - -"@types/semver@^7.5.8": - version "7.5.8" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" - integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== - -"@types/ws@^7.4.7": - version "7.4.7" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" - integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== +"@types/node@^20.14.6": + version "20.14.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.6.tgz#f3c19ffc98c2220e18de259bb172dd4d892a6075" + integrity sha512-JbA0XIJPL1IiNnU7PFxDXyfAwcwVVrOoqyzzyQTyMeVhBzkJVMSkC1LlVsRQ2lpqiY4n6Bb9oCS6lzDKVQxbZw== dependencies: - "@types/node" "*" + undici-types "~5.26.4" -"@types/ws@^8.5.3": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== +"@types/ws@^8.5.10": + version "8.5.10" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" + integrity sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A== dependencies: "@types/node" "*" -"@types/ws@^8.5.4": - version "8.5.4" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" - integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== - dependencies: - "@types/node" "*" - -"@typescript-eslint/eslint-plugin@7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.6.0.tgz#1f5df5cda490a0bcb6fbdd3382e19f1241024242" - integrity sha512-gKmTNwZnblUdnTIJu3e9kmeRRzV2j1a/LUO27KNNAnIC5zjy1aSvXSRp4rVNlmAoHlQ7HzX42NbKpcSr4jF80A== - dependencies: - "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.6.0" - "@typescript-eslint/type-utils" "7.6.0" - "@typescript-eslint/utils" "7.6.0" - "@typescript-eslint/visitor-keys" "7.6.0" - debug "^4.3.4" - graphemer "^1.4.0" - ignore "^5.3.1" - natural-compare "^1.4.0" - semver "^7.6.0" - ts-api-utils "^1.3.0" - -"@typescript-eslint/parser@7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.6.0.tgz#0aca5de3045d68b36e88903d15addaf13d040a95" - integrity sha512-usPMPHcwX3ZoPWnBnhhorc14NJw9J4HpSXQX4urF2TPKG0au0XhJoZyX62fmvdHONUkmyUe74Hzm1//XA+BoYg== - dependencies: - "@typescript-eslint/scope-manager" "7.6.0" - "@typescript-eslint/types" "7.6.0" - "@typescript-eslint/typescript-estree" "7.6.0" - "@typescript-eslint/visitor-keys" "7.6.0" - debug "^4.3.4" - -"@typescript-eslint/scope-manager@7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.6.0.tgz#1e9972f654210bd7500b31feadb61a233f5b5e9d" - integrity sha512-ngttyfExA5PsHSx0rdFgnADMYQi+Zkeiv4/ZxGYUWd0nLs63Ha0ksmp8VMxAIC0wtCFxMos7Lt3PszJssG/E6w== - dependencies: - "@typescript-eslint/types" "7.6.0" - "@typescript-eslint/visitor-keys" "7.6.0" - -"@typescript-eslint/type-utils@7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.6.0.tgz#644f75075f379827d25fe0713e252ccd4e4a428c" - integrity sha512-NxAfqAPNLG6LTmy7uZgpK8KcuiS2NZD/HlThPXQRGwz6u7MDBWRVliEEl1Gj6U7++kVJTpehkhZzCJLMK66Scw== - dependencies: - "@typescript-eslint/typescript-estree" "7.6.0" - "@typescript-eslint/utils" "7.6.0" - debug "^4.3.4" - ts-api-utils "^1.3.0" - -"@typescript-eslint/types@7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.6.0.tgz#53dba7c30c87e5f10a731054266dd905f1fbae38" - integrity sha512-h02rYQn8J+MureCvHVVzhl69/GAfQGPQZmOMjG1KfCl7o3HtMSlPaPUAPu6lLctXI5ySRGIYk94clD/AUMCUgQ== - -"@typescript-eslint/typescript-estree@7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.6.0.tgz#112a3775563799fd3f011890ac8322f80830ac17" - integrity sha512-+7Y/GP9VuYibecrCQWSKgl3GvUM5cILRttpWtnAu8GNL9j11e4tbuGZmZjJ8ejnKYyBRb2ddGQ3rEFCq3QjMJw== - dependencies: - "@typescript-eslint/types" "7.6.0" - "@typescript-eslint/visitor-keys" "7.6.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - minimatch "^9.0.4" - semver "^7.6.0" - ts-api-utils "^1.3.0" - -"@typescript-eslint/utils@7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.6.0.tgz#e400d782280b6f724c8a1204269d984c79202282" - integrity sha512-x54gaSsRRI+Nwz59TXpCsr6harB98qjXYzsRxGqvA5Ue3kQH+FxS7FYU81g/omn22ML2pZJkisy6Q+ElK8pBCA== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - "@types/json-schema" "^7.0.15" - "@types/semver" "^7.5.8" - "@typescript-eslint/scope-manager" "7.6.0" - "@typescript-eslint/types" "7.6.0" - "@typescript-eslint/typescript-estree" "7.6.0" - semver "^7.6.0" - -"@typescript-eslint/visitor-keys@7.6.0": - version "7.6.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.6.0.tgz#d1ce13145844379021e1f9bd102c1d78946f4e76" - integrity sha512-4eLB7t+LlNUmXzfOu1VAIAdkjbu5xNSerURS9X/S5TUKWFRpXRQZbmtPqgKmYx8bj3J0irtQXSiWAOY82v+cgw== - dependencies: - "@typescript-eslint/types" "7.6.0" - eslint-visitor-keys "^3.4.3" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.11.3: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== +"@vladfrangu/async_event_emitter@^2.2.4": + version "2.2.4" + resolved "https://registry.yarnpkg.com/@vladfrangu/async_event_emitter/-/async_event_emitter-2.2.4.tgz#d3537432c6db6444680a596271dff8ea407343b3" + integrity sha512-ButUPz9E9cXMLgvAW8aLAKKJJsPu1dY1/l/E8xzLFuysowXygs6GBcyunK9rnGC4zTsnIc2mQo71rGw9U+Ykug== ansi-sequence-parser@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz#e0aa1cdcbc8f8bb0b5bca625aac41f5f056973cf" integrity sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg== -ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - brace-expansion@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" @@ -380,488 +180,40 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -busboy@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893" - integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== - dependencies: - streamsearch "^1.1.0" - -callsites@^3.0.0, callsites@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -chalk@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -discord-api-types@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.22.0.tgz#34dc57fe8e016e5eaac5e393646cd42a7e1ccc2a" - integrity sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg== - -discord-api-types@^0.37.35: - version "0.37.36" - resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.36.tgz#650a8f66dce2c5e54a8c2275db74a0bb7936430d" - integrity sha512-Nlxmp10UpVr/utgZ9uODQvG2Or+5w7LFrvFMswyeKC9l/+UaqGT6H0OVgEFhu9GEO4U6K7NNO5W8Carv7irnCA== - -discord-logs@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/discord-logs/-/discord-logs-2.2.1.tgz#5711bca4ad6c4573c05797632203980a0d3de3cf" - integrity sha512-VTNe/uRcfdLDLBLf1Taaj3OYU1GLWTAVEcCPC/xZqZd1X4D3DXW1qYJWxoyx3yqiJZ4rwQ3A0bPIFryIdniKrQ== - dependencies: - "@types/node" "^18.7.11" - "@types/ws" "^8.5.3" - -discord-sync-commands@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/discord-sync-commands/-/discord-sync-commands-0.3.0.tgz#471d711a7c6cbcccb7ab29e29bb53d68d02d0dfa" - integrity sha512-JPKJTqzUvAtqTFcHp8GgEZfgpkOaeUIHpLVcnP88lK8gMMxUfz1X9+DsVgbAbsWSF7uer0PpBowHyWomzTJH/g== - dependencies: - discord.js discordjs/discord.js#refs/pull/6414/head - -discord.js@14.x: - version "14.8.0" - resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.8.0.tgz#0e5def8a95a22018844cdfc0f63b9806392da79b" - integrity sha512-UOxYtc/YnV7jAJ2gISluJyYeBw4e+j8gWn+IoqG8unaHAVuvZ13DdYN0M1f9fbUgUvSarV798inIrYFtDNDjwQ== - dependencies: - "@discordjs/builders" "^1.5.0" - "@discordjs/collection" "^1.4.0" - "@discordjs/formatters" "^0.2.0" - "@discordjs/rest" "^1.6.0" - "@discordjs/util" "^0.2.0" - "@sapphire/snowflake" "^3.4.0" - "@types/ws" "^8.5.4" - discord-api-types "^0.37.35" - fast-deep-equal "^3.1.3" - lodash.snakecase "^4.1.1" - tslib "^2.5.0" - undici "^5.20.0" - ws "^8.12.1" - -discord.js@discordjs/discord.js#refs/pull/6414/head: - version "13.2.0-dev" - resolved "https://codeload.github.com/discordjs/discord.js/tar.gz/b2ef10fdd742aa08da3a33b2cf35f0f2350e915a" - dependencies: - "@discordjs/builders" "^0.5.0" - "@discordjs/collection" "^0.2.1" - "@discordjs/form-data" "^3.0.1" - "@sapphire/async-queue" "^1.1.4" - "@types/ws" "^7.4.7" - discord-api-types "^0.22.0" - node-fetch "^2.6.1" - ws "^7.5.1" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-scope@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.0.1.tgz#a9601e4b81a0b9171657c343fb13111688963cfc" - integrity sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint-visitor-keys@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz#e3adc021aa038a2a8e0b2f8b0ce8f66b9483b1fb" - integrity sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw== - -eslint@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.0.0.tgz#6270548758e390343f78c8afd030566d86927d40" - integrity sha512-IMryZ5SudxzQvuod6rUdIUz29qFItWx281VhtFVc2Psy/ZhlCeD/5DT6lBIJ4H3G+iamGJoTln1v+QSuPw0p7Q== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^3.0.2" - "@eslint/js" "9.0.0" - "@humanwhocodes/config-array" "^0.12.3" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - escape-string-regexp "^4.0.0" - eslint-scope "^8.0.1" - eslint-visitor-keys "^4.0.0" - espree "^10.0.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^8.0.0" - find-up "^5.0.0" - glob-parent "^6.0.2" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-10.0.1.tgz#600e60404157412751ba4a6f3a2ee1a42433139f" - integrity sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww== - dependencies: - acorn "^8.11.3" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^4.0.0" - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: +discord-api-types@0.37.83: + version "0.37.83" + resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.37.83.tgz#a22a799729ceded8176ea747157837ddf4708b1f" + integrity sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA== + +discord.js@^14.15.3: + version "14.15.3" + resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.15.3.tgz#b2a67a1a4ef192be498fb8b6784224a42906f1be" + integrity sha512-/UJDQO10VuU6wQPglA4kz2bw2ngeeSbogiIPx/TsnctfzV/tNf+q+i1HlgtX1OGpeOBpJH9erZQNO5oRM2uAtQ== + dependencies: + "@discordjs/builders" "^1.8.2" + "@discordjs/collection" "1.5.3" + "@discordjs/formatters" "^0.4.0" + "@discordjs/rest" "^2.3.0" + "@discordjs/util" "^1.1.0" + "@discordjs/ws" "^1.1.1" + "@sapphire/snowflake" "3.5.3" + discord-api-types "0.37.83" + fast-deep-equal "3.1.3" + lodash.snakecase "4.1.1" + tslib "2.6.2" + undici "6.13.0" + +fast-deep-equal@3.1.3, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -file-entry-cache@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" - integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== - dependencies: - flat-cache "^4.0.0" - -file-type@^18.2.1: - version "18.2.1" - resolved "https://registry.yarnpkg.com/file-type/-/file-type-18.2.1.tgz#6d8f1fa3b079606f6ecf89483346f55fcd2c671b" - integrity sha512-Yw5MtnMv7vgD2/6Bjmmuegc8bQEVA9GmAyaR18bMYWKqsWDG9wgYZ1j4I6gNMF5Y5JBDcUcjRQqNQx7Y8uotcg== - dependencies: - readable-web-to-node-stream "^3.0.2" - strtok3 "^7.0.0" - token-types "^5.0.1" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -flat-cache@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" - integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.4" - -flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -globals@^14.0.0: - version "14.0.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" - integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0, ignore@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -inherits@^2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - jsonc-parser@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" integrity sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA== -keyv@^4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.snakecase@^4.1.1: +lodash.snakecase@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== @@ -871,221 +223,28 @@ lodash@^4.17.21: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - lunr@^2.3.9: version "2.3.9" resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== +magic-bytes.js@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz#c41cf4bc2f802992b05e64962411c9dd44fdef92" + integrity sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ== + marked@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/marked/-/marked-4.3.0.tgz#796362821b019f734054582038b116481b456cf3" integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -minimatch@^3.0.5, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^9.0.3, minimatch@^9.0.4: +minimatch@^9.0.3: version "9.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.4.tgz#8e49c731d1749cbec05050ee5145147b32496a51" integrity sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw== dependencies: brace-expansion "^2.0.1" -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -node-fetch@^2.6.1: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -ow@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/ow/-/ow-0.27.0.tgz#d44da088e8184fa11de64b5813206f9f86ab68d0" - integrity sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ== - dependencies: - "@sindresorhus/is" "^4.0.1" - callsites "^3.1.0" - dot-prop "^6.0.1" - lodash.isequal "^4.5.0" - type-fest "^1.2.1" - vali-date "^1.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -peek-readable@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-5.0.0.tgz#7ead2aff25dc40458c60347ea76cfdfd63efdfec" - integrity sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A== - -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -readable-stream@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-web-to-node-stream@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" - integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== - dependencies: - readable-stream "^3.6.0" - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -semver@^7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - shiki@^0.14.7: version "0.14.7" resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.14.7.tgz#c3c9e1853e9737845f1d2ef81b31bcfb07056d4e" @@ -1096,112 +255,16 @@ shiki@^0.14.7: vscode-oniguruma "^1.7.0" vscode-textmate "^8.0.0" -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -streamsearch@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" - integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strtok3@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-7.0.0.tgz#868c428b4ade64a8fd8fee7364256001c1a4cbe5" - integrity sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ== - dependencies: - "@tokenizer/token" "^0.3.0" - peek-readable "^5.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -token-types@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/token-types/-/token-types-5.0.1.tgz#aa9d9e6b23c420a675e55413b180635b86a093b4" - integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== - dependencies: - "@tokenizer/token" "^0.3.0" - ieee754 "^1.2.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -ts-api-utils@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== - -ts-mixer@^6.0.0: +ts-mixer@^6.0.4: version "6.0.4" resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.4.tgz#1da39ceabc09d947a82140d9f09db0f84919ca28" integrity sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA== -ts-mixer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.3.tgz#69bd50f406ff39daa369885b16c77a6194c7cae6" - integrity sha512-k43M7uCG1AkTyxgnmI5MPwKoUvS/bRvLvUb7+Pgpdlmok8AoqmUaZxUUw8zKM5B1lqZrt41GjYgnvAi0fppqgQ== - -tslib@^2.3.0: +tslib@2.6.2, tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tslib@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^1.2.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" - integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== - typedoc@^0.25.13: version "0.25.13" resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.25.13.tgz#9a98819e3b2d155a6d78589b46fa4c03768f0922" @@ -1212,43 +275,20 @@ typedoc@^0.25.13: minimatch "^9.0.3" shiki "^0.14.7" -typescript-eslint@^7.6.0: - version "7.6.0" - resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-7.6.0.tgz#12dd1de864bedc39df8180ea44a585571586291b" - integrity sha512-LY6vH6F1l5jpGqRtU+uK4+mOecIb4Cd4kaz1hAiJrgnNiHUA8wiw8BkJyYS+MRLM69F1QuSKwtGlQqnGl1Rc6w== - dependencies: - "@typescript-eslint/eslint-plugin" "7.6.0" - "@typescript-eslint/parser" "7.6.0" - "@typescript-eslint/utils" "7.6.0" - -typescript@^5.4.4: - version "5.4.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952" - integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw== - -undici@^5.20.0: - version "5.21.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.21.0.tgz#b00dfc381f202565ab7f52023222ab862bb2494f" - integrity sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA== - dependencies: - busboy "^1.6.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" +typescript@^5.4.5: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -vali-date@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" - integrity sha512-sgECfZthyaCKW10N0fm27cg8HYTFK5qMWgypqkXMQ4Wbl/zZKx7xZICgcoxIIE+WFAP/MBL2EFwC/YvLxw3Zeg== +undici@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.13.0.tgz#7edbf4b7f3aac5f8a681d515151bf55cb3589d72" + integrity sha512-Q2rtqmZWrbP8nePMq7mOJIN98M0fYvSgV89vwl/BQRT4mDOeY2GXZngfGpcBBhtky3woM7G24wZV3Q304Bv6cw== vscode-oniguruma@^1.7.0: version "1.7.0" @@ -1260,42 +300,7 @@ vscode-textmate@^8.0.0: resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-8.0.0.tgz#2c7a3b1163ef0441097e0b5d6389cd5504b59e5d" integrity sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg== -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -ws@^7.5.1: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.12.1: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== +ws@^8.16.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==