From 497b012675410da5514dbe02dd54a96a1bd6a425 Mon Sep 17 00:00:00 2001 From: Brendan Lane Date: Fri, 27 Nov 2020 19:23:10 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=BB=20Sync=20with=20local?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc.json | 6 +- .gitignore | 1 + main.js | 436 ++++++++++++- modules/auth.js | 66 +- modules/eco.js | 430 ++++++------- modules/group.js | 156 ++--- modules/premade.js | 36 +- modules/user.js | 306 ++++----- package-lock.json | 1527 +++++++++++++++++++++++++++++++++++++++++++- package.json | 15 +- test.js | 44 +- 11 files changed, 2472 insertions(+), 551 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 854458b..fdf16c7 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,13 +1,15 @@ { "env": { + "commonjs": true, "es2021": true, "node": true }, "extends": "eslint:recommended", + "parser": "babel-eslint", "parserOptions": { - "ecmaVersion": 12, - "sourceType": "module" + "ecmaVersion": 12 }, "rules": { + "strict": 0 } } diff --git a/.gitignore b/.gitignore index 5afed30..5d87176 100644 --- a/.gitignore +++ b/.gitignore @@ -245,3 +245,4 @@ dmypy.json .pytype/ # End of https://www.toptal.com/developers/gitignore/api/node,python +test.js diff --git a/main.js b/main.js index ee0e6fb..905a786 100644 --- a/main.js +++ b/main.js @@ -1,16 +1,426 @@ // SpookVooper API - main.js -// Written by Brendan Lane +// Written by Brendan Lane - https://brndnln.dev/ -import eco from "./modules/eco.js"; -import group from "./modules/group.js"; -import user from "./modules/user.js"; -import auth from "./modules/auth.js"; -import premade from "./modules/premade.js"; +const userURL = "https://api.spookvooper.com/user"; +const groupURL = "https://api.spookvooper.com/group"; +const ecoURL = "https://api.spookvooper.com/eco"; +const authURL = "https://spookvooper.com/oauth2"; -export default { - eco, - group, - user, - auth, - premade -}; \ No newline at end of file +const axios = require('axios'); +let urlReturn; + +class User { + #apikey = undefined; + + constructor(svid) { + this.svid = svid + } + + getUser() { + return new Promise((resolve, reject) => { + axios.get(`${userURL}/getUser?svid=${this.svid}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + getUsername() { + return new Promise((resolve, reject) => { + axios.get(`${userURL}/getUsername?svid=${this.svid}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + getBalance() { + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/getBalance?svid=${this.svid}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + hasDiscordRole(role) { + return new Promise((resolve, reject) => { + axios.get(`${userURL}/hasDiscordRole?userid=${this.svid}&role=${role}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + getDiscordRoles() { + return new Promise((resolve, reject) => { + axios.get(`${userURL}/getDiscordRoles?svid=${this.svid}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + getDaysSinceLastMove() { + return new Promise((resolve, reject) => { + axios.get(`${userURL}/getDaysSinceLastMove?svid=${this.svid}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + setApiKey(key) { + this.#apikey = key; + } + + sendCredits(amount, to, reason) { + if (typeof to === "string") { + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/sendTransactionByIds?from=${this.svid}&to=${to}&amount=${amount}&auth=${this.#apikey}&detail=${reason}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } else if (typeof to === "object") { + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/sendTransactionByIds?from=${this.svid}&to=${to.svid}&amount=${amount}&auth=${this.#apikey}&detail=${reason}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } else { + throw "The 'to' parameter must be a string or an object!"; + } + } + + getUserStockOffers(ticker) { + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/getUserStockOffers?ticker=${ticker}&svid=${this.svid}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + buyStock(ticker, amount, price) { + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/submitStockBuy?ticker=${ticker}&count=${amount}&price=${price}&accountid=${this.svid}&auth=${this.#apikey}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + sellStock(ticker, amount, price) { + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/submitStockSell?ticker=${ticker}&count=${amount}&price=${price}&accountid=${this.svid}&auth=${this.#apikey}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + cancelStockOrder(orderid) { + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/cancelOrder?orderid=${orderid}&accountid=${this.svid}&auth=${this.#apikey}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } +} + +class Stock { + constructor(ticker) { + this.ticker = ticker; + } + + getValue() { + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/getStockValue?ticker=${this.ticker}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + getStockBuyPrice() { + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/getStockBuyPrice?ticker=${this.ticker}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + getQueueInfo(type) { + switch (type) { + case "BUY": + break; + + case "SELL": + break; + + default: + throw "Parameter 'type' must be 'BUY' or 'SELL'" + } + + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/getQueueInfo?ticker=${this.ticker}&type=${type}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + getOwner() { + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/getOwnerData?ticker=${this.ticker}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } +} + +class District { + constructor(name) { + this.name = name; + } + + getWealth(type) { + switch (type) { + case "ALL": + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/getDistrictWealth?id=${this.name}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + + case "USER": + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/getDistrictUserWealth?id=${this.name}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + + case "GROUP": + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/getDistrictGroupWealth?id=${this.name}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + + default: + throw "Parameter 'type' must be 'ALL', 'USER', or 'GROUP'"; + } + } +} + +class Group { + #apikey = undefined; + + constructor(name) { + this.name = name; + } + + getGroup() { + return new Promise((resolve, reject) => { + axios.get(`${groupURL}/getGroup?svid=${this.svid}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + setApiKey(key) { + this.#apikey = key; + } + + sendCredits(amount, to, reason) { + if (typeof to === "string") { + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/sendTransactionByIds?from=${this.svid}&to=${to}&amount=${amount}&auth=${this.#apikey}&detail=${reason}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } else if (typeof to === "object") { + return new Promise((resolve, reject) => { + axios.get(`${ecoURL}/sendTransactionByIds?from=${this.svid}&to=${to.svid}&amount=${amount}&auth=${this.#apikey}&detail=${reason}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } else { + throw "The 'to' parameter must be a string or an object!"; + } + } + + doesGroupExist() { + return new Promise((resolve, reject) => { + axios.get(`${groupURL}/doesGroupExist?svid=${this.svid}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + getGroupMembers() { + return new Promise((resolve, reject) => { + axios.get(`${groupURL}/getGroupMembers?svid=${this.svid}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + + hasGroupPermission(user, permission) { + if (typeof to === "string") { + return new Promise((resolve, reject) => { + axios.get(`${groupURL}/hasGroupPermission?svid=${this.svid}&usersvid=${user}&permission=${permission}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } else if (typeof to === "object") { + return new Promise((resolve, reject) => { + axios.get(`${groupURL}/hasGroupPermission?svid=${this.svid}&usersvid=${user.svid}&permission=${permission}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } + } +} + +class Auth { + #clientsecret = undefined; + #authcode = undefined; + + constructor(clientid, clientsecret) { + this.clientid = clientid; + this.#clientsecret = clientsecret; + } + + genLink(redirect, scope, state) { + if (redirect === undefined || scope === undefined) { + throw "Both parameters 'redirect' and 'scope' must be defined!" + } else if (state === undefined) { + state = ""; + urlReturn = `${authURL}/authorize?response_type=code&client_id=${this.clientid}&redirect_uri=${redirect}&scope=${scope}&state=${state}`; + urlReturn = urlReturn.split(" ").join("%20"); + return urlReturn; + } else { + urlReturn = `${authURL}/authorize?response_type=code&client_id=${this.clientid}&redirect_uri=${redirect}&scope=${scope}&state=${state}`; + urlReturn = urlReturn.split(" ").join("%20"); + return urlReturn; + } + } + + setAuthCode(authcode) { + this.#authcode = authcode; + } + + requestToken(redirect) { + return new Promise((resolve, reject) => { + axios.get(`${authURL}/requestToken?grant_type=authorization_code&code=${this.#authcode}&redirect_uri=${redirect}&client_id=${this.clientid}&client_secret=${this.#clientsecret}`) + .then(function (response) { + resolve(response.data); + }) + .catch(function (error) { + reject(error); + }); + }); + } +} + +module.exports = { + User, + Stock, + District, + Group, + Auth +} \ No newline at end of file diff --git a/modules/auth.js b/modules/auth.js index ac47cc3..940bf5b 100644 --- a/modules/auth.js +++ b/modules/auth.js @@ -2,10 +2,10 @@ // Written by Brendan Lane /** @module modules/auth */ -import axios from "axios"; +import axios from 'axios' -let baseURL = "https://spookvooper.com/oauth2"; -let urlReturn; +const baseURL = 'https://spookvooper.com/oauth2' +let urlReturn /** * Generates a Oauth2 URL for you. This just builds a string and DOES NOT need a promise. For any updates on how this works, check #sv-developer in the discord server. https://discord.gg/spookvooper. Get more information at the wiki. https://github.com/bowlingballindustries/spookvooper-api/wiki/Auth#authorize @@ -17,19 +17,19 @@ let urlReturn; * @param {string} state The state parameter can have anything here. Will be returned to the server upon completion. This parameter is optional. * @returns {string} Will return a string containing a link to the Oauth2 authorization page. If there is an error, it will return "ERROR: Oauth2 URL Builder - A required variable is undefined or is missing." */ -function authorize(response_type, client_id, redirect_uri, scope, state) { - if (response_type === undefined || client_id === undefined || redirect_uri === undefined || scope === undefined) { - return "ERROR: Oauth2 URL Builder - A required variable is undefined or is missing."; - } else if (state === undefined) { - state = ""; - urlReturn = `${baseURL}/authorize?response_type=${response_type}&client_id=${client_id}&redirect_uri=${redirect_uri}&scope=${scope}&state=${state}`; - urlReturn = urlReturn.split(" ").join("%20"); - return urlReturn; - } else { - urlReturn = `${baseURL}/authorize?response_type=${response_type}&client_id=${client_id}&redirect_uri=${redirect_uri}&scope=${scope}&state=${state}`; - urlReturn = urlReturn.split(" ").join("%20"); - return urlReturn; - } +function authorize (response_type, client_id, redirect_uri, scope, state) { + if (response_type === undefined || client_id === undefined || redirect_uri === undefined || scope === undefined) { + return 'ERROR: Oauth2 URL Builder - A required variable is undefined or is missing.' + } else if (state === undefined) { + state = '' + urlReturn = `${baseURL}/authorize?response_type=${response_type}&client_id=${client_id}&redirect_uri=${redirect_uri}&scope=${scope}&state=${state}` + urlReturn = urlReturn.split(' ').join('%20') + return urlReturn + } else { + urlReturn = `${baseURL}/authorize?response_type=${response_type}&client_id=${client_id}&redirect_uri=${redirect_uri}&scope=${scope}&state=${state}` + urlReturn = urlReturn.split(' ').join('%20') + return urlReturn + } } /** @@ -43,23 +43,23 @@ function authorize(response_type, client_id, redirect_uri, scope, state) { * @param {boolean} errToConsole If there is an error, send it to console, instead of returning. Defaults to false * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a JSON Object containing the token, expire time in seconds, and the svid of the authorized user). */ -function requestToken(grant_type, code, redirect_uri, client_id, client_secret, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/requestToken?grant_type=${grant_type}&code=${code}&redirect_uri=${redirect_uri}&client_id=${client_id}&client_secret=${client_secret}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function requestToken (grant_type, code, redirect_uri, client_id, client_secret, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/requestToken?grant_type=${grant_type}&code=${code}&redirect_uri=${redirect_uri}&client_id=${client_id}&client_secret=${client_secret}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } export default { - authorize, - requestToken -}; + authorize, + requestToken +} diff --git a/modules/eco.js b/modules/eco.js index bc3cc2e..405ee39 100644 --- a/modules/eco.js +++ b/modules/eco.js @@ -2,9 +2,9 @@ // Written by Brendan Lane /** @module modules/eco */ -import axios from "axios"; +import axios from 'axios' -let baseURL = "https://api.spookvooper.com/eco"; +const baseURL = 'https://api.spookvooper.com/eco' /** * Gets the balance of a user, given their svid. @@ -14,20 +14,20 @@ let baseURL = "https://api.spookvooper.com/eco"; * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a decimal). * @author Brendan Lane */ -function getBalance(svid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getBalance?svid=${svid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getBalance (svid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getBalance?svid=${svid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -42,20 +42,20 @@ function getBalance(svid, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a string). * @author Brendan Lane */ -function sendTransactionByIDs(to, from, amount, auth, detail, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/sendTransactionByIDs?to=${to}&from=${from}&amount=${amount}&auth=${auth}&detail=${detail}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function sendTransactionByIDs (to, from, amount, auth, detail, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/sendTransactionByIDs?to=${to}&from=${from}&amount=${amount}&auth=${auth}&detail=${detail}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -66,20 +66,20 @@ function sendTransactionByIDs(to, from, amount, auth, detail, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a decimal). * @author Brendan Lane */ -function getStockValue(ticker, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getStockValue?ticker=${ticker}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getStockValue (ticker, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getStockValue?ticker=${ticker}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -88,25 +88,25 @@ function getStockValue(ticker, errToConsole) { * @param {string} ticker The ticker id * @param {string} type Can be "MINUTE", "HOUR", or "DAY" * @param {string} count How far back to go. Don't use a count over 60! - * @param {string} interval Set the time interval beteen data points + * @param {string} interval Set the time interval beteen data points * @param {boolean} errToConsole If there is an error, send it to console, instead of returning. Defaults to false * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be an array). * @author Brendan Lane */ -function getStockHistory(ticker, type, count, interval, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getStockHistory?ticker=${ticker}&type=${type}&count=${count}&interval=${interval}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getStockHistory (ticker, type, count, interval, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getStockHistory?ticker=${ticker}&type=${type}&count=${count}&interval=${interval}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -121,20 +121,20 @@ function getStockHistory(ticker, type, count, interval, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a tesult). * @author Brendan Lane */ -function submitStockBuy(ticker, count, price, accountid, auth, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/submitStockBuy?ticker=${ticker}&count=${count}&price=${price}&accountid=${accountid}&auth=${auth}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function submitStockBuy (ticker, count, price, accountid, auth, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/submitStockBuy?ticker=${ticker}&count=${count}&price=${price}&accountid=${accountid}&auth=${auth}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -142,27 +142,27 @@ function submitStockBuy(ticker, count, price, accountid, auth, errToConsole) { * @function submitStockSell * @param {string} ticker The ticker id * @param {string} count How many stocks you want to sell - * @param {string} price How much you want to sell each stock for + * @param {string} price How much you want to sell each stock for * @param {string} accountid The SVID of the account (user or group) you'd like to sell from. * @param {string} auth API Key that has authentication to use the account specified in accountid or use oauthkey|app_secret formula for Oauth2. * @param {boolean} errToConsole If there is an error, send it to console, instead of returning. Defaults to false * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a result). * @author Brendan Lane */ -function submitStockSell(ticker, count, price, accountid, auth, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/submitStockSell?ticker=${ticker}&count=${count}&price=${price}&accountid=${accountid}&auth=${auth}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function submitStockSell (ticker, count, price, accountid, auth, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/submitStockSell?ticker=${ticker}&count=${count}&price=${price}&accountid=${accountid}&auth=${auth}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -175,20 +175,20 @@ function submitStockSell(ticker, count, price, accountid, auth, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a result). * @author Brendan Lane */ -function cancelOrder(orderid, accountid, auth, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/submitStockBuy?orderid=${orderid}&accountid=${accountid}&auth=${auth}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function cancelOrder (orderid, accountid, auth, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/submitStockBuy?orderid=${orderid}&accountid=${accountid}&auth=${auth}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -199,20 +199,20 @@ function cancelOrder(orderid, accountid, auth, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a decimal). * @author Brendan Lane */ -function getStockBuyPrice(ticker, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getStockBuyPrice?ticker=${ticker}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getStockBuyPrice (ticker, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getStockBuyPrice?ticker=${ticker}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -224,20 +224,20 @@ function getStockBuyPrice(ticker, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a decimal). * @author Brendan Lane */ -function getQueueInfo(ticker, type, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getQueueInfo?ticker=${ticker}&type=${type}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getQueueInfo (ticker, type, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getQueueInfo?ticker=${ticker}&type=${type}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -249,20 +249,20 @@ function getQueueInfo(ticker, type, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be an array). * @author Brendan Lane */ -function getUserStockOffers(ticker, svid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getUserStockOffers?ticker=${ticker}&svid=${svid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getUserStockOffers (ticker, svid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getUserStockOffers?ticker=${ticker}&svid=${svid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -273,20 +273,20 @@ function getUserStockOffers(ticker, svid, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a decimal). * @author Brendan Lane */ -function getDistrictWealth(id, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getDistrictWealth?id=${id}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getDistrictWealth (id, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getDistrictWealth?id=${id}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -297,20 +297,20 @@ function getDistrictWealth(id, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a decimal). * @author Brendan Lane */ -function getDistrictUserWealth(id, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getDistrictUserWealth?id=${id}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getDistrictUserWealth (id, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getDistrictUserWealth?id=${id}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -321,20 +321,20 @@ function getDistrictUserWealth(id, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a decimal). * @author Brendan Lane */ -function getDistrictGroupWealth(id, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getDistrictGroupWealth?id=${id}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getDistrictGroupWealth (id, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getDistrictGroupWealth?id=${id}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -344,35 +344,35 @@ function getDistrictGroupWealth(id, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a JSON Object). * @author Brendan Lane */ -function getOwnerData(ticker, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getOwnerData?ticker=${ticker}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getOwnerData (ticker, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getOwnerData?ticker=${ticker}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } export default { - getBalance, - sendTransactionByIDs, - getStockValue, - getStockHistory, - submitStockBuy, - submitStockSell, - cancelOrder, - getStockBuyPrice, - getQueueInfo, - getUserStockOffers, - getDistrictWealth, - getDistrictUserWealth, - getDistrictGroupWealth, - getOwnerData -}; + getBalance, + sendTransactionByIDs, + getStockValue, + getStockHistory, + submitStockBuy, + submitStockSell, + cancelOrder, + getStockBuyPrice, + getQueueInfo, + getUserStockOffers, + getDistrictWealth, + getDistrictUserWealth, + getDistrictGroupWealth, + getOwnerData +} diff --git a/modules/group.js b/modules/group.js index 1f8c362..0a2a488 100644 --- a/modules/group.js +++ b/modules/group.js @@ -2,9 +2,9 @@ // Written by Brendan Lane /** @module modules/group */ -import axios from "axios"; +import axios from 'axios' -let baseURL = "https://api.spookvooper.com/group"; +const baseURL = 'https://api.spookvooper.com/group' /** * Checks if a group exists. @@ -14,20 +14,20 @@ let baseURL = "https://api.spookvooper.com/group"; * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a boolean). * @author Brendan Lane */ -function doesGroupExist(svid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/doesGroupExist?svid=${svid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function doesGroupExist (svid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/doesGroupExist?svid=${svid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -38,20 +38,20 @@ function doesGroupExist(svid, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a JSON object). * @author Brendan Lane */ -function getGroupMembers(svid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getGroupMembers?svid=${svid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getGroupMembers (svid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getGroupMembers?svid=${svid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -64,20 +64,20 @@ function getGroupMembers(svid, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a JSON object). * @author Brendan Lane */ -function hasGroupPermission(svid, usersvid, permission, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/hasGroupPermission?svid=${svid}&usersvid=${usersvid}&permission=${permission}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function hasGroupPermission (svid, usersvid, permission, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/hasGroupPermission?svid=${svid}&usersvid=${usersvid}&permission=${permission}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -88,20 +88,20 @@ function hasGroupPermission(svid, usersvid, permission, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a JSON object). * @author Brendan Lane */ -function getSvidFromName(name, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getSvidFromName?name=${name}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getSvidFromName (name, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getSvidFromName?name=${name}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -112,26 +112,26 @@ function getSvidFromName(name, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a JSON object). * @author Brendan Lane */ -function getName(svid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getName?svid=${svid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getName (svid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getName?svid=${svid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } export default { - doesGroupExist, - getGroupMembers, - hasGroupPermission, - getSvidFromName, - getName -}; \ No newline at end of file + doesGroupExist, + getGroupMembers, + hasGroupPermission, + getSvidFromName, + getName +} diff --git a/modules/premade.js b/modules/premade.js index 23683ac..f51eb6a 100644 --- a/modules/premade.js +++ b/modules/premade.js @@ -2,10 +2,10 @@ // Written by Brendan Lane /** @module modules/premade */ -import user from "./user.js"; -import eco from "./eco.js"; +import user from './user.js' +import eco from './eco.js' -let StockOwnerAmount; +let StockOwnerAmount /** * Gets the total XP of a user @@ -13,12 +13,12 @@ let StockOwnerAmount; * @param {string} svid The svid of the user you want to lookup. * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be an integer). */ -function getTotalXP(svid) { - return new Promise((resolve) => { - user.getUser(svid, true).then(value => { - resolve(value.post_likes + value.comment_likes + (value.twitch_message_xp * 4) + (value.discord_commends * 5) + (value.discord_message_xp * 2) + (value.discord_game_xp / 100)); - }); - }); +function getTotalXP (svid) { + return new Promise((resolve) => { + user.getUser(svid, true).then(value => { + resolve(value.post_likes + value.comment_likes + (value.twitch_message_xp * 4) + (value.discord_commends * 5) + (value.discord_message_xp * 2) + (value.discord_game_xp / 100)) + }) + }) } /** @@ -27,16 +27,16 @@ function getTotalXP(svid) { * @param {string} ticker The ticker you want to lookup. * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be an Object). */ -function getStockOwner(ticker) { - return new Promise((resolve) => { - eco.getOwnerData(ticker, true).then(value => { - StockOwnerAmount = value.length - 1; - resolve({ name: `${value[StockOwnerAmount].ownerName}`, amount: value[StockOwnerAmount].amount }); - }) +function getStockOwner (ticker) { + return new Promise((resolve) => { + eco.getOwnerData(ticker, true).then(value => { + StockOwnerAmount = value.length - 1 + resolve({ name: `${value[StockOwnerAmount].ownerName}`, amount: value[StockOwnerAmount].amount }) }) + }) } export default { - getTotalXP, - getStockOwner -}; + getTotalXP, + getStockOwner +} diff --git a/modules/user.js b/modules/user.js index 685cace..3d86767 100644 --- a/modules/user.js +++ b/modules/user.js @@ -2,9 +2,9 @@ // Written by Brendan Lane /** @module modules/user */ -import axios from "axios"; +import axios from 'axios' -let baseURL = "https://api.spookvooper.com/user"; +const baseURL = 'https://api.spookvooper.com/user' /** * Gets information on the user @@ -14,20 +14,20 @@ let baseURL = "https://api.spookvooper.com/user"; * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a JSON object). * @author Brendan Lane */ -function getUser(svid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getUser?svid=${svid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getUser (svid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getUser?svid=${svid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -38,20 +38,20 @@ function getUser(svid, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a string). * @author Brendan Lane */ -function getUsername(svid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getUsername?svid=${svid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getUsername (svid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getUsername?svid=${svid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -62,20 +62,20 @@ function getUsername(svid, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a string). * @author Brendan Lane */ -function getSvidFromUsername(username, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getSvidFromUsername?username=${username}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getSvidFromUsername (username, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getSvidFromUsername?username=${username}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -86,20 +86,20 @@ function getSvidFromUsername(username, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a string). * @author Brendan Lane */ -function getUsernameFromDiscord(discordid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getUsernameFromDiscord?discordid=${discordid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getUsernameFromDiscord (discordid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getUsernameFromDiscord?discordid=${discordid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -110,20 +110,20 @@ function getUsernameFromDiscord(discordid, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a string). * @author Brendan Lane */ -function getSvidFromDiscord(discordid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getSvidFromDiscord?discordid=${discordid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getSvidFromDiscord (discordid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getSvidFromDiscord?discordid=${discordid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -134,20 +134,20 @@ function getSvidFromDiscord(discordid, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a string). * @author Brendan Lane */ -function getUsernameFromMinecraft(minecraftid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getUsernameFromMinecraft?minecraftid=${minecraftid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getUsernameFromMinecraft (minecraftid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getUsernameFromMinecraft?minecraftid=${minecraftid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -158,20 +158,20 @@ function getUsernameFromMinecraft(minecraftid, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a string). * @author Brendan Lane */ -function getSvidFromMinecraft(minecraftid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getSvidFromMinecraft?minecraftid=${minecraftid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getSvidFromMinecraft (minecraftid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getSvidFromMinecraft?minecraftid=${minecraftid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -183,20 +183,20 @@ function getSvidFromMinecraft(minecraftid, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a boolean). * @author Brendan Lane */ -function hasDiscordRole(userid, role, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/hasDiscordRole?userid=${userid}&role=${role}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function hasDiscordRole (userid, role, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/hasDiscordRole?userid=${userid}&role=${role}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -207,20 +207,20 @@ function hasDiscordRole(userid, role, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a JSON Object). * @author Brendan Lane */ -function getDiscordRoles(svid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getDiscordRoles?svid=${svid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getDiscordRoles (svid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getDiscordRoles?svid=${svid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } /** @@ -231,31 +231,31 @@ function getDiscordRoles(svid, errToConsole) { * @returns {string} The data from the HTTP GET request, but because of the way it's handled, will always be a string (should be a integer). * @author Brendan Lane */ -function getDaysSinceLastMove(svid, errToConsole) { - return new Promise((resolve, reject) => { - axios.get(`${baseURL}/getDaysSinceLastMove?svid=${svid}`) - .then(function (response) { - resolve(response.data); - }) - .catch(function (error) { - if (errToConsole) { - console.warn(error); - } else { - reject(error); - } - }); - }); +function getDaysSinceLastMove (svid, errToConsole) { + return new Promise((resolve, reject) => { + axios.get(`${baseURL}/getDaysSinceLastMove?svid=${svid}`) + .then(function (response) { + resolve(response.data) + }) + .catch(function (error) { + if (errToConsole) { + console.warn(error) + } else { + reject(error) + } + }) + }) } export default { - getUser, - getUsername, - getSvidFromUsername, - getUsernameFromDiscord, - getSvidFromDiscord, - getUsernameFromMinecraft, - getSvidFromMinecraft, - hasDiscordRole, - getDiscordRoles, - getDaysSinceLastMove -}; + getUser, + getUsername, + getSvidFromUsername, + getUsernameFromDiscord, + getSvidFromDiscord, + getUsernameFromMinecraft, + getSvidFromMinecraft, + hasDiscordRole, + getDiscordRoles, + getDaysSinceLastMove +} diff --git a/package-lock.json b/package-lock.json index 28374d7..5a37a86 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,1366 @@ { "name": "spookvooperapi", - "version": "1.0.0", - "lockfileVersion": 1, + "version": "1.3.0", + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "spookvooperapi", + "version": "1.3.0", + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "axios": "^0.20.0" + }, + "devDependencies": { + "babel-eslint": "^10.1.0", + "eslint": "^7.9.0", + "prettier": "^2.1.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/generator": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", + "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.10.4" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.11.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", + "dev": true + }, + "node_modules/@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", + "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + }, + "node_modules/@babel/traverse": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz", + "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", + "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "node_modules/acorn": { + "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, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true + }, + "node_modules/ajv": { + "version": "6.12.5", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.5.tgz", + "integrity": "sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.20.0.tgz", + "integrity": "sha512-ANA4rr2BDcmmAQLOKft2fufrtuvlqR+cXNNinUmvfeSNCOF98PZL+7M/v1zIdGo7OLjEA9J2gXJL+j4zGsl0bA==", + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/chalk/node_modules/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, + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/chalk/node_modules/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 + }, + "node_modules/chalk/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.9.0.tgz", + "integrity": "sha512-V6QyhX21+uXp4T+3nrNfI3hQNBDa/P8ga7LoQOenwrlEFXrEnUEE+ok1dMtaS3b6rmLXhT1TkTIsG75HMLbknA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.1.3", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.0", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^1.3.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-visitor-keys": { + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "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, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "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 + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "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, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "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, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mkdirp": { + "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, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.1.tgz", + "integrity": "sha512-9bY+5ZWCfqj3ghYBLxApy2zf6m+NJo5GzmLTpr9FsApsfjriNnS2dahWReHMi7qNPhhHl9SYHJs2cHZLgexNIw==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "dependencies": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-compile-cache": { + "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 + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + } + }, "dependencies": { "@babel/code-frame": { "version": "7.10.4", @@ -13,6 +1371,46 @@ "@babel/highlight": "^7.10.4" } }, + "@babel/generator": { + "version": "7.12.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.5.tgz", + "integrity": "sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A==", + "dev": true, + "requires": { + "@babel/types": "^7.12.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.10.4", + "@babel/template": "^7.10.4", + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dev": true, + "requires": { + "@babel/types": "^7.10.4" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dev": true, + "requires": { + "@babel/types": "^7.11.0" + } + }, "@babel/helper-validator-identifier": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", @@ -43,6 +1441,59 @@ } } }, + "@babel/parser": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.7.tgz", + "integrity": "sha512-oWR02Ubp4xTLCAqPRiNIuMVgNO5Aif/xpXtabhzW2HWUD47XJsAB4Zd/Rg30+XeQA3juXigV7hlquOTmwqLiwg==", + "dev": true + }, + "@babel/template": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.7.tgz", + "integrity": "sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7" + } + }, + "@babel/traverse": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.9.tgz", + "integrity": "sha512-iX9ajqnLdoU1s1nHt36JDI9KG4k+vmI8WgjK5d+aDTwQbL2fUnzedNedssA645Ede3PM2ma1n8Q4h2ohwXgMXw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-function-name": "^7.10.4", + "@babel/helper-split-export-declaration": "^7.11.0", + "@babel/parser": "^7.12.7", + "@babel/types": "^7.12.7", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.19" + }, + "dependencies": { + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.12.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.7.tgz", + "integrity": "sha512-MNyI92qZq6jrQkXvtIiykvl4WtoRrVV9MPn+ZfsoEENjiWcBQ3ZSHrkxnJWgWtLX3XXqX5hrSQ+X69wkmesXuQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, "@eslint/eslintrc": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", @@ -135,6 +1586,20 @@ "follow-redirects": "^1.10.0" } }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", @@ -474,6 +1939,12 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", @@ -512,6 +1983,15 @@ "type-fest": "^0.8.1" } }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -556,6 +2036,15 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -599,6 +2088,12 @@ "esprima": "^4.0.0" } }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -707,6 +2202,12 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -737,6 +2238,16 @@ "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", "dev": true }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -784,6 +2295,12 @@ "is-fullwidth-code-point": "^2.0.0" } }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -860,6 +2377,12 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 6be38b9..fdd0198 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,33 @@ { "name": "spookvooperapi", - "version": "1.2.0", + "version": "1.3.0", "description": "Easy to use library for the SpookVooper API", "main": "main.js", - "type": "module", + "type": "commonjs", "scripts": { "test": "node main.js" }, "repository": { "type": "git", - "url": "https://github.com/bowlingballindustries/spookvooper-api.git" + "url": "git+https://github.com/vexico/spookvooper-api.git" }, "keywords": [ "spookvooper", "api", "library" ], - "author": "bTech", + "author": "Vexi Technologies", "license": "SEE LICENSE IN LICENSE", "devDependencies": { + "babel-eslint": "^10.1.0", "eslint": "^7.9.0", "prettier": "^2.1.1" }, "dependencies": { "axios": "^0.20.0" - } + }, + "bugs": { + "url": "https://github.com/vexico/spookvooper-api/issues" + }, + "homepage": "https://vexi.cc/" } diff --git a/test.js b/test.js index 3875e52..d694cc4 100644 --- a/test.js +++ b/test.js @@ -1,35 +1,15 @@ -import svAPI from "./main.js"; +const SVAPI = require('./main.js') -/* -svAPI.eco.getBalance("02c977bb-0a6c-4eb2-bfca-5e9101025aaf", true).then(value => { - console.log(`[test.js] ${value}`); -}); -*/ +const spike = new SVAPI.User('u-2a0057e6-356a-4a49-b825-c37796cb7bd9') +const jacob = new SVAPI.User('u-c60c6bd8-0409-4cbd-8bb8-3c87e24c55f8') +const brendan = new SVAPI.User('u-02c977bb-0a6c-4eb2-bfca-5e9101025aaf') -svAPI.eco.getStockBuyPrice("VNB", true).then(value => { - console.log(`[VNB] Current Stock Buy Price: ${value}`); -}); +async function sex () { + console.log(await brendan.getBalance()) + console.log(await spike.getBalance()) + brendan.setApiKey('api-key') + await brendan.sendCredits(1, 'u-2a0057e6-356a-4a49-b825-c37796cb7bd9', 'Testing SpookVooper API - DOWNLOAD IT NOW https://npmjs.org/package/spookvooperapi') + console.log(await brendan.getBalance()) + console.log(await spike.getBalance()) -svAPI.group.getSvidFromName("Bowling Ball Industries").then(value => { - console.log(`Bowling Ball Industries SVID: ${value}`); -}); - -svAPI.user.getUser("02c977bb-0a6c-4eb2-bfca-5e9101025aaf", true).then(value => { - console.log(`[lonr] getUser.userName value: ${value}`); -}); - -svAPI.premade.getTotalXP("02c977bb-0a6c-4eb2-bfca-5e9101025aaf").then(value => { - console.log(`Total XP for lonr: ${value}`); -}); - -svAPI.eco.getOwnerData("NEWS", true).then(value => { - console.log(`[NEWS] Owner Data: ${value[0].ownerName}`); -}); - -svAPI.premade.getStockOwner("NEWS").then(value => { - console.log(`[NEWS] Owner: ${value.name}`) -}) - -console.log(`Your Oauth2 URL: ${svAPI.auth.authorize("code", "AAAA-BBBBB-CCCCC-DDDD", "https://example.com/callback", "view", "succeeded")}`); - -// Intended result should be whats on this page: https://api.spookvooper.com/eco/getbalance?svid=02c977bb-0a6c-4eb2-bfca-5e9101025aaf +sex() \ No newline at end of file