mirror of
https://github.com/BluemediaGER/muse.git
synced 2024-11-23 09:15:29 +01:00
Bump linter version
This commit is contained in:
parent
fd782219ef
commit
dcac22832d
12
package.json
12
package.json
|
@ -38,15 +38,15 @@
|
||||||
"@types/spotify-web-api-node": "^5.0.2",
|
"@types/spotify-web-api-node": "^5.0.2",
|
||||||
"@types/validator": "^13.1.4",
|
"@types/validator": "^13.1.4",
|
||||||
"@types/ws": "^7.4.4",
|
"@types/ws": "^7.4.4",
|
||||||
"@typescript-eslint/eslint-plugin": "^4.25.0",
|
"@typescript-eslint/eslint-plugin": "^4.31.1",
|
||||||
"@typescript-eslint/parser": "^4.26.1",
|
"@typescript-eslint/parser": "^4.31.1",
|
||||||
"eslint": "^7.28.0",
|
"eslint": "^7.32.0",
|
||||||
"eslint-config-xo": "^0.35.0",
|
"eslint-config-xo": "^0.38.0",
|
||||||
"eslint-config-xo-typescript": "^0.36.0",
|
"eslint-config-xo-typescript": "^0.44.0",
|
||||||
"husky": "^4.3.8",
|
"husky": "^4.3.8",
|
||||||
"nodemon": "^2.0.7",
|
"nodemon": "^2.0.7",
|
||||||
"ts-node": "^9.1.1",
|
"ts-node": "^9.1.1",
|
||||||
"typescript": "^4.3.4"
|
"typescript": "^4.4.3"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
"extends": [
|
"extends": [
|
||||||
|
|
|
@ -67,7 +67,7 @@ export default class {
|
||||||
let handler: Command;
|
let handler: Command;
|
||||||
|
|
||||||
if (this.commands.has(command)) {
|
if (this.commands.has(command)) {
|
||||||
handler = this.commands.get(command) as Command;
|
handler = this.commands.get(command)!;
|
||||||
} else if (shortcut) {
|
} else if (shortcut) {
|
||||||
const possibleHandler = this.commands.get(shortcut.command.split(' ')[0]);
|
const possibleHandler = this.commands.get(shortcut.command.split(' ')[0]);
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ export default class implements Command {
|
||||||
public name = 'clear';
|
public name = 'clear';
|
||||||
public aliases = ['c'];
|
public aliases = ['c'];
|
||||||
public examples = [
|
public examples = [
|
||||||
['clear', 'clears all songs in queue except currently playing']
|
['clear', 'clears all songs in queue except currently playing'],
|
||||||
];
|
];
|
||||||
|
|
||||||
public requiresVC = true;
|
public requiresVC = true;
|
||||||
|
|
|
@ -10,7 +10,7 @@ export default class implements Command {
|
||||||
public aliases = [];
|
public aliases = [];
|
||||||
public examples = [
|
public examples = [
|
||||||
['config prefix !', 'set the prefix to !'],
|
['config prefix !', 'set the prefix to !'],
|
||||||
['config channel music-commands', 'bind the bot to the music-commands channel']
|
['config channel music-commands', 'bind the bot to the music-commands channel'],
|
||||||
];
|
];
|
||||||
|
|
||||||
public async execute(msg: Message, args: string []): Promise<void> {
|
public async execute(msg: Message, args: string []): Promise<void> {
|
||||||
|
@ -64,7 +64,7 @@ export default class implements Command {
|
||||||
|
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
(channel as TextChannel).send('hey apparently I\'m bound to this channel now'),
|
(channel as TextChannel).send('hey apparently I\'m bound to this channel now'),
|
||||||
msg.react('👍')
|
msg.react('👍'),
|
||||||
]);
|
]);
|
||||||
} else {
|
} else {
|
||||||
await msg.channel.send(errorMsg('either that channel doesn\'t exist or you want me to become sentient and listen to a voice channel'));
|
await msg.channel.send(errorMsg('either that channel doesn\'t exist or you want me to become sentient and listen to a voice channel'));
|
||||||
|
|
|
@ -10,7 +10,7 @@ export default class implements Command {
|
||||||
public name = 'disconnect';
|
public name = 'disconnect';
|
||||||
public aliases = ['dc'];
|
public aliases = ['dc'];
|
||||||
public examples = [
|
public examples = [
|
||||||
['disconnect', 'pauses and disconnects player']
|
['disconnect', 'pauses and disconnects player'],
|
||||||
];
|
];
|
||||||
|
|
||||||
public requiresVC = true;
|
public requiresVC = true;
|
||||||
|
|
|
@ -11,7 +11,7 @@ export default class implements Command {
|
||||||
public name = 'fseek';
|
public name = 'fseek';
|
||||||
public aliases = [];
|
public aliases = [];
|
||||||
public examples = [
|
public examples = [
|
||||||
['fseek 10', 'skips forward in current song by 10 seconds']
|
['fseek 10', 'skips forward in current song by 10 seconds'],
|
||||||
];
|
];
|
||||||
|
|
||||||
public requiresVC = true;
|
public requiresVC = true;
|
||||||
|
|
|
@ -10,7 +10,7 @@ export default class implements Command {
|
||||||
public name = 'help';
|
public name = 'help';
|
||||||
public aliases = ['h'];
|
public aliases = ['h'];
|
||||||
public examples = [
|
public examples = [
|
||||||
['help', 'you don\'t need a description']
|
['help', 'you don\'t need a description'],
|
||||||
];
|
];
|
||||||
|
|
||||||
private commands: Command[] = [];
|
private commands: Command[] = [];
|
||||||
|
|
|
@ -11,7 +11,7 @@ export default class implements Command {
|
||||||
public name = 'pause';
|
public name = 'pause';
|
||||||
public aliases = [];
|
public aliases = [];
|
||||||
public examples = [
|
public examples = [
|
||||||
['pause', 'pauses currently playing song']
|
['pause', 'pauses currently playing song'],
|
||||||
];
|
];
|
||||||
|
|
||||||
public requiresVC = true;
|
public requiresVC = true;
|
||||||
|
|
|
@ -24,7 +24,7 @@ export default class implements Command {
|
||||||
['play https://open.spotify.com/album/5dv1oLETxdsYOkS2Sic00z?si=bDa7PaloRx6bMIfKdnvYQw', 'adds all songs from album to the queue'],
|
['play https://open.spotify.com/album/5dv1oLETxdsYOkS2Sic00z?si=bDa7PaloRx6bMIfKdnvYQw', 'adds all songs from album to the queue'],
|
||||||
['play https://open.spotify.com/playlist/37i9dQZF1DX94qaYRnkufr?si=r2fOVL_QQjGxFM5MWb84Xw', 'adds all songs from playlist to the queue'],
|
['play https://open.spotify.com/playlist/37i9dQZF1DX94qaYRnkufr?si=r2fOVL_QQjGxFM5MWb84Xw', 'adds all songs from playlist to the queue'],
|
||||||
['play cool music immediate', 'adds the first search result for "cool music" to the front of the queue'],
|
['play cool music immediate', 'adds the first search result for "cool music" to the front of the queue'],
|
||||||
['play cool music i', 'adds the first search result for "cool music" to the front of the queue']
|
['play cool music i', 'adds the first search result for "cool music" to the front of the queue'],
|
||||||
];
|
];
|
||||||
|
|
||||||
public requiresVC = true;
|
public requiresVC = true;
|
||||||
|
@ -82,7 +82,7 @@ export default class implements Command {
|
||||||
// YouTube source
|
// YouTube source
|
||||||
if (url.searchParams.get('list')) {
|
if (url.searchParams.get('list')) {
|
||||||
// YouTube playlist
|
// YouTube playlist
|
||||||
newSongs.push(...await this.getSongs.youtubePlaylist(url.searchParams.get('list') as string));
|
newSongs.push(...await this.getSongs.youtubePlaylist(url.searchParams.get('list')!));
|
||||||
} else {
|
} else {
|
||||||
// Single video
|
// Single video
|
||||||
const song = await this.getSongs.youtubeVideo(url.href);
|
const song = await this.getSongs.youtubeVideo(url.href);
|
||||||
|
@ -135,7 +135,9 @@ export default class implements Command {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
newSongs.forEach(song => player.add({...song, addedInChannelId: msg.channel.id}, {immediate: addToFrontOfQueue}));
|
newSongs.forEach(song => {
|
||||||
|
player.add({...song, addedInChannelId: msg.channel.id}, {immediate: addToFrontOfQueue});
|
||||||
|
});
|
||||||
|
|
||||||
const firstSong = newSongs[0];
|
const firstSong = newSongs[0];
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ export default class implements Command {
|
||||||
public aliases = ['q'];
|
public aliases = ['q'];
|
||||||
public examples = [
|
public examples = [
|
||||||
['queue', 'shows current queue'],
|
['queue', 'shows current queue'],
|
||||||
['queue 2', 'shows second page of queue']
|
['queue 2', 'shows second page of queue'],
|
||||||
];
|
];
|
||||||
|
|
||||||
private readonly playerManager: PlayerManager;
|
private readonly playerManager: PlayerManager;
|
||||||
|
|
|
@ -14,7 +14,7 @@ export default class implements Command {
|
||||||
public examples = [
|
public examples = [
|
||||||
['seek 10', 'seeks to 10 seconds from beginning of song'],
|
['seek 10', 'seeks to 10 seconds from beginning of song'],
|
||||||
['seek 1:30', 'seeks to 1 minute and 30 seconds from beginning of song'],
|
['seek 1:30', 'seeks to 1 minute and 30 seconds from beginning of song'],
|
||||||
['seek 1:00:00', 'seeks to 1 hour from beginning of song']
|
['seek 1:00:00', 'seeks to 1 hour from beginning of song'],
|
||||||
];
|
];
|
||||||
|
|
||||||
public requiresVC = true;
|
public requiresVC = true;
|
||||||
|
|
|
@ -12,7 +12,7 @@ export default class implements Command {
|
||||||
['shortcuts', 'show all shortcuts'],
|
['shortcuts', 'show all shortcuts'],
|
||||||
['shortcuts set s skip', 'aliases `s` to `skip`'],
|
['shortcuts set s skip', 'aliases `s` to `skip`'],
|
||||||
['shortcuts set party play https://www.youtube.com/watch?v=zK6oOJ1wz8k', 'aliases `party` to a specific play command'],
|
['shortcuts set party play https://www.youtube.com/watch?v=zK6oOJ1wz8k', 'aliases `party` to a specific play command'],
|
||||||
['shortcuts delete party', 'removes the `party` shortcut']
|
['shortcuts delete party', 'removes the `party` shortcut'],
|
||||||
];
|
];
|
||||||
|
|
||||||
public async execute(msg: Message, args: string []): Promise<void> {
|
public async execute(msg: Message, args: string []): Promise<void> {
|
||||||
|
|
|
@ -10,7 +10,7 @@ export default class implements Command {
|
||||||
public name = 'shuffle';
|
public name = 'shuffle';
|
||||||
public aliases = [];
|
public aliases = [];
|
||||||
public examples = [
|
public examples = [
|
||||||
['shuffle', 'shuffles the current queue']
|
['shuffle', 'shuffles the current queue'],
|
||||||
];
|
];
|
||||||
|
|
||||||
public requiresVC = true;
|
public requiresVC = true;
|
||||||
|
|
|
@ -12,7 +12,7 @@ export default class implements Command {
|
||||||
public aliases = ['s'];
|
public aliases = ['s'];
|
||||||
public examples = [
|
public examples = [
|
||||||
['skip', 'skips the current song'],
|
['skip', 'skips the current song'],
|
||||||
['skip 2', 'skips the next 2 songs']
|
['skip 2', 'skips the next 2 songs'],
|
||||||
];
|
];
|
||||||
|
|
||||||
public requiresVC = true;
|
public requiresVC = true;
|
||||||
|
|
|
@ -10,7 +10,7 @@ export default class implements Command {
|
||||||
public name = 'unskip';
|
public name = 'unskip';
|
||||||
public aliases = ['back'];
|
public aliases = ['back'];
|
||||||
public examples = [
|
public examples = [
|
||||||
['unskip', 'goes back in the queue by one song']
|
['unskip', 'goes back in the queue by one song'],
|
||||||
];
|
];
|
||||||
|
|
||||||
public requiresVC = true;
|
public requiresVC = true;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import {Guild, TextChannel, Message} from 'discord.js';
|
import {Guild, TextChannel, Message, MessageReaction, User} from 'discord.js';
|
||||||
import emoji from 'node-emoji';
|
import emoji from 'node-emoji';
|
||||||
import pEvent from 'p-event';
|
import pEvent from 'p-event';
|
||||||
import {Settings} from '../models/index.js';
|
import {Settings} from '../models/index.js';
|
||||||
|
@ -31,7 +31,7 @@ export default async (guild: Guild): Promise<void> => {
|
||||||
emojiChannels.push({
|
emojiChannels.push({
|
||||||
name: channel.name,
|
name: channel.name,
|
||||||
id: channelId,
|
id: channelId,
|
||||||
emoji: emoji.random().emoji
|
emoji: emoji.random().emoji,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -52,16 +52,12 @@ export default async (guild: Guild): Promise<void> => {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Wait for response from user
|
// Wait for response from user
|
||||||
|
|
||||||
const [choice] = await pEvent(guild.client, 'messageReactionAdd', {
|
const [choice] = await pEvent(guild.client, 'messageReactionAdd', {
|
||||||
multiArgs: true,
|
multiArgs: true,
|
||||||
filter: options => {
|
filter: ([reaction, user]: [MessageReaction, User]) => sentMessageIds.includes(reaction.message.id) && user.id === owner.id,
|
||||||
const [reaction, user] = options;
|
|
||||||
return sentMessageIds.includes(reaction.message.id) && user.id === owner.id;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const chosenChannel = emojiChannels.find(e => e.emoji === choice.emoji.name) as EmojiChannel;
|
const chosenChannel = emojiChannels.find(e => e.emoji === (choice as unknown as MessageReaction).emoji.name)!;
|
||||||
|
|
||||||
// Second setup step (get prefix)
|
// Second setup step (get prefix)
|
||||||
let secondStep = `👍 Cool, I'll listen to **#${chosenChannel.name}** \n\n`;
|
let secondStep = `👍 Cool, I'll listen to **#${chosenChannel.name}** \n\n`;
|
||||||
|
|
|
@ -30,7 +30,7 @@ import Unskip from './commands/unskip.js';
|
||||||
import ThirdParty from './services/third-party.js';
|
import ThirdParty from './services/third-party.js';
|
||||||
import CacheProvider from './services/cache.js';
|
import CacheProvider from './services/cache.js';
|
||||||
|
|
||||||
let container = new Container();
|
const container = new Container();
|
||||||
|
|
||||||
// Bot
|
// Bot
|
||||||
container.bind<Bot>(TYPES.Bot).to(Bot).inSingletonScope();
|
container.bind<Bot>(TYPES.Bot).to(Bot).inSingletonScope();
|
||||||
|
@ -57,7 +57,7 @@ container.bind<NaturalLanguage>(TYPES.Services.NaturalLanguage).to(NaturalLangua
|
||||||
Shortcuts,
|
Shortcuts,
|
||||||
Shuffle,
|
Shuffle,
|
||||||
Skip,
|
Skip,
|
||||||
Unskip
|
Unskip,
|
||||||
].forEach(command => {
|
].forEach(command => {
|
||||||
container.bind<Command>(TYPES.Command).to(command).inSingletonScope();
|
container.bind<Command>(TYPES.Command).to(command).inSingletonScope();
|
||||||
});
|
});
|
||||||
|
|
|
@ -5,5 +5,5 @@ import Shortcut from './shortcut.js';
|
||||||
export {
|
export {
|
||||||
Cache,
|
Cache,
|
||||||
Settings,
|
Settings,
|
||||||
Shortcut
|
Shortcut,
|
||||||
};
|
};
|
||||||
|
|
|
@ -22,7 +22,7 @@ export default class CacheProvider {
|
||||||
|
|
||||||
const {
|
const {
|
||||||
key = JSON.stringify(functionArgs),
|
key = JSON.stringify(functionArgs),
|
||||||
expiresIn
|
expiresIn,
|
||||||
} = options[options.length - 1] as Options;
|
} = options[options.length - 1] as Options;
|
||||||
|
|
||||||
const cachedResult = await Cache.findByPk(key);
|
const cachedResult = await Cache.findByPk(key);
|
||||||
|
@ -30,7 +30,7 @@ export default class CacheProvider {
|
||||||
if (cachedResult) {
|
if (cachedResult) {
|
||||||
if (new Date() < cachedResult.expiresAt) {
|
if (new Date() < cachedResult.expiresAt) {
|
||||||
debug(`Cache hit: ${key}`);
|
debug(`Cache hit: ${key}`);
|
||||||
return JSON.parse(cachedResult.value);
|
return JSON.parse(cachedResult.value) as F;
|
||||||
}
|
}
|
||||||
|
|
||||||
await cachedResult.destroy();
|
await cachedResult.destroy();
|
||||||
|
@ -44,7 +44,7 @@ export default class CacheProvider {
|
||||||
await Cache.upsert({
|
await Cache.upsert({
|
||||||
key,
|
key,
|
||||||
value: JSON.stringify(result),
|
value: JSON.stringify(result),
|
||||||
expiresAt: futureTimeToDate(expiresIn)
|
expiresAt: futureTimeToDate(expiresIn),
|
||||||
});
|
});
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -11,7 +11,7 @@ const CONFIG_MAP = {
|
||||||
SPOTIFY_CLIENT_ID: process.env.SPOTIFY_CLIENT_ID,
|
SPOTIFY_CLIENT_ID: process.env.SPOTIFY_CLIENT_ID,
|
||||||
SPOTIFY_CLIENT_SECRET: process.env.SPOTIFY_CLIENT_SECRET,
|
SPOTIFY_CLIENT_SECRET: process.env.SPOTIFY_CLIENT_SECRET,
|
||||||
DATA_DIR,
|
DATA_DIR,
|
||||||
CACHE_DIR: path.join(DATA_DIR, 'cache')
|
CACHE_DIR: path.join(DATA_DIR, 'cache'),
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
@injectable()
|
@injectable()
|
||||||
|
|
|
@ -42,17 +42,17 @@ export default class {
|
||||||
this.ytsrQueue = new PQueue({concurrency: 4});
|
this.ytsrQueue = new PQueue({concurrency: 4});
|
||||||
}
|
}
|
||||||
|
|
||||||
async youtubeVideoSearch(query: string): Promise<QueuedSongWithoutChannel|null> {
|
async youtubeVideoSearch(query: string): Promise<QueuedSongWithoutChannel | null> {
|
||||||
try {
|
try {
|
||||||
const {items} = await this.ytsrQueue.add(async () => this.cache.wrap(
|
const {items} = await this.ytsrQueue.add(async () => this.cache.wrap(
|
||||||
ytsr,
|
ytsr,
|
||||||
query,
|
query,
|
||||||
{
|
{
|
||||||
limit: 10
|
limit: 10,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
expiresIn: ONE_HOUR_IN_SECONDS
|
expiresIn: ONE_HOUR_IN_SECONDS,
|
||||||
}
|
},
|
||||||
));
|
));
|
||||||
|
|
||||||
let firstVideo: Video | undefined;
|
let firstVideo: Video | undefined;
|
||||||
|
@ -74,14 +74,14 @@ export default class {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async youtubeVideo(url: string): Promise<QueuedSongWithoutChannel|null> {
|
async youtubeVideo(url: string): Promise<QueuedSongWithoutChannel | null> {
|
||||||
try {
|
try {
|
||||||
const videoDetails = await this.cache.wrap(
|
const videoDetails = await this.cache.wrap(
|
||||||
this.youtube.videos.get,
|
this.youtube.videos.get,
|
||||||
cleanUrl(url),
|
cleanUrl(url),
|
||||||
{
|
{
|
||||||
expiresIn: ONE_HOUR_IN_SECONDS
|
expiresIn: ONE_HOUR_IN_SECONDS,
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
@ -90,7 +90,7 @@ export default class {
|
||||||
length: toSeconds(parse(videoDetails.contentDetails.duration)),
|
length: toSeconds(parse(videoDetails.contentDetails.duration)),
|
||||||
url: videoDetails.id,
|
url: videoDetails.id,
|
||||||
playlist: null,
|
playlist: null,
|
||||||
isLive: videoDetails.snippet.liveBroadcastContent === 'live'
|
isLive: videoDetails.snippet.liveBroadcastContent === 'live',
|
||||||
};
|
};
|
||||||
} catch (_: unknown) {
|
} catch (_: unknown) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -103,8 +103,8 @@ export default class {
|
||||||
this.youtube.playlists.get,
|
this.youtube.playlists.get,
|
||||||
listId,
|
listId,
|
||||||
{
|
{
|
||||||
expiresIn: ONE_MINUTE_IN_SECONDS
|
expiresIn: ONE_MINUTE_IN_SECONDS,
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
interface VideoDetailsResponse {
|
interface VideoDetailsResponse {
|
||||||
|
@ -128,8 +128,8 @@ export default class {
|
||||||
listId,
|
listId,
|
||||||
{maxResults: '50', pageToken: nextToken},
|
{maxResults: '50', pageToken: nextToken},
|
||||||
{
|
{
|
||||||
expiresIn: ONE_MINUTE_IN_SECONDS
|
expiresIn: ONE_MINUTE_IN_SECONDS,
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
nextToken = nextPageToken;
|
nextToken = nextPageToken;
|
||||||
|
@ -140,22 +140,20 @@ export default class {
|
||||||
videoDetailsPromises.push((async () => {
|
videoDetailsPromises.push((async () => {
|
||||||
// Unfortunately, package doesn't provide a method for this
|
// Unfortunately, package doesn't provide a method for this
|
||||||
const {items: videoDetailItems} = await this.cache.wrap(
|
const {items: videoDetailItems} = await this.cache.wrap(
|
||||||
() => {
|
async () => got(
|
||||||
return got(
|
|
||||||
'https://www.googleapis.com/youtube/v3/videos',
|
'https://www.googleapis.com/youtube/v3/videos',
|
||||||
{
|
{
|
||||||
searchParams: {
|
searchParams: {
|
||||||
part: 'contentDetails',
|
part: 'contentDetails',
|
||||||
id: items.map(item => item.contentDetails.videoId).join(','),
|
id: items.map(item => item.contentDetails.videoId).join(','),
|
||||||
key: this.youtubeKey,
|
key: this.youtubeKey,
|
||||||
responseType: 'json'
|
responseType: 'json',
|
||||||
}
|
|
||||||
}
|
|
||||||
).json();
|
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
).json() as Promise<{items: VideoDetailsResponse[]}>,
|
||||||
{
|
{
|
||||||
expiresIn: ONE_MINUTE_IN_SECONDS
|
expiresIn: ONE_MINUTE_IN_SECONDS,
|
||||||
}
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
videoDetails.push(...videoDetailItems);
|
videoDetails.push(...videoDetailItems);
|
||||||
|
@ -168,9 +166,9 @@ export default class {
|
||||||
|
|
||||||
const songsToReturn: QueuedSongWithoutChannel[] = [];
|
const songsToReturn: QueuedSongWithoutChannel[] = [];
|
||||||
|
|
||||||
for (let video of playlistVideos) {
|
for (const video of playlistVideos) {
|
||||||
try {
|
try {
|
||||||
const length = toSeconds(parse(videoDetails.find((i: { id: string }) => i.id === video.contentDetails.videoId)!.contentDetails.duration));
|
const length = toSeconds(parse(videoDetails.find((i: {id: string}) => i.id === video.contentDetails.videoId)!.contentDetails.duration));
|
||||||
|
|
||||||
songsToReturn.push({
|
songsToReturn.push({
|
||||||
title: video.snippet.title,
|
title: video.snippet.title,
|
||||||
|
@ -178,7 +176,7 @@ export default class {
|
||||||
length,
|
length,
|
||||||
url: video.contentDetails.videoId,
|
url: video.contentDetails.videoId,
|
||||||
playlist: queuedPlaylist,
|
playlist: queuedPlaylist,
|
||||||
isLive: false
|
isLive: false,
|
||||||
});
|
});
|
||||||
} catch (_: unknown) {
|
} catch (_: unknown) {
|
||||||
// Private and deleted videos are sometimes in playlists, duration of these is not returned and they should not be added to the queue.
|
// Private and deleted videos are sometimes in playlists, duration of these is not returned and they should not be added to the queue.
|
||||||
|
@ -220,7 +218,7 @@ export default class {
|
||||||
// eslint-disable-next-line no-await-in-loop
|
// eslint-disable-next-line no-await-in-loop
|
||||||
({body: tracksResponse} = await this.spotify.getPlaylistTracks(uri.id, {
|
({body: tracksResponse} = await this.spotify.getPlaylistTracks(uri.id, {
|
||||||
limit: parseInt(new URL(tracksResponse.next).searchParams.get('limit') ?? '50', 10),
|
limit: parseInt(new URL(tracksResponse.next).searchParams.get('limit') ?? '50', 10),
|
||||||
offset: parseInt(new URL(tracksResponse.next).searchParams.get('offset') ?? '0', 10)
|
offset: parseInt(new URL(tracksResponse.next).searchParams.get('offset') ?? '0', 10),
|
||||||
}));
|
}));
|
||||||
|
|
||||||
tracks.push(...tracksResponse.items.map(playlistItem => playlistItem.track));
|
tracks.push(...tracksResponse.items.map(playlistItem => playlistItem.track));
|
||||||
|
|
|
@ -31,8 +31,8 @@ export default class {
|
||||||
length: 204,
|
length: 204,
|
||||||
playlist: null,
|
playlist: null,
|
||||||
isLive: false,
|
isLive: false,
|
||||||
addedInChannelId: msg.channel.id
|
addedInChannelId: msg.channel.id,
|
||||||
}, 8, 10)
|
}, 8, 10),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -48,8 +48,8 @@ export default class {
|
||||||
length: 385,
|
length: 385,
|
||||||
playlist: null,
|
playlist: null,
|
||||||
isLive: false,
|
isLive: false,
|
||||||
addedInChannelId: msg.channel.id
|
addedInChannelId: msg.channel.id,
|
||||||
}, 358, 5.5)
|
}, 358, 5.5),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -65,8 +65,8 @@ export default class {
|
||||||
length: 227,
|
length: 227,
|
||||||
playlist: null,
|
playlist: null,
|
||||||
isLive: false,
|
isLive: false,
|
||||||
addedInChannelId: msg.channel.id
|
addedInChannelId: msg.channel.id,
|
||||||
}, 50, 13)
|
}, 50, 13),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -26,7 +26,7 @@ export interface QueuedSong {
|
||||||
|
|
||||||
export enum STATUS {
|
export enum STATUS {
|
||||||
PLAYING,
|
PLAYING,
|
||||||
PAUSED
|
PAUSED,
|
||||||
}
|
}
|
||||||
|
|
||||||
export default class {
|
export default class {
|
||||||
|
@ -368,7 +368,7 @@ export default class {
|
||||||
'-reconnect_streamed',
|
'-reconnect_streamed',
|
||||||
'1',
|
'1',
|
||||||
'-reconnect_delay_max',
|
'-reconnect_delay_max',
|
||||||
'5'
|
'5',
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (options.seek) {
|
if (options.seek) {
|
||||||
|
|
|
@ -13,10 +13,11 @@ export default class ThirdParty {
|
||||||
|
|
||||||
constructor(@inject(TYPES.Config) config: Config) {
|
constructor(@inject(TYPES.Config) config: Config) {
|
||||||
// Library is transpiled incorrectly
|
// Library is transpiled incorrectly
|
||||||
|
// eslint-disable-next-line
|
||||||
this.youtube = new ((Youtube as any).default)(config.YOUTUBE_API_KEY);
|
this.youtube = new ((Youtube as any).default)(config.YOUTUBE_API_KEY);
|
||||||
this.spotify = new SpotifyWebApi({
|
this.spotify = new SpotifyWebApi({
|
||||||
clientId: config.SPOTIFY_CLIENT_ID,
|
clientId: config.SPOTIFY_CLIENT_ID,
|
||||||
clientSecret: config.SPOTIFY_CLIENT_SECRET
|
clientSecret: config.SPOTIFY_CLIENT_SECRET,
|
||||||
});
|
});
|
||||||
|
|
||||||
void this.refreshSpotifyToken();
|
void this.refreshSpotifyToken();
|
||||||
|
|
|
@ -6,10 +6,10 @@ export const TYPES = {
|
||||||
Command: Symbol('Command'),
|
Command: Symbol('Command'),
|
||||||
ThirdParty: Symbol('ThirdParty'),
|
ThirdParty: Symbol('ThirdParty'),
|
||||||
Managers: {
|
Managers: {
|
||||||
Player: Symbol('PlayerManager')
|
Player: Symbol('PlayerManager'),
|
||||||
},
|
},
|
||||||
Services: {
|
Services: {
|
||||||
GetSongs: Symbol('GetSongs'),
|
GetSongs: Symbol('GetSongs'),
|
||||||
NaturalLanguage: Symbol('NaturalLanguage')
|
NaturalLanguage: Symbol('NaturalLanguage'),
|
||||||
}
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -25,7 +25,7 @@ export const getMemberVoiceChannel = (member?: GuildMember): [VoiceChannel, numb
|
||||||
if (channel && channel.type === 'voice') {
|
if (channel && channel.type === 'voice') {
|
||||||
return [
|
return [
|
||||||
channel,
|
channel,
|
||||||
getSizeWithoutBots(channel)
|
getSizeWithoutBots(channel),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ export const getMostPopularVoiceChannel = (guild: Guild): [VoiceChannel, number]
|
||||||
|
|
||||||
voiceChannels.push({
|
voiceChannels.push({
|
||||||
channel: channel as VoiceChannel,
|
channel: channel as VoiceChannel,
|
||||||
n: size
|
n: size,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,5 +8,5 @@ export const sequelize = new Sequelize({
|
||||||
database: 'muse',
|
database: 'muse',
|
||||||
storage: path.join(DATA_DIR, 'db.sqlite'),
|
storage: path.join(DATA_DIR, 'db.sqlite'),
|
||||||
models: [Cache, Settings, Shortcut],
|
models: [Cache, Settings, Shortcut],
|
||||||
logging: false
|
logging: false,
|
||||||
});
|
});
|
||||||
|
|
217
yarn.lock
217
yarn.lock
|
@ -67,10 +67,10 @@
|
||||||
"@discordjs/node-pre-gyp" "^0.4.0"
|
"@discordjs/node-pre-gyp" "^0.4.0"
|
||||||
node-addon-api "^3.2.1"
|
node-addon-api "^3.2.1"
|
||||||
|
|
||||||
"@eslint/eslintrc@^0.4.2":
|
"@eslint/eslintrc@^0.4.3":
|
||||||
version "0.4.2"
|
version "0.4.3"
|
||||||
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179"
|
resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c"
|
||||||
integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg==
|
integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==
|
||||||
dependencies:
|
dependencies:
|
||||||
ajv "^6.12.4"
|
ajv "^6.12.4"
|
||||||
debug "^4.1.1"
|
debug "^4.1.1"
|
||||||
|
@ -82,6 +82,20 @@
|
||||||
minimatch "^3.0.4"
|
minimatch "^3.0.4"
|
||||||
strip-json-comments "^3.1.1"
|
strip-json-comments "^3.1.1"
|
||||||
|
|
||||||
|
"@humanwhocodes/config-array@^0.5.0":
|
||||||
|
version "0.5.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9"
|
||||||
|
integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==
|
||||||
|
dependencies:
|
||||||
|
"@humanwhocodes/object-schema" "^1.2.0"
|
||||||
|
debug "^4.1.1"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
|
||||||
|
"@humanwhocodes/object-schema@^1.2.0":
|
||||||
|
version "1.2.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf"
|
||||||
|
integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==
|
||||||
|
|
||||||
"@nodelib/fs.scandir@2.1.4":
|
"@nodelib/fs.scandir@2.1.4":
|
||||||
version "2.1.4"
|
version "2.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69"
|
resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69"
|
||||||
|
@ -166,10 +180,10 @@
|
||||||
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a"
|
resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a"
|
||||||
integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==
|
integrity sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==
|
||||||
|
|
||||||
"@types/json-schema@^7.0.3":
|
"@types/json-schema@^7.0.7":
|
||||||
version "7.0.7"
|
version "7.0.9"
|
||||||
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
|
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
|
||||||
integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
|
integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
|
||||||
|
|
||||||
"@types/keyv@*":
|
"@types/keyv@*":
|
||||||
version "3.1.1"
|
version "3.1.1"
|
||||||
|
@ -229,108 +243,73 @@
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
"@typescript-eslint/eslint-plugin@^4.25.0":
|
"@typescript-eslint/eslint-plugin@^4.31.1":
|
||||||
version "4.25.0"
|
version "4.31.1"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.25.0.tgz#d82657b6ab4caa4c3f888ff923175fadc2f31f2a"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.31.1.tgz#e938603a136f01dcabeece069da5fb2e331d4498"
|
||||||
integrity sha512-Qfs3dWkTMKkKwt78xp2O/KZQB8MPS1UQ5D3YW2s6LQWBE1074BE+Rym+b1pXZIX3M3fSvPUDaCvZLKV2ylVYYQ==
|
integrity sha512-UDqhWmd5i0TvPLmbK5xY3UZB0zEGseF+DHPghZ37Sb83Qd3p8ujhvAtkU4OF46Ka5Pm5kWvFIx0cCTBFKo0alA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/experimental-utils" "4.25.0"
|
"@typescript-eslint/experimental-utils" "4.31.1"
|
||||||
"@typescript-eslint/scope-manager" "4.25.0"
|
"@typescript-eslint/scope-manager" "4.31.1"
|
||||||
debug "^4.1.1"
|
debug "^4.3.1"
|
||||||
functional-red-black-tree "^1.0.1"
|
functional-red-black-tree "^1.0.1"
|
||||||
lodash "^4.17.15"
|
regexpp "^3.1.0"
|
||||||
regexpp "^3.0.0"
|
semver "^7.3.5"
|
||||||
semver "^7.3.2"
|
tsutils "^3.21.0"
|
||||||
tsutils "^3.17.1"
|
|
||||||
|
|
||||||
"@typescript-eslint/experimental-utils@4.25.0":
|
"@typescript-eslint/experimental-utils@4.31.1":
|
||||||
version "4.25.0"
|
version "4.31.1"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.25.0.tgz#b2febcfa715d2c1806fd5f0335193a6cd270df54"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.31.1.tgz#0c900f832f270b88e13e51753647b02d08371ce5"
|
||||||
integrity sha512-f0doRE76vq7NEEU0tw+ajv6CrmPelw5wLoaghEHkA2dNLFb3T/zJQqGPQ0OYt5XlZaS13MtnN+GTPCuUVg338w==
|
integrity sha512-NtoPsqmcSsWty0mcL5nTZXMf7Ei0Xr2MT8jWjXMVgRK0/1qeQ2jZzLFUh4QtyJ4+/lPUyMw5cSfeeME+Zrtp9Q==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/json-schema" "^7.0.3"
|
"@types/json-schema" "^7.0.7"
|
||||||
"@typescript-eslint/scope-manager" "4.25.0"
|
"@typescript-eslint/scope-manager" "4.31.1"
|
||||||
"@typescript-eslint/types" "4.25.0"
|
"@typescript-eslint/types" "4.31.1"
|
||||||
"@typescript-eslint/typescript-estree" "4.25.0"
|
"@typescript-eslint/typescript-estree" "4.31.1"
|
||||||
eslint-scope "^5.0.0"
|
eslint-scope "^5.1.1"
|
||||||
eslint-utils "^2.0.0"
|
eslint-utils "^3.0.0"
|
||||||
|
|
||||||
"@typescript-eslint/parser@^4.26.1":
|
"@typescript-eslint/parser@^4.31.1":
|
||||||
version "4.26.1"
|
version "4.31.1"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.26.1.tgz#cecfdd5eb7a5c13aabce1c1cfd7fbafb5a0f1e8e"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.31.1.tgz#8f9a2672033e6f6d33b1c0260eebdc0ddf539064"
|
||||||
integrity sha512-q7F3zSo/nU6YJpPJvQveVlIIzx9/wu75lr6oDbDzoeIRWxpoc/HQ43G4rmMoCc5my/3uSj2VEpg/D83LYZF5HQ==
|
integrity sha512-dnVZDB6FhpIby6yVbHkwTKkn2ypjVIfAR9nh+kYsA/ZL0JlTsd22BiDjouotisY3Irmd3OW1qlk9EI5R8GrvRQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/scope-manager" "4.26.1"
|
"@typescript-eslint/scope-manager" "4.31.1"
|
||||||
"@typescript-eslint/types" "4.26.1"
|
"@typescript-eslint/types" "4.31.1"
|
||||||
"@typescript-eslint/typescript-estree" "4.26.1"
|
"@typescript-eslint/typescript-estree" "4.31.1"
|
||||||
debug "^4.3.1"
|
debug "^4.3.1"
|
||||||
|
|
||||||
"@typescript-eslint/scope-manager@4.25.0":
|
"@typescript-eslint/scope-manager@4.31.1":
|
||||||
version "4.25.0"
|
version "4.31.1"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.25.0.tgz#9d86a5bcc46ef40acd03d85ad4e908e5aab8d4ca"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.31.1.tgz#0c21e8501f608d6a25c842fcf59541ef4f1ab561"
|
||||||
integrity sha512-2NElKxMb/0rya+NJG1U71BuNnp1TBd1JgzYsldsdA83h/20Tvnf/HrwhiSlNmuq6Vqa0EzidsvkTArwoq+tH6w==
|
integrity sha512-N1Uhn6SqNtU2XpFSkD4oA+F0PfKdWHyr4bTX0xTj8NRx1314gBDRL1LUuZd5+L3oP+wo6hCbZpaa1in6SwMcVQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/types" "4.25.0"
|
"@typescript-eslint/types" "4.31.1"
|
||||||
"@typescript-eslint/visitor-keys" "4.25.0"
|
"@typescript-eslint/visitor-keys" "4.31.1"
|
||||||
|
|
||||||
"@typescript-eslint/scope-manager@4.26.1":
|
"@typescript-eslint/types@4.31.1":
|
||||||
version "4.26.1"
|
version "4.31.1"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.26.1.tgz#075a74a15ff33ee3a7ed33e5fce16ee86689f662"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.31.1.tgz#5f255b695627a13401d2fdba5f7138bc79450d66"
|
||||||
integrity sha512-TW1X2p62FQ8Rlne+WEShyd7ac2LA6o27S9i131W4NwDSfyeVlQWhw8ylldNNS8JG6oJB9Ha9Xyc+IUcqipvheQ==
|
integrity sha512-kixltt51ZJGKENNW88IY5MYqTBA8FR0Md8QdGbJD2pKZ+D5IvxjTYDNtJPDxFBiXmka2aJsITdB1BtO1fsgmsQ==
|
||||||
|
|
||||||
|
"@typescript-eslint/typescript-estree@4.31.1":
|
||||||
|
version "4.31.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.31.1.tgz#4a04d5232cf1031232b7124a9c0310b577a62d17"
|
||||||
|
integrity sha512-EGHkbsUvjFrvRnusk6yFGqrqMBTue5E5ROnS5puj3laGQPasVUgwhrxfcgkdHNFECHAewpvELE1Gjv0XO3mdWg==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/types" "4.26.1"
|
"@typescript-eslint/types" "4.31.1"
|
||||||
"@typescript-eslint/visitor-keys" "4.26.1"
|
"@typescript-eslint/visitor-keys" "4.31.1"
|
||||||
|
|
||||||
"@typescript-eslint/types@4.25.0":
|
|
||||||
version "4.25.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.25.0.tgz#0e444a5c5e3c22d7ffa5e16e0e60510b3de5af87"
|
|
||||||
integrity sha512-+CNINNvl00OkW6wEsi32wU5MhHti2J25TJsJJqgQmJu3B3dYDBcmOxcE5w9cgoM13TrdE/5ND2HoEnBohasxRQ==
|
|
||||||
|
|
||||||
"@typescript-eslint/types@4.26.1":
|
|
||||||
version "4.26.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.26.1.tgz#9e7c523f73c34b04a765e4167ca5650436ef1d38"
|
|
||||||
integrity sha512-STyMPxR3cS+LaNvS8yK15rb8Y0iL0tFXq0uyl6gY45glyI7w0CsyqyEXl/Fa0JlQy+pVANeK3sbwPneCbWE7yg==
|
|
||||||
|
|
||||||
"@typescript-eslint/typescript-estree@4.25.0":
|
|
||||||
version "4.25.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.25.0.tgz#942e4e25888736bff5b360d9b0b61e013d0cfa25"
|
|
||||||
integrity sha512-1B8U07TGNAFMxZbSpF6jqiDs1cVGO0izVkf18Q/SPcUAc9LhHxzvSowXDTvkHMWUVuPpagupaW63gB6ahTXVlg==
|
|
||||||
dependencies:
|
|
||||||
"@typescript-eslint/types" "4.25.0"
|
|
||||||
"@typescript-eslint/visitor-keys" "4.25.0"
|
|
||||||
debug "^4.1.1"
|
|
||||||
globby "^11.0.1"
|
|
||||||
is-glob "^4.0.1"
|
|
||||||
semver "^7.3.2"
|
|
||||||
tsutils "^3.17.1"
|
|
||||||
|
|
||||||
"@typescript-eslint/typescript-estree@4.26.1":
|
|
||||||
version "4.26.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.26.1.tgz#b2ce2e789233d62283fae2c16baabd4f1dbc9633"
|
|
||||||
integrity sha512-l3ZXob+h0NQzz80lBGaykdScYaiEbFqznEs99uwzm8fPHhDjwaBFfQkjUC/slw6Sm7npFL8qrGEAMxcfBsBJUg==
|
|
||||||
dependencies:
|
|
||||||
"@typescript-eslint/types" "4.26.1"
|
|
||||||
"@typescript-eslint/visitor-keys" "4.26.1"
|
|
||||||
debug "^4.3.1"
|
debug "^4.3.1"
|
||||||
globby "^11.0.3"
|
globby "^11.0.3"
|
||||||
is-glob "^4.0.1"
|
is-glob "^4.0.1"
|
||||||
semver "^7.3.5"
|
semver "^7.3.5"
|
||||||
tsutils "^3.21.0"
|
tsutils "^3.21.0"
|
||||||
|
|
||||||
"@typescript-eslint/visitor-keys@4.25.0":
|
"@typescript-eslint/visitor-keys@4.31.1":
|
||||||
version "4.25.0"
|
version "4.31.1"
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.25.0.tgz#863e7ed23da4287c5b469b13223255d0fde6aaa7"
|
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.31.1.tgz#f2e7a14c7f20c4ae07d7fc3c5878c4441a1da9cc"
|
||||||
integrity sha512-AmkqV9dDJVKP/TcZrbf6s6i1zYXt5Hl8qOLrRDTFfRNae4+LB8A4N3i+FLZPW85zIxRy39BgeWOfMS3HoH5ngg==
|
integrity sha512-PCncP8hEqKw6SOJY+3St4LVtoZpPPn+Zlpm7KW5xnviMhdqcsBty4Lsg4J/VECpJjw1CkROaZhH4B8M1OfnXTQ==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@typescript-eslint/types" "4.25.0"
|
"@typescript-eslint/types" "4.31.1"
|
||||||
eslint-visitor-keys "^2.0.0"
|
|
||||||
|
|
||||||
"@typescript-eslint/visitor-keys@4.26.1":
|
|
||||||
version "4.26.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.26.1.tgz#0d55ea735cb0d8903b198017d6d4f518fdaac546"
|
|
||||||
integrity sha512-IGouNSSd+6x/fHtYRyLOM6/C+QxMDzWlDtN41ea+flWuSF9g02iqcIlX8wM53JkfljoIjP0U+yp7SiTS1onEkw==
|
|
||||||
dependencies:
|
|
||||||
"@typescript-eslint/types" "4.26.1"
|
|
||||||
eslint-visitor-keys "^2.0.0"
|
eslint-visitor-keys "^2.0.0"
|
||||||
|
|
||||||
abbrev@1:
|
abbrev@1:
|
||||||
|
@ -1023,19 +1002,21 @@ escape-string-regexp@^4.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
|
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
|
||||||
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
|
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
|
||||||
|
|
||||||
eslint-config-xo-typescript@^0.36.0:
|
eslint-config-xo-typescript@^0.44.0:
|
||||||
version "0.36.0"
|
version "0.44.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-config-xo-typescript/-/eslint-config-xo-typescript-0.36.0.tgz#4161d6342198c176f7264e76fc5fab20dfcc021e"
|
resolved "https://registry.yarnpkg.com/eslint-config-xo-typescript/-/eslint-config-xo-typescript-0.44.0.tgz#972285f401ea6b26c5802e177431de8b15851b0f"
|
||||||
integrity sha512-wze9CboL9XHj4KRfqFedXjsJ9yM7iiJJnnVgiXJWdwzPXewFfdIUWHQVRoEYjGZ94cA8kVBkKnTCp8pi3EU3HQ==
|
integrity sha512-/mRj2KHHwnl3ZyM8vn68NSfRoEunkSYagWERGmNnU5UOLo4AY9jjBNZW+/sDOaPYuc5xzYmLxYspDCVCXKLGNQ==
|
||||||
|
dependencies:
|
||||||
|
typescript ">=4.3"
|
||||||
|
|
||||||
eslint-config-xo@^0.35.0:
|
eslint-config-xo@^0.38.0:
|
||||||
version "0.35.0"
|
version "0.38.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-config-xo/-/eslint-config-xo-0.35.0.tgz#8b5afca244c44129c32386c28602f973ad5cb762"
|
resolved "https://registry.yarnpkg.com/eslint-config-xo/-/eslint-config-xo-0.38.0.tgz#50cbe676a90d5582e1bbf1de750286e7cf09378e"
|
||||||
integrity sha512-+WyZTLWUJlvExFrBU/Ldw8AB/S0d3x+26JQdBWbcqig2ZaWh0zinYcHok+ET4IoPaEcRRf3FE9kjItNVjBwnAg==
|
integrity sha512-G2jL+VyfkcZW8GoTmqLsExvrWssBedSoaQQ11vyhflDeT3csMdBVp0On+AVijrRuvgmkWeDwwUL5Rj0qDRHK6g==
|
||||||
dependencies:
|
dependencies:
|
||||||
confusing-browser-globals "1.0.10"
|
confusing-browser-globals "1.0.10"
|
||||||
|
|
||||||
eslint-scope@^5.0.0, eslint-scope@^5.1.1:
|
eslint-scope@^5.1.1:
|
||||||
version "5.1.1"
|
version "5.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
|
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
|
||||||
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
|
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
|
||||||
|
@ -1043,13 +1024,20 @@ eslint-scope@^5.0.0, eslint-scope@^5.1.1:
|
||||||
esrecurse "^4.3.0"
|
esrecurse "^4.3.0"
|
||||||
estraverse "^4.1.1"
|
estraverse "^4.1.1"
|
||||||
|
|
||||||
eslint-utils@^2.0.0, eslint-utils@^2.1.0:
|
eslint-utils@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
|
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
|
||||||
integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
|
integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint-visitor-keys "^1.1.0"
|
eslint-visitor-keys "^1.1.0"
|
||||||
|
|
||||||
|
eslint-utils@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
|
||||||
|
integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
|
||||||
|
dependencies:
|
||||||
|
eslint-visitor-keys "^2.0.0"
|
||||||
|
|
||||||
eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
|
eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
|
||||||
version "1.3.0"
|
version "1.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
|
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
|
||||||
|
@ -1060,13 +1048,14 @@ eslint-visitor-keys@^2.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
|
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
|
||||||
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
|
integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
|
||||||
|
|
||||||
eslint@^7.28.0:
|
eslint@^7.32.0:
|
||||||
version "7.28.0"
|
version "7.32.0"
|
||||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.28.0.tgz#435aa17a0b82c13bb2be9d51408b617e49c1e820"
|
resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d"
|
||||||
integrity sha512-UMfH0VSjP0G4p3EWirscJEQ/cHqnT/iuH6oNZOB94nBjWbMnhGEPxsZm1eyIW0C/9jLI0Fow4W5DXLjEI7mn1g==
|
integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==
|
||||||
dependencies:
|
dependencies:
|
||||||
"@babel/code-frame" "7.12.11"
|
"@babel/code-frame" "7.12.11"
|
||||||
"@eslint/eslintrc" "^0.4.2"
|
"@eslint/eslintrc" "^0.4.3"
|
||||||
|
"@humanwhocodes/config-array" "^0.5.0"
|
||||||
ajv "^6.10.0"
|
ajv "^6.10.0"
|
||||||
chalk "^4.0.0"
|
chalk "^4.0.0"
|
||||||
cross-spawn "^7.0.2"
|
cross-spawn "^7.0.2"
|
||||||
|
@ -1440,7 +1429,7 @@ globals@^13.6.0, globals@^13.9.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
type-fest "^0.20.2"
|
type-fest "^0.20.2"
|
||||||
|
|
||||||
globby@^11.0.1, globby@^11.0.3:
|
globby@^11.0.3:
|
||||||
version "11.0.3"
|
version "11.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"
|
resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"
|
||||||
integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==
|
integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==
|
||||||
|
@ -2549,7 +2538,7 @@ reflect-metadata@^0.1.13:
|
||||||
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"
|
resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08"
|
||||||
integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
|
integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
|
||||||
|
|
||||||
regexpp@^3.0.0, regexpp@^3.1.0:
|
regexpp@^3.1.0:
|
||||||
version "3.1.0"
|
version "3.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
|
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
|
||||||
integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
|
integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
|
||||||
|
@ -3081,7 +3070,7 @@ tslib@^1.8.1:
|
||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||||
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
|
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
|
||||||
|
|
||||||
tsutils@^3.17.1, tsutils@^3.21.0:
|
tsutils@^3.21.0:
|
||||||
version "3.21.0"
|
version "3.21.0"
|
||||||
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
|
resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
|
||||||
integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
|
integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
|
||||||
|
@ -3129,10 +3118,10 @@ typedarray-to-buffer@^3.1.5:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-typedarray "^1.0.0"
|
is-typedarray "^1.0.0"
|
||||||
|
|
||||||
typescript@^4.3.4:
|
typescript@>=4.3, typescript@^4.4.3:
|
||||||
version "4.3.4"
|
version "4.4.3"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324"
|
||||||
integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew==
|
integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==
|
||||||
|
|
||||||
undefsafe@^2.0.3:
|
undefsafe@^2.0.3:
|
||||||
version "2.0.3"
|
version "2.0.3"
|
||||||
|
|
Loading…
Reference in a new issue