diff --git a/README.md b/README.md
index 2de1fc39..4519b99b 100644
--- a/README.md
+++ b/README.md
@@ -46,7 +46,6 @@ npx hardhat coverage [command-options]
| testfiles | `--testfiles "test/registry/*.ts"` | Test file(s) to run. (Globs must be enclosed by quotes and use [globby matching patterns][38])|
| sources | `--sources myFolder` or `--sources myFile.sol` | Path to *single* folder or file to target for coverage. Path is relative to Hardhat's `paths.sources` (usually `contracts/`) |
| solcoverjs | `--solcoverjs ./../.solcover.js` | Relative path from working directory to config. Useful for monorepo packages that share settings. (Path must be "./" prefixed) |
-| network | `--network development` | Use network settings defined in the Hardhat config |
| temp[*][14] | `--temp build` | :warning: **Caution** :warning: Path to a *disposable* folder to store compilation artifacts in. Useful when your test setup scripts include hard-coded paths to a build directory. [More...][14] |
| matrix | `--matrix` | Generate a JSON object that maps which mocha tests hit which lines of code. (Useful as an input for some fuzzing, mutation testing and fault-localization algorithms.) [More...][39]|
@@ -83,11 +82,9 @@ module.exports = {
| onPreCompile[*][14] | *Function* | | Hook run *after* filesystem and compiler configuration is applied, *before* the compiler is run. Can be used with the other hooks to be able to generate coverage reports on non-standard / customized directory structures, as well as contracts with absolute import paths. [More...][23] |
| onCompileComplete[*][14] | *Function* | | Hook run *after* compilation completes, *before* tests are run. Useful if you have secondary compilation steps or need to modify built artifacts. [More...][23]|
| onTestsComplete[*][14] | *Function* | | Hook run *after* the tests complete, *before* Istanbul reports are generated. [More...][23]|
-| onIstanbulComplete[*][14] | *Function* | | Hook run *after* the Istanbul reports are generated, *before* the ganache server is shut down. Useful if you need to clean resources up. [More...][23]|
+| onIstanbulComplete[*][14] | *Function* | | Hook run *after* the Istanbul reports are generated, *before* the coverage task completes. Useful if you need to clean resources up. [More...][23]|
| configureYulOptimizer | *Boolean* | false | (Experimental) Setting to `true` should resolve "stack too deep" compiler errors in large projects using ABIEncoderV2 |
| solcOptimizerDetails | *Object* | `undefined` |(Experimental) Must be used in combination with `configureYulOptimizer`. Allows you configure solc's [optimizer details][1001]. Useful if the default remedy for stack-too-deep errors doesn't work in your case (See FAQ below). |
-| client | *Object* | `require("ganache-core")` | Ganache only: useful if you need a specific ganache version |
-| providerOptions | *Object* | `{ }` | Ganache only: [ganache-core options][1] |
[* Advanced use][14]
@@ -143,7 +140,6 @@ $ git clone https://github.com/sc-forks/solidity-coverage.git
$ yarn
```
-[1]: https://github.com/trufflesuite/ganache-core#options
[2]: https://istanbul.js.org/docs/advanced/alternative-reporters/
[3]: https://mochajs.org/api/mocha
[4]: https://github.com/sc-forks/solidity-coverage/blob/master/docs/faq.md#running-out-of-gas
diff --git a/docs/advanced.md b/docs/advanced.md
index b42c7ca9..891e843f 100644
--- a/docs/advanced.md
+++ b/docs/advanced.md
@@ -27,7 +27,7 @@ module.exports = {
The plugin exposes a set of workflow hooks that let you run arbitrary async logic between the main
stages of the coverage generation process. These are useful for tasks like launching secondary
-services which need to connect to a running ganache instance (ex: the Oraclize/Provable bridge),
+services which need to connect to a running ethereum client instance (ex: the Oraclize/Provable bridge),
or reading data from the compilation artifacts to run special preparatory steps for your tests.
The stages/hooks are (in order of execution):
diff --git a/docs/api.md b/docs/api.md
index 309546c2..24efc956 100644
--- a/docs/api.md
+++ b/docs/api.md
@@ -8,9 +8,9 @@ table below shows how its core methods relate to the stages of a test run:
| Test Stage | API Method | Description |
|---------------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| compilation | `instrument` | A **pre-compilation** step: Rewrites contracts and generates an instrumentation data map. |
-| client launch | `ganache` | A **substitute** step: Launches a ganache client with coverage collection enabled in its VM. As the client runs it will mark line/branch hits on the instrumentation data map. |
+| client launch | `attachToHardhatVM` | A **pre-test** step: Enables coverage collection enabled in a HardhatEVM client. As the client runs it will mark line/branch hits on the instrumentation data map. |
| test | `report` | A **post-test** step: Generates a coverage report from the data collected by the VM after tests complete. |
-| exit | `finish` | A **substitute** step: Shuts client down |
+
[3]: https://github.com/gotwarlost/istanbul
@@ -20,8 +20,8 @@ table below shows how its core methods relate to the stages of a test run:
disposable set of contracts/artifacts which coverage must use in lieu of the 'real' (uninstrumented)
contracts.
-+ there are two complete [coverage tool/plugin implementations][5] (for Hardhat and Truffle)
-which can be used as sources if you're building something similar.
++ there is a complete [coverage tool/plugin implementation][5] for Hardhat
+which can be used as a source if you're building something similar.
[5]: https://github.com/sc-forks/solidity-coverage/tree/master/plugins
@@ -31,9 +31,8 @@ which can be used as sources if you're building something similar.
- [API Methods](#api)
* [constructor](#constructor)
* [instrument](#instrument)
- * [ganache](#ganache)
+ * [attachToHardhatVM](#attachToHardhatVM)
* [report](#report)
- * [finish](#finish)
* [getInstrumentationData](#getinstrumentationdata)
* [setInstrumentationData](#setinstrumentationdata)
- [Utils Methods](#utils)
@@ -64,13 +63,10 @@ Creates a coverage API instance. Configurable.
| ------ | ---- | ------- | ----------- |
| port | *Number* | 8555 | Port to launch client on |
| silent | *Boolean* | false | Suppress logging output |
-| client | *Object* | `require("ganache-core")` | JS Ethereum client |
-| providerOptions | *Object* | `{ }` | [ganache-core options][1] |
| skipFiles | *Array* | `[]` | Array of contracts or folders (with paths expressed relative to the `contracts` directory) that should be skipped when doing instrumentation. |
| istanbulFolder | *String* | `./coverage` | Folder location for Istanbul coverage reports. |
| istanbulReporter | *Array* | `['html', 'lcov', 'text', 'json']` | [Istanbul coverage reporters][2] |
-[1]: https://github.com/trufflesuite/ganache-core#options
[2]: https://istanbul.js.org/docs/advanced/alternative-reporters/
--------------
@@ -100,33 +96,37 @@ const instrumented = api.instrument(contracts)
--------------
-## ganache
+## attachToHardhatVM
-Enables coverage data collection on an in-process ganache server. By default, this method launches
-the server, begins listening on the port specified in the [config](#constructor) (or 8555 if unspecified), and
-returns a url string. When `autoLaunchServer` is false, method returns `ganache.server` so you can control
-the `server.listen` invocation yourself.
+Enables coverage data collection on a HardhatEVM provider. (You will need to create a hardhat provider with the correct VM settings as shown below before invoking this method.)
**Parameters**
-- `client` **Object**: (*Optional*) ganache module
-- `autoLaunchServer` **Boolean**: (*Optional*)
+- `provider` **Object**: Hardhat provider
-Returns **Promise** Address of server to connect to, or initialized, unlaunched server
+Returns **Promise**
**Example**
```javascript
-const client = require('ganache-cli');
+const { createProvider } = require("hardhat/internal/core/providers/construction");
+const { resolveConfig } = require("hardhat/internal/core/config/config-resolution");
+const { HARDHAT_NETWORK_NAME } = require("hardhat/plugins")
-const api = new CoverageAPI( { client: client } );
-const address = await api.ganache();
+const api = new CoverageAPI( { ... } );
+const config = resolveConfig("./", {});
-> http://127.0.0.1:8555
+config.networks[HARDHAT_NETWORK_NAME].allowUnlimitedContractSize = true;
+config.networks[HARDHAT_NETWORK_NAME].blockGasLimit = api.gasLimitNumber;
+config.networks[HARDHAT_NETWORK_NAME].gas = api.gasLimit;
+config.networks[HARDHAT_NETWORK_NAME].gasPrice = api.gasPrice;
+config.networks[HARDHAT_NETWORK_NAME].initialBaseFeePerGas = 0;
-// Alternatively...
+const provider = await createProvider(
+ config,
+ HARDHAT_NETWORK_NAME
+)
-const server = await api.ganache(client, false);
-await pify(server.listen)(8545));
+await api.attachToHardhatVM(provider);
```
--------------
@@ -148,22 +148,6 @@ await api.report('./coverage_4A3cd2b'); // Default folder name is 'coverage'
-------------
-## finish
-
-Shuts down coverage-enabled ganache server instance
-
-Returns **Promise**
-
-**Example**
-```javascript
-const client = require('ganache-cli');
-
-await api.ganache(client); // Server listening...
-await api.finish(); // Server shut down.
-```
-
--------------
-
## getInstrumentationData
Returns a copy of the hit map created during instrumentation. Useful if you'd like to delegate
@@ -193,7 +177,7 @@ const data = load(data); // Pseudo-code
api.setIntrumentationData(data);
// Client will collect data for the loaded map
-const address = await api.ganache(client);
+await api.attachToHardhatVM(provider);
// Or to `report` instrumentation data which was collected in a different process.
const data = load(data); // Pseudo-code
@@ -348,8 +332,7 @@ utils.save(instrumented, config.contractsDir, tempContractsDir);
## finish
-Deletes temporary folders and shuts the ganache server down. Is tolerant - if folders or ganache
-server don't exist it will return silently.
+Deletes temporary folders. Is tolerant - if folders don't exist it will return silently.
**Parameters**
diff --git a/lib/api.js b/lib/api.js
index 30bd4f55..296fcb48 100644
--- a/lib/api.js
+++ b/lib/api.js
@@ -4,7 +4,6 @@ const fs = require('fs');
const path = require('path');
const istanbul = require('sc-istanbul');
const assert = require('assert');
-const detect = require('detect-port');
const _ = require('lodash/lang');
const ConfigValidator = require('./validator');
@@ -45,20 +44,10 @@ class API {
this.onIstanbulComplete = config.onIstanbulComplete || this.defaultHook;
this.onPreCompile = config.onPreCompile || this.defaultHook;
- this.server = null;
- this.defaultPort = 8555;
- this.client = config.client;
- this.defaultNetworkName = 'soliditycoverage';
- this.port = config.port || this.defaultPort;
- this.host = config.host || "127.0.0.1";
- this.providerOptions = config.providerOptions || {};
- this.autoLaunchServer = config.autoLaunchServer === false ? false : true;
-
this.skipFiles = config.skipFiles || [];
this.log = config.log || console.log;
this.gasLimit = 0xffffffffff // default "gas sent" with transactions
- this.gasLimitString = "0x1fffffffffffff"; // block gas limit for ganache (higher than "gas sent")
this.gasLimitNumber = 0x1fffffffffffff; // block gas limit for Hardhat
this.gasPrice = 0x01;
@@ -138,56 +127,6 @@ class API {
this.instrumenter.instrumentationData = _.cloneDeep(data);
}
- /**
- * Enables coverage collection on in-process ethereum client server, hooking the DataCollector
- * to its VM. By default, method will return a url after server has begun listening on the port
- * specified in the config. When `autoLaunchServer` is false, method returns`ganache.server` so
- * the consumer can control the 'server.listen' invocation themselves.
- * @param {Object} client ganache client
- * @param {Boolean} autoLaunchServer boolean
- * @return { (String | Server) } address of server to connect to, or initialized, unlaunched server.
- */
- async ganache(client, autoLaunchServer){
- // Check for port-in-use
- if (await detect(this.port) !== this.port){
- throw new Error(this.ui.generate('server-fail', [this.port]))
- }
-
- this.collector = new DataCollector(this.instrumenter.instrumentationData);
-
- this.providerOptions.gasLimit =
- 'gasLimit' in this.providerOptions
- ? this.providerOptions.gasLimit
- : this.gasLimitString;
-
- this.providerOptions.allowUnlimitedContractSize =
- 'allowUnlimitedContractSize' in this.providerOptions
- ? this.providerOptions.allowUnlimitedContractSize
- : true;
-
- // Attach to vm step of supplied client
- try {
- if (this.config.forceBackupServer) throw new Error()
- await this.attachToGanacheVM(client)
- }
-
- // Fallback to ganache-cli)
- catch(err) {
- const _ganache = require('ganache-cli');
- this.ui.report('vm-fail', [_ganache.version]);
- await this.attachToGanacheVM(_ganache);
- }
-
- if (autoLaunchServer === false || this.autoLaunchServer === false){
- return this.server;
- }
-
- await pify(this.server.listen)(this.port);
- const address = `http://${this.host}:${this.port}`;
- this.ui.report('server', [address]);
- return address;
- }
-
/**
* Generate coverage / write coverage report / run istanbul
*/
@@ -223,60 +162,16 @@ class API {
})
}
-
/**
* Removes coverage build artifacts, kills testrpc.
*/
- async finish() {
- if (this.server && this.server.close){
- this.ui.report('finish');
- await pify(this.server.close)();
- }
- }
+ async finish() { /* Just a stub now - used to shutdown ganache */}
+
// ------------------------------------------ Utils ----------------------------------------------
// ========
// Provider
// ========
- async attachToGanacheVM(client){
- const self = this;
-
- // Fallback to client from options
- if(!client) client = this.client;
- this.server = client.server(this.providerOptions);
-
- this.assertHasBlockchain(this.server.provider);
- await this.vmIsResolved(this.server.provider);
-
- const blockchain = this.server.provider.engine.manager.state.blockchain;
- const createVM = blockchain.createVMFromStateTrie;
-
- // Attach to VM which ganache has already created for transactions
- blockchain.vm.on('step', self.collector.step.bind(self.collector));
-
- // Hijack createVM method which ganache runs for each `eth_call`
- blockchain.createVMFromStateTrie = function(state, activatePrecompiles) {
- const vm = createVM.apply(blockchain, arguments);
- vm.on('step', self.collector.step.bind(self.collector));
- return vm;
- }
- }
-
- assertHasBlockchain(provider){
- assert(provider.engine.manager.state.blockchain !== undefined);
- assert(provider.engine.manager.state.blockchain.createVMFromStateTrie !== undefined);
- }
-
- async vmIsResolved(provider){
- return new Promise(resolve => {
- const interval = setInterval(() => {
- if (provider.engine.manager.state.blockchain.vm !== undefined){
- clearInterval(interval);
- resolve();
- }
- });
- })
- }
// Hardhat
async attachToHardhatVM(provider){
diff --git a/lib/ui.js b/lib/ui.js
index 335eed46..b3ebe51c 100644
--- a/lib/ui.js
+++ b/lib/ui.js
@@ -56,10 +56,6 @@ class AppUI extends UI {
const w = ":warning:";
const kinds = {
- 'vm-fail': `${w} ${c.red('There was a problem attaching to the ganache VM.')}\n` +
- `${w} ${c.red('For help, see the "client" & "providerOptions" syntax in solidity-coverage docs.')}\n`+
- `${w} ${c.red(`Using ganache-cli (v${args[0]}) instead.`)}\n`,
-
'instr-start': `\n${c.bold('Instrumenting for coverage...')}` +
`\n${c.bold('=============================')}\n`,
@@ -69,10 +65,6 @@ class AppUI extends UI {
'istanbul': `${ct} ${c.grey('Istanbul reports written to')} ./coverage/ ` +
`${c.grey('and')} ./coverage.json`,
- 'finish': `${ct} ${c.grey('solidity-coverage cleaning up, shutting down ganache server')}`,
-
- 'server': `${ct} ${c.bold('server: ')} ${c.grey(args[0])}`,
-
'command': `\n${w} ${c.red.bold('solidity-coverage >= 0.7.0 is no longer a shell command.')} ${w}\n` +
`${c.bold('=============================================================')}\n\n` +
`Instead, you should use the plugin produced for your development stack\n` +
@@ -103,10 +95,6 @@ class AppUI extends UI {
'istanbul-fail': `${c.red('Istanbul coverage reports could not be generated. ')}`,
'sources-fail': `${c.red('Cannot locate expected contract sources folder: ')} ${args[0]}`,
-
- 'server-fail': `${c.red('Port')} ${args[0]} ${c.red('is already in use.\n')}` +
- `${c.red('\tRun: "lsof -i" to find the pid of the process using it.\n')}` +
- `${c.red('\tRun: "kill -9 " to kill it.\n')}`
}
return this._format(kinds[kind])
diff --git a/package.json b/package.json
index 45e16f7e..299e1649 100644
--- a/package.json
+++ b/package.json
@@ -26,7 +26,6 @@
"@solidity-parser/parser": "^0.18.0",
"chalk": "^2.4.2",
"death": "^1.1.0",
- "detect-port": "^1.3.0",
"difflib": "^0.2.4",
"fs-extra": "^8.1.0",
"ghost-testrpc": "^0.0.2",
@@ -52,7 +51,6 @@
"decache": "^4.5.1",
"ethereum-waffle": "^3.4.0",
"ethers": "^5.5.3",
- "ganache-cli": "6.12.2",
"hardhat": "^2.19.5",
"hardhat-gas-reporter": "^1.0.1",
"nyc": "^14.1.1",
diff --git a/plugins/hardhat.plugin.js b/plugins/hardhat.plugin.js
index 8fbda596..0185321f 100644
--- a/plugins/hardhat.plugin.js
+++ b/plugins/hardhat.plugin.js
@@ -111,7 +111,6 @@ task("coverage", "Generates a code coverage report for tests")
let ui;
let api;
let config;
- let client;
let address;
let failedTests = 0;
@@ -143,6 +142,11 @@ task("coverage", "Generates a code coverage report for tests")
}
env.hardhatArguments = Object.assign(env.hardhatArguments, flags)
+ // Error if --network flag is set
+ if (env.hardhatArguments.network){
+ throw new Error(ui.generate('network-fail'));
+ }
+
// ===========================
// Generate abi diff component
// (This flag only useful within codecheck context)
@@ -201,36 +205,21 @@ task("coverage", "Generates a code coverage report for tests")
// ==============
let network = await nomiclabsUtils.setupHardhatNetwork(env, api, ui);
- if (network.isHardhatEVM){
- accounts = await utils.getAccountsHardhat(network.provider);
- nodeInfo = await utils.getNodeInfoHardhat(network.provider);
-
- // Note: this only works if the reset block number is before any transactions have fired on the fork.
- // e.g you cannot fork at block 1, send some txs (blocks 2,3,4) and reset to block 2
- env.network.provider.on(HARDHAT_NETWORK_RESET_EVENT, async () => {
- await api.attachToHardhatVM(env.network.provider);
- });
-
- await api.attachToHardhatVM(network.provider);
-
- ui.report('hardhat-network', [
- nodeInfo.split('/')[1],
- env.network.name,
- ]);
- } else {
- client = api.client || require('ganache-cli');
- address = await api.ganache(client);
- const accountsRequest = await utils.getAccountsGanache(api.server.provider);
- const nodeInfoRequest = await utils.getNodeInfoGanache(api.server.provider);
-
- ui.report('ganache-network', [
- nodeInfoRequest.result.split('/')[1],
- env.network.name,
- api.port
- ]);
-
- accounts = accountsRequest.result;
- }
+ accounts = await utils.getAccountsHardhat(network.provider);
+ nodeInfo = await utils.getNodeInfoHardhat(network.provider);
+
+ // Note: this only works if the reset block number is before any transactions have fired on the fork.
+ // e.g you cannot fork at block 1, send some txs (blocks 2,3,4) and reset to block 2
+ env.network.provider.on(HARDHAT_NETWORK_RESET_EVENT, async () => {
+ await api.attachToHardhatVM(env.network.provider);
+ });
+
+ await api.attachToHardhatVM(network.provider);
+
+ ui.report('hardhat-network', [
+ nodeInfo.split('/')[1],
+ env.network.name,
+ ]);
// Set default account (if not already configured)
nomiclabsUtils.setNetworkFrom(network.config, accounts);
diff --git a/plugins/resources/nomiclabs.ui.js b/plugins/resources/nomiclabs.ui.js
index bf97a4c1..8ec5d78a 100644
--- a/plugins/resources/nomiclabs.ui.js
+++ b/plugins/resources/nomiclabs.ui.js
@@ -45,9 +45,6 @@ class PluginUI extends UI {
'instr-skipped': `${ds} ${c.grey(args[0])}`,
- 'versions': `${ct} ${c.bold('ganache-core')}: ${args[0]}\n` +
- `${ct} ${c.bold('solidity-coverage')}: v${args[1]}`,
-
'hardhat-versions': `\n${c.bold('Version')}` +
`\n${c.bold('=======')}\n` +
`${ct} ${c.bold('solidity-coverage')}: v${args[0]}`,
@@ -57,17 +54,6 @@ class PluginUI extends UI {
`${ct} ${c.bold('HardhatEVM')}: v${args[0]}\n` +
`${ct} ${c.bold('network')}: ${args[1]}\n`,
- 'ganache-network': `\n${c.bold('Network Info')}` +
- `\n${c.bold('============')}\n` +
- `${ct} ${c.bold('port')}: ${args[1]}\n` +
- `${ct} ${c.bold('network')}: ${args[0]}\n`,
-
- 'port-clash': `${w} ${c.red("The 'port' values in your config's network url ")}` +
- `${c.red("and .solcover.js are different. Using network's: ")} ${c.bold(args[0])}.\n`,
-
- 'port-clash-hardhat': `${w} ${c.red("The 'port' values in your Hardhat network's url ")}` +
- `${c.red("and .solcover.js are different. Using Hardhat's: ")} ${c.bold(args[0])}.\n`,
-
}
this._write(kinds[kind]);
@@ -84,8 +70,8 @@ class PluginUI extends UI {
const x = ":x:";
const kinds = {
- 'network-fail': `${c.red('--network argument: ')}${args[0]}` +
- `${c.red(' is not a defined network in hardhat.config.js.')}`,
+ 'network-fail': `${c.red('--network cli flag is not supported for the coverage task. ')}` +
+ `${c.red('Beginning with v0.8.7, coverage must use the default "hardhat" network.')}`,
'sources-fail': `${c.red('Cannot locate expected contract sources folder: ')} ${args[0]}`,
diff --git a/plugins/resources/nomiclabs.utils.js b/plugins/resources/nomiclabs.utils.js
index 0c9dd871..2966d080 100644
--- a/plugins/resources/nomiclabs.utils.js
+++ b/plugins/resources/nomiclabs.utils.js
@@ -64,62 +64,34 @@ async function setupHardhatNetwork(env, api, ui){
const newCreateProviderSignature = semver.satisfies(hardhatPackage.version, "^2.15.0");
let provider, networkName, networkConfig;
- let isHardhatEVM = false;
-
- networkName = env.hardhatArguments.network || HARDHAT_NETWORK_NAME;
// HardhatEVM
- if (networkName === HARDHAT_NETWORK_NAME){
- isHardhatEVM = true;
-
- networkConfig = env.network.config;
- configureHardhatEVMGas(networkConfig, api);
-
- if (newCreateProviderSignature) {
- provider = await createProvider(
- env.config,
- networkName,
- env.artifacts,
- )
- } else {
- provider = createProvider(
- networkName,
- networkConfig,
- env.config.paths,
- env.artifacts,
- )
- }
-
- // HttpProvider
+ networkConfig = env.network.config;
+ configureHardhatEVMGas(networkConfig, api);
+
+ if (newCreateProviderSignature) {
+ provider = await createProvider(
+ env.config,
+ HARDHAT_NETWORK_NAME,
+ env.artifacts,
+ )
} else {
- if (!(env.config.networks && env.config.networks[networkName])){
- throw new Error(ui.generate('network-fail', [networkName]))
- }
- networkConfig = env.config.networks[networkName]
- configureNetworkGas(networkConfig, api);
- configureHttpProvider(networkConfig, api, ui)
-
- if (newCreateProviderSignature) {
- provider = await createProvider(env.config, networkName);
- } else {
- provider = createProvider(networkName, networkConfig);
- }
+ provider = createProvider(
+ HARDHAT_NETWORK_NAME,
+ networkConfig,
+ env.config.paths,
+ env.artifacts,
+ )
}
return configureNetworkEnv(
env,
- networkName,
+ HARDHAT_NETWORK_NAME,
networkConfig,
- provider,
- isHardhatEVM
+ provider
)
}
-function configureNetworkGas(networkConfig, api){
- networkConfig.gas = api.gasLimit;
- networkConfig.gasPrice = api.gasPrice;
-}
-
function configureHardhatEVMGas(networkConfig, api){
networkConfig.allowUnlimitedContractSize = true;
networkConfig.blockGasLimit = api.gasLimitNumber;
@@ -128,7 +100,7 @@ function configureHardhatEVMGas(networkConfig, api){
networkConfig.initialBaseFeePerGas = 0;
}
-function configureNetworkEnv(env, networkName, networkConfig, provider, isHardhatEVM){
+function configureNetworkEnv(env, networkName, networkConfig, provider){
env.config.networks[networkName] = networkConfig;
env.config.defaultNetwork = networkName;
@@ -136,7 +108,7 @@ function configureNetworkEnv(env, networkName, networkConfig, provider, isHardha
name: networkName,
config: networkConfig,
provider: provider,
- isHardhatEVM: isHardhatEVM
+ isHardhatEVM: true
});
env.ethereum = provider;
@@ -145,24 +117,6 @@ function configureNetworkEnv(env, networkName, networkConfig, provider, isHardha
return env.network;
}
-/**
- * Extracts port from url / sets network.url
- * @param {Object} networkConfig
- * @param {SolidityCoverage} api
- */
-function configureHttpProvider(networkConfig, api, ui){
- const configPort = networkConfig.url.split(':')[2];
-
- // Warn: port conflicts
- if (api.port !== api.defaultPort && api.port !== configPort){
- ui.report('port-clash', [ configPort ])
- }
-
- // Prefer network port
- api.port = parseInt(configPort);
- networkConfig.url = `http://${api.host}:${api.port}`;
-}
-
/**
* Configures mocha to generate a json object which maps which tests
* hit which lines of code.
diff --git a/plugins/resources/plugin.utils.js b/plugins/resources/plugin.utils.js
index a296da0a..c722a08f 100644
--- a/plugins/resources/plugin.utils.js
+++ b/plugins/resources/plugin.utils.js
@@ -262,35 +262,6 @@ async function getNodeInfoHardhat(provider){
return provider.send("web3_clientVersion", [])
}
-async function getAccountsGanache(provider){
- const payload = {
- jsonrpc: "2.0",
- method: "eth_accounts",
- params: [],
- id: 1
- };
- return ganacheRequest(provider, payload)
-}
-
-async function getNodeInfoGanache(provider){
- const payload = {
- jsonrpc: "2.0",
- method: "web3_clientVersion",
- params: [],
- id: 1
- };
- return ganacheRequest(provider, payload)
-}
-
-async function ganacheRequest(provider, payload){
- return new Promise((resolve, reject) => {
- provider.sendAsync(payload, function(err, res){
- if (err) return reject(err)
- resolve(res);
- })
- });
-}
-
// ==========================
// Finishing / Cleanup
// ==========================
@@ -330,6 +301,4 @@ module.exports = {
setupTempFolders,
getAccountsHardhat,
getNodeInfoHardhat,
- getAccountsGanache,
- getNodeInfoGanache
}
diff --git a/test/integration/errors.js b/test/integration/errors.js
index f1f4ca7c..2451b58b 100644
--- a/test/integration/errors.js
+++ b/test/integration/errors.js
@@ -3,7 +3,6 @@ const fs = require('fs');
const path = require('path')
const pify = require('pify')
const shell = require('shelljs');
-const ganache = require('ganache-cli')
const verify = require('./../util/verifiers')
const mock = require('./../util/integration');
@@ -64,37 +63,11 @@ describe('Hardhat Plugin: error cases', function() {
}
});
- it('tries to launch with a port already in use', async function(){
+ it('tries to launch with the network flag', async function(){
const taskArgs = {
network: "development"
}
- const server = ganache.server();
-
- mock.install('Simple', 'simple.js', solcoverConfig);
- mock.hardhatSetupEnv(this);
-
- await pify(server.listen)(8545);
-
- try {
- await this.env.run("coverage", taskArgs);
- assert.fail();
- } catch(err){
- assert(
- err.message.includes('already in use') &&
- err.message.includes('lsof'),
- `Should error on port-in-use with advice: ${err.message}`
- )
- }
-
- await pify(server.close)();
- });
-
- it('tries to launch with a non-existent network', async function(){
- const taskArgs = {
- network: "does-not-exist"
- }
-
mock.install('Simple', 'simple.js', solcoverConfig);
mock.hardhatSetupEnv(this);
@@ -103,9 +76,8 @@ describe('Hardhat Plugin: error cases', function() {
assert.fail();
} catch(err){
assert(
- err.message.includes('is not a defined network in hardhat.config.js') &&
- err.message.includes('does-not-exist'),
- `Should error missing network error: ${err.message}`
+ err.message.includes('--network cli flag is not supported') &&
+ `Should error network flag disallowed: ${err.message}`
)
}
});
diff --git a/test/integration/flags.js b/test/integration/flags.js
index 95f2bedd..130bb583 100644
--- a/test/integration/flags.js
+++ b/test/integration/flags.js
@@ -51,39 +51,6 @@ describe('Hardhat Plugin: command line options', function() {
verify.lineCoverage(expected);
});
- it('--network (declared port mismatches)', async function(){
- solcoverConfig.port = 8222;
-
- mock.install('Simple', 'simple.js', solcoverConfig);
- mock.hardhatSetupEnv(this);
-
- this.env.hardhatArguments.network = "development";
-
- await this.env.run("coverage");
-
- assert(
- mock.loggerOutput.val.includes("The 'port' values"),
- `Should notify about mismatched port values: ${mock.loggerOutput.val}`
- );
-
- assert(
- mock.loggerOutput.val.includes("8545"),
- `Should have used default coverage port 8545: ${mock.loggerOutput.val}`
- );
-
- assert(
- mock.loggerOutput.val.includes("development"),
- `Should have used specified network name: ${mock.loggerOutput.val}`
- );
-
- const expected = [{
- file: mock.pathToContract(hardhatConfig, 'Simple.sol'),
- pct: 100
- }];
-
- verify.lineCoverage(expected);
- });
-
it('--testfiles test/', async function() {
const taskArgs = {
testfiles: path.join(
diff --git a/test/integration/standard.js b/test/integration/standard.js
index 3f9d5680..60676e75 100644
--- a/test/integration/standard.js
+++ b/test/integration/standard.js
@@ -53,25 +53,6 @@ describe('Hardhat Plugin: standard use cases', function() {
);
});
- it('default network ("hardhat")', async function(){
- mock.install('Simple', 'simple.js', solcoverConfig);
- mock.hardhatSetupEnv(this);
-
- this.env.hardhatArguments.network = "hardhat"
-
- await this.env.run("coverage");
-
- assert(
- mock.loggerOutput.val.includes("HardhatEVM"),
- `Should have displayed HardhatEVM version: ${mock.loggerOutput.val}`
- );
-
- assert(
- mock.loggerOutput.val.includes("hardhat"),
- `Should have used 'hardhat' network name: ${mock.loggerOutput.val}`
- );
- });
-
it('uses inheritance', async function() {
mock.installDouble(
['Proxy', 'Owned'],
@@ -193,20 +174,6 @@ describe('Hardhat Plugin: standard use cases', function() {
verify.lineCoverage(expected);
});
- // hardhat-truffle5 test asserts balance is 777 ether
- it('config: providerOptions', async function() {
- const taskArgs = {
- network: 'development'
- };
-
- solcoverConfig.providerOptions = { default_balance_ether: 777 }
-
- mock.install('Simple', 'testrpc-options.js', solcoverConfig);
- mock.hardhatSetupEnv(this);
-
- await this.env.run("coverage", taskArgs);
- });
-
it('config: skipped file', async function() {
solcoverConfig.skipFiles = ['Migrations.sol', 'Owned.sol'];
@@ -328,61 +295,6 @@ describe('Hardhat Plugin: standard use cases', function() {
await this.env.run("coverage");
});
- it('uses account[0] as default "from" (ganache)', async function(){
- const mnemonic = "purity blame spice arm main narrow olive roof science verb parrot flash";
- const account0 = "0x42ecc9ab31d7c0240532992682ee3533421dd7f5"
- const taskArgs = {
- network: "development"
- }
-
- solcoverConfig.providerOptions = {
- mnemonic: mnemonic
- };
-
- mock.install('Simple', 'account-zero.js', solcoverConfig);
- mock.hardhatSetupEnv(this);
-
- await this.env.run("coverage", taskArgs);
-
- const expected = [
- {
- file: mock.pathToContract(hardhatConfig, 'Simple.sol'),
- pct: 50
- }
- ];
-
- verify.lineCoverage(expected);
- })
-
- it('inherits network defined "from" (ganache)', async function(){
- const mnemonic = "purity blame spice arm main narrow olive roof science verb parrot flash";
- const account1 = "0xe7a46b209a65baadc11bf973c0f4d5f19465ae83"
- const taskArgs = {
- network: "development"
- }
-
- solcoverConfig.providerOptions = {
- mnemonic: mnemonic
- };
-
- const hardhatConfig = mock.getDefaultHardhatConfig()
- hardhatConfig.networks.development.from = account1;
-
- mock.install('Simple', 'account-one.js', solcoverConfig, hardhatConfig);
- mock.hardhatSetupEnv(this);
-
- await this.env.run("coverage", taskArgs);
-
- const expected = [
- {
- file: mock.pathToContract(hardhatConfig, 'Simple.sol'),
- pct: 50
- }
- ];
-
- verify.lineCoverage(expected);
- })
-
it('inherits network defined "from" (hardhat)', async function(){
const mnemonic = "purity blame spice arm main narrow olive roof science verb parrot flash";
const account1 = "0xe7a46b209a65baadc11bf973c0f4d5f19465ae83"
diff --git a/test/sources/projects/ganache-solcoverjs/.gitignore b/test/sources/projects/ganache-solcoverjs/.gitignore
deleted file mode 100644
index 736e8ae5..00000000
--- a/test/sources/projects/ganache-solcoverjs/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-!node_modules
\ No newline at end of file
diff --git a/test/sources/projects/ganache-solcoverjs/.solcover.js b/test/sources/projects/ganache-solcoverjs/.solcover.js
deleted file mode 100644
index 6e2f5326..00000000
--- a/test/sources/projects/ganache-solcoverjs/.solcover.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
- client: require('ganache-cli'),
- silent: process.env.SILENT ? true : false,
- istanbulReporter: ['json-summary', 'text'],
-}
diff --git a/test/sources/projects/ganache-solcoverjs/contracts/ContractA.sol b/test/sources/projects/ganache-solcoverjs/contracts/ContractA.sol
deleted file mode 100644
index ad19d2c1..00000000
--- a/test/sources/projects/ganache-solcoverjs/contracts/ContractA.sol
+++ /dev/null
@@ -1,17 +0,0 @@
-pragma solidity >=0.8.0 <0.9.0;
-
-
-contract ContractA {
- uint x;
- constructor() public {
- }
-
- function sendFn() public {
- x = 5;
- }
-
- function callFn() public pure returns (uint){
- uint y = 5;
- return y;
- }
-}
diff --git a/test/sources/projects/ganache-solcoverjs/contracts/ContractB.sol b/test/sources/projects/ganache-solcoverjs/contracts/ContractB.sol
deleted file mode 100644
index 6d5f53d4..00000000
--- a/test/sources/projects/ganache-solcoverjs/contracts/ContractB.sol
+++ /dev/null
@@ -1,17 +0,0 @@
-pragma solidity >=0.8.0 <0.9.0;
-
-
-contract ContractB {
- uint x;
- constructor() public {
- }
-
- function sendFn() public {
- x = 5;
- }
-
- function callFn() public pure returns (uint){
- uint y = 5;
- return y;
- }
-}
diff --git a/test/sources/projects/ganache-solcoverjs/contracts/ContractC.sol b/test/sources/projects/ganache-solcoverjs/contracts/ContractC.sol
deleted file mode 100644
index 8c24195f..00000000
--- a/test/sources/projects/ganache-solcoverjs/contracts/ContractC.sol
+++ /dev/null
@@ -1,17 +0,0 @@
-pragma solidity >=0.8.0 <0.9.0;
-
-
-contract ContractC {
- uint x;
- constructor() public {
- }
-
- function sendFn() public {
- x = 5;
- }
-
- function callFn() public pure returns (uint){
- uint y = 5;
- return y;
- }
-}
diff --git a/test/sources/projects/ganache-solcoverjs/contracts/Migrations.sol b/test/sources/projects/ganache-solcoverjs/contracts/Migrations.sol
deleted file mode 100644
index c378ffb0..00000000
--- a/test/sources/projects/ganache-solcoverjs/contracts/Migrations.sol
+++ /dev/null
@@ -1,23 +0,0 @@
-pragma solidity >=0.4.21 <0.6.0;
-
-contract Migrations {
- address public owner;
- uint public last_completed_migration;
-
- constructor() public {
- owner = msg.sender;
- }
-
- modifier restricted() {
- if (msg.sender == owner) _;
- }
-
- function setCompleted(uint completed) public restricted {
- last_completed_migration = completed;
- }
-
- function upgrade(address new_address) public restricted {
- Migrations upgraded = Migrations(new_address);
- upgraded.setCompleted(last_completed_migration);
- }
-}
diff --git a/test/sources/projects/ganache-solcoverjs/hardhat.config.js b/test/sources/projects/ganache-solcoverjs/hardhat.config.js
deleted file mode 100644
index 59fb8e01..00000000
--- a/test/sources/projects/ganache-solcoverjs/hardhat.config.js
+++ /dev/null
@@ -1,14 +0,0 @@
-require("@nomiclabs/hardhat-truffle5");
-require(__dirname + "/../plugins/nomiclabs.plugin");
-
-module.exports = {
- solidity: {
- version: "0.8.17"
- },
- networks: {
- coverage: {
- url: "http://127.0.0.1:8555"
- }
- }.
- logger: process.env.SILENT ? { log: () => {} } : console,
-};
diff --git a/test/sources/projects/ganache-solcoverjs/test/contracta.js b/test/sources/projects/ganache-solcoverjs/test/contracta.js
deleted file mode 100644
index cc778027..00000000
--- a/test/sources/projects/ganache-solcoverjs/test/contracta.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const ContractA = artifacts.require("ContractA");
-
-contract("contracta", function(accounts) {
- let instance;
-
- before(async () => instance = await ContractA.new())
-
- it('sends [ @skipForCoverage ]', async function(){
- await instance.sendFn();
- });
-
- it('calls [ @skipForCoverage ]', async function(){
- await instance.callFn();
- })
-});
diff --git a/test/sources/projects/ganache-solcoverjs/test/contractb.js b/test/sources/projects/ganache-solcoverjs/test/contractb.js
deleted file mode 100644
index 71ebfb7a..00000000
--- a/test/sources/projects/ganache-solcoverjs/test/contractb.js
+++ /dev/null
@@ -1,15 +0,0 @@
-const ContractB = artifacts.require("ContractB");
-
-contract("contractB [ @skipForCoverage ]", function(accounts) {
- let instance;
-
- before(async () => instance = await ContractB.new())
-
- it('sends', async function(){
- await instance.sendFn();
- });
-
- it('calls', async function(){
- await instance.callFn();
- })
-});
diff --git a/test/sources/projects/ganache-solcoverjs/test/contractc.js b/test/sources/projects/ganache-solcoverjs/test/contractc.js
deleted file mode 100644
index 9b3d950d..00000000
--- a/test/sources/projects/ganache-solcoverjs/test/contractc.js
+++ /dev/null
@@ -1,20 +0,0 @@
-const ContractC = artifacts.require("ContractC");
-
-contract("contractc", function(accounts) {
- let instance;
-
- before(async () => instance = await ContractC.new())
-
- it('sends', async function(){
- await instance.sendFn();
- });
-
- it('calls', async function(){
- await instance.callFn();
- })
-
- it('sends', async function(){
- await instance.sendFn();
- });
-
-});
diff --git a/test/units/api.js b/test/units/api.js
index 4290e7a0..5e56f9e7 100644
--- a/test/units/api.js
+++ b/test/units/api.js
@@ -1,6 +1,4 @@
const assert = require('assert');
-const detect = require('detect-port');
-const Ganache = require('ganache-cli');
const util = require('./../util/util.js');
const API = require('./../../api.js');
@@ -58,36 +56,6 @@ describe('api', () => {
assert(cloneC[hash].hits === 5);
});
- it('ganache: autoLaunchServer === false', async function(){
- const api = new API(opts);
- const port = api.port;
- const server = await api.ganache(Ganache, false);
-
- assert(typeof port === 'number')
- assert(typeof server === 'object');
- assert(typeof server.listen === 'function');
-
- const freePort = await detect(port);
-
- assert(freePort === port);
- });
-
- it('config: autoLaunchServer: false', async function(){
- opts.autoLaunchServer = false;
-
- const api = new API(opts);
- const port = api.port;
- const server = await api.ganache(Ganache);
-
- assert(typeof port === 'number')
- assert(typeof server === 'object');
- assert(typeof server.listen === 'function');
-
- const freePort = await detect(port);
-
- assert(freePort === port);
- })
-
it('utils', async function(){
assert(utils.assembleFiles !== undefined)
assert(utils.checkContext !== undefined)
diff --git a/test/units/validator.js b/test/units/validator.js
index 2479aed7..842c9e55 100644
--- a/test/units/validator.js
+++ b/test/units/validator.js
@@ -21,7 +21,6 @@ describe('config validation', () => {
it('validates the "string" options', function(){
const options = [
"cwd",
- "host",
"istanbulFolder",
"abiOutputPath",
"matrixOutputPath",
@@ -47,7 +46,6 @@ describe('config validation', () => {
it('validates the "boolean" options', function(){
const options = [
"silent",
- "autoLaunchServer",
"measureStatementCoverage",
"measureFunctionCoverage",
"measureModifierCoverage",
diff --git a/yarn.lock b/yarn.lock
index d535fc4e..ef08c025 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1508,10 +1508,6 @@ accepts@~1.3.8:
mime-types "~2.1.34"
negotiator "0.6.3"
-address@^1.0.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
-
adm-zip@^0.4.16:
version "0.4.16"
resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365"
@@ -3053,7 +3049,7 @@ cross-spawn@^4:
lru-cache "^4.0.1"
which "^1.2.9"
-cross-spawn@^6.0.0, cross-spawn@^6.0.5:
+cross-spawn@^6.0.5:
version "6.0.5"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
dependencies:
@@ -3114,7 +3110,7 @@ death@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318"
-debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9:
+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"
dependencies:
@@ -3269,13 +3265,6 @@ detect-indent@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d"
-detect-port@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.3.0.tgz#d9c40e9accadd4df5cac6a782aefd014d573d1f1"
- dependencies:
- address "^1.0.1"
- debug "^2.6.0"
-
diff@3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
@@ -4045,18 +4034,6 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
md5.js "^1.3.4"
safe-buffer "^5.1.1"
-execa@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
- dependencies:
- cross-spawn "^6.0.0"
- get-stream "^4.0.0"
- is-stream "^1.1.0"
- npm-run-path "^2.0.0"
- p-finally "^1.0.0"
- signal-exit "^3.0.0"
- strip-eof "^1.0.0"
-
expand-brackets@^2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
@@ -4427,14 +4404,6 @@ functions-have-names@^1.2.2:
version "1.2.3"
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
-ganache-cli@6.12.2:
- version "6.12.2"
- resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a"
- dependencies:
- ethereumjs-util "6.2.1"
- source-map-support "0.5.12"
- yargs "13.2.4"
-
ganache-core@^2.13.2:
version "2.13.2"
resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.13.2.tgz#27e6fc5417c10e6e76e2e646671869d7665814a3"
@@ -4499,7 +4468,7 @@ get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
-get-stream@^4.0.0, get-stream@^4.1.0:
+get-stream@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5"
dependencies:
@@ -5038,10 +5007,6 @@ invert-kv@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-invert-kv@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02"
-
io-ts@1.10.4:
version "1.10.4"
resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2"
@@ -5267,7 +5232,7 @@ is-shared-array-buffer@^1.0.2:
dependencies:
call-bind "^1.0.2"
-is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
+is-stream@^1.0.0, is-stream@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
@@ -5609,12 +5574,6 @@ lcid@^1.0.0:
dependencies:
invert-kv "^1.0.0"
-lcid@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf"
- dependencies:
- invert-kv "^2.0.0"
-
level-codec@^9.0.0:
version "9.0.2"
resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc"
@@ -5924,12 +5883,6 @@ make-dir@^2.0.0, make-dir@^2.1.0:
pify "^4.0.1"
semver "^5.6.0"
-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"
- dependencies:
- p-defer "^1.0.0"
-
map-cache@^0.2.2:
version "0.2.2"
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
@@ -5960,14 +5913,6 @@ media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
-mem@^4.0.0:
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178"
- dependencies:
- map-age-cleaner "^0.1.1"
- mimic-fn "^2.0.0"
- p-is-promise "^2.0.0"
-
memdown@^1.0.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215"
@@ -6091,10 +6036,6 @@ mime@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
-mimic-fn@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
-
mimic-response@^1.0.0, mimic-response@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b"
@@ -6433,12 +6374,6 @@ normalize-url@^4.1.0:
version "4.5.1"
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
-npm-run-path@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
- dependencies:
- path-key "^2.0.0"
-
nth-check@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2"
@@ -6615,14 +6550,6 @@ os-locale@^1.4.0:
dependencies:
lcid "^1.0.0"
-os-locale@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a"
- dependencies:
- execa "^1.0.0"
- lcid "^2.0.0"
- mem "^4.0.0"
-
os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
@@ -6635,18 +6562,10 @@ p-cancelable@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc"
-p-defer@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
-
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
-p-is-promise@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e"
-
p-limit@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
@@ -6822,7 +6741,7 @@ 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"
-path-key@^2.0.0, path-key@^2.0.1:
+path-key@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
@@ -7965,10 +7884,6 @@ strip-bom@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-strip-eof@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
-
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"
@@ -9456,7 +9371,7 @@ yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
-yargs-parser@13.1.2, yargs-parser@^13.0.0, yargs-parser@^13.1.0, yargs-parser@^13.1.2:
+yargs-parser@13.1.2, yargs-parser@^13.0.0, yargs-parser@^13.1.2:
version "13.1.2"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
dependencies:
@@ -9495,22 +9410,6 @@ yargs-unparser@2.0.0:
flat "^5.0.2"
is-plain-obj "^2.1.0"
-yargs@13.2.4:
- version "13.2.4"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83"
- dependencies:
- cliui "^5.0.0"
- find-up "^3.0.0"
- get-caller-file "^2.0.1"
- os-locale "^3.1.0"
- require-directory "^2.1.1"
- require-main-filename "^2.0.0"
- set-blocking "^2.0.0"
- string-width "^3.0.0"
- which-module "^2.0.0"
- y18n "^4.0.0"
- yargs-parser "^13.1.0"
-
yargs@13.3.2, yargs@^13.2.2, yargs@^13.3.0:
version "13.3.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"