From da758aceaa3f26644aeaa65a5bbe957a6e4c19ea Mon Sep 17 00:00:00 2001 From: Ashwin Phatak Date: Mon, 5 Jul 2021 11:05:45 +0530 Subject: [PATCH] Script to deploy uniswap contracts locally for testing (#118) * Initial setup with hardhat. * Deploy Factory contract. * Deploy tokens and create pool using factory contract. * Deploy contract to private network. * Implement separate scripts for deploying Factory, Token and Pool. Co-authored-by: nikugogoi <95nikass@gmail.com> --- packages/uniswap/.env.example | 1 + packages/uniswap/.gitignore | 8 +++ packages/uniswap/README.md | 58 ++++++++++++++++ packages/uniswap/contracts/ERC20Token.sol | 10 +++ packages/uniswap/hardhat.config.ts | 22 ++++++ packages/uniswap/package.json | 23 +++++- packages/uniswap/tasks/accounts.ts | 12 ++++ packages/uniswap/tasks/create-pool.ts | 27 +++++++ packages/uniswap/tasks/deploy-factory.ts | 14 ++++ packages/uniswap/tasks/deploy-token.ts | 13 ++++ packages/uniswap/tsconfig.json | 75 ++++++++++++++++++++ yarn.lock | 85 ++++++----------------- 12 files changed, 284 insertions(+), 64 deletions(-) create mode 100644 packages/uniswap/.env.example create mode 100644 packages/uniswap/.gitignore create mode 100644 packages/uniswap/contracts/ERC20Token.sol create mode 100644 packages/uniswap/hardhat.config.ts create mode 100644 packages/uniswap/tasks/accounts.ts create mode 100644 packages/uniswap/tasks/create-pool.ts create mode 100644 packages/uniswap/tasks/deploy-factory.ts create mode 100644 packages/uniswap/tasks/deploy-token.ts create mode 100644 packages/uniswap/tsconfig.json diff --git a/packages/uniswap/.env.example b/packages/uniswap/.env.example new file mode 100644 index 00000000..4b30ba59 --- /dev/null +++ b/packages/uniswap/.env.example @@ -0,0 +1 @@ +ETH_RPC_URL=http://127.0.0.1:8545 diff --git a/packages/uniswap/.gitignore b/packages/uniswap/.gitignore new file mode 100644 index 00000000..f4837ac1 --- /dev/null +++ b/packages/uniswap/.gitignore @@ -0,0 +1,8 @@ +node_modules + +#Hardhat files +cache +artifacts + +# Environment variables +.env diff --git a/packages/uniswap/README.md b/packages/uniswap/README.md index ff0d8a4b..89e32d33 100644 --- a/packages/uniswap/README.md +++ b/packages/uniswap/README.md @@ -1,5 +1,39 @@ # Uniswap +## Instructions + +### Deploy contracts + +```bash +# Create .env. +$ cp .env.example .env +# Set ETH_RPC_URL variable to target chain network. + +# Deploy contracts to private network specified by ETH_RPC_URL +$ yarn deploy:factory +# Factory deployed to: 0x5FbDB2315678afecb367f032d93F642f64180aa3 + +$ yarn deploy:token --name Token0 --symbol TK0 +# token TK0 deployed to: 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 + +$ yarn deploy:token --name Token1 --symbol TK1 +# token TK1 deployed to: 0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0 + +$ yarn create:pool --factory 0x5FbDB2315678afecb367f032d93F642f64180aa3 --token0 0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512 --token1 0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0 --fee 500 +# Pool deployed to: 0x315244f2680ABa32F27004B67d83E53c8c88F5FE + + +# For local development. +# Start hardhat local network. +$ yarn hardhat node + +# Deploy contracts to local network. +# Deploy contracts to private network specified by ETH_RPC_URL +$ yarn deploy:factory --network localhost +$ yarn deploy:token --network localhost --name Token0 --symbol TK0 + +``` + ## Scripts * **generate:schema** @@ -13,6 +47,30 @@ $ yarn lint:schema schema/frontend.graphql ``` +* **deploy:factory** + + Deploy Factory contract. + ```bash + $ yarn deploy:factory + + # Deploy to hardhat local network. + $ yarn deploy --network localhost + ``` + +* **deploy:token** + + Deploy Token contract. + ```bash + $ yarn deploy:token --name TokenName --symbol TKS + ``` + +* **create:pool** + + Create pool with factory contract and tokens. + ```bash + $ yarn create:pool --factory 0xFactoryAddress --token0 0xToken0Address --token1 0xToken1Address --fee 500 + ``` + ## References * https://github.com/Uniswap/uniswap-v3-core diff --git a/packages/uniswap/contracts/ERC20Token.sol b/packages/uniswap/contracts/ERC20Token.sol new file mode 100644 index 00000000..1cedb7de --- /dev/null +++ b/packages/uniswap/contracts/ERC20Token.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; + +contract ERC20Token is ERC20 { + constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) { + _mint(msg.sender, 1000000000000000000000); + } +} diff --git a/packages/uniswap/hardhat.config.ts b/packages/uniswap/hardhat.config.ts new file mode 100644 index 00000000..56c994db --- /dev/null +++ b/packages/uniswap/hardhat.config.ts @@ -0,0 +1,22 @@ +import 'dotenv/config'; +import { HardhatUserConfig } from "hardhat/config"; +import "@nomiclabs/hardhat-waffle"; + +import './tasks/accounts' +import './tasks/deploy-factory' +import './tasks/deploy-token' +import './tasks/create-pool' + +const config: HardhatUserConfig = { + solidity: "0.8.0", + networks: { + private: { + url: process.env.ETH_RPC_URL + } + }, + defaultNetwork: 'private' +}; + +// You need to export an object to set up your config +// Go to https://hardhat.org/config/ to learn more +export default config; diff --git a/packages/uniswap/package.json b/packages/uniswap/package.json index ce8a057a..00b6a2dd 100644 --- a/packages/uniswap/package.json +++ b/packages/uniswap/package.json @@ -5,10 +5,29 @@ "license": "UNLICENSED", "scripts": { "generate:schema": "get-graphql-schema https://api.thegraph.com/subgraphs/name/ianlapham/uniswap-v3-alt > schema/full.graphql", - "lint:schema": "graphql-schema-linter" + "lint:schema": "graphql-schema-linter", + "deploy:factory": "hardhat deploy-factory", + "deploy:token": "hardhat deploy-token", + "create:pool": "hardhat create-pool" }, "devDependencies": { + "@nomiclabs/hardhat-ethers": "^2.0.2", + "@nomiclabs/hardhat-waffle": "^2.0.1", + "@types/chai": "^4.2.18", + "@types/mocha": "^8.2.2", + "@types/node": "^15.14.0", + "chai": "^4.3.4", + "ethereum-waffle": "^3.3.0", + "ethers": "^5.2.0", "get-graphql-schema": "^2.1.2", - "graphql-schema-linter": "^2.0.1" + "graphql-schema-linter": "^2.0.1", + "hardhat": "^2.3.0", + "ts-node": "^10.0.0", + "typescript": "^4.3.2" + }, + "dependencies": { + "@openzeppelin/contracts": "^4.2.0", + "@uniswap/v3-core": "^1.0.0", + "dotenv": "^10.0.0" } } diff --git a/packages/uniswap/tasks/accounts.ts b/packages/uniswap/tasks/accounts.ts new file mode 100644 index 00000000..ff2467b3 --- /dev/null +++ b/packages/uniswap/tasks/accounts.ts @@ -0,0 +1,12 @@ +import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; +import { task } from "hardhat/config"; + +// This is a sample Hardhat task. To learn how to create your own go to +// https://hardhat.org/guides/create-task.html +task("accounts", "Prints the list of accounts", async (args, hre) => { + const accounts: SignerWithAddress[] = await hre.ethers.getSigners(); + + for (const account of accounts) { + console.log(account.address); + } +}); diff --git a/packages/uniswap/tasks/create-pool.ts b/packages/uniswap/tasks/create-pool.ts new file mode 100644 index 00000000..6453b0fe --- /dev/null +++ b/packages/uniswap/tasks/create-pool.ts @@ -0,0 +1,27 @@ +import { task, types } from "hardhat/config"; +import { + abi as FACTORY_ABI, +} from '@uniswap/v3-core/artifacts/contracts/UniswapV3Factory.sol/UniswapV3Factory.json' +import { ContractTransaction } from "ethers"; + +task("create-pool", "Creates pool using Factory contract") + .addParam('factory', 'Address of factory contract', undefined, types.string) + .addParam('token0', 'Address of first token contract', undefined, types.string) + .addParam('token1', 'Address of second token contract', undefined, types.string) + .addParam('fee', "The pool's fee", undefined, types.int) + .setAction(async (args, hre) => { + const { factory: factoryAddress, token0, token1, fee } = args + const [signer] = await hre.ethers.getSigners(); + const factory = new hre.ethers.Contract(factoryAddress, FACTORY_ABI, signer); + const transaction: ContractTransaction = await factory.createPool(token0, token1, fee) + const receipt = await transaction.wait(); + + if (receipt.events) { + const poolCreatedEvent = receipt.events.find(el => el.event === 'PoolCreated'); + + if (poolCreatedEvent && poolCreatedEvent.args) { + const { pool } = poolCreatedEvent.args; + console.log('Pool deployed to:', pool); + } + } + }); diff --git a/packages/uniswap/tasks/deploy-factory.ts b/packages/uniswap/tasks/deploy-factory.ts new file mode 100644 index 00000000..b8617df0 --- /dev/null +++ b/packages/uniswap/tasks/deploy-factory.ts @@ -0,0 +1,14 @@ +import { task, types } from "hardhat/config"; +import { + abi as FACTORY_ABI, + bytecode as FACTORY_BYTECODE, +} from '@uniswap/v3-core/artifacts/contracts/UniswapV3Factory.sol/UniswapV3Factory.json' + +task("deploy-factory", "Deploys Factory contract") + .setAction(async (_, hre) => { + const [signer] = await hre.ethers.getSigners(); + const Factory = new hre.ethers.ContractFactory(FACTORY_ABI , FACTORY_BYTECODE, signer); + const factory = await Factory.deploy(); + await factory.deployed(); + console.log("Factory deployed to:", factory.address); + }); diff --git a/packages/uniswap/tasks/deploy-token.ts b/packages/uniswap/tasks/deploy-token.ts new file mode 100644 index 00000000..380f80e1 --- /dev/null +++ b/packages/uniswap/tasks/deploy-token.ts @@ -0,0 +1,13 @@ +import { task, types } from "hardhat/config"; + +task("deploy-token", "Deploys new token") + .addParam('name', 'Name of the token', undefined, types.string) + .addParam('symbol', 'Symbol of the token', undefined, types.string) + .setAction(async (args, hre) => { + const { name, symbol } = args + const Token = await hre.ethers.getContractFactory('ERC20Token'); + const token = await Token.deploy(name, symbol); + + console.log(`Token ${symbol} deployed to:`, token.address) + return token; + }); diff --git a/packages/uniswap/tsconfig.json b/packages/uniswap/tsconfig.json new file mode 100644 index 00000000..881acc90 --- /dev/null +++ b/packages/uniswap/tsconfig.json @@ -0,0 +1,75 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + "lib": [ "ES2020" ], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./dist", /* Redirect output structure to the directory. */ + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an 'override' modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */ + + /* Module Resolution Options */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ + "resolveJsonModule": true + }, + "include": ["src/**/*"], + "exclude": ["src/**/*.test.ts"] +} diff --git a/yarn.lock b/yarn.lock index bd3fa3c1..e17bd502 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1890,6 +1890,11 @@ dependencies: "@octokit/openapi-types" "^7.2.3" +"@openzeppelin/contracts@^4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.2.0.tgz#260d921d99356e48013d9d760caaa6cea35dc642" + integrity sha512-LD4NnkKpHHSMo5z9MvFsG4g1xxZUDqV3A3Futu3nvyfs4wPwXxqOgMaxOoa2PeyGL2VNeSlbxT54enbQzGcgJQ== + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -2395,6 +2400,11 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.13.tgz#e743bae112bd779ac9650f907197dd2caa7f0364" integrity sha512-1x8W5OpxPq+T85OUsHRP6BqXeosKmeXRtjoF39STcdf/UWLqUsoehstZKOi0CunhVqHG17AyZgpj20eRVooK6A== +"@types/node@^15.14.0": + version "15.14.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.0.tgz#74dbf254fb375551a9d2a71faf6b9dbc2178dc53" + integrity sha512-um/+/ip3QZmwLfIkWZSNtQIJNVAqrJ92OkLMeuZrjZMTAJniI7fh8N8OICyDhAJ2mzgk/fmYFo72jRr5HyZ1EQ== + "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" @@ -2576,6 +2586,11 @@ resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== +"@uniswap/v3-core@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@uniswap/v3-core/-/v3-core-1.0.0.tgz#6c24adacc4c25dceee0ba3ca142b35adbd7e359d" + integrity sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA== + "@wry/context@^0.6.0": version "0.6.0" resolved "https://registry.yarnpkg.com/@wry/context/-/context-0.6.0.tgz#f903eceb89d238ef7e8168ed30f4511f92d83e06" @@ -6987,7 +7002,7 @@ glob@7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.1.7, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.6: +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.6: version "7.1.7" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== @@ -8031,11 +8046,6 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - is-url@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" @@ -8143,13 +8153,6 @@ js-yaml@4.0.0: dependencies: argparse "^2.0.1" -js-yaml@4.1.0, js-yaml@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" @@ -8158,6 +8161,13 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -8853,14 +8863,6 @@ log-symbols@4.0.0: dependencies: chalk "^4.0.0" -log-symbols@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - loglevel@^1.6.7: version "1.7.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197" @@ -9478,37 +9480,6 @@ mocha@^8.4.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" -mocha@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.0.1.tgz#01e66b7af0012330c0a38c4b6eaa6d92b8a81bf9" - integrity sha512-9zwsavlRO+5csZu6iRtl3GHImAbhERoDsZwdRkdJ/bE+eVplmoxNKE901ZJ9LdSchYBjSCPbjKc5XvcAri2ylw== - dependencies: - "@ungap/promise-all-settled" "1.1.2" - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.1" - debug "4.3.1" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.1.7" - growl "1.10.5" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "3.0.4" - ms "2.1.3" - nanoid "3.1.23" - serialize-javascript "5.0.1" - strip-json-comments "3.1.1" - supports-color "8.1.1" - which "2.0.2" - wide-align "1.1.3" - workerpool "6.1.4" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - mock-fs@^4.1.0: version "4.14.0" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" @@ -9614,11 +9585,6 @@ nanoid@3.1.20: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== -nanoid@3.1.23: - version "3.1.23" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81" - integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw== - nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -13486,11 +13452,6 @@ workerpool@6.1.0: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== -workerpool@6.1.4: - version "6.1.4" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.4.tgz#6a972b6df82e38d50248ee2820aa98e2d0ad3090" - integrity sha512-jGWPzsUqzkow8HoAvqaPWTUPCrlPJaJ5tY8Iz7n1uCz3tTp6s3CDG0FF1NsX42WNlkRSW6Mr+CDZGnNoSsKa7g== - wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"