├── packages ├── cli │ ├── source │ │ ├── utils │ │ │ └── constants.ts │ │ ├── project.ts │ │ └── index.ts │ ├── bin │ │ └── envy │ ├── tsconfig.json │ ├── package.json │ ├── .gitignore │ └── yarn.lock └── api │ ├── source │ ├── controllers │ │ ├── index.ts │ │ └── project.controllers.ts │ ├── models │ │ ├── index.ts │ │ └── project.model.ts │ ├── utils │ │ ├── index.ts │ │ ├── errors │ │ │ ├── ForbiddenError.ts │ │ │ ├── NotFoundError.ts │ │ │ ├── BadRequestError.ts │ │ │ ├── UnauthorizedError.ts │ │ │ ├── index.ts │ │ │ └── InternalServerError.ts │ │ ├── misc.ts │ │ └── constants.ts │ ├── rest │ │ ├── index.ts │ │ ├── status.routes.ts │ │ └── project.routes.ts │ ├── app.ts │ ├── start.ts │ └── types │ │ └── index.ts │ ├── tsconfig.json │ ├── .gitignore │ ├── package.json │ └── yarn.lock └── README.md /packages/cli/source/utils/constants.ts: -------------------------------------------------------------------------------- 1 | export const API_URL = "http://localhost:3001/api/v1" -------------------------------------------------------------------------------- /packages/api/source/controllers/index.ts: -------------------------------------------------------------------------------- 1 | export * as projects from "./project.controllers"; 2 | -------------------------------------------------------------------------------- /packages/api/source/models/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ProjectModel } from "./project.model"; 2 | -------------------------------------------------------------------------------- /packages/cli/bin/envy: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const { main } = require("../dist/source"); 4 | 5 | main(); 6 | -------------------------------------------------------------------------------- /packages/api/source/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./constants"; 2 | export * from "./errors"; 3 | export * from "./misc"; 4 | -------------------------------------------------------------------------------- /packages/api/source/utils/errors/ForbiddenError.ts: -------------------------------------------------------------------------------- 1 | import { ApolloError } from "apollo-server-errors"; 2 | 3 | export default class ForbiddenError extends ApolloError { 4 | constructor(message: string) { 5 | super(message, "FORBIDDEN_ERROR"); 6 | 7 | Object.defineProperty(this, "name", { value: "ForbiddenError" }); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/api/source/utils/errors/NotFoundError.ts: -------------------------------------------------------------------------------- 1 | import { ApolloError } from "apollo-server-errors"; 2 | 3 | export default class NotFoundError extends ApolloError { 4 | constructor(message: string) { 5 | super(message, "NOT_FOUND_ERROR"); 6 | 7 | Object.defineProperty(this, "name", { value: "NotFoundError" }); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/api/source/utils/errors/BadRequestError.ts: -------------------------------------------------------------------------------- 1 | import { ApolloError } from "apollo-server-errors"; 2 | 3 | export default class BadRequestError extends ApolloError { 4 | constructor(message: string) { 5 | super(message, "BAD_REQUEST_ERROR"); 6 | 7 | Object.defineProperty(this, "name", { value: "BadRequestError" }); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/api/source/utils/errors/UnauthorizedError.ts: -------------------------------------------------------------------------------- 1 | import { ApolloError } from "apollo-server-errors"; 2 | 3 | export default class UnauthorizedError extends ApolloError { 4 | constructor(message: string) { 5 | super(message, "UNAUTHORIZED_ERROR"); 6 | 7 | Object.defineProperty(this, "name", { value: "UnauthorizedError" }); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/api/source/utils/errors/index.ts: -------------------------------------------------------------------------------- 1 | export { default as BadRequestError } from "./BadRequestError"; 2 | export { default as NotFoundError } from "./NotFoundError"; 3 | export { default as UnauthorizedError } from "./UnauthorizedError"; 4 | export { default as ForbiddenError } from "./ForbiddenError"; 5 | export { default as InternalServerError } from "./InternalServerError"; 6 | -------------------------------------------------------------------------------- /packages/api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "esModuleInterop": true, 5 | "target": "es6", 6 | "moduleResolution": "node", 7 | "sourceMap": true, 8 | "outDir": "dist", 9 | "allowJs": true 10 | }, 11 | "include": ["./source/**/*.ts"], 12 | "lib": ["es2015"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/api/source/utils/errors/InternalServerError.ts: -------------------------------------------------------------------------------- 1 | import { ApolloError } from "apollo-server-errors"; 2 | 3 | export default class InternalServerError extends ApolloError { 4 | constructor(message: string) { 5 | super(message, "INTERNAL_SERVER_ERROR"); 6 | 7 | Object.defineProperty(this, "name", { value: "InternalServerError" }); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/cli/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "esModuleInterop": true, 5 | "target": "es6", 6 | "moduleResolution": "node", 7 | "sourceMap": true, 8 | "outDir": "dist", 9 | "allowJs": true, 10 | "resolveJsonModule": true 11 | }, 12 | "include": ["./source/**/*.ts"], 13 | "lib": ["es2018"] 14 | } 15 | -------------------------------------------------------------------------------- /packages/api/source/rest/index.ts: -------------------------------------------------------------------------------- 1 | import { Router } from "express"; 2 | 3 | import * as statuses from "./status.routes"; 4 | import * as projects from "./project.routes"; 5 | 6 | export const attachRoutes = async (app: any): Promise => { 7 | const router = Router(); 8 | app.use("/api/v1", router); 9 | 10 | await statuses.attachRoutes(router); 11 | await projects.attachRoutes(router); 12 | }; 13 | -------------------------------------------------------------------------------- /packages/api/source/utils/misc.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | import type { ClientSession } from "mongoose"; 3 | 4 | export type TTransactionCallback = (session: ClientSession) => Promise; 5 | 6 | export const runAsTransaction = async ( 7 | callback: TTransactionCallback 8 | ): Promise => { 9 | const session = await mongoose.startSession(); 10 | let result: any; 11 | await session.withTransaction(async (client: ClientSession) => { 12 | result = await callback(client); 13 | }); 14 | return result; 15 | }; 16 | -------------------------------------------------------------------------------- /packages/api/source/app.ts: -------------------------------------------------------------------------------- 1 | import bodyParser from "body-parser"; 2 | import cors from "cors"; 3 | import express from "express"; 4 | import logger from "morgan"; 5 | 6 | import * as rest from "./rest"; 7 | 8 | const initialize = async () => { 9 | const app = express(); 10 | app.use(cors()); 11 | app.use(bodyParser.json()); 12 | 13 | if (process.env.NODE_ENV !== "production") { 14 | app.use(logger("dev")); 15 | } 16 | 17 | rest.attachRoutes(app); 18 | 19 | return app; 20 | }; 21 | 22 | const destroy = () => {}; 23 | 24 | export { initialize, destroy }; 25 | -------------------------------------------------------------------------------- /packages/api/source/start.ts: -------------------------------------------------------------------------------- 1 | import dotenv from "dotenv"; 2 | import http from "http"; 3 | import mongoose from "mongoose"; 4 | 5 | import { initialize } from "./app"; 6 | 7 | dotenv.config(); 8 | 9 | const { PORT, DATABASE_URL } = process.env; 10 | 11 | mongoose.set("debug", true); 12 | mongoose.connection.once("open", async () => { 13 | console.log(" ✅ Database connection successfully established"); 14 | const app = await initialize(); 15 | http.createServer(app).listen(PORT, () => { 16 | console.log( 17 | ` 🎉 You can access the server at http://localhost:${PORT}`, 18 | ); 19 | }); 20 | }); 21 | mongoose.connect(DATABASE_URL); 22 | -------------------------------------------------------------------------------- /packages/api/source/rest/status.routes.ts: -------------------------------------------------------------------------------- 1 | import { Request, Response, Router } from "express"; 2 | 3 | const attachRoutes = async (router: Router): Promise => { 4 | router.get( 5 | "/statuses/live", 6 | async (request: Request, response: Response) => { 7 | response 8 | .status(200) 9 | .json({ message: "The @envy/api service is active." }); 10 | }, 11 | ); 12 | 13 | router.get( 14 | "/statuses/ready", 15 | async (request: Request, response: Response) => { 16 | response.status(200).json({ 17 | message: 18 | "The @envy/api service is ready to accept requests.", 19 | }); 20 | }, 21 | ); 22 | }; 23 | 24 | export { attachRoutes }; 25 | -------------------------------------------------------------------------------- /packages/api/source/types/index.ts: -------------------------------------------------------------------------------- 1 | import mongoose from "mongoose"; 2 | 3 | type ObjectId = mongoose.Types.ObjectId; 4 | 5 | export interface IExternalListPage { 6 | totalRecords: number; 7 | totalPages: number; 8 | previousPage: number; 9 | nextPage: number; 10 | hasPreviousPage: number; 11 | hasNextPage: number; 12 | records: T[]; 13 | } 14 | 15 | export interface IProject { 16 | _id: ObjectId; 17 | name: string; 18 | description: string; 19 | variants: Record>; 20 | createdAt: Date; 21 | updatedAt: Date; 22 | } 23 | 24 | export interface IExternalProject { 25 | id: string; 26 | name: string; 27 | description: string; 28 | variants: Record>; 29 | createdAt: Date; 30 | updatedAt: Date; 31 | } 32 | 33 | export type TProjectPage = IExternalListPage; 34 | -------------------------------------------------------------------------------- /packages/api/source/models/project.model.ts: -------------------------------------------------------------------------------- 1 | import { Schema, model } from "mongoose"; 2 | import paginate from "mongoose-paginate-v2"; 3 | 4 | import type { IProject } from "../types"; 5 | import { projectStatuses } from "../utils"; 6 | 7 | const projectSchema = new Schema( 8 | { 9 | name: { 10 | type: String, 11 | minlength: 1, 12 | maxlength: 128, 13 | required: true, 14 | trim: true, 15 | }, 16 | description: { 17 | type: String, 18 | minlength: 0, 19 | maxlength: 512, 20 | default: "", 21 | }, 22 | variants: { 23 | type: Object, 24 | default: {}, 25 | }, 26 | createdAt: { 27 | type: Date, 28 | immutable: true, 29 | }, 30 | status: { 31 | type: String, 32 | enum: projectStatuses, 33 | default: "created", 34 | }, 35 | }, 36 | { timestamps: true } 37 | ); 38 | 39 | projectSchema.plugin(paginate); 40 | 41 | export default model("Project", projectSchema); 42 | -------------------------------------------------------------------------------- /packages/api/source/rest/project.routes.ts: -------------------------------------------------------------------------------- 1 | import type { Request, Response, Router } from "express"; 2 | import { projects } from "../controllers"; 3 | 4 | const attachRoutes = async (router: Router): Promise => { 5 | router.post("/projects", async (request: Request, response: Response) => { 6 | response.json(await projects.create(request, request.body)); 7 | }); 8 | 9 | router.get( 10 | "/projects/:name", 11 | async (request: Request, response: Response) => { 12 | response.json(await projects.getByName(request, request.params.name)); 13 | } 14 | ); 15 | 16 | router.post( 17 | "/projects/:name/variants/:variant", 18 | async (request: Request, response: Response) => { 19 | response.json( 20 | await projects.updateVariant(request, { 21 | name: request.params.name, 22 | variant: request.params.variant, 23 | values: request.body, 24 | }) 25 | ); 26 | } 27 | ); 28 | }; 29 | 30 | export { attachRoutes }; 31 | -------------------------------------------------------------------------------- /packages/cli/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@envy/cli", 3 | "license": "MIT", 4 | "private": false, 5 | "version": "0.1.0", 6 | "main": "./build/source/index.js", 7 | "bin": { 8 | "envy": "./bin/envy" 9 | }, 10 | "files": [ 11 | "bin/**/**", 12 | "build/**/*", 13 | "public/**/*", 14 | "package.json", 15 | "README.md" 16 | ], 17 | "scripts": { 18 | "clean": "rm -rf build ", 19 | "build": "yarn clean && tsc --project tsconfig.json", 20 | "watch": "yarn clean && tsc --project tsconfig.json --watch", 21 | "start": "node ./bin/envy", 22 | "local": "yarn build && npm link", 23 | "push": "yarn build && yarn publish --access public" 24 | }, 25 | "dependencies": { 26 | "axios": "^0.24.0", 27 | "chalk": "^4.1.2", 28 | "commander": "^8.3.0" 29 | }, 30 | "devDependencies": { 31 | "@types/node": "^16.11.11", 32 | "typescript": "^4.4.4" 33 | } 34 | } -------------------------------------------------------------------------------- /packages/api/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | .env.* 60 | 61 | # Typescript build output 62 | dist -------------------------------------------------------------------------------- /packages/api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@clarity/api", 3 | "version": "0.0.0", 4 | "license": "MIT", 5 | "repository": "https://github.com/envy/clarity-api", 6 | "private": true, 7 | "scripts": { 8 | "build": "tsc --project tsconfig.json", 9 | "start:dev": "nodemon --ext js,ts --watch ./source --exec \"tsc --project tsconfig.json --incremental && node ./dist/start.js\"", 10 | "start": "node ./dist/start.js", 11 | "test": "mocha --config .mocharc.json ./test", 12 | "test:watch": "mocha --config .mocharc.json --watch ./test" 13 | }, 14 | "dependencies": { 15 | "apollo-server-errors": "^3.3.1", 16 | "axios": "^0.27.2", 17 | "cors": "^2.8.5", 18 | "dotenv": "^10.0.0", 19 | "express": "^4.17.1", 20 | "graphql": "^16.5.0", 21 | "iso-language-codes": "^1.1.0", 22 | "joi": "^17.4.2", 23 | "mongoose": "^6.0.12", 24 | "mongoose-paginate-v2": "^1.4.2", 25 | "morgan": "^1.10.0" 26 | }, 27 | "devDependencies": { 28 | "@types/express": "^4.17.13", 29 | "@types/node": "^16.11.7", 30 | "nodemon": "^2.0.15", 31 | "typescript": "^4.4.4" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /packages/cli/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (https://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | .env.* 60 | 61 | # Typescript build output 62 | dist 63 | 64 | credentials.json -------------------------------------------------------------------------------- /packages/cli/source/project.ts: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import { API_URL } from "./utils/constants"; 3 | 4 | export const createProject = async (name: string, description: string) => { 5 | try { 6 | const response = await axios.post(`${API_URL}/projects`, { 7 | name, 8 | description, 9 | variants: {}, 10 | }); 11 | return response.data; 12 | } catch (error) { 13 | console.log(error.message); 14 | process.exit(1); 15 | } 16 | }; 17 | 18 | const parseVariantHandle = (handle: string) => { 19 | const [project, variant] = handle.split(":"); 20 | return { project, variant }; 21 | }; 22 | 23 | export const setVariables = async (handle: string, variables: string[]) => { 24 | try { 25 | const { project, variant } = parseVariantHandle(handle); 26 | const response = await axios.post( 27 | `${API_URL}/projects/${project}/variants/${variant}`, 28 | Object.fromEntries(variables.map((variable) => variable.split("="))) 29 | ); 30 | return response.data; 31 | } catch (error) { 32 | console.log(error.message); 33 | process.exit(1); 34 | } 35 | }; 36 | 37 | export const getVariables = async ( 38 | handle: string, 39 | format: "pairs" | "json" | "yaml" 40 | ) => { 41 | try { 42 | const { project, variant } = parseVariantHandle(handle); 43 | const response = await axios.get(`${API_URL}/projects/${project}`); 44 | 45 | const values = response.data.variants[variant] ?? {}; 46 | 47 | switch (format) { 48 | case "pairs": { 49 | return Object.entries(values) 50 | .map((entry) => `${entry[0]}=${entry[1]}`) 51 | .join("\n"); 52 | } 53 | 54 | case "json": { 55 | return JSON.stringify(values); 56 | } 57 | 58 | default: { 59 | throw new Error(`Unknown format "${format}"`); 60 | } 61 | } 62 | } catch (error) { 63 | console.log(error.message); 64 | process.exit(1); 65 | } 66 | }; 67 | -------------------------------------------------------------------------------- /packages/cli/source/index.ts: -------------------------------------------------------------------------------- 1 | import chalk from "chalk"; 2 | import { Command } from "commander"; 3 | 4 | import packageData from "../package.json"; 5 | 6 | import { createProject, setVariables, getVariables } from "./project"; 7 | 8 | const create = async (configuration: any): Promise => { 9 | const result = await createProject( 10 | configuration.name, 11 | configuration.template 12 | ); 13 | console.log(result); 14 | }; 15 | 16 | const add = async (configuration: any): Promise => { 17 | const result = await setVariables( 18 | configuration.handle, 19 | configuration.variables 20 | ); 21 | console.log(result); 22 | }; 23 | 24 | const get = async (configuration: any): Promise => { 25 | const result = await getVariables(configuration.handle, configuration.format); 26 | console.log(result); 27 | }; 28 | 29 | const configureCommands = (): Command => { 30 | const program = new Command(); 31 | program.version(packageData.version); 32 | 33 | const createCommand = new Command(); 34 | createCommand 35 | .name("create") 36 | .alias("c") 37 | .description("create new project") 38 | .argument("", "name of the new project") 39 | .option("-d, --description ", "the description of the app", "") 40 | .action((name) => { 41 | const configuration = { 42 | ...program.opts(), 43 | ...createCommand.opts(), 44 | name, 45 | }; 46 | create(configuration); 47 | }); 48 | program.addCommand(createCommand); 49 | 50 | const setCommand = new Command(); 51 | setCommand 52 | .name("set") 53 | .alias("s") 54 | .description("sets variables in variant") 55 | .argument( 56 | "", 57 | "handle pointing to variant (for example, hypertool:development)" 58 | ) 59 | .argument( 60 | "", 61 | "variables to store (key1=value1 key2=value2 ...)" 62 | ) 63 | .action((handle, variables) => { 64 | const configuration = { 65 | ...program.opts(), 66 | ...setCommand.opts(), 67 | handle, 68 | variables, 69 | }; 70 | add(configuration); 71 | }); 72 | program.addCommand(setCommand); 73 | 74 | const getCommand = new Command(); 75 | getCommand 76 | .name("get") 77 | .alias("g") 78 | .description("get variables from variant") 79 | .argument( 80 | "", 81 | "handle pointing to variant (for example, hypertool:development)" 82 | ) 83 | .option("-f|--format ", "format of the output", "pairs") 84 | .action((handle, variables) => { 85 | const configuration = { 86 | ...program.opts(), 87 | ...getCommand.opts(), 88 | handle, 89 | variables, 90 | }; 91 | get(configuration); 92 | }); 93 | program.addCommand(getCommand); 94 | 95 | return program; 96 | }; 97 | 98 | const main = (): void => { 99 | console.log( 100 | chalk.bold( 101 | `envy v${packageData.version} ${chalk.greenBright( 102 | "(https://github.com/itssamuelrowe/envy)" 103 | )}\n` 104 | ) 105 | ); 106 | const program = configureCommands(); 107 | program.parse(process.argv); 108 | }; 109 | 110 | export { main }; 111 | -------------------------------------------------------------------------------- /packages/cli/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/node@^16.11.11": 6 | version "16.11.38" 7 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.38.tgz#be0edd097b23eace6c471c525a74b3f98803017f" 8 | integrity sha512-hjO/0K140An3GWDw2HJfq7gko3wWeznbjXgg+rzPdVzhe198hp4x2i1dgveAOEiFKd8sOilAxzoSJiVv5P/CUg== 9 | 10 | ansi-styles@^4.1.0: 11 | version "4.3.0" 12 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 13 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 14 | dependencies: 15 | color-convert "^2.0.1" 16 | 17 | axios@^0.24.0: 18 | version "0.24.0" 19 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.24.0.tgz#804e6fa1e4b9c5288501dd9dff56a7a0940d20d6" 20 | integrity sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA== 21 | dependencies: 22 | follow-redirects "^1.14.4" 23 | 24 | chalk@^4.1.2: 25 | version "4.1.2" 26 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 27 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 28 | dependencies: 29 | ansi-styles "^4.1.0" 30 | supports-color "^7.1.0" 31 | 32 | color-convert@^2.0.1: 33 | version "2.0.1" 34 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 35 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 36 | dependencies: 37 | color-name "~1.1.4" 38 | 39 | color-name@~1.1.4: 40 | version "1.1.4" 41 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 42 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 43 | 44 | commander@^8.3.0: 45 | version "8.3.0" 46 | resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" 47 | integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== 48 | 49 | follow-redirects@^1.14.4: 50 | version "1.15.1" 51 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" 52 | integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== 53 | 54 | has-flag@^4.0.0: 55 | version "4.0.0" 56 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 57 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 58 | 59 | supports-color@^7.1.0: 60 | version "7.2.0" 61 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 62 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 63 | dependencies: 64 | has-flag "^4.0.0" 65 | 66 | typescript@^4.4.4: 67 | version "4.7.3" 68 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.3.tgz#8364b502d5257b540f9de4c40be84c98e23a129d" 69 | integrity sha512-WOkT3XYvrpXx4vMMqlD+8R8R37fZkjyLGlxavMc4iB8lrl8L0DeTcHbYgw/v0N/z9wAFsgBhcsF0ruoySS22mA== 70 | -------------------------------------------------------------------------------- /packages/api/source/controllers/project.controllers.ts: -------------------------------------------------------------------------------- 1 | import type { IProject, IExternalProject, TProjectPage } from "../types"; 2 | import { runAsTransaction, BadRequestError, NotFoundError } from "../utils"; 3 | import { ProjectModel } from "../models"; 4 | import * as constants from "../utils/constants"; 5 | 6 | import joi from "joi"; 7 | import { Types } from "mongoose"; 8 | 9 | const createSchema = joi 10 | .object({ 11 | name: joi.string().min(1).max(128).trim().required(), 12 | description: joi.string().min(0).max(512).allow("").default(""), 13 | variants: joi 14 | .object() 15 | .pattern( 16 | /.{1,128}/, 17 | joi.object().pattern(/.{1,}/, joi.string().allow("")) 18 | ), 19 | }) 20 | .unknown(false); 21 | 22 | const updateVariantSchema = joi 23 | .object({ 24 | name: joi.string().min(1).max(128).trim().required(), 25 | variant: joi.string().min(1).max(128).trim().required(), 26 | values: joi.object().pattern(/.{1,}/, joi.string().allow("")).default({}), 27 | }) 28 | .unknown(false); 29 | 30 | const toExternal = (project: IProject): IExternalProject => { 31 | const { _id, name, description, variants, createdAt, updatedAt } = project; 32 | 33 | return { 34 | id: _id.toString(), 35 | name, 36 | description, 37 | variants, 38 | createdAt, 39 | updatedAt, 40 | }; 41 | }; 42 | 43 | export const create = async ( 44 | context: any, 45 | attributes: any 46 | ): Promise => { 47 | const { error, value } = createSchema.validate(attributes, { 48 | stripUnknown: true, 49 | }); 50 | if (error) { 51 | throw new BadRequestError(error.message); 52 | } 53 | 54 | const newProject = await runAsTransaction(async (session) => { 55 | const newProjectId = new Types.ObjectId(); 56 | 57 | const existingProject = await ProjectModel.findOne({ 58 | name: value.name, 59 | status: { $ne: "delete" }, 60 | }).exec(); 61 | if (existingProject) { 62 | throw new BadRequestError( 63 | `A project with the name "${value.name}" already exists.` 64 | ); 65 | } 66 | 67 | const newProject = new ProjectModel({ 68 | ...value, 69 | _id: newProjectId, 70 | status: "created", 71 | }); 72 | await newProject.save({ session }); 73 | 74 | return newProject; 75 | }); 76 | 77 | return toExternal(newProject); 78 | }; 79 | 80 | export const getByName = async ( 81 | context: any, 82 | name: string 83 | ): Promise => { 84 | if (!constants.namePattern.test(name)) { 85 | throw new BadRequestError( 86 | `The specified project name "${name}" is invalid.` 87 | ); 88 | } 89 | 90 | const project = await ProjectModel.findOne( 91 | { 92 | name, 93 | status: { $ne: "deleted" }, 94 | }, 95 | null, 96 | { lean: true } 97 | ).exec(); 98 | 99 | /* We return a 404 error, if we did not find the entity. */ 100 | if (!project) { 101 | throw new NotFoundError( 102 | `Cannot find a project with the specified name "${name}".` 103 | ); 104 | } 105 | 106 | return toExternal(project); 107 | }; 108 | 109 | export const updateVariant = async (context: any, attributes: any) => { 110 | const { error, value } = updateVariantSchema.validate(attributes); 111 | if (error) { 112 | throw new BadRequestError(error.message); 113 | } 114 | 115 | const updatedProject = await runAsTransaction(async () => { 116 | const patch = Object.fromEntries( 117 | Object.entries(value.values).map((entry) => [ 118 | `variants.${value.variant}.${entry[0]}`, 119 | entry[1], 120 | ]) 121 | ); 122 | 123 | const updatedProject = await ProjectModel.findOneAndUpdate( 124 | { 125 | name: value.name, 126 | status: { $ne: "deleted" }, 127 | }, 128 | { 129 | $set: patch, 130 | }, 131 | { new: true, lean: true } 132 | ).exec(); 133 | 134 | if (!updatedProject) { 135 | throw new NotFoundError( 136 | `Cannot find a project with the specified name "${value.name}".` 137 | ); 138 | } 139 | 140 | return updatedProject; 141 | }); 142 | 143 | return toExternal(updatedProject); 144 | }; 145 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Envy 2 | 3 | Envy allows you to synchronize environment variables across different machines. 4 | 5 | > NOTE: As of this writing, Envy is a proof-of-concept and is not meant for production. 6 | > Mainly because it lacks authentication, authorization, and encryption. See below for 7 | > a list of features that are yet to be implemented. 8 | 9 | Let's say you are working with five other developers on an API. If the API needs environment variables, they will vary across different environments. To keep your secrets safe, you cannot store `.env` in GitHub. Therefore, each developer will have a local copy of the `.env` file. 10 | 11 | Sometimes a developer may update the `.env` file while working on a feature. Sometimes they may forget to update the `.sample.env` file or update the team with the new environment variable. This leads to some frustrating and useless bug when the other developer is testing the feature. Sometimes you end up spending an hour on a bug and then discover that it was due to outdated environment variables. 12 | 13 | So how do you keep the `.env` file secret but synchronized within the team so that each time we update the environment variable it's updated for every member of the team? Say hello to Envy! 14 | 15 | Envy keeps a copy of all the secrets in a central server. Each branch receives its own copy of set environment variables called variants. You can set or unset without disrupting other developers in the team. Once the feature branch is merged, you can merge the corresponding variants, and other developers can pull the changes. 16 | 17 | ## Installation 18 | 19 | You will need Node.js, Yarn and MongoDB to run Envy. You can use MongoDB Atlas to procure a MongoDB instance quickly. 20 | 21 | 1. Clone the repository from GitHub. 22 | 23 | ``` 24 | git clone https://github.com/itssamuelrowe/envy.git envy 25 | ``` 26 | 27 | 2. Create `.env` for the API. Make sure you replace "" with your URL. (The irony... :P) 28 | 29 | ``` 30 | cd envy/packages/api 31 | cat > .env < 34 | PORT=3001 35 | EOF 36 | ``` 37 | 38 | 3. Install the dependencies for the API and start the development server. 39 | 40 | ``` 41 | yarn install 42 | yarn start:dev 43 | ``` 44 | 45 | 4. Install the dependencies for the CLI and build it. 46 | 47 | ``` 48 | cd ../cli 49 | yarn install 50 | yarn build 51 | ``` 52 | 53 | 5. Add Envy to your `PATH`. To keep it permanently in your path, you will have to edit your `~/.bashrc` or the equivalent for your shell. 54 | 55 | ``` 56 | PATH=$PATH:$(pwd)/bin 57 | ``` 58 | 59 | 6. Run Envy! 60 | 61 | ``` 62 | envy 63 | ``` 64 | 65 | ## Sample Usage 66 | 67 | ### Initializing Project 68 | 69 | To use Envy for your project, you need to register your project first. 70 | 71 | ``` 72 | envy create hypertool-api 73 | ``` 74 | 75 | In this example, `hypertool-api` is the project name. 76 | 77 | ### Setting environment variables 78 | 79 | Next, you can add any number of environment variables using the `set` command. 80 | 81 | ``` 82 | envy set hypertool-api:development \ 83 | NODE_ENV=development \ 84 | API_URL=http://localhost:3001 85 | ``` 86 | 87 | The set command requires two arguments: 88 | 89 | - A handle that points to the variant, which is of the form `:`. If a variant does not exist within your project, Envy creates it for you. 90 | - A list of key-value pairs specifying the variables you want to create. 91 | 92 | ### Getting environment variables 93 | 94 | You can read environment variables from a variant using the `get` command. 95 | 96 | ``` 97 | envy get hypertool-api:development --format=pairs 98 | ``` 99 | 100 | The get command requires a handle that points to the variant. In this example, the handle is `hypertool-api:development`. You can optionally specify the output format using `--format`, which accepts `pairs|json|yaml`. 101 | 102 | ## Upcoming Features 103 | 104 | - Git hooks - Install Git hooks that automatically detect changes to variants. 105 | - Asymmetric encryption - As of this writing, secrets are kept in plaintext. An aymmetric encryption algorithm such as AES will be used to store the secrets. 106 | - Authentication 107 | - Authorization 108 | - Web app 109 | - Teams 110 | - Generator - Generate `.env` based on a template 111 | - Integration to Kubernetes, GitHub, and so on. 112 | 113 | You can contact me at `samuelrowe1999@gmail.com` for more information. 114 | 115 | ## License 116 | 117 | The open-source components of Envy are available under the [MIT license](https://opensource.org/licenses/MIT). 118 | -------------------------------------------------------------------------------- /packages/api/source/utils/constants.ts: -------------------------------------------------------------------------------- 1 | // eslint-disable-next-line camelcase 2 | import { by639_1 } from "iso-language-codes"; 3 | 4 | export const tuple = (...values: T) => values; 5 | 6 | export const paginateMaxLimit = 250; 7 | 8 | export const paginateMinLimit = 20; 9 | 10 | export const genders = tuple("male", "female", "other"); 11 | 12 | export const languageCodes = Object.keys(by639_1); 13 | 14 | export const httpStatuses = { 15 | OK: 200, 16 | CREATED: 201, 17 | ACCEPTED: 202, 18 | NO_CONTENT: 204, 19 | BAD_REQUEST: 400, 20 | UNAUTHORIZED: 401, 21 | FORBIDDEN: 403, 22 | NOT_FOUND: 404, 23 | INTERNAL_SERVER_ERROR: 500, 24 | }; 25 | 26 | export const countryCodes = tuple( 27 | "AFG", // Afghanistan 28 | "ALB", // Albania 29 | "DZA", // Algeria 30 | "ASM", // American Samoa 31 | "AND", // Andorra 32 | "AGO", // Angola 33 | "AIA", // Anguilla 34 | "ATA", // Antarctica 35 | "ATG", // Antigua and Barbuda 36 | "ARG", // Argentina 37 | "ARM", // Armenia 38 | "ABW", // Aruba 39 | "AUS", // Australia 40 | "AUT", // Austria 41 | "AZE", // Azerbaijan 42 | "BHS", // Bahamas (the) 43 | "BHR", // Bahrain 44 | "BGD", // Bangladesh 45 | "BRB", // Barbados 46 | "BLR", // Belarus 47 | "BEL", // Belgium 48 | "BLZ", // Belize 49 | "BEN", // Benin 50 | "BMU", // Bermuda 51 | "BTN", // Bhutan 52 | "BOL", // Bolivia (Plurinational State of) 53 | "BES", // Bonaire, Sint Eustatius and Saba 54 | "BIH", // Bosnia and Herzegovina 55 | "BWA", // Botswana 56 | "BVT", // Bouvet Island 57 | "BRA", // Brazil 58 | "IOT", // British Indian Ocean Territory (the) 59 | "BRN", // Brunei Darussalam 60 | "BGR", // Bulgaria 61 | "BFA", // Burkina Faso 62 | "BDI", // Burundi 63 | "CPV", // Cabo Verde 64 | "KHM", // Cambodia 65 | "CMR", // Cameroon 66 | "CAN", // Canada 67 | "CYM", // Cayman Islands (the) 68 | "CAF", // Central African Republic (the) 69 | "TCD", // Chad 70 | "CHL", // Chile 71 | "CHN", // China 72 | "CXR", // Christmas Island 73 | "CCK", // Cocos (Keeling) Islands (the) 74 | "COL", // Colombia 75 | "COM", // Comoros (the) 76 | "COD", // Congo (the Democratic Republic of the) 77 | "COG", // Congo (the) 78 | "COK", // Cook Islands (the) 79 | "CRI", // Costa Rica 80 | "HRV", // Croatia 81 | "CUB", // Cuba 82 | "CUW", // Curaçao 83 | "CYP", // Cyprus 84 | "CZE", // Czechia 85 | "CIV", // Côte d'Ivoire 86 | "DNK", // Denmark 87 | "DJI", // Djibouti 88 | "DMA", // Dominica 89 | "DOM", // Dominican Republic (the) 90 | "ECU", // Ecuador 91 | "EGY", // Egypt 92 | "SLV", // El Salvador 93 | "GNQ", // Equatorial Guinea 94 | "ERI", // Eritrea 95 | "EST", // Estonia 96 | "SWZ", // Eswatini 97 | "ETH", // Ethiopia 98 | "FLK", // Falkland Islands (the) [Malvinas] 99 | "FRO", // Faroe Islands (the) 100 | "FJI", // Fiji 101 | "FIN", // Finland 102 | "FRA", // France 103 | "GUF", // French Guiana 104 | "PYF", // French Polynesia 105 | "ATF", // French Southern Territories (the) 106 | "GAB", // Gabon 107 | "GMB", // Gambia (the) 108 | "GEO", // Georgia 109 | "DEU", // Germany 110 | "GHA", // Ghana 111 | "GIB", // Gibraltar 112 | "GRC", // Greece 113 | "GRL", // Greenland 114 | "GRD", // Grenada 115 | "GLP", // Guadeloupe 116 | "GUM", // Guam 117 | "GTM", // Guatemala 118 | "GGY", // Guernsey 119 | "GIN", // Guinea 120 | "GNB", // Guinea-Bissau 121 | "GUY", // Guyana 122 | "HTI", // Haiti 123 | "HMD", // Heard Island and McDonald Islands 124 | "VAT", // Holy See (the) 125 | "HND", // Honduras 126 | "HKG", // Hong Kong 127 | "HUN", // Hungary 128 | "ISL", // Iceland 129 | "IND", // India 130 | "IDN", // Indonesia 131 | "IRN", // Iran (Islamic Republic of) 132 | "IRQ", // Iraq 133 | "IRL", // Ireland 134 | "IMN", // Isle of Man 135 | "ISR", // Israel 136 | "ITA", // Italy 137 | "JAM", // Jamaica 138 | "JPN", // Japan 139 | "JEY", // Jersey 140 | "JOR", // Jordan 141 | "KAZ", // Kazakhstan 142 | "KEN", // Kenya 143 | "KIR", // Kiribati 144 | "PRK", // Korea (the Democratic People's Republic of) 145 | "KOR", // Korea (the Republic of) 146 | "KWT", // Kuwait 147 | "KGZ", // Kyrgyzstan 148 | "LAO", // Lao People's Democratic Republic (the) 149 | "LVA", // Latvia 150 | "LBN", // Lebanon 151 | "LSO", // Lesotho 152 | "LBR", // Liberia 153 | "LBY", // Libya 154 | "LIE", // Liechtenstein 155 | "LTU", // Lithuania 156 | "LUX", // Luxembourg 157 | "MAC", // Macao 158 | "MDG", // Madagascar 159 | "MWI", // Malawi 160 | "MYS", // Malaysia 161 | "MDV", // Maldives 162 | "MLI", // Mali 163 | "MLT", // Malta 164 | "MHL", // Marshall Islands (the) 165 | "MTQ", // Martinique 166 | "MRT", // Mauritania 167 | "MUS", // Mauritius 168 | "MYT", // Mayotte 169 | "MEX", // Mexico 170 | "FSM", // Micronesia (Federated States of) 171 | "MDA", // Moldova (the Republic of) 172 | "MCO", // Monaco 173 | "MNG", // Mongolia 174 | "MNE", // Montenegro 175 | "MSR", // Montserrat 176 | "MAR", // Morocco 177 | "MOZ", // Mozambique 178 | "MMR", // Myanmar 179 | "NAM", // Namibia 180 | "NRU", // Nauru 181 | "NPL", // Nepal 182 | "NLD", // Netherlands (the) 183 | "NCL", // New Caledonia 184 | "NZL", // New Zealand 185 | "NIC", // Nicaragua 186 | "NER", // Niger (the) 187 | "NGA", // Nigeria 188 | "NIU", // Niue 189 | "NFK", // Norfolk Island 190 | "MNP", // Northern Mariana Islands (the) 191 | "NOR", // Norway 192 | "OMN", // Oman 193 | "PAK", // Pakistan 194 | "PLW", // Palau 195 | "PSE", // Palestine, State of 196 | "PAN", // Panama 197 | "PNG", // Papua New Guinea 198 | "PRY", // Paraguay 199 | "PER", // Peru 200 | "PHL", // Philippines (the) 201 | "PCN", // Pitcairn 202 | "POL", // Poland 203 | "PRT", // Portugal 204 | "PRI", // Puerto Rico 205 | "QAT", // Qatar 206 | "MKD", // Republic of North Macedonia 207 | "ROU", // Romania 208 | "RUS", // Russian Federation (the) 209 | "RWA", // Rwanda 210 | "REU", // Réunion 211 | "BLM", // Saint Barthélemy 212 | "SHN", // Saint Helena, Ascension and Tristan da Cunha 213 | "KNA", // Saint Kitts and Nevis 214 | "LCA", // Saint Lucia 215 | "MAF", // Saint Martin (French part) 216 | "SPM", // Saint Pierre and Miquelon 217 | "VCT", // Saint Vincent and the Grenadines 218 | "WSM", // Samoa 219 | "SMR", // San Marino 220 | "STP", // Sao Tome and Principe 221 | "SAU", // Saudi Arabia 222 | "SEN", // Senegal 223 | "SRB", // Serbia 224 | "SYC", // Seychelles 225 | "SLE", // Sierra Leone 226 | "SGP", // Singapore 227 | "SXM", // Sint Maarten (Dutch part) 228 | "SVK", // Slovakia 229 | "SVN", // Slovenia 230 | "SLB", // Solomon Islands 231 | "SOM", // Somalia 232 | "ZAF", // South Africa 233 | "SGS", // South Georgia and the South Sandwich Islands 234 | "SSD", // South Sudan 235 | "ESP", // Spain 236 | "LKA", // Sri Lanka 237 | "SDN", // Sudan (the) 238 | "SUR", // Suriname 239 | "SJM", // Svalbard and Jan Mayen 240 | "SWE", // Sweden 241 | "CHE", // Switzerland 242 | "SYR", // Syrian Arab Republic 243 | "TWN", // Taiwan 244 | "TJK", // Tajikistan 245 | "TZA", // Tanzania, United Republic of 246 | "THA", // Thailand 247 | "TLS", // Timor-Leste 248 | "TGO", // Togo 249 | "TKL", // Tokelau 250 | "TON", // Tonga 251 | "TTO", // Trinidad and Tobago 252 | "TUN", // Tunisia 253 | "TUR", // Turkey 254 | "TKM", // Turkmenistan 255 | "TCA", // Turks and Caicos Islands (the) 256 | "TUV", // Tuvalu 257 | "UGA", // Uganda 258 | "UKR", // Ukraine 259 | "ARE", // United Arab Emirates (the) 260 | "GBR", // United Kingdom of Great Britain and Northern Ireland (the) 261 | "UMI", // United States Minor Outlying Islands (the) 262 | "USA", // United States of America (the) 263 | "URY", // Uruguay 264 | "UZB", // Uzbekistan 265 | "VUT", // Vanuatu 266 | "VEN", // Venezuela (Bolivarian Republic of) 267 | "VNM", // Viet Nam 268 | "VGB", // Virgin Islands (British) 269 | "VIR", // Virgin Islands (U.S.) 270 | "WLF", // Wallis and Futuna 271 | "ESH", // Western Sahara 272 | "YEM", // Yemen 273 | "ZMB", // Zambia 274 | "ZWE", // Zimbabwe 275 | "ALA" // Åland Islands 276 | ); 277 | 278 | export const identifierPattern = /^[a-z0-9]{24}$/; 279 | 280 | export const namePattern = /^[a-zA-Z_][a-zA-Z_0-9-]+[a-zA-Z_0-9]{1,256}$/; 281 | 282 | export const projectStatuses = tuple("created", "deleted"); 283 | -------------------------------------------------------------------------------- /packages/api/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@hapi/hoek@^9.0.0": 6 | version "9.3.0" 7 | resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" 8 | integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== 9 | 10 | "@hapi/topo@^5.0.0": 11 | version "5.1.0" 12 | resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" 13 | integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== 14 | dependencies: 15 | "@hapi/hoek" "^9.0.0" 16 | 17 | "@sideway/address@^4.1.3": 18 | version "4.1.4" 19 | resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" 20 | integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== 21 | dependencies: 22 | "@hapi/hoek" "^9.0.0" 23 | 24 | "@sideway/formula@^3.0.0": 25 | version "3.0.0" 26 | resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.0.tgz#fe158aee32e6bd5de85044be615bc08478a0a13c" 27 | integrity sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg== 28 | 29 | "@sideway/pinpoint@^2.0.0": 30 | version "2.0.0" 31 | resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" 32 | integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== 33 | 34 | "@sindresorhus/is@^0.14.0": 35 | version "0.14.0" 36 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" 37 | integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== 38 | 39 | "@szmarczak/http-timer@^1.1.2": 40 | version "1.1.2" 41 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" 42 | integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== 43 | dependencies: 44 | defer-to-connect "^1.0.1" 45 | 46 | "@types/body-parser@*": 47 | version "1.19.2" 48 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" 49 | integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== 50 | dependencies: 51 | "@types/connect" "*" 52 | "@types/node" "*" 53 | 54 | "@types/connect@*": 55 | version "3.4.35" 56 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" 57 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== 58 | dependencies: 59 | "@types/node" "*" 60 | 61 | "@types/express-serve-static-core@^4.17.18": 62 | version "4.17.28" 63 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz#c47def9f34ec81dc6328d0b1b5303d1ec98d86b8" 64 | integrity sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig== 65 | dependencies: 66 | "@types/node" "*" 67 | "@types/qs" "*" 68 | "@types/range-parser" "*" 69 | 70 | "@types/express@^4.17.13": 71 | version "4.17.13" 72 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" 73 | integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== 74 | dependencies: 75 | "@types/body-parser" "*" 76 | "@types/express-serve-static-core" "^4.17.18" 77 | "@types/qs" "*" 78 | "@types/serve-static" "*" 79 | 80 | "@types/mime@^1": 81 | version "1.3.2" 82 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" 83 | integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== 84 | 85 | "@types/node@*": 86 | version "17.0.31" 87 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.31.tgz#a5bb84ecfa27eec5e1c802c6bbf8139bdb163a5d" 88 | integrity sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q== 89 | 90 | "@types/node@^16.11.7": 91 | version "16.11.33" 92 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.33.tgz#566713b1b626f781c5c58fe3531307283e00720c" 93 | integrity sha512-0PJ0vg+JyU0MIan58IOIFRtSvsb7Ri+7Wltx2qAg94eMOrpg4+uuP3aUHCpxXc1i0jCXiC+zIamSZh3l9AbcQA== 94 | 95 | "@types/qs@*": 96 | version "6.9.7" 97 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" 98 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== 99 | 100 | "@types/range-parser@*": 101 | version "1.2.4" 102 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" 103 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== 104 | 105 | "@types/serve-static@*": 106 | version "1.13.10" 107 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" 108 | integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== 109 | dependencies: 110 | "@types/mime" "^1" 111 | "@types/node" "*" 112 | 113 | "@types/webidl-conversions@*": 114 | version "6.1.1" 115 | resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz#e33bc8ea812a01f63f90481c666334844b12a09e" 116 | integrity sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q== 117 | 118 | "@types/whatwg-url@^8.2.1": 119 | version "8.2.1" 120 | resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.1.tgz#f1aac222dab7c59e011663a0cb0a3117b2ef05d4" 121 | integrity sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ== 122 | dependencies: 123 | "@types/node" "*" 124 | "@types/webidl-conversions" "*" 125 | 126 | abbrev@1: 127 | version "1.1.1" 128 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 129 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 130 | 131 | accepts@~1.3.8: 132 | version "1.3.8" 133 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 134 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 135 | dependencies: 136 | mime-types "~2.1.34" 137 | negotiator "0.6.3" 138 | 139 | ansi-align@^3.0.0: 140 | version "3.0.1" 141 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" 142 | integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== 143 | dependencies: 144 | string-width "^4.1.0" 145 | 146 | ansi-regex@^5.0.1: 147 | version "5.0.1" 148 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 149 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 150 | 151 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 152 | version "4.3.0" 153 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 154 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 155 | dependencies: 156 | color-convert "^2.0.1" 157 | 158 | anymatch@~3.1.2: 159 | version "3.1.2" 160 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 161 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 162 | dependencies: 163 | normalize-path "^3.0.0" 164 | picomatch "^2.0.4" 165 | 166 | apollo-server-errors@^3.3.1: 167 | version "3.3.1" 168 | resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz#ba5c00cdaa33d4cbd09779f8cb6f47475d1cd655" 169 | integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA== 170 | 171 | array-flatten@1.1.1: 172 | version "1.1.1" 173 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 174 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 175 | 176 | asynckit@^0.4.0: 177 | version "0.4.0" 178 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 179 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= 180 | 181 | axios@^0.27.2: 182 | version "0.27.2" 183 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.27.2.tgz#207658cc8621606e586c85db4b41a750e756d972" 184 | integrity sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ== 185 | dependencies: 186 | follow-redirects "^1.14.9" 187 | form-data "^4.0.0" 188 | 189 | balanced-match@^1.0.0: 190 | version "1.0.2" 191 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 192 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 193 | 194 | base64-js@^1.3.1: 195 | version "1.5.1" 196 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 197 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 198 | 199 | basic-auth@~2.0.1: 200 | version "2.0.1" 201 | resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" 202 | integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== 203 | dependencies: 204 | safe-buffer "5.1.2" 205 | 206 | binary-extensions@^2.0.0: 207 | version "2.2.0" 208 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 209 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 210 | 211 | body-parser@1.20.0: 212 | version "1.20.0" 213 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" 214 | integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== 215 | dependencies: 216 | bytes "3.1.2" 217 | content-type "~1.0.4" 218 | debug "2.6.9" 219 | depd "2.0.0" 220 | destroy "1.2.0" 221 | http-errors "2.0.0" 222 | iconv-lite "0.4.24" 223 | on-finished "2.4.1" 224 | qs "6.10.3" 225 | raw-body "2.5.1" 226 | type-is "~1.6.18" 227 | unpipe "1.0.0" 228 | 229 | boxen@^5.0.0: 230 | version "5.1.2" 231 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" 232 | integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== 233 | dependencies: 234 | ansi-align "^3.0.0" 235 | camelcase "^6.2.0" 236 | chalk "^4.1.0" 237 | cli-boxes "^2.2.1" 238 | string-width "^4.2.2" 239 | type-fest "^0.20.2" 240 | widest-line "^3.1.0" 241 | wrap-ansi "^7.0.0" 242 | 243 | brace-expansion@^1.1.7: 244 | version "1.1.11" 245 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 246 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 247 | dependencies: 248 | balanced-match "^1.0.0" 249 | concat-map "0.0.1" 250 | 251 | braces@~3.0.2: 252 | version "3.0.2" 253 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 254 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 255 | dependencies: 256 | fill-range "^7.0.1" 257 | 258 | bson@^4.6.2: 259 | version "4.6.3" 260 | resolved "https://registry.yarnpkg.com/bson/-/bson-4.6.3.tgz#d1a9a0b84b9e84b62390811fc5580f6a8b1d858c" 261 | integrity sha512-rAqP5hcUVJhXP2MCSNVsf0oM2OGU1So6A9pVRDYayvJ5+hygXHQApf87wd5NlhPM1J9RJnbqxIG/f8QTzRoQ4A== 262 | dependencies: 263 | buffer "^5.6.0" 264 | 265 | buffer@^5.6.0: 266 | version "5.7.1" 267 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" 268 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 269 | dependencies: 270 | base64-js "^1.3.1" 271 | ieee754 "^1.1.13" 272 | 273 | bytes@3.1.2: 274 | version "3.1.2" 275 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 276 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 277 | 278 | cacheable-request@^6.0.0: 279 | version "6.1.0" 280 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" 281 | integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== 282 | dependencies: 283 | clone-response "^1.0.2" 284 | get-stream "^5.1.0" 285 | http-cache-semantics "^4.0.0" 286 | keyv "^3.0.0" 287 | lowercase-keys "^2.0.0" 288 | normalize-url "^4.1.0" 289 | responselike "^1.0.2" 290 | 291 | call-bind@^1.0.0: 292 | version "1.0.2" 293 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 294 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 295 | dependencies: 296 | function-bind "^1.1.1" 297 | get-intrinsic "^1.0.2" 298 | 299 | camelcase@^6.2.0: 300 | version "6.3.0" 301 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 302 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 303 | 304 | chalk@^4.1.0: 305 | version "4.1.2" 306 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 307 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 308 | dependencies: 309 | ansi-styles "^4.1.0" 310 | supports-color "^7.1.0" 311 | 312 | chokidar@^3.5.2: 313 | version "3.5.3" 314 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 315 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 316 | dependencies: 317 | anymatch "~3.1.2" 318 | braces "~3.0.2" 319 | glob-parent "~5.1.2" 320 | is-binary-path "~2.1.0" 321 | is-glob "~4.0.1" 322 | normalize-path "~3.0.0" 323 | readdirp "~3.6.0" 324 | optionalDependencies: 325 | fsevents "~2.3.2" 326 | 327 | ci-info@^2.0.0: 328 | version "2.0.0" 329 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 330 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 331 | 332 | cli-boxes@^2.2.1: 333 | version "2.2.1" 334 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" 335 | integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== 336 | 337 | clone-response@^1.0.2: 338 | version "1.0.2" 339 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" 340 | integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= 341 | dependencies: 342 | mimic-response "^1.0.0" 343 | 344 | color-convert@^2.0.1: 345 | version "2.0.1" 346 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 347 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 348 | dependencies: 349 | color-name "~1.1.4" 350 | 351 | color-name@~1.1.4: 352 | version "1.1.4" 353 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 354 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 355 | 356 | combined-stream@^1.0.8: 357 | version "1.0.8" 358 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 359 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 360 | dependencies: 361 | delayed-stream "~1.0.0" 362 | 363 | concat-map@0.0.1: 364 | version "0.0.1" 365 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 366 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 367 | 368 | configstore@^5.0.1: 369 | version "5.0.1" 370 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" 371 | integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== 372 | dependencies: 373 | dot-prop "^5.2.0" 374 | graceful-fs "^4.1.2" 375 | make-dir "^3.0.0" 376 | unique-string "^2.0.0" 377 | write-file-atomic "^3.0.0" 378 | xdg-basedir "^4.0.0" 379 | 380 | content-disposition@0.5.4: 381 | version "0.5.4" 382 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" 383 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== 384 | dependencies: 385 | safe-buffer "5.2.1" 386 | 387 | content-type@~1.0.4: 388 | version "1.0.4" 389 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 390 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 391 | 392 | cookie-signature@1.0.6: 393 | version "1.0.6" 394 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 395 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 396 | 397 | cookie@0.5.0: 398 | version "0.5.0" 399 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" 400 | integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== 401 | 402 | cors@^2.8.5: 403 | version "2.8.5" 404 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 405 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 406 | dependencies: 407 | object-assign "^4" 408 | vary "^1" 409 | 410 | crypto-random-string@^2.0.0: 411 | version "2.0.0" 412 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" 413 | integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== 414 | 415 | debug@2.6.9: 416 | version "2.6.9" 417 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 418 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 419 | dependencies: 420 | ms "2.0.0" 421 | 422 | debug@4.x: 423 | version "4.3.4" 424 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 425 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 426 | dependencies: 427 | ms "2.1.2" 428 | 429 | debug@^3.2.7: 430 | version "3.2.7" 431 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 432 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 433 | dependencies: 434 | ms "^2.1.1" 435 | 436 | decompress-response@^3.3.0: 437 | version "3.3.0" 438 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 439 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= 440 | dependencies: 441 | mimic-response "^1.0.0" 442 | 443 | deep-extend@^0.6.0: 444 | version "0.6.0" 445 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 446 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 447 | 448 | defer-to-connect@^1.0.1: 449 | version "1.1.3" 450 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" 451 | integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== 452 | 453 | delayed-stream@~1.0.0: 454 | version "1.0.0" 455 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 456 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= 457 | 458 | denque@^2.0.1: 459 | version "2.0.1" 460 | resolved "https://registry.yarnpkg.com/denque/-/denque-2.0.1.tgz#bcef4c1b80dc32efe97515744f21a4229ab8934a" 461 | integrity sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ== 462 | 463 | depd@2.0.0, depd@~2.0.0: 464 | version "2.0.0" 465 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 466 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 467 | 468 | destroy@1.2.0: 469 | version "1.2.0" 470 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" 471 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== 472 | 473 | dot-prop@^5.2.0: 474 | version "5.3.0" 475 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" 476 | integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== 477 | dependencies: 478 | is-obj "^2.0.0" 479 | 480 | dotenv@^10.0.0: 481 | version "10.0.0" 482 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" 483 | integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== 484 | 485 | duplexer3@^0.1.4: 486 | version "0.1.4" 487 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 488 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 489 | 490 | ee-first@1.1.1: 491 | version "1.1.1" 492 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 493 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 494 | 495 | emoji-regex@^8.0.0: 496 | version "8.0.0" 497 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 498 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 499 | 500 | encodeurl@~1.0.2: 501 | version "1.0.2" 502 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 503 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 504 | 505 | end-of-stream@^1.1.0: 506 | version "1.4.4" 507 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 508 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 509 | dependencies: 510 | once "^1.4.0" 511 | 512 | escape-goat@^2.0.0: 513 | version "2.1.1" 514 | resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" 515 | integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== 516 | 517 | escape-html@~1.0.3: 518 | version "1.0.3" 519 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 520 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 521 | 522 | etag@~1.8.1: 523 | version "1.8.1" 524 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 525 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 526 | 527 | express@^4.17.1: 528 | version "4.18.1" 529 | resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" 530 | integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== 531 | dependencies: 532 | accepts "~1.3.8" 533 | array-flatten "1.1.1" 534 | body-parser "1.20.0" 535 | content-disposition "0.5.4" 536 | content-type "~1.0.4" 537 | cookie "0.5.0" 538 | cookie-signature "1.0.6" 539 | debug "2.6.9" 540 | depd "2.0.0" 541 | encodeurl "~1.0.2" 542 | escape-html "~1.0.3" 543 | etag "~1.8.1" 544 | finalhandler "1.2.0" 545 | fresh "0.5.2" 546 | http-errors "2.0.0" 547 | merge-descriptors "1.0.1" 548 | methods "~1.1.2" 549 | on-finished "2.4.1" 550 | parseurl "~1.3.3" 551 | path-to-regexp "0.1.7" 552 | proxy-addr "~2.0.7" 553 | qs "6.10.3" 554 | range-parser "~1.2.1" 555 | safe-buffer "5.2.1" 556 | send "0.18.0" 557 | serve-static "1.15.0" 558 | setprototypeof "1.2.0" 559 | statuses "2.0.1" 560 | type-is "~1.6.18" 561 | utils-merge "1.0.1" 562 | vary "~1.1.2" 563 | 564 | fill-range@^7.0.1: 565 | version "7.0.1" 566 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 567 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 568 | dependencies: 569 | to-regex-range "^5.0.1" 570 | 571 | finalhandler@1.2.0: 572 | version "1.2.0" 573 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" 574 | integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== 575 | dependencies: 576 | debug "2.6.9" 577 | encodeurl "~1.0.2" 578 | escape-html "~1.0.3" 579 | on-finished "2.4.1" 580 | parseurl "~1.3.3" 581 | statuses "2.0.1" 582 | unpipe "~1.0.0" 583 | 584 | follow-redirects@^1.14.9: 585 | version "1.14.9" 586 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.9.tgz#dd4ea157de7bfaf9ea9b3fbd85aa16951f78d8d7" 587 | integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== 588 | 589 | form-data@^4.0.0: 590 | version "4.0.0" 591 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" 592 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== 593 | dependencies: 594 | asynckit "^0.4.0" 595 | combined-stream "^1.0.8" 596 | mime-types "^2.1.12" 597 | 598 | forwarded@0.2.0: 599 | version "0.2.0" 600 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 601 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 602 | 603 | fresh@0.5.2: 604 | version "0.5.2" 605 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 606 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 607 | 608 | fsevents@~2.3.2: 609 | version "2.3.2" 610 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 611 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 612 | 613 | function-bind@^1.1.1: 614 | version "1.1.1" 615 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 616 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 617 | 618 | get-intrinsic@^1.0.2: 619 | version "1.1.1" 620 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" 621 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== 622 | dependencies: 623 | function-bind "^1.1.1" 624 | has "^1.0.3" 625 | has-symbols "^1.0.1" 626 | 627 | get-stream@^4.1.0: 628 | version "4.1.0" 629 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 630 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 631 | dependencies: 632 | pump "^3.0.0" 633 | 634 | get-stream@^5.1.0: 635 | version "5.2.0" 636 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 637 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 638 | dependencies: 639 | pump "^3.0.0" 640 | 641 | glob-parent@~5.1.2: 642 | version "5.1.2" 643 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 644 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 645 | dependencies: 646 | is-glob "^4.0.1" 647 | 648 | global-dirs@^3.0.0: 649 | version "3.0.0" 650 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.0.tgz#70a76fe84ea315ab37b1f5576cbde7d48ef72686" 651 | integrity sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA== 652 | dependencies: 653 | ini "2.0.0" 654 | 655 | got@^9.6.0: 656 | version "9.6.0" 657 | resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" 658 | integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== 659 | dependencies: 660 | "@sindresorhus/is" "^0.14.0" 661 | "@szmarczak/http-timer" "^1.1.2" 662 | cacheable-request "^6.0.0" 663 | decompress-response "^3.3.0" 664 | duplexer3 "^0.1.4" 665 | get-stream "^4.1.0" 666 | lowercase-keys "^1.0.1" 667 | mimic-response "^1.0.1" 668 | p-cancelable "^1.0.0" 669 | to-readable-stream "^1.0.0" 670 | url-parse-lax "^3.0.0" 671 | 672 | graceful-fs@^4.1.2: 673 | version "4.2.10" 674 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 675 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 676 | 677 | graphql@^16.5.0: 678 | version "16.5.0" 679 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.5.0.tgz#41b5c1182eaac7f3d47164fb247f61e4dfb69c85" 680 | integrity sha512-qbHgh8Ix+j/qY+a/ZcJnFQ+j8ezakqPiHwPiZhV/3PgGlgf96QMBB5/f2rkiC9sgLoy/xvT6TSiaf2nTHJh5iA== 681 | 682 | has-flag@^3.0.0: 683 | version "3.0.0" 684 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 685 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 686 | 687 | has-flag@^4.0.0: 688 | version "4.0.0" 689 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 690 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 691 | 692 | has-symbols@^1.0.1: 693 | version "1.0.3" 694 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 695 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 696 | 697 | has-yarn@^2.1.0: 698 | version "2.1.0" 699 | resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" 700 | integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== 701 | 702 | has@^1.0.3: 703 | version "1.0.3" 704 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 705 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 706 | dependencies: 707 | function-bind "^1.1.1" 708 | 709 | http-cache-semantics@^4.0.0: 710 | version "4.1.0" 711 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" 712 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== 713 | 714 | http-errors@2.0.0: 715 | version "2.0.0" 716 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" 717 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 718 | dependencies: 719 | depd "2.0.0" 720 | inherits "2.0.4" 721 | setprototypeof "1.2.0" 722 | statuses "2.0.1" 723 | toidentifier "1.0.1" 724 | 725 | iconv-lite@0.4.24: 726 | version "0.4.24" 727 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 728 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 729 | dependencies: 730 | safer-buffer ">= 2.1.2 < 3" 731 | 732 | ieee754@^1.1.13: 733 | version "1.2.1" 734 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 735 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 736 | 737 | ignore-by-default@^1.0.1: 738 | version "1.0.1" 739 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 740 | integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= 741 | 742 | import-lazy@^2.1.0: 743 | version "2.1.0" 744 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 745 | integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= 746 | 747 | imurmurhash@^0.1.4: 748 | version "0.1.4" 749 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 750 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 751 | 752 | inherits@2.0.4: 753 | version "2.0.4" 754 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 755 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 756 | 757 | ini@2.0.0: 758 | version "2.0.0" 759 | resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" 760 | integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== 761 | 762 | ini@~1.3.0: 763 | version "1.3.8" 764 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 765 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 766 | 767 | ip@^1.1.5: 768 | version "1.1.5" 769 | resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" 770 | integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= 771 | 772 | ipaddr.js@1.9.1: 773 | version "1.9.1" 774 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 775 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 776 | 777 | is-binary-path@~2.1.0: 778 | version "2.1.0" 779 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 780 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 781 | dependencies: 782 | binary-extensions "^2.0.0" 783 | 784 | is-ci@^2.0.0: 785 | version "2.0.0" 786 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 787 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== 788 | dependencies: 789 | ci-info "^2.0.0" 790 | 791 | is-extglob@^2.1.1: 792 | version "2.1.1" 793 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 794 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 795 | 796 | is-fullwidth-code-point@^3.0.0: 797 | version "3.0.0" 798 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 799 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 800 | 801 | is-glob@^4.0.1, is-glob@~4.0.1: 802 | version "4.0.3" 803 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 804 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 805 | dependencies: 806 | is-extglob "^2.1.1" 807 | 808 | is-installed-globally@^0.4.0: 809 | version "0.4.0" 810 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" 811 | integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== 812 | dependencies: 813 | global-dirs "^3.0.0" 814 | is-path-inside "^3.0.2" 815 | 816 | is-npm@^5.0.0: 817 | version "5.0.0" 818 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" 819 | integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== 820 | 821 | is-number@^7.0.0: 822 | version "7.0.0" 823 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 824 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 825 | 826 | is-obj@^2.0.0: 827 | version "2.0.0" 828 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" 829 | integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== 830 | 831 | is-path-inside@^3.0.2: 832 | version "3.0.3" 833 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 834 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 835 | 836 | is-typedarray@^1.0.0: 837 | version "1.0.0" 838 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 839 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 840 | 841 | is-yarn-global@^0.3.0: 842 | version "0.3.0" 843 | resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" 844 | integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== 845 | 846 | iso-language-codes@^1.1.0: 847 | version "1.1.0" 848 | resolved "https://registry.yarnpkg.com/iso-language-codes/-/iso-language-codes-1.1.0.tgz#8ecc01b62e6f605a6d352b051f0367a77c5a295c" 849 | integrity sha512-keIujxUvEAFeEd4esZZM0w+Hbek+G+JWsWs8phODkNvSq8NE2w68ZVD8ZpOUurX8/3ElQyPll0952J06wQNKvA== 850 | 851 | joi@^17.4.2: 852 | version "17.6.0" 853 | resolved "https://registry.yarnpkg.com/joi/-/joi-17.6.0.tgz#0bb54f2f006c09a96e75ce687957bd04290054b2" 854 | integrity sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw== 855 | dependencies: 856 | "@hapi/hoek" "^9.0.0" 857 | "@hapi/topo" "^5.0.0" 858 | "@sideway/address" "^4.1.3" 859 | "@sideway/formula" "^3.0.0" 860 | "@sideway/pinpoint" "^2.0.0" 861 | 862 | json-buffer@3.0.0: 863 | version "3.0.0" 864 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" 865 | integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= 866 | 867 | kareem@2.3.5: 868 | version "2.3.5" 869 | resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.5.tgz#111fe9dbab754c8ed88b7a2360e2680cec1420ca" 870 | integrity sha512-qxCyQtp3ioawkiRNQr/v8xw9KIviMSSNmy+63Wubj7KmMn3g7noRXIZB4vPCAP+ETi2SR8eH6CvmlKZuGpoHOg== 871 | 872 | keyv@^3.0.0: 873 | version "3.1.0" 874 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" 875 | integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== 876 | dependencies: 877 | json-buffer "3.0.0" 878 | 879 | latest-version@^5.1.0: 880 | version "5.1.0" 881 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" 882 | integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== 883 | dependencies: 884 | package-json "^6.3.0" 885 | 886 | lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: 887 | version "1.0.1" 888 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 889 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== 890 | 891 | lowercase-keys@^2.0.0: 892 | version "2.0.0" 893 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" 894 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== 895 | 896 | lru-cache@^6.0.0: 897 | version "6.0.0" 898 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 899 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 900 | dependencies: 901 | yallist "^4.0.0" 902 | 903 | make-dir@^3.0.0: 904 | version "3.1.0" 905 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 906 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 907 | dependencies: 908 | semver "^6.0.0" 909 | 910 | media-typer@0.3.0: 911 | version "0.3.0" 912 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 913 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 914 | 915 | memory-pager@^1.0.2: 916 | version "1.5.0" 917 | resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" 918 | integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== 919 | 920 | merge-descriptors@1.0.1: 921 | version "1.0.1" 922 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 923 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 924 | 925 | methods@~1.1.2: 926 | version "1.1.2" 927 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 928 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 929 | 930 | mime-db@1.52.0: 931 | version "1.52.0" 932 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 933 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 934 | 935 | mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34: 936 | version "2.1.35" 937 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 938 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 939 | dependencies: 940 | mime-db "1.52.0" 941 | 942 | mime@1.6.0: 943 | version "1.6.0" 944 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 945 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 946 | 947 | mimic-response@^1.0.0, mimic-response@^1.0.1: 948 | version "1.0.1" 949 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 950 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 951 | 952 | minimatch@^3.0.4: 953 | version "3.1.2" 954 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 955 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 956 | dependencies: 957 | brace-expansion "^1.1.7" 958 | 959 | minimist@^1.2.0: 960 | version "1.2.6" 961 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 962 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 963 | 964 | mongodb-connection-string-url@^2.5.2: 965 | version "2.5.2" 966 | resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz#f075c8d529e8d3916386018b8a396aed4f16e5ed" 967 | integrity sha512-tWDyIG8cQlI5k3skB6ywaEA5F9f5OntrKKsT/Lteub2zgwSUlhqEN2inGgBTm8bpYJf8QYBdA/5naz65XDpczA== 968 | dependencies: 969 | "@types/whatwg-url" "^8.2.1" 970 | whatwg-url "^11.0.0" 971 | 972 | mongodb@4.5.0: 973 | version "4.5.0" 974 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-4.5.0.tgz#d74c2008567b606dccef220f62a44cd7b934eb92" 975 | integrity sha512-A2l8MjEpKojnhbCM0MK3+UOGUSGvTNNSv7AkP1fsT7tkambrkkqN/5F2y+PhzsV0Nbv58u04TETpkaSEdI2zKA== 976 | dependencies: 977 | bson "^4.6.2" 978 | denque "^2.0.1" 979 | mongodb-connection-string-url "^2.5.2" 980 | socks "^2.6.2" 981 | optionalDependencies: 982 | saslprep "^1.0.3" 983 | 984 | mongoose-paginate-v2@^1.4.2: 985 | version "1.6.3" 986 | resolved "https://registry.yarnpkg.com/mongoose-paginate-v2/-/mongoose-paginate-v2-1.6.3.tgz#50a96752b84a9456fef850b4207cc8b3867e98ac" 987 | integrity sha512-wxIOcZL7V3+yHIkdTcDk+MtPxjDacEmrZ/4NpwgvOmmEm9SWWsBKRyPd/EmHlRUzk3ylr7fy4QEje1VMg0qpZA== 988 | 989 | mongoose@^6.0.12: 990 | version "6.3.2" 991 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-6.3.2.tgz#7cac2d11119896c8235ce03ae65c322257435142" 992 | integrity sha512-4SEa8ynhJYkGMMbx6KOZ5kJz6qhKIYM8nAGufGq3xh+gNrKP3QwthNfc0X4DvTKhE0DQLMS1/Oy3cMl0AXm5RQ== 993 | dependencies: 994 | bson "^4.6.2" 995 | kareem "2.3.5" 996 | mongodb "4.5.0" 997 | mpath "0.9.0" 998 | mquery "4.0.2" 999 | ms "2.1.3" 1000 | sift "16.0.0" 1001 | 1002 | morgan@^1.10.0: 1003 | version "1.10.0" 1004 | resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" 1005 | integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== 1006 | dependencies: 1007 | basic-auth "~2.0.1" 1008 | debug "2.6.9" 1009 | depd "~2.0.0" 1010 | on-finished "~2.3.0" 1011 | on-headers "~1.0.2" 1012 | 1013 | mpath@0.9.0: 1014 | version "0.9.0" 1015 | resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.9.0.tgz#0c122fe107846e31fc58c75b09c35514b3871904" 1016 | integrity sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew== 1017 | 1018 | mquery@4.0.2: 1019 | version "4.0.2" 1020 | resolved "https://registry.yarnpkg.com/mquery/-/mquery-4.0.2.tgz#a13add5ecd7c2e5a67e0f814b3c7acdfb6772804" 1021 | integrity sha512-oAVF0Nil1mT3rxty6Zln4YiD6x6QsUWYz927jZzjMxOK2aqmhEz5JQ7xmrKK7xRFA2dwV+YaOpKU/S+vfNqKxA== 1022 | dependencies: 1023 | debug "4.x" 1024 | 1025 | ms@2.0.0: 1026 | version "2.0.0" 1027 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1028 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1029 | 1030 | ms@2.1.2: 1031 | version "2.1.2" 1032 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1033 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1034 | 1035 | ms@2.1.3, ms@^2.1.1: 1036 | version "2.1.3" 1037 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 1038 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 1039 | 1040 | negotiator@0.6.3: 1041 | version "0.6.3" 1042 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 1043 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 1044 | 1045 | nodemon@^2.0.15: 1046 | version "2.0.16" 1047 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.16.tgz#d71b31bfdb226c25de34afea53486c8ef225fdef" 1048 | integrity sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w== 1049 | dependencies: 1050 | chokidar "^3.5.2" 1051 | debug "^3.2.7" 1052 | ignore-by-default "^1.0.1" 1053 | minimatch "^3.0.4" 1054 | pstree.remy "^1.1.8" 1055 | semver "^5.7.1" 1056 | supports-color "^5.5.0" 1057 | touch "^3.1.0" 1058 | undefsafe "^2.0.5" 1059 | update-notifier "^5.1.0" 1060 | 1061 | nopt@~1.0.10: 1062 | version "1.0.10" 1063 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 1064 | integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= 1065 | dependencies: 1066 | abbrev "1" 1067 | 1068 | normalize-path@^3.0.0, normalize-path@~3.0.0: 1069 | version "3.0.0" 1070 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 1071 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 1072 | 1073 | normalize-url@^4.1.0: 1074 | version "4.5.1" 1075 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" 1076 | integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== 1077 | 1078 | object-assign@^4: 1079 | version "4.1.1" 1080 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1081 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 1082 | 1083 | object-inspect@^1.9.0: 1084 | version "1.12.0" 1085 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" 1086 | integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== 1087 | 1088 | on-finished@2.4.1: 1089 | version "2.4.1" 1090 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" 1091 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 1092 | dependencies: 1093 | ee-first "1.1.1" 1094 | 1095 | on-finished@~2.3.0: 1096 | version "2.3.0" 1097 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1098 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 1099 | dependencies: 1100 | ee-first "1.1.1" 1101 | 1102 | on-headers@~1.0.2: 1103 | version "1.0.2" 1104 | resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" 1105 | integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== 1106 | 1107 | once@^1.3.1, once@^1.4.0: 1108 | version "1.4.0" 1109 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1110 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1111 | dependencies: 1112 | wrappy "1" 1113 | 1114 | p-cancelable@^1.0.0: 1115 | version "1.1.0" 1116 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" 1117 | integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== 1118 | 1119 | package-json@^6.3.0: 1120 | version "6.5.0" 1121 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" 1122 | integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== 1123 | dependencies: 1124 | got "^9.6.0" 1125 | registry-auth-token "^4.0.0" 1126 | registry-url "^5.0.0" 1127 | semver "^6.2.0" 1128 | 1129 | parseurl@~1.3.3: 1130 | version "1.3.3" 1131 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 1132 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 1133 | 1134 | path-to-regexp@0.1.7: 1135 | version "0.1.7" 1136 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 1137 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 1138 | 1139 | picomatch@^2.0.4, picomatch@^2.2.1: 1140 | version "2.3.1" 1141 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 1142 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 1143 | 1144 | prepend-http@^2.0.0: 1145 | version "2.0.0" 1146 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" 1147 | integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= 1148 | 1149 | proxy-addr@~2.0.7: 1150 | version "2.0.7" 1151 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 1152 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 1153 | dependencies: 1154 | forwarded "0.2.0" 1155 | ipaddr.js "1.9.1" 1156 | 1157 | pstree.remy@^1.1.8: 1158 | version "1.1.8" 1159 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" 1160 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== 1161 | 1162 | pump@^3.0.0: 1163 | version "3.0.0" 1164 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1165 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1166 | dependencies: 1167 | end-of-stream "^1.1.0" 1168 | once "^1.3.1" 1169 | 1170 | punycode@^2.1.1: 1171 | version "2.1.1" 1172 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1173 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1174 | 1175 | pupa@^2.1.1: 1176 | version "2.1.1" 1177 | resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" 1178 | integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== 1179 | dependencies: 1180 | escape-goat "^2.0.0" 1181 | 1182 | qs@6.10.3: 1183 | version "6.10.3" 1184 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" 1185 | integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== 1186 | dependencies: 1187 | side-channel "^1.0.4" 1188 | 1189 | range-parser@~1.2.1: 1190 | version "1.2.1" 1191 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 1192 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 1193 | 1194 | raw-body@2.5.1: 1195 | version "2.5.1" 1196 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" 1197 | integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== 1198 | dependencies: 1199 | bytes "3.1.2" 1200 | http-errors "2.0.0" 1201 | iconv-lite "0.4.24" 1202 | unpipe "1.0.0" 1203 | 1204 | rc@^1.2.8: 1205 | version "1.2.8" 1206 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1207 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 1208 | dependencies: 1209 | deep-extend "^0.6.0" 1210 | ini "~1.3.0" 1211 | minimist "^1.2.0" 1212 | strip-json-comments "~2.0.1" 1213 | 1214 | readdirp@~3.6.0: 1215 | version "3.6.0" 1216 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 1217 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 1218 | dependencies: 1219 | picomatch "^2.2.1" 1220 | 1221 | registry-auth-token@^4.0.0: 1222 | version "4.2.1" 1223 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" 1224 | integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== 1225 | dependencies: 1226 | rc "^1.2.8" 1227 | 1228 | registry-url@^5.0.0: 1229 | version "5.1.0" 1230 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" 1231 | integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== 1232 | dependencies: 1233 | rc "^1.2.8" 1234 | 1235 | responselike@^1.0.2: 1236 | version "1.0.2" 1237 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" 1238 | integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= 1239 | dependencies: 1240 | lowercase-keys "^1.0.0" 1241 | 1242 | safe-buffer@5.1.2: 1243 | version "5.1.2" 1244 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1245 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1246 | 1247 | safe-buffer@5.2.1: 1248 | version "5.2.1" 1249 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1250 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1251 | 1252 | "safer-buffer@>= 2.1.2 < 3": 1253 | version "2.1.2" 1254 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1255 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1256 | 1257 | saslprep@^1.0.3: 1258 | version "1.0.3" 1259 | resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" 1260 | integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== 1261 | dependencies: 1262 | sparse-bitfield "^3.0.3" 1263 | 1264 | semver-diff@^3.1.1: 1265 | version "3.1.1" 1266 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" 1267 | integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== 1268 | dependencies: 1269 | semver "^6.3.0" 1270 | 1271 | semver@^5.7.1: 1272 | version "5.7.1" 1273 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1274 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1275 | 1276 | semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: 1277 | version "6.3.0" 1278 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1279 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1280 | 1281 | semver@^7.3.4: 1282 | version "7.3.7" 1283 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" 1284 | integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== 1285 | dependencies: 1286 | lru-cache "^6.0.0" 1287 | 1288 | send@0.18.0: 1289 | version "0.18.0" 1290 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" 1291 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== 1292 | dependencies: 1293 | debug "2.6.9" 1294 | depd "2.0.0" 1295 | destroy "1.2.0" 1296 | encodeurl "~1.0.2" 1297 | escape-html "~1.0.3" 1298 | etag "~1.8.1" 1299 | fresh "0.5.2" 1300 | http-errors "2.0.0" 1301 | mime "1.6.0" 1302 | ms "2.1.3" 1303 | on-finished "2.4.1" 1304 | range-parser "~1.2.1" 1305 | statuses "2.0.1" 1306 | 1307 | serve-static@1.15.0: 1308 | version "1.15.0" 1309 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" 1310 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== 1311 | dependencies: 1312 | encodeurl "~1.0.2" 1313 | escape-html "~1.0.3" 1314 | parseurl "~1.3.3" 1315 | send "0.18.0" 1316 | 1317 | setprototypeof@1.2.0: 1318 | version "1.2.0" 1319 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 1320 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 1321 | 1322 | side-channel@^1.0.4: 1323 | version "1.0.4" 1324 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 1325 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 1326 | dependencies: 1327 | call-bind "^1.0.0" 1328 | get-intrinsic "^1.0.2" 1329 | object-inspect "^1.9.0" 1330 | 1331 | sift@16.0.0: 1332 | version "16.0.0" 1333 | resolved "https://registry.yarnpkg.com/sift/-/sift-16.0.0.tgz#447991577db61f1a8fab727a8a98a6db57a23eb8" 1334 | integrity sha512-ILTjdP2Mv9V1kIxWMXeMTIRbOBrqKc4JAXmFMnFq3fKeyQ2Qwa3Dw1ubcye3vR+Y6ofA0b9gNDr/y2t6eUeIzQ== 1335 | 1336 | signal-exit@^3.0.2: 1337 | version "3.0.7" 1338 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 1339 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 1340 | 1341 | smart-buffer@^4.2.0: 1342 | version "4.2.0" 1343 | resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" 1344 | integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== 1345 | 1346 | socks@^2.6.2: 1347 | version "2.6.2" 1348 | resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" 1349 | integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== 1350 | dependencies: 1351 | ip "^1.1.5" 1352 | smart-buffer "^4.2.0" 1353 | 1354 | sparse-bitfield@^3.0.3: 1355 | version "3.0.3" 1356 | resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" 1357 | integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= 1358 | dependencies: 1359 | memory-pager "^1.0.2" 1360 | 1361 | statuses@2.0.1: 1362 | version "2.0.1" 1363 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" 1364 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 1365 | 1366 | string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.2: 1367 | version "4.2.3" 1368 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1369 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1370 | dependencies: 1371 | emoji-regex "^8.0.0" 1372 | is-fullwidth-code-point "^3.0.0" 1373 | strip-ansi "^6.0.1" 1374 | 1375 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1376 | version "6.0.1" 1377 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1378 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1379 | dependencies: 1380 | ansi-regex "^5.0.1" 1381 | 1382 | strip-json-comments@~2.0.1: 1383 | version "2.0.1" 1384 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1385 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1386 | 1387 | supports-color@^5.5.0: 1388 | version "5.5.0" 1389 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1390 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1391 | dependencies: 1392 | has-flag "^3.0.0" 1393 | 1394 | supports-color@^7.1.0: 1395 | version "7.2.0" 1396 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1397 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1398 | dependencies: 1399 | has-flag "^4.0.0" 1400 | 1401 | to-readable-stream@^1.0.0: 1402 | version "1.0.0" 1403 | resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" 1404 | integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== 1405 | 1406 | to-regex-range@^5.0.1: 1407 | version "5.0.1" 1408 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1409 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1410 | dependencies: 1411 | is-number "^7.0.0" 1412 | 1413 | toidentifier@1.0.1: 1414 | version "1.0.1" 1415 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 1416 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 1417 | 1418 | touch@^3.1.0: 1419 | version "3.1.0" 1420 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 1421 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 1422 | dependencies: 1423 | nopt "~1.0.10" 1424 | 1425 | tr46@^3.0.0: 1426 | version "3.0.0" 1427 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" 1428 | integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== 1429 | dependencies: 1430 | punycode "^2.1.1" 1431 | 1432 | type-fest@^0.20.2: 1433 | version "0.20.2" 1434 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1435 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1436 | 1437 | type-is@~1.6.18: 1438 | version "1.6.18" 1439 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 1440 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 1441 | dependencies: 1442 | media-typer "0.3.0" 1443 | mime-types "~2.1.24" 1444 | 1445 | typedarray-to-buffer@^3.1.5: 1446 | version "3.1.5" 1447 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 1448 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 1449 | dependencies: 1450 | is-typedarray "^1.0.0" 1451 | 1452 | typescript@^4.4.4: 1453 | version "4.6.4" 1454 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" 1455 | integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== 1456 | 1457 | undefsafe@^2.0.5: 1458 | version "2.0.5" 1459 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" 1460 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== 1461 | 1462 | unique-string@^2.0.0: 1463 | version "2.0.0" 1464 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" 1465 | integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== 1466 | dependencies: 1467 | crypto-random-string "^2.0.0" 1468 | 1469 | unpipe@1.0.0, unpipe@~1.0.0: 1470 | version "1.0.0" 1471 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1472 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 1473 | 1474 | update-notifier@^5.1.0: 1475 | version "5.1.0" 1476 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" 1477 | integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== 1478 | dependencies: 1479 | boxen "^5.0.0" 1480 | chalk "^4.1.0" 1481 | configstore "^5.0.1" 1482 | has-yarn "^2.1.0" 1483 | import-lazy "^2.1.0" 1484 | is-ci "^2.0.0" 1485 | is-installed-globally "^0.4.0" 1486 | is-npm "^5.0.0" 1487 | is-yarn-global "^0.3.0" 1488 | latest-version "^5.1.0" 1489 | pupa "^2.1.1" 1490 | semver "^7.3.4" 1491 | semver-diff "^3.1.1" 1492 | xdg-basedir "^4.0.0" 1493 | 1494 | url-parse-lax@^3.0.0: 1495 | version "3.0.0" 1496 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" 1497 | integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= 1498 | dependencies: 1499 | prepend-http "^2.0.0" 1500 | 1501 | utils-merge@1.0.1: 1502 | version "1.0.1" 1503 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 1504 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 1505 | 1506 | vary@^1, vary@~1.1.2: 1507 | version "1.1.2" 1508 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1509 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 1510 | 1511 | webidl-conversions@^7.0.0: 1512 | version "7.0.0" 1513 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" 1514 | integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== 1515 | 1516 | whatwg-url@^11.0.0: 1517 | version "11.0.0" 1518 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" 1519 | integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== 1520 | dependencies: 1521 | tr46 "^3.0.0" 1522 | webidl-conversions "^7.0.0" 1523 | 1524 | widest-line@^3.1.0: 1525 | version "3.1.0" 1526 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" 1527 | integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== 1528 | dependencies: 1529 | string-width "^4.0.0" 1530 | 1531 | wrap-ansi@^7.0.0: 1532 | version "7.0.0" 1533 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1534 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1535 | dependencies: 1536 | ansi-styles "^4.0.0" 1537 | string-width "^4.1.0" 1538 | strip-ansi "^6.0.0" 1539 | 1540 | wrappy@1: 1541 | version "1.0.2" 1542 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1543 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1544 | 1545 | write-file-atomic@^3.0.0: 1546 | version "3.0.3" 1547 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 1548 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== 1549 | dependencies: 1550 | imurmurhash "^0.1.4" 1551 | is-typedarray "^1.0.0" 1552 | signal-exit "^3.0.2" 1553 | typedarray-to-buffer "^3.1.5" 1554 | 1555 | xdg-basedir@^4.0.0: 1556 | version "4.0.0" 1557 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" 1558 | integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== 1559 | 1560 | yallist@^4.0.0: 1561 | version "4.0.0" 1562 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1563 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1564 | --------------------------------------------------------------------------------