aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md21
-rw-r--r--Dockerfile1
-rw-r--r--README.md11
-rw-r--r--migrations/20240824215313_add_default_queue_page_size/migration.sql19
-rw-r--r--migrations/20241031084730_add_turn_down_volume_when_people_speak/migration.sql21
-rw-r--r--package.json20
-rw-r--r--schema.prisma21
-rw-r--r--src/commands/config.ts78
-rw-r--r--src/commands/play.ts56
-rw-r--r--src/commands/queue.ts19
-rw-r--r--src/inversify.config.ts16
-rw-r--r--src/services/add-query-to-queue.ts70
-rw-r--r--src/services/config.ts6
-rw-r--r--src/services/get-songs.ts102
-rw-r--r--src/services/player.ts66
-rw-r--r--src/services/youtube-api.ts2
-rw-r--r--src/utils/build-embed.ts10
-rw-r--r--src/utils/get-youtube-and-spotify-suggestions-for.ts79
-rw-r--r--tsconfig.json3
-rw-r--r--yarn.lock512
20 files changed, 744 insertions, 389 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 27c084e..b70f5ef 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+## [2.10.0] - 2024-11-04
+- New `/config set-reduce-vol-when-voice` command to automatically turn down the volume when people are speaking in the channel
+- New `/config set-reduce-vol-when-voice-target` command to set the target volume percentage (0-100) when people are speaking in the channel
+- Support for using only YouTube, spotify credentials are now optional.
+- Dependency update (Additional downgrade for p-queue)
+
+## [2.9.5] - 2024-10-29
+- Dependency update
+- Pull request #1040 merged (Used incorrect PR number, apoligies)
+
+## [2.9.4] - 2024-08-28
+
+### Added
+- An optional `page-size` to `/queue` command
+- Add `default-queue-page-size` setting
+
## [2.9.3] - 2024-08-19
### Fixed
@@ -338,7 +354,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added
- Initial release
-[unreleased]: https://github.com/codetheweb/muse/compare/v2.9.3...HEAD
+[unreleased]: https://github.com/museofficial/muse/compare/v2.10.0...HEAD
+[2.10.0]: https://github.com/museofficial/muse/compare/v2.9.5...v2.10.0
+[2.9.5]: https://github.com/museofficial/muse/compare/v2.9.4...v2.9.5
+[2.9.4]: https://github.com/codetheweb/muse/compare/v2.9.3...v2.9.4
[2.9.3]: https://github.com/codetheweb/muse/compare/v2.9.2...v2.9.3
[2.9.2]: https://github.com/codetheweb/muse/compare/v2.9.1...v2.9.2
[2.9.1]: https://github.com/codetheweb/muse/compare/v2.9.0...v2.9.1
diff --git a/Dockerfile b/Dockerfile
index 328c7d9..82f051f 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -52,5 +52,6 @@ ENV DATA_DIR=/data
ENV NODE_ENV=production
ENV COMMIT_HASH=$COMMIT_HASH
ENV BUILD_DATE=$BUILD_DATE
+ENV ENV_FILE=/config
CMD ["tini", "--", "node", "--enable-source-maps", "dist/scripts/migrate-and-start.js"]
diff --git a/README.md b/README.md
index 7fec19f..31b75e5 100644
--- a/README.md
+++ b/README.md
@@ -63,6 +63,8 @@ docker run -it -v "$(pwd)/data":/data -e DISCORD_TOKEN='' -e SPOTIFY_CLIENT_ID='
This starts Muse and creates a data directory in your current directory.
+You can also store your tokens in an environment file and make it available to your container. By default, the container will look for a `/config` environment file. You can customize this path with the `ENV_FILE` environment variable to use with, for example, [docker secrets](https://docs.docker.com/engine/swarm/secrets/).
+
**Docker Compose**:
```yaml
@@ -141,3 +143,12 @@ In the default state, Muse has the status "Online" and the text "Listening to Mu
### Bot-wide commands
If you have Muse running in a lot of guilds (10+) you may want to switch to registering commands bot-wide rather than for each guild. (The downside to this is that command updates can take up to an hour to propagate.) To do this, set the environment variable `REGISTER_COMMANDS_ON_BOT` to `true`.
+
+### Automatically turn down volume when people speak
+
+You can configure the bot to automatically turn down the volume when people are speaking in the channel using the following commands:
+
+- `/config set-reduce-vol-when-voice true` - Enable automatic volume reduction
+- `/config set-reduce-vol-when-voice false` - Disable automatic volume reduction
+- `/config set-reduce-vol-when-voice-target <volume>` - Set the target volume percentage when people speak (0-100, default is 70)
+
diff --git a/migrations/20240824215313_add_default_queue_page_size/migration.sql b/migrations/20240824215313_add_default_queue_page_size/migration.sql
new file mode 100644
index 0000000..ff3866a
--- /dev/null
+++ b/migrations/20240824215313_add_default_queue_page_size/migration.sql
@@ -0,0 +1,19 @@
+-- RedefineTables
+PRAGMA foreign_keys=OFF;
+CREATE TABLE "new_Setting" (
+ "guildId" TEXT NOT NULL PRIMARY KEY,
+ "playlistLimit" INTEGER NOT NULL DEFAULT 50,
+ "secondsToWaitAfterQueueEmpties" INTEGER NOT NULL DEFAULT 30,
+ "leaveIfNoListeners" BOOLEAN NOT NULL DEFAULT true,
+ "queueAddResponseEphemeral" BOOLEAN NOT NULL DEFAULT false,
+ "autoAnnounceNextSong" BOOLEAN NOT NULL DEFAULT false,
+ "defaultVolume" INTEGER NOT NULL DEFAULT 100,
+ "defaultQueuePageSize" INTEGER NOT NULL DEFAULT 10,
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" DATETIME NOT NULL
+);
+INSERT INTO "new_Setting" ("autoAnnounceNextSong", "createdAt", "defaultVolume", "guildId", "leaveIfNoListeners", "playlistLimit", "queueAddResponseEphemeral", "secondsToWaitAfterQueueEmpties", "updatedAt") SELECT "autoAnnounceNextSong", "createdAt", "defaultVolume", "guildId", "leaveIfNoListeners", "playlistLimit", "queueAddResponseEphemeral", "secondsToWaitAfterQueueEmpties", "updatedAt" FROM "Setting";
+DROP TABLE "Setting";
+ALTER TABLE "new_Setting" RENAME TO "Setting";
+PRAGMA foreign_key_check;
+PRAGMA foreign_keys=ON;
diff --git a/migrations/20241031084730_add_turn_down_volume_when_people_speak/migration.sql b/migrations/20241031084730_add_turn_down_volume_when_people_speak/migration.sql
new file mode 100644
index 0000000..07be5d9
--- /dev/null
+++ b/migrations/20241031084730_add_turn_down_volume_when_people_speak/migration.sql
@@ -0,0 +1,21 @@
+-- RedefineTables
+PRAGMA foreign_keys=OFF;
+CREATE TABLE "new_Setting" (
+ "guildId" TEXT NOT NULL PRIMARY KEY,
+ "playlistLimit" INTEGER NOT NULL DEFAULT 50,
+ "secondsToWaitAfterQueueEmpties" INTEGER NOT NULL DEFAULT 30,
+ "leaveIfNoListeners" BOOLEAN NOT NULL DEFAULT true,
+ "queueAddResponseEphemeral" BOOLEAN NOT NULL DEFAULT false,
+ "autoAnnounceNextSong" BOOLEAN NOT NULL DEFAULT false,
+ "defaultVolume" INTEGER NOT NULL DEFAULT 100,
+ "defaultQueuePageSize" INTEGER NOT NULL DEFAULT 10,
+ "turnDownVolumeWhenPeopleSpeak" BOOLEAN NOT NULL DEFAULT false,
+ "turnDownVolumeWhenPeopleSpeakTarget" INTEGER NOT NULL DEFAULT 20,
+ "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" DATETIME NOT NULL
+);
+INSERT INTO "new_Setting" ("autoAnnounceNextSong", "createdAt", "defaultQueuePageSize", "defaultVolume", "guildId", "leaveIfNoListeners", "playlistLimit", "queueAddResponseEphemeral", "secondsToWaitAfterQueueEmpties", "updatedAt") SELECT "autoAnnounceNextSong", "createdAt", "defaultQueuePageSize", "defaultVolume", "guildId", "leaveIfNoListeners", "playlistLimit", "queueAddResponseEphemeral", "secondsToWaitAfterQueueEmpties", "updatedAt" FROM "Setting";
+DROP TABLE "Setting";
+ALTER TABLE "new_Setting" RENAME TO "Setting";
+PRAGMA foreign_key_check;
+PRAGMA foreign_keys=ON;
diff --git a/package.json b/package.json
index 5cbb1d8..6e05dcc 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "muse",
- "version": "2.9.3",
+ "version": "2.10.0",
"description": "🎧 a self-hosted Discord music bot that doesn't suck ",
"repository": "[email protected]:museofficial/muse.git",
"author": "Max Isom <[email protected]>",
@@ -37,11 +37,11 @@
"@types/debug": "^4.1.5",
"@types/fluent-ffmpeg": "^2.1.17",
"@types/fs-capacitor": "^2.0.0",
- "@types/ms": "0.7.31",
+ "@types/ms": "0.7.34",
"@types/node": "^17.0.0",
"@types/node-emoji": "^1.8.1",
"@types/spotify-web-api-node": "^5.0.2",
- "@types/validator": "^13.1.4",
+ "@types/validator": "^13.12.2",
"@types/ws": "8.5.4",
"@typescript-eslint/eslint-plugin": "^4.31.1",
"@typescript-eslint/parser": "^4.31.1",
@@ -50,7 +50,7 @@
"eslint-config-xo-typescript": "^0.44.0",
"eslint-plugin-import": "2.29.1",
"husky": "^4.3.8",
- "prisma": "4.16.0",
+ "prisma": "5.21.1",
"release-it": "^14.11.8",
"type-fest": "^2.12.0",
"typescript": "^4.6.4"
@@ -98,7 +98,7 @@
"delay": "^5.0.0",
"discord-api-types": "0.32.1",
"discord.js": "14.11.0",
- "dotenv": "^16.0.0",
+ "dotenv": "^16.4.5",
"execa": "^6.1.0",
"fluent-ffmpeg": "^2.1.2",
"fs-capacitor": "^7.0.1",
@@ -106,16 +106,16 @@
"got": "^12.0.2",
"hasha": "^5.2.2",
"inversify": "^6.0.1",
- "iso8601-duration": "^1.3.0",
+ "iso8601-duration": "^2.1.2",
"libsodium-wrappers": "^0.7.9",
"make-dir": "^3.1.0",
"node-emoji": "^1.10.0",
"nodesplash": "^0.1.1",
- "ora": "^6.1.0",
+ "ora": "^8.1.0",
"p-event": "^5.0.1",
- "p-limit": "^4.0.0",
- "p-queue": "^7.2.0",
- "p-retry": "4.6.2",
+ "p-limit": "^6.1.0",
+ "p-queue": "7.1.0",
+ "p-retry": "6.2.0",
"pagination.djs": "^4.0.10",
"parse-duration": "1.0.2",
"patch-package": "^8.0.0",
diff --git a/schema.prisma b/schema.prisma
index d7b9de8..4723196 100644
--- a/schema.prisma
+++ b/schema.prisma
@@ -24,15 +24,18 @@ model KeyValueCache {
}
model Setting {
- guildId String @id
- playlistLimit Int @default(50)
- secondsToWaitAfterQueueEmpties Int @default(30)
- leaveIfNoListeners Boolean @default(true)
- queueAddResponseEphemeral Boolean @default(false)
- autoAnnounceNextSong Boolean @default(false)
- defaultVolume Int @default(100)
- createdAt DateTime @default(now())
- updatedAt DateTime @updatedAt
+ guildId String @id
+ playlistLimit Int @default(50)
+ secondsToWaitAfterQueueEmpties Int @default(30)
+ leaveIfNoListeners Boolean @default(true)
+ queueAddResponseEphemeral Boolean @default(false)
+ autoAnnounceNextSong Boolean @default(false)
+ defaultVolume Int @default(100)
+ defaultQueuePageSize Int @default(10)
+ turnDownVolumeWhenPeopleSpeak Boolean @default(false)
+ turnDownVolumeWhenPeopleSpeakTarget Int @default(20)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
}
model FavoriteQuery {
diff --git a/src/commands/config.ts b/src/commands/config.ts
index f866e82..01d9fe9 100644
--- a/src/commands/config.ts
+++ b/src/commands/config.ts
@@ -41,6 +41,22 @@ export default class implements Command {
.setDescription('whether bot responses to queue additions are only displayed to the requester')
.setRequired(true)))
.addSubcommand(subcommand => subcommand
+ .setName('set-reduce-vol-when-voice')
+ .setDescription('set whether to turn down the volume when people speak')
+ .addBooleanOption(option => option
+ .setName('value')
+ .setDescription('whether to turn down the volume when people speak')
+ .setRequired(true)))
+ .addSubcommand(subcommand => subcommand
+ .setName('set-reduce-vol-when-voice-target')
+ .setDescription('set the target volume when people speak')
+ .addIntegerOption(option => option
+ .setName('volume')
+ .setDescription('volume percentage (0 is muted, 100 is max & default)')
+ .setMinValue(0)
+ .setMaxValue(100)
+ .setRequired(true)))
+ .addSubcommand(subcommand => subcommand
.setName('set-auto-announce-next-song')
.setDescription('set whether to announce the next song in the queue automatically')
.addBooleanOption(option => option
@@ -57,6 +73,15 @@ export default class implements Command {
.setMaxValue(100)
.setRequired(true)))
.addSubcommand(subcommand => subcommand
+ .setName('set-default-queue-page-size')
+ .setDescription('set the default page size of the /queue command')
+ .addIntegerOption(option => option
+ .setName('page-size')
+ .setDescription('page size of the /queue command')
+ .setMinValue(1)
+ .setMaxValue(30)
+ .setRequired(true)))
+ .addSubcommand(subcommand => subcommand
.setName('get')
.setDescription('show all settings'));
@@ -171,6 +196,57 @@ export default class implements Command {
break;
}
+ case 'set-default-queue-page-size': {
+ const value = interaction.options.getInteger('page-size')!;
+
+ await prisma.setting.update({
+ where: {
+ guildId: interaction.guild!.id,
+ },
+ data: {
+ defaultQueuePageSize: value,
+ },
+ });
+
+ await interaction.reply('👍 default queue page size updated');
+
+ break;
+ }
+
+ case 'set-reduce-vol-when-voice': {
+ const value = interaction.options.getBoolean('value')!;
+
+ await prisma.setting.update({
+ where: {
+ guildId: interaction.guild!.id,
+ },
+ data: {
+ turnDownVolumeWhenPeopleSpeak: value,
+ },
+ });
+
+ await interaction.reply('👍 turn down volume setting updated');
+
+ break;
+ }
+
+ case 'set-reduce-vol-when-voice-target': {
+ const value = interaction.options.getInteger('volume')!;
+
+ await prisma.setting.update({
+ where: {
+ guildId: interaction.guild!.id,
+ },
+ data: {
+ turnDownVolumeWhenPeopleSpeakTarget: value,
+ },
+ });
+
+ await interaction.reply('👍 turn down volume target setting updated');
+
+ break;
+ }
+
case 'get': {
const embed = new EmbedBuilder().setTitle('Config');
@@ -185,6 +261,8 @@ export default class implements Command {
'Auto announce next song in queue': config.autoAnnounceNextSong ? 'yes' : 'no',
'Add to queue reponses show for requester only': config.autoAnnounceNextSong ? 'yes' : 'no',
'Default Volume': config.defaultVolume,
+ 'Default queue page size': config.defaultQueuePageSize,
+ 'Reduce volume when people speak': config.turnDownVolumeWhenPeopleSpeak ? 'yes' : 'no',
};
let description = '';
diff --git a/src/commands/play.ts b/src/commands/play.ts
index 25aef1c..c87ccd5 100644
--- a/src/commands/play.ts
+++ b/src/commands/play.ts
@@ -1,7 +1,7 @@
import {AutocompleteInteraction, ChatInputCommandInteraction} from 'discord.js';
import {URL} from 'url';
-import {SlashCommandBuilder} from '@discordjs/builders';
-import {inject, injectable} from 'inversify';
+import {SlashCommandBuilder, SlashCommandSubcommandsOnlyBuilder} from '@discordjs/builders';
+import {inject, injectable, optional} from 'inversify';
import Spotify from 'spotify-web-api-node';
import Command from './index.js';
import {TYPES} from '../types.js';
@@ -13,37 +13,43 @@ import AddQueryToQueue from '../services/add-query-to-queue.js';
@injectable()
export default class implements Command {
- public readonly slashCommand = new SlashCommandBuilder()
- .setName('play')
- .setDescription('play a song')
- .addStringOption(option => option
- .setName('query')
- .setDescription('YouTube URL, Spotify URL, or search query')
- .setAutocomplete(true)
- .setRequired(true))
- .addBooleanOption(option => option
- .setName('immediate')
- .setDescription('add track to the front of the queue'))
- .addBooleanOption(option => option
- .setName('shuffle')
- .setDescription('shuffle the input if you\'re adding multiple tracks'))
- .addBooleanOption(option => option
- .setName('split')
- .setDescription('if a track has chapters, split it'))
- .addBooleanOption(option => option
- .setName('skip')
- .setDescription('skip the currently playing track'));
+ public readonly slashCommand: Partial<SlashCommandBuilder | SlashCommandSubcommandsOnlyBuilder> & Pick<SlashCommandBuilder, 'toJSON'>;
public requiresVC = true;
- private readonly spotify: Spotify;
+ private readonly spotify?: Spotify;
private readonly cache: KeyValueCacheProvider;
private readonly addQueryToQueue: AddQueryToQueue;
- constructor(@inject(TYPES.ThirdParty) thirdParty: ThirdParty, @inject(TYPES.KeyValueCache) cache: KeyValueCacheProvider, @inject(TYPES.Services.AddQueryToQueue) addQueryToQueue: AddQueryToQueue) {
- this.spotify = thirdParty.spotify;
+ constructor(@inject(TYPES.ThirdParty) @optional() thirdParty: ThirdParty, @inject(TYPES.KeyValueCache) cache: KeyValueCacheProvider, @inject(TYPES.Services.AddQueryToQueue) addQueryToQueue: AddQueryToQueue) {
+ this.spotify = thirdParty?.spotify;
this.cache = cache;
this.addQueryToQueue = addQueryToQueue;
+
+ const queryDescription = thirdParty === undefined
+ ? 'YouTube URL or search query'
+ : 'YouTube URL, Spotify URL, or search query';
+
+ this.slashCommand = new SlashCommandBuilder()
+ .setName('play')
+ .setDescription('play a song')
+ .addStringOption(option => option
+ .setName('query')
+ .setDescription(queryDescription)
+ .setAutocomplete(true)
+ .setRequired(true))
+ .addBooleanOption(option => option
+ .setName('immediate')
+ .setDescription('add track to the front of the queue'))
+ .addBooleanOption(option => option
+ .setName('shuffle')
+ .setDescription('shuffle the input if you\'re adding multiple tracks'))
+ .addBooleanOption(option => option
+ .setName('split')
+ .setDescription('if a track has chapters, split it'))
+ .addBooleanOption(option => option
+ .setName('skip')
+ .setDescription('skip the currently playing track'));
}
public async execute(interaction: ChatInputCommandInteraction): Promise<void> {
diff --git a/src/commands/queue.ts b/src/commands/queue.ts
index 5196ca9..fd36e43 100644
--- a/src/commands/queue.ts
+++ b/src/commands/queue.ts
@@ -5,6 +5,7 @@ import {TYPES} from '../types.js';
import PlayerManager from '../managers/player.js';
import Command from './index.js';
import {buildQueueEmbed} from '../utils/build-embed.js';
+import {getGuildSettings} from '../utils/get-guild-settings.js';
@injectable()
export default class implements Command {
@@ -14,6 +15,12 @@ export default class implements Command {
.addIntegerOption(option => option
.setName('page')
.setDescription('page of queue to show [default: 1]')
+ .setRequired(false))
+ .addIntegerOption(option => option
+ .setName('page-size')
+ .setDescription('how many items to display per page [default: 10, max: 30]')
+ .setMinValue(1)
+ .setMaxValue(30)
.setRequired(false));
private readonly playerManager: PlayerManager;
@@ -23,9 +30,17 @@ export default class implements Command {
}
public async execute(interaction: ChatInputCommandInteraction) {
- const player = this.playerManager.get(interaction.guild!.id);
+ const guildId = interaction.guild!.id;
+ const player = this.playerManager.get(guildId);
+
+ const pageSizeFromOptions = interaction.options.getInteger('page-size');
+ const pageSize = pageSizeFromOptions ?? (await getGuildSettings(guildId)).defaultQueuePageSize;
- const embed = buildQueueEmbed(player, interaction.options.getInteger('page') ?? 1);
+ const embed = buildQueueEmbed(
+ player,
+ interaction.options.getInteger('page') ?? 1,
+ pageSize,
+ );
await interaction.reply({embeds: [embed]});
}
diff --git a/src/inversify.config.ts b/src/inversify.config.ts
index 2f2005e..8e621cb 100644
--- a/src/inversify.config.ts
+++ b/src/inversify.config.ts
@@ -57,11 +57,20 @@ container.bind<Client>(TYPES.Client).toConstantValue(new Client({intents}));
// Managers
container.bind<PlayerManager>(TYPES.Managers.Player).to(PlayerManager).inSingletonScope();
+// Config values
+container.bind(TYPES.Config).toConstantValue(new ConfigProvider());
+
// Services
container.bind<GetSongs>(TYPES.Services.GetSongs).to(GetSongs).inSingletonScope();
container.bind<AddQueryToQueue>(TYPES.Services.AddQueryToQueue).to(AddQueryToQueue).inSingletonScope();
container.bind<YoutubeAPI>(TYPES.Services.YoutubeAPI).to(YoutubeAPI).inSingletonScope();
-container.bind<SpotifyAPI>(TYPES.Services.SpotifyAPI).to(SpotifyAPI).inSingletonScope();
+
+// Only instanciate spotify dependencies if the Spotify client ID and secret are set
+const config = container.get<ConfigProvider>(TYPES.Config);
+if (config.SPOTIFY_CLIENT_ID !== '' && config.SPOTIFY_CLIENT_SECRET !== '') {
+ container.bind<SpotifyAPI>(TYPES.Services.SpotifyAPI).to(SpotifyAPI).inSingletonScope();
+ container.bind(TYPES.ThirdParty).to(ThirdParty);
+}
// Commands
[
@@ -91,12 +100,7 @@ container.bind<SpotifyAPI>(TYPES.Services.SpotifyAPI).to(SpotifyAPI).inSingleton
container.bind<Command>(TYPES.Command).to(command).inSingletonScope();
});
-// Config values
-container.bind(TYPES.Config).toConstantValue(new ConfigProvider());
-
// Static libraries
-container.bind(TYPES.ThirdParty).to(ThirdParty);
-
container.bind(TYPES.FileCache).to(FileCacheProvider);
container.bind(TYPES.KeyValueCache).to(KeyValueCacheProvider);
diff --git a/src/services/add-query-to-queue.ts b/src/services/add-query-to-queue.ts
index 401ad90..95e16ff 100644
--- a/src/services/add-query-to-queue.ts
+++ b/src/services/add-query-to-queue.ts
@@ -1,6 +1,5 @@
/* eslint-disable complexity */
import {ChatInputCommandInteraction, GuildMember} from 'discord.js';
-import {URL} from 'node:url';
import {inject, injectable} from 'inversify';
import shuffle from 'array-shuffle';
import {TYPES} from '../types.js';
@@ -60,74 +59,7 @@ export default class AddQueryToQueue {
await interaction.deferReply({ephemeral: queueAddResponseEphemeral});
- let newSongs: SongMetadata[] = [];
- let extraMsg = '';
-
- // Test if it's a complete URL
- try {
- const url = new URL(query);
-
- const YOUTUBE_HOSTS = [
- 'www.youtube.com',
- 'youtu.be',
- 'youtube.com',
- 'music.youtube.com',
- 'www.music.youtube.com',
- ];
-
- if (YOUTUBE_HOSTS.includes(url.host)) {
- // YouTube source
- if (url.searchParams.get('list')) {
- // YouTube playlist
- newSongs.push(...await this.getSongs.youtubePlaylist(url.searchParams.get('list')!, shouldSplitChapters));
- } else {
- const songs = await this.getSongs.youtubeVideo(url.href, shouldSplitChapters);
-
- if (songs) {
- newSongs.push(...songs);
- } else {
- throw new Error('that doesn\'t exist');
- }
- }
- } else if (url.protocol === 'spotify:' || url.host === 'open.spotify.com') {
- const [convertedSongs, nSongsNotFound, totalSongs] = await this.getSongs.spotifySource(query, playlistLimit, shouldSplitChapters);
-
- if (totalSongs > playlistLimit) {
- extraMsg = `a random sample of ${playlistLimit} songs was taken`;
- }
-
- if (totalSongs > playlistLimit && nSongsNotFound !== 0) {
- extraMsg += ' and ';
- }
-
- if (nSongsNotFound !== 0) {
- if (nSongsNotFound === 1) {
- extraMsg += '1 song was not found';
- } else {
- extraMsg += `${nSongsNotFound.toString()} songs were not found`;
- }
- }
-
- newSongs.push(...convertedSongs);
- } else {
- const song = await this.getSongs.httpLiveStream(query);
-
- if (song) {
- newSongs.push(song);
- } else {
- throw new Error('that doesn\'t exist');
- }
- }
- } catch (_: unknown) {
- // Not a URL, must search YouTube
- const songs = await this.getSongs.youtubeVideoSearch(query, shouldSplitChapters);
-
- if (songs) {
- newSongs.push(...songs);
- } else {
- throw new Error('that doesn\'t exist');
- }
- }
+ let [newSongs, extraMsg] = await this.getSongs.getSongs(query, playlistLimit, shouldSplitChapters);
if (newSongs.length === 0) {
throw new Error('no songs found');
diff --git a/src/services/config.ts b/src/services/config.ts
index b6b9aea..3941a3c 100644
--- a/src/services/config.ts
+++ b/src/services/config.ts
@@ -5,15 +5,15 @@ import path from 'path';
import xbytes from 'xbytes';
import {ConditionalKeys} from 'type-fest';
import {ActivityType, PresenceStatusData} from 'discord.js';
-dotenv.config();
+dotenv.config({path: process.env.ENV_FILE ?? path.resolve(process.cwd(), '.env')});
export const DATA_DIR = path.resolve(process.env.DATA_DIR ? process.env.DATA_DIR : './data');
const CONFIG_MAP = {
DISCORD_TOKEN: process.env.DISCORD_TOKEN,
YOUTUBE_API_KEY: process.env.YOUTUBE_API_KEY,
- SPOTIFY_CLIENT_ID: process.env.SPOTIFY_CLIENT_ID,
- SPOTIFY_CLIENT_SECRET: process.env.SPOTIFY_CLIENT_SECRET,
+ SPOTIFY_CLIENT_ID: process.env.SPOTIFY_CLIENT_ID ?? '',
+ SPOTIFY_CLIENT_SECRET: process.env.SPOTIFY_CLIENT_SECRET ?? '',
REGISTER_COMMANDS_ON_BOT: process.env.REGISTER_COMMANDS_ON_BOT === 'true',
DATA_DIR,
CACHE_DIR: path.join(DATA_DIR, 'cache'),
diff --git a/src/services/get-songs.ts b/src/services/get-songs.ts
index b957734..c48d87d 100644
--- a/src/services/get-songs.ts
+++ b/src/services/get-songs.ts
@@ -1,34 +1,120 @@
-import {inject, injectable} from 'inversify';
+import {inject, injectable, optional} from 'inversify';
import * as spotifyURI from 'spotify-uri';
import {SongMetadata, QueuedPlaylist, MediaSource} from './player.js';
import {TYPES} from '../types.js';
import ffmpeg from 'fluent-ffmpeg';
import YoutubeAPI from './youtube-api.js';
import SpotifyAPI, {SpotifyTrack} from './spotify-api.js';
+import {URL} from 'node:url';
@injectable()
export default class {
private readonly youtubeAPI: YoutubeAPI;
- private readonly spotifyAPI: SpotifyAPI;
+ private readonly spotifyAPI?: SpotifyAPI;
- constructor(@inject(TYPES.Services.YoutubeAPI) youtubeAPI: YoutubeAPI, @inject(TYPES.Services.SpotifyAPI) spotifyAPI: SpotifyAPI) {
+ constructor(@inject(TYPES.Services.YoutubeAPI) youtubeAPI: YoutubeAPI, @inject(TYPES.Services.SpotifyAPI) @optional() spotifyAPI?: SpotifyAPI) {
this.youtubeAPI = youtubeAPI;
this.spotifyAPI = spotifyAPI;
}
- async youtubeVideoSearch(query: string, shouldSplitChapters: boolean): Promise<SongMetadata[]> {
+ async getSongs(query: string, playlistLimit: number, shouldSplitChapters: boolean): Promise<[SongMetadata[], string]> {
+ const newSongs: SongMetadata[] = [];
+ let extraMsg = '';
+
+ // Test if it's a complete URL
+ try {
+ const url = new URL(query);
+
+ const YOUTUBE_HOSTS = [
+ 'www.youtube.com',
+ 'youtu.be',
+ 'youtube.com',
+ 'music.youtube.com',
+ 'www.music.youtube.com',
+ ];
+
+ if (YOUTUBE_HOSTS.includes(url.host)) {
+ // YouTube source
+ if (url.searchParams.get('list')) {
+ // YouTube playlist
+ newSongs.push(...await this.youtubePlaylist(url.searchParams.get('list')!, shouldSplitChapters));
+ } else {
+ const songs = await this.youtubeVideo(url.href, shouldSplitChapters);
+
+ if (songs) {
+ newSongs.push(...songs);
+ } else {
+ throw new Error('that doesn\'t exist');
+ }
+ }
+ } else if (url.protocol === 'spotify:' || url.host === 'open.spotify.com') {
+ if (this.spotifyAPI === undefined) {
+ throw new Error('Spotify is not enabled!');
+ }
+
+ const [convertedSongs, nSongsNotFound, totalSongs] = await this.spotifySource(query, playlistLimit, shouldSplitChapters);
+
+ if (totalSongs > playlistLimit) {
+ extraMsg = `a random sample of ${playlistLimit} songs was taken`;
+ }
+
+ if (totalSongs > playlistLimit && nSongsNotFound !== 0) {
+ extraMsg += ' and ';
+ }
+
+ if (nSongsNotFound !== 0) {
+ if (nSongsNotFound === 1) {
+ extraMsg += '1 song was not found';
+ } else {
+ extraMsg += `${nSongsNotFound.toString()} songs were not found`;
+ }
+ }
+
+ newSongs.push(...convertedSongs);
+ } else {
+ const song = await this.httpLiveStream(query);
+
+ if (song) {
+ newSongs.push(song);
+ } else {
+ throw new Error('that doesn\'t exist');
+ }
+ }
+ } catch (err: any) {
+ if (err instanceof Error && err.message === 'Spotify is not enabled!') {
+ throw err;
+ }
+
+ // Not a URL, must search YouTube
+ const songs = await this.youtubeVideoSearch(query, shouldSplitChapters);
+
+ if (songs) {
+ newSongs.push(...songs);
+ } else {
+ throw new Error('that doesn\'t exist');
+ }
+ }
+
+ return [newSongs, extraMsg];
+ }
+
+ private async youtubeVideoSearch(query: string, shouldSplitChapters: boolean): Promise<SongMetadata[]> {
return this.youtubeAPI.search(query, shouldSplitChapters);
}
- async youtubeVideo(url: string, shouldSplitChapters: boolean): Promise<SongMetadata[]> {
+ private async youtubeVideo(url: string, shouldSplitChapters: boolean): Promise<SongMetadata[]> {
return this.youtubeAPI.getVideo(url, shouldSplitChapters);
}
- async youtubePlaylist(listId: string, shouldSplitChapters: boolean): Promise<SongMetadata[]> {
+ private async youtubePlaylist(listId: string, shouldSplitChapters: boolean): Promise<SongMetadata[]> {
return this.youtubeAPI.getPlaylist(listId, shouldSplitChapters);
}
- async spotifySource(url: string, playlistLimit: number, shouldSplitChapters: boolean): Promise<[SongMetadata[], number, number]> {
+ private async spotifySource(url: string, playlistLimit: number, shouldSplitChapters: boolean): Promise<[SongMetadata[], number, number]> {
+ if (this.spotifyAPI === undefined) {
+ return [[], 0, 0];
+ }
+
const parsed = spotifyURI.parse(url);
switch (parsed.type) {
@@ -58,7 +144,7 @@ export default class {
}
}
- async httpLiveStream(url: string): Promise<SongMetadata> {
+ private async httpLiveStream(url: string): Promise<SongMetadata> {
return new Promise((resolve, reject) => {
ffmpeg(url).ffprobe((err, _) => {
if (err) {
diff --git a/src/services/player.ts b/src/services/player.ts
index 5e284a6..b833022 100644
--- a/src/services/player.ts
+++ b/src/services/player.ts
@@ -20,6 +20,7 @@ import FileCacheProvider from './file-cache.js';
import debug from '../utils/debug.js';
import {getGuildSettings} from '../utils/get-guild-settings.js';
import {buildPlayingMessageEmbed} from '../utils/build-embed.js';
+import {Setting} from '@prisma/client';
export enum MediaSource {
Youtube,
@@ -82,6 +83,8 @@ export default class {
private readonly fileCache: FileCacheProvider;
private disconnectTimer: NodeJS.Timeout | null = null;
+ private readonly channelToSpeakingUsers: Map<string, Set<string>> = new Map();
+
constructor(fileCache: FileCacheProvider, guildId: string) {
this.fileCache = fileCache;
this.guildId = guildId;
@@ -96,9 +99,12 @@ export default class {
this.voiceConnection = joinVoiceChannel({
channelId: channel.id,
guildId: channel.guild.id,
+ selfDeaf: false,
adapterCreator: channel.guild.voiceAdapterCreator as DiscordGatewayAdapterCreator,
});
+ const guildSettings = await getGuildSettings(this.guildId);
+
// Workaround to disable keepAlive
this.voiceConnection.on('stateChange', (oldState, newState) => {
/* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */
@@ -115,6 +121,9 @@ export default class {
/* eslint-enable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call */
this.currentChannel = channel;
+ if (newState.status === VoiceConnectionStatus.Ready) {
+ this.registerVoiceActivityListener(guildSettings);
+ }
});
}
@@ -302,6 +311,63 @@ export default class {
}
}
+ registerVoiceActivityListener(guildSettings: Setting) {
+ const {turnDownVolumeWhenPeopleSpeak, turnDownVolumeWhenPeopleSpeakTarget} = guildSettings;
+ if (!turnDownVolumeWhenPeopleSpeak || !this.voiceConnection) {
+ return;
+ }
+
+ this.voiceConnection.receiver.speaking.on('start', (userId: string) => {
+ if (!this.currentChannel) {
+ return;
+ }
+
+ const member = this.currentChannel.members.get(userId);
+ const channelId = this.currentChannel?.id;
+
+ if (member) {
+ if (!this.channelToSpeakingUsers.has(channelId)) {
+ this.channelToSpeakingUsers.set(channelId, new Set());
+ }
+
+ this.channelToSpeakingUsers.get(channelId)?.add(member.id);
+ }
+
+ this.suppressVoiceWhenPeopleAreSpeaking(turnDownVolumeWhenPeopleSpeakTarget);
+ });
+
+ this.voiceConnection.receiver.speaking.on('end', (userId: string) => {
+ if (!this.currentChannel) {
+ return;
+ }
+
+ const member = this.currentChannel.members.get(userId);
+ const channelId = this.currentChannel.id;
+ if (member) {
+ if (!this.channelToSpeakingUsers.has(channelId)) {
+ this.channelToSpeakingUsers.set(channelId, new Set());
+ }
+
+ this.channelToSpeakingUsers.get(channelId)?.delete(member.id);
+ }
+
+ this.suppressVoiceWhenPeopleAreSpeaking(turnDownVolumeWhenPeopleSpeakTarget);
+ });
+ }
+
+ suppressVoiceWhenPeopleAreSpeaking(turnDownVolumeWhenPeopleSpeakTarget: number): void {
+ if (!this.currentChannel) {
+ return;
+ }
+
+ const speakingUsers = this.channelToSpeakingUsers.get(this.currentChannel.id);
+ if (speakingUsers && speakingUsers.size > 0) {
+ this.setVolume(turnDownVolumeWhenPeopleSpeakTarget);
+ } else {
+ this.setVolume(this.defaultVolume);
+ }
+ }
+
canGoForward(skip: number) {
return (this.queuePosition + skip - 1) < this.queue.length;
}
diff --git a/src/services/youtube-api.ts b/src/services/youtube-api.ts
index 143033a..216a2c0 100644
--- a/src/services/youtube-api.ts
+++ b/src/services/youtube-api.ts
@@ -95,7 +95,7 @@ export default class {
}
if (!firstVideo) {
- throw new Error('No video found.');
+ return [];
}
return this.getVideo(firstVideo.url, shouldSplitChapters);
diff --git a/src/utils/build-embed.ts b/src/utils/build-embed.ts
index b8e725c..23db0b9 100644
--- a/src/utils/build-embed.ts
+++ b/src/utils/build-embed.ts
@@ -5,8 +5,6 @@ import getProgressBar from './get-progress-bar.js';
import {prettyTime} from './time.js';
import {truncate} from './string.js';
-const PAGE_SIZE = 10;
-
const getMaxSongTitleLength = (title: string) => {
// eslint-disable-next-line no-control-regex
const nonASCII = /[^\x00-\x7F]+/;
@@ -77,7 +75,7 @@ export const buildPlayingMessageEmbed = (player: Player): EmbedBuilder => {
return message;
};
-export const buildQueueEmbed = (player: Player, page: number): EmbedBuilder => {
+export const buildQueueEmbed = (player: Player, page: number, pageSize: number): EmbedBuilder => {
const currentlyPlaying = player.getCurrent();
if (!currentlyPlaying) {
@@ -85,14 +83,14 @@ export const buildQueueEmbed = (player: Player, page: number): EmbedBuilder => {
}
const queueSize = player.queueSize();
- const maxQueuePage = Math.ceil((queueSize + 1) / PAGE_SIZE);
+ const maxQueuePage = Math.ceil((queueSize + 1) / pageSize);
if (page > maxQueuePage) {
throw new Error('the queue isn\'t that big');
}
- const queuePageBegin = (page - 1) * PAGE_SIZE;
- const queuePageEnd = queuePageBegin + PAGE_SIZE;
+ const queuePageBegin = (page - 1) * pageSize;
+ const queuePageEnd = queuePageBegin + pageSize;
const queuedSongs = player
.getQueue()
.slice(queuePageBegin, queuePageEnd)
diff --git a/src/utils/get-youtube-and-spotify-suggestions-for.ts b/src/utils/get-youtube-and-spotify-suggestions-for.ts
index 6594b52..bd6f1c8 100644
--- a/src/utils/get-youtube-and-spotify-suggestions-for.ts
+++ b/src/utils/get-youtube-and-spotify-suggestions-for.ts
@@ -14,28 +14,18 @@ const filterDuplicates = <T extends {name: string}>(items: T[]) => {
return results;
};
-const getYouTubeAndSpotifySuggestionsFor = async (query: string, spotify: SpotifyWebApi, limit = 10): Promise<APIApplicationCommandOptionChoice[]> => {
- const [youtubeSuggestions, spotifyResults] = await Promise.all([
- getYouTubeSuggestionsFor(query),
- spotify.search(query, ['track', 'album'], {limit: 5}),
- ]);
+const getYouTubeAndSpotifySuggestionsFor = async (query: string, spotify?: SpotifyWebApi, limit = 10): Promise<APIApplicationCommandOptionChoice[]> => {
+ // Only search Spotify if enabled
+ const spotifySuggestionPromise = spotify === undefined
+ ? undefined
+ : spotify.search(query, ['album', 'track'], {limit});
- const totalYouTubeResults = youtubeSuggestions.length;
-
- const spotifyAlbums = filterDuplicates(spotifyResults.body.albums?.items ?? []);
- const spotifyTracks = filterDuplicates(spotifyResults.body.tracks?.items ?? []);
-
- const totalSpotifyResults = spotifyAlbums.length + spotifyTracks.length;
+ const youtubeSuggestions = await getYouTubeSuggestionsFor(query);
- // Number of results for each source should be roughly the same.
- // If we don't have enough Spotify suggestions, prioritize YouTube results.
- const maxSpotifySuggestions = Math.floor(limit / 2);
- const numOfSpotifySuggestions = Math.min(maxSpotifySuggestions, totalSpotifyResults);
-
- const maxYouTubeSuggestions = limit - numOfSpotifySuggestions;
- const numOfYouTubeSuggestions = Math.min(maxYouTubeSuggestions, totalYouTubeResults);
+ const totalYouTubeResults = youtubeSuggestions.length;
+ const numOfYouTubeSuggestions = Math.min(limit, totalYouTubeResults);
- const suggestions: APIApplicationCommandOptionChoice[] = [];
+ let suggestions: APIApplicationCommandOptionChoice[] = [];
suggestions.push(
...youtubeSuggestions
@@ -46,23 +36,40 @@ const getYouTubeAndSpotifySuggestionsFor = async (query: string, spotify: Spotif
}),
));
- const maxSpotifyAlbums = Math.floor(numOfSpotifySuggestions / 2);
- const numOfSpotifyAlbums = Math.min(maxSpotifyAlbums, spotifyResults.body.albums?.items.length ?? 0);
- const maxSpotifyTracks = numOfSpotifySuggestions - numOfSpotifyAlbums;
-
- suggestions.push(
- ...spotifyAlbums.slice(0, maxSpotifyAlbums).map(album => ({
- name: `Spotify: 💿 ${album.name}${album.artists.length > 0 ? ` - ${album.artists[0].name}` : ''}`,
- value: `spotify:album:${album.id}`,
- })),
- );
-
- suggestions.push(
- ...spotifyTracks.slice(0, maxSpotifyTracks).map(track => ({
- name: `Spotify: 🎵 ${track.name}${track.artists.length > 0 ? ` - ${track.artists[0].name}` : ''}`,
- value: `spotify:track:${track.id}`,
- })),
- );
+ if (spotify !== undefined && spotifySuggestionPromise !== undefined) {
+ const spotifyResponse = (await spotifySuggestionPromise).body;
+ const spotifyAlbums = filterDuplicates(spotifyResponse.albums?.items ?? []);
+ const spotifyTracks = filterDuplicates(spotifyResponse.tracks?.items ?? []);
+
+ const totalSpotifyResults = spotifyAlbums.length + spotifyTracks.length;
+
+ // Number of results for each source should be roughly the same.
+ // If we don't have enough Spotify suggestions, prioritize YouTube results.
+ const maxSpotifySuggestions = Math.floor(limit / 2);
+ const numOfSpotifySuggestions = Math.min(maxSpotifySuggestions, totalSpotifyResults);
+
+ const maxSpotifyAlbums = Math.floor(numOfSpotifySuggestions / 2);
+ const numOfSpotifyAlbums = Math.min(maxSpotifyAlbums, spotifyResponse.albums?.items.length ?? 0);
+ const maxSpotifyTracks = numOfSpotifySuggestions - numOfSpotifyAlbums;
+
+ // Make room for spotify results
+ const maxYouTubeSuggestions = limit - numOfSpotifySuggestions;
+ suggestions = suggestions.slice(0, maxYouTubeSuggestions);
+
+ suggestions.push(
+ ...spotifyAlbums.slice(0, maxSpotifyAlbums).map(album => ({
+ name: `Spotify: 💿 ${album.name}${album.artists.length > 0 ? ` - ${album.artists[0].name}` : ''}`,
+ value: `spotify:album:${album.id}`,
+ })),
+ );
+
+ suggestions.push(
+ ...spotifyTracks.slice(0, maxSpotifyTracks).map(track => ({
+ name: `Spotify: 🎵 ${track.name}${track.artists.length > 0 ? ` - ${track.artists[0].name}` : ''}`,
+ value: `spotify:track:${track.id}`,
+ })),
+ );
+ }
return suggestions;
};
diff --git a/tsconfig.json b/tsconfig.json
index 5685334..1a0bfa5 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -9,7 +9,8 @@
"esModuleInterop": true,
"sourceMap": true,
"resolveJsonModule": true,
- "outDir": "dist"
+ "outDir": "dist",
+ "skipLibCheck": true
},
"include": ["src"],
"exclude": ["node_modules"]
diff --git a/yarn.lock b/yarn.lock
index c965d69..d707cd7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -126,7 +126,7 @@
resolved "https://registry.npmjs.org/@discordjs/util/-/util-0.3.1.tgz"
integrity sha512-HxXKYKg7vohx2/OupUN/4Sd02Ev3PBJ5q0gtjdcvXb0ErCva8jNHWfe/v5sU3UKjIB/uxOhc+TDOnhqffj9pRA==
-"@discordjs/voice@^0.17.0":
+"@discordjs/[email protected]":
version "0.17.0"
resolved "https://registry.npmjs.org/@discordjs/voice/-/voice-0.17.0.tgz"
integrity sha512-hArn9FF5ZYi1IkxdJEVnJi+OxlwLV0NJYWpKXsmNOojtGtAZHxmsELA+MZlu2KW1F/K1/nt7lFOfcMXNYweq9w==
@@ -162,11 +162,11 @@
miniget "^4.2.3"
sax "^1.4.1"
tough-cookie "^4.1.4"
- undici "^6.19.2"
+ undici five
"@distube/ytsr@^2.0.0":
version "2.0.4"
- resolved "https://registry.yarnpkg.com/@distube/ytsr/-/ytsr-2.0.4.tgz#873b7ca767b5ff362bc0e136ae0d9ca5cbde8f7b"
+ resolved "https://registry.npmjs.org/@distube/ytsr/-/ytsr-2.0.4.tgz"
integrity sha512-OiSWgARQ9LTj+dXt3jmMFzUH4l86VVCD4dVC4hEHNXdqp+DyU4QEzc+W6YY6//kWkvzTaUxOo7JUY7lBzwIF0A==
dependencies:
undici "^6.18.2"
@@ -363,15 +363,46 @@
dependencies:
"@prisma/engines-version" "4.16.0-66.b20ead4d3ab9e78ac112966e242ded703f4a052c"
+"@prisma/[email protected]":
+ version "5.21.1"
+ resolved "https://registry.npmjs.org/@prisma/debug/-/debug-5.21.1.tgz"
+ integrity sha512-uY8SAhcnORhvgtOrNdvWS98Aq/nkQ9QDUxrWAgW8XrCZaI3j2X7zb7Xe6GQSh6xSesKffFbFlkw0c2luHQviZA==
+
"@prisma/engines-version@4.16.0-66.b20ead4d3ab9e78ac112966e242ded703f4a052c":
version "4.16.0-66.b20ead4d3ab9e78ac112966e242ded703f4a052c"
resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.16.0-66.b20ead4d3ab9e78ac112966e242ded703f4a052c.tgz"
integrity sha512-tMWAF/qF00fbUH1HB4Yjmz6bjh7fzkb7Y3NRoUfMlHu6V+O45MGvqwYxqwBjn1BIUXkl3r04W351D4qdJjrgvA==
-"@prisma/[email protected]":
- version "4.16.0"
- resolved "https://registry.npmjs.org/@prisma/engines/-/engines-4.16.0.tgz"
- integrity sha512-M6XoMRXnqL0rqZGQS8ZpNiHYG4G1fKBdoqW/oBtHnr1in5UYgerZqal3CXchmd6OBD/770PE9dtjQuqcilZJUA==
+"@prisma/engines-version@5.21.1-1.bf0e5e8a04cada8225617067eaa03d041e2bba36":
+ version "5.21.1-1.bf0e5e8a04cada8225617067eaa03d041e2bba36"
+ resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.21.1-1.bf0e5e8a04cada8225617067eaa03d041e2bba36.tgz"
+ integrity sha512-qvnEflL0//lh44S/T9NcvTMxfyowNeUxTunPcDfKPjyJNrCNf2F1zQLcUv5UHAruECpX+zz21CzsC7V2xAeM7Q==
+
+"@prisma/[email protected]":
+ version "5.21.1"
+ resolved "https://registry.npmjs.org/@prisma/engines/-/engines-5.21.1.tgz"
+ integrity sha512-hGVTldUkIkTwoV8//hmnAAiAchi4oMEKD3aW5H2RrnI50tTdwza7VQbTTAyN3OIHWlK5DVg6xV7X8N/9dtOydA==
+ dependencies:
+ "@prisma/debug" "5.21.1"
+ "@prisma/engines-version" "5.21.1-1.bf0e5e8a04cada8225617067eaa03d041e2bba36"
+ "@prisma/fetch-engine" "5.21.1"
+ "@prisma/get-platform" "5.21.1"
+
+"@prisma/[email protected]":
+ version "5.21.1"
+ resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.21.1.tgz"
+ integrity sha512-70S31vgpCGcp9J+mh/wHtLCkVezLUqe/fGWk3J3JWZIN7prdYSlr1C0niaWUyNK2VflLXYi8kMjAmSxUVq6WGQ==
+ dependencies:
+ "@prisma/debug" "5.21.1"
+ "@prisma/engines-version" "5.21.1-1.bf0e5e8a04cada8225617067eaa03d041e2bba36"
+ "@prisma/get-platform" "5.21.1"
+
+"@prisma/[email protected]":
+ version "5.21.1"
+ resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.21.1.tgz"
+ integrity sha512-sRxjL3Igst3ct+e8ya/x//cDXmpLbZQ5vfps2N4tWl4VGKQAmym77C/IG/psSMsQKszc8uFC/q1dgmKFLUgXZQ==
+ dependencies:
+ "@prisma/debug" "5.21.1"
"@release-it/keep-a-changelog@^2.3.0":
version "2.5.0"
@@ -504,7 +535,7 @@
"@types/json5@^0.0.29":
version "0.0.29"
- resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
+ resolved "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz"
integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==
"@types/keyv@*":
@@ -519,10 +550,10 @@
resolved "https://registry.npmjs.org/@types/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz"
integrity sha512-LisgKLlYQk19baQwjkBZZXdJL0KbeTpdEnrAfz5hQACbklCY0gVFnsKUyjfNWF1UQsCSjw93Sj5jSbiO8RPfdw==
-"@types/ms@*", "@types/[email protected]":
- version "0.7.31"
- resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz"
- integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==
+"@types/ms@*", "@types/[email protected]":
+ version "0.7.34"
+ resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz"
+ integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==
"@types/node-emoji@^1.8.1":
version "1.8.1"
@@ -530,9 +561,9 @@
integrity sha512-0fRfA90FWm6KJfw6P9QGyo0HDTCmthZ7cWaBQndITlaWLTZ6njRyKwrwpzpg+n6kBXBIGKeUHEQuBx7bphGJkA==
"@types/node@*", "@types/node@^17.0.0":
- version "17.0.30"
- resolved "https://registry.npmjs.org/@types/node/-/node-17.0.30.tgz"
- integrity sha512-oNBIZjIqyHYP8VCNAV9uEytXVeXG2oR0w9lgAXro20eugRQfY002qr3CUl6BAe+Yf/z3CRjPdz27Pu6WWtuSRw==
+ version "17.0.45"
+ resolved "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz"
+ integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
"@types/normalize-package-data@^2.4.1":
version "2.4.1"
@@ -551,10 +582,10 @@
dependencies:
"@types/node" "*"
- version "0.12.0"
- resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz"
- integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==
+ version "0.12.2"
+ resolved "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz"
+ integrity sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==
"@types/spotify-api@*":
version "0.0.15"
@@ -568,12 +599,12 @@
dependencies:
"@types/spotify-api" "*"
-"@types/validator@^13.1.4":
- version "13.7.2"
- resolved "https://registry.npmjs.org/@types/validator/-/validator-13.7.2.tgz"
- integrity sha512-KFcchQ3h0OPQgFirBRPZr5F/sVjxZsOrQHedj3zi8AH3Zv/hOLx2OLR4hxR5HcfoU+33n69ZuOfzthKVdMoTiw==
+"@types/validator@^13.12.2":
+ version "13.12.2"
+ resolved "https://registry.npmjs.org/@types/validator/-/validator-13.12.2.tgz"
+ integrity sha512-6SlHBzUW8Jhf3liqrGGXyTJSIFe4nqlJ5A5KaMZ2l/vbM3Wh3KSybots/wfWVzNLK4D1NZluDlSQIbIEPx6oyA==
-"@types/[email protected]", "@types/ws@^8.5.3", "@types/ws@^8.5.4":
+"@types/[email protected]", "@types/ws@^8.5.10", "@types/ws@^8.5.4":
version "8.5.4"
resolved "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz"
integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==
@@ -694,7 +725,7 @@ agent-base@6, agent-base@^6.0.0, agent-base@^6.0.2:
agent-base@^7.1.1:
version "7.1.1"
- resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317"
+ resolved "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz"
integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==
dependencies:
debug "^4.3.4"
@@ -784,7 +815,7 @@ argparse@^1.0.7:
array-buffer-byte-length@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f"
+ resolved "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz"
integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==
dependencies:
call-bind "^1.0.5"
@@ -792,7 +823,7 @@ array-buffer-byte-length@^1.0.1:
array-includes@^3.1.7:
version "3.1.8"
- resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d"
+ resolved "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz"
integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==
dependencies:
call-bind "^1.0.7"
@@ -814,7 +845,7 @@ array-union@^2.1.0:
array.prototype.findlastindex@^1.2.3:
version "1.2.5"
- resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d"
+ resolved "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz"
integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==
dependencies:
call-bind "^1.0.7"
@@ -826,7 +857,7 @@ array.prototype.findlastindex@^1.2.3:
array.prototype.flat@^1.3.2:
version "1.3.2"
- resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18"
+ resolved "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz"
integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==
dependencies:
call-bind "^1.0.2"
@@ -836,7 +867,7 @@ array.prototype.flat@^1.3.2:
array.prototype.flatmap@^1.3.2:
version "1.3.2"
- resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527"
+ resolved "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz"
integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==
dependencies:
call-bind "^1.0.2"
@@ -857,7 +888,7 @@ array.prototype.map@^1.0.4:
arraybuffer.prototype.slice@^1.0.3:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6"
+ resolved "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz"
integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==
dependencies:
array-buffer-byte-length "^1.0.1"
@@ -905,7 +936,7 @@ at-least-node@^1.0.0:
available-typed-arrays@^1.0.7:
version "1.0.7"
- resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846"
+ resolved "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz"
integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==
dependencies:
possible-typed-array-names "^1.0.0"
@@ -943,15 +974,6 @@ bl@^4.1.0:
inherits "^2.0.4"
readable-stream "^3.4.0"
-bl@^5.0.0:
- version "5.0.0"
- resolved "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz"
- integrity sha512-8vxFNZ0pflFfi0WXA3WQXlj6CaMEwsmh63I1CNp0q+wWv8sD0ARx1KovSQd0l2GkwrMIOyedq0EF1FxI+RCZLQ==
- dependencies:
- buffer "^6.0.3"
- inherits "^2.0.4"
- readable-stream "^3.4.0"
-
boxen@^5.0.0:
version "5.1.2"
resolved "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz"
@@ -994,14 +1016,6 @@ buffer@^5.5.0, buffer@^5.7.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
-buffer@^6.0.3:
- version "6.0.3"
- resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz"
- integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
- dependencies:
- base64-js "^1.3.1"
- ieee754 "^1.2.1"
-
busboy@^1.6.0:
version "1.6.0"
resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz"
@@ -1083,10 +1097,10 @@ chalk@^2.0.0:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@^5.0.0:
- version "5.0.1"
- resolved "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz"
- integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==
+chalk@^5.3.0:
+ version "5.3.0"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz"
+ integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==
chardet@^0.7.0:
version "0.7.0"
@@ -1125,17 +1139,17 @@ cli-cursor@^3.1.0:
dependencies:
restore-cursor "^3.1.0"
-cli-cursor@^4.0.0:
- version "4.0.0"
- resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz"
- integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==
+cli-cursor@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz"
+ integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==
dependencies:
- restore-cursor "^4.0.0"
+ restore-cursor "^5.0.0"
-cli-spinners@^2.5.0, cli-spinners@^2.6.1:
- version "2.6.1"
- resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz"
- integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==
+cli-spinners@^2.5.0, cli-spinners@^2.9.2:
+ version "2.9.2"
+ resolved "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz"
+ integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==
cli-width@^3.0.0:
version "3.0.0"
@@ -1277,7 +1291,7 @@ data-uri-to-buffer@3:
data-view-buffer@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2"
+ resolved "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz"
integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==
dependencies:
call-bind "^1.0.6"
@@ -1286,7 +1300,7 @@ data-view-buffer@^1.0.1:
data-view-byte-length@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2"
+ resolved "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz"
integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==
dependencies:
call-bind "^1.0.7"
@@ -1295,7 +1309,7 @@ data-view-byte-length@^1.0.1:
data-view-byte-offset@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a"
+ resolved "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz"
integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==
dependencies:
call-bind "^1.0.6"
@@ -1311,14 +1325,14 @@ debug@4, [email protected], debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.3:
debug@^3.2.7:
version "3.2.7"
- resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
+ resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
dependencies:
ms "^2.1.1"
debug@^4.3.4:
version "4.3.5"
- resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e"
+ resolved "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz"
integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==
dependencies:
ms "2.1.2"
@@ -1388,7 +1402,7 @@ define-properties@^1.1.3:
define-properties@^1.2.0, define-properties@^1.2.1:
version "1.2.1"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
+ resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz"
integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
dependencies:
define-data-property "^1.0.1"
@@ -1452,15 +1466,20 @@ [email protected]:
resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.32.1.tgz"
integrity sha512-/ewl0CPYT5xjOC+SJ7wADJKjtpZfiiUaYXOP/Ns54lnBcv4Xqa4iKSqRF/w1fjiUvWTYN9W8UuOiyCHtmu5fJw==
-discord-api-types@^0.36.2, discord-api-types@^0.36.3:
+ version "0.37.83"
+ resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.83.tgz"
+ integrity sha512-urGGYeWtWNYMKnYlZnOnDHm8fVRffQs3U0SpE8RHeiuLKb/u92APS8HoQnPTFbnXmY1vVnXjXO4dOxcAn3J+DA==
+
+discord-api-types@^0.36.3:
version "0.36.3"
resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.36.3.tgz"
integrity sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg==
discord-api-types@^0.37.41:
- version "0.37.48"
- resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.48.tgz"
- integrity sha512-vu2NQJD7SZRjpKDC2DPNsxTz34KS53OrotA+LGRW6mcyT55Hjqu66aRrouzjYhea7tllL9I7rvWVX7bg3aT2AQ==
+ version "0.37.103"
+ resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.37.103.tgz"
+ integrity sha512-r+qitxXKe2l6KFw5odPdZSSqdEou+7eNC7BfbZ7mny5Me/K06wCTeKUMVeH/YsI9+4QQudskeQ307kr/7ppQ1A==
version "14.11.0"
@@ -1484,7 +1503,7 @@ [email protected]:
doctrine@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ resolved "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz"
integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
dependencies:
esutils "^2.0.2"
@@ -1503,16 +1522,21 @@ dot-prop@^5.2.0:
dependencies:
is-obj "^2.0.0"
-dotenv@^16.0.0:
- version "16.0.0"
- resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz"
- integrity sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==
+dotenv@^16.4.5:
+ version "16.4.5"
+ resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz"
+ integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==
duplexer3@^0.1.4:
version "0.1.4"
resolved "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz"
integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
+emoji-regex@^10.3.0:
+ version "10.3.0"
+ resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz"
+ integrity sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==
+
emoji-regex@^8.0.0:
version "8.0.0"
resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
@@ -1567,7 +1591,7 @@ es-abstract@^1.19.0, es-abstract@^1.19.1:
es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2:
version "1.23.3"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0"
+ resolved "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz"
integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==
dependencies:
array-buffer-byte-length "^1.0.1"
@@ -1650,14 +1674,14 @@ es-get-iterator@^1.0.2:
es-object-atoms@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941"
+ resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz"
integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==
dependencies:
es-errors "^1.3.0"
es-set-tostringtag@^2.0.3:
version "2.0.3"
- resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777"
+ resolved "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz"
integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==
dependencies:
get-intrinsic "^1.2.4"
@@ -1666,7 +1690,7 @@ es-set-tostringtag@^2.0.3:
es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763"
+ resolved "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz"
integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==
dependencies:
hasown "^2.0.0"
@@ -1850,7 +1874,7 @@ eslint-config-xo@^0.39.0:
eslint-import-resolver-node@^0.3.9:
version "0.3.9"
- resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac"
+ resolved "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz"
integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==
dependencies:
debug "^3.2.7"
@@ -1859,14 +1883,14 @@ eslint-import-resolver-node@^0.3.9:
eslint-module-utils@^2.8.0:
version "2.8.1"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34"
+ resolved "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz"
integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==
dependencies:
debug "^3.2.7"
version "2.29.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643"
+ resolved "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz"
integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==
dependencies:
array-includes "^3.1.7"
@@ -2010,7 +2034,7 @@ esutils@^2.0.2:
eventemitter3@^4.0.7:
version "4.0.7"
- resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
@@ -2204,7 +2228,7 @@ follow-redirects@^1.15.6:
for-each@^0.3.3:
version "0.3.3"
- resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
+ resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz"
integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
dependencies:
is-callable "^1.1.3"
@@ -2273,7 +2297,7 @@ fs.realpath@^1.0.0:
resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
-fsevents@~2.3.2:
[email protected], fsevents@~2.3.2:
version "2.3.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
@@ -2293,7 +2317,7 @@ function-bind@^1.1.1, function-bind@^1.1.2:
function.prototype.name@^1.1.6:
version "1.1.6"
- resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd"
+ resolved "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz"
integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==
dependencies:
call-bind "^1.0.2"
@@ -2308,7 +2332,7 @@ functional-red-black-tree@^1.0.1:
functions-have-names@^1.2.3:
version "1.2.3"
- resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
+ resolved "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz"
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
gauge@^3.0.0:
@@ -2326,6 +2350,11 @@ gauge@^3.0.0:
strip-ansi "^6.0.1"
wide-align "^1.1.2"
+get-east-asian-width@^1.0.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz"
+ integrity sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==
+
get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4:
version "1.2.4"
resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz"
@@ -2366,7 +2395,7 @@ get-symbol-description@^1.0.0:
get-symbol-description@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5"
+ resolved "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz"
integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==
dependencies:
call-bind "^1.0.5"
@@ -2445,7 +2474,7 @@ globals@^13.6.0, globals@^13.9.0:
globalthis@^1.0.3:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
+ resolved "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz"
integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
dependencies:
define-properties "^1.1.3"
@@ -2568,7 +2597,7 @@ has-tostringtag@^1.0.0:
has-tostringtag@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
+ resolved "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz"
integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
dependencies:
has-symbols "^1.0.3"
@@ -2619,7 +2648,7 @@ http-cache-semantics@^4.0.0:
http-cookie-agent@^6.0.5:
version "6.0.5"
- resolved "https://registry.yarnpkg.com/http-cookie-agent/-/http-cookie-agent-6.0.5.tgz#23b490439464424a689d80ea7f3a560a4a893ab8"
+ resolved "https://registry.npmjs.org/http-cookie-agent/-/http-cookie-agent-6.0.5.tgz"
integrity sha512-sfZ8fDgDP3B1YB+teqSnAK1aPgBu8reUUGxSsndP2XnYN6cM29EURXWXZqQQiaRdor3B4QjpkUNfv21syaO4DA==
dependencies:
agent-base "^7.1.1"
@@ -2799,7 +2828,7 @@ internal-slot@^1.0.3:
internal-slot@^1.0.7:
version "1.0.7"
- resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802"
+ resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz"
integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==
dependencies:
es-errors "^1.3.0"
@@ -2831,7 +2860,7 @@ is-arguments@^1.1.0:
is-array-buffer@^3.0.4:
version "3.0.4"
- resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98"
+ resolved "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz"
integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==
dependencies:
call-bind "^1.0.2"
@@ -2859,7 +2888,7 @@ is-boolean-object@^1.1.0:
is-callable@^1.1.3, is-callable@^1.2.7:
version "1.2.7"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
+ resolved "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
is-callable@^1.1.4, is-callable@^1.2.4:
@@ -2883,7 +2912,7 @@ is-ci@^2.0.0:
is-core-module@^2.13.0, is-core-module@^2.13.1:
version "2.13.1"
- resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
+ resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz"
integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
dependencies:
hasown "^2.0.0"
@@ -2897,7 +2926,7 @@ is-core-module@^2.5.0, is-core-module@^2.8.1:
is-data-view@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f"
+ resolved "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz"
integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==
dependencies:
is-typed-array "^1.1.13"
@@ -2961,9 +2990,14 @@ is-negative-zero@^2.0.2:
is-negative-zero@^2.0.3:
version "2.0.3"
- resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747"
+ resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz"
integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==
+is-network-error@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz"
+ integrity sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==
+
is-npm@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz"
@@ -3018,7 +3052,7 @@ is-shared-array-buffer@^1.0.2:
is-shared-array-buffer@^1.0.3:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688"
+ resolved "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz"
integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==
dependencies:
call-bind "^1.0.7"
@@ -3056,7 +3090,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3:
is-typed-array@^1.1.13:
version "1.1.13"
- resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229"
+ resolved "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz"
integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==
dependencies:
which-typed-array "^1.1.14"
@@ -3071,10 +3105,15 @@ is-unicode-supported@^0.1.0:
resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz"
integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
-is-unicode-supported@^1.1.0:
- version "1.2.0"
- resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz"
- integrity sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==
+is-unicode-supported@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz"
+ integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==
+
+is-unicode-supported@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.0.0.tgz"
+ integrity sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==
is-weakref@^1.0.2:
version "1.0.2"
@@ -3110,10 +3149,10 @@ isexe@^2.0.0:
resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
-iso8601-duration@^1.3.0:
- version "1.3.0"
- resolved "https://registry.npmjs.org/iso8601-duration/-/iso8601-duration-1.3.0.tgz"
- integrity sha512-K4CiUBzo3YeWk76FuET/dQPH03WE04R94feo5TSKQCXpoXQt9E4yx2CnY737QZnSAI3PI4WlKo/zfqizGx52QQ==
+iso8601-duration@^2.1.2:
+ version "2.1.2"
+ resolved "https://registry.npmjs.org/iso8601-duration/-/iso8601-duration-2.1.2.tgz"
+ integrity sha512-yXteYUiKv6x8seaDzyBwnZtPpmx766KfvQuaVNyPifYOjmPdOo3ajd4phDNa7Y5mTQGnXsNEcXFtVun1FjYXxQ==
iterate-iterator@^1.0.1:
version "1.0.2"
@@ -3183,7 +3222,7 @@ json-stable-stringify@^1.0.2:
json5@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
+ resolved "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz"
integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==
dependencies:
minimist "^1.2.0"
@@ -3311,13 +3350,13 @@ log-symbols@^4.1.0:
chalk "^4.1.0"
is-unicode-supported "^0.1.0"
-log-symbols@^5.1.0:
- version "5.1.0"
- resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz"
- integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==
+log-symbols@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz"
+ integrity sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==
dependencies:
- chalk "^5.0.0"
- is-unicode-supported "^1.1.0"
+ chalk "^5.3.0"
+ is-unicode-supported "^1.3.0"
lowercase-keys@^1.0.0, lowercase-keys@^1.0.1:
version "1.0.1"
@@ -3350,7 +3389,7 @@ lru-cache@^6.0.0:
m3u8stream@^0.8.6:
version "0.8.6"
- resolved "https://registry.yarnpkg.com/m3u8stream/-/m3u8stream-0.8.6.tgz#0d6de4ce8ee69731734e6b616e7b05dd9d9a55b1"
+ resolved "https://registry.npmjs.org/m3u8stream/-/m3u8stream-0.8.6.tgz"
integrity sha512-LZj8kIVf9KCphiHmH7sbFQTVe4tOemb202fWwvJwR9W5ENW/1hxJN6ksAWGhQgSBSa3jyWhnjKU1Fw1GaOdbyA==
dependencies:
miniget "^4.2.2"
@@ -3418,6 +3457,11 @@ mimic-fn@^4.0.0:
resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz"
integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
+mimic-function@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz"
+ integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==
+
mimic-response@^1.0.0, mimic-response@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz"
@@ -3435,7 +3479,7 @@ miniget@^4.2.2:
miniget@^4.2.3:
version "4.2.3"
- resolved "https://registry.yarnpkg.com/miniget/-/miniget-4.2.3.tgz#3707a24c7c11c25d359473291638ab28aab349bd"
+ resolved "https://registry.npmjs.org/miniget/-/miniget-4.2.3.tgz"
integrity sha512-SjbDPDICJ1zT+ZvQwK0hUcRY4wxlhhNpHL9nJOB2MEAXRGagTljsO8MEDzQMTFf0Q8g4QNi8P9lEm/g7e+qgzA==
minimatch@^3.0.4, minimatch@^3.1.2:
@@ -3477,7 +3521,7 @@ [email protected]:
ms@^2.1.1:
version "2.1.3"
- resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
+ resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
@@ -3563,9 +3607,9 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1:
path-key "^3.0.0"
npm-run-path@^5.1.0:
- version "5.1.0"
- resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz"
- integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==
+ version "5.3.0"
+ resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz"
+ integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==
dependencies:
path-key "^4.0.0"
@@ -3591,7 +3635,7 @@ object-inspect@^1.12.0, object-inspect@^1.9.0:
object-inspect@^1.13.1:
version "1.13.1"
- resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2"
+ resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz"
integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
object-keys@^1.1.1:
@@ -3611,7 +3655,7 @@ object.assign@^4.1.2:
object.assign@^4.1.5:
version "4.1.5"
- resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0"
+ resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz"
integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==
dependencies:
call-bind "^1.0.5"
@@ -3621,7 +3665,7 @@ object.assign@^4.1.5:
object.fromentries@^2.0.7:
version "2.0.8"
- resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65"
+ resolved "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz"
integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==
dependencies:
call-bind "^1.0.7"
@@ -3631,7 +3675,7 @@ object.fromentries@^2.0.7:
object.groupby@^1.0.1:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e"
+ resolved "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz"
integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==
dependencies:
call-bind "^1.0.7"
@@ -3640,7 +3684,7 @@ object.groupby@^1.0.1:
object.values@^1.1.7:
version "1.2.0"
- resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b"
+ resolved "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz"
integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==
dependencies:
call-bind "^1.0.7"
@@ -3668,6 +3712,13 @@ onetime@^6.0.0:
dependencies:
mimic-fn "^4.0.0"
+onetime@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz"
+ integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==
+ dependencies:
+ mimic-function "^5.0.0"
+
[email protected], open@^7.4.2:
version "7.4.2"
resolved "https://registry.npmjs.org/open/-/open-7.4.2.tgz"
@@ -3720,20 +3771,20 @@ [email protected], ora@^5.4.1:
strip-ansi "^6.0.0"
wcwidth "^1.0.1"
-ora@^6.1.0:
- version "6.1.0"
- resolved "https://registry.npmjs.org/ora/-/ora-6.1.0.tgz"
- integrity sha512-CxEP6845hLK+NHFWZ+LplGO4zfw4QSfxTlqMfvlJ988GoiUeZDMzCvqsZkFHv69sPICmJH1MDxZoQFOKXerAVw==
+ora@^8.1.0:
+ version "8.1.0"
+ resolved "https://registry.npmjs.org/ora/-/ora-8.1.0.tgz"
+ integrity sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==
dependencies:
- bl "^5.0.0"
- chalk "^5.0.0"
- cli-cursor "^4.0.0"
- cli-spinners "^2.6.1"
+ chalk "^5.3.0"
+ cli-cursor "^5.0.0"
+ cli-spinners "^2.9.2"
is-interactive "^2.0.0"
- is-unicode-supported "^1.1.0"
- log-symbols "^5.1.0"
- strip-ansi "^7.0.1"
- wcwidth "^1.0.1"
+ is-unicode-supported "^2.0.0"
+ log-symbols "^6.0.0"
+ stdin-discarder "^0.2.2"
+ string-width "^7.2.0"
+ strip-ansi "^7.1.0"
version "4.0.1"
@@ -3772,12 +3823,12 @@ p-limit@^3.0.2:
dependencies:
yocto-queue "^0.1.0"
-p-limit@^4.0.0:
- version "4.0.0"
- resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz"
- integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==
+p-limit@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.npmjs.org/p-limit/-/p-limit-6.1.0.tgz"
+ integrity sha512-H0jc0q1vOzlEk0TqAKXKZxdl7kX3OFUzCnNVUnq5Pc3DGo0kpeaMuPqxQn235HibwBEb0/pm9dgKTjXy66fBkg==
dependencies:
- yocto-queue "^1.0.0"
+ yocto-queue "^1.1.1"
p-locate@^5.0.0:
version "5.0.0"
@@ -3786,22 +3837,28 @@ p-locate@^5.0.0:
dependencies:
p-limit "^3.0.2"
-p-queue@^7.2.0:
- version "7.2.0"
- resolved "https://registry.npmjs.org/p-queue/-/p-queue-7.2.0.tgz"
- integrity sha512-Kvv7p13M46lTYLQ/PsZdaj/1Vj6u/8oiIJgyQyx4oVkOfHdd7M2EZvXigDvcsSzRwanCzQirV5bJPQFoSQt5MA==
+ version "7.1.0"
+ resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-7.1.0.tgz#c2bb28f8dc0ebf3fadb985b8706cf2ce5fe5f275"
+ integrity sha512-V+0vPJbhYkBqknPp0qnaz+dWcj8cNepfXZcsVIVEHPbFQXMPwrzCNIiM4FoxGtwHXtPzVCPHDvqCr1YrOJX2Gw==
dependencies:
eventemitter3 "^4.0.7"
- p-timeout "^5.0.2"
+ p-timeout "^5.0.0"
- version "4.6.2"
- resolved "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz"
- integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==
+ version "6.2.0"
+ resolved "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz"
+ integrity sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==
dependencies:
- "@types/retry" "0.12.0"
+ "@types/retry" "0.12.2"
+ is-network-error "^1.0.0"
retry "^0.13.1"
+p-timeout@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b"
+ integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==
+
p-timeout@^5.0.2:
version "5.0.2"
resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-5.0.2.tgz"
@@ -3965,7 +4022,7 @@ please-upgrade-node@^3.2.0:
possible-typed-array-names@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f"
+ resolved "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz"
integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==
postinstall-postinstall@^2.1.0:
@@ -3988,17 +4045,19 @@ prepend-http@^2.0.0:
resolved "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz"
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
-prism-media@^1.3.4:
- version "1.3.4"
- resolved "https://registry.npmjs.org/prism-media/-/prism-media-1.3.4.tgz"
- integrity sha512-eW7LXORkTCQznZs+eqe9VjGOrLBxcBPXgNyHXMTSRVhphvd/RrxgIR7WaWt4fkLuhshcdT5KHL88LAfcvS3f5g==
+prism-media@^1.3.5:
+ version "1.3.5"
+ resolved "https://registry.npmjs.org/prism-media/-/prism-media-1.3.5.tgz"
+ integrity sha512-IQdl0Q01m4LrkN1EGIE9lphov5Hy7WWlH6ulf5QdGePLlPas9p2mhgddTEHrlaXYjjFToM1/rWuwF37VF4taaA==
- version "4.16.0"
- resolved "https://registry.npmjs.org/prisma/-/prisma-4.16.0.tgz"
- integrity sha512-kSCwbTm3LCephyGfZMJYqBXpPJXdJStg5xwfzeFmR5C05zfkOURK9pQpJF6uUQvFWm3lI9ZMSNkObmFkAPnB+g==
+ version "5.21.1"
+ resolved "https://registry.npmjs.org/prisma/-/prisma-5.21.1.tgz"
+ integrity sha512-PB+Iqzld/uQBPaaw2UVIk84kb0ITsLajzsxzsadxxl54eaU5Gyl2/L02ysivHxK89t7YrfQJm+Ggk37uvM70oQ==
dependencies:
- "@prisma/engines" "4.16.0"
+ "@prisma/engines" "5.21.1"
+ optionalDependencies:
+ fsevents "2.3.3"
progress@^2.0.0:
version "2.0.3"
@@ -4043,7 +4102,7 @@ proxy-from-env@^1.0.0, proxy-from-env@^1.1.0:
psl@^1.1.33:
version "1.9.0"
- resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
+ resolved "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz"
integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
pump@^3.0.0:
@@ -4061,7 +4120,7 @@ punycode@^2.1.0:
punycode@^2.1.1:
version "2.3.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
+ resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
pupa@^2.1.1:
@@ -4090,7 +4149,7 @@ query-string@^6.13.8:
querystringify@^2.1.1:
version "2.2.0"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6"
+ resolved "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz"
integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==
queue-microtask@^1.2.2:
@@ -4173,7 +4232,7 @@ reflect-metadata@^0.1.13:
regexp.prototype.flags@^1.5.2:
version "1.5.2"
- resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334"
+ resolved "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz"
integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==
dependencies:
call-bind "^1.0.6"
@@ -4244,7 +4303,7 @@ require-from-string@^2.0.2:
requires-port@^1.0.0:
version "1.0.0"
- resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ resolved "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz"
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
resolve-alpn@^1.2.0:
@@ -4273,7 +4332,7 @@ resolve@^1.1.6:
resolve@^1.22.4:
version "1.22.8"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
+ resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz"
integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
dependencies:
is-core-module "^2.13.0"
@@ -4302,13 +4361,13 @@ restore-cursor@^3.1.0:
onetime "^5.1.0"
signal-exit "^3.0.2"
-restore-cursor@^4.0.0:
- version "4.0.0"
- resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz"
- integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==
+restore-cursor@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz"
+ integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==
dependencies:
- onetime "^5.1.0"
- signal-exit "^3.0.2"
+ onetime "^7.0.0"
+ signal-exit "^4.1.0"
[email protected], retry@^0.13.1:
version "0.13.1"
@@ -4355,7 +4414,7 @@ rxjs@^7.2.0:
safe-array-concat@^1.1.2:
version "1.1.2"
- resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb"
+ resolved "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz"
integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==
dependencies:
call-bind "^1.0.7"
@@ -4370,7 +4429,7 @@ safe-buffer@~5.2.0:
safe-regex-test@^1.0.3:
version "1.0.3"
- resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377"
+ resolved "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz"
integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==
dependencies:
call-bind "^1.0.6"
@@ -4384,7 +4443,7 @@ safe-regex-test@^1.0.3:
sax@^1.2.4, sax@^1.4.1:
version "1.4.1"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f"
+ resolved "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz"
integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
semver-compare@^1.0.0:
@@ -4418,7 +4477,7 @@ semver@^6.0.0, semver@^6.2.0, semver@^6.3.0:
semver@^6.3.1:
version "6.3.1"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
+ resolved "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
semver@^7.2.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.5.3:
@@ -4447,7 +4506,7 @@ set-function-length@^1.2.1:
set-function-name@^2.0.1:
version "2.0.2"
- resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985"
+ resolved "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz"
integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==
dependencies:
define-data-property "^1.1.4"
@@ -4495,6 +4554,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7:
resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+signal-exit@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
slash@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz"
@@ -4609,6 +4673,11 @@ [email protected]:
resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
+stdin-discarder@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz"
+ integrity sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==
+
streamsearch@^1.1.0:
version "1.1.0"
resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz"
@@ -4633,9 +4702,18 @@ string-template@^1.0.0:
is-fullwidth-code-point "^3.0.0"
strip-ansi "^6.0.1"
+string-width@^7.2.0:
+ version "7.2.0"
+ resolved "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz"
+ integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==
+ dependencies:
+ emoji-regex "^10.3.0"
+ get-east-asian-width "^1.0.0"
+ strip-ansi "^7.1.0"
+
string.prototype.trim@^1.2.9:
version "1.2.9"
- resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4"
+ resolved "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz"
integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==
dependencies:
call-bind "^1.0.7"
@@ -4653,7 +4731,7 @@ string.prototype.trimend@^1.0.4:
string.prototype.trimend@^1.0.8:
version "1.0.8"
- resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229"
+ resolved "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz"
integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==
dependencies:
call-bind "^1.0.7"
@@ -4670,7 +4748,7 @@ string.prototype.trimstart@^1.0.4:
string.prototype.trimstart@^1.0.8:
version "1.0.8"
- resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde"
+ resolved "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz"
integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==
dependencies:
call-bind "^1.0.7"
@@ -4696,16 +4774,16 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
dependencies:
ansi-regex "^5.0.1"
-strip-ansi@^7.0.1:
- version "7.0.1"
- resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz"
- integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==
+strip-ansi@^7.1.0:
+ version "7.1.0"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz"
+ integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
dependencies:
ansi-regex "^6.0.1"
strip-bom@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"
integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
strip-final-newline@^2.0.0:
@@ -4847,7 +4925,7 @@ token-types@^5.0.0-alpha.2, token-types@^5.0.1:
tough-cookie@^4.1.4:
version "4.1.4"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36"
+ resolved "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz"
integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==
dependencies:
psl "^1.1.33"
@@ -4872,7 +4950,7 @@ ts-mixer@^6.0.3:
tsconfig-paths@^3.15.0:
version "3.15.0"
- resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4"
+ resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz"
integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==
dependencies:
"@types/json5" "^0.0.29"
@@ -4895,6 +4973,11 @@ tslib@^2.5.0:
resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz"
integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==
+tslib@^2.6.2:
+ version "2.8.0"
+ resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz"
+ integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==
+
tsutils@^3.21.0:
version "3.21.0"
resolved "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz"
@@ -4947,14 +5030,19 @@ type-fest@^0.8.0:
resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz"
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
-type-fest@^2.0.0, type-fest@^2.12.0:
+type-fest@^2.0.0:
version "2.12.2"
resolved "https://registry.npmjs.org/type-fest/-/type-fest-2.12.2.tgz"
integrity sha512-qt6ylCGpLjZ7AaODxbpyBZSs9fCI9SkL3Z9q2oxMBQhs/uyY+VD8jHA8ULCGmWQJlBgqvO3EJeAngOHD8zQCrQ==
+type-fest@^2.12.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
+ integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
+
typed-array-buffer@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3"
+ resolved "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz"
integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==
dependencies:
call-bind "^1.0.7"
@@ -4963,7 +5051,7 @@ typed-array-buffer@^1.0.2:
typed-array-byte-length@^1.0.1:
version "1.0.1"
- resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67"
+ resolved "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz"
integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==
dependencies:
call-bind "^1.0.7"
@@ -4974,7 +5062,7 @@ typed-array-byte-length@^1.0.1:
typed-array-byte-offset@^1.0.2:
version "1.0.2"
- resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063"
+ resolved "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz"
integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==
dependencies:
available-typed-arrays "^1.0.7"
@@ -4986,7 +5074,7 @@ typed-array-byte-offset@^1.0.2:
typed-array-length@^1.0.6:
version "1.0.6"
- resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3"
+ resolved "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz"
integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==
dependencies:
call-bind "^1.0.7"
@@ -5004,9 +5092,9 @@ typedarray-to-buffer@^3.1.5:
is-typedarray "^1.0.0"
typescript@>=4.3, typescript@^4.6.4:
- version "4.6.4"
- resolved "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz"
- integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==
+ version "4.9.5"
+ resolved "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz"
+ integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
unbox-primitive@^1.0.1, unbox-primitive@^1.0.2:
version "1.0.2"
@@ -5030,9 +5118,9 @@ undici@^5.8.0:
resolved "https://registry.npmjs.org/undici/-/undici-5.8.1.tgz"
integrity sha512-iDRmWX4Zar/4A/t+1LrKQRm102zw2l9Wgat3LtTlTn8ykvMZmAmpq9tjyHEigx18FsY7IfATvyN3xSw9BDz0eA==
-undici@^6.18.2, undici@^6.19.2:
+undici@^6.18.2, undici@five:
version "6.19.2"
- resolved "https://registry.yarnpkg.com/undici/-/undici-6.19.2.tgz#231bc5de78d0dafb6260cf454b294576c2f3cd31"
+ resolved "https://registry.npmjs.org/undici/-/undici-6.19.2.tgz"
integrity sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==
unique-string@^2.0.0:
@@ -5054,7 +5142,7 @@ universalify@^0.1.0:
universalify@^0.2.0:
version "0.2.0"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0"
+ resolved "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz"
integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==
universalify@^2.0.0:
@@ -5108,7 +5196,7 @@ url-parse-lax@^3.0.0:
url-parse@^1.5.3:
version "1.5.10"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
+ resolved "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz"
integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==
dependencies:
querystringify "^2.1.1"
@@ -5183,7 +5271,7 @@ which-pm-runs@^1.0.0:
which-typed-array@^1.1.14, which-typed-array@^1.1.15:
version "1.1.15"
- resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d"
+ resolved "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz"
integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==
dependencies:
available-typed-arrays "^1.0.7"
@@ -5266,10 +5354,10 @@ ws@^8.13.0:
resolved "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz"
integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
-ws@^8.8.1:
- version "8.8.1"
- resolved "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz"
- integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==
+ws@^8.16.0:
+ version "8.18.0"
+ resolved "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz"
+ integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==
xbytes@^1.7.0:
version "1.7.0"
@@ -5316,10 +5404,10 @@ yocto-queue@^0.1.0:
resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
-yocto-queue@^1.0.0:
- version "1.0.0"
- resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz"
- integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
+yocto-queue@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz"
+ integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==
ytsr@^3.8.4:
version "3.8.4"