implemented nuxt serverside

This commit is contained in:
Ulf Gebhardt 2020-12-14 00:15:57 +01:00
parent c91aeb598c
commit c453f2804c
No known key found for this signature in database
GPG Key ID: 81308EFE29ABFEBD
22 changed files with 879 additions and 14 deletions

View File

@ -0,0 +1,3 @@
import {createConnection} from "typeorm";
export default createConnection();

80
api/db/model/Account.ts Normal file
View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

32
api/db/model/IpBanned.ts Normal file
View File

@ -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;
}

View File

@ -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;
}

59
api/db/model/Realmlist.ts Normal file
View File

@ -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;
}

28
api/db/model/Uptime.ts Normal file
View File

@ -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;
}

29
api/index.ts Normal file
View File

@ -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

View File

@ -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

View File

@ -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

8
api/routes/index.ts Normal file
View File

@ -0,0 +1,8 @@
import { Router } from 'express'
import user from './user/'
const router = Router()
router.use('/user', user)
export default router

17
api/routes/user/index.ts Normal file
View File

@ -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

View File

@ -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

129
api/routes/user/user_.ts Normal file
View File

@ -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'})
}
}
*/

9
api/types/Request.ts Normal file
View File

@ -0,0 +1,9 @@
export {}
declare global {
namespace Express {
interface Request {
user: any
}
}
}

2
api/types/index.ts Normal file
View File

@ -0,0 +1,2 @@
import {} from './Request'
export {}

9
config/index.ts Normal file
View File

@ -0,0 +1,9 @@
export const server = {
authSecret: 'mysecret', // secret for generating jwt token
}
export const config = {
server,
}
export default config

View File

@ -49,4 +49,6 @@ export default {
// Build Configuration (https://go.nuxtjs.dev/config-build)
build: {},
serverMiddleware: ['~/api/index.ts'],
}

View File

@ -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"
}
}
}

258
yarn.lock
View File

@ -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"