diff --git a/backend/app.ts b/backend/app.ts index e98bf7e0..127e363e 100644 --- a/backend/app.ts +++ b/backend/app.ts @@ -1,6 +1,7 @@ -require("babel-register")({ - presets: ["es2015"], -}); +// need to manually import regeneratorRuntime for babel w/ async +// https://github.com/babel/babel/issues/9849#issuecomment-487040428 +// require("regenerator-runtime/runtime"); +import "regenerator-runtime/runtime"; // Run backend with interval cache updates. const { updateLumensCache } = require("./routes"); diff --git a/backend/ledgers.js b/backend/ledgers.ts similarity index 60% rename from backend/ledgers.js rename to backend/ledgers.ts index 1adbc7c7..80094345 100644 --- a/backend/ledgers.js +++ b/backend/ledgers.ts @@ -1,11 +1,24 @@ import stellarSdk from "stellar-sdk"; -import moment from "moment"; -import _ from "lodash"; -import * as postgres from "./postgres.js"; +import { map, pick } from "lodash"; +import { QueryTypes } from "sequelize"; +import { Response } from "express"; +import * as postgres from "./postgres"; -let cachedData; +interface Ledger { + date: string; + transaction_count: number; + operation_count: number; +} + +interface LedgerSql { + date: string; + transaction_count: string; + operation_count: string; +} -export const handler = function(req, res) { +let cachedData: Array; + +export const handler = function(_: any, res: Response) { res.send(cachedData); }; @@ -20,20 +33,19 @@ function updateResults() { order by 1 desc`; postgres.sequelize - .query(query, { type: postgres.sequelize.QueryTypes.SELECT }) - .then((results) => (cachedData = _.each(results, convertFields))); + .query(query, { type: QueryTypes.SELECT }) + .then((results: Array) => { + cachedData = map(results, convertFields); + }); } -function convertFields(ledger) { - // String to int fields - const fields = ["transaction_count", "operation_count"]; - for (let field of fields) { - ledger[field] = parseInt(ledger[field]); - } - - // Remove year from date - ledger["date"] = ledger["date"].substring(5); - return ledger; +function convertFields(ledger: LedgerSql): Ledger { + return { + // Remove year from date + date: ledger["date"].substring(5), + transaction_count: parseInt(ledger.transaction_count), + operation_count: parseInt(ledger.operation_count), + }; } // Wait for schema sync @@ -44,7 +56,7 @@ postgres.sequelize.addHook("afterBulkSync", () => { if (process.env.UPDATE_DATA == "true") { // Stream ledgers - get last paging_token/ postgres.LedgerStats.findOne({ order: [["sequence", "DESC"]] }).then( - (lastLedger) => { + (lastLedger: postgres.LedgerStats) => { let pagingToken; if (!lastLedger) { pagingToken = "now"; @@ -58,8 +70,9 @@ postgres.sequelize.addHook("afterBulkSync", () => { .cursor(pagingToken) .limit(200) .stream({ - onmessage: (ledger) => { - let newLedger = _.pick(ledger, [ + // TODO - use type any until https://github.com/stellar/js-stellar-sdk/issues/731 resolved + onmessage: (ledger: any) => { + let newLedger: any = pick(ledger, [ "sequence", "closed_at", "paging_token", diff --git a/backend/lumens.js b/backend/lumens.ts similarity index 72% rename from backend/lumens.js rename to backend/lumens.ts index cbd1abc0..eb26408d 100644 --- a/backend/lumens.js +++ b/backend/lumens.ts @@ -1,9 +1,21 @@ import * as commonLumens from "../common/lumens.js"; -import BigNumber from "bignumber.js"; +import { Response } from "express"; -export let cachedData; +interface CachedData { + updatedAt: Date; + totalCoins: string; + availableCoins: string; + programs: { + directDevelopment: string; + ecosystemSupport: string; + useCaseInvestment: string; + userAcquisition: string; + }; +} + +export let cachedData: CachedData; -export const v1Handler = function(req, res) { +export const v1Handler = function(_: any, res: Response) { res.send(cachedData); }; diff --git a/backend/postgres.js b/backend/postgres.js deleted file mode 100644 index 4ef03b57..00000000 --- a/backend/postgres.js +++ /dev/null @@ -1,71 +0,0 @@ -import Sequelize from "sequelize"; - -export const sequelize = new Sequelize( - process.env.DEV - ? "postgres://localhost/dashboard?sslmode=disable" - : process.env.POSTGRES_URL, - process.env.DEV - ? {} - : { - dialect: "postgres", - dialectOptions: { - ssl: { - require: true, - rejectUnauthorized: false, - }, - }, - }, -); - -export const NodeMeasurement = sequelize.define( - "node_measurement", - { - id: { - type: Sequelize.INTEGER, - primaryKey: true, - autoIncrement: true, - }, - node_id: { - type: Sequelize.STRING, - allowNull: false, - }, - date: { - type: Sequelize.DATE, - allowNull: false, - }, - status: { - type: Sequelize.INTEGER, - allowNull: false, - }, - }, - { - indexes: [{ unique: true, fields: ["node_id", "date"] }], - }, -); - -export const LedgerStats = sequelize.define("ledger_stats", { - sequence: { - type: Sequelize.INTEGER, - allowNull: false, - primaryKey: true, - }, - closed_at: { - type: Sequelize.DATE, - allowNull: false, - }, - paging_token: { - type: Sequelize.STRING, - allowNull: false, - }, - transaction_count: { - type: Sequelize.INTEGER, - allowNull: false, - }, - operation_count: { - type: Sequelize.INTEGER, - allowNull: false, - }, -}); - -// Create schema if doesn't exist -sequelize.sync({ hooks: true }); diff --git a/backend/postgres.ts b/backend/postgres.ts new file mode 100644 index 00000000..bdc2241e --- /dev/null +++ b/backend/postgres.ts @@ -0,0 +1,59 @@ +import { Sequelize, Model, DataTypes } from "sequelize"; + +export const sequelize = new Sequelize( + process.env.DEV + ? "postgres://localhost/dashboard?sslmode=disable" + : process.env.POSTGRES_URL || "", + process.env.DEV + ? {} + : { + dialect: "postgres", + dialectOptions: { + ssl: { + require: true, + rejectUnauthorized: false, + }, + }, + }, +); + +export class LedgerStats extends Model { + public sequence!: number; + public closed_at!: Date; + public paging_token!: string; + public transaction_count!: number; + public operation_count!: number; +} + +LedgerStats.init( + { + sequence: { + type: DataTypes.INTEGER, + allowNull: false, + primaryKey: true, + }, + closed_at: { + type: DataTypes.DATE, + allowNull: false, + }, + paging_token: { + type: DataTypes.STRING, + allowNull: false, + }, + transaction_count: { + type: DataTypes.INTEGER, + allowNull: false, + }, + operation_count: { + type: DataTypes.INTEGER, + allowNull: false, + }, + }, + { + tableName: "ledger_stats", + sequelize, + }, +); + +// Create schema if doesn't exist +sequelize.sync({ hooks: true }); diff --git a/backend/routes.js b/backend/routes.ts similarity index 89% rename from backend/routes.js rename to backend/routes.ts index 2b39becb..975eaaa5 100644 --- a/backend/routes.js +++ b/backend/routes.ts @@ -2,9 +2,9 @@ import express from "express"; import proxy from "express-http-proxy"; import logger from "morgan"; -import * as lumens from "./lumens.js"; -import * as lumensV2V3 from "./v2v3/lumens.js"; -import * as ledgers from "./ledgers.js"; +import * as lumens from "./lumens"; +import * as lumensV2V3 from "./v2v3/lumens"; +import * as ledgers from "./ledgers"; export var app = express(); app.set("port", process.env.PORT || 5000); @@ -16,7 +16,7 @@ if (process.env.DEV) { app.use( "/", proxy("localhost:3000", { - filter: function(req, res) { + filter: function(req, _) { return ( req.path == "/" || req.path.indexOf(".js") >= 0 || diff --git a/backend/v2v3/lumens.js b/backend/v2v3/lumens.ts similarity index 61% rename from backend/v2v3/lumens.js rename to backend/v2v3/lumens.ts index ac31247b..1c40153b 100644 --- a/backend/v2v3/lumens.js +++ b/backend/v2v3/lumens.ts @@ -1,42 +1,80 @@ import * as commonLumens from "../../common/lumens.js"; import BigNumber from "bignumber.js"; +import { Response } from "express"; const LUMEN_SUPPLY_METRICS_URL = "https://www.stellar.org/developers/guides/lumen-supply-metrics.html"; // v2: -export let lumensDataV2; +interface LumensDataV2 { + updatedAt: Date; + originalSupply: string; + inflationLumens: string; + burnedLumens: string; + totalSupply: string; + upgradeReserve: string; + feePool: string; + sdfMandate: string; + circulatingSupply: string; + _details: string; +} + +export let lumensDataV2: LumensDataV2; /* For CoinMarketCap */ -let totalSupplyData; -let circulatingSupplyData; +let totalSupplyData: number; +let circulatingSupplyData: number; -export const v2Handler = function(req, res) { +export const v2Handler = function(_: any, res: Response) { res.send(lumensDataV2); }; -export const v2TotalSupplyHandler = function(req, res) { +export const v2TotalSupplyHandler = function(_: any, res: Response) { res.json(totalSupplyData); }; -export const v2CirculatingSupplyHandler = function(req, res) { +export const v2CirculatingSupplyHandler = function(_: any, res: Response) { res.json(circulatingSupplyData); }; // v3: -export let lumensDataV3; -export let totalSupplyCheckResponse; +interface LumensDataV3 { + updatedAt: Date; + originalSupply: string; + inflationLumens: string; + burnedLumens: string; + totalSupply: BigNumber; + upgradeReserve: string; + feePool: string; + sdfMandate: string; + circulatingSupply: BigNumber; + _details: string; +} +export let lumensDataV3: LumensDataV3; + +interface TotalSupplyCheckResponse { + updatedAt: Date; + totalSupply: BigNumber; + inflationLumens: string; + burnedLumens: string; + totalSupplySum: BigNumber; + upgradeReserve: string; + feePool: string; + sdfMandate: string; + circulatingSupply: BigNumber; +} +export let totalSupplyCheckResponse: TotalSupplyCheckResponse; -export const v3Handler = function(req, res) { +export const v3Handler = function(_: any, res: Response) { res.send(lumensDataV3); }; -export const totalSupplyCheckHandler = function(req, res) { +export const totalSupplyCheckHandler = function(_: any, res: Response) { res.json(totalSupplyCheckResponse); }; /* For CoinMarketCap */ -export const v3TotalSupplyHandler = function(req, res) { +export const v3TotalSupplyHandler = function(_: any, res: Response) { res.json(totalSupplyCheckResponse.totalSupplySum); }; -export const v3CirculatingSupplyHandler = function(req, res) { +export const v3CirculatingSupplyHandler = function(_: any, res: Response) { res.json(totalSupplyCheckResponse.circulatingSupply); }; @@ -75,8 +113,8 @@ export function updateApiLumens() { }; /* For CoinMarketCap */ - totalSupplyData = totalSupply * 1; - circulatingSupplyData = circulatingSupply * 1; + totalSupplyData = Number(totalSupply); + circulatingSupplyData = Number(circulatingSupply); console.log("/api/v2/lumens data saved!"); diff --git a/common/lumens.d.ts b/common/lumens.d.ts new file mode 100644 index 00000000..04b573a4 --- /dev/null +++ b/common/lumens.d.ts @@ -0,0 +1,15 @@ +export var ORIGINAL_SUPPLY_AMOUNT: string; +export function getLumenBalance(horizonURL: string, accountId: string): string; +export function totalLumens(horizonURL: string): string; +export function inflationLumens(): Promise; +export function feePool(): string; +export function burnedLumens(): string; +export function directDevelopmentAll(): Promise; +export function distributionEcosystemSupport(): Promise; +export function distributionUseCaseInvestment(): Promise; +export function distributionUserAcquisition(): Promise; +export function getUpgradeReserve(): string; +export function sdfAccounts(): Promise; +export function totalSupply(): Promise; +export function noncirculatingSupply(): Promise; +export function circulatingSupply(): Promise; diff --git a/common/lumens.js b/common/lumens.js index ccd13e40..a1b32585 100644 --- a/common/lumens.js +++ b/common/lumens.js @@ -1,10 +1,10 @@ // This file contains functions used both in backend and frontend code. // Will be helpful to build distribution stats API. -import axios from "axios"; -import BigNumber from "bignumber.js"; -import map from "lodash/map"; -import reduce from "lodash/reduce"; -import find from "lodash/find"; +const axios = require("axios"); +const BigNumber = require("bignumber.js"); +const map = require("lodash/map"); +const reduce = require("lodash/reduce"); +const find = require("lodash/find"); const horizonLiveURL = "https://horizon.stellar.org"; @@ -47,9 +47,12 @@ const accounts = { "GBI5PADO5TEDY3R6WFAO2HEKBTTZS4LGR77XM4AHGN52H45ENBWGDFOH", }; -export const ORIGINAL_SUPPLY_AMOUNT = "100000000000"; +const ORIGINAL_SUPPLY_AMOUNT = "100000000000"; -export function getLumenBalance(horizonURL, accountId) { +exports.ORIGINAL_SUPPLY_AMOUNT = ORIGINAL_SUPPLY_AMOUNT; + +exports.getLumenBalance = getLumenBalance; +function getLumenBalance(horizonURL, accountId) { return axios .get(`${horizonURL}/accounts/${accountId}`) .then((response) => { @@ -72,14 +75,15 @@ function sumRelevantAccounts(accounts) { ).then((data) => data .reduce( - (sum, currentBalance) => new BigNumber(currentBalance).add(sum), + (sum, currentBalance) => new BigNumber(currentBalance).plus(sum), new BigNumber(0), ) .toString(), ); } -export function totalLumens(horizonURL) { +exports.totalLumens = totalLumens; +function totalLumens(horizonURL) { return axios .get(`${horizonURL}/ledgers/?order=desc&limit=1`) .then((response) => { @@ -87,7 +91,8 @@ export function totalLumens(horizonURL) { }); } -export function inflationLumens() { +exports.inflationLumens = inflationLumens; +function inflationLumens() { return Promise.all([ totalLumens(horizonLiveURL), ORIGINAL_SUPPLY_AMOUNT, @@ -97,7 +102,8 @@ export function inflationLumens() { }); } -export function feePool() { +exports.feePool = feePool; +function feePool() { return axios .get(`${horizonLiveURL}/ledgers/?order=desc&limit=1`) .then((response) => { @@ -105,7 +111,8 @@ export function feePool() { }); } -export function burnedLumens() { +exports.burnedLumens = burnedLumens; +function burnedLumens() { return axios .get(`${horizonLiveURL}/accounts/${voidAccount}`) .then((response) => { @@ -117,7 +124,8 @@ export function burnedLumens() { }); } -export function directDevelopmentAll() { +exports.directDevelopmentAll = directDevelopmentAll; +function directDevelopmentAll() { const { directDevelopment, // directDevelopmentHot1, @@ -136,7 +144,8 @@ export function directDevelopmentAll() { ]); } -export function distributionEcosystemSupport() { +exports.distributionEcosystemSupport = distributionEcosystemSupport; +function distributionEcosystemSupport() { const { infrastructureGrants, currencySupport, @@ -153,12 +162,14 @@ export function distributionEcosystemSupport() { ]); } -export function distributionUseCaseInvestment() { +exports.distributionUseCaseInvestment = distributionUseCaseInvestment; +function distributionUseCaseInvestment() { const { enterpriseFund, newProducts } = accounts; return sumRelevantAccounts([enterpriseFund, newProducts]); } -export function distributionUserAcquisition() { +exports.distributionUserAcquisition = distributionUserAcquisition; +function distributionUserAcquisition() { const { inAppDistribution, inAppDistributionHot, @@ -176,22 +187,25 @@ export function distributionUserAcquisition() { ]); } -export function getUpgradeReserve() { +exports.getUpgradeReserve = getUpgradeReserve; +function getUpgradeReserve() { return getLumenBalance(horizonLiveURL, networkUpgradeReserveAccount); } -export function sdfAccounts() { +exports.sdfAccounts = sdfAccounts; +function sdfAccounts() { var balanceMap = map(accounts, (id) => getLumenBalance(horizonLiveURL, id)); return Promise.all(balanceMap).then((balances) => { return reduce( balances, - (sum, balance) => sum.add(balance), + (sum, balance) => sum.plus(balance), new BigNumber(0), ); }); } -export function totalSupply() { +exports.totalSupply = totalSupply; +function totalSupply() { return Promise.all([inflationLumens(), burnedLumens()]).then((result) => { let [inflationLumens, burnedLumens] = result; @@ -201,19 +215,21 @@ export function totalSupply() { }); } -export function noncirculatingSupply() { +exports.noncirculatingSupply = noncirculatingSupply; +function noncirculatingSupply() { return Promise.all([getUpgradeReserve(), feePool(), sdfAccounts()]).then( (balances) => { return reduce( balances, - (sum, balance) => sum.add(balance), + (sum, balance) => sum.plus(balance), new BigNumber(0), ); }, ); } -export function circulatingSupply() { +exports.circulatingSupply = circulatingSupply; +function circulatingSupply() { return Promise.all([totalSupply(), noncirculatingSupply()]).then((result) => { let [totalLumens, noncirculatingSupply] = result; diff --git a/package.json b/package.json index 16c931e0..b5d00837 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "build": "gulp build", "heroku-postbuild": "gulp build", "lint:prettier": "prettier --config --write '**/*.js'", - "test": "DEV=true mocha './test/**/*.js' --exit", + "test": "DEV=true mocha -r ts-node/register './test/**/*.ts' --exit", "start:backend": "UPDATE_DATA=true DEV=true ts-node backend/app.ts" }, "husky": { @@ -38,7 +38,7 @@ "babel-preset-es2015": "^6.22.0", "babel-preset-react": "^6.23.0", "babel-register": "^6.24.0", - "bignumber.js": "^3.0.1", + "bignumber.js": "^9.0.1", "bourbon": "^4.3.4", "bourbon-neat": "^2.0.0", "browser-sync": "^2.18.2", @@ -71,8 +71,11 @@ }, "devDependencies": { "@stellar/tsconfig": "^1.0.2", + "@types/chai": "^4.3.0", "@types/express": "^4.17.13", "@types/express-http-proxy": "^1.6.3", + "@types/lodash": "^4.14.178", + "@types/mocha": "^9.0.0", "@types/morgan": "^1.9.3", "chai": "^4.3.4", "husky": "1.3.1", diff --git a/test/mocha.opts b/test/mocha.opts index c3b10dde..629f9636 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1 +1 @@ ---require ./test-setup.js +--require ./test-setup.ts diff --git a/test/test-setup.js b/test/test-setup.ts similarity index 100% rename from test/test-setup.js rename to test/test-setup.ts diff --git a/test/tests/integration/backend.js b/test/tests/integration/backend.ts similarity index 99% rename from test/tests/integration/backend.js rename to test/tests/integration/backend.ts index 13efc830..77cb21e8 100644 --- a/test/tests/integration/backend.js +++ b/test/tests/integration/backend.ts @@ -1,7 +1,7 @@ import chai from "chai"; const request = require("supertest"); -const { app, updateLumensCache } = require("../../../backend/routes.js"); +const { app, updateLumensCache } = require("../../../backend/routes"); describe("integration", function() { // update caches before(async function() { diff --git a/test/tests/unit/backend.js b/test/tests/unit/backend.ts similarity index 96% rename from test/tests/unit/backend.js rename to test/tests/unit/backend.ts index cd22a3da..f961e40a 100644 --- a/test/tests/unit/backend.js +++ b/test/tests/unit/backend.ts @@ -1,6 +1,6 @@ import chai from "chai"; -const v1 = require("../../../backend/lumens.js"); -const v2v3 = require("../../../backend/v2v3/lumens.js"); +const v1 = require("../../../backend/lumens"); +const v2v3 = require("../../../backend/v2v3/lumens"); describe("lumens v1", function() { describe("updateApiLumens", function() { diff --git a/tsconfig.json b/tsconfig.json index eb398db9..eb1cc126 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,13 +1,13 @@ { "extends": "@stellar/tsconfig", "compilerOptions": { - // temporary flags during js->ts transition - "allowJs": false, "isolatedModules": false, - - "target": "es5", - "rootDir": "./backend", - "baseUrl": "./" + "target": "es6", + "module": "commonjs", + "baseUrl": "./", + }, + "ts-node": { + "files": true }, "include": ["./backend"] } diff --git a/yarn.lock b/yarn.lock index 6a8777c7..1ad890c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -80,6 +80,11 @@ "@types/connect" "*" "@types/node" "*" +"@types/chai@^4.3.0": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.0.tgz#23509ebc1fa32f1b4d50d6a66c4032d5b8eaabdc" + integrity sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw== + "@types/connect@*": version "3.4.35" resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" @@ -118,6 +123,11 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/lodash@^4.14.178": + version "4.14.178" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.178.tgz#341f6d2247db528d4a13ddbb374bcdc80406f4f8" + integrity sha512-0d5Wd09ItQWH1qFbEyQ7oTQ3GZrMfth5JkbN3EvTKLXcHLRDSXeLnlvlOn0wvxVIwK5o2M8JzP/OWz7T3NRsbw== + "@types/mime@^1": version "1.3.2" resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" @@ -128,6 +138,11 @@ resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c" integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ== +"@types/mocha@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.0.0.tgz#3205bcd15ada9bc681ac20bef64e9e6df88fd297" + integrity sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA== + "@types/morgan@^1.9.3": version "1.9.3" resolved "https://registry.yarnpkg.com/@types/morgan/-/morgan-1.9.3.tgz#ae04180dff02c437312bc0cfb1e2960086b2f540" @@ -136,9 +151,9 @@ "@types/node" "*" "@types/node@*", "@types/node@>= 8": - version "17.0.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.0.tgz#62797cee3b8b497f6547503b2312254d4fe3c2bb" - integrity sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw== + version "17.0.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.2.tgz#a4c07d47ff737e8ee7e586fe636ff0e1ddff070a" + integrity sha512-JepeIUPFDARgIs0zD/SKPgFsJEAF0X5/qO80llx59gOxFTboS9Amv3S+QfB7lqBId5sFXJ99BN0J6zFRvL9dDA== "@types/normalize-package-data@^2.4.0": version "2.4.1" @@ -1230,16 +1245,16 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bignumber.js@^3.0.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-3.1.2.tgz#f3bdb99ad5268a15fc1f0bed2fb018e2693fe236" - integrity sha1-8725mtUmihX8HwvtL7AY4mk/4jY= - bignumber.js@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-4.1.0.tgz#db6f14067c140bd46624815a7916c92d9b6c24b1" integrity sha512-eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA== +bignumber.js@^9.0.1: + version "9.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" + integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== + binary-extensions@^1.0.0: version "1.13.1" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" @@ -1267,21 +1282,21 @@ bluebird@^3.5.0: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== +body-parser@1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.1.tgz#1499abbaa9274af3ecc9f6f10396c995943e31d4" + integrity sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA== dependencies: - bytes "3.1.0" + bytes "3.1.1" content-type "~1.0.4" debug "2.6.9" depd "~1.1.2" - http-errors "1.7.2" + http-errors "1.8.1" iconv-lite "0.4.24" on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" + qs "6.9.6" + raw-body "2.4.2" + type-is "~1.6.18" bourbon-neat@^2.0.0: version "2.1.0" @@ -1457,11 +1472,6 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - bytes@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a" @@ -1926,12 +1936,12 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== dependencies: - safe-buffer "5.1.2" + safe-buffer "5.2.1" content-type@~1.0.4: version "1.0.4" @@ -1950,12 +1960,7 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -cookie@~0.4.1: +cookie@0.4.1, cookie@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== @@ -2676,16 +2681,16 @@ express-http-proxy@^1.0.6: raw-body "^2.3.0" express@^4.14.0: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + version "4.17.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.2.tgz#c18369f265297319beed4e5558753cc8c1364cb3" + integrity sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg== dependencies: accepts "~1.3.7" array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" + body-parser "1.19.1" + content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.4.0" + cookie "0.4.1" cookie-signature "1.0.6" debug "2.6.9" depd "~1.1.2" @@ -2699,13 +2704,13 @@ express@^4.14.0: on-finished "~2.3.0" parseurl "~1.3.3" path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" + proxy-addr "~2.0.7" + qs "6.9.6" range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" + safe-buffer "5.2.1" + send "0.17.2" + serve-static "1.14.2" + setprototypeof "1.2.0" statuses "~1.5.0" type-is "~1.6.18" utils-merge "1.0.1" @@ -3553,9 +3558,9 @@ html-dom-parser@1.0.4: htmlparser2 "7.2.0" html-react-parser@^1.2.4: - version "1.4.3" - resolved "https://registry.yarnpkg.com/html-react-parser/-/html-react-parser-1.4.3.tgz#baf3e42e363d132e28fc4b9fb00958ea63361ff7" - integrity sha512-srOhHeBdKYS4cpX5KRNw8t+RvXTrtondOb45vA5kELEqCLk7qWRBPnyIbF6N3wHngmswR88tYEQTzNBPX1qeWw== + version "1.4.4" + resolved "https://registry.yarnpkg.com/html-react-parser/-/html-react-parser-1.4.4.tgz#610f6c0b146fc88354118334dd0ea0a71292a083" + integrity sha512-7G44bVuoH2chiCDxOfyWMiFl5q9GWtMokbaL48dIC6KjWGEzjKh6oA36ziz8emaQFOhCJcXpFrvTHpuWdHpORg== dependencies: domhandler "4.3.0" html-dom-parser "1.0.4" @@ -3572,17 +3577,6 @@ htmlparser2@7.2.0: domutils "^2.8.0" entities "^3.0.1" -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-errors@1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" @@ -3604,17 +3598,6 @@ http-errors@~1.6.2: setprototypeof "1.1.0" statuses ">= 1.4.0 < 2" -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" @@ -4882,11 +4865,6 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -5139,9 +5117,9 @@ object-copy@^0.1.0: kind-of "^3.0.3" object-inspect@^1.9.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.1.tgz#d4bd7d7de54b9a75599f59a00bd698c1f1c6549b" - integrity sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA== + version "1.12.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" + integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" @@ -5572,11 +5550,11 @@ pg@^8.7.0: pgpass "1.x" pgpass@1.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.4.tgz#85eb93a83800b20f8057a2b029bf05abaf94ea9c" - integrity sha512-YmuA56alyBq7M59vxVBfPJrGSozru8QAdoNlWuW3cz8l+UX3cWge0vTvjKhsSHSJpo3Bom8/Mm6hf0TR5GY0+w== + version "1.0.5" + resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" + integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== dependencies: - split2 "^3.1.1" + split2 "^4.1.0" picocolors@^0.2.1: version "0.2.1" @@ -5773,7 +5751,7 @@ prop-types@^15.6.0, prop-types@^15.6.2: object-assign "^4.1.1" react-is "^16.8.1" -proxy-addr@~2.0.5: +proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== @@ -5841,10 +5819,10 @@ qs@6.2.3: resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" integrity sha1-HPyyXBCpsrSDBT/zn138kjOQjP4= -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@6.9.6: + version "6.9.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" + integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== qs@^6.9.4: version "6.10.2" @@ -5899,17 +5877,7 @@ range-parser@~1.2.0, range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@^2.3.0, raw-body@^2.3.2: +raw-body@2.4.2, raw-body@^2.3.0, raw-body@^2.3.2: version "2.4.2" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.2.tgz#baf3e9c21eebced59dd6533ac872b71f7b61cb32" integrity sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ== @@ -6022,7 +5990,7 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.0, readable-stream@^3.6.0: +readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -6332,7 +6300,7 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -6450,10 +6418,10 @@ send@0.16.2: range-parser "~1.2.0" statuses "~1.4.0" -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== +send@0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.2.tgz#926622f76601c41808012c8bf1688fe3906f7820" + integrity sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww== dependencies: debug "2.6.9" depd "~1.1.2" @@ -6462,9 +6430,9 @@ send@0.17.1: escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" - http-errors "~1.7.2" + http-errors "1.8.1" mime "1.6.0" - ms "2.1.1" + ms "2.1.3" on-finished "~2.3.0" range-parser "~1.2.1" statuses "~1.5.0" @@ -6475,9 +6443,9 @@ sequelize-pool@^2.3.0: integrity sha512-Ibz08vnXvkZ8LJTiUOxRcj1Ckdn7qafNZ2t59jYHMX1VIebTAOYefWdRYFt6z6+hy52WGthAHAoLc9hvk3onqA== sequelize@^5.3.0: - version "5.22.4" - resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-5.22.4.tgz#4dbd8a1a735e98150880d43a95d45e9f46d151fa" - integrity sha512-xFQQ38HPg7EyDRDA+NdzMSRWbo9m6Z/RxpjnkBl3ggyQG+jRrup48x0jaw4Ox42h56wFnXOBC2NZOkTJfZeWCw== + version "5.22.5" + resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-5.22.5.tgz#ff7fdd34980a2d95456a4a57e16153c20d57e96e" + integrity sha512-ySIHof18sJbeVG4zjEvsDL490cd9S14/IhkCrZR/g0C/FPlZq1AzEJVeSAo++9/sgJH2eERltAIGqYQNgVqX/A== dependencies: bluebird "^3.5.0" cls-bluebird "^2.1.0" @@ -6491,8 +6459,8 @@ sequelize@^5.3.0: semver "^6.3.0" sequelize-pool "^2.3.0" toposort-class "^1.0.1" - uuid "^3.3.3" - validator "^10.11.0" + uuid "^8.3.2" + validator "^13.7.0" wkx "^0.4.8" serialize-javascript@5.0.1: @@ -6525,15 +6493,15 @@ serve-static@1.13.2: parseurl "~1.3.2" send "0.16.2" -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== +serve-static@1.14.2: + version "1.14.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.2.tgz#722d6294b1d62626d41b43a013ece4598d292bfa" + integrity sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.17.1" + send "0.17.2" server-destroy@1.0.1: version "1.0.1" @@ -6565,11 +6533,6 @@ setprototypeof@1.1.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - setprototypeof@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" @@ -6836,12 +6799,10 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split2@^3.1.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" - integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== - dependencies: - readable-stream "^3.0.0" +split2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.1.0.tgz#101907a24370f85bb782f08adaabe4e281ecf809" + integrity sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ== sprintf-js@~1.0.2: version "1.0.3" @@ -7310,11 +7271,6 @@ to-through@^2.0.0: dependencies: through2 "^2.0.3" -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - toidentifier@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" @@ -7420,7 +7376,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-is@~1.6.17, type-is@~1.6.18: +type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -7607,11 +7563,16 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.3.2, uuid@^3.3.3: +uuid@^3.3.2: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + v8flags@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.2.0.tgz#b243e3b4dfd731fa774e7492128109a0fe66d656" @@ -7627,10 +7588,10 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" -validator@^10.11.0: - version "10.11.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228" - integrity sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw== +validator@^13.7.0: + version "13.7.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" + integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== value-or-function@^3.0.0: version "3.0.0"