diff --git a/api/db/connection/index.ts b/api/db/connection/index.ts new file mode 100644 index 0000000..3d29f44 --- /dev/null +++ b/api/db/connection/index.ts @@ -0,0 +1,3 @@ +import {createConnection} from "typeorm"; + +export default createConnection(); \ No newline at end of file diff --git a/api/db/model/Account.ts b/api/db/model/Account.ts new file mode 100644 index 0000000..ec33438 --- /dev/null +++ b/api/db/model/Account.ts @@ -0,0 +1,80 @@ +import { Column, Entity, Index, PrimaryGeneratedColumn } from "typeorm"; + +@Index("idx_username", ["username"], { unique: true }) +@Index("idx_gmlevel", ["gmlevel"], {}) +@Entity("account", { schema: "tbcrealmd" }) +export class Account { + @PrimaryGeneratedColumn({ + type: "int", + name: "id", + comment: "Identifier", + unsigned: true, + }) + id: number; + + @Column("varchar", { + name: "username", + unique: true, + length: 32, + default: () => "''", + }) + username: string; + + @Column("tinyint", { name: "gmlevel", unsigned: true, default: () => "'0'" }) + gmlevel: number; + + @Column("longtext", { name: "sessionkey", nullable: true }) + sessionkey: string | null; + + @Column("longtext", { name: "v", nullable: true }) + v: string | null; + + @Column("longtext", { name: "s", nullable: true }) + s: string | null; + + @Column("text", { name: "email", nullable: true }) + email: string | null; + + @Column("timestamp", { name: "joindate", default: () => "CURRENT_TIMESTAMP" }) + joindate: Date; + + @Column("varchar", { + name: "lockedIp", + length: 30, + default: () => "'0.0.0.0'", + }) + lockedIp: string; + + @Column("int", { + name: "failed_logins", + unsigned: true, + default: () => "'0'", + }) + failedLogins: number; + + @Column("tinyint", { name: "locked", unsigned: true, default: () => "'0'" }) + locked: number; + + @Column("int", { + name: "active_realm_id", + unsigned: true, + default: () => "'0'", + }) + activeRealmId: number; + + @Column("tinyint", { + name: "expansion", + unsigned: true, + default: () => "'0'", + }) + expansion: number; + + @Column("bigint", { name: "mutetime", unsigned: true, default: () => "'0'" }) + mutetime: string; + + @Column("varchar", { name: "locale", length: 4, default: () => "''" }) + locale: string; + + @Column("text", { name: "token", nullable: true }) + token: string | null; +} diff --git a/api/db/model/AccountBanned.ts b/api/db/model/AccountBanned.ts new file mode 100644 index 0000000..4cde99e --- /dev/null +++ b/api/db/model/AccountBanned.ts @@ -0,0 +1,35 @@ +import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; + +@Entity("account_banned", { schema: "tbcrealmd" }) +export class AccountBanned { + @PrimaryGeneratedColumn({ type: "int", name: "id" }) + id: number; + + @Column("int", { + name: "account_id", + comment: "Account id", + default: () => "'0'", + }) + accountId: number; + + @Column("bigint", { name: "banned_at", default: () => "'0'" }) + bannedAt: string; + + @Column("bigint", { name: "expires_at", default: () => "'0'" }) + expiresAt: string; + + @Column("varchar", { name: "banned_by", length: 50 }) + bannedBy: string; + + @Column("bigint", { name: "unbanned_at", default: () => "'0'" }) + unbannedAt: string; + + @Column("varchar", { name: "unbanned_by", nullable: true, length: 50 }) + unbannedBy: string | null; + + @Column("varchar", { name: "reason", length: 255 }) + reason: string; + + @Column("tinyint", { name: "active", default: () => "'1'" }) + active: number; +} diff --git a/api/db/model/AccountLogons.ts b/api/db/model/AccountLogons.ts new file mode 100644 index 0000000..e57e50b --- /dev/null +++ b/api/db/model/AccountLogons.ts @@ -0,0 +1,22 @@ +import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; + +@Entity("account_logons", { schema: "tbcrealmd" }) +export class AccountLogons { + @PrimaryGeneratedColumn({ type: "int", name: "id" }) + id: number; + + @Column("int", { name: "accountId", unsigned: true }) + accountId: number; + + @Column("varchar", { name: "ip", length: 30 }) + ip: string; + + @Column("timestamp", { + name: "loginTime", + default: () => "CURRENT_TIMESTAMP", + }) + loginTime: Date; + + @Column("int", { name: "loginSource", unsigned: true }) + loginSource: number; +} diff --git a/api/db/model/AccountSha.ts b/api/db/model/AccountSha.ts new file mode 100644 index 0000000..eda0952 --- /dev/null +++ b/api/db/model/AccountSha.ts @@ -0,0 +1,86 @@ +import { Column, Entity, Index, PrimaryGeneratedColumn } from "typeorm"; + +@Index("idx_username", ["username"], { unique: true }) +@Index("idx_gmlevel", ["gmlevel"], {}) +@Entity("account_sha", { schema: "tbcrealmd" }) +export class AccountSha { + @PrimaryGeneratedColumn({ + type: "int", + name: "id", + comment: "Identifier", + unsigned: true, + }) + id: number; + + @Column("varchar", { + name: "username", + unique: true, + length: 32, + default: () => "''", + }) + username: string; + + @Column("varchar", { name: "sha_pass_hash", length: 40, default: () => "''" }) + shaPassHash: string; + + @Column("tinyint", { name: "gmlevel", unsigned: true, default: () => "'0'" }) + gmlevel: number; + + @Column("longtext", { name: "sessionkey", nullable: true }) + sessionkey: string | null; + + @Column("longtext", { name: "v", nullable: true }) + v: string | null; + + @Column("longtext", { name: "s", nullable: true }) + s: string | null; + + @Column("text", { name: "email", nullable: true }) + email: string | null; + + @Column("timestamp", { name: "joindate", default: () => "CURRENT_TIMESTAMP" }) + joindate: Date; + + @Column("varchar", { + name: "last_ip", + length: 30, + default: () => "'0.0.0.0'", + }) + lastIp: string; + + @Column("int", { + name: "failed_logins", + unsigned: true, + default: () => "'0'", + }) + failedLogins: number; + + @Column("tinyint", { name: "locked", unsigned: true, default: () => "'0'" }) + locked: number; + + @Column("timestamp", { + name: "last_login", + default: () => "'0000-00-00 00:00:00'", + }) + lastLogin: Date; + + @Column("int", { + name: "active_realm_id", + unsigned: true, + default: () => "'0'", + }) + activeRealmId: number; + + @Column("tinyint", { + name: "expansion", + unsigned: true, + default: () => "'0'", + }) + expansion: number; + + @Column("bigint", { name: "mutetime", unsigned: true, default: () => "'0'" }) + mutetime: string; + + @Column("tinyint", { name: "locale", unsigned: true, default: () => "'0'" }) + locale: number; +} diff --git a/api/db/model/IpBanned.ts b/api/db/model/IpBanned.ts new file mode 100644 index 0000000..08b08e6 --- /dev/null +++ b/api/db/model/IpBanned.ts @@ -0,0 +1,32 @@ +import { Column, Entity } from "typeorm"; + +@Entity("ip_banned", { schema: "tbcrealmd" }) +export class IpBanned { + @Column("varchar", { + primary: true, + name: "ip", + length: 32, + default: () => "'0.0.0.0'", + }) + ip: string; + + @Column("bigint", { primary: true, name: "banned_at" }) + bannedAt: string; + + @Column("bigint", { name: "expires_at" }) + expiresAt: string; + + @Column("varchar", { + name: "banned_by", + length: 50, + default: () => "'[Console]'", + }) + bannedBy: string; + + @Column("varchar", { + name: "reason", + length: 255, + default: () => "'no reason'", + }) + reason: string; +} diff --git a/api/db/model/Realmcharacters.ts b/api/db/model/Realmcharacters.ts new file mode 100644 index 0000000..0e8facc --- /dev/null +++ b/api/db/model/Realmcharacters.ts @@ -0,0 +1,19 @@ +import { Column, Entity, Index } from "typeorm"; + +@Index("acctid", ["acctid"], {}) +@Entity("realmcharacters", { schema: "tbcrealmd" }) +export class Realmcharacters { + @Column("int", { + primary: true, + name: "realmid", + unsigned: true, + default: () => "'0'", + }) + realmid: number; + + @Column("bigint", { primary: true, name: "acctid", unsigned: true }) + acctid: string; + + @Column("tinyint", { name: "numchars", unsigned: true, default: () => "'0'" }) + numchars: number; +} diff --git a/api/db/model/Realmlist.ts b/api/db/model/Realmlist.ts new file mode 100644 index 0000000..f317c2b --- /dev/null +++ b/api/db/model/Realmlist.ts @@ -0,0 +1,59 @@ +import { Column, Entity, Index, PrimaryGeneratedColumn } from "typeorm"; + +@Index("idx_name", ["name"], { unique: true }) +@Entity("realmlist", { schema: "tbcrealmd" }) +export class Realmlist { + @PrimaryGeneratedColumn({ type: "int", name: "id", unsigned: true }) + id: number; + + @Column("varchar", { + name: "name", + unique: true, + length: 32, + default: () => "''", + }) + name: string; + + @Column("varchar", { + name: "address", + length: 32, + default: () => "'127.0.0.1'", + }) + address: string; + + @Column("int", { name: "port", default: () => "'8085'" }) + port: number; + + @Column("tinyint", { name: "icon", unsigned: true, default: () => "'0'" }) + icon: number; + + @Column("tinyint", { + name: "realmflags", + comment: + "Supported masks: 0x1 (invalid, not show in realm list), 0x2 (offline, set by mangosd), 0x4 (show version and build), 0x20 (new players), 0x40 (recommended)", + unsigned: true, + default: () => "'2'", + }) + realmflags: number; + + @Column("tinyint", { name: "timezone", unsigned: true, default: () => "'0'" }) + timezone: number; + + @Column("tinyint", { + name: "allowedSecurityLevel", + unsigned: true, + default: () => "'0'", + }) + allowedSecurityLevel: number; + + @Column("float", { + name: "population", + unsigned: true, + precision: 12, + default: () => "'0'", + }) + population: number; + + @Column("varchar", { name: "realmbuilds", length: 64, default: () => "''" }) + realmbuilds: string; +} diff --git a/api/db/model/Uptime.ts b/api/db/model/Uptime.ts new file mode 100644 index 0000000..55b1c6c --- /dev/null +++ b/api/db/model/Uptime.ts @@ -0,0 +1,28 @@ +import { Column, Entity } from "typeorm"; + +@Entity("uptime", { schema: "tbcrealmd" }) +export class Uptime { + @Column("int", { primary: true, name: "realmid", unsigned: true }) + realmid: number; + + @Column("bigint", { + primary: true, + name: "starttime", + unsigned: true, + default: () => "'0'", + }) + starttime: string; + + @Column("varchar", { name: "startstring", length: 64, default: () => "''" }) + startstring: string; + + @Column("bigint", { name: "uptime", unsigned: true, default: () => "'0'" }) + uptime: string; + + @Column("smallint", { + name: "maxplayers", + unsigned: true, + default: () => "'0'", + }) + maxplayers: number; +} diff --git a/api/index.ts b/api/index.ts new file mode 100644 index 0000000..e459a30 --- /dev/null +++ b/api/index.ts @@ -0,0 +1,29 @@ +import express from 'express' +import authenticator from './middleware/authenticator' +import {} from './types' +// const db = require('./db/connection') +import routes from './routes/' + +// Create express instance +const app = express() + +// Init body-parser options (inbuilt with express) +app.use(express.json()) +app.use(express.urlencoded({ extended: true })) + +// Authenticator Middleware +app.use(authenticator) + +// const articles = require('./routes/articles') + +// Use API Routes +app.use(routes) +// app.use(articles) + +// Export the server middleware +export const serverMiddleware = { + path: '/api', + handler: app, +} + +export default serverMiddleware diff --git a/api/middleware/authenticator.ts b/api/middleware/authenticator.ts new file mode 100644 index 0000000..fc3d007 --- /dev/null +++ b/api/middleware/authenticator.ts @@ -0,0 +1,30 @@ +import { Request, Response, NextFunction } from 'express' +import jwt from 'jsonwebtoken' +import config from '../../config' + +export const authenticator = function ( + req: Request, + _res: Response, + next: NextFunction +): any { + req.user = null + const token = req.headers.authorization + if (token) { + // verifies secret and checks if the token is expired + jwt.verify( + token.replace(/^Bearer\s/, ''), + config.server.authSecret, + function (err, _decoded) { + // TODO + if (err) { + req.user = 'bo' + } else { + req.user = 'yo' + } + } + ) + } + return next() +} + +export default authenticator diff --git a/api/middleware/isAuthenticated.ts b/api/middleware/isAuthenticated.ts new file mode 100644 index 0000000..5a037da --- /dev/null +++ b/api/middleware/isAuthenticated.ts @@ -0,0 +1,14 @@ +import { Request, Response, NextFunction } from 'express' + +export const isAuthenticated = function ( + req: Request, + res: Response, + next: NextFunction +): any { + if (req.user === 'yo') { + return next() + } + return res.status(401).json({ message: 'unauthorized' }) +} + +export default isAuthenticated diff --git a/api/routes/index.ts b/api/routes/index.ts new file mode 100644 index 0000000..67059fd --- /dev/null +++ b/api/routes/index.ts @@ -0,0 +1,8 @@ +import { Router } from 'express' +import user from './user/' + +const router = Router() + +router.use('/user', user) + +export default router diff --git a/api/routes/user/index.ts b/api/routes/user/index.ts new file mode 100644 index 0000000..e6da7b5 --- /dev/null +++ b/api/routes/user/index.ts @@ -0,0 +1,17 @@ +import { Router } from 'express' +// Initialize Controller +import register from './register' + +const user = Router() + +// Register +// router.post('/users/register', controller.register) +user.get('/register', register) + +// Login +// router.post('/users/login', usersController.login) + +// Get User +// router.get('/users/user', usersController.user) + +export default user diff --git a/api/routes/user/register.ts b/api/routes/user/register.ts new file mode 100644 index 0000000..330e072 --- /dev/null +++ b/api/routes/user/register.ts @@ -0,0 +1,12 @@ +import { Request, Response, NextFunction } from 'express' + +// Register +const register = function ( + _req: Request, + res: Response, + _next: NextFunction +): any { + res.status(200).json({ a: 'Hello' }) +} + +export default register diff --git a/api/routes/user/user_.ts b/api/routes/user/user_.ts new file mode 100644 index 0000000..608a944 --- /dev/null +++ b/api/routes/user/user_.ts @@ -0,0 +1,129 @@ +/* +const config = require('../config') +const User = require('../models/User') +const validator = require('express-validator') +const jwt = require('jsonwebtoken'); +const bcrypt = require('bcryptjs') +*/ + +/* +module.exports.register = [ + // validations rules + validator.body('full_name', 'Please enter Full Name').isLength({ min: 1 }), + validator.body('email', 'Please enter Email').isLength({ min: 1 }), + validator.body('email').custom(value => { + return User.findOne({email:value}).then(user => { + if (user !== null) { + return Promise.reject('Email already in use'); + } + }) + }), + validator.body('password', 'Please enter Password').isLength({ min: 1 }), + + function(req, res) { + // throw validation errors + const errors = validator.validationResult(req); + if (!errors.isEmpty()) { + return res.status(422).json({ errors: errors.mapped() }); + } + + // initialize record + var user = new User({ + full_name : req.body.full_name, + email : req.body.email, + password : req.body.password, + }) + + // encrypt password + var salt = bcrypt.genSaltSync(10); + var hash = bcrypt.hashSync(user.password, salt); + user.password = hash + + // save record + user.save(function(err, user){ + if(err) { + return res.status(500).json({ + message: 'Error saving record', + error: err + }); + } + return res.json({ + message: 'saved', + _id: user._id + }); + }) + } +] +*/ + +// Login +/* +module.exports.login = [ + // validation rules + validator.body('email', 'Please enter Email').isLength({ min: 1 }), + validator.body('password', 'Please enter Password').isLength({ min: 1 }), + + function(req, res) { + // throw validation errors + const errors = validator.validationResult(req); + if (!errors.isEmpty()) { + return res.status(422).json({ errors: errors.mapped() }); + } + + // validate email and password are correct + User.findOne({email: req.body.email}, function(err, user){ + if(err) { + return res.status(500).json({ + message: 'Error logging in', + error: err + }); + } + + if (user === null) { + return res.status(500).json({ + message: 'Email address you entered is not found.' + }); + } + + // compare submitted password with password inside db + return bcrypt.compare(req.body.password, user.password, function(err, isMatched) { + if(isMatched===true){ + return res.json({ + user: { + _id: user._id, + email: user.email, + full_name: user.full_name + }, + token: jwt.sign({_id: user._id, email: user.email, full_name: user.full_name}, config.authSecret) // generate JWT token here + }); + } + else{ + return res.status(500).json({ + message: 'Invalid Email or Password entered.' + }); + } + }); + }); + } +] +*/ + +// Get User +/* +module.exports.user = function(req, res) { + var token = req.headers.authorization + if (token) { + // verifies secret and checks if the token is expired + jwt.verify(token.replace(/^Bearer\s/, ''), config.authSecret, function(err, decoded) { + if (err) { + return res.status(401).json({message: 'unauthorized'}) + } else { + return res.json({ user: decoded }) + } + }); + } + else{ + return res.status(401).json({message: 'unauthorized'}) + } +} +*/ diff --git a/api/types/Request.ts b/api/types/Request.ts new file mode 100644 index 0000000..63894c4 --- /dev/null +++ b/api/types/Request.ts @@ -0,0 +1,9 @@ +export {} + +declare global { + namespace Express { + interface Request { + user: any + } + } +} diff --git a/api/types/index.ts b/api/types/index.ts new file mode 100644 index 0000000..efcfd50 --- /dev/null +++ b/api/types/index.ts @@ -0,0 +1,2 @@ +import {} from './Request' +export {} diff --git a/config/index.ts b/config/index.ts new file mode 100644 index 0000000..e871ab7 --- /dev/null +++ b/config/index.ts @@ -0,0 +1,9 @@ +export const server = { + authSecret: 'mysecret', // secret for generating jwt token +} + +export const config = { + server, +} + +export default config diff --git a/nuxt.config.js b/nuxt.config.js index 685a7a3..d64fc7d 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -49,4 +49,6 @@ export default { // Build Configuration (https://go.nuxtjs.dev/config-build) build: {}, + + serverMiddleware: ['~/api/index.ts'], } diff --git a/package.json b/package.json index e7c831f..86b1303 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "Mojotrollz", + "name": "Mojotrollz-App", "version": "1.0.0", "private": true, "scripts": { @@ -18,7 +18,9 @@ "@nuxtjs/axios": "^5.12.2", "@nuxtjs/pwa": "^3.0.2", "core-js": "^3.6.5", - "nuxt": "^2.14.6" + "jsonwebtoken": "^8.5.1", + "nuxt": "^2.14.6", + "typeorm": "^0.2.29" }, "devDependencies": { "@nuxt/types": "^2.14.6", @@ -28,6 +30,8 @@ "@nuxtjs/eslint-module": "^2.0.0", "@nuxtjs/stylelint-module": "^4.0.0", "@nuxtjs/tailwindcss": "^3.1.0", + "@types/express": "^4.17.9", + "@types/jsonwebtoken": "^8.5.0", "@vue/test-utils": "^1.1.0", "babel-core": "7.0.0-bridge.0", "babel-eslint": "^10.1.0", @@ -44,4 +48,4 @@ "ts-jest": "^26.4.1", "vue-jest": "^3.0.4" } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index b714714..27c0636 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1629,6 +1629,11 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@sqltools/formatter@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.2.tgz#9390a8127c0dcba61ebd7fdcc748655e191bdd68" + integrity sha512-/5O7Fq6Vnv8L6ucmPjaWbVG1XkP4FO+w5glqfkIsq3Xw4oyNAdJddbnYodNDAfjVUvo/rrSCTom4kAND7T1o5Q== + "@stylelint/postcss-css-in-js@^0.37.2": version "0.37.2" resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2" @@ -1745,7 +1750,7 @@ "@types/qs" "*" "@types/range-parser" "*" -"@types/express@*": +"@types/express@*", "@types/express@^4.17.9": version "4.17.9" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.9.tgz#f5f2df6add703ff28428add52bdec8a1091b0a78" integrity sha512-SDzEIZInC4sivGIFY4Sz1GG6J9UObPwCInYJjko2jzOf/Imx/dlpume6Xxwj1ORL82tBbmN4cPDIDkLbWHk9hw== @@ -1839,6 +1844,13 @@ resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= +"@types/jsonwebtoken@^8.5.0": + version "8.5.0" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz#2531d5e300803aa63279b232c014acf780c981c5" + integrity sha512-9bVao7LvyorRGZCw0VmH/dr7Og+NdjYSsKAxB43OQoComFbBgsEpoR9JW6+qSq/ogwVBg8GI2MfAlk4SYI4OLg== + dependencies: + "@types/node" "*" + "@types/less@^3.0.1": version "3.0.2" resolved "https://registry.yarnpkg.com/@types/less/-/less-3.0.2.tgz#2761d477678c8374cb9897666871662eb1d1115e" @@ -2554,6 +2566,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +any-promise@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -2570,6 +2587,11 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +app-root-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" + integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== + aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -3181,6 +3203,11 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -3205,7 +3232,7 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -buffer@^5.1.0: +buffer@^5.1.0, buffer@^5.5.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== @@ -3408,7 +3435,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^1.1.3: +chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -3610,6 +3637,18 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" +cli-highlight@^2.1.4: + version "2.1.9" + resolved "https://registry.yarnpkg.com/cli-highlight/-/cli-highlight-2.1.9.tgz#4f4ecb05326d70d56d4b4249fabf9a70fb002497" + integrity sha512-t8RNIZgiI24i/mslZ8XT8o660RUj5ZbUJpEZrZa/BNekTzdC2LfMRAnt0Y7sgzNM4FGW5tmWg/YnbTH8o1eIOQ== + dependencies: + chalk "^4.0.0" + highlight.js "^10.0.0" + mz "^2.4.0" + parse5 "^5.1.1" + parse5-htmlparser2-tree-adapter "^6.0.0" + yargs "^15.0.0" + cli-width@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" @@ -3633,6 +3672,15 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + clone-regexp@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f" @@ -4617,6 +4665,13 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + editorconfig@^0.15.3: version "0.15.3" resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" @@ -5381,6 +5436,11 @@ figgy-pudding@^3.5.1: resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== +figlet@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.5.0.tgz#2db4d00a584e5155a96080632db919213c3e003c" + integrity sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww== + figures@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" @@ -5672,7 +5732,7 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.1: +get-caller-file@^2.0.1, get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== @@ -6108,6 +6168,11 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== +highlight.js@^10.0.0: + version "10.4.1" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.4.1.tgz#d48fbcf4a9971c4361b3f95f302747afe19dbad0" + integrity sha512-yR5lWvNz7c85OhVAEAeFhVCc/GV4C30Fjzc/rCP0aCWzc1UUOPUk55dK/qdwTZHBvMZo+eZ2jpk62ndX/xMFlg== + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -7303,7 +7368,7 @@ js-yaml@3.14.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.11.0, js-yaml@^3.13.1: +js-yaml@^3.11.0, js-yaml@^3.13.1, js-yaml@^3.14.0: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -7423,6 +7488,22 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +jsonwebtoken@^8.5.1: + version "8.5.1" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" + integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -7433,6 +7514,23 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -7582,6 +7680,36 @@ lodash.get@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= + lodash.kebabcase@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" @@ -7592,6 +7720,11 @@ lodash.memoize@4.x, lodash.memoize@^4.1.2: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -8214,6 +8347,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + multimap@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/multimap/-/multimap-1.1.0.tgz#5263febc085a1791c33b59bb3afc6a76a2a10ca8" @@ -8229,6 +8367,15 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== +mz@^2.4.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + nan@^2.12.1: version "2.14.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" @@ -8797,6 +8944,11 @@ parent-module@^2.0.0: dependencies: callsites "^3.1.0" +parent-require@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parent-require/-/parent-require-1.0.0.tgz#746a167638083a860b0eef6732cb27ed46c32977" + integrity sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc= + parse-asn1@^5.0.0, parse-asn1@^5.1.5: version "5.1.6" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" @@ -8871,12 +9023,19 @@ parse-url@^5.0.0: parse-path "^4.0.0" protocols "^1.4.0" -parse5@5.1.1: +parse5-htmlparser2-tree-adapter@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@5.1.1, parse5@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== -parse5@^6.0.0: +parse5@^6.0.0, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -10186,6 +10345,11 @@ reduce-css-calc@^2.1.6: css-unit-converter "^1.1.1" postcss-value-parser "^3.3.0" +reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -10796,7 +10960,7 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== -sha.js@^2.4.0, sha.js@^2.4.8: +sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== @@ -11586,6 +11750,20 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + thread-loader@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/thread-loader/-/thread-loader-2.1.3.tgz#cbd2c139fc2b2de6e9d28f62286ab770c1acbdda" @@ -11798,7 +11976,7 @@ tsconfig@^7.0.0: strip-bom "^3.0.0" strip-json-comments "^2.0.0" -tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -11891,6 +12069,28 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typeorm@^0.2.29: + version "0.2.29" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.2.29.tgz#401289dc91900d72eccb26e31cdb7f0591a2272e" + integrity sha512-ih1vrTe3gEAGKRcWlcsTRxTL7gNjacQE498wVGuJ3ZRujtMqPZlbAWuC7xDzWCRjQnkZYNwZQeG9UgKfxSHB5g== + dependencies: + "@sqltools/formatter" "1.2.2" + app-root-path "^3.0.0" + buffer "^5.5.0" + chalk "^4.1.0" + cli-highlight "^2.1.4" + debug "^4.1.1" + dotenv "^8.2.0" + glob "^7.1.6" + js-yaml "^3.14.0" + mkdirp "^1.0.4" + reflect-metadata "^0.1.13" + sha.js "^2.4.11" + tslib "^1.13.0" + xml2js "^0.4.23" + yargonaut "^1.1.2" + yargs "^16.0.3" + typescript@~4.0: version "4.0.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.5.tgz#ae9dddfd1069f1cb5beb3ef3b2170dd7c1332389" @@ -12603,6 +12803,15 @@ wrap-ansi@^6.0.0, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -12696,6 +12905,11 @@ y18n@^4.0.0: resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== +y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -12716,7 +12930,16 @@ yaml@^1.10.0, yaml@^1.7.2: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@20.x, yargs-parser@^20.2.3: +yargonaut@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/yargonaut/-/yargonaut-1.1.4.tgz#c64f56432c7465271221f53f5cc517890c3d6e0c" + integrity sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA== + dependencies: + chalk "^1.1.1" + figlet "^1.1.1" + parent-require "^1.0.0" + +yargs-parser@20.x, yargs-parser@^20.2.2, yargs-parser@^20.2.3: version "20.2.4" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== @@ -12729,7 +12952,7 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@^15.4.1: +yargs@^15.0.0, yargs@^15.4.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -12746,6 +12969,19 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" +yargs@^16.0.3: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"