Bump dependencies

This commit is contained in:
Max Isom 2020-03-25 17:59:09 -05:00
parent dc70a37e96
commit 4e1a156f9b
7 changed files with 121 additions and 90 deletions

View file

@ -30,18 +30,19 @@
"@types/fluent-ffmpeg": "^2.1.14",
"@types/fs-capacitor": "^2.0.0",
"@types/node": "^13.9.1",
"@types/node-emoji": "^1.8.1",
"@types/spotify-web-api-node": "^4.0.1",
"@types/validator": "^12.0.1",
"@types/ws": "^7.2.2",
"@typescript-eslint/eslint-plugin": "^2.24.0",
"@typescript-eslint/parser": "^2.24.0",
"@types/ws": "^7.2.3",
"@typescript-eslint/eslint-plugin": "^2.25.0",
"@typescript-eslint/parser": "^2.25.0",
"eslint": "^6.8.0",
"eslint-config-xo": "^0.29.1",
"eslint-config-xo-typescript": "^0.26.0",
"eslint-config-xo-typescript": "^0.27.0",
"husky": "^4.2.3",
"nodemon": "^2.0.2",
"reflect-metadata": "^0.1.13",
"ts-node": "^8.6.2",
"ts-node": "^8.8.1",
"typescript": "^3.8.3"
},
"eslintConfig": {
@ -56,7 +57,8 @@
"rules": {
"new-cap": "off",
"@typescript-eslint/no-unused-vars": "off",
"@typescript-eslint/no-unused-vars-experimental": "error"
"@typescript-eslint/no-unused-vars-experimental": "error",
"@typescript-eslint/prefer-readonly-parameter-types": "off"
}
},
"husky": {
@ -74,7 +76,7 @@
"fluent-ffmpeg": "^2.1.2",
"fs-capacitor": "^6.1.0",
"get-youtube-id": "^1.0.1",
"got": "^10.6.0",
"got": "^10.7.0",
"hasha": "^5.2.0",
"inversify": "^5.0.1",
"iso8601-duration": "^1.2.0",
@ -87,8 +89,8 @@
"spotify-web-api-node": "^4.0.0",
"sqlite3": "^4.1.1",
"unique-random-array": "^2.0.0",
"youtube.ts": "^0.1.1",
"ytdl-core": "^2.0.0",
"ytsr": "^0.1.11"
"youtube.ts": "^0.1.3",
"ytdl-core": "^2.0.1",
"ytsr": "^0.1.12"
}
}

View file

@ -91,7 +91,7 @@ export default class {
await handler.execute(msg, args);
} catch (error) {
debug(error);
await msg.channel.send(errorMsg(error.message.toLowerCase()));
await msg.channel.send(errorMsg((error as Error).message.toLowerCase()));
}
});

View file

