├── types.d.ts ├── src ├── types.ts ├── dto │ ├── LogoutDTO.ts │ ├── RefreshTokenDTO.ts │ ├── LoginDTO.ts │ └── RegisterDTO.ts ├── db.ts ├── Controllers │ ├── User.Controller.ts │ └── Auth.Controller.ts ├── index.ts └── Services │ ├── Auth.Service.ts │ └── Token.Service.ts ├── prisma ├── migrations │ ├── migration_lock.toml │ ├── 20210121232321_add_tokens │ │ └── migration.sql │ └── 20210121230252_init │ │ └── migration.sql └── schema.prisma ├── .env.example ├── custom.d.ts ├── rest.http ├── README.md ├── LICENSE ├── package.json ├── tsconfig.json ├── .gitignore └── yarn.lock /types.d.ts: -------------------------------------------------------------------------------- 1 | declare module "random-frog"; 2 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export type ErrorType = Error & { status: number }; 2 | -------------------------------------------------------------------------------- /prisma/migrations/migration_lock.toml: -------------------------------------------------------------------------------- 1 | # Please do not edit this file manually 2 | provider = "postgresql" -------------------------------------------------------------------------------- /prisma/migrations/20210121232321_add_tokens/migration.sql: -------------------------------------------------------------------------------- 1 | -- AlterTable 2 | ALTER TABLE "User" ADD COLUMN "access_token" TEXT, 3 | ADD COLUMN "refresh_token" TEXT; 4 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | DATABASE_URL = "postgresql://postgres:postgres@localhost:5432/prismadb" 2 | REFRESH_TOKEN_SECRET = "refreshthesecretphrog" 3 | ACCESS_TOKEN_SECRET = "accessthesecretphrog" 4 | -------------------------------------------------------------------------------- /custom.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace Express { 2 | export interface Request { 3 | payload?: { 4 | aud?: string; 5 | user?: { 6 | userId?: number; 7 | }; 8 | }; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/dto/LogoutDTO.ts: -------------------------------------------------------------------------------- 1 | import * as Joi from "joi"; 2 | 3 | export interface LogoutDTO { 4 | refreshToken: string; 5 | } 6 | 7 | export const logoutSchema = Joi.object({ 8 | refreshToken: Joi.string().required(), 9 | }); 10 | -------------------------------------------------------------------------------- /src/dto/RefreshTokenDTO.ts: -------------------------------------------------------------------------------- 1 | import * as Joi from "joi"; 2 | 3 | export interface RefreshTokenDTO { 4 | refreshToken: string; 5 | } 6 | 7 | export const refreshTokenSchema = Joi.object({ 8 | refreshToken: Joi.string().required(), 9 | }); 10 | -------------------------------------------------------------------------------- /src/dto/LoginDTO.ts: -------------------------------------------------------------------------------- 1 | import * as Joi from "joi"; 2 | 3 | export interface LoginDTO { 4 | email: string; 5 | password: string; 6 | } 7 | 8 | export const loginSchema = Joi.object({ 9 | email: Joi.string().email().required(), 10 | password: Joi.string().required(), 11 | }); 12 | -------------------------------------------------------------------------------- /prisma/migrations/20210121230252_init/migration.sql: -------------------------------------------------------------------------------- 1 | -- CreateTable 2 | CREATE TABLE "User" ( 3 | "id" SERIAL NOT NULL, 4 | "email" TEXT NOT NULL, 5 | "name" TEXT NOT NULL, 6 | "password" TEXT NOT NULL, 7 | 8 | PRIMARY KEY ("id") 9 | ); 10 | 11 | -- CreateIndex 12 | CREATE UNIQUE INDEX "User.email_unique" ON "User"("email"); 13 | -------------------------------------------------------------------------------- /src/dto/RegisterDTO.ts: -------------------------------------------------------------------------------- 1 | import * as Joi from "joi"; 2 | 3 | export interface RegisterDTO { 4 | email: string; 5 | name: string; 6 | password: string; 7 | } 8 | 9 | export const registerSchema = Joi.object({ 10 | email: Joi.string().email().required(), 11 | password: Joi.string().required(), 12 | name: Joi.string().required(), 13 | }); 14 | -------------------------------------------------------------------------------- /src/db.ts: -------------------------------------------------------------------------------- 1 | import { PrismaClient } from "@prisma/client"; 2 | 3 | const client = new PrismaClient({ 4 | __internal: { useUds: true }, 5 | } as any); 6 | 7 | export const initDb = async () => { 8 | const result = await client.$queryRaw`SELECT 1=1 AS "database ready";`; 9 | return result[0]; 10 | }; 11 | 12 | /** 13 | * @description Use `request.server.app.db` instead 14 | */ 15 | export const prisma = client; // as never; 16 | -------------------------------------------------------------------------------- /prisma/schema.prisma: -------------------------------------------------------------------------------- 1 | // This is your Prisma schema file, 2 | // learn more about it in the docs: https://pris.ly/d/prisma-schema 3 | 4 | datasource db { 5 | provider = "postgresql" 6 | url = env("DATABASE_URL") 7 | } 8 | 9 | generator client { 10 | provider = "prisma-client-js" 11 | } 12 | 13 | model User { 14 | id Int @id @default(autoincrement()) 15 | email String @unique 16 | name String 17 | password String 18 | access_token String? 19 | refresh_token String? 20 | } 21 | -------------------------------------------------------------------------------- /rest.http: -------------------------------------------------------------------------------- 1 | GET http://localhost:3001/me 2 | Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7InVzZXJJZCI6MTJ9LCJpYXQiOjE2MTI0ODQ3MzIsImV4cCI6MTYxMjQ4NTAzMiwiYXVkIjoiMTIifQ.f9fvLYHGbaVka5ecxuYHguTCEh2vHiGAUgkpDktZjz4 3 | ###Login Route 4 | POST http://localhost:3001/auth/login 5 | Content-Type: application/json 6 | 7 | { 8 | "email": "kacper@gmail.com", 9 | "password": "Haslo123" 10 | } 11 | 12 | 13 | ###Register Route 14 | POST http://localhost:3001/auth/register 15 | Content-Type: application/json 16 | 17 | { 18 | "email": "kacper@gmail.com", 19 | "password": "Haslo123", 20 | "name": "Kacper Kedzierski" 21 | } 22 | 23 | ###Refresh token Route 24 | POST http://localhost:3001/auth/refresh-token 25 | Content-Type: application/json 26 | 27 | 28 | 29 | ###Logout Route 30 | DELETE http://localhost:3001/auth/logout 31 | Content-Type: application/json 32 | 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Backend for my article on [TheWidlarzGroup](https://www.thewidlarzgroup.com/) 2 | 3 | [install postgres](https://www.postgresqltutorial.com/install-postgresql/) 4 | 5 | ### How to run?! 6 | 7 | - Step 1: Clone the project 8 | 9 | ```bash 10 | git clone https://github.com/TheWidlarzGroup/JWTAuthBackend.git 11 | ``` 12 | 13 | - Step 2: Install packages 14 | 15 | ```bash 16 | cd JWTAuthBackend && yarn 17 | ``` 18 | 19 | - Step 3: Add .env file 20 | 21 | ``` 22 | Add .env file with DATABASE_URL 23 | 24 | example: 25 | DATABASE_URL = "postgresql://postgres:postgres@localhost:5432/prismadb" 26 | REFRESH_TOKEN_SECRET = "refreshthesecretphrog" 27 | ACCESS_TOKEN_SECRET = "accessthesecretphrog" 28 | ``` 29 | 30 | - Step 4: Run Prisma migration: 31 | 32 | ```bash 33 | npx prisma migrate dev --name newMigration --preview-feature 34 | ``` 35 | 36 | - Step 5: Run the backend! 37 | 38 | ```bash 39 | yarn dev 40 | ``` 41 | -------------------------------------------------------------------------------- /src/Controllers/User.Controller.ts: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import { verifyAccessToken } from "src/Services/Token.Service"; 3 | import { prisma } from "@db"; 4 | import fetch from "node-fetch"; 5 | 6 | const UserRouter = express.Router(); 7 | 8 | UserRouter.get("/me", verifyAccessToken, async (req, res, next) => { 9 | try { 10 | const userId = req.payload?.user?.userId; 11 | const user = await prisma.user.findUnique({ where: { id: userId }, select: { name: true, email: true } }); 12 | res.send(user); 13 | } catch (error) { 14 | next(error); 15 | } 16 | }); 17 | 18 | UserRouter.get("/frogs", verifyAccessToken, async (_req, res, next) => { 19 | try { 20 | const response = await fetch( 21 | "https://pixabay.com/api/?key=20330556-9d467084be89e92c1e9632c3a&q=frog&image_type=photo" 22 | ); 23 | res.send(await response.json()); 24 | } catch (error) { 25 | next(error); 26 | } 27 | }); 28 | 29 | export default UserRouter; 30 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 TWG 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AuthBE", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "author": "Nsquik <46610139+Nsquik@users.noreply.github.com>", 6 | "license": "MIT", 7 | "scripts": { 8 | "dev": "ts-node-dev -r tsconfig-paths/register src/index.ts", 9 | "start": "ts-node-dev --no-notify src/" 10 | }, 11 | "dependencies": { 12 | "@hapi/joi": "^17.1.1", 13 | "@prisma/client": "^2.15.0", 14 | "bcrypt": "^5.0.0", 15 | "cookie-parser": "^1.4.5", 16 | "cors": "^2.8.5", 17 | "dotenv": "^8.2.0", 18 | "express": "^4.17.1", 19 | "http-errors": "^1.8.0", 20 | "joi": "^17.3.0", 21 | "jsonwebtoken": "^8.5.1", 22 | "morgan": "^1.10.0", 23 | "node-fetch": "^2.6.1", 24 | "random-frog": "^2.0.0", 25 | "request": "^2.88.2", 26 | "ts-node": "^9.1.1", 27 | "ts-node-dev": "1.0.0-pre.50", 28 | "typescript": "^4.1.3" 29 | }, 30 | "devDependencies": { 31 | "@prisma/cli": "2.15.0", 32 | "@types/bcrypt": "^3.0.0", 33 | "@types/express": "^4.17.11", 34 | "@types/http-errors": "^1.8.0", 35 | "@types/jsonwebtoken": "^8.5.0", 36 | "@types/morgan": "^1.9.2", 37 | "@types/node-fetch": "^2.5.8", 38 | "tsconfig-paths": "^3.9.0" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2018", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ 4 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ 5 | "strict": true, /* Enable all strict type-checking options. */ 6 | "noUnusedLocals": true, /* Report errors on unused locals. */ 7 | "noUnusedParameters": true, /* Report errors on unused parameters. */ 8 | "noFallthroughCasesInSwitch": true, 9 | "resolveJsonModule": true, /* Report errors for fallthrough cases in switch statement. */ 10 | "baseUrl": "./", 11 | "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ 12 | "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 13 | "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ 14 | "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ 15 | "skipLibCheck": true, /* Skip type checking of declaration files. */ 16 | "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ 17 | "paths": { 18 | "@db": ["src/db"] 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import express, { Response, Request, NextFunction } from "express"; 2 | import createError from "http-errors"; 3 | import morgan from "morgan"; 4 | import AuthRouter from "./Controllers/Auth.Controller"; 5 | import { initDb } from "./db"; 6 | import { ErrorType } from "./types"; 7 | import UserRouter from "./Controllers/User.Controller"; 8 | require("dotenv").config(); 9 | const cors = require("cors"); 10 | const cookieParser = require("cookie-parser"); 11 | 12 | const app = express(); 13 | app.use(cookieParser()); 14 | app.use( 15 | cors({ 16 | origin: " http://localhost:3000/", 17 | }) 18 | ); 19 | 20 | app.use(morgan("dev")); 21 | app.use(express.json()); 22 | app.use(express.urlencoded({ extended: true })); 23 | 24 | // +++++++++++ 25 | /* ROUTERS */ 26 | // ++++++++ 27 | app.use("/auth", AuthRouter); 28 | 29 | app.use(UserRouter); 30 | 31 | // ++++++++++++++++++ 32 | /* ERROR HANDLERS */ 33 | // ++++++++++++++++ 34 | app.use(async (_req, _res, next) => { 35 | next(new createError.NotFound("This route does not exist")); 36 | }); 37 | app.use(async (err: ErrorType, _req: Request, res: Response, _next: NextFunction) => { 38 | res.status(err.status || 500); 39 | res.send({ 40 | error: { 41 | status: err.status || 500, 42 | message: err.message, 43 | }, 44 | }); 45 | }); 46 | 47 | const PORT = process.env.PORT || 3001; 48 | 49 | // Init db connection + init express server. 50 | (async () => { 51 | try { 52 | const dbResponse = await initDb(); 53 | console.log(dbResponse); 54 | app.listen(PORT, () => { 55 | console.log("Server has been started!"); 56 | }); 57 | } catch (error) { 58 | throw new Error(error); 59 | } 60 | })(); 61 | -------------------------------------------------------------------------------- /src/Controllers/Auth.Controller.ts: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import { login, logout, refreshToken, register } from "src/Services/Auth.Service"; 3 | 4 | const AuthRouter = express.Router(); 5 | 6 | AuthRouter.post("/register", async (req, res, next) => { 7 | try { 8 | const result = await register(req.body); 9 | res.setHeader("Access-Control-Allow-Origin", "http://localhost:8080"); 10 | res.cookie("refresh_token", result.refreshToken, { maxAge: 60 * 60 * 1000, httpOnly: true, secure: false }); 11 | res.send({ accessToken: result.accessToken }); 12 | } catch (error) { 13 | next(error); 14 | } 15 | }); 16 | 17 | AuthRouter.post("/login", async (req, res, next) => { 18 | try { 19 | const result = await login(req.body); 20 | res.cookie("refresh_token", result.refreshToken, { maxAge: 60 * 60 * 1000, httpOnly: true, secure: false }); 21 | 22 | res.send({ accessToken: result.accessToken }); 23 | } catch (error) { 24 | next(error); 25 | } 26 | }); 27 | 28 | AuthRouter.post("/refresh-token", async (req, res, next) => { 29 | try { 30 | console.log(req.cookies.refresh_token); 31 | const result = await refreshToken({ refreshToken: req.cookies.refresh_token }); 32 | res.cookie("refresh_token", result.refreshToken, { maxAge: 60 * 60 * 1000, httpOnly: true, secure: false }); 33 | res.send({ accessToken: result.accessToken }); 34 | } catch (error) { 35 | next(error); 36 | } 37 | }); 38 | 39 | AuthRouter.delete("/logout", async (req, res, next) => { 40 | try { 41 | res.cookie("refresh_token", "", { maxAge: 60 * 60 * 1000, httpOnly: true, secure: false }); 42 | const result = await logout({ refreshToken: req.cookies.refresh_token }); 43 | res.send(result); 44 | } catch (error) { 45 | next(error); 46 | } 47 | }); 48 | 49 | export default AuthRouter; 50 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /src/Services/Auth.Service.ts: -------------------------------------------------------------------------------- 1 | import { prisma } from "@db"; 2 | import createError from "http-errors"; 3 | import { RegisterDTO, registerSchema } from "../dto/RegisterDTO"; 4 | import * as bcrypt from "bcrypt"; 5 | import { LoginDTO, loginSchema } from "src/dto/LoginDTO"; 6 | import { signAccessToken, signRefreshToken, verifyRefreshToken } from "./Token.Service"; 7 | import { RefreshTokenDTO, refreshTokenSchema } from "src/dto/RefreshTokenDTO"; 8 | import { LogoutDTO, logoutSchema } from "src/dto/LogoutDTO"; 9 | 10 | export const register = async (registerDto: RegisterDTO): Promise => { 11 | const result: RegisterDTO = await registerSchema.validateAsync(registerDto); 12 | const { email, password } = result; 13 | const doesExist = await prisma.user.findUnique({ where: { email: email } }); 14 | if (doesExist) { 15 | throw new createError.Conflict(`${email} is already registered`); 16 | } 17 | const hashedPassword = await bcrypt.hash(password, 10); 18 | const user = await prisma.user.create({ 19 | data: { ...result, password: hashedPassword }, 20 | select: { password: false, email: true, name: true, id: true }, 21 | }); 22 | 23 | const accessToken = await signAccessToken(user.id); 24 | const refreshToken = await signRefreshToken(user.id); 25 | 26 | return { accessToken, refreshToken }; 27 | }; 28 | 29 | export const login = async (loginDto: LoginDTO) => { 30 | const result: LoginDTO = await loginSchema.validateAsync(loginDto); 31 | const { email, password } = result; 32 | const user = await prisma.user.findUnique({ 33 | rejectOnNotFound: true, 34 | where: { email }, 35 | select: { password: true, id: true, email: true }, 36 | }); 37 | if (!user) throw new createError.Unauthorized("User not found"); 38 | const isMatch = await bcrypt.compare(password, user?.password || ""); 39 | if (!isMatch) throw new createError.Unauthorized("Username/password not valid"); 40 | const accessToken = await signAccessToken(user.id); 41 | const refreshToken = await signRefreshToken(user.id); 42 | return { accessToken, refreshToken }; 43 | }; 44 | 45 | export const refreshToken = async (refreshTokenDto: RefreshTokenDTO) => { 46 | const result: RefreshTokenDTO = await refreshTokenSchema.validateAsync(refreshTokenDto, { abortEarly: true }); 47 | const { refreshToken } = result; 48 | if (!refreshToken) { 49 | throw new createError.BadRequest(); 50 | } 51 | const userId = await verifyRefreshToken(refreshToken); 52 | const newAccessToken = await signAccessToken(userId); 53 | const newRefreshToken = await signRefreshToken(userId); 54 | return { accessToken: newAccessToken, refreshToken: newRefreshToken }; 55 | }; 56 | 57 | export const logout = async (logoutDto: LogoutDTO) => { 58 | const result: LogoutDTO = await logoutSchema.validateAsync(logoutDto); 59 | const { refreshToken } = result; 60 | if (!refreshToken) throw new createError.BadRequest(); 61 | const userId = await verifyRefreshToken(refreshToken); 62 | 63 | const user = await prisma.user.update({ data: { refresh_token: null, access_token: null }, where: { id: userId } }); 64 | if (!user) throw new createError.InternalServerError(); 65 | return true; 66 | }; 67 | -------------------------------------------------------------------------------- /src/Services/Token.Service.ts: -------------------------------------------------------------------------------- 1 | import { prisma } from "@db"; 2 | import { NextFunction, Request, Response } from "express"; 3 | import createError from "http-errors"; 4 | import JWT from "jsonwebtoken"; 5 | 6 | export const signAccessToken = (userId: number) => { 7 | return new Promise((resolve, reject) => { 8 | const payload = { 9 | user: { userId }, 10 | }; 11 | const secret = process.env.ACCESS_TOKEN_SECRET || "RandomToken"; 12 | const options = { 13 | expiresIn: "10s", 14 | audience: `${userId}`, 15 | }; 16 | JWT.sign(payload, secret, options, async (err, token) => { 17 | if (err) { 18 | reject(new createError.InternalServerError()); 19 | return; 20 | } 21 | await prisma.user.update({ where: { id: userId }, data: { access_token: token } }); 22 | resolve(token); 23 | }); 24 | }); 25 | }; 26 | 27 | export const verifyAccessToken = (req: Request, _res: Response, next: NextFunction) => { 28 | if (!req.headers["authorization"]) return next(new createError.Unauthorized()); 29 | const authHeader = req.headers["authorization"]; 30 | const bearerToken = authHeader.split(" "); 31 | const token = bearerToken[1]; 32 | JWT.verify(token, process.env.ACCESS_TOKEN_SECRET || "RandomToken", async (err, payload) => { 33 | if (err) { 34 | const message = err.name === "JsonWebTokenError" ? "Unauthorized" : err.message; 35 | return next(new createError.Unauthorized(message)); 36 | } 37 | //@ts-ignore 38 | const user = await prisma.user.findUnique({ where: { id: payload?.user?.userId } }); 39 | if (user?.access_token !== token) { 40 | return next(new createError.Unauthorized()); 41 | } 42 | req.payload = payload; 43 | next(); 44 | }); 45 | }; 46 | 47 | export const signRefreshToken = (userId: number) => 48 | new Promise((resolve, reject) => { 49 | const payload = { 50 | user: { userId }, 51 | }; 52 | const secret = process.env.REFRESH_TOKEN_SECRET || "RandomRefreshToken"; 53 | const options = { 54 | expiresIn: "1y", 55 | audience: `${userId}`, 56 | }; 57 | JWT.sign(payload, secret, options, async (err, token) => { 58 | if (err) { 59 | reject(new createError.InternalServerError()); 60 | } 61 | await prisma.user.update({ where: { id: userId }, data: { refresh_token: token } }); 62 | resolve(token); 63 | }); 64 | }); 65 | 66 | export const verifyRefreshToken = (refreshToken: string): Promise => 67 | new Promise((resolve, reject) => { 68 | JWT.verify(refreshToken, process.env.REFRESH_TOKEN_SECRET || "RandomRefreshToken", async (err, payload: any) => { 69 | if (err) return reject(new createError.Unauthorized()); 70 | const userId: string | undefined = payload.aud; 71 | if (!userId) { 72 | throw new createError.Unauthorized(); 73 | } 74 | const user = await prisma.user.findUnique({ where: { id: +userId } }); 75 | if (!user) { 76 | reject(new createError.Unauthorized()); 77 | } 78 | if (refreshToken === user?.refresh_token) return resolve(+userId); 79 | reject(new createError.Unauthorized()); 80 | }); 81 | }); 82 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@hapi/address@^4.0.1": 6 | version "4.1.0" 7 | resolved "https://registry.yarnpkg.com/@hapi/address/-/address-4.1.0.tgz#d60c5c0d930e77456fdcde2598e77302e2955e1d" 8 | integrity sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ== 9 | dependencies: 10 | "@hapi/hoek" "^9.0.0" 11 | 12 | "@hapi/formula@^2.0.0": 13 | version "2.0.0" 14 | resolved "https://registry.yarnpkg.com/@hapi/formula/-/formula-2.0.0.tgz#edade0619ed58c8e4f164f233cda70211e787128" 15 | integrity sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A== 16 | 17 | "@hapi/hoek@^9.0.0": 18 | version "9.1.1" 19 | resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.1.1.tgz#9daf5745156fd84b8e9889a2dc721f0c58e894aa" 20 | integrity sha512-CAEbWH7OIur6jEOzaai83jq3FmKmv4PmX1JYfs9IrYcGEVI/lyL1EXJGCj7eFVJ0bg5QR8LMxBlEtA+xKiLpFw== 21 | 22 | "@hapi/joi@^17.1.1": 23 | version "17.1.1" 24 | resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-17.1.1.tgz#9cc8d7e2c2213d1e46708c6260184b447c661350" 25 | integrity sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg== 26 | dependencies: 27 | "@hapi/address" "^4.0.1" 28 | "@hapi/formula" "^2.0.0" 29 | "@hapi/hoek" "^9.0.0" 30 | "@hapi/pinpoint" "^2.0.0" 31 | "@hapi/topo" "^5.0.0" 32 | 33 | "@hapi/pinpoint@^2.0.0": 34 | version "2.0.0" 35 | resolved "https://registry.yarnpkg.com/@hapi/pinpoint/-/pinpoint-2.0.0.tgz#805b40d4dbec04fc116a73089494e00f073de8df" 36 | integrity sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw== 37 | 38 | "@hapi/topo@^5.0.0": 39 | version "5.0.0" 40 | resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.0.0.tgz#c19af8577fa393a06e9c77b60995af959be721e7" 41 | integrity sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw== 42 | dependencies: 43 | "@hapi/hoek" "^9.0.0" 44 | 45 | "@prisma/cli@2.15.0": 46 | version "2.15.0" 47 | resolved "https://registry.yarnpkg.com/@prisma/cli/-/cli-2.15.0.tgz#a979a67dbd606a966cf475686170128562590713" 48 | integrity sha512-sF2mgn5oH5fL9/CKxS0tqojf0rK2BKODlEUqL+2s3YZqvJRSt4iFpiyjgajyd0wyTyv1k9LDHTV0yOD1mXDBsA== 49 | dependencies: 50 | "@prisma/engines" "2.15.0-25.e51dc3b5a9ee790a07104bec1c9477d51740fe54" 51 | 52 | "@prisma/client@^2.15.0": 53 | version "2.15.0" 54 | resolved "https://registry.yarnpkg.com/@prisma/client/-/client-2.15.0.tgz#41ee22c60778b54aec0f6d4832c2d35fbf9eb423" 55 | integrity sha512-3j4OoLpAGF104KAenUFJM9sU2+4jRP+RlrlYssBHkwBf+/5+2ihSpcmFiWIw1vXNRdmZtivjwhjcVtmjZPJktw== 56 | dependencies: 57 | "@prisma/engines-version" "2.15.0-25.e51dc3b5a9ee790a07104bec1c9477d51740fe54" 58 | 59 | "@prisma/engines-version@2.15.0-25.e51dc3b5a9ee790a07104bec1c9477d51740fe54": 60 | version "2.15.0-25.e51dc3b5a9ee790a07104bec1c9477d51740fe54" 61 | resolved "https://registry.yarnpkg.com/@prisma/engines-version/-/engines-version-2.15.0-25.e51dc3b5a9ee790a07104bec1c9477d51740fe54.tgz#d9c887bc8f30d1f107c9021b2565a8672d62622d" 62 | integrity sha512-KDxk7Zsc9tDoShCE7v+O1SnCUTUkMdfezjbuz9CBvdEBGMtYLgyHaZAO8M038uqy8KjgwV9PzyoLqvVfzfsngg== 63 | 64 | "@prisma/engines@2.15.0-25.e51dc3b5a9ee790a07104bec1c9477d51740fe54": 65 | version "2.15.0-25.e51dc3b5a9ee790a07104bec1c9477d51740fe54" 66 | resolved "https://registry.yarnpkg.com/@prisma/engines/-/engines-2.15.0-25.e51dc3b5a9ee790a07104bec1c9477d51740fe54.tgz#3093ace7c09cf694214727c4e67109f2a2d8855a" 67 | integrity sha512-AgPxAWtwYhhTNEEsV4lK63HTe9z0GAGL3ofMr2B0TncACmzi9lhdun9TTNie38Oy/3DLfr71TUHKUpV8QjOKUw== 68 | 69 | "@sideway/address@^4.1.0": 70 | version "4.1.0" 71 | resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.0.tgz#0b301ada10ac4e0e3fa525c90615e0b61a72b78d" 72 | integrity sha512-wAH/JYRXeIFQRsxerIuLjgUu2Xszam+O5xKeatJ4oudShOOirfmsQ1D6LL54XOU2tizpCYku+s1wmU0SYdpoSA== 73 | dependencies: 74 | "@hapi/hoek" "^9.0.0" 75 | 76 | "@sideway/formula@^3.0.0": 77 | version "3.0.0" 78 | resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" 79 | integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== 80 | 81 | "@sideway/pinpoint@^2.0.0": 82 | version "2.0.0" 83 | resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" 84 | integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== 85 | 86 | "@types/bcrypt@^3.0.0": 87 | version "3.0.0" 88 | resolved "https://registry.yarnpkg.com/@types/bcrypt/-/bcrypt-3.0.0.tgz#851489a9065a067cb7f3c9cbe4ce9bed8bba0876" 89 | integrity sha512-nohgNyv+1ViVcubKBh0+XiNJ3dO8nYu///9aJ4cgSqv70gBL+94SNy/iC2NLzKPT2Zt/QavrOkBVbZRLZmw6NQ== 90 | 91 | "@types/body-parser@*": 92 | version "1.19.0" 93 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.0.tgz#0685b3c47eb3006ffed117cdd55164b61f80538f" 94 | integrity sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ== 95 | dependencies: 96 | "@types/connect" "*" 97 | "@types/node" "*" 98 | 99 | "@types/connect@*": 100 | version "3.4.34" 101 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.34.tgz#170a40223a6d666006d93ca128af2beb1d9b1901" 102 | integrity sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ== 103 | dependencies: 104 | "@types/node" "*" 105 | 106 | "@types/express-serve-static-core@^4.17.18": 107 | version "4.17.18" 108 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz#8371e260f40e0e1ca0c116a9afcd9426fa094c40" 109 | integrity sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA== 110 | dependencies: 111 | "@types/node" "*" 112 | "@types/qs" "*" 113 | "@types/range-parser" "*" 114 | 115 | "@types/express@^4.17.11": 116 | version "4.17.11" 117 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.11.tgz#debe3caa6f8e5fcda96b47bd54e2f40c4ee59545" 118 | integrity sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg== 119 | dependencies: 120 | "@types/body-parser" "*" 121 | "@types/express-serve-static-core" "^4.17.18" 122 | "@types/qs" "*" 123 | "@types/serve-static" "*" 124 | 125 | "@types/http-errors@^1.8.0": 126 | version "1.8.0" 127 | resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-1.8.0.tgz#682477dbbbd07cd032731cb3b0e7eaee3d026b69" 128 | integrity sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA== 129 | 130 | "@types/json5@^0.0.29": 131 | version "0.0.29" 132 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" 133 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= 134 | 135 | "@types/jsonwebtoken@^8.5.0": 136 | version "8.5.0" 137 | resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz#2531d5e300803aa63279b232c014acf780c981c5" 138 | integrity sha512-9bVao7LvyorRGZCw0VmH/dr7Og+NdjYSsKAxB43OQoComFbBgsEpoR9JW6+qSq/ogwVBg8GI2MfAlk4SYI4OLg== 139 | dependencies: 140 | "@types/node" "*" 141 | 142 | "@types/mime@^1": 143 | version "1.3.2" 144 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" 145 | integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== 146 | 147 | "@types/morgan@^1.9.2": 148 | version "1.9.2" 149 | resolved "https://registry.yarnpkg.com/@types/morgan/-/morgan-1.9.2.tgz#450f958a4d3fb0694a3ba012b09c8106f9a2885e" 150 | integrity sha512-edtGMEdit146JwwIeyQeHHg9yID4WSolQPxpEorHmN3KuytuCHyn2ELNr5Uxy8SerniFbbkmgKMrGM933am5BQ== 151 | dependencies: 152 | "@types/node" "*" 153 | 154 | "@types/node-fetch@^2.5.8": 155 | version "2.5.8" 156 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.8.tgz#e199c835d234c7eb0846f6618012e558544ee2fb" 157 | integrity sha512-fbjI6ja0N5ZA8TV53RUqzsKNkl9fv8Oj3T7zxW7FGv1GSH7gwJaNF8dzCjrqKaxKeUpTz4yT1DaJFq/omNpGfw== 158 | dependencies: 159 | "@types/node" "*" 160 | form-data "^3.0.0" 161 | 162 | "@types/node@*": 163 | version "14.14.22" 164 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" 165 | integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== 166 | 167 | "@types/qs@*": 168 | version "6.9.5" 169 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" 170 | integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== 171 | 172 | "@types/range-parser@*": 173 | version "1.2.3" 174 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.3.tgz#7ee330ba7caafb98090bece86a5ee44115904c2c" 175 | integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA== 176 | 177 | "@types/serve-static@*": 178 | version "1.13.9" 179 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e" 180 | integrity sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA== 181 | dependencies: 182 | "@types/mime" "^1" 183 | "@types/node" "*" 184 | 185 | "@types/strip-bom@^3.0.0": 186 | version "3.0.0" 187 | resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" 188 | integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= 189 | 190 | "@types/strip-json-comments@0.0.30": 191 | version "0.0.30" 192 | resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" 193 | integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== 194 | 195 | abbrev@1: 196 | version "1.1.1" 197 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 198 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 199 | 200 | accepts@~1.3.7: 201 | version "1.3.7" 202 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 203 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 204 | dependencies: 205 | mime-types "~2.1.24" 206 | negotiator "0.6.2" 207 | 208 | ajv@^6.12.3: 209 | version "6.12.6" 210 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 211 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 212 | dependencies: 213 | fast-deep-equal "^3.1.1" 214 | fast-json-stable-stringify "^2.0.0" 215 | json-schema-traverse "^0.4.1" 216 | uri-js "^4.2.2" 217 | 218 | ansi-regex@^2.0.0: 219 | version "2.1.1" 220 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 221 | integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= 222 | 223 | ansi-regex@^3.0.0: 224 | version "3.0.0" 225 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 226 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 227 | 228 | anymatch@~3.1.1: 229 | version "3.1.1" 230 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 231 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 232 | dependencies: 233 | normalize-path "^3.0.0" 234 | picomatch "^2.0.4" 235 | 236 | aproba@^1.0.3: 237 | version "1.2.0" 238 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 239 | integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== 240 | 241 | are-we-there-yet@~1.1.2: 242 | version "1.1.5" 243 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 244 | integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== 245 | dependencies: 246 | delegates "^1.0.0" 247 | readable-stream "^2.0.6" 248 | 249 | arg@^4.1.0: 250 | version "4.1.3" 251 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 252 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 253 | 254 | array-find-index@^1.0.1: 255 | version "1.0.2" 256 | resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" 257 | integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= 258 | 259 | array-flatten@1.1.1: 260 | version "1.1.1" 261 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 262 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 263 | 264 | asn1@~0.2.3: 265 | version "0.2.4" 266 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" 267 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== 268 | dependencies: 269 | safer-buffer "~2.1.0" 270 | 271 | assert-plus@1.0.0, assert-plus@^1.0.0: 272 | version "1.0.0" 273 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 274 | integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= 275 | 276 | asynckit@^0.4.0: 277 | version "0.4.0" 278 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 279 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 280 | 281 | aws-sign2@~0.7.0: 282 | version "0.7.0" 283 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" 284 | integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= 285 | 286 | aws4@^1.8.0: 287 | version "1.11.0" 288 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" 289 | integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== 290 | 291 | balanced-match@^1.0.0: 292 | version "1.0.0" 293 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 294 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 295 | 296 | basic-auth@~2.0.1: 297 | version "2.0.1" 298 | resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" 299 | integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== 300 | dependencies: 301 | safe-buffer "5.1.2" 302 | 303 | bcrypt-pbkdf@^1.0.0: 304 | version "1.0.2" 305 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" 306 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= 307 | dependencies: 308 | tweetnacl "^0.14.3" 309 | 310 | bcrypt@^5.0.0: 311 | version "5.0.0" 312 | resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-5.0.0.tgz#051407c7cd5ffbfb773d541ca3760ea0754e37e2" 313 | integrity sha512-jB0yCBl4W/kVHM2whjfyqnxTmOHkCX4kHEa5nYKSoGeYe8YrjTYTc87/6bwt1g8cmV0QrbhKriETg9jWtcREhg== 314 | dependencies: 315 | node-addon-api "^3.0.0" 316 | node-pre-gyp "0.15.0" 317 | 318 | binary-extensions@^2.0.0: 319 | version "2.2.0" 320 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 321 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 322 | 323 | body-parser@1.19.0: 324 | version "1.19.0" 325 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 326 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 327 | dependencies: 328 | bytes "3.1.0" 329 | content-type "~1.0.4" 330 | debug "2.6.9" 331 | depd "~1.1.2" 332 | http-errors "1.7.2" 333 | iconv-lite "0.4.24" 334 | on-finished "~2.3.0" 335 | qs "6.7.0" 336 | raw-body "2.4.0" 337 | type-is "~1.6.17" 338 | 339 | brace-expansion@^1.1.7: 340 | version "1.1.11" 341 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 342 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 343 | dependencies: 344 | balanced-match "^1.0.0" 345 | concat-map "0.0.1" 346 | 347 | braces@~3.0.2: 348 | version "3.0.2" 349 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 350 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 351 | dependencies: 352 | fill-range "^7.0.1" 353 | 354 | buffer-equal-constant-time@1.0.1: 355 | version "1.0.1" 356 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" 357 | integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= 358 | 359 | buffer-from@^1.0.0: 360 | version "1.1.1" 361 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 362 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 363 | 364 | bytes@3.1.0: 365 | version "3.1.0" 366 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 367 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 368 | 369 | camelcase-keys@^2.0.0: 370 | version "2.1.0" 371 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" 372 | integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= 373 | dependencies: 374 | camelcase "^2.0.0" 375 | map-obj "^1.0.0" 376 | 377 | camelcase@^2.0.0: 378 | version "2.1.1" 379 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" 380 | integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= 381 | 382 | caseless@~0.12.0: 383 | version "0.12.0" 384 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 385 | integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= 386 | 387 | chokidar@^3.4.0: 388 | version "3.5.1" 389 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" 390 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== 391 | dependencies: 392 | anymatch "~3.1.1" 393 | braces "~3.0.2" 394 | glob-parent "~5.1.0" 395 | is-binary-path "~2.1.0" 396 | is-glob "~4.0.1" 397 | normalize-path "~3.0.0" 398 | readdirp "~3.5.0" 399 | optionalDependencies: 400 | fsevents "~2.3.1" 401 | 402 | chownr@^1.1.1: 403 | version "1.1.4" 404 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" 405 | integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== 406 | 407 | code-point-at@^1.0.0: 408 | version "1.1.0" 409 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 410 | integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= 411 | 412 | combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: 413 | version "1.0.8" 414 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 415 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 416 | dependencies: 417 | delayed-stream "~1.0.0" 418 | 419 | concat-map@0.0.1: 420 | version "0.0.1" 421 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 422 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 423 | 424 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 425 | version "1.1.0" 426 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 427 | integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= 428 | 429 | content-disposition@0.5.3: 430 | version "0.5.3" 431 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 432 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 433 | dependencies: 434 | safe-buffer "5.1.2" 435 | 436 | content-type@~1.0.4: 437 | version "1.0.4" 438 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 439 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 440 | 441 | cookie-parser@^1.4.5: 442 | version "1.4.5" 443 | resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.5.tgz#3e572d4b7c0c80f9c61daf604e4336831b5d1d49" 444 | integrity sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw== 445 | dependencies: 446 | cookie "0.4.0" 447 | cookie-signature "1.0.6" 448 | 449 | cookie-signature@1.0.6: 450 | version "1.0.6" 451 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 452 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 453 | 454 | cookie@0.4.0: 455 | version "0.4.0" 456 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 457 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 458 | 459 | core-util-is@1.0.2, core-util-is@~1.0.0: 460 | version "1.0.2" 461 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 462 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 463 | 464 | cors@^2.8.5: 465 | version "2.8.5" 466 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 467 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 468 | dependencies: 469 | object-assign "^4" 470 | vary "^1" 471 | 472 | create-require@^1.1.0: 473 | version "1.1.1" 474 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 475 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 476 | 477 | currently-unhandled@^0.4.1: 478 | version "0.4.1" 479 | resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" 480 | integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= 481 | dependencies: 482 | array-find-index "^1.0.1" 483 | 484 | dashdash@^1.12.0: 485 | version "1.14.1" 486 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 487 | integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= 488 | dependencies: 489 | assert-plus "^1.0.0" 490 | 491 | dateformat@~1.0.4-1.2.3: 492 | version "1.0.12" 493 | resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" 494 | integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= 495 | dependencies: 496 | get-stdin "^4.0.1" 497 | meow "^3.3.0" 498 | 499 | debug@2.6.9: 500 | version "2.6.9" 501 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 502 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 503 | dependencies: 504 | ms "2.0.0" 505 | 506 | debug@^3.2.6: 507 | version "3.2.7" 508 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 509 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 510 | dependencies: 511 | ms "^2.1.1" 512 | 513 | decamelize@^1.1.2: 514 | version "1.2.0" 515 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 516 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 517 | 518 | deep-extend@^0.6.0: 519 | version "0.6.0" 520 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 521 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 522 | 523 | delayed-stream@~1.0.0: 524 | version "1.0.0" 525 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 526 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 527 | 528 | delegates@^1.0.0: 529 | version "1.0.0" 530 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 531 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= 532 | 533 | depd@~1.1.2: 534 | version "1.1.2" 535 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 536 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 537 | 538 | depd@~2.0.0: 539 | version "2.0.0" 540 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 541 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 542 | 543 | destroy@~1.0.4: 544 | version "1.0.4" 545 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 546 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 547 | 548 | detect-libc@^1.0.2: 549 | version "1.0.3" 550 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 551 | integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= 552 | 553 | diff@^4.0.1: 554 | version "4.0.2" 555 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 556 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 557 | 558 | dom-walk@^0.1.0: 559 | version "0.1.2" 560 | resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" 561 | integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== 562 | 563 | dotenv@^8.2.0: 564 | version "8.2.0" 565 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" 566 | integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== 567 | 568 | dynamic-dedupe@^0.3.0: 569 | version "0.3.0" 570 | resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" 571 | integrity sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE= 572 | dependencies: 573 | xtend "^4.0.0" 574 | 575 | ecc-jsbn@~0.1.1: 576 | version "0.1.2" 577 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" 578 | integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= 579 | dependencies: 580 | jsbn "~0.1.0" 581 | safer-buffer "^2.1.0" 582 | 583 | ecdsa-sig-formatter@1.0.11: 584 | version "1.0.11" 585 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" 586 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== 587 | dependencies: 588 | safe-buffer "^5.0.1" 589 | 590 | ee-first@1.1.1: 591 | version "1.1.1" 592 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 593 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 594 | 595 | encodeurl@~1.0.2: 596 | version "1.0.2" 597 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 598 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 599 | 600 | error-ex@^1.2.0: 601 | version "1.3.2" 602 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 603 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 604 | dependencies: 605 | is-arrayish "^0.2.1" 606 | 607 | escape-html@~1.0.3: 608 | version "1.0.3" 609 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 610 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 611 | 612 | etag@~1.8.1: 613 | version "1.8.1" 614 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 615 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 616 | 617 | express@^4.17.1: 618 | version "4.17.1" 619 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 620 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 621 | dependencies: 622 | accepts "~1.3.7" 623 | array-flatten "1.1.1" 624 | body-parser "1.19.0" 625 | content-disposition "0.5.3" 626 | content-type "~1.0.4" 627 | cookie "0.4.0" 628 | cookie-signature "1.0.6" 629 | debug "2.6.9" 630 | depd "~1.1.2" 631 | encodeurl "~1.0.2" 632 | escape-html "~1.0.3" 633 | etag "~1.8.1" 634 | finalhandler "~1.1.2" 635 | fresh "0.5.2" 636 | merge-descriptors "1.0.1" 637 | methods "~1.1.2" 638 | on-finished "~2.3.0" 639 | parseurl "~1.3.3" 640 | path-to-regexp "0.1.7" 641 | proxy-addr "~2.0.5" 642 | qs "6.7.0" 643 | range-parser "~1.2.1" 644 | safe-buffer "5.1.2" 645 | send "0.17.1" 646 | serve-static "1.14.1" 647 | setprototypeof "1.1.1" 648 | statuses "~1.5.0" 649 | type-is "~1.6.18" 650 | utils-merge "1.0.1" 651 | vary "~1.1.2" 652 | 653 | extend@~3.0.2: 654 | version "3.0.2" 655 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" 656 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== 657 | 658 | extsprintf@1.3.0: 659 | version "1.3.0" 660 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 661 | integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= 662 | 663 | extsprintf@^1.2.0: 664 | version "1.4.0" 665 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 666 | integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= 667 | 668 | fast-deep-equal@^3.1.1: 669 | version "3.1.3" 670 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 671 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 672 | 673 | fast-json-stable-stringify@^2.0.0: 674 | version "2.1.0" 675 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 676 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 677 | 678 | fill-range@^7.0.1: 679 | version "7.0.1" 680 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 681 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 682 | dependencies: 683 | to-regex-range "^5.0.1" 684 | 685 | finalhandler@~1.1.2: 686 | version "1.1.2" 687 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 688 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 689 | dependencies: 690 | debug "2.6.9" 691 | encodeurl "~1.0.2" 692 | escape-html "~1.0.3" 693 | on-finished "~2.3.0" 694 | parseurl "~1.3.3" 695 | statuses "~1.5.0" 696 | unpipe "~1.0.0" 697 | 698 | find-up@^1.0.0: 699 | version "1.1.2" 700 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" 701 | integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= 702 | dependencies: 703 | path-exists "^2.0.0" 704 | pinkie-promise "^2.0.0" 705 | 706 | forever-agent@~0.6.1: 707 | version "0.6.1" 708 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 709 | integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= 710 | 711 | form-data@^3.0.0: 712 | version "3.0.1" 713 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" 714 | integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== 715 | dependencies: 716 | asynckit "^0.4.0" 717 | combined-stream "^1.0.8" 718 | mime-types "^2.1.12" 719 | 720 | form-data@~2.3.2: 721 | version "2.3.3" 722 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" 723 | integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== 724 | dependencies: 725 | asynckit "^0.4.0" 726 | combined-stream "^1.0.6" 727 | mime-types "^2.1.12" 728 | 729 | forwarded@~0.1.2: 730 | version "0.1.2" 731 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 732 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 733 | 734 | fresh@0.5.2: 735 | version "0.5.2" 736 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 737 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 738 | 739 | fs-minipass@^1.2.5: 740 | version "1.2.7" 741 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" 742 | integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== 743 | dependencies: 744 | minipass "^2.6.0" 745 | 746 | fs.realpath@^1.0.0: 747 | version "1.0.0" 748 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 749 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 750 | 751 | fsevents@~2.3.1: 752 | version "2.3.1" 753 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" 754 | integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== 755 | 756 | function-bind@^1.1.1: 757 | version "1.1.1" 758 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 759 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 760 | 761 | gauge@~2.7.3: 762 | version "2.7.4" 763 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 764 | integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= 765 | dependencies: 766 | aproba "^1.0.3" 767 | console-control-strings "^1.0.0" 768 | has-unicode "^2.0.0" 769 | object-assign "^4.1.0" 770 | signal-exit "^3.0.0" 771 | string-width "^1.0.1" 772 | strip-ansi "^3.0.1" 773 | wide-align "^1.1.0" 774 | 775 | get-stdin@^4.0.1: 776 | version "4.0.1" 777 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 778 | integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= 779 | 780 | getpass@^0.1.1: 781 | version "0.1.7" 782 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 783 | integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= 784 | dependencies: 785 | assert-plus "^1.0.0" 786 | 787 | glob-parent@~5.1.0: 788 | version "5.1.1" 789 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 790 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 791 | dependencies: 792 | is-glob "^4.0.1" 793 | 794 | glob@^7.1.3: 795 | version "7.1.6" 796 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 797 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 798 | dependencies: 799 | fs.realpath "^1.0.0" 800 | inflight "^1.0.4" 801 | inherits "2" 802 | minimatch "^3.0.4" 803 | once "^1.3.0" 804 | path-is-absolute "^1.0.0" 805 | 806 | global@~4.4.0: 807 | version "4.4.0" 808 | resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" 809 | integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== 810 | dependencies: 811 | min-document "^2.19.0" 812 | process "^0.11.10" 813 | 814 | graceful-fs@^4.1.2: 815 | version "4.2.4" 816 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" 817 | integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== 818 | 819 | growly@^1.3.0: 820 | version "1.3.0" 821 | resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" 822 | integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= 823 | 824 | har-schema@^2.0.0: 825 | version "2.0.0" 826 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" 827 | integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= 828 | 829 | har-validator@~5.1.3: 830 | version "5.1.5" 831 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" 832 | integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== 833 | dependencies: 834 | ajv "^6.12.3" 835 | har-schema "^2.0.0" 836 | 837 | has-unicode@^2.0.0: 838 | version "2.0.1" 839 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 840 | integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= 841 | 842 | has@^1.0.3: 843 | version "1.0.3" 844 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 845 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 846 | dependencies: 847 | function-bind "^1.1.1" 848 | 849 | hosted-git-info@^2.1.4: 850 | version "2.8.8" 851 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" 852 | integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== 853 | 854 | http-errors@1.7.2: 855 | version "1.7.2" 856 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 857 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 858 | dependencies: 859 | depd "~1.1.2" 860 | inherits "2.0.3" 861 | setprototypeof "1.1.1" 862 | statuses ">= 1.5.0 < 2" 863 | toidentifier "1.0.0" 864 | 865 | http-errors@^1.8.0: 866 | version "1.8.0" 867 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" 868 | integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== 869 | dependencies: 870 | depd "~1.1.2" 871 | inherits "2.0.4" 872 | setprototypeof "1.2.0" 873 | statuses ">= 1.5.0 < 2" 874 | toidentifier "1.0.0" 875 | 876 | http-errors@~1.7.2: 877 | version "1.7.3" 878 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 879 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 880 | dependencies: 881 | depd "~1.1.2" 882 | inherits "2.0.4" 883 | setprototypeof "1.1.1" 884 | statuses ">= 1.5.0 < 2" 885 | toidentifier "1.0.0" 886 | 887 | http-signature@~1.2.0: 888 | version "1.2.0" 889 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" 890 | integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= 891 | dependencies: 892 | assert-plus "^1.0.0" 893 | jsprim "^1.2.2" 894 | sshpk "^1.7.0" 895 | 896 | iconv-lite@0.4.24, iconv-lite@^0.4.4: 897 | version "0.4.24" 898 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 899 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 900 | dependencies: 901 | safer-buffer ">= 2.1.2 < 3" 902 | 903 | ignore-walk@^3.0.1: 904 | version "3.0.3" 905 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" 906 | integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== 907 | dependencies: 908 | minimatch "^3.0.4" 909 | 910 | indent-string@^2.1.0: 911 | version "2.1.0" 912 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" 913 | integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= 914 | dependencies: 915 | repeating "^2.0.0" 916 | 917 | inflight@^1.0.4: 918 | version "1.0.6" 919 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 920 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 921 | dependencies: 922 | once "^1.3.0" 923 | wrappy "1" 924 | 925 | inherits@2, inherits@2.0.4, inherits@~2.0.3: 926 | version "2.0.4" 927 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 928 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 929 | 930 | inherits@2.0.3: 931 | version "2.0.3" 932 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 933 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 934 | 935 | ini@~1.3.0: 936 | version "1.3.8" 937 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 938 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 939 | 940 | ipaddr.js@1.9.1: 941 | version "1.9.1" 942 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 943 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 944 | 945 | is-arrayish@^0.2.1: 946 | version "0.2.1" 947 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 948 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 949 | 950 | is-binary-path@~2.1.0: 951 | version "2.1.0" 952 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 953 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 954 | dependencies: 955 | binary-extensions "^2.0.0" 956 | 957 | is-core-module@^2.1.0: 958 | version "2.2.0" 959 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" 960 | integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== 961 | dependencies: 962 | has "^1.0.3" 963 | 964 | is-extglob@^2.1.1: 965 | version "2.1.1" 966 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 967 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 968 | 969 | is-finite@^1.0.0: 970 | version "1.1.0" 971 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" 972 | integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== 973 | 974 | is-fullwidth-code-point@^1.0.0: 975 | version "1.0.0" 976 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 977 | integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= 978 | dependencies: 979 | number-is-nan "^1.0.0" 980 | 981 | is-fullwidth-code-point@^2.0.0: 982 | version "2.0.0" 983 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 984 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 985 | 986 | is-function@^1.0.1: 987 | version "1.0.2" 988 | resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" 989 | integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== 990 | 991 | is-glob@^4.0.1, is-glob@~4.0.1: 992 | version "4.0.1" 993 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 994 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 995 | dependencies: 996 | is-extglob "^2.1.1" 997 | 998 | is-number@^7.0.0: 999 | version "7.0.0" 1000 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1001 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1002 | 1003 | is-typedarray@~1.0.0: 1004 | version "1.0.0" 1005 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1006 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 1007 | 1008 | is-utf8@^0.2.0: 1009 | version "0.2.1" 1010 | resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" 1011 | integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= 1012 | 1013 | is-wsl@^1.1.0: 1014 | version "1.1.0" 1015 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" 1016 | integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= 1017 | 1018 | isarray@~1.0.0: 1019 | version "1.0.0" 1020 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1021 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1022 | 1023 | isexe@^2.0.0: 1024 | version "2.0.0" 1025 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1026 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1027 | 1028 | isstream@~0.1.2: 1029 | version "0.1.2" 1030 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1031 | integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= 1032 | 1033 | joi@^17.3.0: 1034 | version "17.3.0" 1035 | resolved "https://registry.yarnpkg.com/joi/-/joi-17.3.0.tgz#f1be4a6ce29bc1716665819ac361dfa139fff5d2" 1036 | integrity sha512-Qh5gdU6niuYbUIUV5ejbsMiiFmBdw8Kcp8Buj2JntszCkCfxJ9Cz76OtHxOZMPXrt5810iDIXs+n1nNVoquHgg== 1037 | dependencies: 1038 | "@hapi/hoek" "^9.0.0" 1039 | "@hapi/topo" "^5.0.0" 1040 | "@sideway/address" "^4.1.0" 1041 | "@sideway/formula" "^3.0.0" 1042 | "@sideway/pinpoint" "^2.0.0" 1043 | 1044 | jsbn@~0.1.0: 1045 | version "0.1.1" 1046 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1047 | integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= 1048 | 1049 | json-schema-traverse@^0.4.1: 1050 | version "0.4.1" 1051 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1052 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1053 | 1054 | json-schema@0.2.3: 1055 | version "0.2.3" 1056 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1057 | integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= 1058 | 1059 | json-stringify-safe@~5.0.1: 1060 | version "5.0.1" 1061 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1062 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= 1063 | 1064 | json5@^1.0.1: 1065 | version "1.0.1" 1066 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" 1067 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== 1068 | dependencies: 1069 | minimist "^1.2.0" 1070 | 1071 | jsonwebtoken@^8.5.1: 1072 | version "8.5.1" 1073 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" 1074 | integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== 1075 | dependencies: 1076 | jws "^3.2.2" 1077 | lodash.includes "^4.3.0" 1078 | lodash.isboolean "^3.0.3" 1079 | lodash.isinteger "^4.0.4" 1080 | lodash.isnumber "^3.0.3" 1081 | lodash.isplainobject "^4.0.6" 1082 | lodash.isstring "^4.0.1" 1083 | lodash.once "^4.0.0" 1084 | ms "^2.1.1" 1085 | semver "^5.6.0" 1086 | 1087 | jsprim@^1.2.2: 1088 | version "1.4.1" 1089 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1090 | integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= 1091 | dependencies: 1092 | assert-plus "1.0.0" 1093 | extsprintf "1.3.0" 1094 | json-schema "0.2.3" 1095 | verror "1.10.0" 1096 | 1097 | jwa@^1.4.1: 1098 | version "1.4.1" 1099 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" 1100 | integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== 1101 | dependencies: 1102 | buffer-equal-constant-time "1.0.1" 1103 | ecdsa-sig-formatter "1.0.11" 1104 | safe-buffer "^5.0.1" 1105 | 1106 | jws@^3.2.2: 1107 | version "3.2.2" 1108 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" 1109 | integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== 1110 | dependencies: 1111 | jwa "^1.4.1" 1112 | safe-buffer "^5.0.1" 1113 | 1114 | load-json-file@^1.0.0: 1115 | version "1.1.0" 1116 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" 1117 | integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= 1118 | dependencies: 1119 | graceful-fs "^4.1.2" 1120 | parse-json "^2.2.0" 1121 | pify "^2.0.0" 1122 | pinkie-promise "^2.0.0" 1123 | strip-bom "^2.0.0" 1124 | 1125 | lodash.includes@^4.3.0: 1126 | version "4.3.0" 1127 | resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" 1128 | integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= 1129 | 1130 | lodash.isboolean@^3.0.3: 1131 | version "3.0.3" 1132 | resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" 1133 | integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= 1134 | 1135 | lodash.isinteger@^4.0.4: 1136 | version "4.0.4" 1137 | resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" 1138 | integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= 1139 | 1140 | lodash.isnumber@^3.0.3: 1141 | version "3.0.3" 1142 | resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" 1143 | integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= 1144 | 1145 | lodash.isplainobject@^4.0.6: 1146 | version "4.0.6" 1147 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" 1148 | integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= 1149 | 1150 | lodash.isstring@^4.0.1: 1151 | version "4.0.1" 1152 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" 1153 | integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= 1154 | 1155 | lodash.once@^4.0.0: 1156 | version "4.1.1" 1157 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" 1158 | integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= 1159 | 1160 | loud-rejection@^1.0.0: 1161 | version "1.6.0" 1162 | resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" 1163 | integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= 1164 | dependencies: 1165 | currently-unhandled "^0.4.1" 1166 | signal-exit "^3.0.0" 1167 | 1168 | make-error@^1.1.1: 1169 | version "1.3.6" 1170 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 1171 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 1172 | 1173 | map-obj@^1.0.0, map-obj@^1.0.1: 1174 | version "1.0.1" 1175 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" 1176 | integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= 1177 | 1178 | media-typer@0.3.0: 1179 | version "0.3.0" 1180 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1181 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 1182 | 1183 | meow@^3.3.0: 1184 | version "3.7.0" 1185 | resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" 1186 | integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= 1187 | dependencies: 1188 | camelcase-keys "^2.0.0" 1189 | decamelize "^1.1.2" 1190 | loud-rejection "^1.0.0" 1191 | map-obj "^1.0.1" 1192 | minimist "^1.1.3" 1193 | normalize-package-data "^2.3.4" 1194 | object-assign "^4.0.1" 1195 | read-pkg-up "^1.0.1" 1196 | redent "^1.0.0" 1197 | trim-newlines "^1.0.0" 1198 | 1199 | merge-descriptors@1.0.1: 1200 | version "1.0.1" 1201 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1202 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 1203 | 1204 | methods@~1.1.2: 1205 | version "1.1.2" 1206 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1207 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 1208 | 1209 | mime-db@1.45.0: 1210 | version "1.45.0" 1211 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" 1212 | integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== 1213 | 1214 | mime-db@1.46.0: 1215 | version "1.46.0" 1216 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" 1217 | integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== 1218 | 1219 | mime-types@^2.1.12, mime-types@~2.1.19: 1220 | version "2.1.29" 1221 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" 1222 | integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== 1223 | dependencies: 1224 | mime-db "1.46.0" 1225 | 1226 | mime-types@~2.1.24: 1227 | version "2.1.28" 1228 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" 1229 | integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== 1230 | dependencies: 1231 | mime-db "1.45.0" 1232 | 1233 | mime@1.6.0: 1234 | version "1.6.0" 1235 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 1236 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 1237 | 1238 | min-document@^2.19.0: 1239 | version "2.19.0" 1240 | resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" 1241 | integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= 1242 | dependencies: 1243 | dom-walk "^0.1.0" 1244 | 1245 | minimatch@^3.0.4: 1246 | version "3.0.4" 1247 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1248 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1249 | dependencies: 1250 | brace-expansion "^1.1.7" 1251 | 1252 | minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: 1253 | version "1.2.5" 1254 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 1255 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 1256 | 1257 | minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: 1258 | version "2.9.0" 1259 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" 1260 | integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== 1261 | dependencies: 1262 | safe-buffer "^5.1.2" 1263 | yallist "^3.0.0" 1264 | 1265 | minizlib@^1.2.1: 1266 | version "1.3.3" 1267 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" 1268 | integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== 1269 | dependencies: 1270 | minipass "^2.9.0" 1271 | 1272 | mkdirp@^0.5.0, mkdirp@^0.5.3: 1273 | version "0.5.5" 1274 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" 1275 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== 1276 | dependencies: 1277 | minimist "^1.2.5" 1278 | 1279 | mkdirp@^1.0.4: 1280 | version "1.0.4" 1281 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1282 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1283 | 1284 | morgan@^1.10.0: 1285 | version "1.10.0" 1286 | resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" 1287 | integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== 1288 | dependencies: 1289 | basic-auth "~2.0.1" 1290 | debug "2.6.9" 1291 | depd "~2.0.0" 1292 | on-finished "~2.3.0" 1293 | on-headers "~1.0.2" 1294 | 1295 | ms@2.0.0: 1296 | version "2.0.0" 1297 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1298 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1299 | 1300 | ms@2.1.1: 1301 | version "2.1.1" 1302 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1303 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1304 | 1305 | ms@^2.1.1: 1306 | version "2.1.3" 1307 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1308 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1309 | 1310 | needle@^2.5.0: 1311 | version "2.6.0" 1312 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe" 1313 | integrity sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg== 1314 | dependencies: 1315 | debug "^3.2.6" 1316 | iconv-lite "^0.4.4" 1317 | sax "^1.2.4" 1318 | 1319 | negotiator@0.6.2: 1320 | version "0.6.2" 1321 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 1322 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 1323 | 1324 | node-addon-api@^3.0.0: 1325 | version "3.1.0" 1326 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-3.1.0.tgz#98b21931557466c6729e51cb77cd39c965f42239" 1327 | integrity sha512-flmrDNB06LIl5lywUz7YlNGZH/5p0M7W28k8hzd9Lshtdh1wshD2Y+U4h9LD6KObOy1f+fEVdgprPrEymjM5uw== 1328 | 1329 | node-fetch@^2.6.1: 1330 | version "2.6.1" 1331 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" 1332 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== 1333 | 1334 | node-notifier@^5.4.0: 1335 | version "5.4.3" 1336 | resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" 1337 | integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== 1338 | dependencies: 1339 | growly "^1.3.0" 1340 | is-wsl "^1.1.0" 1341 | semver "^5.5.0" 1342 | shellwords "^0.1.1" 1343 | which "^1.3.0" 1344 | 1345 | node-pre-gyp@0.15.0: 1346 | version "0.15.0" 1347 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.15.0.tgz#c2fc383276b74c7ffa842925241553e8b40f1087" 1348 | integrity sha512-7QcZa8/fpaU/BKenjcaeFF9hLz2+7S9AqyXFhlH/rilsQ/hPZKK32RtR5EQHJElgu+q5RfbJ34KriI79UWaorA== 1349 | dependencies: 1350 | detect-libc "^1.0.2" 1351 | mkdirp "^0.5.3" 1352 | needle "^2.5.0" 1353 | nopt "^4.0.1" 1354 | npm-packlist "^1.1.6" 1355 | npmlog "^4.0.2" 1356 | rc "^1.2.7" 1357 | rimraf "^2.6.1" 1358 | semver "^5.3.0" 1359 | tar "^4.4.2" 1360 | 1361 | nopt@^4.0.1: 1362 | version "4.0.3" 1363 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" 1364 | integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== 1365 | dependencies: 1366 | abbrev "1" 1367 | osenv "^0.1.4" 1368 | 1369 | normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: 1370 | version "2.5.0" 1371 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1372 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1373 | dependencies: 1374 | hosted-git-info "^2.1.4" 1375 | resolve "^1.10.0" 1376 | semver "2 || 3 || 4 || 5" 1377 | validate-npm-package-license "^3.0.1" 1378 | 1379 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1380 | version "3.0.0" 1381 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1382 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1383 | 1384 | npm-bundled@^1.0.1: 1385 | version "1.1.1" 1386 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" 1387 | integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== 1388 | dependencies: 1389 | npm-normalize-package-bin "^1.0.1" 1390 | 1391 | npm-normalize-package-bin@^1.0.1: 1392 | version "1.0.1" 1393 | resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" 1394 | integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== 1395 | 1396 | npm-packlist@^1.1.6: 1397 | version "1.4.8" 1398 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" 1399 | integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== 1400 | dependencies: 1401 | ignore-walk "^3.0.1" 1402 | npm-bundled "^1.0.1" 1403 | npm-normalize-package-bin "^1.0.1" 1404 | 1405 | npmlog@^4.0.2: 1406 | version "4.1.2" 1407 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1408 | integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== 1409 | dependencies: 1410 | are-we-there-yet "~1.1.2" 1411 | console-control-strings "~1.1.0" 1412 | gauge "~2.7.3" 1413 | set-blocking "~2.0.0" 1414 | 1415 | number-is-nan@^1.0.0: 1416 | version "1.0.1" 1417 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1418 | integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= 1419 | 1420 | oauth-sign@~0.9.0: 1421 | version "0.9.0" 1422 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" 1423 | integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== 1424 | 1425 | object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0: 1426 | version "4.1.1" 1427 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1428 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1429 | 1430 | on-finished@~2.3.0: 1431 | version "2.3.0" 1432 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1433 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 1434 | dependencies: 1435 | ee-first "1.1.1" 1436 | 1437 | on-headers@~1.0.2: 1438 | version "1.0.2" 1439 | resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" 1440 | integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== 1441 | 1442 | once@^1.3.0: 1443 | version "1.4.0" 1444 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1445 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1446 | dependencies: 1447 | wrappy "1" 1448 | 1449 | os-homedir@^1.0.0: 1450 | version "1.0.2" 1451 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1452 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 1453 | 1454 | os-tmpdir@^1.0.0: 1455 | version "1.0.2" 1456 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1457 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 1458 | 1459 | osenv@^0.1.4: 1460 | version "0.1.5" 1461 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 1462 | integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== 1463 | dependencies: 1464 | os-homedir "^1.0.0" 1465 | os-tmpdir "^1.0.0" 1466 | 1467 | parse-headers@^2.0.0: 1468 | version "2.0.3" 1469 | resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" 1470 | integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== 1471 | 1472 | parse-json@^2.2.0: 1473 | version "2.2.0" 1474 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 1475 | integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= 1476 | dependencies: 1477 | error-ex "^1.2.0" 1478 | 1479 | parseurl@~1.3.3: 1480 | version "1.3.3" 1481 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1482 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1483 | 1484 | path-exists@^2.0.0: 1485 | version "2.1.0" 1486 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" 1487 | integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= 1488 | dependencies: 1489 | pinkie-promise "^2.0.0" 1490 | 1491 | path-is-absolute@^1.0.0: 1492 | version "1.0.1" 1493 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1494 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1495 | 1496 | path-parse@^1.0.6: 1497 | version "1.0.6" 1498 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 1499 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 1500 | 1501 | path-to-regexp@0.1.7: 1502 | version "0.1.7" 1503 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 1504 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 1505 | 1506 | path-type@^1.0.0: 1507 | version "1.1.0" 1508 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" 1509 | integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= 1510 | dependencies: 1511 | graceful-fs "^4.1.2" 1512 | pify "^2.0.0" 1513 | pinkie-promise "^2.0.0" 1514 | 1515 | performance-now@^2.1.0: 1516 | version "2.1.0" 1517 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" 1518 | integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= 1519 | 1520 | picomatch@^2.0.4, picomatch@^2.2.1: 1521 | version "2.2.2" 1522 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 1523 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 1524 | 1525 | pify@^2.0.0: 1526 | version "2.3.0" 1527 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1528 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 1529 | 1530 | pinkie-promise@^2.0.0: 1531 | version "2.0.1" 1532 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1533 | integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= 1534 | dependencies: 1535 | pinkie "^2.0.0" 1536 | 1537 | pinkie@^2.0.0: 1538 | version "2.0.4" 1539 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1540 | integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= 1541 | 1542 | process-nextick-args@~2.0.0: 1543 | version "2.0.1" 1544 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1545 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1546 | 1547 | process@^0.11.10: 1548 | version "0.11.10" 1549 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 1550 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= 1551 | 1552 | proxy-addr@~2.0.5: 1553 | version "2.0.6" 1554 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" 1555 | integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== 1556 | dependencies: 1557 | forwarded "~0.1.2" 1558 | ipaddr.js "1.9.1" 1559 | 1560 | psl@^1.1.28: 1561 | version "1.8.0" 1562 | resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" 1563 | integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== 1564 | 1565 | punycode@^2.1.0, punycode@^2.1.1: 1566 | version "2.1.1" 1567 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1568 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1569 | 1570 | qs@6.7.0: 1571 | version "6.7.0" 1572 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 1573 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 1574 | 1575 | qs@~6.5.2: 1576 | version "6.5.2" 1577 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" 1578 | integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== 1579 | 1580 | random-frog@^2.0.0: 1581 | version "2.0.0" 1582 | resolved "https://registry.yarnpkg.com/random-frog/-/random-frog-2.0.0.tgz#7e15e059c00b327b04fb5a74d61c0998a2a4053c" 1583 | integrity sha512-uYr2SFnsinay/RUQEOGAYU6aZjIqNUNr9W26/FEXq8WM/y5l2zvCa0lLgt5sI6F5qBIoMx+HnlnEi1VUoqPl0Q== 1584 | dependencies: 1585 | unique-random-array "^1.0.0" 1586 | xhr "^2.4.0" 1587 | 1588 | range-parser@~1.2.1: 1589 | version "1.2.1" 1590 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 1591 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1592 | 1593 | raw-body@2.4.0: 1594 | version "2.4.0" 1595 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 1596 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 1597 | dependencies: 1598 | bytes "3.1.0" 1599 | http-errors "1.7.2" 1600 | iconv-lite "0.4.24" 1601 | unpipe "1.0.0" 1602 | 1603 | rc@^1.2.7: 1604 | version "1.2.8" 1605 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1606 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 1607 | dependencies: 1608 | deep-extend "^0.6.0" 1609 | ini "~1.3.0" 1610 | minimist "^1.2.0" 1611 | strip-json-comments "~2.0.1" 1612 | 1613 | read-pkg-up@^1.0.1: 1614 | version "1.0.1" 1615 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" 1616 | integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= 1617 | dependencies: 1618 | find-up "^1.0.0" 1619 | read-pkg "^1.0.0" 1620 | 1621 | read-pkg@^1.0.0: 1622 | version "1.1.0" 1623 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" 1624 | integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= 1625 | dependencies: 1626 | load-json-file "^1.0.0" 1627 | normalize-package-data "^2.3.2" 1628 | path-type "^1.0.0" 1629 | 1630 | readable-stream@^2.0.6: 1631 | version "2.3.7" 1632 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 1633 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 1634 | dependencies: 1635 | core-util-is "~1.0.0" 1636 | inherits "~2.0.3" 1637 | isarray "~1.0.0" 1638 | process-nextick-args "~2.0.0" 1639 | safe-buffer "~5.1.1" 1640 | string_decoder "~1.1.1" 1641 | util-deprecate "~1.0.1" 1642 | 1643 | readdirp@~3.5.0: 1644 | version "3.5.0" 1645 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 1646 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 1647 | dependencies: 1648 | picomatch "^2.2.1" 1649 | 1650 | redent@^1.0.0: 1651 | version "1.0.0" 1652 | resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" 1653 | integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= 1654 | dependencies: 1655 | indent-string "^2.1.0" 1656 | strip-indent "^1.0.1" 1657 | 1658 | repeating@^2.0.0: 1659 | version "2.0.1" 1660 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 1661 | integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= 1662 | dependencies: 1663 | is-finite "^1.0.0" 1664 | 1665 | request@^2.88.2: 1666 | version "2.88.2" 1667 | resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" 1668 | integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== 1669 | dependencies: 1670 | aws-sign2 "~0.7.0" 1671 | aws4 "^1.8.0" 1672 | caseless "~0.12.0" 1673 | combined-stream "~1.0.6" 1674 | extend "~3.0.2" 1675 | forever-agent "~0.6.1" 1676 | form-data "~2.3.2" 1677 | har-validator "~5.1.3" 1678 | http-signature "~1.2.0" 1679 | is-typedarray "~1.0.0" 1680 | isstream "~0.1.2" 1681 | json-stringify-safe "~5.0.1" 1682 | mime-types "~2.1.19" 1683 | oauth-sign "~0.9.0" 1684 | performance-now "^2.1.0" 1685 | qs "~6.5.2" 1686 | safe-buffer "^5.1.2" 1687 | tough-cookie "~2.5.0" 1688 | tunnel-agent "^0.6.0" 1689 | uuid "^3.3.2" 1690 | 1691 | resolve@^1.0.0, resolve@^1.10.0: 1692 | version "1.19.0" 1693 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" 1694 | integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== 1695 | dependencies: 1696 | is-core-module "^2.1.0" 1697 | path-parse "^1.0.6" 1698 | 1699 | rimraf@^2.6.1: 1700 | version "2.7.1" 1701 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 1702 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 1703 | dependencies: 1704 | glob "^7.1.3" 1705 | 1706 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1707 | version "5.1.2" 1708 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1709 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1710 | 1711 | safe-buffer@^5.0.1, safe-buffer@^5.1.2: 1712 | version "5.2.1" 1713 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1714 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1715 | 1716 | "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: 1717 | version "2.1.2" 1718 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1719 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1720 | 1721 | sax@^1.2.4: 1722 | version "1.2.4" 1723 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 1724 | integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== 1725 | 1726 | "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: 1727 | version "5.7.1" 1728 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1729 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1730 | 1731 | send@0.17.1: 1732 | version "0.17.1" 1733 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 1734 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 1735 | dependencies: 1736 | debug "2.6.9" 1737 | depd "~1.1.2" 1738 | destroy "~1.0.4" 1739 | encodeurl "~1.0.2" 1740 | escape-html "~1.0.3" 1741 | etag "~1.8.1" 1742 | fresh "0.5.2" 1743 | http-errors "~1.7.2" 1744 | mime "1.6.0" 1745 | ms "2.1.1" 1746 | on-finished "~2.3.0" 1747 | range-parser "~1.2.1" 1748 | statuses "~1.5.0" 1749 | 1750 | serve-static@1.14.1: 1751 | version "1.14.1" 1752 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 1753 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 1754 | dependencies: 1755 | encodeurl "~1.0.2" 1756 | escape-html "~1.0.3" 1757 | parseurl "~1.3.3" 1758 | send "0.17.1" 1759 | 1760 | set-blocking@~2.0.0: 1761 | version "2.0.0" 1762 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1763 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 1764 | 1765 | setprototypeof@1.1.1: 1766 | version "1.1.1" 1767 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 1768 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 1769 | 1770 | setprototypeof@1.2.0: 1771 | version "1.2.0" 1772 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 1773 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 1774 | 1775 | shellwords@^0.1.1: 1776 | version "0.1.1" 1777 | resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" 1778 | integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== 1779 | 1780 | signal-exit@^3.0.0: 1781 | version "3.0.3" 1782 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1783 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1784 | 1785 | source-map-support@^0.5.12, source-map-support@^0.5.17: 1786 | version "0.5.19" 1787 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" 1788 | integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== 1789 | dependencies: 1790 | buffer-from "^1.0.0" 1791 | source-map "^0.6.0" 1792 | 1793 | source-map@^0.6.0: 1794 | version "0.6.1" 1795 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 1796 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 1797 | 1798 | spdx-correct@^3.0.0: 1799 | version "3.1.1" 1800 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" 1801 | integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== 1802 | dependencies: 1803 | spdx-expression-parse "^3.0.0" 1804 | spdx-license-ids "^3.0.0" 1805 | 1806 | spdx-exceptions@^2.1.0: 1807 | version "2.3.0" 1808 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" 1809 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== 1810 | 1811 | spdx-expression-parse@^3.0.0: 1812 | version "3.0.1" 1813 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" 1814 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== 1815 | dependencies: 1816 | spdx-exceptions "^2.1.0" 1817 | spdx-license-ids "^3.0.0" 1818 | 1819 | spdx-license-ids@^3.0.0: 1820 | version "3.0.7" 1821 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" 1822 | integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== 1823 | 1824 | sshpk@^1.7.0: 1825 | version "1.16.1" 1826 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" 1827 | integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== 1828 | dependencies: 1829 | asn1 "~0.2.3" 1830 | assert-plus "^1.0.0" 1831 | bcrypt-pbkdf "^1.0.0" 1832 | dashdash "^1.12.0" 1833 | ecc-jsbn "~0.1.1" 1834 | getpass "^0.1.1" 1835 | jsbn "~0.1.0" 1836 | safer-buffer "^2.0.2" 1837 | tweetnacl "~0.14.0" 1838 | 1839 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 1840 | version "1.5.0" 1841 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 1842 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 1843 | 1844 | string-width@^1.0.1: 1845 | version "1.0.2" 1846 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1847 | integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= 1848 | dependencies: 1849 | code-point-at "^1.0.0" 1850 | is-fullwidth-code-point "^1.0.0" 1851 | strip-ansi "^3.0.0" 1852 | 1853 | "string-width@^1.0.2 || 2": 1854 | version "2.1.1" 1855 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1856 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 1857 | dependencies: 1858 | is-fullwidth-code-point "^2.0.0" 1859 | strip-ansi "^4.0.0" 1860 | 1861 | string_decoder@~1.1.1: 1862 | version "1.1.1" 1863 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1864 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1865 | dependencies: 1866 | safe-buffer "~5.1.0" 1867 | 1868 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1869 | version "3.0.1" 1870 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1871 | integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= 1872 | dependencies: 1873 | ansi-regex "^2.0.0" 1874 | 1875 | strip-ansi@^4.0.0: 1876 | version "4.0.0" 1877 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1878 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 1879 | dependencies: 1880 | ansi-regex "^3.0.0" 1881 | 1882 | strip-bom@^2.0.0: 1883 | version "2.0.0" 1884 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" 1885 | integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= 1886 | dependencies: 1887 | is-utf8 "^0.2.0" 1888 | 1889 | strip-bom@^3.0.0: 1890 | version "3.0.0" 1891 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1892 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 1893 | 1894 | strip-indent@^1.0.1: 1895 | version "1.0.1" 1896 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 1897 | integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= 1898 | dependencies: 1899 | get-stdin "^4.0.1" 1900 | 1901 | strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: 1902 | version "2.0.1" 1903 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1904 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1905 | 1906 | tar@^4.4.2: 1907 | version "4.4.13" 1908 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" 1909 | integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== 1910 | dependencies: 1911 | chownr "^1.1.1" 1912 | fs-minipass "^1.2.5" 1913 | minipass "^2.8.6" 1914 | minizlib "^1.2.1" 1915 | mkdirp "^0.5.0" 1916 | safe-buffer "^5.1.2" 1917 | yallist "^3.0.3" 1918 | 1919 | to-regex-range@^5.0.1: 1920 | version "5.0.1" 1921 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1922 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1923 | dependencies: 1924 | is-number "^7.0.0" 1925 | 1926 | toidentifier@1.0.0: 1927 | version "1.0.0" 1928 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 1929 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 1930 | 1931 | tough-cookie@~2.5.0: 1932 | version "2.5.0" 1933 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" 1934 | integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== 1935 | dependencies: 1936 | psl "^1.1.28" 1937 | punycode "^2.1.1" 1938 | 1939 | tree-kill@^1.2.2: 1940 | version "1.2.2" 1941 | resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" 1942 | integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== 1943 | 1944 | trim-newlines@^1.0.0: 1945 | version "1.0.0" 1946 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" 1947 | integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= 1948 | 1949 | ts-node-dev@1.0.0-pre.50: 1950 | version "1.0.0-pre.50" 1951 | resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-1.0.0-pre.50.tgz#ee19d2658a8ada84efc6962850e6e941d9372f25" 1952 | integrity sha512-J1TzHLPejsfwKwvlCrk1MjDt3kXfE9mRa2YpAI4B9Ei+qbaIytkUR2Cx5Zv64f1EFW9XkDZiIMSLmV4NAhC72Q== 1953 | dependencies: 1954 | chokidar "^3.4.0" 1955 | dateformat "~1.0.4-1.2.3" 1956 | dynamic-dedupe "^0.3.0" 1957 | minimist "^1.2.5" 1958 | mkdirp "^1.0.4" 1959 | node-notifier "^5.4.0" 1960 | resolve "^1.0.0" 1961 | rimraf "^2.6.1" 1962 | source-map-support "^0.5.12" 1963 | tree-kill "^1.2.2" 1964 | ts-node "^8.10.2" 1965 | tsconfig "^7.0.0" 1966 | 1967 | ts-node@^8.10.2: 1968 | version "8.10.2" 1969 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.10.2.tgz#eee03764633b1234ddd37f8db9ec10b75ec7fb8d" 1970 | integrity sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA== 1971 | dependencies: 1972 | arg "^4.1.0" 1973 | diff "^4.0.1" 1974 | make-error "^1.1.1" 1975 | source-map-support "^0.5.17" 1976 | yn "3.1.1" 1977 | 1978 | ts-node@^9.1.1: 1979 | version "9.1.1" 1980 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" 1981 | integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== 1982 | dependencies: 1983 | arg "^4.1.0" 1984 | create-require "^1.1.0" 1985 | diff "^4.0.1" 1986 | make-error "^1.1.1" 1987 | source-map-support "^0.5.17" 1988 | yn "3.1.1" 1989 | 1990 | tsconfig-paths@^3.9.0: 1991 | version "3.9.0" 1992 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" 1993 | integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== 1994 | dependencies: 1995 | "@types/json5" "^0.0.29" 1996 | json5 "^1.0.1" 1997 | minimist "^1.2.0" 1998 | strip-bom "^3.0.0" 1999 | 2000 | tsconfig@^7.0.0: 2001 | version "7.0.0" 2002 | resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" 2003 | integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== 2004 | dependencies: 2005 | "@types/strip-bom" "^3.0.0" 2006 | "@types/strip-json-comments" "0.0.30" 2007 | strip-bom "^3.0.0" 2008 | strip-json-comments "^2.0.0" 2009 | 2010 | tunnel-agent@^0.6.0: 2011 | version "0.6.0" 2012 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2013 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 2014 | dependencies: 2015 | safe-buffer "^5.0.1" 2016 | 2017 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2018 | version "0.14.5" 2019 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2020 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= 2021 | 2022 | type-is@~1.6.17, type-is@~1.6.18: 2023 | version "1.6.18" 2024 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 2025 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 2026 | dependencies: 2027 | media-typer "0.3.0" 2028 | mime-types "~2.1.24" 2029 | 2030 | typescript@^4.1.3: 2031 | version "4.1.3" 2032 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" 2033 | integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== 2034 | 2035 | unique-random-array@^1.0.0: 2036 | version "1.0.1" 2037 | resolved "https://registry.yarnpkg.com/unique-random-array/-/unique-random-array-1.0.1.tgz#f29bda2a62be8860a703c4739c8f4fdb4d722cc7" 2038 | integrity sha512-z9J/SV8CUIhIRROcHe9YUoAT6XthUJt0oUyLGgobiXJprDP9O9dsErNevvSaAv5BkhwFEVPn6nIEOKeNE6Ck1Q== 2039 | dependencies: 2040 | unique-random "^1.0.0" 2041 | 2042 | unique-random@^1.0.0: 2043 | version "1.0.0" 2044 | resolved "https://registry.yarnpkg.com/unique-random/-/unique-random-1.0.0.tgz#ce3e224c8242cd33a0e77b0d7180d77e6b62d0c4" 2045 | integrity sha1-zj4iTIJCzTOg53sNcYDXfmti0MQ= 2046 | 2047 | unpipe@1.0.0, unpipe@~1.0.0: 2048 | version "1.0.0" 2049 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2050 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 2051 | 2052 | uri-js@^4.2.2: 2053 | version "4.4.1" 2054 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2055 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2056 | dependencies: 2057 | punycode "^2.1.0" 2058 | 2059 | util-deprecate@~1.0.1: 2060 | version "1.0.2" 2061 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2062 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 2063 | 2064 | utils-merge@1.0.1: 2065 | version "1.0.1" 2066 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 2067 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 2068 | 2069 | uuid@^3.3.2: 2070 | version "3.4.0" 2071 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" 2072 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== 2073 | 2074 | validate-npm-package-license@^3.0.1: 2075 | version "3.0.4" 2076 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 2077 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 2078 | dependencies: 2079 | spdx-correct "^3.0.0" 2080 | spdx-expression-parse "^3.0.0" 2081 | 2082 | vary@^1, vary@~1.1.2: 2083 | version "1.1.2" 2084 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2085 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 2086 | 2087 | verror@1.10.0: 2088 | version "1.10.0" 2089 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 2090 | integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= 2091 | dependencies: 2092 | assert-plus "^1.0.0" 2093 | core-util-is "1.0.2" 2094 | extsprintf "^1.2.0" 2095 | 2096 | which@^1.3.0: 2097 | version "1.3.1" 2098 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 2099 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 2100 | dependencies: 2101 | isexe "^2.0.0" 2102 | 2103 | wide-align@^1.1.0: 2104 | version "1.1.3" 2105 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 2106 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 2107 | dependencies: 2108 | string-width "^1.0.2 || 2" 2109 | 2110 | wrappy@1: 2111 | version "1.0.2" 2112 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2113 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 2114 | 2115 | xhr@^2.4.0: 2116 | version "2.6.0" 2117 | resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" 2118 | integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== 2119 | dependencies: 2120 | global "~4.4.0" 2121 | is-function "^1.0.1" 2122 | parse-headers "^2.0.0" 2123 | xtend "^4.0.0" 2124 | 2125 | xtend@^4.0.0: 2126 | version "4.0.2" 2127 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 2128 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 2129 | 2130 | yallist@^3.0.0, yallist@^3.0.3: 2131 | version "3.1.1" 2132 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 2133 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 2134 | 2135 | yn@3.1.1: 2136 | version "3.1.1" 2137 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 2138 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 2139 | --------------------------------------------------------------------------------