From a8ef98909e4f5998549312b67c733456d25253df Mon Sep 17 00:00:00 2001
From: Adrian Li
Date: Tue, 1 Sep 2020 08:00:58 -0700
Subject: [PATCH] Jest Matchers for Smart Contract Development (#321)
* initial commit for jest matchers
* make the simplest test work: toBeProperAddress
* make tests for toBeProperAddress pass
* refactor matcher to its own folder
* rename properAddress to toBeProperAddress
* implement toBeProperPrivateKey
* implement toBeProperHex
* add BigNumber jest matchers
* implement toChangeBalance
* implement toChangeBalances
* rename tests to get CI to pass
* implement toBeReverted
* implement toBeRevertedWith
* tighten up types
* implement toEmit
* remove union test
* implement first rough implementation of toEmitWithArgs
* implement calledOnContract and validators
* implement calledOnContractWith
* rename jest.d.ts to types.d.ts
* update files dependent on types
* rewritten matchers for events emitted
* add jest timeout 10 sec
* ensure message always returns a string
---
waffle-jest/.eslintrc.js | 5 +
waffle-jest/jest.config.js | 5 +
waffle-jest/package.json | 55 +
waffle-jest/src/index.ts | 38 +
waffle-jest/src/matchers/bigNumber.ts | 74 +
.../calledOnContract/calledOnContract.ts | 32 +
.../calledOnContractValidators.ts | 44 +
.../calledOnContract/calledOnContractWith.ts | 32 +
.../src/matchers/calledOnContract/error.ts | 7 +
.../src/matchers/calledOnContract/utils.ts | 13 +
waffle-jest/src/matchers/toBeProperAddress.ts | 12 +
waffle-jest/src/matchers/toBeProperHex.ts | 13 +
.../src/matchers/toBeProperPrivateKey.ts | 12 +
waffle-jest/src/matchers/toBeReverted.ts | 30 +
waffle-jest/src/matchers/toBeRevertedWith.ts | 32 +
waffle-jest/src/matchers/toChangeBalance.ts | 37 +
waffle-jest/src/matchers/toChangeBalances.ts | 48 +
.../matchers/toHaveEmitted/toHaveEmitted.ts | 47 +
.../toHaveEmitted/toHaveEmittedWith.ts | 78 +
.../src/matchers/toHaveEmitted/utils.ts | 52 +
waffle-jest/src/types.d.ts | 43 +
waffle-jest/test/contracts/Calls.ts | 20 +
waffle-jest/test/contracts/Events.ts | 61 +
waffle-jest/test/contracts/Matchers.ts | 60 +
.../__snapshots__/eventsWithArgs.test.ts.snap | 150 ++
waffle-jest/test/matchers/balance.test.ts | 173 ++
waffle-jest/test/matchers/bigNumber.test.ts | 103 +
.../calledOnContract/calledOnContract.test.ts | 55 +
.../calledOnContractValidators.test.ts | 77 +
.../calledOnContractWith.test.ts | 85 +
waffle-jest/test/matchers/events.test.ts | 66 +
.../test/matchers/eventsWithArgs.test.ts | 147 ++
waffle-jest/test/matchers/misc.test.ts | 79 +
waffle-jest/test/matchers/reverted.test.ts | 157 ++
waffle-jest/test/setupJest.ts | 4 +
waffle-jest/tsconfig.build.json | 4 +
waffle-jest/tsconfig.json | 3 +
yarn.lock | 2088 ++++++++++++++++-
38 files changed, 4014 insertions(+), 27 deletions(-)
create mode 100644 waffle-jest/.eslintrc.js
create mode 100644 waffle-jest/jest.config.js
create mode 100644 waffle-jest/package.json
create mode 100644 waffle-jest/src/index.ts
create mode 100644 waffle-jest/src/matchers/bigNumber.ts
create mode 100644 waffle-jest/src/matchers/calledOnContract/calledOnContract.ts
create mode 100644 waffle-jest/src/matchers/calledOnContract/calledOnContractValidators.ts
create mode 100644 waffle-jest/src/matchers/calledOnContract/calledOnContractWith.ts
create mode 100644 waffle-jest/src/matchers/calledOnContract/error.ts
create mode 100644 waffle-jest/src/matchers/calledOnContract/utils.ts
create mode 100644 waffle-jest/src/matchers/toBeProperAddress.ts
create mode 100644 waffle-jest/src/matchers/toBeProperHex.ts
create mode 100644 waffle-jest/src/matchers/toBeProperPrivateKey.ts
create mode 100644 waffle-jest/src/matchers/toBeReverted.ts
create mode 100644 waffle-jest/src/matchers/toBeRevertedWith.ts
create mode 100644 waffle-jest/src/matchers/toChangeBalance.ts
create mode 100644 waffle-jest/src/matchers/toChangeBalances.ts
create mode 100644 waffle-jest/src/matchers/toHaveEmitted/toHaveEmitted.ts
create mode 100644 waffle-jest/src/matchers/toHaveEmitted/toHaveEmittedWith.ts
create mode 100644 waffle-jest/src/matchers/toHaveEmitted/utils.ts
create mode 100644 waffle-jest/src/types.d.ts
create mode 100644 waffle-jest/test/contracts/Calls.ts
create mode 100644 waffle-jest/test/contracts/Events.ts
create mode 100644 waffle-jest/test/contracts/Matchers.ts
create mode 100644 waffle-jest/test/matchers/__snapshots__/eventsWithArgs.test.ts.snap
create mode 100644 waffle-jest/test/matchers/balance.test.ts
create mode 100644 waffle-jest/test/matchers/bigNumber.test.ts
create mode 100644 waffle-jest/test/matchers/calledOnContract/calledOnContract.test.ts
create mode 100644 waffle-jest/test/matchers/calledOnContract/calledOnContractValidators.test.ts
create mode 100644 waffle-jest/test/matchers/calledOnContract/calledOnContractWith.test.ts
create mode 100644 waffle-jest/test/matchers/events.test.ts
create mode 100644 waffle-jest/test/matchers/eventsWithArgs.test.ts
create mode 100644 waffle-jest/test/matchers/misc.test.ts
create mode 100644 waffle-jest/test/matchers/reverted.test.ts
create mode 100644 waffle-jest/test/setupJest.ts
create mode 100644 waffle-jest/tsconfig.build.json
create mode 100644 waffle-jest/tsconfig.json
diff --git a/waffle-jest/.eslintrc.js b/waffle-jest/.eslintrc.js
new file mode 100644
index 000000000..ebf93ce7f
--- /dev/null
+++ b/waffle-jest/.eslintrc.js
@@ -0,0 +1,5 @@
+const baseConfig = require("../.eslintrc.json");
+
+module.exports = {
+ ...baseConfig,
+};
diff --git a/waffle-jest/jest.config.js b/waffle-jest/jest.config.js
new file mode 100644
index 000000000..d85f2a8fc
--- /dev/null
+++ b/waffle-jest/jest.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ preset: 'ts-jest',
+ testEnvironment: 'node',
+ setupFilesAfterEnv: ['./test/setupJest.ts']
+};
diff --git a/waffle-jest/package.json b/waffle-jest/package.json
new file mode 100644
index 000000000..40271cde5
--- /dev/null
+++ b/waffle-jest/package.json
@@ -0,0 +1,55 @@
+{
+ "name": "@ethereum-waffle/jest",
+ "description": "A sweet set of jest matchers for your blockchain testing needs.",
+ "version": "3.0.0",
+ "author": "Adrian Li ",
+ "repository": "git@github.com:EthWorks/Waffle.git",
+ "private": false,
+ "license": "MIT",
+ "keywords": [
+ "ethereum",
+ "smart-contracts",
+ "solidity",
+ "testing",
+ "javascript",
+ "typescript",
+ "jest",
+ "library"
+ ],
+ "homepage": "https://github.com/EthWorks/Waffle",
+ "bugs": {
+ "url": "https://github.com/EthWorks/Waffle/issues"
+ },
+ "main": "dist/cjs/index.js",
+ "module": "dist/esm/index.ts",
+ "types": "dist/esm/index.d.ts",
+ "scripts": {
+ "prepublishOnly": "yarn build",
+ "test": "jest",
+ "lint": "eslint '{src,test}/**/*.ts'",
+ "lint:fix": "eslint --fix '{src,test}/**/*.ts'",
+ "build": "rimraf ./dist && yarn build:esm && yarn build:cjs",
+ "build:esm": "tsc -p tsconfig.build.json --outDir dist/esm --module ES6",
+ "build:cjs": "tsc -p tsconfig.build.json --outDir dist/cjs --declaration false"
+ },
+ "engines": {
+ "node": ">=10.0"
+ },
+ "dependencies": {
+ "@ethereum-waffle/provider": "^3.0.0",
+ "ethers": "^5.0.0",
+ "jest-diff": "^26.0.1"
+ },
+ "devDependencies": {
+ "@types/jest": "^26.0.0",
+ "@typescript-eslint/eslint-plugin": "^2.30.0",
+ "@typescript-eslint/parser": "^2.30.0",
+ "eslint": "^6.8.0",
+ "eslint-plugin-import": "^2.20.2",
+ "jest": "^26.0.1",
+ "rimraf": "^3.0.0",
+ "ts-jest": "^26.1.0",
+ "ts-node": "^8.9.1",
+ "typescript": "^3.8.3"
+ }
+}
diff --git a/waffle-jest/src/index.ts b/waffle-jest/src/index.ts
new file mode 100644
index 000000000..38febccdf
--- /dev/null
+++ b/waffle-jest/src/index.ts
@@ -0,0 +1,38 @@
+import {toBeProperAddress} from './matchers/toBeProperAddress';
+import {toBeProperPrivateKey} from './matchers/toBeProperPrivateKey';
+import {toBeProperHex} from './matchers/toBeProperHex';
+import {bigNumberMatchers} from './matchers/bigNumber';
+import {toChangeBalance} from './matchers/toChangeBalance';
+import {toChangeBalances} from './matchers/toChangeBalances';
+import {toBeReverted} from './matchers/toBeReverted';
+import {toBeRevertedWith} from './matchers/toBeRevertedWith';
+import {toHaveEmitted} from './matchers/toHaveEmitted/toHaveEmitted';
+import {toHaveEmittedWith} from './matchers/toHaveEmitted/toHaveEmittedWith';
+import {toBeCalledOnContract} from './matchers/calledOnContract/calledOnContract';
+import {toBeCalledOnContractWith} from './matchers/calledOnContract/calledOnContractWith';
+
+export const waffleJest = {
+ // misc matchers
+ toBeProperAddress,
+ toBeProperPrivateKey,
+ toBeProperHex,
+
+ // BigNumber matchers
+ ...bigNumberMatchers,
+
+ // balance matchers
+ toChangeBalance,
+ toChangeBalances,
+
+ // revert matchers
+ toBeReverted,
+ toBeRevertedWith,
+
+ // emit matchers
+ toHaveEmitted,
+ toHaveEmittedWith,
+
+ // calledOnContract matchers
+ toBeCalledOnContract,
+ toBeCalledOnContractWith
+};
diff --git a/waffle-jest/src/matchers/bigNumber.ts b/waffle-jest/src/matchers/bigNumber.ts
new file mode 100644
index 000000000..5262c0057
--- /dev/null
+++ b/waffle-jest/src/matchers/bigNumber.ts
@@ -0,0 +1,74 @@
+import {BigNumber} from 'ethers';
+import {Numberish} from '../types';
+
+// NOTE: Jest does not currently support overriding matchers while calling
+// original implementation, therefore we have to name our matchers something
+// different: https://github.com/facebook/jest/issues/6243
+
+export const bigNumberMatchers = {
+ toEqBN(received: Numberish, value: Numberish) {
+ const pass = BigNumber.from(received).eq(value);
+ return pass
+ ? {
+ pass: true,
+ message: () => `Expected "${received}" NOT to be equal ${value}`
+ }
+ : {
+ pass: false,
+ message: () => `Expected "${received}" to be equal ${value}`
+ };
+ },
+ toBeGtBN(received: Numberish, value: Numberish) {
+ const pass = BigNumber.from(received).gt(value);
+ return pass
+ ? {
+ pass: true,
+ message: () =>
+ `Expected "${received}" NOT to be greater than ${value}`
+ }
+ : {
+ pass: false,
+ message: () => `Expected "${received}" to be greater than ${value}`
+ };
+ },
+ toBeLtBN(received: Numberish, value: Numberish) {
+ const pass = BigNumber.from(received).lt(value);
+ return pass
+ ? {
+ pass: true,
+ message: () => `Expected "${received}" NOT to be less than ${value}`
+ }
+ : {
+ pass: false,
+ message: () => `Expected "${received}" to be less than ${value}`
+ };
+ },
+ toBeGteBN(received: Numberish, value: Numberish) {
+ const pass = BigNumber.from(received).gte(value);
+ return pass
+ ? {
+ pass: true,
+ message: () =>
+ `Expected "${received}" NOT to be greater than or equal ${value}`
+ }
+ : {
+ pass: false,
+ message: () =>
+ `Expected "${received}" to be greater than or equal ${value}`
+ };
+ },
+ toBeLteBN(received: Numberish, value: Numberish) {
+ const pass = BigNumber.from(received).lte(value);
+ return pass
+ ? {
+ pass: true,
+ message: () =>
+ `Expected "${received}" NOT to be less than or equal ${value}`
+ }
+ : {
+ pass: false,
+ message: () =>
+ `Expected "${received}" to be less than or equal ${value}`
+ };
+ }
+};
diff --git a/waffle-jest/src/matchers/calledOnContract/calledOnContract.ts b/waffle-jest/src/matchers/calledOnContract/calledOnContract.ts
new file mode 100644
index 000000000..944c1baad
--- /dev/null
+++ b/waffle-jest/src/matchers/calledOnContract/calledOnContract.ts
@@ -0,0 +1,32 @@
+import {Contract} from 'ethers';
+import {
+ validateContract,
+ validateMockProvider,
+ validateFnName
+} from './calledOnContractValidators';
+
+export function toBeCalledOnContract(fnName: string, contract: Contract) {
+ validateContract(contract);
+ validateMockProvider(contract.provider);
+ if (fnName !== undefined) {
+ validateFnName(fnName, contract);
+ }
+
+ const fnSighash = contract.interface.getSighash(fnName);
+ const {callHistory} = contract.provider;
+
+ const pass = callHistory.some(
+ (call) =>
+ call.address === contract.address && call.data.startsWith(fnSighash)
+ );
+
+ return pass
+ ? {
+ pass: true,
+ message: () => 'Expected contract function NOT to be called'
+ }
+ : {
+ pass: false,
+ message: () => 'Expected contract function to be called'
+ };
+}
diff --git a/waffle-jest/src/matchers/calledOnContract/calledOnContractValidators.ts b/waffle-jest/src/matchers/calledOnContract/calledOnContractValidators.ts
new file mode 100644
index 000000000..79839ec5f
--- /dev/null
+++ b/waffle-jest/src/matchers/calledOnContract/calledOnContractValidators.ts
@@ -0,0 +1,44 @@
+import {Contract} from 'ethers';
+import {MockProvider} from '@ethereum-waffle/provider';
+import {ProviderWithHistoryExpected} from './error';
+import {ensure} from './utils';
+
+export function validateContract(contract: any): asserts contract is Contract {
+ ensure(
+ contract instanceof Contract,
+ TypeError,
+ 'argument must be a contract'
+ );
+}
+
+export function validateMockProvider(
+ provider: any
+): asserts provider is MockProvider {
+ ensure(
+ !!provider.callHistory && provider.callHistory instanceof Array,
+ ProviderWithHistoryExpected
+ );
+}
+
+export function validateFnName(
+ fnName: any,
+ contract: Contract
+): asserts fnName is string {
+ ensure(
+ typeof fnName === 'string',
+ TypeError,
+ 'function name must be a string'
+ );
+ function isFunction(name: string) {
+ try {
+ return !!contract.interface.getFunction(name);
+ } catch (e) {
+ return false;
+ }
+ }
+ ensure(
+ isFunction(fnName),
+ TypeError,
+ 'function must exist in provided contract'
+ );
+}
diff --git a/waffle-jest/src/matchers/calledOnContract/calledOnContractWith.ts b/waffle-jest/src/matchers/calledOnContract/calledOnContractWith.ts
new file mode 100644
index 000000000..67b454911
--- /dev/null
+++ b/waffle-jest/src/matchers/calledOnContract/calledOnContractWith.ts
@@ -0,0 +1,32 @@
+import {Contract} from 'ethers';
+import {
+ validateContract,
+ validateMockProvider,
+ validateFnName
+} from './calledOnContractValidators';
+
+export function toBeCalledOnContractWith(
+ fnName: string,
+ contract: Contract,
+ parameters: any[]
+) {
+ validateContract(contract);
+ validateMockProvider(contract.provider);
+ validateFnName(fnName, contract);
+
+ const funCallData = contract.interface.encodeFunctionData(fnName, parameters);
+ const {callHistory} = contract.provider;
+ const pass = callHistory.some(
+ (call) => call.address === contract.address && call.data === funCallData
+ );
+
+ return pass
+ ? {
+ pass: true,
+ message: () => 'Expected contract function with parameters NOT to be called'
+ }
+ : {
+ pass: false,
+ message: () => 'Expected contract function with parameters to be called'
+ };
+}
diff --git a/waffle-jest/src/matchers/calledOnContract/error.ts b/waffle-jest/src/matchers/calledOnContract/error.ts
new file mode 100644
index 000000000..61b9424ef
--- /dev/null
+++ b/waffle-jest/src/matchers/calledOnContract/error.ts
@@ -0,0 +1,7 @@
+export class ProviderWithHistoryExpected extends Error {
+ constructor() {
+ super(
+ 'calledOnContract matcher requires provider that support call history'
+ );
+ }
+}
diff --git a/waffle-jest/src/matchers/calledOnContract/utils.ts b/waffle-jest/src/matchers/calledOnContract/utils.ts
new file mode 100644
index 000000000..8d9f01e82
--- /dev/null
+++ b/waffle-jest/src/matchers/calledOnContract/utils.ts
@@ -0,0 +1,13 @@
+interface ErrorConstructor {
+ new (...args: T): Error;
+}
+
+export function ensure(
+ condition: boolean,
+ ErrorToThrow: ErrorConstructor,
+ ...errorArgs: T
+): asserts condition {
+ if (!condition) {
+ throw new ErrorToThrow(...errorArgs);
+ }
+}
diff --git a/waffle-jest/src/matchers/toBeProperAddress.ts b/waffle-jest/src/matchers/toBeProperAddress.ts
new file mode 100644
index 000000000..513c6d32f
--- /dev/null
+++ b/waffle-jest/src/matchers/toBeProperAddress.ts
@@ -0,0 +1,12 @@
+export function toBeProperAddress(received: string) {
+ const pass = /^0x[0-9-a-fA-F]{40}$/.test(received);
+ return pass
+ ? {
+ pass: true,
+ message: () => `Expected "${received}" not to be a proper address`
+ }
+ : {
+ pass: false,
+ message: () => `Expected "${received}" to be a proper address`
+ };
+}
diff --git a/waffle-jest/src/matchers/toBeProperHex.ts b/waffle-jest/src/matchers/toBeProperHex.ts
new file mode 100644
index 000000000..e27902a87
--- /dev/null
+++ b/waffle-jest/src/matchers/toBeProperHex.ts
@@ -0,0 +1,13 @@
+export function toBeProperHex(received: string, length: number) {
+ const regexp = new RegExp(`^0x[0-9-a-fA-F]{${length}}$`);
+ const pass = regexp.test(received);
+ return pass
+ ? {
+ pass: true,
+ message: () => `Expected "${received}" not to be a proper hex of length ${length}, but it was`
+ }
+ : {
+ pass: false,
+ message: () => `Expected "${received}" to be a proper hex of length ${length}`
+ };
+}
diff --git a/waffle-jest/src/matchers/toBeProperPrivateKey.ts b/waffle-jest/src/matchers/toBeProperPrivateKey.ts
new file mode 100644
index 000000000..adecc00ce
--- /dev/null
+++ b/waffle-jest/src/matchers/toBeProperPrivateKey.ts
@@ -0,0 +1,12 @@
+export function toBeProperPrivateKey(received: string) {
+ const pass = /^0x[0-9-a-fA-F]{64}$/.test(received);
+ return pass
+ ? {
+ pass: true,
+ message: () => `Expected "${received}" not to be a proper private key`
+ }
+ : {
+ pass: false,
+ message: () => `Expected "${received}" to be a proper private key`
+ };
+}
diff --git a/waffle-jest/src/matchers/toBeReverted.ts b/waffle-jest/src/matchers/toBeReverted.ts
new file mode 100644
index 000000000..bdc07fdf2
--- /dev/null
+++ b/waffle-jest/src/matchers/toBeReverted.ts
@@ -0,0 +1,30 @@
+export async function toBeReverted(promise: Promise) {
+ try {
+ await promise;
+ return {
+ pass: false,
+ message: () => 'Expected transaction to be reverted'
+ };
+ } catch (error) {
+ const message =
+ error instanceof Object && 'message' in error ? error.message : JSON.stringify(error);
+
+ const isReverted = message.search('revert') >= 0;
+ const isThrown = message.search('invalid opcode') >= 0;
+ const isError = message.search('code=') >= 0;
+
+ const pass = isReverted || isThrown || isError;
+ if (pass) {
+ return {
+ pass: true,
+ message: () => 'Expected transaction NOT to be reverted'
+ };
+ } else {
+ return {
+ pass: false,
+ message: () =>
+ `Expected transaction to be reverted, but other exception was thrown: ${error}`
+ };
+ }
+ }
+}
diff --git a/waffle-jest/src/matchers/toBeRevertedWith.ts b/waffle-jest/src/matchers/toBeRevertedWith.ts
new file mode 100644
index 000000000..ebb6c42f4
--- /dev/null
+++ b/waffle-jest/src/matchers/toBeRevertedWith.ts
@@ -0,0 +1,32 @@
+export async function toBeRevertedWith(
+ promise: Promise,
+ revertReason: string
+) {
+ try {
+ await promise;
+ return {
+ pass: false,
+ message: () => 'Expected transaction to be reverted'
+ };
+ } catch (error) {
+ const message = error instanceof Object && 'message' in error ? error.message : JSON.stringify(error);
+
+ const isReverted = message.search('revert') >= 0 && message.search(revertReason) >= 0;
+ const isThrown = message.search('invalid opcode') >= 0 && revertReason === '';
+ const isError = message.search('code=') >= 0;
+
+ const pass = isReverted || isThrown || isError;
+ if (pass) {
+ return {
+ pass: true,
+ message: () => `Expected transaction NOT to be reverted with ${revertReason}`
+ };
+ } else {
+ return {
+ pass: false,
+ message: () =>
+ `Expected transaction to be reverted with ${revertReason}, but other exception was thrown: ${error}`
+ };
+ }
+ }
+}
diff --git a/waffle-jest/src/matchers/toChangeBalance.ts b/waffle-jest/src/matchers/toChangeBalance.ts
new file mode 100644
index 000000000..904d6a0f9
--- /dev/null
+++ b/waffle-jest/src/matchers/toChangeBalance.ts
@@ -0,0 +1,37 @@
+import {Wallet, BigNumber} from 'ethers';
+import {Numberish} from '../types';
+
+export async function toChangeBalance(
+ transactionCallback: () => Promise,
+ wallet: Wallet,
+ balanceChange: Numberish
+) {
+ if (typeof transactionCallback !== 'function') {
+ throw new Error(
+ 'Expect subject should be a callback returning a Promise\n' +
+ 'e.g.: await expect(() => wallet.send({to: \'0xb\', value: 200})).toChangeBalance(\'0xa\', -200)'
+ );
+ }
+
+ const balanceBefore = await wallet.getBalance();
+ await transactionCallback();
+ const balanceAfter = await wallet.getBalance();
+
+ const actualChange = balanceAfter.sub(balanceBefore);
+ const pass = actualChange.eq(BigNumber.from(balanceChange));
+
+ if (pass) {
+ return {
+ pass: true,
+ message: () =>
+ `Expected "${wallet.address}" to not change balance by ${balanceChange} wei,`
+ };
+ } else {
+ return {
+ pass: false,
+ message: () =>
+ `Expected "${wallet.address}" to change balance by ${balanceChange} wei, ` +
+ `but it has changed by ${actualChange} wei`
+ };
+ }
+}
diff --git a/waffle-jest/src/matchers/toChangeBalances.ts b/waffle-jest/src/matchers/toChangeBalances.ts
new file mode 100644
index 000000000..845285bea
--- /dev/null
+++ b/waffle-jest/src/matchers/toChangeBalances.ts
@@ -0,0 +1,48 @@
+import {Wallet, BigNumber} from 'ethers';
+import {Numberish} from '../types';
+
+export async function toChangeBalances(
+ transactionCallback: () => Promise,
+ wallets: Wallet[],
+ balanceChanges: Numberish[]
+) {
+ if (typeof transactionCallback !== 'function') {
+ /* eslint-disable max-len */
+ throw new Error(
+ 'Expect subject should be a callback returning the Promise' +
+ 'e.g.: await expect(() => wallet.send({to: \'0xb\', value: 200})).to.changeBalances([\'0xa\', \'0xb\'], [-200, 200])'
+ );
+ /* eslint-enable max-len */
+ }
+
+ const balancesBefore = await Promise.all(
+ wallets.map((wallet) => wallet.getBalance())
+ );
+ await transactionCallback();
+ const balancesAfter = await Promise.all(
+ wallets.map((wallet) => wallet.getBalance())
+ );
+
+ const actualChanges = balancesAfter.map((balance, ind) =>
+ balance.sub(balancesBefore[ind])
+ );
+ const pass = actualChanges.every((change, ind) =>
+ change.eq(BigNumber.from(balanceChanges[ind]))
+ );
+
+ const walletsAddresses = wallets.map((wallet) => wallet.address);
+ if (pass) {
+ return {
+ pass: true,
+ message: () =>
+ `Expected ${walletsAddresses} to not change balance by ${balanceChanges} wei,`
+ };
+ } else {
+ return {
+ pass: false,
+ message: () =>
+ `Expected ${walletsAddresses} to change balance by ${balanceChanges} wei, ` +
+ `but it has changed by ${actualChanges} wei`
+ };
+ }
+}
diff --git a/waffle-jest/src/matchers/toHaveEmitted/toHaveEmitted.ts b/waffle-jest/src/matchers/toHaveEmitted/toHaveEmitted.ts
new file mode 100644
index 000000000..973615d26
--- /dev/null
+++ b/waffle-jest/src/matchers/toHaveEmitted/toHaveEmitted.ts
@@ -0,0 +1,47 @@
+import {Contract, Transaction, utils} from 'ethers';
+import {filterLogsWithTopics} from './utils';
+
+export async function toHaveEmitted(
+ transaction: Transaction,
+ contract: Contract,
+ eventName: string
+) {
+ const receipt = await contract.provider.getTransactionReceipt(
+ transaction.hash as string
+ );
+
+ let eventFragment: utils.EventFragment | undefined;
+ try {
+ eventFragment = contract.interface.getEvent(eventName);
+ } catch (e) {
+ // ignore error
+ }
+
+ // check if event is in the contract ABI
+ if (eventFragment === undefined) {
+ return {
+ pass: false,
+ message: () =>
+ `Expected event "${eventName}" to be emitted, but it doesn't exist in the contract. ` +
+ 'Please make sure you\'ve compiled its latest version before running the test.'
+ };
+ }
+
+ const topic = contract.interface.getEventTopic(eventFragment);
+ const logs = filterLogsWithTopics(receipt.logs, topic, contract.address);
+ const pass = logs.length > 0;
+
+ if (pass) {
+ return {
+ pass: true,
+ message: () =>
+ `Expected event "${eventName}" NOT to be emitted, but it was`
+ };
+ } else {
+ return {
+ pass: false,
+ message: () =>
+ `Expected event "${eventName}" to be emitted, but it wasn't`
+ };
+ }
+}
diff --git a/waffle-jest/src/matchers/toHaveEmitted/toHaveEmittedWith.ts b/waffle-jest/src/matchers/toHaveEmitted/toHaveEmittedWith.ts
new file mode 100644
index 000000000..dd52a0c69
--- /dev/null
+++ b/waffle-jest/src/matchers/toHaveEmitted/toHaveEmittedWith.ts
@@ -0,0 +1,78 @@
+import {Contract, Transaction, utils} from 'ethers';
+import diff from 'jest-diff';
+
+import {filterLogsWithTopics, compareArgs} from './utils';
+
+export async function toHaveEmittedWith(
+ transaction: Transaction,
+ contract: Contract,
+ eventName: string,
+ expectedArgs: unknown[]
+): Promise<{ pass: boolean; message: () => string }> {
+ const receipt = await contract.provider.getTransactionReceipt(
+ transaction.hash as string
+ );
+
+ let eventFragment: utils.EventFragment | undefined;
+ try {
+ eventFragment = contract.interface.getEvent(eventName);
+ } catch (e) {
+ // ignore error
+ }
+
+ // check if event is in the contract ABI
+ if (eventFragment === undefined) {
+ return {
+ pass: false,
+ message: () =>
+ `Expected event "${eventName}" to be emitted, but it doesn't exist in the contract. ` +
+ 'Please make sure you\'ve compiled its latest version before running the test.'
+ };
+ }
+
+ const topic = contract.interface.getEventTopic(eventFragment);
+ const logs = filterLogsWithTopics(receipt.logs, topic, contract.address);
+
+ if (logs.length === 0) {
+ return {
+ pass: false,
+ message: () =>
+ `Expected event "${eventName}" to be emitted, but it wasn't`
+ };
+ }
+
+ const results = [];
+ for (const log of logs) {
+ try {
+ const actualArgs = contract.interface.parseLog(log).args;
+ const pass = compareArgs(actualArgs, expectedArgs);
+ results.push({
+ pass,
+ actualArgs,
+ expectedArgs
+ });
+ } catch {
+ results.push({pass: false});
+ }
+ }
+
+ // return early if there is a match for the event we are looking for
+ for (const res of results) {
+ if (res.pass === true) {
+ return {
+ pass: true,
+ message: () =>
+ `Expected specified args to NOT be emitted in any of ${logs.length} emitted "${eventName}" events`
+ };
+ }
+ }
+
+ // no match found, so we will return the last negative result w/ a rich diff
+ const lastResult = results[results.length - 1];
+ return {
+ pass: false,
+ message: () =>
+ diff(lastResult.expectedArgs, lastResult.actualArgs) ||
+ 'The expected args do not match the received args. No diff is available.'
+ };
+}
diff --git a/waffle-jest/src/matchers/toHaveEmitted/utils.ts b/waffle-jest/src/matchers/toHaveEmitted/utils.ts
new file mode 100644
index 000000000..d220263cc
--- /dev/null
+++ b/waffle-jest/src/matchers/toHaveEmitted/utils.ts
@@ -0,0 +1,52 @@
+import {BigNumber, providers} from 'ethers';
+
+export function filterLogsWithTopics(
+ logs: providers.Log[],
+ topic: any,
+ contractAddress: string
+) {
+ return logs
+ .filter((log) => log.topics.includes(topic))
+ .filter(
+ (log) =>
+ log.address &&
+ log.address.toLowerCase() === contractAddress.toLowerCase()
+ );
+}
+
+export function compareArgs(actual: any, expected: any): boolean {
+ // if one is an array but the other is not, then fail
+ if (
+ (Array.isArray(actual) && !Array.isArray(expected)) ||
+ (!Array.isArray(actual) && Array.isArray(expected))
+ ) {
+ return false;
+ }
+
+ // if they are both arrays recurse
+ if (Array.isArray(actual) && Array.isArray(expected)) {
+ if (actual.length !== expected.length) {
+ return false;
+ }
+
+ for (let i = 0; i < actual.length; i++) {
+ const result = compareArgs(actual[i], expected[i]);
+ if (result === false) return false;
+ }
+ return true;
+ }
+
+ // if one of them is a string, then do a string compare
+ const isString = (x: any) => typeof x === 'string';
+ if (isString(actual) || isString(expected)) {
+ return actual.toString() === expected.toString();
+ }
+
+ // compare BigNumbers
+ if (actual instanceof BigNumber && expected instanceof BigNumber) {
+ return actual.eq(expected);
+ }
+
+ // otherwise direct compare
+ return actual === expected;
+}
diff --git a/waffle-jest/src/types.d.ts b/waffle-jest/src/types.d.ts
new file mode 100644
index 000000000..6287d8076
--- /dev/null
+++ b/waffle-jest/src/types.d.ts
@@ -0,0 +1,43 @@
+import {BigNumber, Wallet, Contract} from 'ethers'; // eslint-disable-line @typescript-eslint/no-unused-vars
+
+export type Numberish = number | string | BigNumber;
+
+declare global {
+ namespace jest {
+ interface Matchers {
+ // misc matchers
+ toBeProperAddress(): R;
+ toBeProperPrivateKey(): R;
+ toBeProperHex(length: number): R;
+
+ // BigNumber matchers
+ toEqBN(value: Numberish): R;
+ toBeGtBN(value: Numberish): R;
+ toBeLtBN(value: Numberish): R;
+ toBeGteBN(value: Numberish): R;
+ toBeLteBN(value: Numberish): R;
+
+ // balance matchers
+ toChangeBalance(wallet: Wallet, balanceChange: Numberish): R;
+ toChangeBalances(wallets: Wallet[], balanceChanges: Numberish[]): R;
+
+ // revert matchers
+ toBeReverted(): R;
+ toBeRevertedWith(revertReason: string): R;
+
+ // emit matcher
+ toHaveEmitted(contract: Contract, eventName: string): R;
+ toHaveEmittedWith(
+ contract: Contract,
+ eventName: string,
+ expectedArgs: any[]
+ ): R;
+
+ // calledOnContract matchers
+ toBeCalledOnContract(contract: Contract): R;
+ toBeCalledOnContractWith(contract: Contract, parameters: any[]): R;
+ }
+ }
+}
+
+export {};
diff --git a/waffle-jest/test/contracts/Calls.ts b/waffle-jest/test/contracts/Calls.ts
new file mode 100644
index 000000000..39adfdf71
--- /dev/null
+++ b/waffle-jest/test/contracts/Calls.ts
@@ -0,0 +1,20 @@
+export const CALLS_SOURCE = `
+ pragma solidity ^0.6.0;
+
+ contract Calls {
+ function callWithoutParameter() pure public {}
+
+ function callWithParameter(uint param) public {}
+
+ function callWithParameters(uint param1, uint param2) public {}
+ }
+`;
+
+export const CALLS_ABI = [
+ 'function callWithoutParameter() public',
+ 'function callWithParameter(uint param) public',
+ 'function callWithParameters(uint param1, uint param2) public'
+];
+
+// eslint-disable-next-line max-len
+export const CALLS_BYTECODE = '608060405234801561001057600080fd5b5060e88061001f6000396000f3fe6080604052348015600f57600080fd5b5060043610603c5760003560e01c8063270f7979146041578063586a7e23146049578063c3e86c6614607e575b600080fd5b604760a9565b005b607c60048036036040811015605d57600080fd5b81019080803590602001909291908035906020019092919050505060ab565b005b60a760048036036020811015609257600080fd5b810190808035906020019092919050505060af565b005b565b5050565b5056fea2646970667358221220042e49619d2f4371b311b491637d1c6a9c9ad3c55696a6a77435579e3f1baf6b64736f6c63430006000033';
diff --git a/waffle-jest/test/contracts/Events.ts b/waffle-jest/test/contracts/Events.ts
new file mode 100644
index 000000000..eeee0a30f
--- /dev/null
+++ b/waffle-jest/test/contracts/Events.ts
@@ -0,0 +1,61 @@
+export const EVENTS_SOURCE = `
+ pragma solidity ^0.6.0;
+
+ contract Events {
+ event One(uint value, string msg, bytes32 encoded);
+ event Two(uint indexed value, string msg);
+ event Arrays(uint256[3] value, bytes32[2] encoded);
+
+ function emitOne() public {
+ emit One(1, "One", 0x00cFBbaF7DDB3a1476767101c12a0162e241fbAD2a0162e2410cFBbaF7162123);
+ }
+
+ function emitOneMultipleTimes() public {
+ emit One(1, "One", 0x00cFBbaF7DDB3a1476767101c12a0162e241fbAD2a0162e2410cFBbaF7162123);
+ emit One(1, "One", 0x00cFBbaF7DDB3a1476767101c12a0162e241fbAD2a0162e2410cFBbaF7162123);
+ emit One(1, "DifferentKindOfOne", 0x0000000000000000000000000000000000000000000000000000000000000001);
+ }
+
+ function emitTwo() public {
+ emit Two(2, "Two");
+ }
+
+ function emitBoth() public {
+ emit One(1, "One", 0x0000000000000000000000000000000000000000000000000000000000000001);
+ emit Two(2, "Two");
+ }
+
+ function emitArrays() public {
+ emit Arrays(
+ [
+ uint256(1),
+ uint256(2),
+ uint256(3)
+ ],
+ [
+ bytes32(0x00cFBbaF7DDB3a1476767101c12a0162e241fbAD2a0162e2410cFBbaF7162123),
+ bytes32(0x00cFBbaF7DDB3a1476767101c12a0162e241fbAD2a0162e2410cFBbaF7162124)
+ ]
+ );
+ }
+
+ function doNotEmit() pure public {
+ }
+
+ }
+`;
+
+export const EVENTS_ABI = [
+ 'event One(uint value, string msg, bytes32 encoded)',
+ 'event Two(uint indexed value, string msg)',
+ 'event Arrays(uint256[3] value, bytes32[2] encoded)',
+ 'function emitOne() public',
+ 'function emitOneMultipleTimes() public',
+ 'function emitTwo() public',
+ 'function emitBoth() public',
+ 'function emitArrays() public',
+ 'function doNotEmit() pure public'
+];
+
+// eslint-disable-next-line max-len
+export const EVENTS_BYTECODE = '608060405234801561001057600080fd5b50610586806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806334c10115146100675780633f0e64ba14610071578063a35a3a0d1461007b578063b2f9983814610085578063d5eacee01461008f578063db6cdf6814610099575b600080fd5b61006f6100a3565b005b61007961010f565b005b6100836101ac565b005b61008d6102b2565b005b610097610466565b005b6100a161054e565b005b60027f726d8d77432fef0b8999b8e1f5ed6d11c42c0a861c61228b03e767ad3c43d0df6040518080602001828103825260038152602001807f54776f000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390a2565b7f824e7918d5bcff68837d677d05258e17ec7b1bd7b488aa5e3bd2d5cbefa9e04c60017ecfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf716212360405180838152602001806020018360001b8152602001828103825260038152602001807f4f6e650000000000000000000000000000000000000000000000000000000000815250602001935050505060405180910390a1565b7f35cf379c46b4950eedc35bc96d30e9fe7480e2422431c50ea5c4b211ee6b1b8d60405180606001604052806001815260200160028152602001600381525060405180604001604052807ecfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf716212360001b81526020017ecfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf716212460001b8152506040518083600360200280838360005b8381101561026f578082015181840152602081019050610254565b5050505090500182600260200280838360005b8381101561029d578082015181840152602081019050610282565b505050509050019250505060405180910390a1565b7f824e7918d5bcff68837d677d05258e17ec7b1bd7b488aa5e3bd2d5cbefa9e04c60017ecfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf716212360405180838152602001806020018360001b8152602001828103825260038152602001807f4f6e650000000000000000000000000000000000000000000000000000000000815250602001935050505060405180910390a17f824e7918d5bcff68837d677d05258e17ec7b1bd7b488aa5e3bd2d5cbefa9e04c60017ecfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf716212360405180838152602001806020018360001b8152602001828103825260038152602001807f4f6e650000000000000000000000000000000000000000000000000000000000815250602001935050505060405180910390a17f824e7918d5bcff68837d677d05258e17ec7b1bd7b488aa5e3bd2d5cbefa9e04c60018060405180838152602001806020018360001b8152602001828103825260128152602001807f446966666572656e744b696e644f664f6e650000000000000000000000000000815250602001935050505060405180910390a1565b7f824e7918d5bcff68837d677d05258e17ec7b1bd7b488aa5e3bd2d5cbefa9e04c60018060405180838152602001806020018360001b8152602001828103825260038152602001807f4f6e650000000000000000000000000000000000000000000000000000000000815250602001935050505060405180910390a160027f726d8d77432fef0b8999b8e1f5ed6d11c42c0a861c61228b03e767ad3c43d0df6040518080602001828103825260038152602001807f54776f000000000000000000000000000000000000000000000000000000000081525060200191505060405180910390a2565b56fea2646970667358221220e505630e9a894ec6127d6e69224f74fa696a208c9a5fa71ef29f18bd2303fb9e64736f6c63430006000033';
diff --git a/waffle-jest/test/contracts/Matchers.ts b/waffle-jest/test/contracts/Matchers.ts
new file mode 100644
index 000000000..d15dfa391
--- /dev/null
+++ b/waffle-jest/test/contracts/Matchers.ts
@@ -0,0 +1,60 @@
+export const MATCHERS_SOURCE = `
+ pragma solidity ^0.6.0;
+
+ contract Matchers {
+ uint counter;
+
+ function doThrowAndModify() public {
+ counter += 1;
+ assert(false);
+ }
+
+ function doRevertAndModify() public {
+ counter += 1;
+ revert("Revert cause");
+ }
+
+ function doNothing() public pure {
+
+ }
+
+ function doThrow() public pure {
+ assert(false);
+ }
+
+ function doRevert() pure public {
+ revert("Revert cause");
+ }
+
+ function doAssertFail() pure public {
+ assert(false);
+ }
+
+ function doAssertSuccess() pure public {
+ assert(true);
+ }
+
+ function doRequireFail() pure public {
+ require(false, "Require cause");
+ }
+
+ function doRequireSuccess() pure public {
+ require(true, "Never to be seen");
+ }
+ }
+`;
+
+export const MATCHERS_ABI = [
+ 'function doThrowAndModify() public',
+ 'function doRevertAndModify() public',
+ 'function doNothing() public pure',
+ 'function doThrow() public pure',
+ 'function doRevert() pure public',
+ 'function doAssertFail() pure public',
+ 'function doAssertSuccess() pure public',
+ 'function doRequireFail() pure public',
+ 'function doRequireSuccess() pure public'
+];
+
+// eslint-disable-next-line max-len
+export const MATCHERS_BYTECODE = '608060405234801561001057600080fd5b5061033a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063afc874d211610066578063afc874d2146100c0578063be3e2e60146100ca578063eacf8a57146100d4578063f2c067fb146100de578063fff78f9c146100e857610093565b806301236db4146100985780632f576f20146100a25780634df37910146100ac578063841caf38146100b6575b600080fd5b6100a06100f2565b005b6100aa610170565b005b6100b4610172565b005b6100be61017c565b005b6100c8610196565b005b6100d2610204565b005b6100dc61027a565b005b6100e66102f0565b005b6100f06102fa565b005b600160008082825401925050819055506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f526576657274206361757365000000000000000000000000000000000000000081525060200191505060405180910390fd5b565b600061017a57fe5b565b60016000808282540192505081905550600061019457fe5b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f526576657274206361757365000000000000000000000000000000000000000081525060200191505060405180910390fd5b6001610278576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4e6576657220746f206265207365656e0000000000000000000000000000000081525060200191505060405180910390fd5b565b60006102ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f526571756972652063617573650000000000000000000000000000000000000081525060200191505060405180910390fd5b565b60016102f857fe5b565b600061030257fe5b56fea264697066735822122085315a6c737bbd54e06dc03186045ca03f8cc4fddcf577c8d7da8ffdb62de70364736f6c63430006000033';
diff --git a/waffle-jest/test/matchers/__snapshots__/eventsWithArgs.test.ts.snap b/waffle-jest/test/matchers/__snapshots__/eventsWithArgs.test.ts.snap
new file mode 100644
index 000000000..4f4185726
--- /dev/null
+++ b/waffle-jest/test/matchers/__snapshots__/eventsWithArgs.test.ts.snap
@@ -0,0 +1,150 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`INTEGRATION: Events Emitted With Args arrays BigNumber received is 1, not 0 1`] = `
+"[32m- Expected[39m
+[31m+ Received[39m
+
+[2m Array [[22m
+[2m Array [[22m
+[2m BigNumber {[22m
+[32m- \\"_hex\\": \\"0x00\\",[39m
+[31m+ \\"_hex\\": \\"0x01\\",[39m
+[2m \\"_isBigNumber\\": true,[22m
+[2m },[22m
+[2m BigNumber {[22m
+[2m \\"_hex\\": \\"0x02\\",[22m
+[2m \\"_isBigNumber\\": true,[22m
+[2m },[22m
+[2m BigNumber {[22m
+[2m \\"_hex\\": \\"0x03\\",[22m
+[2m \\"_isBigNumber\\": true,[22m
+[2m },[22m
+[2m ],[22m
+[2m Array [[22m
+[2m \\"0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123\\",[22m
+[2m \\"0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162124\\",[22m
+[2m ],[22m
+[2m ][22m"
+`;
+
+exports[`INTEGRATION: Events Emitted With Args arrays bytes32 ends in different value 1`] = `
+"[32m- Expected[39m
+[31m+ Received[39m
+
+[2m Array [[22m
+[2m Array [[22m
+[2m BigNumber {[22m
+[2m \\"_hex\\": \\"0x01\\",[22m
+[2m \\"_isBigNumber\\": true,[22m
+[2m },[22m
+[2m BigNumber {[22m
+[2m \\"_hex\\": \\"0x02\\",[22m
+[2m \\"_isBigNumber\\": true,[22m
+[2m },[22m
+[2m BigNumber {[22m
+[2m \\"_hex\\": \\"0x03\\",[22m
+[2m \\"_isBigNumber\\": true,[22m
+[2m },[22m
+[2m ],[22m
+[2m Array [[22m
+[32m- \\"0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162121\\",[39m
+[31m+ \\"0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123\\",[39m
+[2m \\"0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162124\\",[22m
+[2m ],[22m
+[2m ][22m"
+`;
+
+exports[`INTEGRATION: Events Emitted With Args multiples same event with different args (not found) 1`] = `
+"[32m- Expected[39m
+[31m+ Received[39m
+
+[2m Array [[22m
+[32m- 1,[39m
+[32m- 2,[39m
+[32m- 3,[39m
+[32m- 4,[39m
+[31m+ BigNumber {[39m
+[31m+ \\"_hex\\": \\"0x01\\",[39m
+[31m+ \\"_isBigNumber\\": true,[39m
+[31m+ },[39m
+[31m+ \\"DifferentKindOfOne\\",[39m
+[31m+ \\"0x0000000000000000000000000000000000000000000000000000000000000001\\",[39m
+[2m ][22m"
+`;
+
+exports[`INTEGRATION: Events Emitted With Args simple not enough args 1`] = `
+"[32m- Expected[39m
+[31m+ Received[39m
+
+[2m Array [[22m
+[2m BigNumber {[22m
+[2m \\"_hex\\": \\"0x01\\",[22m
+[2m \\"_isBigNumber\\": true,[22m
+[2m },[22m
+[31m+ \\"One\\",[39m
+[31m+ \\"0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123\\",[39m
+[2m ][22m"
+`;
+
+exports[`INTEGRATION: Events Emitted With Args simple one different arg (integer) 1`] = `
+"[32m- Expected[39m
+[31m+ Received[39m
+
+[2m Array [[22m
+[32m- 2,[39m
+[31m+ BigNumber {[39m
+[31m+ \\"_hex\\": \\"0x01\\",[39m
+[31m+ \\"_isBigNumber\\": true,[39m
+[31m+ },[39m
+[2m \\"One\\",[22m
+[2m \\"0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123\\",[22m
+[2m ][22m"
+`;
+
+exports[`INTEGRATION: Events Emitted With Args simple one different arg (string address) 1`] = `
+"[32m- Expected[39m
+[31m+ Received[39m
+
+[2m Array [[22m
+[2m BigNumber {[22m
+[2m \\"_hex\\": \\"0x01\\",[22m
+[2m \\"_isBigNumber\\": true,[22m
+[2m },[22m
+[2m \\"One\\",[22m
+[32m- \\"0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162124\\",[39m
+[31m+ \\"0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123\\",[39m
+[2m ][22m"
+`;
+
+exports[`INTEGRATION: Events Emitted With Args simple one different arg (string number) 1`] = `
+"[32m- Expected[39m
+[31m+ Received[39m
+
+[2m Array [[22m
+[2m BigNumber {[22m
+[2m \\"_hex\\": \\"0x01\\",[22m
+[2m \\"_isBigNumber\\": true,[22m
+[2m },[22m
+[32m- \\"Two\\",[39m
+[31m+ \\"One\\",[39m
+[2m \\"0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123\\",[22m
+[2m ][22m"
+`;
+
+exports[`INTEGRATION: Events Emitted With Args simple too many args 1`] = `
+"[32m- Expected[39m
+[31m+ Received[39m
+
+[2m Array [[22m
+[32m- 1,[39m
+[32m- 2,[39m
+[32m- 3,[39m
+[32m- 4,[39m
+[31m+ BigNumber {[39m
+[31m+ \\"_hex\\": \\"0x01\\",[39m
+[31m+ \\"_isBigNumber\\": true,[39m
+[31m+ },[39m
+[31m+ \\"One\\",[39m
+[31m+ \\"0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123\\",[39m
+[2m ][22m"
+`;
diff --git a/waffle-jest/test/matchers/balance.test.ts b/waffle-jest/test/matchers/balance.test.ts
new file mode 100644
index 000000000..6b6acd537
--- /dev/null
+++ b/waffle-jest/test/matchers/balance.test.ts
@@ -0,0 +1,173 @@
+import {MockProvider} from '@ethereum-waffle/provider';
+import {BigNumber} from 'ethers';
+
+describe('INTEGRATION: Balance observers', () => {
+ const [sender, receiver] = new MockProvider().getWallets();
+
+ describe('Change balance, one account', () => {
+ it('Should pass when expected balance change is passed as string and is equal to an actual', async () => {
+ await expect(() =>
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).toChangeBalance(sender, '-200');
+ });
+
+ it('Should pass when expected balance change is passed as int and is equal to an actual', async () => {
+ await expect(() =>
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).toChangeBalance(receiver, 200);
+ });
+
+ it('Should pass when expected balance change is passed as BN and is equal to an actual', async () => {
+ await expect(() =>
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).toChangeBalance(receiver, BigNumber.from(200));
+ });
+
+ it('Should pass on negative case when expected balance change is not equal to an actual', async () => {
+ await expect(() =>
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).not.toChangeBalance(receiver, BigNumber.from(300));
+ });
+
+ it('Should throw when expected balance change value was different from an actual', async () => {
+ await expect(
+ expect(() =>
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).toChangeBalance(sender, '-500')
+ ).rejects.toThrowError(
+ `Expected "${sender.address}" to change balance by -500 wei, but it has changed by -200 wei`
+ );
+ });
+
+ it('Should throw in negative case when expected balance change value was equal to an actual', async () => {
+ await expect(
+ expect(() =>
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).not.toChangeBalance(sender, '-200')
+ ).rejects.toThrowError(
+ `Expected "${sender.address}" to not change balance by -200 wei`
+ );
+ });
+
+ it('Should throw when not a callback is passed to expect', async () => {
+ await expect(() =>
+ expect(1).toChangeBalance(sender, '-200')
+ ).rejects.toThrowError(
+ 'Expect subject should be a callback returning a Promise\n' +
+ 'e.g.: await expect(() => wallet.send({to: \'0xb\', value: 200})).toChangeBalance(\'0xa\', -200)'
+ );
+ });
+ });
+
+ describe('Change balance, multiple accounts', () => {
+ it('Should pass when all expected balance changes are equal to actual values', async () => {
+ await expect(() =>
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).toChangeBalances([sender, receiver], ['-200', 200]);
+ });
+
+ it('Should pass when negated and numbers don\'t match', async () => {
+ await expect(() =>
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).not.toChangeBalances([sender, receiver], [-201, 200]);
+ await expect(() =>
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).not.toChangeBalances([sender, receiver], [-200, 201]);
+ });
+
+ it('Should throw when expected balance change value was different from an actual for any wallet', async () => {
+ await expect(
+ expect(() =>
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).toChangeBalances([sender, receiver], [-200, 201])
+ ).rejects.toThrowError(
+ 'Expected 0x17ec8597ff92C3F44523bDc65BF0f1bE632917ff,0x63FC2aD3d021a4D7e64323529a55a9442C444dA0 ' +
+ 'to change balance by -200,201 wei, but it has changed by -200,200 wei'
+ );
+ await expect(
+ expect(() =>
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).toChangeBalances([sender, receiver], [-201, 200])
+ ).rejects.toThrowError(
+ 'Expected 0x17ec8597ff92C3F44523bDc65BF0f1bE632917ff,0x63FC2aD3d021a4D7e64323529a55a9442C444dA0 ' +
+ 'to change balance by -201,200 wei, but it has changed by -200,200 wei'
+ );
+ });
+
+ it('Should throw in negative case when expected balance changes value were equal to an actual', async () => {
+ await expect(
+ expect(() =>
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).not.toChangeBalances([sender, receiver], [-200, 200])
+ ).rejects.toThrowError(
+ 'Expected 0x17ec8597ff92C3F44523bDc65BF0f1bE632917ff,0x63FC2aD3d021a4D7e64323529a55a9442C444dA0 ' +
+ 'to not change balance by -200,200 wei'
+ );
+ });
+
+ it('Should throw when not a callback is passed to expect', async () => {
+ expect(() =>
+ expect(
+ sender.sendTransaction({
+ to: receiver.address,
+ gasPrice: 0,
+ value: 200
+ })
+ ).toChangeBalances([sender, receiver], ['-200', 200])
+ ).rejects.toThrowError(
+ /* eslint-disable max-len */
+ 'Expect subject should be a callback returning the Promise' +
+ 'e.g.: await expect(() => wallet.send({to: \'0xb\', value: 200})).to.changeBalances([\'0xa\', \'0xb\'], [-200, 200])'
+ /* eslint-enable max-len */
+ );
+ });
+ });
+});
diff --git a/waffle-jest/test/matchers/bigNumber.test.ts b/waffle-jest/test/matchers/bigNumber.test.ts
new file mode 100644
index 000000000..4a5e8753d
--- /dev/null
+++ b/waffle-jest/test/matchers/bigNumber.test.ts
@@ -0,0 +1,103 @@
+import {BigNumber} from 'ethers';
+
+describe('UNIT: BigNumber matchers', () => {
+ function checkAll(
+ actual: number,
+ expected: number,
+ test: (
+ actual: number | string | BigNumber,
+ expected: number | string | BigNumber
+ ) => void
+ ) {
+ test(actual, expected);
+ test(BigNumber.from(actual), expected);
+ test(BigNumber.from(actual), expected.toString());
+ test(BigNumber.from(actual), BigNumber.from(expected));
+ test(actual, BigNumber.from(expected));
+ test(actual.toString(), BigNumber.from(expected));
+ }
+
+ describe('equal', () => {
+ it('.toEqBN', () => {
+ checkAll(10, 10, (a, b) => expect(a).toEqBN(b));
+ });
+
+ it('.not.toEqBN', () => {
+ checkAll(10, 11, (a, b) => expect(a).not.toEqBN(b));
+ });
+
+ it('throws proper message on error', () => {
+ expect(() => expect(BigNumber.from(10)).toEqBN(11)).toThrowError(
+ 'Expected "10" to be equal 11'
+ );
+ });
+ });
+
+ describe('greater than', () => {
+ it('.toBeGtBN', () => {
+ checkAll(10, 9, (a, b) => expect(a).toBeGtBN(b));
+ });
+
+ it('.not.toBeGtBN', () => {
+ checkAll(10, 10, (a, b) => expect(a).not.toBeGtBN(b));
+ checkAll(10, 11, (a, b) => expect(a).not.toBeGtBN(b));
+ });
+
+ it('throws proper message on error', () => {
+ expect(() => expect(BigNumber.from(10)).toBeGtBN(11)).toThrowError(
+ 'Expected "10" to be greater than 11'
+ );
+ });
+ });
+
+ describe('less than', () => {
+ it('.toBeLtBN', () => {
+ checkAll(10, 11, (a, b) => expect(a).toBeLtBN(b));
+ });
+
+ it('.not.to.be.lt', () => {
+ checkAll(10, 10, (a, b) => expect(a).not.toBeLtBN(b));
+ checkAll(10, 9, (a, b) => expect(a).not.toBeLtBN(b));
+ });
+
+ it('throws proper message on error', () => {
+ expect(() => expect(BigNumber.from(11)).toBeLtBN(10)).toThrowError(
+ 'Expected "11" to be less than 10'
+ );
+ });
+ });
+
+ describe('greater than or equal', () => {
+ it('.toBeGteBN', () => {
+ checkAll(10, 10, (a, b) => expect(a).toBeGteBN(b));
+ checkAll(10, 9, (a, b) => expect(a).toBeGteBN(b));
+ });
+
+ it('.not.toBeGteBN', () => {
+ checkAll(10, 11, (a, b) => expect(a).not.toBeGteBN(b));
+ });
+
+ it('throws proper message on error', () => {
+ expect(() => expect(BigNumber.from(10)).toBeGteBN(11)).toThrowError(
+ 'Expected "10" to be greater than or equal 11'
+ );
+ });
+ });
+
+ describe('less than or equal', () => {
+ it('.toBeLteBN', () => {
+ checkAll(10, 10, (a, b) => expect(a).toBeLteBN(b));
+ checkAll(10, 11, (a, b) => expect(a).toBeLteBN(b));
+ });
+
+ it('.not.toBeLteBN', () => {
+ checkAll(10, 9, (a, b) => expect(a).not.toBeLteBN(b));
+ });
+
+ it('throws proper message on error', () => {
+ expect(() => expect(BigNumber.from(11)).toBeLteBN(10)).toThrowError(
+ 'Expected "11" to be less than or equal 10'
+ );
+ });
+ });
+});
diff --git a/waffle-jest/test/matchers/calledOnContract/calledOnContract.test.ts b/waffle-jest/test/matchers/calledOnContract/calledOnContract.test.ts
new file mode 100644
index 000000000..6c86d9f30
--- /dev/null
+++ b/waffle-jest/test/matchers/calledOnContract/calledOnContract.test.ts
@@ -0,0 +1,55 @@
+import {MockProvider} from '@ethereum-waffle/provider';
+import {ContractFactory} from 'ethers';
+import {CALLS_ABI, CALLS_BYTECODE} from '../../contracts/Calls';
+
+async function setup() {
+ const provider = new MockProvider();
+ const [deployer] = provider.getWallets();
+
+ const factory = new ContractFactory(CALLS_ABI, CALLS_BYTECODE, deployer);
+ return {contract: await factory.deploy()};
+}
+
+describe('INTEGRATION: calledOnContract', () => {
+ it('checks that contract function was called', async () => {
+ const {contract} = await setup();
+ await contract.callWithoutParameter();
+
+ expect('callWithoutParameter').toBeCalledOnContract(contract);
+ });
+
+ it('throws assertion error when contract function was not called', async () => {
+ const {contract} = await setup();
+
+ expect(
+ () => expect('callWithoutParameter').toBeCalledOnContract(contract)
+ ).toThrowError('Expected contract function to be called');
+ });
+
+ it('checks that contract function was not called', async () => {
+ const {contract} = await setup();
+
+ expect('callWithoutParameter').not.toBeCalledOnContract(contract);
+ });
+
+ it('throws assertion error when contract function was called', async () => {
+ const {contract} = await setup();
+ await contract.callWithoutParameter();
+
+ expect(
+ () => expect('callWithoutParameter').not.toBeCalledOnContract(contract)
+ ).toThrowError('Expected contract function NOT to be called');
+ });
+
+ it(
+ 'checks that contract function was called on provided contract and not called on another deploy of this contract',
+ async () => {
+ const {contract} = await setup();
+ const {contract: secondDeployContract} = await setup();
+ await contract.callWithoutParameter();
+
+ expect('callWithoutParameter').toBeCalledOnContract(contract);
+ expect('callWithoutParameter').not.toBeCalledOnContract(secondDeployContract);
+ }
+ );
+});
diff --git a/waffle-jest/test/matchers/calledOnContract/calledOnContractValidators.test.ts b/waffle-jest/test/matchers/calledOnContract/calledOnContractValidators.test.ts
new file mode 100644
index 000000000..3613bfbfb
--- /dev/null
+++ b/waffle-jest/test/matchers/calledOnContract/calledOnContractValidators.test.ts
@@ -0,0 +1,77 @@
+import {MockProvider} from '@ethereum-waffle/provider';
+import {
+ constants,
+ Contract,
+ ContractFactory,
+ getDefaultProvider
+} from 'ethers';
+import {CALLS_ABI, CALLS_BYTECODE} from '../../contracts/Calls';
+import {validateMockProvider} from '../../../src/matchers/calledOnContract/calledOnContractValidators';
+
+async function setup() {
+ const provider = new MockProvider();
+ const [deployer] = provider.getWallets();
+
+ const factory = new ContractFactory(CALLS_ABI, CALLS_BYTECODE, deployer);
+ return {contract: await factory.deploy()};
+}
+
+describe('INTEGRATION: ethCalledValidators', () => {
+ it('throws type error when the argument is not a contract', async () => {
+ expect(
+ // eslint-disable-next-line @typescript-eslint/ban-ts-ignore
+ // @ts-ignore
+ () => expect('calledFunction').toBeCalledOnContract('invalidContract')
+ ).toThrowError('argument must be a contract');
+ });
+
+ it('throws type error when the argument is not a provider', async () => {
+ const contract = new Contract(
+ constants.AddressZero,
+ [],
+ getDefaultProvider()
+ );
+
+ expect(() =>
+ expect('calledFunction').toBeCalledOnContract(contract)
+ ).toThrowError(
+ 'calledOnContract matcher requires provider that support call history'
+ );
+ });
+
+ it('throws type error when the provided function is not a string', async () => {
+ const {contract} = await setup();
+
+ expect(() => expect(12).toBeCalledOnContract(contract)).toThrowError(
+ 'function name must be a string'
+ );
+ });
+
+ it('throws type error when the provided function is not in the contract', async () => {
+ const {contract} = await setup();
+
+ expect(() =>
+ expect('notExistingFunction').toBeCalledOnContract(contract)
+ ).toThrowError('function must exist in provided contract');
+ });
+});
+
+describe('UNIT: provider validation', () => {
+ it('No call history in provider', async () => {
+ expect(() => validateMockProvider(getDefaultProvider())).toThrowError(
+ 'calledOnContract matcher requires provider that support call history'
+ );
+ });
+
+ it('Incorrect type of call history in provider', async () => {
+ const provider = {callHistory: 'invalidType'};
+ expect(() => validateMockProvider(provider)).toThrowError(
+ 'calledOnContract matcher requires provider that support call history'
+ );
+ });
+
+ it('Correct type of call history in provider', () => {
+ const provider = {callHistory: []};
+ expect(() => validateMockProvider(provider)).not.toThrowError();
+ });
+});
diff --git a/waffle-jest/test/matchers/calledOnContract/calledOnContractWith.test.ts b/waffle-jest/test/matchers/calledOnContract/calledOnContractWith.test.ts
new file mode 100644
index 000000000..fd6cf136f
--- /dev/null
+++ b/waffle-jest/test/matchers/calledOnContract/calledOnContractWith.test.ts
@@ -0,0 +1,85 @@
+import {MockProvider} from '@ethereum-waffle/provider';
+import {ContractFactory} from 'ethers';
+import {CALLS_ABI, CALLS_BYTECODE} from '../../contracts/Calls';
+
+async function setup() {
+ const provider = new MockProvider();
+ const [deployer] = provider.getWallets();
+
+ const factory = new ContractFactory(CALLS_ABI, CALLS_BYTECODE, deployer);
+ return {contract: await factory.deploy()};
+}
+
+describe('INTEGRATION: calledOnContractWith', () => {
+ it('checks that contract function with provided parameter was called', async () => {
+ const {contract} = await setup();
+
+ await contract.callWithParameter(1);
+
+ expect('callWithParameter').toBeCalledOnContractWith(contract, [1]);
+ });
+
+ it('checks that contract function with provided multiple parameters was called', async () => {
+ const {contract} = await setup();
+
+ await contract.callWithParameters(2, 3);
+
+ expect('callWithParameters').toBeCalledOnContractWith(contract, [2, 3]);
+ });
+
+ it('throws assertion error when contract function with parameter was not called', async () => {
+ const {contract} = await setup();
+
+ expect(
+ () => expect('callWithParameter').toBeCalledOnContractWith(contract, [1])
+ ).toThrowError('Expected contract function with parameters to be called');
+ });
+
+ it('checks that contract function with parameter was not called', async () => {
+ const {contract} = await setup();
+
+ await contract.callWithParameter(2);
+
+ expect('callWithParameter').not.toBeCalledOnContractWith(contract, [1]);
+ });
+
+ it('checks that contract function with parameters was not called', async () => {
+ const {contract} = await setup();
+
+ await contract.callWithParameters(1, 2);
+
+ expect('callWithParameters').not.toBeCalledOnContractWith(contract, [1, 3]);
+ });
+
+ it('throws assertion error when contract function with parameter was called', async () => {
+ const {contract} = await setup();
+ await contract.callWithParameter(2);
+
+ expect(
+ () => expect('callWithParameter').not.toBeCalledOnContractWith(contract, [2])
+ ).toThrowError('Expected contract function with parameters NOT to be called');
+ });
+
+ it(
+ 'checks that contract function was called on provided contract and not called on another deploy of this contract',
+ async () => {
+ const {contract} = await setup();
+ const {contract: secondDeployContract} = await setup();
+ await contract.callWithParameter(2);
+
+ expect('callWithParameter').toBeCalledOnContractWith(contract, [2]);
+ expect('callWithParameter').not.toBeCalledOnContractWith(secondDeployContract, [2]);
+ }
+ );
+
+ it(
+ 'checks that contract function which was called twice with different args, lets possibility to find desirable call',
+ async () => {
+ const {contract} = await setup();
+
+ await contract.callWithParameters(2, 3);
+ await contract.callWithParameters(4, 5);
+
+ expect('callWithParameters').toBeCalledOnContractWith(contract, [2, 3]);
+ });
+});
diff --git a/waffle-jest/test/matchers/events.test.ts b/waffle-jest/test/matchers/events.test.ts
new file mode 100644
index 000000000..ca4eff646
--- /dev/null
+++ b/waffle-jest/test/matchers/events.test.ts
@@ -0,0 +1,66 @@
+import {Contract, ContractFactory} from 'ethers';
+import {MockProvider} from '@ethereum-waffle/provider';
+import {EVENTS_ABI, EVENTS_BYTECODE} from '../contracts/Events';
+
+describe('INTEGRATION: Events Emitted', () => {
+ const [wallet] = new MockProvider().getWallets();
+ let factory: ContractFactory;
+ let events: Contract;
+
+ beforeEach(async () => {
+ factory = new ContractFactory(EVENTS_ABI, EVENTS_BYTECODE, wallet);
+ events = await factory.deploy();
+ });
+
+ it('Emit one: success', async () => {
+ const tx = await events.emitOne();
+ await expect(tx).toHaveEmitted(events, 'One');
+ });
+
+ it('Emit one: fail', async () => {
+ const tx = await events.emitOne();
+ await expect(
+ expect(tx).toHaveEmitted(events, 'Two')
+ ).rejects.toThrowError(
+ 'Expected event "Two" to be emitted, but it wasn\'t'
+ );
+ });
+
+ it('Emit two: success', async () => {
+ const tx = await events.emitTwo();
+ await expect(tx).toHaveEmitted(events, 'Two');
+ });
+
+ it('Emit two: fail', async () => {
+ const tx = await events.emitTwo();
+ await expect(
+ expect(tx).toHaveEmitted(events, 'One')
+ ).rejects.toThrowError(
+ 'Expected event "One" to be emitted, but it wasn\'t'
+ );
+ });
+
+ it('Do not emit one: fail', async () => {
+ const tx = await events.emitOne();
+ await expect(
+ expect(tx).not.toHaveEmitted(events, 'One')
+ ).rejects.toThrowError(
+ 'Expected event "One" NOT to be emitted, but it was'
+ );
+ });
+
+ it('Do not emit two: success', async () => {
+ const tx = await events.emitTwo();
+ await expect(tx).not.toHaveEmitted(events, 'One');
+ });
+
+ it('Emit non-existent event: fail', async () => {
+ const tx = await events.emitOne();
+ await expect(
+ expect(tx).toHaveEmitted(events, 'Three')
+ ).rejects.toThrowError(
+ 'Expected event "Three" to be emitted, but it doesn\'t exist in the contract. ' +
+ 'Please make sure you\'ve compiled its latest version before running the test.'
+ );
+ });
+});
diff --git a/waffle-jest/test/matchers/eventsWithArgs.test.ts b/waffle-jest/test/matchers/eventsWithArgs.test.ts
new file mode 100644
index 000000000..b945c5dbc
--- /dev/null
+++ b/waffle-jest/test/matchers/eventsWithArgs.test.ts
@@ -0,0 +1,147 @@
+import {BigNumber, Contract, ContractFactory} from 'ethers';
+import {MockProvider} from '@ethereum-waffle/provider';
+import {EVENTS_ABI, EVENTS_BYTECODE} from '../contracts/Events';
+
+// Note: We make use of Jest Snapshots here because the error output is
+// a rich diff with ANSI colors generated by jest-diff and is therefore
+// quite large.
+
+describe('INTEGRATION: Events Emitted With Args', () => {
+ const [wallet] = new MockProvider().getWallets();
+ let factory: ContractFactory;
+ let events: Contract;
+
+ beforeEach(async () => {
+ factory = new ContractFactory(EVENTS_ABI, EVENTS_BYTECODE, wallet);
+ events = await factory.deploy();
+ });
+
+ describe('simple', () => {
+ it('proper args', async () => {
+ const tx = await events.emitOne();
+ await expect(tx).toHaveEmittedWith(events, 'One', [
+ BigNumber.from(1),
+ 'One',
+ '0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123'
+ ]);
+ });
+
+ it('not enough args', async () => {
+ const tx = await events.emitOne();
+ await expect(
+ expect(tx).toHaveEmittedWith(events, 'One', [BigNumber.from(1)])
+ ).rejects.toThrowErrorMatchingSnapshot();
+ // received additional "One" and address '0x...2123'
+ });
+
+ it('too many args', async () => {
+ const tx = await events.emitOne();
+ await expect(
+ expect(tx).toHaveEmittedWith(events, 'One', [1, 2, 3, 4])
+ ).rejects.toThrowErrorMatchingSnapshot();
+ // received BigNumber, string, and address
+ });
+
+ it('one different arg (integer)', async () => {
+ const tx = await events.emitOne();
+ await expect(
+ expect(tx).toHaveEmittedWith(events, 'One', [
+ 2,
+ 'One',
+ '0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123'
+ ])
+ ).rejects.toThrowErrorMatchingSnapshot();
+ // expected 2, received BigNumber(1)
+ });
+
+ it('one different arg (string number)', async () => {
+ const tx = await events.emitOne();
+ await expect(
+ expect(tx).toHaveEmittedWith(events, 'One', [
+ BigNumber.from(1),
+ 'Two',
+ '0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123'
+ ])
+ ).rejects.toThrowErrorMatchingSnapshot();
+ // expected "Two", received "One"
+ });
+
+ it('one different arg (string address)', async () => {
+ const tx = await events.emitOne();
+ await expect(
+ expect(tx).toHaveEmittedWith(events, 'One', [
+ BigNumber.from(1),
+ 'One',
+ '0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162124'
+ ])
+ ).rejects.toThrowErrorMatchingSnapshot();
+ // expected '0x...2124', received '0x...2123'
+ });
+ });
+
+ describe('arrays', () => {
+ it('BigNumbers and bytes32', async () => {
+ const tx = await events.emitArrays();
+ await expect(tx).toHaveEmittedWith(events, 'Arrays', [
+ [1, 2, 3].map((x) => BigNumber.from(x)),
+ [
+ '0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123',
+ '0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162124'
+ ]
+ ]);
+ });
+
+ it('bytes32 ends in different value', async () => {
+ const tx = await events.emitArrays();
+ await expect(
+ expect(tx).toHaveEmittedWith(events, 'Arrays', [
+ [1, 2, 3].map((x) => BigNumber.from(x)),
+ [
+ '0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162121',
+ '0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162124'
+ ]
+ ])
+ ).rejects.toThrowErrorMatchingSnapshot();
+ // expected '0x...2121', received '0x...2123'
+ });
+
+ it('BigNumber received is 1, not 0', async () => {
+ const tx = await events.emitArrays();
+ await expect(
+ expect(tx).toHaveEmittedWith(events, 'Arrays', [
+ [0, 2, 3].map((x) => BigNumber.from(x)),
+ [
+ '0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123',
+ '0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162124'
+ ]
+ ])
+ ).rejects.toThrowErrorMatchingSnapshot();
+ // expected "0x00", received "0x01"
+ });
+ });
+
+ describe('multiples same event', () => {
+ it('with different args', async () => {
+ const tx = await events.emitOneMultipleTimes();
+ await expect(tx).toHaveEmittedWith(events, 'One', [
+ BigNumber.from(1),
+ 'One',
+ '0x00cfbbaf7ddb3a1476767101c12a0162e241fbad2a0162e2410cfbbaf7162123'
+ ]);
+
+ await expect(tx).toHaveEmittedWith(events, 'One', [
+ BigNumber.from(1),
+ 'DifferentKindOfOne',
+ '0x0000000000000000000000000000000000000000000000000000000000000001'
+ ]);
+ });
+
+ it('with different args (not found)', async () => {
+ const tx = await events.emitOneMultipleTimes();
+ await expect(
+ expect(tx).toHaveEmittedWith(events, 'One', [1, 2, 3, 4])
+ ).rejects.toThrowErrorMatchingSnapshot();
+ // received BigNumber(1), "DifferentKindOfOne", "0x...0001"
+ });
+ });
+});
diff --git a/waffle-jest/test/matchers/misc.test.ts b/waffle-jest/test/matchers/misc.test.ts
new file mode 100644
index 000000000..e449a9dc7
--- /dev/null
+++ b/waffle-jest/test/matchers/misc.test.ts
@@ -0,0 +1,79 @@
+describe('UNIT: Miscellaneous', () => {
+ describe('Proper address', () => {
+ it('Expect to be proper address', async () => {
+ expect('0x28FAA621c3348823D6c6548981a19716bcDc740e').toBeProperAddress();
+ expect('0x846C66cf71C43f80403B51fE3906B3599D63336f').toBeProperAddress();
+ });
+
+ it('Expect not to be proper address', async () => {
+ expect('0x28FAA621c3348823D6c6548981a19716bcDc740').not.toBeProperAddress();
+ expect('0x846C66cf71C43f80403B51fE3906B3599D63336g').not.toBeProperAddress();
+ });
+
+ it('Expect to throw if invalid address', async () => {
+ expect(
+ () => expect('0x28FAA621c3348823D6c6548981a19716bcDc740').toBeProperAddress()
+ ).toThrowError('Expected "0x28FAA621c3348823D6c6548981a19716bcDc740" to be a proper address');
+ });
+
+ it('Expect to throw if negation with proper address)', async () => {
+ expect(
+ () => expect('0x28FAA621c3348823D6c6548981a19716bcDc740e').not.toBeProperAddress()
+ ).toThrowError('Expected "0x28FAA621c3348823D6c6548981a19716bcDc740e" not to be a proper address');
+ });
+ });
+
+ describe('Proper private', () => {
+ it('Expect to be proper private', async () => {
+ expect('0x706618637b8ca922f6290ce1ecd4c31247e9ab75cf0530a0ac95c0332173d7c5').toBeProperPrivateKey();
+ expect('0x03c909455dcef4e1e981a21ffb14c1c51214906ce19e8e7541921b758221b5ae').toBeProperPrivateKey();
+ });
+
+ it('Expect not to be proper private', async () => {
+ expect('0x28FAA621c3348823D6c6548981a19716bcDc740').not.toBeProperPrivateKey();
+ expect('0x706618637b8ca922f6290ce1ecd4c31247e9ab75cf0530a0ac95c0332173d7cw').not.toBeProperPrivateKey();
+ });
+
+ it('Expect to throw if invalid private', async () => {
+ expect(
+ () => expect('0x706618637b8ca922f6290ce1ecd4c31247e9ab75cf0530a0ac95c0332173d7c').toBeProperPrivateKey()
+ ).toThrowError(
+ 'Expected "0x706618637b8ca922f6290ce1ecd4c31247e9ab75cf0530a0ac95c0332173d7c" to be a proper private key'
+ );
+ });
+
+ it('Expect to throw if negation with proper private)', async () => {
+ expect(
+ () => expect('0x706618637b8ca922f6290ce1ecd4c31247e9ab75cf0530a0ac95c0332173d7c5').not.toBeProperPrivateKey()
+ ).toThrowError(
+ 'Expected "0x706618637b8ca922f6290ce1ecd4c31247e9ab75cf0530a0ac95c0332173d7c5" not to be a proper private key'
+ );
+ });
+ });
+
+ describe('Proper hex', () => {
+ it('Expect to be proper hex', async () => {
+ expect('0x70').toBeProperHex(2);
+ expect('0x03c909455d').toBeProperHex(10);
+ });
+
+ it('Expect not to be proper hex', async () => {
+ expect('0x284').not.toBeProperHex(2);
+ expect('0x2g').not.toBeProperHex(2);
+ expect('0x03c909455dd').not.toBeProperHex(10);
+ expect('0x03c909455w').not.toBeProperHex(10);
+ });
+
+ it('Expect to throw if invalid hex', async () => {
+ expect(
+ () => expect('0x702').toBeProperHex(2)
+ ).toThrowError('Expected "0x702" to be a proper hex of length 2');
+ });
+
+ it('Expect to throw if negation with proper hex)', async () => {
+ expect(
+ () => expect('0x70').not.toBeProperHex(2)
+ ).toThrowError('Expected "0x70" not to be a proper hex of length 2, but it was');
+ });
+ });
+});
diff --git a/waffle-jest/test/matchers/reverted.test.ts b/waffle-jest/test/matchers/reverted.test.ts
new file mode 100644
index 000000000..77291cd8d
--- /dev/null
+++ b/waffle-jest/test/matchers/reverted.test.ts
@@ -0,0 +1,157 @@
+import {MockProvider} from '@ethereum-waffle/provider';
+import {Contract, ContractFactory} from 'ethers';
+import {MATCHERS_ABI, MATCHERS_BYTECODE} from '../contracts/Matchers';
+
+describe('INTEGRATION: Matchers: reverted', () => {
+ const [wallet] = new MockProvider().getWallets();
+ let matchers: Contract;
+
+ beforeEach(async () => {
+ const factory = new ContractFactory(
+ MATCHERS_ABI,
+ MATCHERS_BYTECODE,
+ wallet
+ );
+ matchers = await factory.deploy();
+ });
+
+ it('Throw: success', async () => {
+ await expect(matchers.doThrow()).toBeReverted();
+ });
+
+ it('Not to revert: success', async () => {
+ await expect(matchers.doNothing()).not.toBeReverted();
+ });
+
+ it('Revert with modification: success', async () => {
+ await expect(matchers.doRevertAndModify()).toBeReverted();
+ });
+
+ it('ThrowAndModify: success', async () => {
+ await expect(matchers.doThrowAndModify()).toBeReverted();
+ });
+
+ it('Revert: success', async () => {
+ await expect(matchers.doRevert()).toBeReverted();
+ });
+
+ it('Revert: fail no exception', async () => {
+ await expect(
+ expect(matchers.doNothing()).toBeReverted()
+ ).rejects.toThrowError('Expected transaction to be reverted');
+ });
+
+ it('Not to revert: fail', async () => {
+ await expect(
+ expect(matchers.doThrow()).not.toBeReverted()
+ ).rejects.toThrowError('Expected transaction NOT to be reverted');
+ });
+
+ it('Revert: fail, random exception', async () => {
+ await expect(Promise.reject('Always reject')).not.toBeReverted();
+ });
+
+ it('Not to revert: fail, random exception', async () => {
+ await expect(
+ expect(Promise.reject('Always reject')).toBeReverted()
+ ).rejects.toThrowError(
+ 'Expected transaction to be reverted, but other exception was thrown: Always reject'
+ );
+ });
+});
+
+describe('INTEGRATION: Matchers: revertedWith', () => {
+ const [wallet] = new MockProvider().getWallets();
+ let matchers: Contract;
+
+ beforeEach(async () => {
+ const factory = new ContractFactory(
+ MATCHERS_ABI,
+ MATCHERS_BYTECODE,
+ wallet
+ );
+ matchers = await factory.deploy();
+ });
+
+ it('Throw: success', async () => {
+ await expect(matchers.doThrow()).toBeRevertedWith('');
+ });
+
+ it('Not to revert: success', async () => {
+ await expect(matchers.doNothing()).not.toBeRevertedWith('');
+ });
+
+ it('Revert with modification: success', async () => {
+ await expect(matchers.doRevertAndModify()).toBeRevertedWith('Revert cause');
+ });
+
+ it('ThrowAndModify: success', async () => {
+ await expect(matchers.doThrowAndModify()).toBeRevertedWith('');
+ });
+
+ it('Revert: success', async () => {
+ await expect(matchers.doRevert()).toBeRevertedWith('Revert cause');
+ });
+
+ it('Revert: fail when different message was thrown', async () => {
+ await expect(
+ expect(matchers.doRevert()).toBeRevertedWith('different message')
+ ).rejects.toThrowError(
+ 'Expected transaction to be reverted with different message, ' +
+ 'but other exception was thrown: RuntimeError: VM Exception while processing transaction: revert Revert cause'
+ );
+ });
+
+ it('Revert: fail no exception', async () => {
+ await expect(
+ expect(matchers.doNothing()).toBeRevertedWith('')
+ ).rejects.toThrowError('Expected transaction to be reverted');
+ });
+
+ it('Require: success', async () => {
+ await expect(matchers.doRequireFail()).toBeRevertedWith('Require cause');
+ });
+
+ it('Require: fail when no exception was thrown', async () => {
+ await expect(
+ expect(matchers.doRequireSuccess()).toBeRevertedWith('Never to be seen')
+ ).rejects.toThrowError('Expected transaction to be reverted');
+ });
+
+ it('Require: fail when different message', async () => {
+ await expect(
+ expect(matchers.doRequireFail()).toBeRevertedWith('Different message')
+ ).rejects.toThrowError(
+ 'Expected transaction to be reverted with Different message, ' +
+ 'but other exception was thrown: RuntimeError: VM Exception while processing transaction: revert Require cause'
+ );
+ });
+
+ it('Not to revert: fail', async () => {
+ await expect(
+ expect(matchers.doThrow()).not.toBeRevertedWith('')
+ ).rejects.toThrowError('Expected transaction NOT to be reverted with ');
+ });
+
+ it('Revert: fail when same message was thrown', async () => {
+ await expect(matchers.doRevert()).toBeRevertedWith('Revert cause');
+ });
+
+ it('Not to revert: success when different message was thrown', async () => {
+ await expect(matchers.doRevert()).not.toBeRevertedWith('different message');
+ });
+
+ it('Revert: fail, random exception', async () => {
+ await expect(Promise.reject('Always reject')).not.toBeRevertedWith(
+ 'Always reject'
+ );
+ });
+
+ it('Not to revert: fail, random exception', async () => {
+ await expect(
+ expect(Promise.reject('Always reject')).toBeRevertedWith('Always reject')
+ ).rejects.toThrowError(
+ 'Expected transaction to be reverted with Always reject, but other exception was thrown: Always reject'
+ );
+ });
+});
diff --git a/waffle-jest/test/setupJest.ts b/waffle-jest/test/setupJest.ts
new file mode 100644
index 000000000..f0748d798
--- /dev/null
+++ b/waffle-jest/test/setupJest.ts
@@ -0,0 +1,4 @@
+import {waffleJest} from '../src';
+
+jest.setTimeout(10000);
+expect.extend(waffleJest);
diff --git a/waffle-jest/tsconfig.build.json b/waffle-jest/tsconfig.build.json
new file mode 100644
index 000000000..b90fc83e0
--- /dev/null
+++ b/waffle-jest/tsconfig.build.json
@@ -0,0 +1,4 @@
+{
+ "extends": "./tsconfig.json",
+ "include": ["src"]
+}
diff --git a/waffle-jest/tsconfig.json b/waffle-jest/tsconfig.json
new file mode 100644
index 000000000..3c43903cf
--- /dev/null
+++ b/waffle-jest/tsconfig.json
@@ -0,0 +1,3 @@
+{
+ "extends": "../tsconfig.json"
+}
diff --git a/yarn.lock b/yarn.lock
index 4a79864ab..3fa1f18ec 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9,6 +9,138 @@
dependencies:
"@babel/highlight" "^7.0.0"
+"@babel/code-frame@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a"
+ integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==
+ dependencies:
+ "@babel/highlight" "^7.10.4"
+
+"@babel/core@^7.1.0", "@babel/core@^7.7.5":
+ version "7.11.4"
+ resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.4.tgz#4301dfdfafa01eeb97f1896c5501a3f0655d4229"
+ integrity sha512-5deljj5HlqRXN+5oJTY7Zs37iH3z3b++KjiKtIsJy1NrjOOVSEaJHEetLBhyu0aQOSNNZ/0IuEAan9GzRuDXHg==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/generator" "^7.11.4"
+ "@babel/helper-module-transforms" "^7.11.0"
+ "@babel/helpers" "^7.10.4"
+ "@babel/parser" "^7.11.4"
+ "@babel/template" "^7.10.4"
+ "@babel/traverse" "^7.11.0"
+ "@babel/types" "^7.11.0"
+ convert-source-map "^1.7.0"
+ debug "^4.1.0"
+ gensync "^1.0.0-beta.1"
+ json5 "^2.1.2"
+ lodash "^4.17.19"
+ resolve "^1.3.2"
+ semver "^5.4.1"
+ source-map "^0.5.0"
+
+"@babel/generator@^7.11.0", "@babel/generator@^7.11.4":
+ version "7.11.4"
+ resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.4.tgz#1ec7eec00defba5d6f83e50e3ee72ae2fee482be"
+ integrity sha512-Rn26vueFx0eOoz7iifCN2UHT6rGtnkSGWSoDRIy8jZN3B91PzeSULbswfLoOWuTuAcNwpG/mxy+uCTDnZ9Mp1g==
+ dependencies:
+ "@babel/types" "^7.11.0"
+ jsesc "^2.5.1"
+ source-map "^0.5.0"
+
+"@babel/helper-function-name@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a"
+ integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==
+ dependencies:
+ "@babel/helper-get-function-arity" "^7.10.4"
+ "@babel/template" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-get-function-arity@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2"
+ integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-member-expression-to-functions@^7.10.4":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df"
+ integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q==
+ dependencies:
+ "@babel/types" "^7.11.0"
+
+"@babel/helper-module-imports@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620"
+ integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-module-transforms@^7.11.0":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359"
+ integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg==
+ dependencies:
+ "@babel/helper-module-imports" "^7.10.4"
+ "@babel/helper-replace-supers" "^7.10.4"
+ "@babel/helper-simple-access" "^7.10.4"
+ "@babel/helper-split-export-declaration" "^7.11.0"
+ "@babel/template" "^7.10.4"
+ "@babel/types" "^7.11.0"
+ lodash "^4.17.19"
+
+"@babel/helper-optimise-call-expression@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673"
+ integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==
+ dependencies:
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375"
+ integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==
+
+"@babel/helper-replace-supers@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf"
+ integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==
+ dependencies:
+ "@babel/helper-member-expression-to-functions" "^7.10.4"
+ "@babel/helper-optimise-call-expression" "^7.10.4"
+ "@babel/traverse" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-simple-access@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461"
+ integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==
+ dependencies:
+ "@babel/template" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/helper-split-export-declaration@^7.11.0":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f"
+ integrity sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==
+ dependencies:
+ "@babel/types" "^7.11.0"
+
+"@babel/helper-validator-identifier@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2"
+ integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==
+
+"@babel/helpers@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044"
+ integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==
+ dependencies:
+ "@babel/template" "^7.10.4"
+ "@babel/traverse" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
"@babel/highlight@^7.0.0":
version "7.5.0"
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540"
@@ -18,6 +150,143 @@
esutils "^2.0.2"
js-tokens "^4.0.0"
+"@babel/highlight@^7.10.4":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143"
+ integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.4"
+ chalk "^2.0.0"
+ js-tokens "^4.0.0"
+
+"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.0", "@babel/parser@^7.11.4":
+ version "7.11.4"
+ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.4.tgz#6fa1a118b8b0d80d0267b719213dc947e88cc0ca"
+ integrity sha512-MggwidiH+E9j5Sh8pbrX5sJvMcsqS5o+7iB42M9/k0CD63MjYbdP4nhSh7uB5wnv2/RVzTZFTxzF/kIa5mrCqA==
+
+"@babel/plugin-syntax-async-generators@^7.8.4":
+ version "7.8.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
+ integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-bigint@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea"
+ integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-class-properties@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c"
+ integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-import-meta@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
+ integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-json-strings@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
+ integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-logical-assignment-operators@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
+ integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
+ integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-numeric-separator@^7.8.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
+ integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.10.4"
+
+"@babel/plugin-syntax-object-rest-spread@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
+ integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-catch-binding@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
+ integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/plugin-syntax-optional-chaining@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
+ integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.8.0"
+
+"@babel/template@^7.10.4", "@babel/template@^7.3.3":
+ version "7.10.4"
+ resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278"
+ integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/parser" "^7.10.4"
+ "@babel/types" "^7.10.4"
+
+"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.0.tgz#9b996ce1b98f53f7c3e4175115605d56ed07dd24"
+ integrity sha512-ZB2V+LskoWKNpMq6E5UUCrjtDUh5IOTAyIl0dTjIEoXum/iKWkoIEKIRDnUucO6f+2FzNkE0oD4RLKoPIufDtg==
+ dependencies:
+ "@babel/code-frame" "^7.10.4"
+ "@babel/generator" "^7.11.0"
+ "@babel/helper-function-name" "^7.10.4"
+ "@babel/helper-split-export-declaration" "^7.11.0"
+ "@babel/parser" "^7.11.0"
+ "@babel/types" "^7.11.0"
+ debug "^4.1.0"
+ globals "^11.1.0"
+ lodash "^4.17.19"
+
+"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.11.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3":
+ version "7.11.0"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.0.tgz#2ae6bf1ba9ae8c3c43824e5861269871b206e90d"
+ integrity sha512-O53yME4ZZI0jO1EVGtF1ePGl0LHirG4P1ibcD80XyzZcKhcMFeCXmh4Xb1ifGBIV233Qg12x4rBfQgA+tmOukA==
+ dependencies:
+ "@babel/helper-validator-identifier" "^7.10.4"
+ lodash "^4.17.19"
+ to-fast-properties "^2.0.0"
+
+"@bcoe/v8-coverage@^0.2.3":
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
+ integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+
+"@cnakazawa/watch@^1.0.3":
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a"
+ integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==
+ dependencies:
+ exec-sh "^0.3.2"
+ minimist "^1.2.0"
+
"@ensdomains/ens@^0.4.4":
version "0.4.4"
resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.4.tgz#05e7bb138471a5e5844b4c1f263ec0ad7edcd272"
@@ -367,6 +636,182 @@
"@ethersproject/properties" "^5.0.0"
"@ethersproject/strings" "^5.0.0"
+"@istanbuljs/load-nyc-config@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
+ integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==
+ dependencies:
+ camelcase "^5.3.1"
+ find-up "^4.1.0"
+ get-package-type "^0.1.0"
+ js-yaml "^3.13.1"
+ resolve-from "^5.0.0"
+
+"@istanbuljs/schema@^0.1.2":
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd"
+ integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==
+
+"@jest/console@^26.3.0":
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/@jest/console/-/console-26.3.0.tgz#ed04063efb280c88ba87388b6f16427c0a85c856"
+ integrity sha512-/5Pn6sJev0nPUcAdpJHMVIsA8sKizL2ZkcKPE5+dJrCccks7tcM7c9wbgHudBJbxXLoTbqsHkG1Dofoem4F09w==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ jest-message-util "^26.3.0"
+ jest-util "^26.3.0"
+ slash "^3.0.0"
+
+"@jest/core@^26.4.2":
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-26.4.2.tgz#85d0894f31ac29b5bab07aa86806d03dd3d33edc"
+ integrity sha512-sDva7YkeNprxJfepOctzS8cAk9TOekldh+5FhVuXS40+94SHbiicRO1VV2tSoRtgIo+POs/Cdyf8p76vPTd6dg==
+ dependencies:
+ "@jest/console" "^26.3.0"
+ "@jest/reporters" "^26.4.1"
+ "@jest/test-result" "^26.3.0"
+ "@jest/transform" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.4"
+ jest-changed-files "^26.3.0"
+ jest-config "^26.4.2"
+ jest-haste-map "^26.3.0"
+ jest-message-util "^26.3.0"
+ jest-regex-util "^26.0.0"
+ jest-resolve "^26.4.0"
+ jest-resolve-dependencies "^26.4.2"
+ jest-runner "^26.4.2"
+ jest-runtime "^26.4.2"
+ jest-snapshot "^26.4.2"
+ jest-util "^26.3.0"
+ jest-validate "^26.4.2"
+ jest-watcher "^26.3.0"
+ micromatch "^4.0.2"
+ p-each-series "^2.1.0"
+ rimraf "^3.0.0"
+ slash "^3.0.0"
+ strip-ansi "^6.0.0"
+
+"@jest/environment@^26.3.0":
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-26.3.0.tgz#e6953ab711ae3e44754a025f838bde1a7fd236a0"
+ integrity sha512-EW+MFEo0DGHahf83RAaiqQx688qpXgl99wdb8Fy67ybyzHwR1a58LHcO376xQJHfmoXTu89M09dH3J509cx2AA==
+ dependencies:
+ "@jest/fake-timers" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ "@types/node" "*"
+ jest-mock "^26.3.0"
+
+"@jest/fake-timers@^26.3.0":
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-26.3.0.tgz#f515d4667a6770f60ae06ae050f4e001126c666a"
+ integrity sha512-ZL9ytUiRwVP8ujfRepffokBvD2KbxbqMhrXSBhSdAhISCw3gOkuntisiSFv+A6HN0n0fF4cxzICEKZENLmW+1A==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ "@sinonjs/fake-timers" "^6.0.1"
+ "@types/node" "*"
+ jest-message-util "^26.3.0"
+ jest-mock "^26.3.0"
+ jest-util "^26.3.0"
+
+"@jest/globals@^26.4.2":
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-26.4.2.tgz#73c2a862ac691d998889a241beb3dc9cada40d4a"
+ integrity sha512-Ot5ouAlehhHLRhc+sDz2/9bmNv9p5ZWZ9LE1pXGGTCXBasmi5jnYjlgYcYt03FBwLmZXCZ7GrL29c33/XRQiow==
+ dependencies:
+ "@jest/environment" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ expect "^26.4.2"
+
+"@jest/reporters@^26.4.1":
+ version "26.4.1"
+ resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-26.4.1.tgz#3b4d6faf28650f3965f8b97bc3d114077fb71795"
+ integrity sha512-aROTkCLU8++yiRGVxLsuDmZsQEKO6LprlrxtAuzvtpbIFl3eIjgIf3EUxDKgomkS25R9ZzwGEdB5weCcBZlrpQ==
+ dependencies:
+ "@bcoe/v8-coverage" "^0.2.3"
+ "@jest/console" "^26.3.0"
+ "@jest/test-result" "^26.3.0"
+ "@jest/transform" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ chalk "^4.0.0"
+ collect-v8-coverage "^1.0.0"
+ exit "^0.1.2"
+ glob "^7.1.2"
+ graceful-fs "^4.2.4"
+ istanbul-lib-coverage "^3.0.0"
+ istanbul-lib-instrument "^4.0.3"
+ istanbul-lib-report "^3.0.0"
+ istanbul-lib-source-maps "^4.0.0"
+ istanbul-reports "^3.0.2"
+ jest-haste-map "^26.3.0"
+ jest-resolve "^26.4.0"
+ jest-util "^26.3.0"
+ jest-worker "^26.3.0"
+ slash "^3.0.0"
+ source-map "^0.6.0"
+ string-length "^4.0.1"
+ terminal-link "^2.0.0"
+ v8-to-istanbul "^5.0.1"
+ optionalDependencies:
+ node-notifier "^8.0.0"
+
+"@jest/source-map@^26.3.0":
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-26.3.0.tgz#0e646e519883c14c551f7b5ae4ff5f1bfe4fc3d9"
+ integrity sha512-hWX5IHmMDWe1kyrKl7IhFwqOuAreIwHhbe44+XH2ZRHjrKIh0LO5eLQ/vxHFeAfRwJapmxuqlGAEYLadDq6ZGQ==
+ dependencies:
+ callsites "^3.0.0"
+ graceful-fs "^4.2.4"
+ source-map "^0.6.0"
+
+"@jest/test-result@^26.3.0":
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-26.3.0.tgz#46cde01fa10c0aaeb7431bf71e4a20d885bc7fdb"
+ integrity sha512-a8rbLqzW/q7HWheFVMtghXV79Xk+GWwOK1FrtimpI5n1la2SY0qHri3/b0/1F0Ve0/yJmV8pEhxDfVwiUBGtgg==
+ dependencies:
+ "@jest/console" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ collect-v8-coverage "^1.0.0"
+
+"@jest/test-sequencer@^26.4.2":
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-26.4.2.tgz#58a3760a61eec758a2ce6080201424580d97cbba"
+ integrity sha512-83DRD8N3M0tOhz9h0bn6Kl6dSp+US6DazuVF8J9m21WAp5x7CqSMaNycMP0aemC/SH/pDQQddbsfHRTBXVUgog==
+ dependencies:
+ "@jest/test-result" "^26.3.0"
+ graceful-fs "^4.2.4"
+ jest-haste-map "^26.3.0"
+ jest-runner "^26.4.2"
+ jest-runtime "^26.4.2"
+
+"@jest/transform@^26.3.0":
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-26.3.0.tgz#c393e0e01459da8a8bfc6d2a7c2ece1a13e8ba55"
+ integrity sha512-Isj6NB68QorGoFWvcOjlUhpkT56PqNIsXKR7XfvoDlCANn/IANlh8DrKAA2l2JKC3yWSMH5wS0GwuQM20w3b2A==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/types" "^26.3.0"
+ babel-plugin-istanbul "^6.0.0"
+ chalk "^4.0.0"
+ convert-source-map "^1.4.0"
+ fast-json-stable-stringify "^2.0.0"
+ graceful-fs "^4.2.4"
+ jest-haste-map "^26.3.0"
+ jest-regex-util "^26.0.0"
+ jest-util "^26.3.0"
+ micromatch "^4.0.2"
+ pirates "^4.0.1"
+ slash "^3.0.0"
+ source-map "^0.6.1"
+ write-file-atomic "^3.0.0"
+
"@jest/types@^24.9.0":
version "24.9.0"
resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.9.0.tgz#63cb26cb7500d069e5a389441a7c6ab5e909fc59"
@@ -376,6 +821,27 @@
"@types/istanbul-reports" "^1.1.1"
"@types/yargs" "^13.0.0"
+"@jest/types@^25.5.0":
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.5.0.tgz#4d6a4793f7b9599fc3680877b856a97dbccf2a9d"
+ integrity sha512-OXD0RgQ86Tu3MazKo8bnrkDRaDXXMGUqd+kTtLtK1Zb7CRzQcaSRPPPV37SvYTdevXEBVxe0HXylEjs8ibkmCw==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^1.1.1"
+ "@types/yargs" "^15.0.0"
+ chalk "^3.0.0"
+
+"@jest/types@^26.3.0":
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.3.0.tgz#97627bf4bdb72c55346eef98e3b3f7ddc4941f71"
+ integrity sha512-BDPG23U0qDeAvU4f99haztXwdAg3hz4El95LkAM+tHAqqhiVzRpEGHHU8EDxT/AnxOrA65YjLBwDahdJ9pTLJQ==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.0"
+ "@types/istanbul-reports" "^3.0.0"
+ "@types/node" "*"
+ "@types/yargs" "^15.0.0"
+ chalk "^4.0.0"
+
"@openzeppelin/contracts@^3.0.1":
version "3.0.1"
resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.0.1.tgz#2f327f77d16b43f14674086b2b634bda38cb0838"
@@ -430,6 +896,20 @@
dependencies:
type-detect "4.0.8"
+"@sinonjs/commons@^1.7.0":
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.1.tgz#e7df00f98a203324f6dc7cc606cad9d4a8ab2217"
+ integrity sha512-892K+kWUUi3cl+LlqEWIDrhvLgdL79tECi8JZUyq6IviKy/DNhuzCRlbHUjxK89f4ypPMMaFnFuR9Ie6DoIMsw==
+ dependencies:
+ type-detect "4.0.8"
+
+"@sinonjs/fake-timers@^6.0.1":
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz#293674fccb3262ac782c7aadfdeca86b10c75c40"
+ integrity sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==
+ dependencies:
+ "@sinonjs/commons" "^1.7.0"
+
"@sinonjs/formatio@^3.2.1":
version "3.2.1"
resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.1.tgz#52310f2f9bcbc67bdac18c94ad4901b95fde267e"
@@ -459,6 +939,39 @@
dependencies:
defer-to-connect "^1.0.1"
+"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7":
+ version "7.1.9"
+ resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.9.tgz#77e59d438522a6fb898fa43dc3455c6e72f3963d"
+ integrity sha512-sY2RsIJ5rpER1u3/aQ8OFSI7qGIy8o1NEEbgb2UaJcvOtXOMpd39ko723NBpjQFg9SIX7TXtjejZVGeIMLhoOw==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+ "@types/babel__generator" "*"
+ "@types/babel__template" "*"
+ "@types/babel__traverse" "*"
+
+"@types/babel__generator@*":
+ version "7.6.1"
+ resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04"
+ integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew==
+ dependencies:
+ "@babel/types" "^7.0.0"
+
+"@types/babel__template@*":
+ version "7.0.2"
+ resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307"
+ integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg==
+ dependencies:
+ "@babel/parser" "^7.1.0"
+ "@babel/types" "^7.0.0"
+
+"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6":
+ version "7.0.13"
+ resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.13.tgz#1874914be974a492e1b4cb00585cabb274e8ba18"
+ integrity sha512-i+zS7t6/s9cdQvbqKDARrcbrPvtJGlbYsMkazo03nTAK3RX9FNrLllXys22uiTGJapPOTZTQ35nHh4ISph4SLQ==
+ dependencies:
+ "@babel/types" "^7.3.0"
+
"@types/bignumber.js@^5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969"
@@ -521,11 +1034,23 @@
dependencies:
"@types/node" "*"
+"@types/graceful-fs@^4.1.2":
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f"
+ integrity sha512-AiHRaEB50LQg0pZmm659vNBb9f4SJ0qrAnteuzhSeAUcJKxoYgEnprg/83kppCnc2zvtCKbdZry1a5pVY3lOTQ==
+ dependencies:
+ "@types/node" "*"
+
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
version "2.0.1"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==
+"@types/istanbul-lib-coverage@^2.0.1":
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762"
+ integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==
+
"@types/istanbul-lib-report@*":
version "1.1.1"
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c"
@@ -541,6 +1066,21 @@
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*"
+"@types/istanbul-reports@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz#508b13aa344fa4976234e75dddcc34925737d821"
+ integrity sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==
+ dependencies:
+ "@types/istanbul-lib-report" "*"
+
+"@types/jest@26.x", "@types/jest@^26.0.0":
+ version "26.0.10"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.10.tgz#8faf7e9756c033c39014ae76a7329efea00ea607"
+ integrity sha512-i2m0oyh8w/Lum7wWK/YOZJakYF8Mx08UaKA1CtbmFeDquVhAEdA7znacsVSf2hJ1OQ/OfVMGN90pw/AtzF8s/Q==
+ dependencies:
+ jest-diff "^25.2.1"
+ pretty-format "^25.2.1"
+
"@types/json-schema@^7.0.3":
version "7.0.3"
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636"
@@ -586,6 +1126,16 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.29.tgz#46275f028b4e463b9ac5fefc1d08bc66cc193f25"
integrity sha512-yo8Qz0ygADGFptISDj3pOC9wXfln/5pQaN/ysDIzOaAWXt73cNHmtEC8zSO2Y+kse/txmwIAJzkYZ5fooaS5DQ==
+"@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"
+ integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==
+
+"@types/prettier@^2.0.0":
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.1.0.tgz#5f96562c1075ee715a5b138f0b7f591c1f40f6b8"
+ integrity sha512-hiYA88aHiEIgDmeKlsyVsuQdcFn3Z2VuFd/Xm/HCnGnPD8UFU5BM128uzzRVVGEzKDKYUrRsRH9S2o+NUy/3IA==
+
"@types/sinon-chai@^3.2.3":
version "3.2.3"
resolved "https://registry.yarnpkg.com/@types/sinon-chai/-/sinon-chai-3.2.3.tgz#afe392303dda95cc8069685d1e537ff434fa506e"
@@ -604,6 +1154,11 @@
resolved "https://registry.yarnpkg.com/@types/sinon/-/sinon-7.5.0.tgz#f5a10c27175465a0b001b68d8b9f761582967cc6"
integrity sha512-NyzhuSBy97B/zE58cDw4NyGvByQbAHNP9069KVSgnXt/sc0T6MFRh0InKAeBVHJWdSXG1S3+PxgVIgKo9mTHbw==
+"@types/stack-utils@^1.0.1":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
+ integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
+
"@types/yargs-parser@*":
version "13.1.0"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-13.1.0.tgz#c563aa192f39350a1d18da36c5a8da382bbd8228"
@@ -616,6 +1171,13 @@
dependencies:
"@types/yargs-parser" "*"
+"@types/yargs@^15.0.0":
+ version "15.0.5"
+ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79"
+ integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w==
+ dependencies:
+ "@types/yargs-parser" "*"
+
"@typescript-eslint/eslint-plugin@^2.30.0":
version "2.30.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.30.0.tgz#312a37e80542a764d96e8ad88a105316cdcd7b05"
@@ -683,6 +1245,11 @@
resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31"
integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==
+abab@^2.0.3:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.4.tgz#6dfa57b417ca06d21b2478f0e638302f99c2405c"
+ integrity sha512-Eu9ELJWCz/c1e9gTiCY+FceWxcqzjYEbqMgtndnuSqZSUCOL73TWNK2mHfIj4Cw2E/ongOp+JISVNCmovt2KYQ==
+
abstract-leveldown@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz#5cb89f958a44f526779d740d1440e743e0c30a57"
@@ -726,11 +1293,24 @@ acorn-dynamic-import@^2.0.0:
dependencies:
acorn "^4.0.3"
+acorn-globals@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45"
+ integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==
+ dependencies:
+ acorn "^7.1.1"
+ acorn-walk "^7.1.1"
+
acorn-jsx@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe"
integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==
+acorn-walk@^7.1.1:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
+ integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+
acorn@^4.0.3:
version "4.0.13"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
@@ -781,6 +1361,16 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5:
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
+ajv@^6.12.3:
+ version "6.12.4"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234"
+ integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
align-text@^0.1.1, align-text@^0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
@@ -834,7 +1424,7 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
dependencies:
color-convert "^1.9.0"
-ansi-styles@^4.1.0:
+ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
@@ -855,7 +1445,7 @@ anymatch@^2.0.0:
micromatch "^3.1.4"
normalize-path "^2.1.1"
-anymatch@~3.1.1:
+anymatch@^3.0.3, anymatch@~3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142"
integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==
@@ -1183,6 +1773,20 @@ babel-helpers@^6.24.1:
babel-runtime "^6.22.0"
babel-template "^6.24.1"
+babel-jest@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-26.3.0.tgz#10d0ca4b529ca3e7d1417855ef7d7bd6fc0c3463"
+ integrity sha512-sxPnQGEyHAOPF8NcUsD0g7hDCnvLL2XyblRBcgrzTWBB/mAIpWow3n1bEL+VghnnZfreLhFSBsFluRoK2tRK4g==
+ dependencies:
+ "@jest/transform" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ "@types/babel__core" "^7.1.7"
+ babel-plugin-istanbul "^6.0.0"
+ babel-preset-jest "^26.3.0"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.4"
+ slash "^3.0.0"
+
babel-messages@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
@@ -1197,6 +1801,27 @@ babel-plugin-check-es2015-constants@^6.22.0:
dependencies:
babel-runtime "^6.22.0"
+babel-plugin-istanbul@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765"
+ integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==
+ dependencies:
+ "@babel/helper-plugin-utils" "^7.0.0"
+ "@istanbuljs/load-nyc-config" "^1.0.0"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-instrument "^4.0.0"
+ test-exclude "^6.0.0"
+
+babel-plugin-jest-hoist@^26.2.0:
+ version "26.2.0"
+ resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.2.0.tgz#bdd0011df0d3d513e5e95f76bd53b51147aca2dd"
+ integrity sha512-B/hVMRv8Nh1sQ1a3EY8I0n4Y1Wty3NrR5ebOyVT302op+DOAau+xNEImGMsUWOC3++ZlMooCytKz+NgN8aKGbA==
+ dependencies:
+ "@babel/template" "^7.3.3"
+ "@babel/types" "^7.3.3"
+ "@types/babel__core" "^7.0.0"
+ "@types/babel__traverse" "^7.0.6"
+
babel-plugin-syntax-async-functions@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
@@ -1435,6 +2060,23 @@ babel-plugin-transform-strict-mode@^6.24.1:
babel-runtime "^6.22.0"
babel-types "^6.24.1"
+babel-preset-current-node-syntax@^0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-0.1.3.tgz#b4b547acddbf963cba555ba9f9cbbb70bfd044da"
+ integrity sha512-uyexu1sVwcdFnyq9o8UQYsXwXflIh8LvrF5+cKrYam93ned1CStffB3+BEcsxGSgagoA3GEyjDqO4a/58hyPYQ==
+ dependencies:
+ "@babel/plugin-syntax-async-generators" "^7.8.4"
+ "@babel/plugin-syntax-bigint" "^7.8.3"
+ "@babel/plugin-syntax-class-properties" "^7.8.3"
+ "@babel/plugin-syntax-import-meta" "^7.8.3"
+ "@babel/plugin-syntax-json-strings" "^7.8.3"
+ "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3"
+ "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
+ "@babel/plugin-syntax-numeric-separator" "^7.8.3"
+ "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
+ "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
+ "@babel/plugin-syntax-optional-chaining" "^7.8.3"
+
babel-preset-env@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a"
@@ -1471,6 +2113,14 @@ babel-preset-env@^1.7.0:
invariant "^2.2.2"
semver "^5.3.0"
+babel-preset-jest@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-26.3.0.tgz#ed6344506225c065fd8a0b53e191986f74890776"
+ integrity sha512-5WPdf7nyYi2/eRxCbVrE1kKCWxgWY4RsPEbdJWFm7QsesFGqjdkyLeu1zRkwM1cxK6EPIlNd6d2AxLk7J+t4pw==
+ dependencies:
+ babel-plugin-jest-hoist "^26.2.0"
+ babel-preset-current-node-syntax "^0.1.3"
+
babel-register@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
@@ -1698,7 +2348,7 @@ braces@^2.3.1, braces@^2.3.2:
split-string "^3.0.2"
to-regex "^3.0.1"
-braces@~3.0.2:
+braces@^3.0.1, braces@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
@@ -1710,6 +2360,11 @@ brorand@^1.0.1:
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
+browser-process-hrtime@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
+ integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==
+
browser-stdout@1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
@@ -1790,6 +2445,13 @@ browserslist@^3.2.6:
caniuse-lite "^1.0.30000844"
electron-to-chromium "^1.3.47"
+bs-logger@0.x:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
+ integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==
+ dependencies:
+ fast-json-stable-stringify "2.x"
+
bs58@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d"
@@ -1811,6 +2473,13 @@ bs58check@^2.1.2:
create-hash "^1.1.0"
safe-buffer "^5.1.2"
+bser@2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
+ integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==
+ dependencies:
+ node-int64 "^0.4.0"
+
buffer-alloc-unsafe@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0"
@@ -1834,7 +2503,7 @@ buffer-fill@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c"
integrity sha1-+PeLdniYiO858gXNY39o5wISKyw=
-buffer-from@^1.0.0:
+buffer-from@1.x, buffer-from@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
@@ -1947,16 +2616,28 @@ camelcase@^4.1.0:
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
-camelcase@^5.0.0:
+camelcase@^5.0.0, camelcase@^5.3.1:
version "5.3.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
+camelcase@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e"
+ integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w==
+
caniuse-lite@^1.0.30000844:
version "1.0.30000989"
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000989.tgz#b9193e293ccf7e4426c5245134b8f2a56c0ac4b9"
integrity sha512-vrMcvSuMz16YY6GSVZ0dWDTJP8jqk3iFQ/Aq5iqblPwxSVVZI+zxDyTX0VPqtQsDnfdrBDcsmhgTEOh5R8Lbpw==
+capture-exit@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4"
+ integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==
+ dependencies:
+ rsvp "^4.8.4"
+
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
@@ -2022,6 +2703,19 @@ chalk@^3.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+chalk@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
+ integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
+ dependencies:
+ ansi-styles "^4.1.0"
+ supports-color "^7.1.0"
+
+char-regex@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
+ integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+
chardet@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
@@ -2149,6 +2843,15 @@ cliui@^5.0.0:
strip-ansi "^5.2.0"
wrap-ansi "^5.1.0"
+cliui@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
+ integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
+ dependencies:
+ string-width "^4.2.0"
+ strip-ansi "^6.0.0"
+ wrap-ansi "^6.2.0"
+
clone-response@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b"
@@ -2161,6 +2864,11 @@ clone@2.1.2, clone@^2.0.0:
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
+
code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
@@ -2174,6 +2882,11 @@ coinstring@^2.0.0:
bs58 "^2.0.1"
create-hash "^1.1.1"
+collect-v8-coverage@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59"
+ integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==
+
collection-visit@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
@@ -2277,6 +2990,13 @@ content-type@~1.0.4:
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
+convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"
+ integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==
+ dependencies:
+ safe-buffer "~5.1.1"
+
convert-source-map@^1.5.1:
version "1.6.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
@@ -2386,6 +3106,15 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5:
shebang-command "^1.2.0"
which "^1.2.9"
+cross-spawn@^7.0.0:
+ version "7.0.3"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
+ integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
+ dependencies:
+ path-key "^3.1.0"
+ shebang-command "^2.0.0"
+ which "^2.0.1"
+
crypto-browserify@3.12.0, crypto-browserify@^3.11.0:
version "3.12.0"
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
@@ -2403,6 +3132,23 @@ crypto-browserify@3.12.0, crypto-browserify@^3.11.0:
randombytes "^2.0.0"
randomfill "^1.0.3"
+cssom@^0.4.4:
+ version "0.4.4"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10"
+ integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==
+
+cssom@~0.3.6:
+ version "0.3.8"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a"
+ integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==
+
+cssstyle@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852"
+ integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==
+ dependencies:
+ cssom "~0.3.6"
+
d@1, d@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
@@ -2418,6 +3164,15 @@ dashdash@^1.12.0:
dependencies:
assert-plus "^1.0.0"
+data-urls@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
+ integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==
+ dependencies:
+ abab "^2.0.3"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^8.0.0"
+
debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -2432,7 +3187,7 @@ debug@3.2.6, debug@^3.1.0:
dependencies:
ms "^2.1.1"
-debug@^4.0.1, debug@^4.1.1:
+debug@^4.0.1, debug@^4.1.0, debug@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
@@ -2444,6 +3199,11 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.2.0:
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+decimal.js@^10.2.0:
+ version "10.2.0"
+ resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.0.tgz#39466113a9e036111d02f82489b5fd6b0b5ed231"
+ integrity sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==
+
decode-uri-component@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
@@ -2526,6 +3286,11 @@ deep-is@~0.1.3:
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+deepmerge@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
+ integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+
defer-to-connect@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.0.tgz#b41bd7efa8508cef13f8456975f7a278c72833fd"
@@ -2610,6 +3375,21 @@ detect-indent@^4.0.0:
dependencies:
repeating "^2.0.0"
+detect-newline@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
+ integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
+
+diff-sequences@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.6.tgz#5f467c00edd35352b7bca46d7927d60e687a76dd"
+ integrity sha512-Hq8o7+6GaZeoFjtpgvRBUknSXNeJiCx7V9Fr94ZMljNiCr9n9L8H8aJqgWOQiDDGdyn29fRNcDdRVJ5fdyihfg==
+
+diff-sequences@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.3.0.tgz#62a59b1b29ab7fd27cef2a33ae52abe73042d0a2"
+ integrity sha512-5j5vdRcw3CNctePNYN0Wy2e/JbWT6cAYnXv5OuqPhDpyCGc0uLu2TK0zOCJWNB9kOIfYMSpIulRaDgIi4HJ6Ig==
+
diff@3.5.0, diff@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
@@ -2654,6 +3434,13 @@ domain-browser@^1.1.1:
resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
+domexception@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
+ integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==
+ dependencies:
+ webidl-conversions "^5.0.0"
+
drbg.js@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b"
@@ -2722,6 +3509,11 @@ elliptic@^6.0.0, elliptic@^6.4.0, elliptic@^6.4.1:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.0"
+emittery@^0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.7.1.tgz#c02375a927a40948c0345cc903072597f5270451"
+ integrity sha512-d34LN4L6h18Bzz9xpoku2nPwKxCPlPMr3EEKTkoEBi+1/+b0lcRkRJ1UVyyZaKNeqGR3swcGl6s390DNO4YVgQ==
+
emoji-regex@^7.0.1:
version "7.0.3"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
@@ -2784,7 +3576,7 @@ errno@^0.1.3, errno@~0.1.1:
dependencies:
prr "~1.0.1"
-error-ex@^1.2.0:
+error-ex@^1.2.0, error-ex@^1.3.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
@@ -2924,6 +3716,23 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
+escape-string-regexp@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
+ integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+
+escodegen@^1.14.1:
+ version "1.14.3"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503"
+ integrity sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==
+ dependencies:
+ esprima "^4.0.1"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ optionator "^0.8.1"
+ optionalDependencies:
+ source-map "~0.6.1"
+
escope@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
@@ -3047,7 +3856,7 @@ espree@^6.1.2:
acorn-jsx "^5.2.0"
eslint-visitor-keys "^1.1.0"
-esprima@^4.0.0:
+esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
@@ -3066,7 +3875,7 @@ esrecurse@^4.1.0:
dependencies:
estraverse "^4.1.0"
-estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
+estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
@@ -3544,6 +4353,11 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
md5.js "^1.3.4"
safe-buffer "^5.1.1"
+exec-sh@^0.3.2:
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5"
+ integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==
+
execa@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
@@ -3570,6 +4384,26 @@ execa@^1.0.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
+execa@^4.0.0:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2"
+ integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==
+ dependencies:
+ cross-spawn "^7.0.0"
+ get-stream "^5.0.0"
+ human-signals "^1.1.1"
+ is-stream "^2.0.0"
+ merge-stream "^2.0.0"
+ npm-run-path "^4.0.0"
+ onetime "^5.1.0"
+ signal-exit "^3.0.2"
+ strip-final-newline "^2.0.0"
+
+exit@^0.1.2:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
+ integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=
+
expand-brackets@^2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
@@ -3583,6 +4417,18 @@ expand-brackets@^2.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+expect@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/expect/-/expect-26.4.2.tgz#36db120928a5a2d7d9736643032de32f24e1b2a1"
+ integrity sha512-IlJ3X52Z0lDHm7gjEp+m76uX46ldH5VpqmU0006vqDju/285twh7zaWMRhs67VpQhBwjjMchk+p5aA0VkERCAA==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ ansi-styles "^4.0.0"
+ jest-get-type "^26.3.0"
+ jest-matcher-utils "^26.4.2"
+ jest-message-util "^26.3.0"
+ jest-regex-util "^26.0.0"
+
express@^4.14.0:
version "4.17.1"
resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
@@ -3696,6 +4542,11 @@ fast-deep-equal@^3.1.1:
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
+fast-json-stable-stringify@2.x:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
+ integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
+
fast-json-stable-stringify@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
@@ -3706,6 +4557,13 @@ fast-levenshtein@~2.0.6:
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+fb-watchman@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
+ integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==
+ dependencies:
+ bser "2.1.1"
+
fd-slicer@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
@@ -3806,6 +4664,14 @@ find-up@^2.0.0, find-up@^2.1.0:
dependencies:
locate-path "^2.0.0"
+find-up@^4.0.0, find-up@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
+ integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
+ dependencies:
+ locate-path "^5.0.0"
+ path-exists "^4.0.0"
+
find-yarn-workspace-root@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz#40eb8e6e7c2502ddfaa2577c176f221422f860db"
@@ -3955,7 +4821,7 @@ fsevents@^1.2.7:
bindings "^1.5.0"
nan "^2.12.1"
-fsevents@~2.1.1:
+fsevents@^2.1.2, fsevents@~2.1.1:
version "2.1.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e"
integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==
@@ -4013,6 +4879,11 @@ ganache-core@^2.10.2:
ethereumjs-wallet "0.6.3"
web3 "1.2.4"
+gensync@^1.0.0-beta.1:
+ version "1.0.0-beta.1"
+ resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269"
+ integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==
+
get-caller-file@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
@@ -4028,6 +4899,11 @@ get-func-name@^2.0.0:
resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=
+get-package-type@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
+ integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==
+
get-stream@^2.2.0:
version "2.3.1"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de"
@@ -4048,6 +4924,13 @@ get-stream@^4.0.0, get-stream@^4.1.0:
dependencies:
pump "^3.0.0"
+get-stream@^5.0.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
+ integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
+ dependencies:
+ pump "^3.0.0"
+
get-stream@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9"
@@ -4101,7 +4984,7 @@ glob@7.1.3:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.1.2, glob@^7.1.6:
+glob@^7.1.1, glob@^7.1.2, glob@^7.1.4, glob@^7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
@@ -4133,6 +5016,11 @@ global@~4.3.0:
min-document "^2.19.0"
process "~0.5.1"
+globals@^11.1.0:
+ version "11.12.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
+ integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+
globals@^12.1.0:
version "12.4.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
@@ -4187,7 +5075,7 @@ graceful-fs@^4.1.10, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9,
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
-graceful-fs@^4.1.11:
+graceful-fs@^4.1.11, graceful-fs@^4.2.4:
version "4.2.4"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb"
integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==
@@ -4202,6 +5090,11 @@ growl@1.10.5:
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
+growly@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
+
har-schema@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
@@ -4215,6 +5108,14 @@ har-validator@~5.1.0:
ajv "^6.5.5"
har-schema "^2.0.0"
+har-validator@~5.1.3:
+ version "5.1.5"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
+ integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
+ dependencies:
+ ajv "^6.12.3"
+ har-schema "^2.0.0"
+
has-ansi@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
@@ -4367,6 +5268,18 @@ hosted-git-info@^2.6.0:
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.4.tgz#44119abaf4bc64692a16ace34700fed9c03e2546"
integrity sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==
+html-encoding-sniffer@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
+ integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==
+ dependencies:
+ whatwg-encoding "^1.0.5"
+
+html-escaper@^2.0.0:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
+ integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+
http-cache-semantics@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz#495704773277eeef6e43f9ab2c2c7d259dda25c5"
@@ -4413,6 +5326,11 @@ https-browserify@^1.0.0:
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+human-signals@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
+ integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
+
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
@@ -4450,6 +5368,14 @@ import-fresh@^3.0.0:
parent-module "^1.0.0"
resolve-from "^4.0.0"
+import-local@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6"
+ integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==
+ dependencies:
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
+
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@@ -4519,6 +5445,11 @@ invert-kv@^2.0.0:
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==
+ip-regex@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9"
+ integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=
+
ipaddr.js@1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65"
@@ -4621,6 +5552,11 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2:
is-data-descriptor "^1.0.0"
kind-of "^6.0.2"
+is-docker@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156"
+ integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==
+
is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
@@ -4672,6 +5608,11 @@ is-function@^1.0.1:
resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
integrity sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=
+is-generator-fn@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
+ integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
+
is-glob@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
@@ -4725,6 +5666,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
dependencies:
isobject "^3.0.1"
+is-potential-custom-element-name@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397"
+ integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c=
+
is-regex@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
@@ -4749,6 +5695,11 @@ is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
+is-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
+ integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
+
is-string@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
@@ -4781,6 +5732,13 @@ is-windows@^1.0.2:
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+is-wsl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ dependencies:
+ is-docker "^2.0.0"
+
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
@@ -4813,9 +5771,50 @@ isstream@~0.1.2:
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
-isurl@^1.0.0-alpha5:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
+istanbul-lib-coverage@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec"
+ integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==
+
+istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d"
+ integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==
+ dependencies:
+ "@babel/core" "^7.7.5"
+ "@istanbuljs/schema" "^0.1.2"
+ istanbul-lib-coverage "^3.0.0"
+ semver "^6.3.0"
+
+istanbul-lib-report@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6"
+ integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==
+ dependencies:
+ istanbul-lib-coverage "^3.0.0"
+ make-dir "^3.0.0"
+ supports-color "^7.1.0"
+
+istanbul-lib-source-maps@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9"
+ integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==
+ dependencies:
+ debug "^4.1.1"
+ istanbul-lib-coverage "^3.0.0"
+ source-map "^0.6.1"
+
+istanbul-reports@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b"
+ integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==
+ dependencies:
+ html-escaper "^2.0.0"
+ istanbul-lib-report "^3.0.0"
+
+isurl@^1.0.0-alpha5:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67"
integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==
dependencies:
has-to-string-tag-x "^1.2.0"
@@ -4830,6 +5829,391 @@ jest-changed-files@^24.9.0:
execa "^1.0.0"
throat "^4.0.0"
+jest-changed-files@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-26.3.0.tgz#68fb2a7eb125f50839dab1f5a17db3607fe195b1"
+ integrity sha512-1C4R4nijgPltX6fugKxM4oQ18zimS7LqQ+zTTY8lMCMFPrxqBFb7KJH0Z2fRQJvw2Slbaipsqq7s1mgX5Iot+g==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ execa "^4.0.0"
+ throat "^5.0.0"
+
+jest-cli@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-26.4.2.tgz#24afc6e4dfc25cde4c7ec4226fb7db5f157c21da"
+ integrity sha512-zb+lGd/SfrPvoRSC/0LWdaWCnscXc1mGYW//NP4/tmBvRPT3VntZ2jtKUONsRi59zc5JqmsSajA9ewJKFYp8Cw==
+ dependencies:
+ "@jest/core" "^26.4.2"
+ "@jest/test-result" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ chalk "^4.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.4"
+ import-local "^3.0.2"
+ is-ci "^2.0.0"
+ jest-config "^26.4.2"
+ jest-util "^26.3.0"
+ jest-validate "^26.4.2"
+ prompts "^2.0.1"
+ yargs "^15.3.1"
+
+jest-config@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-26.4.2.tgz#da0cbb7dc2c131ffe831f0f7f2a36256e6086558"
+ integrity sha512-QBf7YGLuToiM8PmTnJEdRxyYy3mHWLh24LJZKVdXZ2PNdizSe1B/E8bVm+HYcjbEzGuVXDv/di+EzdO/6Gq80A==
+ dependencies:
+ "@babel/core" "^7.1.0"
+ "@jest/test-sequencer" "^26.4.2"
+ "@jest/types" "^26.3.0"
+ babel-jest "^26.3.0"
+ chalk "^4.0.0"
+ deepmerge "^4.2.2"
+ glob "^7.1.1"
+ graceful-fs "^4.2.4"
+ jest-environment-jsdom "^26.3.0"
+ jest-environment-node "^26.3.0"
+ jest-get-type "^26.3.0"
+ jest-jasmine2 "^26.4.2"
+ jest-regex-util "^26.0.0"
+ jest-resolve "^26.4.0"
+ jest-util "^26.3.0"
+ jest-validate "^26.4.2"
+ micromatch "^4.0.2"
+ pretty-format "^26.4.2"
+
+jest-diff@^25.2.1:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.5.0.tgz#1dd26ed64f96667c068cef026b677dfa01afcfa9"
+ integrity sha512-z1kygetuPiREYdNIumRpAHY6RXiGmp70YHptjdaxTWGmA085W3iCnXNx0DhflK3vwrKmrRWyY1wUpkPMVxMK7A==
+ dependencies:
+ chalk "^3.0.0"
+ diff-sequences "^25.2.6"
+ jest-get-type "^25.2.6"
+ pretty-format "^25.5.0"
+
+jest-diff@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.4.2.tgz#a1b7b303bcc534aabdb3bd4a7caf594ac059f5aa"
+ integrity sha512-6T1XQY8U28WH0Z5rGpQ+VqZSZz8EN8rZcBtfvXaOkbwxIEeRre6qnuZQlbY1AJ4MKDxQF8EkrCvK+hL/VkyYLQ==
+ dependencies:
+ chalk "^4.0.0"
+ diff-sequences "^26.3.0"
+ jest-get-type "^26.3.0"
+ pretty-format "^26.4.2"
+
+jest-docblock@^26.0.0:
+ version "26.0.0"
+ resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-26.0.0.tgz#3e2fa20899fc928cb13bd0ff68bd3711a36889b5"
+ integrity sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==
+ dependencies:
+ detect-newline "^3.0.0"
+
+jest-each@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-26.4.2.tgz#bb14f7f4304f2bb2e2b81f783f989449b8b6ffae"
+ integrity sha512-p15rt8r8cUcRY0Mvo1fpkOGYm7iI8S6ySxgIdfh3oOIv+gHwrHTy5VWCGOecWUhDsit4Nz8avJWdT07WLpbwDA==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ chalk "^4.0.0"
+ jest-get-type "^26.3.0"
+ jest-util "^26.3.0"
+ pretty-format "^26.4.2"
+
+jest-environment-jsdom@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-26.3.0.tgz#3b749ba0f3a78e92ba2c9ce519e16e5dd515220c"
+ integrity sha512-zra8He2btIMJkAzvLaiZ9QwEPGEetbxqmjEBQwhH3CA+Hhhu0jSiEJxnJMbX28TGUvPLxBt/zyaTLrOPF4yMJA==
+ dependencies:
+ "@jest/environment" "^26.3.0"
+ "@jest/fake-timers" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ "@types/node" "*"
+ jest-mock "^26.3.0"
+ jest-util "^26.3.0"
+ jsdom "^16.2.2"
+
+jest-environment-node@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-26.3.0.tgz#56c6cfb506d1597f94ee8d717072bda7228df849"
+ integrity sha512-c9BvYoo+FGcMj5FunbBgtBnbR5qk3uky8PKyRVpSfe2/8+LrNQMiXX53z6q2kY+j15SkjQCOSL/6LHnCPLVHNw==
+ dependencies:
+ "@jest/environment" "^26.3.0"
+ "@jest/fake-timers" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ "@types/node" "*"
+ jest-mock "^26.3.0"
+ jest-util "^26.3.0"
+
+jest-get-type@^25.2.6:
+ version "25.2.6"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.6.tgz#0b0a32fab8908b44d508be81681487dbabb8d877"
+ integrity sha512-DxjtyzOHjObRM+sM1knti6or+eOgcGU4xVSb2HNP1TqO4ahsT+rqZg+nyqHWJSvWgKC5cG3QjGFBqxLghiF/Ig==
+
+jest-get-type@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0"
+ integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==
+
+jest-haste-map@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-26.3.0.tgz#c51a3b40100d53ab777bfdad382d2e7a00e5c726"
+ integrity sha512-DHWBpTJgJhLLGwE5Z1ZaqLTYqeODQIZpby0zMBsCU9iRFHYyhklYqP4EiG73j5dkbaAdSZhgB938mL51Q5LeZA==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ "@types/graceful-fs" "^4.1.2"
+ "@types/node" "*"
+ anymatch "^3.0.3"
+ fb-watchman "^2.0.0"
+ graceful-fs "^4.2.4"
+ jest-regex-util "^26.0.0"
+ jest-serializer "^26.3.0"
+ jest-util "^26.3.0"
+ jest-worker "^26.3.0"
+ micromatch "^4.0.2"
+ sane "^4.0.3"
+ walker "^1.0.7"
+ optionalDependencies:
+ fsevents "^2.1.2"
+
+jest-jasmine2@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-26.4.2.tgz#18a9d5bec30904267ac5e9797570932aec1e2257"
+ integrity sha512-z7H4EpCldHN1J8fNgsja58QftxBSL+JcwZmaXIvV9WKIM+x49F4GLHu/+BQh2kzRKHAgaN/E82od+8rTOBPyPA==
+ dependencies:
+ "@babel/traverse" "^7.1.0"
+ "@jest/environment" "^26.3.0"
+ "@jest/source-map" "^26.3.0"
+ "@jest/test-result" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ co "^4.6.0"
+ expect "^26.4.2"
+ is-generator-fn "^2.0.0"
+ jest-each "^26.4.2"
+ jest-matcher-utils "^26.4.2"
+ jest-message-util "^26.3.0"
+ jest-runtime "^26.4.2"
+ jest-snapshot "^26.4.2"
+ jest-util "^26.3.0"
+ pretty-format "^26.4.2"
+ throat "^5.0.0"
+
+jest-leak-detector@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-26.4.2.tgz#c73e2fa8757bf905f6f66fb9e0070b70fa0f573f"
+ integrity sha512-akzGcxwxtE+9ZJZRW+M2o+nTNnmQZxrHJxX/HjgDaU5+PLmY1qnQPnMjgADPGCRPhB+Yawe1iij0REe+k/aHoA==
+ dependencies:
+ jest-get-type "^26.3.0"
+ pretty-format "^26.4.2"
+
+jest-matcher-utils@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.4.2.tgz#fa81f3693f7cb67e5fc1537317525ef3b85f4b06"
+ integrity sha512-KcbNqWfWUG24R7tu9WcAOKKdiXiXCbMvQYT6iodZ9k1f7065k0keUOW6XpJMMvah+hTfqkhJhRXmA3r3zMAg0Q==
+ dependencies:
+ chalk "^4.0.0"
+ jest-diff "^26.4.2"
+ jest-get-type "^26.3.0"
+ pretty-format "^26.4.2"
+
+jest-message-util@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.3.0.tgz#3bdb538af27bb417f2d4d16557606fd082d5841a"
+ integrity sha512-xIavRYqr4/otGOiLxLZGj3ieMmjcNE73Ui+LdSW/Y790j5acqCsAdDiLIbzHCZMpN07JOENRWX5DcU+OQ+TjTA==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ "@jest/types" "^26.3.0"
+ "@types/stack-utils" "^1.0.1"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.4"
+ micromatch "^4.0.2"
+ slash "^3.0.0"
+ stack-utils "^2.0.2"
+
+jest-mock@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-26.3.0.tgz#ee62207c3c5ebe5f35b760e1267fee19a1cfdeba"
+ integrity sha512-PeaRrg8Dc6mnS35gOo/CbZovoDPKAeB1FICZiuagAgGvbWdNNyjQjkOaGUa/3N3JtpQ/Mh9P4A2D4Fv51NnP8Q==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ "@types/node" "*"
+
+jest-pnp-resolver@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"
+ integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==
+
+jest-regex-util@^26.0.0:
+ version "26.0.0"
+ resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28"
+ integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==
+
+jest-resolve-dependencies@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-26.4.2.tgz#739bdb027c14befb2fe5aabbd03f7bab355f1dc5"
+ integrity sha512-ADHaOwqEcVc71uTfySzSowA/RdxUpCxhxa2FNLiin9vWLB1uLPad3we+JSSROq5+SrL9iYPdZZF8bdKM7XABTQ==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ jest-regex-util "^26.0.0"
+ jest-snapshot "^26.4.2"
+
+jest-resolve@^26.4.0:
+ version "26.4.0"
+ resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-26.4.0.tgz#6dc0af7fb93e65b73fec0368ca2b76f3eb59a6d7"
+ integrity sha512-bn/JoZTEXRSlEx3+SfgZcJAVuTMOksYq9xe9O6s4Ekg84aKBObEaVXKOEilULRqviSLAYJldnoWV9c07kwtiCg==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.4"
+ jest-pnp-resolver "^1.2.2"
+ jest-util "^26.3.0"
+ read-pkg-up "^7.0.1"
+ resolve "^1.17.0"
+ slash "^3.0.0"
+
+jest-runner@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-26.4.2.tgz#c3ec5482c8edd31973bd3935df5a449a45b5b853"
+ integrity sha512-FgjDHeVknDjw1gRAYaoUoShe1K3XUuFMkIaXbdhEys+1O4bEJS8Avmn4lBwoMfL8O5oFTdWYKcf3tEJyyYyk8g==
+ dependencies:
+ "@jest/console" "^26.3.0"
+ "@jest/environment" "^26.3.0"
+ "@jest/test-result" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ emittery "^0.7.1"
+ exit "^0.1.2"
+ graceful-fs "^4.2.4"
+ jest-config "^26.4.2"
+ jest-docblock "^26.0.0"
+ jest-haste-map "^26.3.0"
+ jest-leak-detector "^26.4.2"
+ jest-message-util "^26.3.0"
+ jest-resolve "^26.4.0"
+ jest-runtime "^26.4.2"
+ jest-util "^26.3.0"
+ jest-worker "^26.3.0"
+ source-map-support "^0.5.6"
+ throat "^5.0.0"
+
+jest-runtime@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-26.4.2.tgz#94ce17890353c92e4206580c73a8f0c024c33c42"
+ integrity sha512-4Pe7Uk5a80FnbHwSOk7ojNCJvz3Ks2CNQWT5Z7MJo4tX0jb3V/LThKvD9tKPNVNyeMH98J/nzGlcwc00R2dSHQ==
+ dependencies:
+ "@jest/console" "^26.3.0"
+ "@jest/environment" "^26.3.0"
+ "@jest/fake-timers" "^26.3.0"
+ "@jest/globals" "^26.4.2"
+ "@jest/source-map" "^26.3.0"
+ "@jest/test-result" "^26.3.0"
+ "@jest/transform" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ "@types/yargs" "^15.0.0"
+ chalk "^4.0.0"
+ collect-v8-coverage "^1.0.0"
+ exit "^0.1.2"
+ glob "^7.1.3"
+ graceful-fs "^4.2.4"
+ jest-config "^26.4.2"
+ jest-haste-map "^26.3.0"
+ jest-message-util "^26.3.0"
+ jest-mock "^26.3.0"
+ jest-regex-util "^26.0.0"
+ jest-resolve "^26.4.0"
+ jest-snapshot "^26.4.2"
+ jest-util "^26.3.0"
+ jest-validate "^26.4.2"
+ slash "^3.0.0"
+ strip-bom "^4.0.0"
+ yargs "^15.3.1"
+
+jest-serializer@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-26.3.0.tgz#1c9d5e1b74d6e5f7e7f9627080fa205d976c33ef"
+ integrity sha512-IDRBQBLPlKa4flg77fqg0n/pH87tcRKwe8zxOVTWISxGpPHYkRZ1dXKyh04JOja7gppc60+soKVZ791mruVdow==
+ dependencies:
+ "@types/node" "*"
+ graceful-fs "^4.2.4"
+
+jest-snapshot@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-26.4.2.tgz#87d3ac2f2bd87ea8003602fbebd8fcb9e94104f6"
+ integrity sha512-N6Uub8FccKlf5SBFnL2Ri/xofbaA68Cc3MGjP/NuwgnsvWh+9hLIR/DhrxbSiKXMY9vUW5dI6EW1eHaDHqe9sg==
+ dependencies:
+ "@babel/types" "^7.0.0"
+ "@jest/types" "^26.3.0"
+ "@types/prettier" "^2.0.0"
+ chalk "^4.0.0"
+ expect "^26.4.2"
+ graceful-fs "^4.2.4"
+ jest-diff "^26.4.2"
+ jest-get-type "^26.3.0"
+ jest-haste-map "^26.3.0"
+ jest-matcher-utils "^26.4.2"
+ jest-message-util "^26.3.0"
+ jest-resolve "^26.4.0"
+ natural-compare "^1.4.0"
+ pretty-format "^26.4.2"
+ semver "^7.3.2"
+
+jest-util@26.x, jest-util@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.3.0.tgz#a8974b191df30e2bf523ebbfdbaeb8efca535b3e"
+ integrity sha512-4zpn6bwV0+AMFN0IYhH/wnzIQzRaYVrz1A8sYnRnj4UXDXbOVtWmlaZkO9mipFqZ13okIfN87aDoJWB7VH6hcw==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ "@types/node" "*"
+ chalk "^4.0.0"
+ graceful-fs "^4.2.4"
+ is-ci "^2.0.0"
+ micromatch "^4.0.2"
+
+jest-validate@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-26.4.2.tgz#e871b0dfe97747133014dcf6445ee8018398f39c"
+ integrity sha512-blft+xDX7XXghfhY0mrsBCYhX365n8K5wNDC4XAcNKqqjEzsRUSXP44m6PL0QJEW2crxQFLLztVnJ4j7oPlQrQ==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ camelcase "^6.0.0"
+ chalk "^4.0.0"
+ jest-get-type "^26.3.0"
+ leven "^3.1.0"
+ pretty-format "^26.4.2"
+
+jest-watcher@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-26.3.0.tgz#f8ef3068ddb8af160ef868400318dc4a898eed08"
+ integrity sha512-XnLdKmyCGJ3VoF6G/p5ohbJ04q/vv5aH9ENI+i6BL0uu9WWB6Z7Z2lhQQk0d2AVZcRGp1yW+/TsoToMhBFPRdQ==
+ dependencies:
+ "@jest/test-result" "^26.3.0"
+ "@jest/types" "^26.3.0"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ jest-util "^26.3.0"
+ string-length "^4.0.1"
+
+jest-worker@^26.3.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f"
+ integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw==
+ dependencies:
+ "@types/node" "*"
+ merge-stream "^2.0.0"
+ supports-color "^7.0.0"
+
+jest@^26.0.1:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-26.4.2.tgz#7e8bfb348ec33f5459adeaffc1a25d5752d9d312"
+ integrity sha512-LLCjPrUh98Ik8CzW8LLVnSCfLaiY+wbK53U7VxnFSX7Q+kWC4noVeDvGWIFw0Amfq1lq2VfGm7YHWSLBV62MJw==
+ dependencies:
+ "@jest/core" "^26.4.2"
+ import-local "^3.0.2"
+ jest-cli "^26.4.2"
+
js-sha3@0.5.7, js-sha3@^0.5.7:
version "0.5.7"
resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7"
@@ -4868,11 +6252,48 @@ jsbn@~0.1.0:
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
+jsdom@^16.2.2:
+ version "16.4.0"
+ resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.4.0.tgz#36005bde2d136f73eee1a830c6d45e55408edddb"
+ integrity sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==
+ dependencies:
+ abab "^2.0.3"
+ acorn "^7.1.1"
+ acorn-globals "^6.0.0"
+ cssom "^0.4.4"
+ cssstyle "^2.2.0"
+ data-urls "^2.0.0"
+ decimal.js "^10.2.0"
+ domexception "^2.0.1"
+ escodegen "^1.14.1"
+ html-encoding-sniffer "^2.0.1"
+ is-potential-custom-element-name "^1.0.0"
+ nwsapi "^2.2.0"
+ parse5 "5.1.1"
+ request "^2.88.2"
+ request-promise-native "^1.0.8"
+ saxes "^5.0.0"
+ symbol-tree "^3.2.4"
+ tough-cookie "^3.0.1"
+ w3c-hr-time "^1.0.2"
+ w3c-xmlserializer "^2.0.0"
+ webidl-conversions "^6.1.0"
+ whatwg-encoding "^1.0.5"
+ whatwg-mimetype "^2.3.0"
+ whatwg-url "^8.0.0"
+ ws "^7.2.3"
+ xml-name-validator "^3.0.0"
+
jsesc@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
+jsesc@^2.5.1:
+ version "2.5.2"
+ resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
+ integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
+
jsesc@~0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
@@ -4888,6 +6309,11 @@ json-loader@^0.5.4:
resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==
+json-parse-even-better-errors@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.0.tgz#371873c5ffa44304a6ba12419bcfa95f404ae081"
+ integrity sha512-o3aP+RsWDJZayj1SbHNQAI8x0v3T3SKiGoZlNYfbUP1S3omJQ6i9CnqADqkSPaOAxwua4/1YWx5CM7oiChJt2Q==
+
json-rpc-engine@^3.4.0, json-rpc-engine@^3.6.0:
version "3.8.0"
resolved "https://registry.yarnpkg.com/json-rpc-engine/-/json-rpc-engine-3.8.0.tgz#9d4ff447241792e1d0a232f6ef927302bb0c62a9"
@@ -4939,6 +6365,13 @@ json-stringify-safe@~5.0.1:
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
+json5@2.x, json5@^2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43"
+ integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==
+ dependencies:
+ minimist "^1.2.5"
+
json5@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
@@ -5058,6 +6491,11 @@ klaw@^1.0.0:
optionalDependencies:
graceful-fs "^4.1.9"
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
lazy-cache@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
@@ -5206,6 +6644,11 @@ levelup@^1.2.1:
semver "~5.4.1"
xtend "~4.0.0"
+leven@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
+ integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+
levn@^0.3.0, levn@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
@@ -5214,6 +6657,11 @@ levn@^0.3.0, levn@~0.3.0:
prelude-ls "~1.1.2"
type-check "~0.3.2"
+lines-and-columns@^1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00"
+ integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
+
load-json-file@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
@@ -5265,11 +6713,28 @@ locate-path@^3.0.0:
p-locate "^3.0.0"
path-exists "^3.0.0"
+locate-path@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
+ integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
+ dependencies:
+ p-locate "^4.1.0"
+
lodash.assign@^4.0.3, lodash.assign@^4.0.6:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=
+lodash.memoize@4.x:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+ integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
+
+lodash.sortby@^4.7.0:
+ version "4.7.0"
+ resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
+ integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=
+
lodash@4.17.14:
version "4.17.14"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba"
@@ -5280,6 +6745,11 @@ lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
+lodash@^4.17.19:
+ version "4.17.20"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
+ integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
+
log-symbols@2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a"
@@ -5370,11 +6840,30 @@ make-dir@^1.0.0:
dependencies:
pify "^3.0.0"
+make-dir@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f"
+ integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==
+ dependencies:
+ semver "^6.0.0"
+
+make-error@1.x:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+ integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+
make-error@^1.1.1:
version "1.3.5"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8"
integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==
+makeerror@1.0.x:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
+ dependencies:
+ tmpl "1.0.x"
+
map-age-cleaner@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a"
@@ -5466,6 +6955,11 @@ merge-descriptors@1.0.1:
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
+merge-stream@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
+
merkle-patricia-tree@2.3.2, merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a"
@@ -5504,6 +6998,14 @@ micromatch@^3.1.10, micromatch@^3.1.4:
snapdragon "^0.8.1"
to-regex "^3.0.2"
+micromatch@^4.0.2:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259"
+ integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==
+ dependencies:
+ braces "^3.0.1"
+ picomatch "^2.0.5"
+
miller-rabin@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
@@ -5573,7 +7075,7 @@ minimist@0.0.8:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
-minimist@^1.2.0, minimist@^1.2.5:
+minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
@@ -5635,6 +7137,11 @@ mkdirp@0.5.5, mkdirp@~0.5.0:
dependencies:
minimist "^1.2.5"
+mkdirp@1.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
+ integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
+
mocha@^6.2.1:
version "6.2.1"
resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.1.tgz#da941c99437da9bac412097859ff99543969f94c"
@@ -5826,6 +7333,11 @@ node-fetch@~1.7.1:
encoding "^0.1.11"
is-stream "^1.0.1"
+node-int64@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
+
node-libs-browser@^2.0.0:
version "2.2.1"
resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425"
@@ -5855,7 +7367,24 @@ node-libs-browser@^2.0.0:
util "^0.11.0"
vm-browserify "^1.0.1"
-normalize-package-data@^2.3.2:
+node-modules-regexp@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40"
+ integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
+
+node-notifier@^8.0.0:
+ version "8.0.0"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620"
+ integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==
+ dependencies:
+ growly "^1.3.0"
+ is-wsl "^2.2.0"
+ semver "^7.3.2"
+ shellwords "^0.1.1"
+ uuid "^8.3.0"
+ which "^2.0.2"
+
+normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
@@ -5889,6 +7418,13 @@ npm-run-path@^2.0.0:
dependencies:
path-key "^2.0.0"
+npm-run-path@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
+ dependencies:
+ path-key "^3.0.0"
+
number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
@@ -5902,6 +7438,11 @@ number-to-bn@1.7.0:
bn.js "4.11.6"
strip-hex-prefix "1.0.0"
+nwsapi@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
+ integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==
+
oauth-sign@~0.9.0:
version "0.9.0"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
@@ -6016,7 +7557,7 @@ openzeppelin-solidity@^2.1.1:
resolved "https://registry.yarnpkg.com/openzeppelin-solidity/-/openzeppelin-solidity-2.3.0.tgz#1ab7b4cc3782a5472ed61eb740c56a8bfdd74119"
integrity sha512-QYeiPLvB1oSbDt6lDQvvpx7k8ODczvE474hb2kLXZBPKMsxKT1WxTCHBYrCU7kS7hfAku4DcJ0jqOyL+jvjwQw==
-optionator@^0.8.3:
+optionator@^0.8.1, optionator@^0.8.3:
version "0.8.3"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"
integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==
@@ -6083,6 +7624,11 @@ p-defer@^1.0.0:
resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=
+p-each-series@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48"
+ integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ==
+
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
@@ -6107,6 +7653,13 @@ p-limit@^2.0.0:
dependencies:
p-try "^2.0.0"
+p-limit@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
+ integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
+ dependencies:
+ p-try "^2.0.0"
+
p-locate@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
@@ -6121,6 +7674,13 @@ p-locate@^3.0.0:
dependencies:
p-limit "^2.0.0"
+p-locate@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
+ integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
+ dependencies:
+ p-limit "^2.2.0"
+
p-timeout@^1.1.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386"
@@ -6177,6 +7737,21 @@ parse-json@^2.2.0:
dependencies:
error-ex "^1.2.0"
+parse-json@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.1.0.tgz#f96088cdf24a8faa9aea9a009f2d9d942c999646"
+ integrity sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==
+ dependencies:
+ "@babel/code-frame" "^7.0.0"
+ error-ex "^1.3.1"
+ json-parse-even-better-errors "^2.3.0"
+ lines-and-columns "^1.1.6"
+
+parse5@5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
+ integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==
+
parseurl@~1.3.3:
version "1.3.3"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
@@ -6232,6 +7807,11 @@ path-exists@^3.0.0:
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
+path-exists@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
+ integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
+
path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@@ -6242,6 +7822,11 @@ path-key@^2.0.0, path-key@^2.0.1:
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
+path-key@^3.0.0, path-key@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
+
path-parse@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
@@ -6301,7 +7886,7 @@ performance-now@^2.1.0:
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
-picomatch@^2.0.4:
+picomatch@^2.0.4, picomatch@^2.0.5:
version "2.2.2"
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==
@@ -6328,6 +7913,13 @@ pinkie@^2.0.0:
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
+pirates@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87"
+ integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==
+ dependencies:
+ node-modules-regexp "^1.0.0"
+
pkg-dir@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
@@ -6335,6 +7927,13 @@ pkg-dir@^2.0.0:
dependencies:
find-up "^2.1.0"
+pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
posix-character-classes@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
@@ -6365,6 +7964,26 @@ prepend-http@^2.0.0:
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897"
integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=
+pretty-format@^25.2.1, pretty-format@^25.5.0:
+ version "25.5.0"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.5.0.tgz#7873c1d774f682c34b8d48b6743a2bf2ac55791a"
+ integrity sha512-kbo/kq2LQ/A/is0PQwsEHM7Ca6//bGPPvU6UnsdDRSKTWxT/ru/xb88v4BJf6a69H+uTytOEsTusT9ksd/1iWQ==
+ dependencies:
+ "@jest/types" "^25.5.0"
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^16.12.0"
+
+pretty-format@^26.4.2:
+ version "26.4.2"
+ resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.4.2.tgz#d081d032b398e801e2012af2df1214ef75a81237"
+ integrity sha512-zK6Gd8zDsEiVydOCGLkoBoZuqv8VTiHyAbKznXe/gaph/DAeZOmit9yMfgIz5adIgAMMs5XfoYSwAX3jcCO1tA==
+ dependencies:
+ "@jest/types" "^26.3.0"
+ ansi-regex "^5.0.0"
+ ansi-styles "^4.0.0"
+ react-is "^16.12.0"
+
private@^0.1.6, private@^0.1.8:
version "0.1.8"
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
@@ -6398,6 +8017,14 @@ promise-to-callback@^1.0.0:
is-fn "^1.0.0"
set-immediate-shim "^1.0.1"
+prompts@^2.0.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068"
+ integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.4"
+
proxy-addr@~2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34"
@@ -6421,6 +8048,11 @@ psl@^1.1.24:
resolved "https://registry.yarnpkg.com/psl/-/psl-1.3.0.tgz#e1ebf6a3b5564fa8376f3da2275da76d875ca1bd"
integrity sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==
+psl@^1.1.28:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
+ integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
+
public-encrypt@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
@@ -6504,7 +8136,7 @@ punycode@^1.2.4, punycode@^1.4.1:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
-punycode@^2.1.0:
+punycode@^2.1.0, punycode@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
@@ -6568,6 +8200,11 @@ raw-body@2.4.0:
iconv-lite "0.4.24"
unpipe "1.0.0"
+react-is@^16.12.0:
+ version "16.13.1"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
+ integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
+
read-pkg-up@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
@@ -6584,6 +8221,15 @@ read-pkg-up@^2.0.0:
find-up "^2.0.0"
read-pkg "^2.0.0"
+read-pkg-up@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
+ integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
+ dependencies:
+ find-up "^4.1.0"
+ read-pkg "^5.2.0"
+ type-fest "^0.8.1"
+
read-pkg@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
@@ -6602,6 +8248,16 @@ read-pkg@^2.0.0:
normalize-package-data "^2.3.2"
path-type "^2.0.0"
+read-pkg@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
+ integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
+ dependencies:
+ "@types/normalize-package-data" "^2.4.0"
+ normalize-package-data "^2.5.0"
+ parse-json "^5.0.0"
+ type-fest "^0.6.0"
+
readable-stream@^1.0.33:
version "1.1.14"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
@@ -6744,6 +8400,22 @@ repeating@^2.0.0:
dependencies:
is-finite "^1.0.0"
+request-promise-core@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f"
+ integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==
+ dependencies:
+ lodash "^4.17.19"
+
+request-promise-native@^1.0.8:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28"
+ integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==
+ dependencies:
+ request-promise-core "1.1.4"
+ stealthy-require "^1.1.1"
+ tough-cookie "^2.3.3"
+
request@^2.79.0, request@^2.85.0:
version "2.88.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
@@ -6770,6 +8442,32 @@ request@^2.79.0, request@^2.85.0:
tunnel-agent "^0.6.0"
uuid "^3.3.2"
+request@^2.88.2:
+ version "2.88.2"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
+ integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
+ dependencies:
+ aws-sign2 "~0.7.0"
+ aws4 "^1.8.0"
+ caseless "~0.12.0"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
+ forever-agent "~0.6.1"
+ form-data "~2.3.2"
+ har-validator "~5.1.3"
+ http-signature "~1.2.0"
+ is-typedarray "~1.0.0"
+ isstream "~0.1.2"
+ json-stringify-safe "~5.0.1"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
+ performance-now "^2.1.0"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.5.0"
+ tunnel-agent "^0.6.0"
+ uuid "^3.3.2"
+
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -6795,11 +8493,23 @@ require-main-filename@^2.0.0:
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
resolve-from@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+resolve-from@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
+ integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+
resolve-url@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
@@ -6812,7 +8522,7 @@ resolve@^1.10.0:
dependencies:
path-parse "^1.0.6"
-resolve@^1.12.0, resolve@^1.13.1:
+resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2:
version "1.17.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444"
integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==
@@ -6904,6 +8614,11 @@ rlp@^2.2.2, rlp@^2.2.3:
dependencies:
bn.js "^4.11.1"
+rsvp@^4.8.4:
+ version "4.8.5"
+ resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734"
+ integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==
+
run-async@^2.4.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
@@ -6955,6 +8670,28 @@ safe-regex@^1.1.0:
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+sane@^4.0.3:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded"
+ integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==
+ dependencies:
+ "@cnakazawa/watch" "^1.0.3"
+ anymatch "^2.0.0"
+ capture-exit "^2.0.0"
+ exec-sh "^0.3.2"
+ execa "^1.0.0"
+ fb-watchman "^2.0.0"
+ micromatch "^3.1.4"
+ minimist "^1.1.1"
+ walker "~1.0.5"
+
+saxes@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d"
+ integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==
+ dependencies:
+ xmlchars "^2.2.0"
+
scrypt-js@2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.3.tgz#bb0040be03043da9a012a2cea9fc9f852cfc87d4"
@@ -7024,12 +8761,17 @@ semaphore@>=1.0.1, semaphore@^1.0.3, semaphore@^1.1.0:
resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa"
integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==
-"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0:
+"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
-semver@^6.1.2, semver@^6.3.0:
+semver@7.x, semver@^7.3.2:
+ version "7.3.2"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
+ integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
+
+semver@^6.0.0, semver@^6.1.2, semver@^6.3.0:
version "6.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
@@ -7136,11 +8878,28 @@ shebang-command@^1.2.0:
dependencies:
shebang-regex "^1.0.0"
+shebang-command@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
+ dependencies:
+ shebang-regex "^3.0.0"
+
shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
+shebang-regex@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
+
+shellwords@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
+
signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
@@ -7178,6 +8937,11 @@ sinon@^7.5.0:
nise "^1.5.2"
supports-color "^5.5.0"
+sisteransi@^1.0.4:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
@@ -7188,6 +8952,11 @@ slash@^2.0.0:
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==
+slash@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
+ integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
+
slice-ansi@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
@@ -7283,7 +9052,7 @@ source-map-support@^0.4.15:
dependencies:
source-map "^0.5.6"
-source-map-support@^0.5.17:
+source-map-support@^0.5.17, source-map-support@^0.5.6:
version "0.5.19"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"
integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==
@@ -7296,16 +9065,21 @@ source-map-url@^0.4.0:
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
-source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
+source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-source-map@^0.6.0, source-map@~0.6.1:
+source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+source-map@^0.7.3:
+ version "0.7.3"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
+ integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
+
spdx-correct@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4"
@@ -7366,6 +9140,13 @@ sshpk@^1.7.0:
safer-buffer "^2.0.2"
tweetnacl "~0.14.0"
+stack-utils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.2.tgz#5cf48b4557becb4638d0bc4f21d23f5d19586593"
+ integrity sha512-0H7QK2ECz3fyZMzQ8rH0j2ykpfbnd20BFtfg/SqVC2+sCTtcw0aDTGB7dk+de4U4uUeuz6nOtJcrkFFLG1B0Rg==
+ dependencies:
+ escape-string-regexp "^2.0.0"
+
static-extend@^0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@@ -7379,6 +9160,11 @@ static-extend@^0.1.1:
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+stealthy-require@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
+ integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=
+
stream-browserify@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b"
@@ -7411,6 +9197,14 @@ strict-uri-encode@^1.0.0:
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
+string-length@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.1.tgz#4a973bf31ef77c4edbceadd6af2611996985f8a1"
+ integrity sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==
+ dependencies:
+ char-regex "^1.0.2"
+ strip-ansi "^6.0.0"
+
string-width@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
@@ -7437,7 +9231,7 @@ string-width@^3.0.0, string-width@^3.1.0:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^5.1.0"
-string-width@^4.1.0:
+string-width@^4.1.0, string-width@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
@@ -7557,6 +9351,11 @@ strip-bom@^3.0.0:
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
+strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
strip-dirs@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/strip-dirs/-/strip-dirs-2.1.0.tgz#4987736264fc344cf20f6c34aca9d13d1d4ed6c5"
@@ -7569,6 +9368,11 @@ strip-eof@^1.0.0:
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
+strip-final-newline@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
+
strip-hex-prefix@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f"
@@ -7612,6 +9416,13 @@ supports-color@^5.3.0, supports-color@^5.5.0:
dependencies:
has-flag "^3.0.0"
+supports-color@^7.0.0:
+ version "7.2.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
+ dependencies:
+ has-flag "^4.0.0"
+
supports-color@^7.1.0:
version "7.1.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
@@ -7619,6 +9430,14 @@ supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
+supports-hyperlinks@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47"
+ integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==
+ dependencies:
+ has-flag "^4.0.0"
+ supports-color "^7.0.0"
+
swarm-js@0.1.39:
version "0.1.39"
resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.39.tgz#79becb07f291d4b2a178c50fee7aa6e10342c0e8"
@@ -7637,6 +9456,11 @@ swarm-js@0.1.39:
tar "^4.0.2"
xhr-request-promise "^0.1.2"
+symbol-tree@^3.2.4:
+ version "3.2.4"
+ resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
+ integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
+
table@^5.2.3:
version "5.4.6"
resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e"
@@ -7697,6 +9521,23 @@ tar@^4.0.2:
safe-buffer "^5.1.2"
yallist "^3.0.3"
+terminal-link@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994"
+ integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ supports-hyperlinks "^2.0.0"
+
+test-exclude@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e"
+ integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==
+ dependencies:
+ "@istanbuljs/schema" "^0.1.2"
+ glob "^7.1.4"
+ minimatch "^3.0.4"
+
testrpc@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed"
@@ -7712,6 +9553,11 @@ throat@^4.0.0, throat@^4.1.0:
resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a"
integrity sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=
+throat@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b"
+ integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==
+
through2@^2.0.3:
version "2.0.5"
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd"
@@ -7751,6 +9597,11 @@ tmp@0.1.0:
dependencies:
rimraf "^2.6.3"
+tmpl@1.0.x:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+ integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
+
to-arraybuffer@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
@@ -7766,6 +9617,11 @@ to-fast-properties@^1.0.3:
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
+to-fast-properties@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
+ integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
+
to-object-path@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
@@ -7808,6 +9664,23 @@ toidentifier@1.0.0:
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
+tough-cookie@^2.3.3, tough-cookie@~2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
+ integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
+ dependencies:
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
+tough-cookie@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2"
+ integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==
+ dependencies:
+ ip-regex "^2.1.0"
+ psl "^1.1.28"
+ punycode "^2.1.1"
+
tough-cookie@~2.4.3:
version "2.4.3"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
@@ -7816,11 +9689,35 @@ tough-cookie@~2.4.3:
psl "^1.1.24"
punycode "^1.4.1"
+tr46@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.0.2.tgz#03273586def1595ae08fedb38d7733cee91d2479"
+ integrity sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==
+ dependencies:
+ punycode "^2.1.1"
+
trim-right@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
+ts-jest@^26.1.0:
+ version "26.3.0"
+ resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.3.0.tgz#6b2845045347dce394f069bb59358253bc1338a9"
+ integrity sha512-Jq2uKfx6bPd9+JDpZNMBJMdMQUC3sJ08acISj8NXlVgR2d5OqslEHOR2KHMgwymu8h50+lKIm0m0xj/ioYdW2Q==
+ dependencies:
+ "@types/jest" "26.x"
+ bs-logger "0.x"
+ buffer-from "1.x"
+ fast-json-stable-stringify "2.x"
+ jest-util "26.x"
+ json5 "2.x"
+ lodash.memoize "4.x"
+ make-error "1.x"
+ mkdirp "1.x"
+ semver "7.x"
+ yargs-parser "18.x"
+
ts-node@^8.9.1:
version "8.9.1"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.9.1.tgz#2f857f46c47e91dcd28a14e052482eb14cfd65a5"
@@ -7888,6 +9785,11 @@ type-fest@^0.11.0:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
+type-fest@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
+ integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
+
type-fest@^0.8.1:
version "0.8.1"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
@@ -8126,11 +10028,25 @@ uuid@^3.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866"
integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==
+uuid@^8.3.0:
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea"
+ integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==
+
v8-compile-cache@^2.0.3:
version "2.1.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e"
integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==
+v8-to-istanbul@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-5.0.1.tgz#0608f5b49a481458625edb058488607f25498ba5"
+ integrity sha512-mbDNjuDajqYe3TXFk5qxcQy8L1msXNE37WTlLoqqpBfRsimbNcrlhQlDPntmECEcUvdC+AQ8CyMMf6EUx1r74Q==
+ dependencies:
+ "@types/istanbul-lib-coverage" "^2.0.1"
+ convert-source-map "^1.6.0"
+ source-map "^0.7.3"
+
validate-npm-package-license@^3.0.1:
version "3.0.4"
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
@@ -8158,6 +10074,27 @@ vm-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
+w3c-hr-time@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
+ integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==
+ dependencies:
+ browser-process-hrtime "^1.0.0"
+
+w3c-xmlserializer@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a"
+ integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==
+ dependencies:
+ xml-name-validator "^3.0.0"
+
+walker@^1.0.7, walker@~1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
+ dependencies:
+ makeerror "1.0.x"
+
watchpack@^1.4.0:
version "1.6.1"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.1.tgz#280da0a8718592174010c078c7585a74cd8cd0e2"
@@ -8446,6 +10383,16 @@ web3@1.2.4:
web3-shh "1.2.4"
web3-utils "1.2.4"
+webidl-conversions@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
+ integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==
+
+webidl-conversions@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514"
+ integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==
+
webpack-sources@^1.0.1:
version "1.4.3"
resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933"
@@ -8492,11 +10439,32 @@ websocket@1.0.29:
typedarray-to-buffer "^3.1.5"
yaeti "^0.0.6"
+whatwg-encoding@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
+ dependencies:
+ iconv-lite "0.4.24"
+
whatwg-fetch@2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==
+whatwg-mimetype@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"
+ integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==
+
+whatwg-url@^8.0.0:
+ version "8.2.1"
+ resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.2.1.tgz#ed73417230784b281fb2a32c3c501738b46167c3"
+ integrity sha512-ZmVCr6nfBeaMxEHALLEGy0LszYjpJqf6PVNQUQ1qd9Et+q7Jpygd4rGGDXgHjD8e99yLFseD69msHDM4YwPZ4A==
+ dependencies:
+ lodash.sortby "^4.7.0"
+ tr46 "^2.0.2"
+ webidl-conversions "^6.1.0"
+
which-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
@@ -8514,6 +10482,13 @@ which@1.3.1, which@^1.2.9:
dependencies:
isexe "^2.0.0"
+which@^2.0.1, which@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
+ dependencies:
+ isexe "^2.0.0"
+
wide-align@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
@@ -8558,11 +10533,30 @@ wrap-ansi@^5.1.0:
string-width "^3.0.0"
strip-ansi "^5.0.0"
+wrap-ansi@^6.2.0:
+ version "6.2.0"
+ resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
+ integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
+ dependencies:
+ ansi-styles "^4.0.0"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
+write-file-atomic@^3.0.0:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8"
+ integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==
+ dependencies:
+ imurmurhash "^0.1.4"
+ is-typedarray "^1.0.0"
+ signal-exit "^3.0.2"
+ typedarray-to-buffer "^3.1.5"
+
write@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
@@ -8591,6 +10585,11 @@ ws@^5.1.1:
dependencies:
async-limiter "~1.0.0"
+ws@^7.2.3:
+ version "7.3.1"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.3.1.tgz#d0547bf67f7ce4f12a72dfe31262c68d7dc551c8"
+ integrity sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA==
+
wsrun@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/wsrun/-/wsrun-5.2.0.tgz#a7c0587cb371ea29352f0b3cad002ea839a25b0f"
@@ -8643,6 +10642,16 @@ xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3:
parse-headers "^2.0.0"
xtend "^4.0.0"
+xml-name-validator@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a"
+ integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==
+
+xmlchars@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb"
+ integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==
+
xmlhttprequest@1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
@@ -8701,6 +10710,14 @@ yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.1, yargs-parser@^1
camelcase "^5.0.0"
decamelize "^1.2.0"
+yargs-parser@18.x, yargs-parser@^18.1.2:
+ version "18.1.3"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+ integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
+ dependencies:
+ camelcase "^5.0.0"
+ decamelize "^1.2.0"
+
yargs-parser@^2.4.1:
version "2.4.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4"
@@ -8799,6 +10816,23 @@ yargs@^11.1.1:
y18n "^3.2.1"
yargs-parser "^9.0.2"
+yargs@^15.3.1:
+ version "15.4.1"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
+ integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
+ dependencies:
+ cliui "^6.0.0"
+ decamelize "^1.2.0"
+ find-up "^4.1.0"
+ get-caller-file "^2.0.1"
+ require-directory "^2.1.1"
+ require-main-filename "^2.0.0"
+ set-blocking "^2.0.0"
+ string-width "^4.2.0"
+ which-module "^2.0.0"
+ y18n "^4.0.0"
+ yargs-parser "^18.1.2"
+
yargs@^4.7.1:
version "4.8.1"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0"