From eccceee52908535b62153599a0af41d5da87a5c3 Mon Sep 17 00:00:00 2001 From: Tj Date: Mon, 24 Aug 2020 22:42:56 +1000 Subject: [PATCH] Added 2 new Minecraft servers - Added MunchyMc player statistics and gamemode leaderboards. - Added Minecraft Central player statistics and gamemode leaderboards. - Fixed timolia statsistics. - Added BlocksMc gamemode leaderboards. - Remove Mineman statistics as their website is no longer operational. --- .gitignore | 1 - README.md | 13 + key.json.sample | 3 - lib/util.js | 934 +++++++++++++++++++++++++++++++++++++++------- package-lock.json | 658 ++++++++++++++++---------------- package.json | 39 +- test/test.js | 4 +- 7 files changed, 1164 insertions(+), 488 deletions(-) delete mode 100644 key.json.sample diff --git a/.gitignore b/.gitignore index e416f34..803165e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ node_modules -keys.json .eslintrc.json diff --git a/README.md b/README.md index 38e562d..85d027d 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ ## Supported Minecraft servers +### Total: 14 + #### Hypixel - https://hypixel.net/ * Player information and game statistics * Watchdog information @@ -29,6 +31,7 @@ #### BlocksMC - https://blocksmc.com/ * Player information and game statistics +* Game leaderboards #### Funcraft - https://www.funcraft.net/ * Player information and game statistics @@ -54,3 +57,13 @@ #### Universocraft - https://universocraft.com/ * Player information and game statistics + +#### MunchyMC - https://www.munchymc.com/ +* Player information and game statistics +* Gamemode leaderboards + +#### Minecraft Central - https://mccentral.org/ +* Player information and game statistics +* Gamemode leaderboards + + diff --git a/key.json.sample b/key.json.sample deleted file mode 100644 index 4f596fd..0000000 --- a/key.json.sample +++ /dev/null @@ -1,3 +0,0 @@ -{ - "hypixel": "creeper" -} \ No newline at end of file diff --git a/lib/util.js b/lib/util.js index 3c5f6eb..724bfa9 100644 --- a/lib/util.js +++ b/lib/util.js @@ -1,10 +1,8 @@ const fetch = require("node-fetch"); // Main http module const cheerio = require("cheerio"); const moment = require("moment"); -const cloudscraper = require("cloudscraper"); // This package bypasses cloudflare anti-bot page, which is needed in some cases const hypixel = require("./hypixel"); require("moment-duration-format"); -require("tls").DEFAULT_ECDH_CURVE = "auto"; String.prototype.toProperCase = function () { return this.replace(/([^\W_]+[^\s-]*) */g, function (txt) { return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); }); @@ -40,43 +38,74 @@ const convertSeconds = (seconds) => { }; module.exports = { - blocksmc: (username) => { // completed - return new Promise((resolve, reject) => { - fetch(`https://blocksmc.com/player/${username}`) - .then(res => res.text()) - .then(body => { - const data = { games: { } }; - const $ = cheerio.load(body); - const name = $(".profile-header h1").text().trim(); - const rank = $(".profile-rank").text().replace("\n", "").trim(); - const timePlayed = $("h1[dir=ltr]").text().replace("\n", "").trim(); - let totalKills = 0; - let totalWins = 0; - let totalGames = 0; - let totalPoints = 0; - let totalDeaths = 0; - $("div.col-xl-4").each(function () { - const stats = {}; - $(this).find("li").each(function () { - if ($(this).find("div.key").text() === "Kills") totalKills += Number($(this).find("div.val").text()); - if ($(this).find("div.key").text() === "Wins") totalWins += Number($(this).find("div.val").text()); - if ($(this).find("div.key").text() === "Played") totalGames += Number($(this).find("div.val").text()); - if ($(this).find("div.key").text() === "Points") totalPoints += Number($(this).find("div.val").text()); - if ($(this).find("div.key").text() === "Deaths") totalDeaths += Number($(this).find("div.val").text()); - - Object.assign(stats, { [$(this).find("div.key").text()]: Number($(this).find("div.val").text()) }); + blocksmc: (query, type) => { + if (type === "leaderboard") { + return new Promise((resolve, reject) => { + const leaderboards = ["sky-wars", "sky-wars-solo", "bed-wars", "bed-wars-solo", "egg-wars", "egg-wars-solo", "top-skypvp-s1", "survival-games", "1vs1", "the-bridge", "lucky-block-wars", "sky-giant", "sky-giant-mini", "murder-mystery", "tnt-tag", "block-party", "gravity", "super-jump", "splegg", "quake-craft", "uhc-run"]; + if (!leaderboards.includes(query)) return resolve({ errors: "Invalid game leaderboard." }); + fetch(`https://blocksmc.com/${query}`) + .then(res => res.text()) + .then(body => { + const data = []; + const template = []; + const $ = cheerio.load(body); + $("thead").find("td").each(function () { + const stat = $(this).text().trim().replace(/\s\s|^Av$/g, "").toLowerCase().replace("#", "rank").replace("w/l", "winLossRatio").replace("k/d", "killDeathRatio"); + if (stat.length > 0) template.push(stat); + }); + $("tbody").find("tr").each(function () { + const stat = $(this).text().trim().replace(/\s\s/g, "").split(" "); + const obj = {}; + for (let i = 0; i < template.length; i++) { + obj[template[i]] = !isNaN(stat[i]) ? Number(stat[i]) : stat[i]; + } + data.push(obj); }); - data.games[$(this).find("div.title").text().trim().replace(/ |:/g, "_").replace("1VS1", "Duels")] = stats; + return resolve(data); + }).catch(e => { + resolve({ errors: "Can't fetch stats, Website is probably offline." }); + console.log(e); }); - Object.assign(data, { name, rank, timePlayed, totalKills, totalWins, totalGames, totalPoints, totalDeaths }); - - if (!name) return resolve({ errors: "User not found" }); - resolve(data); - }).catch(e => { - resolve({ errors: "Can't fetch stats, Website is probably offline." }); - console.log(e); - }); - }); + }); + } + if (type === "player") { + return new Promise((resolve, reject) => { + fetch(`https://blocksmc.com/player/${query}`) + .then(res => res.text()) + .then(body => { + const data = { games: { } }; + const $ = cheerio.load(body); + const name = $(".profile-header h1").text().trim(); + const rank = $(".profile-rank").text().replace("\n", "").trim(); + const timePlayed = $("h1[dir=ltr]").text().replace("\n", "").trim(); + let totalKills = 0; + let totalWins = 0; + let totalGames = 0; + let totalPoints = 0; + let totalDeaths = 0; + $("div.col-xl-4").each(function () { + const stats = {}; + $(this).find("li").each(function () { + if ($(this).find("div.key").text() === "Kills") totalKills += Number($(this).find("div.val").text()); + if ($(this).find("div.key").text() === "Wins") totalWins += Number($(this).find("div.val").text()); + if ($(this).find("div.key").text() === "Played") totalGames += Number($(this).find("div.val").text()); + if ($(this).find("div.key").text() === "Points") totalPoints += Number($(this).find("div.val").text()); + if ($(this).find("div.key").text() === "Deaths") totalDeaths += Number($(this).find("div.val").text()); + + Object.assign(stats, { [$(this).find("div.key").text()]: Number($(this).find("div.val").text()) }); + }); + data.games[$(this).find("div.title").text().trim().replace(/ |:/g, "_").replace("1VS1", "Duels")] = stats; + }); + Object.assign(data, { name, rank, timePlayed, totalKills, totalWins, totalGames, totalPoints, totalDeaths }); + + if (!name) return resolve({ errors: "User not found" }); + resolve(data); + }).catch(e => { + resolve({ errors: "Can't fetch stats, Website is probably offline." }); + console.log(e); + }); + }); + } }, hypixelPlayer: async (username, key) => { // completed @@ -314,7 +343,7 @@ module.exports = { }); resolve(data); }).catch(e => { - resolve({ errors: "Can't fetch stats, API is probably offline." }); + resolve({ errors: "Can't fetch stats, Website is probably offline." }); console.log(e); }); }); @@ -326,7 +355,6 @@ module.exports = { fetch(`https://www.mineplex.com/players/${username}`) .then(res => res.text()) .then(body => { - const data = { games: [] }; const $ = cheerio.load(body); const name = $(".www-mp-username").text().trim(); @@ -534,7 +562,7 @@ module.exports = { }); }, - timolia: (username) => { // incomplete + timolia: (username) => { return new Promise((resolve, reject) => { if (!username) return resolve({ "errors": "No username provided" }); fetch(`https://www.timolia.de/stats/${username}`) @@ -542,132 +570,181 @@ module.exports = { .then(async body => { const clean = (val) => { - if (val == "Spiele gespielt") { - return "gamesPlayed"; - } else if (val == "Spiele gewonnen") { - return "wins"; - } else if (val == "Knapp gewonnen") { - return "hardWins"; - } else if (val == "eZ gewonnen") { - return "easyWins"; - } else if (val == "K/D") { - return "kd"; - } else if (val == "Punkte") { - return "points"; - } else if (val == "Siege insg.") { - return "totalWins"; - } else if (val == "Tode insgesamt") { - return "totalDeaths"; - } else if (val == "Meiste Kills pro Spiel") { - return "mostKillsPerGame"; - } else if (val == "Durchschnittsrang") { - return "avgRank"; - } else if (val == "Rang") { - return "rank"; - } else if (val == "Duelle gespielt") { - return "duelsPlayed"; - } else if (val == "Duelle gewonnen") { - return "duelWins"; - } else if (val == "Insg. versucht") { - return "castTries"; - } else if (val == "Insg. geschafft") { - return "castMade"; - } else if (val == "Abgeschlossen") { - return "completed"; - } else if (val == "Tagesieger beendet") { - return "dayWinnerFinished"; - } else if (val == "Tagessieger insg.") { - return "dayWinnerTotal"; - } else if (val == "JnRs veröffentlicht") { - return "jnrReleased"; - } else if (val == "Gesammelte Favos") { - return "collectedFavos"; - } else if (val == "Durchschnittsrang") { - return ""; - } else if (val == "Durchschnittsrang") { - return ""; - } else if (val.includes("ème")) { - return val.replace("ème", ""); - } else if (val.includes(" ")) { - return val.replace(" ", ""); - } else { - return val; + switch (val) { + case "Spiele gespielt": + return "games_played"; + case "Spiele gewonnen": + return "games_won"; + case "Knapp gewonnen": + return "barely_won"; + case "eZ gewonnen": + return "easy_win"; + case "K/D": + return "kill_death_ratio"; + case "W/L": + return "win_loss_ratio"; + case "Punkte": + return "points"; + case "Siege insg.": + return "victories"; + case "Tode insgesamt": + return "deaths"; + case "Meiste Kills pro Spiel": + return "most_kills"; + case "Durchschnittsrang": + return "rank"; + case "Rang": + return "rank"; + case "Duelle gespielt": + return "games_played"; + case "Duelle gewonnen": + return "games_won"; + case "Insg. versucht": + return "total_attempts"; + case "Insg. geschafft": + return "total_made"; + case "Abgeschlossen": + return "completed"; + case "Tagesieger beendet": + return "jnrs_completed"; + case "Tagessieger insg.": + return "total_jnrs_completed"; + case "JnRs veröffentlicht": + return "jnrs_published"; + case "Gesammelte Favos": + return "favors_collected"; + case "Getroffene Felder": + return "fields_hit"; + case "Meist getroffene Felder": + return "most_fields_hit"; + case "Flaggen erobert": + return "flags_captured"; + case "Gold eingesammelt": + return "gold_collected"; + case "Gold ausgegeben": + return "gold_spent"; + case "Gold verloren": + return "gold_lost"; + case "TNT verschossen": + return "tnt_missed"; + case "Strukturen aufgebaut": + return "structures_built"; + case "Meiste Zerstörung": + return "most_destruction"; + case "Durchschnittszerstörung": + return "average_destruction"; + case "Schnellster Sieg": + return "fastest_win"; + case "Ausgegebene Zeit": + return "time_spent"; + case "Dimensionsschwellen überwunden": + return "thresholds_overcome"; + case "Blöcke platziert": + return "blocks_placed"; + case "Blöcke zerstört": + return "blocks_broken"; + case "Mittelfackeln abgebaut insgesamt": + return "flares_broken"; + case "Produkte gekauft insgesamt": + return "products_bought"; + case "Chips gekauft insgesamt": + return "chips_bought"; + case "Materialienwerte ausgegeben insgesamt": + return "meterials_spent"; + case "Turnierspiele gespielt": + return "tournaments_played"; + case "Turnierspiele gewonnen": + return "tournaments_won"; + case "1vs1": + return "duels"; + case "TSpiele": + return "tgames"; + case "Bestzeit": + return "best_time"; + case "Durchschnittszeit": + return "average_time"; + case "Die letzten 10 PvP-Kämpfe": + return "recent_battles"; + default: + return val.toLowerCase(); } }; - var data = { games: [] }; + const data = { totalWins: 0, totalKills: 0, totalDeaths: 0, totalGamesPlayed: 0, games: {} }; const $ = cheerio.load(body); + const name = $("h2#playername").text().trim(); - const rank = $(".stat-column td .label").not(".label-success").not(".label-danger").text().trim(); - // const status = $("table.table tbody td").text() + if (!name) return resolve({ errors: "User not found" }); + const rank = $(".stat-column td .label").not(".label-success").not(".label-danger").text().trim().replace(/Ranked/g, ""); + const calcFirstLogin = (input) => { var d = input.split(" ")[0]; var t = input.split(" ")[1]; var arr = d.split("."); - var final = new Date(`${arr[2]}-${arr[1]}-${arr[0]}T${t}`); - return `${moment(final).format("MMM Do YYYY")} (${moment(final).fromNow()})`; + return new Date(`${arr[2]}-${arr[1]}-${arr[0]}T${t}`); }; + const firstLogin = calcFirstLogin($("table.table tbody tr").children("td").text().split(rank)[1].split("\n")[0]); const friends = $("table.table tbody tr").children("td").text().split(rank)[1].split("\n")[1].trim(); + + const recent_battles = []; Object.assign(data, { name, rank, firstLogin, friends }); $(".stat-column").each(function () { - const stats = {}; - $(this).find("tbody").each(function () { - $(this).find(".stats-table-field").each(function () { - // console.log($(this).find("td").not(".align-right").text() + " " + $(this).find("td").last().text()) - Object.assign(stats, { [camelCase($(this).find("td").not(".align-right").text())]: $(this).find("td").last().text() }); + const game = clean($(this).find("th.stat-header").text().trim()) || clean($(this).find("tr.stat-header").text().trim()); + if (game.length > 0 ) { + data.games[game] = {}; + $(this).find("tbody").each(function () { + if (game === "recent_battles") { + data.games[game] = []; + $(this).find("tr").each(function () { + $(this).find("td").each(function () { + const text = $(this).text().trim().replace(/vs\./g, ""); + if (text.match(/[0-9]{2}:[0-9]{2}:[0-9]{2}/)) recent_battles.push("newLine"); + if (text.length > 0) recent_battles.push(text); + }); + }); + } + $(this).find(".stats-table-field").each(function () { + const objName = clean($(this).find("td").not(".align-right").text()); + let objValue = $(this).find("td").last().text().replace("Sek.", "Seconds"); + if (!isNaN(objValue)) objValue = Number(objValue); + if (objName === "games_played") data.totalGamesPlayed += objValue; + if (objName === "games_won") data.totalWins += objValue; + if (objName === "kills") data.totalKills += objValue; + if (objName === "deaths") data.totalDeaths += objValue; + + data.games[game][objName] = objValue; + }); }); - }); - if ($(this).find("th.stat-header").text().trim().toLowerCase()) { - data.games.push({ - game: $(this).find("th.stat-header").text().trim().toLowerCase(), - stats + } + }); + recent_battles.join(" ").split("newLine").forEach(i => { + if (i.length > 0) { + const e = i.split(" "); + data.games.recent_battles.push({ + duration: e[1], + type: e[2], + map: e[3], + fighter: e[4], + opponent: e[5], + kit: e[6], + result: e[7].replace(/Verloren/, "loss").replace(/Gewonnen/, "win") }); } }); resolve(data); }).catch(e => { - resolve({ "errors": "Can't fetch stats, API is probably offline." }); - console.log(e); - }); - }); - }, - - minemen: (username) => { // incomplete - need to figure out how to bypass the cloudflare challenge - return new Promise(async (resolve, reject) => { - if (!username) return resolve({ "errors": "No username provided" }); - await cloudscraper.get(`https://mineman.nezki.xyz/player/${username}`) - .then(async body => { - var data = { games: [] }; - const $ = cheerio.load(body); - const name = $("div.name").text().trim(); - const status = $("div.status_header").text().trim(); - const rank = $("div.label").text().trim().split("\n")[0]; - Object.assign(data, { name, status, rank }); - // $(".stat-table").each(function () { - // const stats = {}; - // $(this).find("div.gametype-stats").each(function () { - // $(this).find("li").each(function () { - // Object.assign(stats, { [camelCase($(this).not(".score").text().trim().toLowerCase().split("\n")[2])]: $(this).not(".score").text().trim().toLowerCase().split("\n")[0] }); - // }); - // }); - // data.games.push({ - // game: $(this).find("div.map-content-wrap").text().trim().toLowerCase(), - // stats - // }); - // }); - resolve(data); - }).catch(e => { - resolve({ "errors": "Can't fetch stats, API is probably offline." }); + resolve({ "errors": "Can't fetch stats, Website is probably offline." }); console.log(e); }); }); }, - veltpvp: (username) => { // + veltpvp: (username) => { return new Promise(async (resolve, reject) => { if (!username) return resolve({ "errors": "No username provided" }); - cloudscraper.get({ uri: `https://www.veltpvp.com/u/${username}` }) + fetch(`https://www.veltpvp.com/u/${username}`) + .then(res => res.text()) .then(async body => { const calcFirstLogin = (input) => { var arr = input.split("/"); @@ -1658,4 +1735,583 @@ module.exports = { } }); }, + + munchymc: (query, type) => { + if (type === "leaderboard") { + return new Promise((resolve, reject) => { + fetch(`https://www.munchymc.com/leaderboards/${query}`) + .then(res => res.text()) + .then(body => { + const data = { }; + const $ = cheerio.load(body); + + $($("div.col-md-4").length > 0 ? "div.col-md-4" : "div.col-md-6").each(function () { + const leaderboard = $(this).find("div.caption-stats").text().trim().replace(/ /g, ""); + if (leaderboard.length > 0) { + data[leaderboard] = []; + $(this).find(".list-group-item").each(function () { + const stat = $(this).text().trim().replace(/\s\s /g, "").replace(/#[0-9]{1,2} {1,3}/, "").replace(/ {2}/, " ").split(/ /); + data[leaderboard].push({ username: stat[0], value: stat[1] }); + }); + } + }); + return resolve(data); + }).catch(e => { + resolve({ errors: "Can't fetch stats, Website is probably offline." }); + console.log(e); + }); + }); + } + if (type === "player") { + return new Promise((resolve, reject) => { + fetch(`https://www.munchymc.com/profile/${query}`) + .then(res => res.text()) + .then(body => { + const data = { games: { } }; + const $ = cheerio.load(body); + if ($("div.col-md-12").text().includes("Looks like we couldn't find that name in our database!")) { + return resolve({ + "errors": `No inforamtion was found for ${query}` + }); + } + const details = []; + const statistics = []; + + $("div[class=\"panel panel-success\"]").each(function () { + $(this).find("li").each(function () { + details.push(($(this).text().trim().replace(/(\s){2,}/g, ""))); + }); + }); + data.rank = details[0].replace("Rank: ", ""); + data.status = details[1].replace("Status:", ""); + data.tokens = details[2].replace("Tokens:", ""); + data.firstLogin = details[3].replace("Joined: ", ""); + data.lastLogin = details[4].replace("Last Login: ", ""); + + $("span[class=\"badge\"]").each(function () { + statistics.push(($(this).text().trim().replace(/\s*/g, ""))); + }); + + data.games.woolwars = { + wins: Number(statistics[0]) || 0, + games: Number(statistics[1]) || 0, + kills: Number(statistics[2]) || 0, + }; + + data.games.skywars = { + wins: Number(statistics[4]) || 0, + games: Number(statistics[5]) || 0, + kills: Number(statistics[6]) || 0, + deaths: Number(statistics[7]) || 0, + }; + + data.games.mazerunner = { + wins: Number(statistics[8]) || 0, + games: Number(statistics[9]) || 0, + kills: Number(statistics[10]) || 0, + princess_kills: Number(statistics[11]) || 0, + }; + + data.games.classic_hungergames = { + wins: Number(statistics[12]) || 0, + games: Number(statistics[13]) || 0, + kills: Number(statistics[14]) || 0, + most_kills: Number(statistics[15]) || 0, + }; + + data.games.kitpvp = { + best_kill_streak: Number(statistics[16]) || 0, + casual: { + kills: Number(statistics[18]) || 0, + deaths: Number(statistics[19]) || 0 + }, + competitive: { + kills: Number(statistics[21]) || 0, + deaths: Number(statistics[22]) || 0 + }, + arena: { + kills: Number(statistics[24]) || 0, + deaths: Number(statistics[25]) || 0, + elo: Number(statistics[26]) || 0 + }, + brackets: { + games: Number(statistics[28]) || 0, + wins: Number(statistics[29]) || 0 + } + }; + + data.games.prison = { + blocks_mined: Number(statistics[34]) || 0, + balance: Number(statistics[35]) || 0, + kills: Number(statistics[36]) || 0, + best_kill_streak: Number(statistics[37]) || 0, + }; + return resolve(data); + }).catch(e => { + resolve({ errors: "Can't fetch stats, Website is probably offline." }); + console.log(e); + }); + }); + } + }, + + mccentral: (query, type) => { + if (type === "leaderboard") { + return new Promise((resolve, reject) => { + function mccentralLeaderboardName (leaderboard) { + switch (leaderboard) { + case "survivalgames": + return "fsurvival"; + case "skywars": + return "fskywars"; + case "walls": + return "fwalls"; + case "ctf": + return "fctf"; + case "murdermayhem": + return "fmurder"; + case "championbuilder": + return "fchaps"; + case "cakewars": + return "fcakewars"; + case "uhc": + return "uhcserver"; + case "skyblock1": + return "sbNewReset1"; + case "skyblock2": + return "sbNewReset2"; + case "survival": + return "survival"; + case "factions": + return "facs"; + case "prison1": + return "prison"; + case "prison2": + return "prison2"; + case "kitpvp": + return "nkitpvp"; + case "arenapvp": + return "arenapvp2"; + } + } + const leaderboardName = mccentralLeaderboardName(query); + if (!leaderboardName) return resolve({ errors: "Invaid game leaderboard." }); + fetch(`https://mccentral.org/leaderboards-storage/leader/scripts/${leaderboardName}.php?sEcho=1&iColumns=6&sColumns=&iDisplayStart=0&iDisplayLength=25&mDataProp_0=0&mDataProp_1=1&mDataProp_2=2&mDataProp_3=3&mDataProp_4=4&mDataProp_5=5&sSearch=&bRegex=false&sSearch_0=&bRegex_0=false&bSearchable_0=true&sSearch_1=&bRegex_1=false&bSearchable_1=true&sSearch_2=&bRegex_2=false&bSearchable_2=true&sSearch_3=&bRegex_3=false&bSearchable_3=true&sSearch_4=&bRegex_4=false&bSearchable_4=true&sSearch_5=&bRegex_5=false&bSearchable_5=true&iSortCol_0=0&sSortDir_0=asc&iSortingCols=1&bSortable_0=false&bSortable_1=false&bSortable_2=false&bSortable_3=false&bSortable_4=false&bSortable_5=false`) + .then(res => res.json()) + .then(body => { + const data = []; + if (body.aaData.length > 0) { + body.aaData.forEach(i => { + if (leaderboardName === "fsurvival") { + data.push( { + username: i[1], + games: Number(i[2]), + wins: Number(i[3]), + kills: Number(i[4]), + deaths: Number(i[5]), + }); + } + if (leaderboardName === "fskywars") { + data.push( { + username: i[1], + games: Number(i[2]), + wins: Number(i[3]), + kills: Number(i[4]), + deaths: Number(i[5]), + }); + } + if (leaderboardName === "fwalls") { + data.push( { + username: i[1], + games: Number(i[2]), + wins: Number(i[3]), + kills: Number(i[4]), + deaths: Number(i[5]), + }); + } + if (leaderboardName === "fctf") { + data.push( { + username: i[1], + games: Number(i[2]), + wins: Number(i[3]), + kills: Number(i[4]), + deaths: Number(i[5]), + flags_captured: Number(i[6]), + }); + } + if (leaderboardName === "fmurder") { + data.push( { + username: i[1], + games: Number(i[2]), + wins: Number(i[3]), + murderer_kills: Number(i[4]), + bystander_kills: Number(i[5]), + karma: Number(i[6]), + }); + } + if (leaderboardName === "fchamps") { + data.push( { + username: i[1], + blocks_placed: i[2], + blocks_broken: i[3], + wins: Number(i[4]), + games: Number(i[5]), + }); + } + if (leaderboardName === "fcakewars") { + data.push( { + username: i[1], + games: Number(i[2]), + wins: Number(i[3]), + kills: Number(i[4]), + deaths: Number(i[5]), + cakes_destroyed: Number(i[6]), + }); + } + if (leaderboardName === "uhcserver") { + data.push( { + username: i[1], + wins: Number(i[2]), + kills: Number(i[3]), + deaths: Number(i[4]), + gapples: Number(i[5]), + }); + } + if (leaderboardName === "sbNewReset1") { + data.push( { + username: i[1], + level: i[2], + value: i[3], + hoppers: Number(i[4]), + spawners: i[5], + }); + } + if (leaderboardName === "sbNewReset2") { + data.push( { + username: i[1], + level: i[2], + value: i[3], + hoppers: Number(i[4]), + spawners: i[5], + }); + } + if (leaderboardName === "survival") { + data.push( { + username: i[1], + balance: i[2], + kills: Number(i[3]), + deaths: Number(i[4]), + quests: Number(i[5]), + }); + } + if (leaderboardName === "facs") { + data.push( { + username: i[1], + wealth: i[2], + spawners: Number(i[3]), + }); + } + if (leaderboardName === "prison") { + data.push( { + username: i[1], + prison: i[2], + kills: Number(i[3]), + deaths: Number(i[4]), + blocks_mined: i[5], + gang: i[6], + }); + } + if (leaderboardName === "prison2") { + data.push( { + username: i[1], + prison: i[2], + kills: Number(i[3]), + deaths: Number(i[4]), + blocks_mined: i[5], + gang: i[6], + }); + } + if (leaderboardName === "nkitpvp") { + data.push( { + username: i[1], + kills: Number(i[2]), + deaths: Number(i[3]), + level: Number(i[4]), + gapples: Number(i[5]), + events_won: Number(i[6]), + }); + } + if (leaderboardName === "arenapvp2") { + data.push( { + username: i[1], + duels: Number(i[2]), + duels_won: Number(i[3]), + win_ratio: i[4], + duels_rank: i[5] + }); + } + }); + resolve(data); + } else { + return resolve({ errors: "No leaderboards found." }); + } + }).catch(e => { + resolve({ errors: "Can't fetch stats, Website is probably offline." }); + console.log(e); + }); + }); + } + if (type === "player") { + return new Promise(async (resolve, reject) => { + const data = { + survival_games: { + rank: 0, + games: 0, + wins: 0, + kills: 0, + deaths: 0 + }, + skywars: { + rank: 0, + games: 0, + wins: 0, + kills: 0, + deaths: 0 + }, + walls: { + rank: 0, + games: 0, + wins: 0, + kills: 0, + deaths: 0 + }, + ctf: { + rank: 0, + games: 0, + wins: 0, + kills: 0, + deaths: 0, + flags_captured: 0 + }, + murder: { + rank: 0, + games: 0, + wins: 0, + murderer_kills: 0, + bystander_kills: 0, + karma: 0 + }, + champs: { + rank: 0, + blocks_placed: 0, + blocks_broken: 0, + wins: 0, + games: 0 + }, + cakewars: { + rank: 0, + games: 0, + wins: 0, + kills: 0, + deaths: 0, + cakes_destroyed: 0 + }, + uhc: { + rank: 0, + wins: 0, + kills: 0, + deaths: 0, + gapples: 0 + }, + skyblock1: { + rank: 0, + level: 0, + value: 0, + hoppers: 0, + spawners: 0 + }, + skyblock2: { + rank: 0, + level: 0, + value: 0, + hoppers: 0, + spawners: 0 + }, + survival: { + rank: 0, + balance: 0, + kills: 0, + deaths: 0, + quests: 0 + }, + factions: { + rank: 0, + wealth: 0, + spawners: 0, + }, + prison1: { + rank: 0, + prison: 0, + kills: 0, + deaths: 0, + blocks_mined: 0, + gang: 0 + }, + prison2: { + rank: 0, + prison: 0, + kills: 0, + deaths: 0, + blocks_mined: 0, + gang: 0 + }, + kitpvp: { + rank: 0, + kills: 0, + deaths: 0, + level: 0, + gapples: 0, + highest_streak: 0, + events_won: 0 + }, + arenapvp: { + rank: 0, + duels: 0, + duels_won: 0, + win_ratio: 0, + duels_rank: 0, + }, + }; + const games = ["fsurvival", "fskywars", "fwalls", "fctf", "fmurder", "fchamps", "fcakewars", "uhcserver", "sbNewReset1", "sbNewReset2", "survival", "facs", "prison", "prison2", "nkitpvp", "arenapvp2"]; + for (let i = 0; i < games.length; i++) { + await fetch(`https://mccentral.org/leaderboards-storage/leader/scripts/${games[i]}.php?sSearch=${query}&bRegex=false&sSearch_0=&bRegex_0=false&bSearchable_0=true&sSearch_1=&bRegex_1=false&bSearchable_1=true&sSearch_2=&bRegex_2=false&bSearchable_2=true&sSearch_3=&bRegex_3=false&bSearchable_3=true&sSearch_4=&bRegex_4=false&bSearchable_4=true&sSearch_5=&bRegex_5=false&bSearchable_5=true&iSortCol_0=0&sSortDir_0=asc&iSortingCols=1&bSortable_0=false&bSortable_1=false&bSortable_2=false&bSortable_3=false&bSortable_4=false&bSortable_5=false`) + .then(res => res.json()) + .then(body => { + if (body.aaData.length > 0 && body.aaData[0][1].toLowerCase() === query.toLowerCase()) { + if (games[i] === "fsurvival") { + data.survival_games.rank = Number(body.aaData[0][0]); + data.survival_games.games = Number(body.aaData[0][2]); + data.survival_games.wins = Number(body.aaData[0][3]); + data.survival_games.kills = Number(body.aaData[0][4]); + data.survival_games.deaths = Number(body.aaData[0][5]); + } + if (games[i] === "fskywars") { + data.skywars.rank = Number(body.aaData[0][0]); + data.skywars.games = Number(body.aaData[0][2]); + data.skywars.wins = Number(body.aaData[0][3]); + data.skywars.kills = Number(body.aaData[0][4]); + data.skywars.deaths = Number(body.aaData[0][5]); + } + if (games[i] === "fwalls") { + data.walls.rank = Number(body.aaData[0][0]); + data.walls.games = Number(body.aaData[0][2]); + data.walls.wins = Number(body.aaData[0][3]); + data.walls.kills = Number(body.aaData[0][4]); + data.walls.deaths = Number(body.aaData[0][5]); + } + if (games[i] === "fctf") { + data.ctf.rank = Number(body.aaData[0][0]); + data.ctf.games = Number(body.aaData[0][2]); + data.ctf.wins = Number(body.aaData[0][3]); + data.ctf.kills = Number(body.aaData[0][4]); + data.ctf.deaths = Number(body.aaData[0][5]); + data.ctf.flags_captured = Number(body.aaData[0][6]); + } + if (games[i] === "fmurder") { + data.murder.rank = Number(body.aaData[0][0]); + data.murder.games = Number(body.aaData[0][2]); + data.murder.wins = Number(body.aaData[0][3]); + data.murder.murderer_kills = Number(body.aaData[0][4]); + data.murder.bystander_kills = Number(body.aaData[0][5]); + data.murder.karma = Number(body.aaData[0][6]); + } + if (games[i] === "fchamps") { + data.champs.rank = Number(body.aaData[0][0]); + data.champs.blocks_placed = body.aaData[0][2]; + data.champs.blocks_broken = body.aaData[0][3]; + data.champs.wins = Number(body.aaData[0][4]); + data.champs.games = Number(body.aaData[0][5]); + } + if (games[i] === "fcakewars") { + data.cakewars.rank = Number(body.aaData[0][0]); + data.cakewars.games = Number(body.aaData[0][2]); + data.cakewars.wins = Number(body.aaData[0][3]); + data.cakewars.kills = Number(body.aaData[0][4]); + data.cakewars.deaths = Number(body.aaData[0][5]); + data.cakewars.cakes_destroyed = Number(body.aaData[0][6]); + } + if (games[i] === "uhcserver") { + data.uhc.rank = Number(body.aaData[0][0]); + data.uhc.wins = Number(body.aaData[0][2]); + data.uhc.kills = Number(body.aaData[0][3]); + data.uhc.deaths = Number(body.aaData[0][4]); + data.uhc.gapples = Number(body.aaData[0][5]); + } + if (games[i] === "sbNewReset1") { + data.skyblock1.rank = Number(body.aaData[0][0]); + data.skyblock1.level = body.aaData[0][2]; + data.skyblock1.value = body.aaData[0][3]; + data.skyblock1.hoppers = Number(body.aaData[0][4]); + data.skyblock1.spawners = body.aaData[0][5]; + } + if (games[i] === "sbNewReset2") { + data.skyblock2.rank = Number(body.aaData[0][0]); + data.skyblock2.level = body.aaData[0][2]; + data.skyblock2.value = body.aaData[0][3]; + data.skyblock2.hoppers = Number(body.aaData[0][4]); + data.skyblock2.spawners = body.aaData[0][5]; + } + if (games[i] === "survival") { + data.survival.rank = Number(body.aaData[0][0]); + data.survival.balance = body.aaData[0][2]; + data.survival.kills = Number(body.aaData[0][3]); + data.survival.deaths = Number(body.aaData[0][4]); + data.survival.quests = Number(body.aaData[0][5]); + } + if (games[i] === "factions") { + data.factions.rank = Number(body.aaData[0][0]); + data.factions.wealth = body.aaData[0][2]; + data.factions.spawners = Number(body.aaData[0][3]); + } + if (games[i] === "prison") { + data.prison1.rank = Number(body.aaData[0][0]); + data.prison1.prison = body.aaData[0][2]; + data.prison1.kills = Number(body.aaData[0][3]); + data.prison1.deaths = Number(body.aaData[0][4]); + data.prison1.blocks_mined = body.aaData[0][5]; + data.prison1.gang = body.aaData[0][6]; + } + if (games[i] === "prison2") { + data.prison2.rank = Number(body.aaData[0][0]); + data.prison2.prison = body.aaData[0][2]; + data.prison2.kills = Number(body.aaData[0][3]); + data.prison2.deaths = Number(body.aaData[0][4]); + data.prison2.blocks_mined = body.aaData[0][5]; + data.prison2.gang = body.aaData[0][6]; + } + if (games[i] === "nkitpvp") { + data.kitpvp.rank = Number(body.aaData[0][0]); + data.kitpvp.kills = Number(body.aaData[0][2]); + data.kitpvp.deaths = Number(body.aaData[0][3]); + data.kitpvp.level = Number(body.aaData[0][4]); + data.kitpvp.gapples = Number(body.aaData[0][5]); + data.kitpvp.events_won = Number(body.aaData[0][6]); + } + if (games[i] === "arenapvp2") { + data.arenapvp.rank = Number(body.aaData[0][0]); + data.arenapvp.duels = Number(body.aaData[0][2]); + data.arenapvp.duels_won = Number(body.aaData[0][3]); + data.arenapvp.win_ratio = body.aaData[0][4]; + data.arenapvp.duels_rank = body.aaData[0][5]; + } + } + }).catch(e => { + resolve({ errors: "Can't fetch stats, Website is probably offline." }); + console.log(e); + }); + } + return resolve(data); + }); + } + } }; diff --git a/package-lock.json b/package-lock.json index e815a54..7d8d69a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "mc-stats", - "version": "1.0.5", + "version": "1.0.7", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -141,15 +141,6 @@ "@babel/helper-plugin-utils": "^7.0.0" } }, - "@babel/runtime": { - "version": "7.9.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz", - "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, "@babel/template": { "version": "7.7.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.0.tgz", @@ -200,9 +191,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -494,9 +485,9 @@ "dev": true }, "acorn": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", "dev": true }, "acorn-globals": { @@ -518,9 +509,9 @@ } }, "acorn-jsx": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", - "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", + "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", "dev": true }, "acorn-walk": { @@ -530,23 +521,32 @@ "dev": true }, "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", + "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", + "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "ansi-escapes": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", - "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", "dev": true, "requires": { - "type-fest": "^0.5.2" + "type-fest": "^0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "dev": true + } } }, "ansi-regex": { @@ -617,6 +617,7 @@ "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, "requires": { "safer-buffer": "~2.1.0" } @@ -624,7 +625,8 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true }, "assign-symbols": { "version": "1.0.0", @@ -647,7 +649,8 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "atob": { "version": "2.1.2", @@ -658,12 +661,14 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.1.tgz", + "integrity": "sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA==", + "dev": true }, "babel-jest": { "version": "24.9.0", @@ -776,22 +781,11 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, "requires": { "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - } } }, - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" - }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -915,7 +909,8 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true }, "chalk": { "version": "2.4.2", @@ -986,9 +981,9 @@ } }, "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, "cliui": { @@ -1027,14 +1022,6 @@ } } }, - "cloudscraper": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/cloudscraper/-/cloudscraper-4.1.4.tgz", - "integrity": "sha512-c9CdP9Unw1sh3l5Bpfl1sMH9BGOQp5VU09+1duFWwkch82oGf+d1I/rPYsrBOSTSgNeX6iwSrPpy8rdIR4kBYw==", - "requires": { - "request-promise": "^4.2.4" - } - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -1070,17 +1057,11 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "optional": true - }, "compare-versions": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", @@ -1125,7 +1106,8 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cosmiconfig": { "version": "6.0.0", @@ -1141,9 +1123,9 @@ }, "dependencies": { "parse-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", - "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.1.tgz", + "integrity": "sha512-ztoZ4/DYeXQq4E21v169sC8qWINGpcosGv9XhTDvg9/hWvx/zrFkc9BiWxR58OJLHGk28j5BL0SDLeV2WmFZlQ==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -1216,6 +1198,7 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -1324,7 +1307,8 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true }, "detect-newline": { "version": "2.1.0", @@ -1391,6 +1375,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" @@ -1482,9 +1467,9 @@ } }, "eslint": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.6.0.tgz", - "integrity": "sha512-PpEBq7b6qY/qrOmpYQ/jTMDYfuQMELR4g4WI1M/NaSDDD/bdcMb+dj4Hgks7p41kW2caXsPsEZAEAyAgjVVC0g==", + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -1502,7 +1487,7 @@ "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", "glob-parent": "^5.0.0", - "globals": "^11.7.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", @@ -1515,7 +1500,7 @@ "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", + "optionator": "^0.8.3", "progress": "^2.0.0", "regexpp": "^2.0.1", "semver": "^6.1.2", @@ -1524,12 +1509,23 @@ "table": "^5.2.3", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + } } }, "eslint-scope": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", - "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", + "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", "dev": true, "requires": { "esrecurse": "^4.1.0", @@ -1546,19 +1542,19 @@ } }, "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "dev": true }, "espree": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", - "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", "dev": true, "requires": { - "acorn": "^7.1.0", - "acorn-jsx": "^5.1.0", + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", "eslint-visitor-keys": "^1.1.0" } }, @@ -1569,12 +1565,20 @@ "dev": true }, "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", "dev": true, "requires": { - "estraverse": "^4.0.0" + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } } }, "esrecurse": { @@ -1692,7 +1696,8 @@ "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true }, "extend-shallow": { "version": "3.0.2", @@ -1794,17 +1799,20 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true }, "fast-levenshtein": { "version": "2.0.6", @@ -1822,9 +1830,9 @@ } }, "figures": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", - "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -1892,9 +1900,9 @@ } }, "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, "for-in": { @@ -1906,12 +1914,14 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true }, "form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -2518,6 +2528,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -2537,9 +2548,9 @@ } }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -2563,29 +2574,19 @@ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", "dev": true }, - "handlebars": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.2.tgz", - "integrity": "sha512-29Zxv/cynYB7mkT1rVWQnV7mGX6v7H/miQ6dbEpYTKq5eJBN7PsRB+ViYJlcT6JINTSu4dVB9kOqEun78h6Exg==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - } - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, @@ -2657,6 +2658,12 @@ "whatwg-encoding": "^1.0.1" } }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "htmlparser2": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", @@ -2674,6 +2681,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", @@ -2681,14 +2689,14 @@ } }, "husky": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.3.tgz", - "integrity": "sha512-VxTsSTRwYveKXN4SaH1/FefRJYCtx+wx04sSVcOpD7N2zjoHxa+cEJ07Qg5NmV3HAK+IRKOyNVpi2YBIVccIfQ==", + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/husky/-/husky-4.2.5.tgz", + "integrity": "sha512-SYZ95AjKcX7goYVZtVZF2i6XiZcHknw50iXvY7b0MiGoj5RwdgRQNEHdb+gPDPCXKlzwrybjFjkL6FOj8uRhZQ==", "dev": true, "requires": { - "chalk": "^3.0.0", + "chalk": "^4.0.0", "ci-info": "^2.0.0", - "compare-versions": "^3.5.1", + "compare-versions": "^3.6.0", "cosmiconfig": "^6.0.0", "find-versions": "^3.2.0", "opencollective-postinstall": "^2.0.2", @@ -2709,9 +2717,9 @@ } }, "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -2856,24 +2864,85 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "inquirer": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.0.tgz", - "integrity": "sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==", + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", "dev": true, "requires": { "ansi-escapes": "^4.2.1", - "chalk": "^2.4.2", + "chalk": "^4.1.0", "cli-cursor": "^3.1.0", - "cli-width": "^2.0.0", + "cli-width": "^3.0.0", "external-editor": "^3.0.3", "figures": "^3.0.0", - "lodash": "^4.17.15", + "lodash": "^4.17.19", "mute-stream": "0.0.8", - "run-async": "^2.2.0", - "rxjs": "^6.4.0", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", "string-width": "^4.1.0", - "strip-ansi": "^5.1.0", + "strip-ansi": "^6.0.0", "through": "^2.3.6" + }, + "dependencies": { + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", + "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "invariant": { @@ -3039,12 +3108,6 @@ "isobject": "^3.0.1" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", @@ -3072,7 +3135,8 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-windows": { "version": "1.0.2", @@ -3107,7 +3171,8 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true }, "istanbul-lib-coverage": { "version": "2.0.5", @@ -3166,12 +3231,12 @@ } }, "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", "dev": true, "requires": { - "handlebars": "^4.1.2" + "html-escaper": "^2.0.0" } }, "jest": { @@ -3607,9 +3672,9 @@ "dev": true }, "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -3619,7 +3684,8 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true }, "jsdom": { "version": "11.12.0", @@ -3693,12 +3759,14 @@ "json-schema": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -3709,7 +3777,8 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true }, "json5": { "version": "2.1.1", @@ -3721,9 +3790,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -3732,6 +3801,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -3740,9 +3810,10 @@ } }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true }, "kleur": { "version": "3.0.3", @@ -3896,16 +3967,18 @@ } }, "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, "requires": { - "mime-db": "1.40.0" + "mime-db": "1.44.0" } }, "mimic-fn": { @@ -3923,12 +3996,6 @@ "brace-expansion": "^1.1.7" } }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -3951,18 +4018,26 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz", + "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ==" }, "moment-duration-format": { "version": "2.3.2", @@ -4013,12 +4088,6 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -4118,7 +4187,8 @@ "oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true }, "object-copy": { "version": "0.1.0", @@ -4191,14 +4261,6 @@ "isobject": "^3.0.1" } }, - "omit-empty": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/omit-empty/-/omit-empty-1.0.0.tgz", - "integrity": "sha512-eaWd8kwqDyChgf7IYVyfZf2b9b9JOIhpAow4cegg8CVx29U2mZKgCvpfvOSeJctmRTqjGWTZeO2Us58ebDtQ4A==", - "requires": { - "kind-of": "^6.0.2" - } - }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4209,30 +4271,20 @@ } }, "onetime": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", - "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { "mimic-fn": "^2.1.0" } }, "opencollective-postinstall": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz", - "integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", + "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==", "dev": true }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" - } - }, "optionator": { "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", @@ -4367,7 +4419,8 @@ "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true }, "pify": { "version": "3.0.0", @@ -4459,7 +4512,8 @@ "psl": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", - "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==" + "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", + "dev": true }, "pump": { "version": "3.0.0", @@ -4474,12 +4528,14 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true }, "qs": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true }, "react-is": { "version": "16.12.0", @@ -4527,12 +4583,6 @@ "util.promisify": "^1.0.0" } }, - "regenerator-runtime": { - "version": "0.13.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", - "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", - "dev": true - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", @@ -4568,9 +4618,10 @@ "dev": true }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -4579,7 +4630,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -4589,44 +4640,9 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - } - } - } - }, - "request-promise": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.4.tgz", - "integrity": "sha512-8wgMrvE546PzbR5WbYxUQogUnUDfM0S7QIFZMID+J73vdFARkFy+HElj4T+MWYhpXwlLp0EQ8Zoj8xUA0he4Vg==", - "requires": { - "bluebird": "^3.5.0", - "request-promise-core": "1.1.2", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" - } - }, - "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", - "requires": { - "lodash": "^4.17.11" } }, "request-promise-native": { @@ -4733,18 +4749,15 @@ "dev": true }, "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "^2.1.0" - } + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true }, "rxjs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", - "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.2.tgz", + "integrity": "sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -4767,7 +4780,8 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "sane": { "version": "4.1.0", @@ -4787,9 +4801,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -5119,6 +5133,7 @@ "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -5129,13 +5144,6 @@ "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - } } }, "stack-utils": { @@ -5168,7 +5176,8 @@ "stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true }, "string-length": { "version": "2.0.0", @@ -5277,9 +5286,9 @@ "dev": true }, "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { @@ -5431,6 +5440,7 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, "requires": { "psl": "^1.1.28", "punycode": "^2.1.1" @@ -5446,19 +5456,26 @@ } }, "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", "dev": true }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, "requires": { "safe-buffer": "^5.0.1" } }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -5469,22 +5486,11 @@ } }, "type-fest": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", - "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, - "uglify-js": { - "version": "3.6.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.9.tgz", - "integrity": "sha512-pcnnhaoG6RtrvHJ1dFncAe8Od6Nuy30oaJ82ts6//sGSXOP5UjBMEthiProjXmMNHOfd93sqlkztifFMcb+4yw==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.3", - "source-map": "~0.6.1" - } - }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", @@ -5541,6 +5547,7 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, "requires": { "punycode": "^2.1.0" } @@ -5573,14 +5580,15 @@ } }, "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true }, "v8-compile-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", - "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", "dev": true }, "validate-npm-package-license": { @@ -5597,6 +5605,7 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -5680,12 +5689,6 @@ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", "dev": true }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", @@ -5761,13 +5764,10 @@ "dev": true }, "yaml": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.3.tgz", - "integrity": "sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.7" - } + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==", + "dev": true }, "yargs": { "version": "13.3.0", @@ -5813,9 +5813,9 @@ } }, "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/package.json b/package.json index 9f61b17..718bbbc 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,37 @@ { "name": "mc-stats", - "version": "1.0.6", - "description": "", - "main": "app.js", - "scripts": { - "lint": "eslint --fix .", - "dev": "nodemon ./test/test.js" - }, - "author": "", + "version": "1.0.7", + "description": "Wrapper for fetching player stats from popular Minecraft networks.", + "author": "Robert (Discord: Robert#0006), Tj (Discord: Tj#0215)", "license": "MIT", + "keywords": [ + "minecraft", + "hypixel", + "wynncraft", + "hivemc", + "funcraft", + "blocksmc" + ], + "repository": { + "type": "git", + "url": "git://github.com/treboryx/mc-stats.git" + }, + "main": "app.js", "dependencies": { "cheerio": "^1.0.0-rc.3", - "cloudscraper": "^4.1.4", - "moment": "^2.24.0", + "moment": "^2.27.0", "moment-duration-format": "^2.3.2", - "node-fetch": "^2.6.0", - "omit-empty": "^1.0.0", - "request": "^2.88.0" + "node-fetch": "^2.6.0" }, "devDependencies": { - "eslint": "^6.6.0", - "husky": "^4.2.3", + "eslint": "^6.8.0", + "husky": "^4.2.5", "jest": "^24.9.0" }, + "scripts": { + "lint": "eslint --fix .", + "dev": "nodemon ./test/test.js" + }, "husky": { "hooks": { "pre-commit": "npm run lint" diff --git a/test/test.js b/test/test.js index 53952a0..e57d4f0 100644 --- a/test/test.js +++ b/test/test.js @@ -1,8 +1,10 @@ const mc = require("../app.js"); const main = async () => { + // mc.mccentral("kitpvp", "leaderboard").then(r => console.log(r)); + // mc.munchymc("badboyhalo", "player").then(r => console.log(r)); // mc.hypixelPlayer("Dinnerbone").then(r => console.log(r)); - // mc.blocksmc("_IPlozSawdadawd").then(r => console.log(r)); + // mc.blocksmc("_IPlozSawdadawd". "player").then(r => console.log(r)); // mc.funcraft("nathan818").then(r => console.log(r)); // mc.mineplex("xeiu").then(r => console.log(r)); // mc.manacube("KaiYara12").then(r => console.log(r));