@ -1,4 +1,4 @@
import {Guild, MessageReaction, TextChannel} from 'discord.js';
import {Guild, MessageReaction, TextChannel, User, Message} from 'discord.js';
import emoji from 'node-emoji';
import {Settings} from '../models';
@ -45,7 +45,7 @@ export default async (guild: Guild): Promise<void> => {
await msg.react(channel.emoji);
}
const reactions = await msg.awaitReactions((reaction, user) => user.id !== msg.author.id && emojiChannels.map(e => e.emoji).includes(reaction.emoji.name), {max: 1});
const reactions = await msg.awaitReactions((reaction: MessageReaction, user: User) => user.id !== msg.author.id && emojiChannels.map(e => e.emoji).includes(reaction.emoji.name), {max: 1});
const choice = reactions.first() as MessageReaction;
@ -57,7 +57,7 @@ export default async (guild: Guild): Promise<void> => {
await owner.send(secondStep);
const prefixResponses = await msg.channel.awaitMessages(r => r.content.length === 1, {max: 1});
const prefixResponses = await msg.channel.awaitMessages((r: Message) => r.content.length === 1, {max: 1});
const prefixCharacter = prefixResponses.first()!.content;

22
src/packages.d.ts vendored
View file

@ -1,3 +1,19 @@
declare module 'node-emoji';
declare module 'ytsr';
declare module 'array-shuffle';
declare module 'ytsr' {
interface VideoResult {
title: string;
duration: string;
link: string;
live: boolean;
type: string;
}
interface SearchResult {
items: VideoResult[];
}
export default function (search: string, options: object): Promise<SearchResult>;
}
declare module 'array-shuffle' {
export default function <T>(arr: T[]): T[];
}

View file

@ -56,8 +56,16 @@ export default class {
const playlist = await this.youtube.playlists.get(listId);
const {items} = await this.youtube.playlists.items(listId, {maxResults: '50'});
interface videoResult {
id: string;
contentDetails: {
videoId: string;
duration: string;
};
}
// Unfortunately, package doesn't provide a method for this
const res: any = await got('https://www.googleapis.com/youtube/v3/videos', {searchParams: {
const {items: videos}: {items: videoResult[]} = await got('https://www.googleapis.com/youtube/v3/videos', {searchParams: {
part: 'contentDetails',
id: items.map(item => item.contentDetails.videoId).join(','),
key: this.youtubeKey
@ -66,7 +74,7 @@ export default class {
const queuedPlaylist = {title: playlist.snippet.title, source: playlist.id};
return items.map(video => {
const length = toSeconds(parse(res.items.find((i: any) => i.id === video.contentDetails.videoId).contentDetails.duration));
const length = toSeconds(parse(videos.find((i: { id: string }) => i.id === video.contentDetails.videoId)!.contentDetails.duration));
return {
title: video.snippet.title,
@ -178,7 +186,7 @@ export default class {
private async spotifyToYouTube(track: SpotifyApi.TrackObjectSimplified, playlist: QueuedPlaylist | null): Promise<QueuedSong | null> {
try {
const {items} = await ytsr(`"${track.name}" "${track.artists[0].name}" offical`, {limit: 5});
const video = items.find((item: { type: string }) => item.type === 'video');
const video = items.find(item => item.type === 'video');
if (!video) {
throw new Error('No video found for query.');

View file

@ -238,7 +238,9 @@ export default class {
}
shuffle(): void {
this.queue = [...this.queue.slice(0, this.queuePosition + 1), ...shuffle(this.queue.slice(this.queuePosition + 1))];
const shuffledSongs = shuffle(this.queue.slice(this.queuePosition + 1));
this.queue = [...this.queue.slice(0, this.queuePosition + 1), ...shuffledSongs];
}
clear(): void {
@ -306,7 +308,7 @@ export default class {
const nextBestFormat = (formats: ytdl.videoFormat[]): ytdl.videoFormat | undefined => {
if (formats[0].live) {
formats = formats.sort((a, b) => (b as any).audioBitrate - (a as any).audioBitrate); // Bad typings
formats = formats.sort((a, b) => (b as unknown as {audioBitrate: number}).audioBitrate - (a as unknown as {audioBitrate: number}).audioBitrate); // Bad typings
return formats.find(format => [128, 127, 120, 96, 95, 94, 93].includes(parseInt(format.itag as unknown as string, 10))); // Bad typings
}

139
yarn.lock
View file

@ -111,7 +111,12 @@
dependencies:
"@types/node" "*"
"@types/node@*", "@types/node@^13.5.3":
"@types/node-emoji@^1.8.1":
version "1.8.1"
resolved "https://registry.yarnpkg.com/@types/node-emoji/-/node-emoji-1.8.1.tgz#689cb74fdf6e84309bcafce93a135dfecd01de3f"
integrity sha512-0fRfA90FWm6KJfw6P9QGyo0HDTCmthZ7cWaBQndITlaWLTZ6njRyKwrwpzpg+n6kBXBIGKeUHEQuBx7bphGJkA==
"@types/node@*":
version "13.9.0"
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.0.tgz#5b6ee7a77faacddd7de719017d0bc12f52f81589"
integrity sha512-0ARSQootUG1RljH2HncpsY2TJBfGQIKOOi7kxzUY6z54ePu/ZD+wJA8zI2Q6v8rol2qpG/rvqsReco8zNMPvhQ==
@ -150,47 +155,47 @@
resolved "https://registry.yarnpkg.com/@types/validator/-/validator-12.0.1.tgz#73dbc7f5f730ff7131754bca682824eb3c260b79"
integrity sha512-l57fIANZLMe8DArz+SDb+7ATXnDm15P7u2wHBw5mb0aSMd+UuvmvhouBF2hdLgQPDMJ39sh9g2MJO4GkZ0VAdQ==
"@types/ws@^7.2.2":
version "7.2.2"
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.2.tgz#1bd2038bc80aea60f8a20b2dcf08602a72e65063"
integrity sha512-oqnI3DbGCVI9zJ/WHdFo3CUE8jQ8CVQDUIKaDtlTcNeT4zs6UCg9Gvk5QrFx2QPkRszpM6yc8o0p4aGjCsTi+w==
"@types/ws@^7.2.3":
version "7.2.3"
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.2.3.tgz#a3add56077ac6cc9396b9502c7252a1635922032"
integrity sha512-VT/GK7nvDA7lfHy40G3LKM+ICqmdIsBLBHGXcWD97MtqQEjNMX+7Gudo8YGpaSlYdTX7IFThhCE8Jx09HegymQ==
dependencies:
"@types/node" "*"
"@typescript-eslint/eslint-plugin@^2.24.0":
version "2.24.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.24.0.tgz#a86cf618c965a462cddf3601f594544b134d6d68"
integrity sha512-wJRBeaMeT7RLQ27UQkDFOu25MqFOBus8PtOa9KaT5ZuxC1kAsd7JEHqWt4YXuY9eancX0GK9C68i5OROnlIzBA==
"@typescript-eslint/eslint-plugin@^2.25.0":
version "2.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.25.0.tgz#0b60917332f20dcff54d0eb9be2a9e9f4c9fbd02"
integrity sha512-W2YyMtjmlrOjtXc+FtTelVs9OhuR6OlYc4XKIslJ8PUJOqgYYAPRJhAqkYRQo3G4sjvG8jSodsNycEn4W2gHUw==
dependencies:
"@typescript-eslint/experimental-utils" "2.24.0"
eslint-utils "^1.4.3"
"@typescript-eslint/experimental-utils" "2.25.0"
functional-red-black-tree "^1.0.1"
regexpp "^3.0.0"
tsutils "^3.17.1"
"@typescript-eslint/experimental-utils@2.24.0":
version "2.24.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.24.0.tgz#a5cb2ed89fedf8b59638dc83484eb0c8c35e1143"
integrity sha512-DXrwuXTdVh3ycNCMYmWhUzn/gfqu9N0VzNnahjiDJvcyhfBy4gb59ncVZVxdp5XzBC77dCncu0daQgOkbvPwBw==
"@typescript-eslint/experimental-utils@2.25.0":
version "2.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.25.0.tgz#13691c4fe368bd377b1e5b1e4ad660b220bf7714"
integrity sha512-0IZ4ZR5QkFYbaJk+8eJ2kYeA+1tzOE1sBjbwwtSV85oNWYUBep+EyhlZ7DLUCyhMUGuJpcCCFL0fDtYAP1zMZw==
dependencies:
"@types/json-schema" "^7.0.3"
"@typescript-eslint/typescript-estree" "2.24.0"
"@typescript-eslint/typescript-estree" "2.25.0"
eslint-scope "^5.0.0"
eslint-utils "^2.0.0"
"@typescript-eslint/parser@^2.24.0":
version "2.24.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.24.0.tgz#2cf0eae6e6dd44d162486ad949c126b887f11eb8"
integrity sha512-H2Y7uacwSSg8IbVxdYExSI3T7uM1DzmOn2COGtCahCC3g8YtM1xYAPi2MAHyfPs61VKxP/J/UiSctcRgw4G8aw==
"@typescript-eslint/parser@^2.25.0":
version "2.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.25.0.tgz#abfb3d999084824d9a756d9b9c0f36fba03adb76"
integrity sha512-mccBLaBSpNVgp191CP5W+8U1crTyXsRziWliCqzj02kpxdjKMvFHGJbK33NroquH3zB/gZ8H511HEsJBa2fNEg==
dependencies:
"@types/eslint-visitor-keys" "^1.0.0"
"@typescript-eslint/experimental-utils" "2.24.0"
"@typescript-eslint/typescript-estree" "2.24.0"
"@typescript-eslint/experimental-utils" "2.25.0"
"@typescript-eslint/typescript-estree" "2.25.0"
eslint-visitor-keys "^1.1.0"
"@typescript-eslint/typescript-estree@2.24.0":
version "2.24.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.24.0.tgz#38bbc8bb479790d2f324797ffbcdb346d897c62a"
integrity sha512-RJ0yMe5owMSix55qX7Mi9V6z2FDuuDpN6eR5fzRJrp+8in9UF41IGNQHbg5aMK4/PjVaEQksLvz0IA8n+Mr/FA==
"@typescript-eslint/typescript-estree@2.25.0":
version "2.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.25.0.tgz#b790497556734b7476fa7dd3fa539955a5c79e2c"
integrity sha512-VUksmx5lDxSi6GfmwSK7SSoIKSw9anukWWNitQPqt58LuYrKalzsgeuignbqnB+rK/xxGlSsCy8lYnwFfB6YJg==
dependencies:
debug "^4.1.1"
eslint-visitor-keys "^1.1.0"
@ -835,10 +840,10 @@ escape-string-regexp@^1.0.5:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
eslint-config-xo-typescript@^0.26.0:
version "0.26.0"
resolved "https://registry.yarnpkg.com/eslint-config-xo-typescript/-/eslint-config-xo-typescript-0.26.0.tgz#c9e337d07f2b571d6fabe00b8fd31f117c9d2943"
integrity sha512-0bBfXLQX5F7JgJx5HIrSx3bGZk2D8W0uhYXB0jv6L0ztmWl4yqfCn6J4zgjUqMCsahHIjyaafBWrnc6eVaETWg==
eslint-config-xo-typescript@^0.27.0:
version "0.27.0"
resolved "https://registry.yarnpkg.com/eslint-config-xo-typescript/-/eslint-config-xo-typescript-0.27.0.tgz#9b9febe1f673af9ba936b85f5e5b8669f2505f67"
integrity sha512-aBRN8Nb6sc5oFIIuJoqr9uGCPGkVAVU2sRKN/RQ3iDt0AdrI/jgbgRQXpsAf3V8oK2013satUokRbHG6e7mrkQ==
eslint-config-xo@^0.29.1:
version "0.29.1"
@ -862,6 +867,13 @@ eslint-utils@^1.4.3:
dependencies:
eslint-visitor-keys "^1.1.0"
eslint-utils@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd"
integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA==
dependencies:
eslint-visitor-keys "^1.1.0"
eslint-visitor-keys@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2"
@ -1217,10 +1229,10 @@ globals@^12.1.0:
dependencies:
type-fest "^0.8.1"
got@^10.6.0:
version "10.6.0"
resolved "https://registry.yarnpkg.com/got/-/got-10.6.0.tgz#ac3876261a4d8e5fc4f81186f79955ce7b0501dc"
integrity sha512-3LIdJNTdCFbbJc+h/EH0V5lpNpbJ6Bfwykk21lcQvQsEcrzdi/ltCyQehFHLzJ/ka0UMH4Slg0hkYvAZN9qUDg==
got@^10.7.0:
version "10.7.0"
resolved "https://registry.yarnpkg.com/got/-/got-10.7.0.tgz#62889dbcd6cca32cd6a154cc2d0c6895121d091f"
integrity sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==
dependencies:
"@sindresorhus/is" "^2.0.0"
"@szmarczak/http-timer" "^4.0.0"
@ -1737,7 +1749,7 @@ mimic-response@^2.0.0, mimic-response@^2.1.0:
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43"
integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==
miniget@^1.6.0, miniget@^1.6.1:
miniget@^1.6.0, miniget@^1.6.1, miniget@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/miniget/-/miniget-1.7.0.tgz#a29eb79ebff479e9efafd271616981c603987875"
integrity sha512-yrgaDSMRzrfYTkudB4Y6xK8pCb7oAH2bvfv6iPY2m6CedZfs9yK4b/ofh0Vzv08hCYXH/HHkoS8an6fkWtOAQA==
@ -2158,7 +2170,7 @@ prepend-http@^1.0.1:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
prism-media@^1.0.1, prism-media@^1.2.0:
prism-media@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/prism-media/-/prism-media-1.2.1.tgz#168f323712bcaacb1d70ae613bf9d9dc44cf43d4"
integrity sha512-R3EbKwJiYlTvGwcG1DpUt+06DsxOGS5W4AMEHT7oVOjG93MjpdhGX1whHyjnqknylLMupKAsKMEXcTNRbPe6Vw==
@ -2736,10 +2748,10 @@ tough-cookie@~2.5.0:
psl "^1.1.28"
punycode "^2.1.1"
ts-node@^8.6.2:
version "8.6.2"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.6.2.tgz#7419a01391a818fbafa6f826a33c1a13e9464e35"
integrity sha512-4mZEbofxGqLL2RImpe3zMJukvEvcO1XP8bj8ozBPySdCUXEcU5cIRwR0aM3R+VoZq7iXc8N86NC0FspGRqP4gg==
ts-node@^8.8.1:
version "8.8.1"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.8.1.tgz#7c4d3e9ed33aa703b64b28d7f9d194768be5064d"
integrity sha512-10DE9ONho06QORKAaCBpPiFCdW+tZJuY/84tyypGtl6r+/C7Asq0dhqbRZURuUlLQtZxxDvT8eoj8cGW0ha6Bg==
dependencies:
arg "^4.1.0"
diff "^4.0.1"
@ -2984,32 +2996,13 @@ yn@3.1.1:
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
youtube.ts@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/youtube.ts/-/youtube.ts-0.1.1.tgz#be5473f58bbc869141039c2cc09038c1b0279bf0"
integrity sha512-zzOiI1WAENysG/XOx6p9ATD+nvJYkSM6DG7H41NEzEmx2yLvCyfRtBJAvJ+xPGYJE8rx7QMxg8C/ga4WXCHwag==
youtube.ts@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/youtube.ts/-/youtube.ts-0.1.3.tgz#b34380d867e6c76cac700ff59b961e21f634c7f5"
integrity sha512-7M1KWnE2we4PrgYBuqwMzFOwoO+dDxcA7DgURmZLiM4duolSWvfYV/e8aIRrnWrm7+u6+098T/PVdXe5mVAnlQ==
dependencies:
axios "^0.19.0"
ytdl-core-discord "^1.1.0"
ytdl-core-discord@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/ytdl-core-discord/-/ytdl-core-discord-1.1.0.tgz#1276ef3895b773a3eafa4fe323495b41b715b9e1"
integrity sha512-uiaZWa9UG+he1F9p7Si9H6Tieyxd9dEhLi4958mHuebudQSEEPaaJHUEbFikcpB++5ogzynVOcvdeC+LFJGgEw==
dependencies:
"@types/node" "^13.5.3"
prism-media "^1.0.1"
ytdl-core "^1.0.3"
ytdl-core@^1.0.3:
version "1.0.9"
resolved "https://registry.yarnpkg.com/ytdl-core/-/ytdl-core-1.0.9.tgz#938d5bf5f2baf901b04ffe41d4444fba72ba283a"
integrity sha512-HhFeLfjXU34h0FNHmSkSpKygdaYijSt8VNsC770VYBRFb+dyUKcm11cIKxu2MUSwT9znISZ0k1wFdaV/N5VW+Q==
dependencies:
html-entities "^1.1.3"
m3u8stream "^0.6.3"
miniget "^1.6.0"
sax "^1.1.3"
ytdl-core "^2.0.0"
ytdl-core@^2.0.0:
version "2.0.0"
@ -3021,9 +3014,19 @@ ytdl-core@^2.0.0:
miniget "^1.6.0"
sax "^1.1.3"
ytsr@^0.1.11:
version "0.1.11"
resolved "https://registry.yarnpkg.com/ytsr/-/ytsr-0.1.11.tgz#223041db1f610b9c4453e4be63764a775e0c74ba"
integrity sha512-f7RILud27ufqsw3+Zi0J5itQ7qOt7BzN2EhqQARFhZq9HdxrlSfwvymiO/wvzFALCR2bgyxfz/cJhWyjUlokCA==
ytdl-core@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/ytdl-core/-/ytdl-core-2.0.1.tgz#10987476aea27fc87b2053aa59479f5608a6f33f"
integrity sha512-PZBcVzQpkBxi9OQh9I4QIrYNmkbM/zh4QJQuxE8I6RojLUVYkkps5iLYquE3H+pwmBXtEXQMDJfVRajgdiz+iA==
dependencies:
html-entities "^1.1.3"
m3u8stream "^0.6.3"
miniget "^1.7.0"
sax "^1.1.3"
ytsr@^0.1.12:
version "0.1.12"
resolved "https://registry.yarnpkg.com/ytsr/-/ytsr-0.1.12.tgz#a103e466bbefd166bec636f1b7cf874ba1cfe345"
integrity sha512-j+VUakSps8qTF6JBXUJuP7WXDxTxID7e3W7AdslZvMACm9id69e2XFS4iCkMr8bsa77B11JKsnyvnW6CQShk6g==
dependencies:
html-entities "^1.1.3"