From 16e5985bb3a7f718f122342e47db6a4694e64b30 Mon Sep 17 00:00:00 2001 From: cgewecke Date: Tue, 23 Jul 2019 11:33:30 -0700 Subject: [PATCH] Initial draft: 0.7.0 --- .circleci/config.yml | 19 +- .gitignore | 5 +- .npmignore | 3 + buidler.config.js | 18 + lib/app.js | 386 +- lib/collector.js | 39 + lib/coverage.js | 112 + lib/coverageMap.js | 145 - lib/injector.js | 257 +- lib/instrumentSolidity.js | 65 - lib/instrumenter.js | 342 +- lib/parse.js | 110 +- lib/preprocessor.js | 53 +- lib/registrar.js | 251 ++ lib/ternary.js | 121 + package.json | 40 +- test/cli/command-options.js | 24 - test/cli/events.js | 21 - test/if.js | 274 -- test/{cli => jsSources}/block-gas-limit.js | 0 test/{cli => jsSources}/empty.js | 0 test/{cli => jsSources}/inheritance.js | 3 - test/{cli => jsSources}/only-call.js | 0 test/{cli => jsSources}/oraclize.js | 0 test/{cli => jsSources}/pureview.js | 0 .../{cli => jsSources}/requires-externally.js | 0 test/{cli => jsSources}/sign.js | 0 test/{cli => jsSources}/simple.js | 3 - test/{cli => jsSources}/sol-parse-fail.js | 0 test/{cli => jsSources}/testrpc-options.js | 0 test/{cli => jsSources}/totallyPure.js | 0 test/{cli => jsSources}/truffle-crash.js | 0 test/{cli => jsSources}/truffle-test-fail.js | 0 test/{cli => jsSources}/wallet.js | 9 +- .../contracts}/assembly/if.sol | 0 .../assembly/spaces-in-function.sol | 0 .../contracts}/assert/Assert.sol | 0 .../contracts/assert/RequireMultiline.sol | 9 + .../contracts}/cli/CLibrary.sol | 0 .../contracts}/cli/Empty.sol | 0 .../contracts}/cli/Events.sol | 0 .../contracts}/cli/Expensive.sol | 0 .../contracts}/cli/Face.sol | 0 .../contracts}/cli/Migrations.sol | 0 .../contracts}/cli/OnlyCall.sol | 0 .../contracts}/cli/Owned.sol | 0 .../contracts}/cli/Proxy.sol | 0 .../contracts}/cli/PureView.sol | 0 .../contracts}/cli/Simple.sol | 0 .../contracts}/cli/TotallyPure.sol | 6 +- .../contracts}/cli/Wallet.sol | 0 .../comments/postContractComment.sol | 0 .../postFunctionDeclarationComment.sol | 0 .../comments/postIfStatementComment.sol | 0 .../contracts}/comments/postLineComment.sol | 0 .../declarative-exp-assignment-alternate.sol | 0 .../identifier-assignment-alternate.sol | 0 .../conditional/mapping-assignment.sol | 2 +- .../conditional/multiline-alternate.sol | 0 .../conditional/multiline-consequent.sol | 0 .../conditional/sameline-alternate.sol | 0 .../conditional/sameline-consequent.sol | 0 .../variable-decl-assignment-alternate.sol | 0 .../contracts}/expressions/new-expression.sol | 0 .../expressions/single-binary-expression.sol | 0 .../contracts}/function/abstract.sol | 0 .../contracts}/function/calldata.sol | 0 .../contracts}/function/chainable-new.sol | 0 .../contracts}/function/chainable-value.sol | 0 .../contracts}/function/chainable.sol | 0 .../function/constructor-keyword.sol | 0 .../contracts}/function/empty-body.sol | 0 .../contracts}/function/function-call.sol | 0 .../contracts}/function/function.sol | 0 .../contracts}/function/modifier.sol | 0 .../contracts}/function/multiple.sol | 0 .../if/else-if-unbracketed-multi.sol | 0 .../if/else-if-without-brackets.sol | 0 .../contracts}/if/else-with-brackets.sol | 0 .../contracts}/if/else-without-brackets.sol | 0 .../contracts}/if/if-else-no-brackets.sol | 0 .../contracts}/if/if-elseif-else.sol | 0 .../if/if-no-brackets-multiline.sol | 0 .../contracts}/if/if-no-brackets.sol | 0 .../if/if-with-brackets-multiline.sol | 0 .../contracts}/if/if-with-brackets.sol | 0 .../contracts}/if/nested-if-missing-else.sol | 0 .../contracts}/loops/for-no-brackets.sol | 0 .../contracts}/loops/for-with-brackets.sol | 0 .../contracts}/loops/while-no-brackets.sol | 0 .../contracts}/loops/while-with-brackets.sol | 0 .../contracts}/return/return.sol | 0 .../contracts}/statements/emit-coverage.sol | 0 .../contracts}/statements/emit-instrument.sol | 0 .../empty-contract-ala-melonport.sol | 0 .../statements/empty-contract-body.sol | 0 .../statements/fn-argument-multiline.sol | 0 .../contracts}/statements/fn-argument.sol | 0 .../contracts}/statements/fn-struct.sol | 2 + .../contracts}/statements/library.sol | 0 .../contracts}/statements/multiple.sol | 0 .../statements/post-close-brace.sol | 0 .../contracts}/statements/single.sol | 0 .../contracts}/statements/tuple.sol | 6 +- .../errors}/Oraclize.sol | 0 .../errors}/SimpleError.sol | 0 .../errors}/compilation-error.sol | 0 test/soliditySources/external/CLibrary.sol | 8 + test/soliditySources/external/Face.sol | 6 + test/soliditySources/external/PureView.sol | 19 + test/sources/assert/RequireMultiline.sol | 9 - test/{ => units}/app.js | 4 +- test/{ => units}/assembly.js | 9 +- test/{ => units}/assert.js | 4 +- test/{ => units}/comments.js | 4 +- test/{ => units}/conditional.js | 22 +- test/{ => units}/expressions.js | 9 +- test/{ => units}/function.js | 10 +- test/units/if.js | 242 ++ test/{ => units}/loops.js | 6 +- test/{ => units}/return.js | 4 +- test/{ => units}/statements.js | 9 +- test/util/mockTestCommand.js | 23 - test/util/util.js | 127 +- test/util/vm.js | 157 - yarn.lock | 3166 ++++++++++++++--- 126 files changed, 4029 insertions(+), 2134 deletions(-) create mode 100644 .npmignore create mode 100644 buidler.config.js create mode 100644 lib/collector.js create mode 100644 lib/coverage.js delete mode 100644 lib/coverageMap.js delete mode 100644 lib/instrumentSolidity.js create mode 100644 lib/registrar.js create mode 100644 lib/ternary.js delete mode 100644 test/cli/command-options.js delete mode 100644 test/cli/events.js delete mode 100644 test/if.js rename test/{cli => jsSources}/block-gas-limit.js (100%) rename test/{cli => jsSources}/empty.js (100%) rename test/{cli => jsSources}/inheritance.js (85%) rename test/{cli => jsSources}/only-call.js (100%) rename test/{cli => jsSources}/oraclize.js (100%) rename test/{cli => jsSources}/pureview.js (100%) rename test/{cli => jsSources}/requires-externally.js (100%) rename test/{cli => jsSources}/sign.js (100%) rename test/{cli => jsSources}/simple.js (82%) rename test/{cli => jsSources}/sol-parse-fail.js (100%) rename test/{cli => jsSources}/testrpc-options.js (100%) rename test/{cli => jsSources}/totallyPure.js (100%) rename test/{cli => jsSources}/truffle-crash.js (100%) rename test/{cli => jsSources}/truffle-test-fail.js (100%) rename test/{cli => jsSources}/wallet.js (76%) rename test/{sources => soliditySources/contracts}/assembly/if.sol (100%) rename test/{sources => soliditySources/contracts}/assembly/spaces-in-function.sol (100%) rename test/{sources => soliditySources/contracts}/assert/Assert.sol (100%) create mode 100644 test/soliditySources/contracts/assert/RequireMultiline.sol rename test/{sources => soliditySources/contracts}/cli/CLibrary.sol (100%) rename test/{sources => soliditySources/contracts}/cli/Empty.sol (100%) rename test/{sources => soliditySources/contracts}/cli/Events.sol (100%) rename test/{sources => soliditySources/contracts}/cli/Expensive.sol (100%) rename test/{sources => soliditySources/contracts}/cli/Face.sol (100%) rename test/{sources => soliditySources/contracts}/cli/Migrations.sol (100%) rename test/{sources => soliditySources/contracts}/cli/OnlyCall.sol (100%) rename test/{sources => soliditySources/contracts}/cli/Owned.sol (100%) rename test/{sources => soliditySources/contracts}/cli/Proxy.sol (100%) rename test/{sources => soliditySources/contracts}/cli/PureView.sol (100%) rename test/{sources => soliditySources/contracts}/cli/Simple.sol (100%) rename test/{sources => soliditySources/contracts}/cli/TotallyPure.sol (87%) rename test/{sources => soliditySources/contracts}/cli/Wallet.sol (100%) rename test/{sources => soliditySources/contracts}/comments/postContractComment.sol (100%) rename test/{sources => soliditySources/contracts}/comments/postFunctionDeclarationComment.sol (100%) rename test/{sources => soliditySources/contracts}/comments/postIfStatementComment.sol (100%) rename test/{sources => soliditySources/contracts}/comments/postLineComment.sol (100%) rename test/{sources => soliditySources/contracts}/conditional/declarative-exp-assignment-alternate.sol (100%) rename test/{sources => soliditySources/contracts}/conditional/identifier-assignment-alternate.sol (100%) rename test/{sources => soliditySources/contracts}/conditional/mapping-assignment.sol (87%) rename test/{sources => soliditySources/contracts}/conditional/multiline-alternate.sol (100%) rename test/{sources => soliditySources/contracts}/conditional/multiline-consequent.sol (100%) rename test/{sources => soliditySources/contracts}/conditional/sameline-alternate.sol (100%) rename test/{sources => soliditySources/contracts}/conditional/sameline-consequent.sol (100%) rename test/{sources => soliditySources/contracts}/conditional/variable-decl-assignment-alternate.sol (100%) rename test/{sources => soliditySources/contracts}/expressions/new-expression.sol (100%) rename test/{sources => soliditySources/contracts}/expressions/single-binary-expression.sol (100%) rename test/{sources => soliditySources/contracts}/function/abstract.sol (100%) rename test/{sources => soliditySources/contracts}/function/calldata.sol (100%) rename test/{sources => soliditySources/contracts}/function/chainable-new.sol (100%) rename test/{sources => soliditySources/contracts}/function/chainable-value.sol (100%) rename test/{sources => soliditySources/contracts}/function/chainable.sol (100%) rename test/{sources => soliditySources/contracts}/function/constructor-keyword.sol (100%) rename test/{sources => soliditySources/contracts}/function/empty-body.sol (100%) rename test/{sources => soliditySources/contracts}/function/function-call.sol (100%) rename test/{sources => soliditySources/contracts}/function/function.sol (100%) rename test/{sources => soliditySources/contracts}/function/modifier.sol (100%) rename test/{sources => soliditySources/contracts}/function/multiple.sol (100%) rename test/{sources => soliditySources/contracts}/if/else-if-unbracketed-multi.sol (100%) rename test/{sources => soliditySources/contracts}/if/else-if-without-brackets.sol (100%) rename test/{sources => soliditySources/contracts}/if/else-with-brackets.sol (100%) rename test/{sources => soliditySources/contracts}/if/else-without-brackets.sol (100%) rename test/{sources => soliditySources/contracts}/if/if-else-no-brackets.sol (100%) rename test/{sources => soliditySources/contracts}/if/if-elseif-else.sol (100%) rename test/{sources => soliditySources/contracts}/if/if-no-brackets-multiline.sol (100%) rename test/{sources => soliditySources/contracts}/if/if-no-brackets.sol (100%) rename test/{sources => soliditySources/contracts}/if/if-with-brackets-multiline.sol (100%) rename test/{sources => soliditySources/contracts}/if/if-with-brackets.sol (100%) rename test/{sources => soliditySources/contracts}/if/nested-if-missing-else.sol (100%) rename test/{sources => soliditySources/contracts}/loops/for-no-brackets.sol (100%) rename test/{sources => soliditySources/contracts}/loops/for-with-brackets.sol (100%) rename test/{sources => soliditySources/contracts}/loops/while-no-brackets.sol (100%) rename test/{sources => soliditySources/contracts}/loops/while-with-brackets.sol (100%) rename test/{sources => soliditySources/contracts}/return/return.sol (100%) rename test/{sources => soliditySources/contracts}/statements/emit-coverage.sol (100%) rename test/{sources => soliditySources/contracts}/statements/emit-instrument.sol (100%) rename test/{sources => soliditySources/contracts}/statements/empty-contract-ala-melonport.sol (100%) rename test/{sources => soliditySources/contracts}/statements/empty-contract-body.sol (100%) rename test/{sources => soliditySources/contracts}/statements/fn-argument-multiline.sol (100%) rename test/{sources => soliditySources/contracts}/statements/fn-argument.sol (100%) rename test/{sources => soliditySources/contracts}/statements/fn-struct.sol (86%) rename test/{sources => soliditySources/contracts}/statements/library.sol (100%) rename test/{sources => soliditySources/contracts}/statements/multiple.sol (100%) rename test/{sources => soliditySources/contracts}/statements/post-close-brace.sol (100%) rename test/{sources => soliditySources/contracts}/statements/single.sol (100%) rename test/{sources => soliditySources/contracts}/statements/tuple.sol (62%) rename test/{sources/cli => soliditySources/errors}/Oraclize.sol (100%) rename test/{sources/cli => soliditySources/errors}/SimpleError.sol (100%) rename test/{sources/statements => soliditySources/errors}/compilation-error.sol (100%) create mode 100644 test/soliditySources/external/CLibrary.sol create mode 100644 test/soliditySources/external/Face.sol create mode 100644 test/soliditySources/external/PureView.sol delete mode 100644 test/sources/assert/RequireMultiline.sol rename test/{ => units}/app.js (99%) rename test/{ => units}/assembly.js (90%) rename test/{ => units}/assert.js (98%) rename test/{ => units}/comments.js (97%) rename test/{ => units}/conditional.js (85%) rename test/{ => units}/expressions.js (80%) rename test/{ => units}/function.js (96%) create mode 100644 test/units/if.js rename test/{ => units}/loops.js (98%) rename test/{ => units}/return.js (92%) rename test/{ => units}/statements.js (96%) delete mode 100644 test/util/mockTestCommand.js delete mode 100644 test/util/vm.js diff --git a/.circleci/config.yml b/.circleci/config.yml index 9988e91..d7d4692 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -30,10 +30,12 @@ jobs: name: Run tests command: | npm run test-cov - - run: - name: Upload coverage - command: | - bash <(curl -s https://codecov.io/bash) + + # TODO: Re-enable + #- run: + # name: Upload coverage + # command: | + # bash <(curl -s https://codecov.io/bash) # This works but takes a while.... e2e-colony: @@ -56,7 +58,6 @@ jobs: name: Zeppelin E2E command: | ./scripts/run-zeppelin.sh - e2e-metacoin: machine: true steps: @@ -71,8 +72,9 @@ workflows: build: jobs: - unit-test - - e2e-zeppelin - - e2e-metacoin + # TODO: re-enable + #- e2e-zeppelin + #- e2e-metacoin nightly: triggers: - schedule: @@ -82,5 +84,6 @@ workflows: only: - master jobs: - - e2e-zeppelin + # TODO: re-enable + #- e2e-zeppelin #- e2e-colony diff --git a/.gitignore b/.gitignore index 70336c6..ccbbf4b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,7 @@ -allFiredEvents -scTopics -scDebugLog coverage.json coverage/ node_modules/ .changelog .DS_Store +test/artifacts +test/cache diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..2b4f4f7 --- /dev/null +++ b/.npmignore @@ -0,0 +1,3 @@ +test/ +.circleci/ +docs/ \ No newline at end of file diff --git a/buidler.config.js b/buidler.config.js new file mode 100644 index 0000000..4ce5404 --- /dev/null +++ b/buidler.config.js @@ -0,0 +1,18 @@ + +// Mute compiler warnings - this will need to be addressed properly in +// the Buidler plugin by overloading TASK_COMPILE_COMPILE. +const originalLog = console.log; +console.warn = () => {}; +console.log = val => val === '\n' ? null : originalLog(val); + +module.exports = { + solc: { + version: "0.5.8" + }, + paths: { + artifacts: "./test/artifacts", + cache: "./test/cache", + test: "./test/units", + sources: "./test/sources/contracts", + } +} diff --git a/lib/app.js b/lib/app.js index 6e08eda..edc0a55 100644 --- a/lib/app.js +++ b/lib/app.js @@ -1,14 +1,10 @@ const shell = require('shelljs'); const fs = require('fs'); const path = require('path'); -const childprocess = require('child_process'); -const readline = require('readline'); -const reqCwd = require('req-cwd'); const istanbul = require('istanbul'); -const treeKill = require('tree-kill'); -const getInstrumentedVersion = require('./instrumentSolidity.js'); -const CoverageMap = require('./coverageMap.js'); -const preprocessor = require('./preprocessor'); + +const Instrumenter = require('./instrumenter'); +const Coverage = require('./coverage'); const isWin = /^win/.test(process.platform); @@ -20,37 +16,24 @@ const gasPriceHex = 0x01; // Low gas price */ class App { constructor(config) { - this.coverageDir = './coverageEnv'; // Env that instrumented .sols are tested in + this.coverage = new Coverage(); + this.instrumenter = new Instrumenter(); + this.provider = config.provider; // Options - this.network = ''; // Default truffle network execution flag - this.silence = ''; // Default log level passed to shell - this.log = console.log; + this.silence = ''; // Default log level (passed to shell) + this.log = config.logger || console.log; // Configurable logging // Other - this.testrpcProcess = null; // ref to testrpc server we need to close on exit - this.events = null; // ref to string array loaded from 'allFiredEvents' - this.testsErrored = null; // flag set to non-null if truffle tests error - this.coverage = new CoverageMap(); // initialize a coverage map - this.originalArtifacts = []; // Artifacts from original build (we swap these in) + this.testsErrored = false; // Toggle true when tests error this.skippedFolders = []; // Config this.config = config || {}; + this.contractsDir = config.contractsDir || 'contracts'; + this.coverageDir = './.coverageEnv'; // Contracts dir of instrumented .sols this.workingDir = config.dir || '.'; // Relative path to contracts folder - this.accounts = config.accounts || 35; // Number of accounts to testrpc launches with - this.skipFiles = config.skipFiles || []; // Which files should be skipped during instrumentation - this.norpc = config.norpc || false; // Launch testrpc-sc internally? - this.port = config.port || 8555; // Port testrpc should listen on - this.buildDirPath = config.buildDirPath || '/build/contracts' // Build directory path for compiled smart contracts - - this.copyNodeModules = config.copyNodeModules || false; // Copy node modules into coverageEnv? - this.copyPackages = config.copyPackages || []; // Only copy specific node_modules packages into coverageEnv - this.testrpcOptions = config.testrpcOptions || null; // Options for testrpc-sc - this.testCommand = config.testCommand || null; // Optional test command - this.compileCommand = config.compileCommand || null; // Optional compile command - this.deepSkip = config.deepSkip || null; // Don't post-process skipped files - + this.skipFiles = config.skipFiles || []; // Files to exclude from instrumentation this.setLoggingLevel(config.silent); } @@ -58,83 +41,18 @@ class App { /** * Generates a copy of the target project configured for solidity-coverage and saves to - * the coverage environment folder. Process exits(1) if try fails + * the coverage environment folder. */ generateCoverageEnvironment() { this.log('Generating coverage environment'); try { this.sanityCheckContext(); + this.identifySkippedFolders(); - let files = shell.ls('-A', this.workingDir); - const nmIndex = files.indexOf('node_modules'); - - // Removes node_modules from array (unless requested). - if (!this.copyNodeModules && nmIndex > -1) { - files.splice(nmIndex, 1); - } - - // Identify folders to exclude - this.skipFiles.forEach(item => { - if (path.extname(item) !== '.sol') - this.skippedFolders.push(item); - }); - - files = files.map(file => `${this.workingDir}/${file}`); shell.mkdir(this.coverageDir); - shell.cp('-R', files, this.coverageDir); - - // Add specific node_modules packages. - if (!this.copyNodeModules && this.copyPackages.length) { - shell.mkdir(this.coverageDir + '/node_modules'); - this.copyPackages.forEach((nodePackage) => { - shell.mkdir('-p', this.coverageDir + '/node_modules/' + nodePackage); - shell.cp('-rfL', 'node_modules/' + nodePackage + '/.', this.coverageDir + '/node_modules/' + nodePackage); - }); - } - - // Load config - const coverageNetwork = { - host: 'localhost', - network_id: '*', - port: this.port, - gas: gasLimitHex, - gasPrice: gasPriceHex - }; - let truffleConfig = { - networks: { - coverage: coverageNetwork - } - }; - let newTrufflePath = `${this.workingDir}/truffle-config.js`; - let oldTrufflePath = `${this.workingDir}/truffle.js`; - - if (shell.test('-e', newTrufflePath)) truffleConfig = reqCwd.silent(newTrufflePath); - else if (shell.test('-e', oldTrufflePath)) truffleConfig = reqCwd.silent(oldTrufflePath); - - this.network = '--network coverage'; - - // Coverage network opts specified: use port if declared - if (truffleConfig.networks && truffleConfig.networks.coverage) { - this.port = truffleConfig.networks.coverage.port || this.port; - } else { - // Put the coverage network in the existing config - if (!truffleConfig.networks) truffleConfig.networks = {}; - truffleConfig.networks.coverage = coverageNetwork; - const configString = `module.exports = ${JSON.stringify(truffleConfig)}`; - fs.writeFileSync(`${this.coverageDir}/truffle-config.js`, configString); - } - - // Compile the contracts before instrumentation and preserve their ABI's. - // We will be stripping out access modifiers like view before we recompile - // post-instrumentation. - if (shell.test('-e', `${this.coverageDir}${this.buildDirPath}`)){ - shell.rm('-Rf', `${this.coverageDir}${this.buildDirPath}`) - } - this.runCompileCommand(); - this.originalArtifacts = this.loadArtifacts(); - shell.rm('-Rf', `${this.coverageDir}${this.buildDirPath}`); + shell.cp('-Rf', this.contractsDir, this.coverageDir) } catch (err) { const msg = ('There was a problem generating the coverage environment: '); @@ -147,31 +65,33 @@ class App { * + Generate file path reference for coverage report * + Load contract as string * + Instrument contract - * + Save instrumented contract in the coverage environment folder where covered tests will run + * + Save instrumented contract to a temp folder which will be the new 'contractsDir for tests' * + Add instrumentation info to the coverage map */ + instrumentTarget() { - this.skipFiles = this.skipFiles.map(contract => `${this.coverageDir}/contracts/${contract}`); - this.skipFiles.push(`${this.coverageDir}/contracts/Migrations.sol`); + this.skipFiles = this.skipFiles.map(contract => `${this.coverageDir}/${contract}`); + this.skipFiles.push(`${this.coverageDir}/Migrations.sol`); - const instrumentedFiles = []; let currentFile; try { - shell.ls(`${this.coverageDir}/contracts/**/*.sol`).forEach(file => { + shell.ls(`${this.coverageDir}/**/*.sol`).forEach(file => { currentFile = file; if (!this.skipFiles.includes(file) && !this.inSkippedFolder(file)) { this.log('Instrumenting ', file); + // Remember the real path const contractPath = this.platformNeutralPath(file); const working = this.workingDir.substring(1); const canonicalPath = contractPath.split('/coverageEnv').join(working); - const contract = fs.readFileSync(contractPath).toString(); - const instrumentedContractInfo = getInstrumentedVersion(contract, canonicalPath); - fs.writeFileSync(contractPath, instrumentedContractInfo.contract); - this.coverage.addContract(instrumentedContractInfo, canonicalPath); - instrumentedFiles.push(file); + // Instrument contract, save, add to coverage map + const contract = this.loadContract(contractPath); + const instrumented = this.instrumenter.instrument(contract, canonicalPath); + this.saveContract(contractPath, instrumented.contract); + this.coverage.addContract(instrumented, canonicalPath); + } else { this.log('Skipping instrumentation of ', file); } @@ -181,196 +101,58 @@ class App { this.cleanUp(msg + err); } - // Strip any view / pure modifiers in other files in case they depend on any instrumented files - shell - .ls(`${this.coverageDir}/**/*.sol`) - .filter(file => !instrumentedFiles.includes(file)) - .forEach(file => { - - // Skip post-processing of skipped files - if (this.deepSkip && (this.skipFiles.includes(file) || this.inSkippedFolder(file))) return; - - const contractPath = this.platformNeutralPath(file); - const contract = fs.readFileSync(contractPath).toString(); - const contractProcessed = preprocessor.run(contract); - if (contractProcessed.name && contractProcessed.name === 'SyntaxError' && file.slice(-15) !== 'SimpleError.sol') { - console.log(`Warning: The file at ${file} was identified as a Solidity Contract, ` + - 'but did not parse correctly. You may ignore this warning if it is not a Solidity file, ' + - 'or your project does not use it'); - } else { - fs.writeFileSync(contractPath, contractProcessed); - } - }); - - // Now that they've been modified, compile all the contracts again - this.runCompileCommand(); - - // And swap the original abis into the instrumented artifacts so that truffle etc uses 'call' - // on them. - this.modifyArtifacts(); + this.collector = new DataCollector( + this.provider, + this.instrumenter.intrumentationData + ) } /** - * Run modified testrpc with large block limit, on (hopefully) unused port. - * Changes here should be also be added to the before() block of test/run.js). - * @return {Promise} Resolves when testrpc prints 'Listening' to std out / norpc is true. + * Generate coverage / write coverage report / run istanbul */ - launchTestrpc() { - return new Promise((resolve, reject) => { - if (!this.norpc) { - const defaultRpcOptions = `--accounts ${this.accounts} --port ${this.port}`; - const options = (this.testrpcOptions || defaultRpcOptions) + ` --gasLimit ${gasLimitHex}`; - - // Launch - const execOpts = {maxBuffer: 1024 * 1024 * 100}; - this.testrpcProcess = childprocess.exec(`npx testrpc-sc ${options}`, execOpts, (err, stdout, stderr) => { - if (err) { - if (stdout) this.log(`testRpc stdout:\n${stdout}`); - if (stderr) this.log(`testRpc stderr:\n${stderr}`); - this.cleanUp('testRpc errored after launching as a childprocess.'); - } - }); + async generateReport() { + const collector = new istanbul.Collector(); + const reporter = new istanbul.Reporter(); - // Resolve when testrpc logs that it's listening. - this.testrpcProcess.stdout.on('data', data => { - if (data.includes('Listening')) { - this.log(`Launched testrpc on port ${this.port}`); - return resolve(); - } + return new Promise((resolve, reject) => { + try { + const contractsPath = `${this.workingDir}/${this.config.contractsDir}` + this.coverage.generate(this.instrumenter.instrumentationData, contractsPath); + + const relativeMapping = this.makeKeysRelative(this.coverage.data, this.workingDir); + this.saveCoverage(relativeMapping); + + collector.add(relativeMapping); + reporter.add('html'); + reporter.add('lcov'); + reporter.add('text'); + + reporter.write(collector, true, () => { + this.log('Istanbul coverage reports generated'); + this.cleanUp(); + resolve(); }); - } else { - return resolve(); + } catch (err) { + const msg = 'There was a problem generating the coverage map / running Istanbul.\n'; + console.log(err.stack); + this.cleanUp(msg + err); } }); } - /** - * Run truffle (or config.testCommand) over instrumented contracts in the - * coverage environment folder. Shell cd command needs to be invoked - * as its own statement for command line options to work, apparently. - * Also reads the 'allFiredEvents' log. - */ - runTestCommand() { - try { - const defaultCommand = `truffle test ${this.network} ${this.silence}`; - const command = this.testCommand || defaultCommand; - this.log(`Running: ${command}\n(this can take a few seconds)...`); - shell.cd(this.coverageDir); - shell.exec(command); - this.testsErrored = shell.error(); - shell.cd('./..'); - } catch (err) { - const msg = - ` - There was an error generating coverage. Possible reasons include: - 1. Another application is using port ${this.port} - 2. Your test runner (Truffle?) crashed because the tests encountered an error. - - `; - this.cleanUp(msg + err); - } - } - - /** - * Run truffle compile (or config.compileCommand) over instrumented contracts in the - * coverage environment folder. Shell cd command needs to be invoked - * as its own statement for command line options to work, apparently. - */ - runCompileCommand() { - try { - const defaultCommand = `truffle compile ${this.network} ${this.silence}`; - const command = this.compileCommand || defaultCommand; - this.log(`Running: ${command}\n(this can take a few seconds)...`); - - shell.cd(this.coverageDir); - shell.exec(command); - this.testsErrored = shell.error(); - shell.cd('./..'); - } catch (err) { - const msg = - ` - There was an error compiling the contracts. - `; - this.cleanUp(msg + err); - } - } - - /** - * Loads artifacts generated by compiling the contracts before we instrument them. - * @return {Array} Array of artifact objects - */ - loadArtifacts() { - const artifacts = []; - - shell.ls(`${this.coverageDir}${this.buildDirPath}/*.json`).forEach(file => { - const artifactPath = this.platformNeutralPath(file); - const artifactRaw = fs.readFileSync(artifactPath); - const artifact = JSON.parse(artifactRaw); - artifacts.push(artifact); - }) - return artifacts; + // ------------------------------------------ Utils ---------------------------------------------- + loadContract(_path){ + return fs.readFileSync(_path).toString(); } - /** - * Swaps original ABIs into artifacts generated post-instrumentation. We are stripping - * access modifiers like `view` out of the source during that step and need to ensure - * truffle automatically invokes those methods by `.call`, based on the ABI sig. - */ - modifyArtifacts(){ - shell.ls(`${this.coverageDir}${this.buildDirPath}/*.json`).forEach((file, index) => { - const artifactPath = this.platformNeutralPath(file); - const artifactRaw = fs.readFileSync(artifactPath); - const artifact = JSON.parse(artifactRaw); - artifact.abi = this.originalArtifacts[index].abi; - fs.writeFileSync(artifactPath, JSON.stringify(artifact)); - }) + saveContract(_path, contract){ + fs.writeFileSync(_path, contract); } - /** - * Generate coverage / write coverage report / run istanbul - */ - generateReport() { - const collector = new istanbul.Collector(); - const reporter = new istanbul.Reporter(); - - return new Promise((resolve, reject) => { - // Get events fired during instrumented contracts execution. - const stream = fs.createReadStream(`./allFiredEvents`); - stream.on('error', err => this.cleanUp('Event trace could not be read.\n' + err)); - const reader = readline.createInterface({ - input: stream, - }); - this.events = []; - reader - .on('line', line => this.events.push(line)) - .on('close', () => { - // Generate Istanbul report - try { - this.coverage.generate(this.events, `${this.workingDir}/contracts`); - const relativeMapping = this.makeKeysRelative(this.coverage.coverage, this.workingDir); - const json = JSON.stringify(relativeMapping); - fs.writeFileSync('./coverage.json', json); - - collector.add(relativeMapping); - reporter.add('html'); - reporter.add('lcov'); - reporter.add('text'); - reporter.write(collector, true, () => { - this.log('Istanbul coverage reports generated'); - this.cleanUp(); - resolve(); - }); - } catch (err) { - const msg = 'There was a problem generating the coverage map / running Istanbul.\n'; - console.log(err.stack); - this.cleanUp(msg + err); - } - }); - }); + saveCoverage(coverageObject){ + fs.writeFileSync('./coverage.json', JSON.stringify(coverageObject)); } - // ------------------------------------------ Utils ---------------------------------------------- - sanityCheckContext(){ if (!shell.test('-e', `${this.workingDir}/contracts`)){ this.cleanUp("Couldn't find a 'contracts' folder to instrument."); @@ -379,10 +161,6 @@ class App { if (shell.test('-e', `${this.workingDir}/${this.coverageDir}`)){ shell.rm('-Rf', this.coverageDir); } - - if (shell.test('-e', `${this.workingDir}/scTopics`)){ - shell.rm(`${this.workingDir}/scTopics`); - } } /** @@ -393,16 +171,14 @@ class App { */ makeKeysRelative(map, root) { const newCoverage = {}; - Object.keys(map).forEach(pathKey => { - newCoverage[path.relative(root, pathKey)] = map[pathKey]; - }); + Object.keys(map).forEach(pathKey => newCoverage[path.relative(root, pathKey)] = map[pathKey]); return newCoverage; } /** - * Conver absolute paths from Windows, if necessary + * Normalizes windows paths * @param {String} file path - * @return {[type]} normalized path + * @return {String} normalized path */ platformNeutralPath(file) { return (isWin) @@ -412,7 +188,7 @@ class App { /** * Determines if a file is in a folder marked skippable. - * @param {String} file file path + * @param {String} file file path * @return {Boolean} */ inSkippedFolder(file){ @@ -425,6 +201,18 @@ class App { return shouldSkip; } + /** + * Helper for parsing the skipFiles option, which also accepts folders. + */ + identifySkippedFolders(){ + let files = shell.ls('-A', this.workingDir); + + this.skipFiles.forEach(item => { + if (path.extname(item) !== '.sol') + this.skippedFolders.push(item); + }); + } + /** * Allows config to turn logging off (for CI) * @param {Boolean} isSilent @@ -436,10 +224,14 @@ class App { } } + + /** * Removes coverage build artifacts, kills testrpc. * Exits (1) and prints msg on error, exits (0) otherwise. * @param {String} err error message + * + * TODO this needs to delegate process exit to the outer tool.... */ cleanUp(err) { const self = this; @@ -459,17 +251,7 @@ class App { self.log('Cleaning up...'); shell.config.silent = true; shell.rm('-Rf', self.coverageDir); - shell.rm('./allFiredEvents'); - shell.rm('./scTopics'); - - if (self.testrpcProcess) { - treeKill(self.testrpcProcess.pid, function(killError){ - self.log(`Shutting down testrpc-sc (pid ${self.testrpcProcess.pid})`) - exit(err) - }); - } else { - exit(err); - } + exit(err); } } diff --git a/lib/collector.js b/lib/collector.js new file mode 100644 index 0000000..dba2266 --- /dev/null +++ b/lib/collector.js @@ -0,0 +1,39 @@ +const web3Utils = require('web3-utils') + +class DataCollector { + constructor(config={}, instrumentationData={}){ + this.instrumentationData = instrumentationData; + + this.vm = config.vmResolver + ? config.vmResolver(config.provider) + : this._ganacheVMResolver(config.provider); + + this._connect(); + } + + // Subscribes to vm.on('step'). + _connect(){ + const self = this; + this.vm.on("step", function(info){ + + if (info.opcode.name.includes("PUSH") && info.stack.length > 0){ + const idx = info.stack.length - 1; + const hash = web3Utils.toHex(info.stack[idx]).toString(); + + if(self.instrumentationData[hash]){ + self.instrumentationData[hash].hits++; + } + } + }) + } + + _ganacheVMResolver(provider){ + return provider.engine.manager.state.blockchain.vm; + } + + _setInstrumentationData(data){ + this.instrumentationData = data; + } +} + +module.exports = DataCollector; diff --git a/lib/coverage.js b/lib/coverage.js new file mode 100644 index 0000000..5897347 --- /dev/null +++ b/lib/coverage.js @@ -0,0 +1,112 @@ +/** + * Converts instrumentation data accumulated a the vm steps to an instanbul spec coverage object. + * @type {Coverage} + */ +class Coverage { + + constructor() { + this.data = {}; + this.assertData = {}; + this.lineTopics = []; + this.functionTopics = []; + this.branchTopics = []; + this.statementTopics = []; + this.assertPreTopics = []; + this.assertPostTopics = []; + } + + /** + * Initializes a coverage map object for contract + * + instrumented per `info` + * + located at `canonicalContractPath` + * @param {Object} info `info = getIntrumentedVersion(contract, fileName, true)` + * @param {String} canonicalContractPath path to contract file + * @return {Object} coverage map with all values set to zero + */ + + addContract(info, canonicalContractPath) { + this.data[canonicalContractPath] = { + l: {}, + path: canonicalContractPath, + s: {}, + b: {}, + f: {}, + fnMap: {}, + statementMap: {}, + branchMap: {}, + }; + this.assertData[canonicalContractPath] = { }; + + info.runnableLines.forEach((item, idx) => { + this.data[canonicalContractPath].l[info.runnableLines[idx]] = 0; + }); + + this.data[canonicalContractPath].fnMap = info.fnMap; + for (let x = 1; x <= Object.keys(info.fnMap).length; x++) { + this.data[canonicalContractPath].f[x] = 0; + } + + this.data[canonicalContractPath].branchMap = info.branchMap; + for (let x = 1; x <= Object.keys(info.branchMap).length; x++) { + this.data[canonicalContractPath].b[x] = [0, 0]; + this.assertData[canonicalContractPath][x] = { + preEvents: 0, + postEvents: 0, + }; + } + + this.data[canonicalContractPath].statementMap = info.statementMap; + for (let x = 1; x <= Object.keys(info.statementMap).length; x++) { + this.data[canonicalContractPath].s[x] = 0; + } + } + + /** + * Populates an empty coverage map with values derived from a hash map of + * data collected as the instrumented contracts are tested + * @param {Object} map of collected instrumentation data + * @return {Object} coverage map. + */ + generate(collectedData) { + const hashes = Object.keys(collectedData); + + for (let hash of hashes){ + const data = collectedData[hash]; + const contractPath = collectedData[hash].contractPath; + const id = collectedData[hash].id; + const hits = collectedData[hash].hits; + + switch(collectedData[hash].type){ + case 'line': this.data[contractPath].l[id] = hits; break; + case 'function': this.data[contractPath].f[id] = hits; break; + case 'statement': this.data[contractPath].s[id] = hits; break; + case 'branch': this.data[contractPath].b[id][data.locationIdx] = hits; break; + case 'assertPre': this.assertData[contractPath][id].preEvents = hits; break; + case 'assertPost': this.assertData[contractPath][id].postEvents = hits; break; + } + } + + // Finally, interpret the assert pre/post events + const contractPaths = Object.keys(this.assertData); + + for (let contractPath of contractPaths){ + const contract = this.data[contractPath]; + + Object.keys(contract.b).forEach((item, i) => { + const branch = this.assertData[contractPath][i]; + + // Was it an assert branch? + if (branch && branch.preEvents > 0){ + this.data[contractPath].b[i] = [ + branch.postEvents, + branch.preEvents - branch.postEvents + ] + } + }) + } + + return Object.assign({}, this.data); + } +}; + +module.exports = Coverage; diff --git a/lib/coverageMap.js b/lib/coverageMap.js deleted file mode 100644 index 1fc4dee..0000000 --- a/lib/coverageMap.js +++ /dev/null @@ -1,145 +0,0 @@ - -/** - * This file contains methods that produce a coverage map to pass to instanbul - * from data generated by `instrumentSolidity.js` - */ -const { AbiCoder } = require('web3-eth-abi'); -const SolidityCoder = AbiCoder(); -const path = require('path'); -const keccak = require('keccakjs'); -const fs = require('fs'); - -/** - * Converts solcover event data into an object that can be - * be passed to instanbul to produce coverage reports. - * @type {CoverageMap} - */ -module.exports = class CoverageMap { - - constructor() { - this.coverage = {}; - this.assertCoverage = {}; - this.lineTopics = []; - this.functionTopics = []; - this.branchTopics = []; - this.statementTopics = []; - this.assertPreTopics = []; - this.assertPostTopics = []; - } - - /** - * Initializes a coverage map object for contract instrumented per `info` and located - * at `canonicalContractPath` - * @param {Object} info `info = getIntrumentedVersion(contract, fileName, true)` - * @param {String} canonicalContractPath target file location - * @return {Object} coverage map with all values set to zero - */ - - addContract(info, canonicalContractPath) { - this.coverage[canonicalContractPath] = { - l: {}, - path: canonicalContractPath, - s: {}, - b: {}, - f: {}, - fnMap: {}, - statementMap: {}, - branchMap: {}, - }; - this.assertCoverage[canonicalContractPath] = { }; - - info.runnableLines.forEach((item, idx) => { - this.coverage[canonicalContractPath].l[info.runnableLines[idx]] = 0; - }); - this.coverage[canonicalContractPath].fnMap = info.fnMap; - for (let x = 1; x <= Object.keys(info.fnMap).length; x++) { - this.coverage[canonicalContractPath].f[x] = 0; - } - this.coverage[canonicalContractPath].branchMap = info.branchMap; - for (let x = 1; x <= Object.keys(info.branchMap).length; x++) { - this.coverage[canonicalContractPath].b[x] = [0, 0]; - this.assertCoverage[canonicalContractPath][x] = { - preEvents: 0, - postEvents: 0, - }; - } - this.coverage[canonicalContractPath].statementMap = info.statementMap; - for (let x = 1; x <= Object.keys(info.statementMap).length; x++) { - this.coverage[canonicalContractPath].s[x] = 0; - } - - const keccakhex = (x => { - const hash = new keccak(256); // eslint-disable-line new-cap - hash.update(x); - return hash.digest('hex'); - }); - - const lineHash = keccakhex('__Coverage' + info.contractName + '(string,uint256)'); - const fnHash = keccakhex('__FunctionCoverage' + info.contractName + '(string,uint256)'); - const branchHash = keccakhex('__BranchCoverage' + info.contractName + '(string,uint256,uint256)'); - const statementHash = keccakhex('__StatementCoverage' + info.contractName + '(string,uint256)'); - const assertPreHash = keccakhex('__AssertPreCoverage' + info.contractName + '(string,uint256)'); - const assertPostHash = keccakhex('__AssertPostCoverage' + info.contractName + '(string,uint256)'); - - this.lineTopics.push(lineHash); - this.functionTopics.push(fnHash); - this.branchTopics.push(branchHash); - this.statementTopics.push(statementHash); - this.assertPreTopics.push(assertPreHash); - this.assertPostTopics.push(assertPostHash); - - const topics = `${lineHash}\n${fnHash}\n${branchHash}\n${statementHash}\n${assertPreHash}\n${assertPostHash}\n`; - fs.appendFileSync('./scTopics', topics); - } - - /** - * Populates an empty coverage map with values derived from an array of events - * fired by instrumented contracts as they are tested - * @param {Array} events - * @param {String} relative path to host contracts eg: './../contracts' - * @return {Object} coverage map. - */ - generate(events, pathPrefix) { - for (let idx = 0; idx < events.length; idx++) { - const event = JSON.parse(events[idx]); - - if (event.topics.filter(t => this.lineTopics.indexOf(t) >= 0).length > 0) { - const data = SolidityCoder.decodeParameters(['string', 'uint256'], `0x${event.data}`); - const canonicalContractPath = data[0]; - this.coverage[canonicalContractPath].l[parseInt(data[1], 10)] += 1; - } else if (event.topics.filter(t => this.functionTopics.indexOf(t) >= 0).length > 0) { - const data = SolidityCoder.decodeParameters(['string', 'uint256'], `0x${event.data}`); - const canonicalContractPath = data[0]; - this.coverage[canonicalContractPath].f[parseInt(data[1], 10)] += 1; - } else if (event.topics.filter(t => this.branchTopics.indexOf(t) >= 0).length > 0) { - const data = SolidityCoder.decodeParameters(['string', 'uint256', 'uint256'], `0x${event.data}`); - const canonicalContractPath = data[0]; - this.coverage[canonicalContractPath].b[parseInt(data[1], 10)][parseInt(data[2], 10)] += 1; - } else if (event.topics.filter(t => this.statementTopics.indexOf(t) >= 0).length > 0) { - const data = SolidityCoder.decodeParameters(['string', 'uint256'], `0x${event.data}`); - const canonicalContractPath = data[0]; - this.coverage[canonicalContractPath].s[parseInt(data[1], 10)] += 1; - } else if (event.topics.filter(t => this.assertPreTopics.indexOf(t) >= 0).length > 0) { - const data = SolidityCoder.decodeParameters(['string', 'uint256'], `0x${event.data}`); - const canonicalContractPath = data[0]; - this.assertCoverage[canonicalContractPath][parseInt(data[1], 10)].preEvents += 1; - } else if (event.topics.filter(t => this.assertPostTopics.indexOf(t) >= 0).length > 0) { - const data = SolidityCoder.decodeParameters(['string', 'uint256'], `0x${event.data}`); - const canonicalContractPath = data[0]; - this.assertCoverage[canonicalContractPath][parseInt(data[1], 10)].postEvents += 1; - } - } - // Finally, interpret the assert pre/post events - Object.keys(this.assertCoverage).forEach(contractPath => { - const contract = this.coverage[contractPath]; - for (let i = 1; i <= Object.keys(contract.b).length; i++) { - const branch = this.assertCoverage[contractPath][i]; - if (branch.preEvents > 0) { - // Then it was an assert branch. - this.coverage[contractPath].b[i] = [branch.postEvents, branch.preEvents - branch.postEvents]; - } - } - }); - return Object.assign({}, this.coverage); - } -}; diff --git a/lib/injector.js b/lib/injector.js index 6e7306f..db1722f 100644 --- a/lib/injector.js +++ b/lib/injector.js @@ -1,77 +1,184 @@ -const injector = {}; - -// These functions are used to actually inject the instrumentation events. - -injector.callEvent = function injectCallEvent(contract, fileName, injectionPoint) { - const linecount = (contract.instrumented.slice(0, injectionPoint).match(/\n/g) || []).length + 1; - contract.runnableLines.push(linecount); - contract.instrumented = contract.instrumented.slice(0, injectionPoint) + - 'emit __Coverage' + contract.contractName + '(\'' + fileName + '\',' + linecount + ');\n' + - contract.instrumented.slice(injectionPoint); -}; - -injector.callFunctionEvent = function injectCallFunctionEvent(contract, fileName, injectionPoint, injection) { - contract.instrumented = contract.instrumented.slice(0, injectionPoint) + - 'emit __FunctionCoverage' + contract.contractName + '(\'' + fileName + '\',' + injection.fnId + ');\n' + - contract.instrumented.slice(injectionPoint); -}; - -injector.callBranchEvent = function injectCallFunctionEvent(contract, fileName, injectionPoint, injection) { - contract.instrumented = contract.instrumented.slice(0, injectionPoint) + - (injection.openBracket ? '{' : '') + - 'emit __BranchCoverage' + contract.contractName + '(\'' + fileName + '\',' + injection.branchId + ',' + injection.locationIdx + ')' + - (injection.comma ? ',' : ';') + - contract.instrumented.slice(injectionPoint); -}; - -injector.callEmptyBranchEvent = function injectCallEmptyBranchEvent(contract, fileName, injectionPoint, injection) { - contract.instrumented = contract.instrumented.slice(0, injectionPoint) + - 'else { emit __BranchCoverage' + contract.contractName + '(\'' + fileName + '\',' + injection.branchId + ',' + injection.locationIdx + ');}\n' + - contract.instrumented.slice(injectionPoint); -}; - - -injector.callAssertPreEvent = function callAssertPreEvent(contract, fileName, injectionPoint, injection) { - contract.instrumented = contract.instrumented.slice(0, injectionPoint) + - 'emit __AssertPreCoverage' + contract.contractName + '(\'' + fileName + '\',' + injection.branchId + ');\n' + - contract.instrumented.slice(injectionPoint); -}; - -injector.callAssertPostEvent = function callAssertPostEvent(contract, fileName, injectionPoint, injection) { - contract.instrumented = contract.instrumented.slice(0, injectionPoint) + - 'emit __AssertPostCoverage' + contract.contractName + '(\'' + fileName + '\',' + injection.branchId + ');\n' + - contract.instrumented.slice(injectionPoint); +const sha1 = require("sha1"); +const web3Utils = require("web3-utils"); + +class Injector { + constructor(){ + this.hashCounter = 0; + this.definitionCounter = 0; + } + + /** + * Generates solidity statement to inject for line, stmt, branch, fn 'events' + * @param {String} memoryVariable + * @param {String} hash hash key to an instrumentationData entry (see _getHash) + * @param {String} type instrumentation type, e.g. line, statement + * @return {String} ex: _sc_82e0891[0] = bytes32(0xdc08...08ed1); // function + */ + _getInjectable(memoryVariable, hash, type){ + return `${memoryVariable}[0] = bytes32(${hash}); /* ${type} */ \n`; + } + + + _getHash(fileName) { + this.hashCounter++; + return web3Utils.keccak256(`${fileName}:${this.hashCounter}`); + } + + /** + * Generates a solidity statement injection. Declared once per fn. + * Definition is the same for every fn in file. + * @param {String} fileName + * @return {String} ex: bytes32[1] memory _sc_82e0891 + */ + _getMemoryVariableDefinition(fileName){ + this.definitionCounter++; + return `\nbytes32[1] memory _sc_${sha1(fileName).slice(0,7)};\n`; + } + + _getMemoryVariableAssignment(fileName){ + return `\n_sc_${sha1(fileName).slice(0,7)}`; + } + + + injectLine(contract, fileName, injectionPoint, injection, instrumentation){ + const type = 'line'; + const start = contract.instrumented.slice(0, injectionPoint); + const end = contract.instrumented.slice(injectionPoint); + + const newLines = start.match(/\n/g); + const linecount = ( newLines || []).length + 1; + contract.runnableLines.push(linecount); + + const hash = this._getHash(fileName); + const memoryVariable = this._getMemoryVariableAssignment(fileName); + const injectable = this._getInjectable(memoryVariable, hash , type) + + instrumentation[hash] = { + id: linecount, + type: type, + contractPath: fileName, + hits: 0 + } + + contract.instrumented = `${start}${injectable}${end}`; + } + + injectStatement(contract, fileName, injectionPoint, injection, instrumentation) { + const type = 'statement'; + const start = contract.instrumented.slice(0, injectionPoint); + const end = contract.instrumented.slice(injectionPoint); + + const hash = this._getHash(fileName); + const memoryVariable = this._getMemoryVariableAssignment(fileName); + const injectable = this._getInjectable(memoryVariable, hash, type) + + instrumentation[hash] = { + id: injection.statementId, + type: type, + contractPath: fileName, + hits: 0 + } + + contract.instrumented = `${start}${injectable}${end}`; + }; + + injectFunction(contract, fileName, injectionPoint, injection, instrumentation){ + const type = 'function'; + const start = contract.instrumented.slice(0, injectionPoint); + const end = contract.instrumented.slice(injectionPoint); + + const hash = this._getHash(fileName); + const memoryVariableDefinition = this._getMemoryVariableDefinition(fileName); + const memoryVariable = this._getMemoryVariableAssignment(fileName); + const injectable = this._getInjectable(memoryVariable, hash, type); + + instrumentation[hash] = { + id: injection.fnId, + type: type, + contractPath: fileName, + hits: 0 + } + + contract.instrumented = `${start}${memoryVariableDefinition}${injectable}${end}`; + } + + injectBranch(contract, fileName, injectionPoint, injection, instrumentation){ + const type = 'branch'; + const start = contract.instrumented.slice(0, injectionPoint); + const end = contract.instrumented.slice(injectionPoint); + + const hash = this._getHash(fileName); + const memoryVariable = this._getMemoryVariableAssignment(fileName); + const injectable = this._getInjectable(memoryVariable, hash, type); + + instrumentation[hash] = { + id: injection.branchId, + locationIdx: injection.locationIdx, + type: type, + contractPath: fileName, + hits: 0 + } + + contract.instrumented = `${start}${injectable}${end}`; + } + + injectEmptyBranch(contract, fileName, injectionPoint, injection, instrumentation) { + const type = 'branch'; + const start = contract.instrumented.slice(0, injectionPoint); + const end = contract.instrumented.slice(injectionPoint); + + const hash = this._getHash(fileName); + const memoryVariable = this._getMemoryVariableAssignment(fileName); + const injectable = this._getInjectable(memoryVariable, hash, type); + + instrumentation[hash] = { + id: injection.branchId, + locationIdx: injection.locationIdx, + type: type, + contractPath: fileName, + hits: 0 + } + + contract.instrumented = `${start}else { ${injectable}}${end}`; + } + + injectAssertPre(contract, fileName, injectionPoint, injection, instrumentation) { + const type = 'assertPre'; + const start = contract.instrumented.slice(0, injectionPoint); + const end = contract.instrumented.slice(injectionPoint); + + const hash = this._getHash(fileName); + const memoryVariable = this._getMemoryVariableAssignment(fileName); + const injectable = this._getInjectable(memoryVariable, hash, type); + + instrumentation[hash] = { + id: injection.branchId, + type: type, + contractPath: fileName, + hits: 0 + } + + contract.instrumented = `${start}${injectable}${end}`; + } + + injectAssertPost(contract, fileName, injectionPoint, injection, instrumentation) { + const type = 'assertPost'; + const start = contract.instrumented.slice(0, injectionPoint); + const end = contract.instrumented.slice(injectionPoint); + + const hash = this._getHash(fileName); + const memoryVariable = this._getMemoryVariableAssignment(fileName); + const injectable = this._getInjectable(memoryVariable, hash, type); + + instrumentation[hash] = { + id: injection.branchId, + type: type, + contractPath: fileName, + hits: 0 + } + + contract.instrumented = `${start}${injectable}${end}`; + } }; -injector.openParen = function injectOpenParen(contract, fileName, injectionPoint, injection) { - contract.instrumented = contract.instrumented.slice(0, injectionPoint) + '(' + contract.instrumented.slice(injectionPoint); -}; - -injector.closeParen = function injectCloseParen(contract, fileName, injectionPoint, injection) { - contract.instrumented = contract.instrumented.slice(0, injectionPoint) + ')' + contract.instrumented.slice(injectionPoint); -}; - -injector.literal = function injectLiteral(contract, fileName, injectionPoint, injection) { - contract.instrumented = contract.instrumented.slice(0, injectionPoint) + injection.string + contract.instrumented.slice(injectionPoint); -}; - -injector.statement = function injectStatement(contract, fileName, injectionPoint, injection) { - contract.instrumented = contract.instrumented.slice(0, injectionPoint) + - 'emit __StatementCoverage' + contract.contractName + '(\'' + fileName + '\',' + injection.statementId + ');\n' + - contract.instrumented.slice(injectionPoint); -}; - -injector.eventDefinition = function injectEventDefinition(contract, fileName, injectionPoint, injection) { - contract.instrumented = contract.instrumented.slice(0, injectionPoint) + - 'event __Coverage' + contract.contractName + '(string fileName, uint256 lineNumber);\n' + - 'event __FunctionCoverage' + contract.contractName + '(string fileName, uint256 fnId);\n' + - 'event __StatementCoverage' + contract.contractName + '(string fileName, uint256 statementId);\n' + - 'event __BranchCoverage' + contract.contractName + '(string fileName, uint256 branchId, uint256 locationIdx);\n' + - 'event __AssertPreCoverage' + contract.contractName + '(string fileName, uint256 branchId);\n' + - 'event __AssertPostCoverage' + contract.contractName + '(string fileName, uint256 branchId);\n' + - - contract.instrumented.slice(injectionPoint); -}; - - -module.exports = injector; +module.exports = Injector; diff --git a/lib/instrumentSolidity.js b/lib/instrumentSolidity.js deleted file mode 100644 index eae7ff8..0000000 --- a/lib/instrumentSolidity.js +++ /dev/null @@ -1,65 +0,0 @@ -const SolidityParser = require('solidity-parser-antlr'); -const preprocessor = require('./preprocessor'); -const injector = require('./injector'); -const parse = require('./parse'); - -const path = require('path'); - -module.exports = function instrumentSolidity(contractSource, fileName) { - const contract = {}; - contract.source = contractSource; - contract.instrumented = contractSource; - - contract.runnableLines = []; - contract.fnMap = {}; - contract.fnId = 0; - contract.branchMap = {}; - contract.branchId = 0; - contract.statementMap = {}; - contract.statementId = 0; - contract.injectionPoints = {}; - - // First, we run over the original contract to get the source mapping. - let ast = SolidityParser.parse(contract.source, {range: true}); - parse[ast.type](contract, ast); - const retValue = JSON.parse(JSON.stringify(contract)); - - // Now, we reset almost everything and use the preprocessor first to increase our effectiveness. - contract.runnableLines = []; - contract.fnMap = {}; - contract.fnId = 0; - contract.branchMap = {}; - contract.branchId = 0; - contract.statementMap = {}; - contract.statementId = 0; - contract.injectionPoints = {}; - - contract.preprocessed = preprocessor.run(contract.source); - contract.instrumented = contract.preprocessed; - ast = SolidityParser.parse(contract.preprocessed, {range: true}); - const contractStatement = ast.children.filter(node => (node.type === 'ContractDefinition' || - node.type === 'LibraryDefinition' || - node.type === 'InterfaceDefinition')); - contract.contractName = contractStatement[0].name; - - parse[ast.type](contract, ast); - - // We have to iterate through these injection points in descending order to not mess up - // the injection process. - const sortedPoints = Object.keys(contract.injectionPoints).sort((a, b) => b - a); - sortedPoints.forEach(injectionPoint => { - // Line instrumentation has to happen first - contract.injectionPoints[injectionPoint].sort((a, b) => { - const eventTypes = ['openParen', 'callBranchEvent', 'callEmptyBranchEvent', 'callEvent']; - return eventTypes.indexOf(b.type) - eventTypes.indexOf(a.type); - }); - contract.injectionPoints[injectionPoint].forEach(injection => { - injector[injection.type](contract, fileName, injectionPoint, injection); - }); - }); - retValue.runnableLines = contract.runnableLines; - retValue.contract = contract.instrumented; - retValue.contractName = contractStatement[0].name; - - return retValue; -}; diff --git a/lib/instrumenter.js b/lib/instrumenter.js index 93c9867..27c893f 100644 --- a/lib/instrumenter.js +++ b/lib/instrumenter.js @@ -1,254 +1,106 @@ -const instrumenter = {}; - -// These functions work out where in an expression we can inject our -// instrumenation events. +const SolidityParser = require('solidity-parser-antlr'); +const path = require('path'); + +const Injector = require('./injector'); +const preprocess = require('./preprocessor'); +const parse = require('./parse'); + +/** + * Top level controller for the instrumentation sequence. Also hosts the instrumentation data map + * which the vm step listener writes its output to. This only needs to be instantiated once + * per coverage run. + */ +class Instrumenter { + + constructor(){ + this.instrumentationData = {}; + this.injector = new Injector(); + } -function createOrAppendInjectionPoint(contract, key, value) { - if (contract.injectionPoints[key]) { - contract.injectionPoints[key].push(value); - } else { - contract.injectionPoints[key] = [value]; + _isRootNode(node){ + return (node.type === 'ContractDefinition' || + node.type === 'LibraryDefinition' || + node.type === 'InterfaceDefinition'); } -} -instrumenter.prePosition = function prePosition(expression) { - if (expression.right.type === 'ConditionalExpression' && - expression.left.type === 'MemberExpression') { - expression.range[0] -= 2; + _initializeCoverageFields(contract){ + contract.runnableLines = []; + contract.fnMap = {}; + contract.fnId = 0; + contract.branchMap = {}; + contract.branchId = 0; + contract.statementMap = {}; + contract.statementId = 0; + contract.injectionPoints = {}; } -}; - -instrumenter.instrumentAssignmentExpression = function instrumentAssignmentExpression(contract, expression) { - - // This is suspended for 0.5.0 which tries to accomodate the new `emit` keyword. - // Solc is not allowing us to use the construction `emit SomeEvent()` within the parens :/ - return; - // -------------------------------------------------------------------------------------------- - - // The only time we instrument an assignment expression is if there's a conditional expression on - // the right - /*if (expression.right.type === 'ConditionalExpression') { - if (expression.left.type === 'DeclarativeExpression' || expression.left.type === 'Identifier') { - // Then we need to go from bytes32 varname = (conditional expression) - // to bytes32 varname; (,varname) = (conditional expression) - createOrAppendInjectionPoint(contract, expression.left.range[1], { - type: 'literal', string: '; (,' + expression.left.name + ')', - }); - instrumenter.instrumentConditionalExpression(contract, expression.right); - } else if (expression.left.type === 'MemberExpression') { - createOrAppendInjectionPoint(contract, expression.left.range[0], { - type: 'literal', string: '(,', + + + /** + * Per `contractSource`: + * - wraps any unbracketed singleton consequents of if, for, while stmts (preprocessor.js) + * - walks the file's AST, creating an instrumentation map (parse.js, registrar.js) + * - injects `instrumentation` solidity statements into the target solidity source (injector.js) + * + * @param {String} contractSource solidity source code + * @param {String} fileName absolute path to source file + * @return {Object} instrumented `contract` object + * { + * contract: instrumented solidity source code, + * contractName: contract name, + * runnableLines: integer + * } + * + */ + instrument(contractSource, fileName) { + const contract = {}; + + contract.source = contractSource; + contract.instrumented = contractSource; + + this._initializeCoverageFields(contract); + + // First, we run over the original contract to get the source mapping. + let ast = SolidityParser.parse(contract.source, {range: true}); + parse[ast.type](contract, ast); + const retValue = JSON.parse(JSON.stringify(contract)); // ????? + + // Now, we reset almost everything and use the preprocessor to increase our effectiveness. + this._initializeCoverageFields(contract); + contract.instrumented = preprocess(contract.source); + + // Walk the AST, recording injection points + ast = SolidityParser.parse(contract.instrumented, {range: true}); + contract.contractName = ast.children.filter(node => this._isRootNode(node))[0].name; + parse[ast.type](contract, ast); + + // We have to iterate through these points in descending order + const sortedPoints = Object.keys(contract.injectionPoints).sort((a, b) => b - a); + + sortedPoints.forEach(injectionPoint => { + + // Line instrumentation has to happen first + contract.injectionPoints[injectionPoint].sort((a, b) => { + const injections = ['injectBranch', 'injectEmptyBranch', 'injectLine']; + return injections.indexOf(b.type) - injections.indexOf(a.type); }); - createOrAppendInjectionPoint(contract, expression.left.range[1], { - type: 'literal', string: ')', + + contract.injectionPoints[injectionPoint].forEach(injection => { + this.injector[injection.type]( + contract, + fileName, + injectionPoint, + injection, + this.instrumentationData + ); }); - instrumenter.instrumentConditionalExpression(contract, expression.right); - } else { - const err = 'Error instrumenting assignment expression @ solidity-coverage/lib/instrumenter.js'; - console.log(err, contract, expression.left); - process.exit(); - } - }*/ -}; - -instrumenter.instrumentConditionalExpression = function instrumentConditionalExpression(contract, expression) { - // ---------------------------------------------------------------------------------------------- - // This is suspended for 0.5.0 which tries to accomodate the new `emit` keyword. - // Solc is not allowing us to use the construction `emit SomeEvent()` within the parens :/ - // Very sad, this is the coolest thing in here. - return; - // ---------------------------------------------------------------------------------------------- - - /*contract.branchId += 1; - - const startline = (contract.instrumented.slice(0, expression.range[0]).match(/\n/g) || []).length + 1; - const startcol = expression.range[0] - contract.instrumented.slice(0, expression.range[0]).lastIndexOf('\n') - 1; - const consequentStartCol = startcol + (contract, expression.trueBody.range[0] - expression.range[0]); - const consequentEndCol = consequentStartCol + (contract, expression.trueBody.range[1] - expression.trueBody.range[0]); - const alternateStartCol = startcol + (contract, expression.falseBody.range[0] - expression.range[0]); - const alternateEndCol = alternateStartCol + (contract, expression.falseBody.range[1] - expression.falseBody.range[0]); - // NB locations for conditional branches in istanbul are length 1 and associated with the : and ?. - contract.branchMap[contract.branchId] = { - line: startline, - type: 'cond-expr', - locations: [{ - start: { - line: startline, column: consequentStartCol, - }, - end: { - line: startline, column: consequentEndCol, - }, - }, { - start: { - line: startline, column: alternateStartCol, - }, - end: { - line: startline, column: alternateEndCol, - }, - }], - }; - // Right, this could be being used just by itself or as an assignment. In the case of the latter, because - // the comma operator doesn't exist, we're going to have to get funky. - // if we're on a line by ourselves, this is easier - // - // Now if we've got to wrap the expression it's being set equal to, do that... - - - // Wrap the consequent - createOrAppendInjectionPoint(contract, expression.trueBody.range[0], { - type: 'openParen', - }); - createOrAppendInjectionPoint(contract, expression.trueBody.range[0], { - type: 'callBranchEvent', comma: true, branchId: contract.branchId, locationIdx: 0, - }); - createOrAppendInjectionPoint(contract, expression.trueBody.range[1], { - type: 'closeParen', - }); - - // Wrap the alternate - createOrAppendInjectionPoint(contract, expression.falseBody.range[0], { - type: 'openParen', - }); - createOrAppendInjectionPoint(contract, expression.falseBody.range[0], { - type: 'callBranchEvent', comma: true, branchId: contract.branchId, locationIdx: 1, - }); - createOrAppendInjectionPoint(contract, expression.falseBody.range[1], { - type: 'closeParen', - });*/ -}; - -instrumenter.instrumentStatement = function instrumentStatement(contract, expression) { - contract.statementId += 1; - // We need to work out the lines and columns the expression starts and ends - const startline = (contract.instrumented.slice(0, expression.range[0]).match(/\n/g) || []).length + 1; - const startcol = expression.range[0] - contract.instrumented.slice(0, expression.range[0]).lastIndexOf('\n') - 1; - const expressionContent = contract.instrumented.slice(expression.range[0], expression.range[1] + 1); - - const endline = startline + (contract, expressionContent.match('/\n/g') || []).length; - let endcol; - if (expressionContent.lastIndexOf('\n') >= 0) { - endcol = contract.instrumented.slice(expressionContent.lastIndexOf('\n'), expression.range[1]).length; - } else { - endcol = startcol + (contract, expressionContent.length - 1); - } - contract.statementMap[contract.statementId] = { - start: { - line: startline, column: startcol, - }, - end: { - line: endline, column: endcol, - }, - }; - createOrAppendInjectionPoint(contract, expression.range[0], { - type: 'statement', statementId: contract.statementId, - }); -}; - -instrumenter.instrumentLine = function instrumentLine(contract, expression) { - // what's the position of the most recent newline? - const startchar = expression.range[0]; - const endchar = expression.range[1] + 1; - const lastNewLine = contract.instrumented.slice(0, startchar).lastIndexOf('\n'); - const nextNewLine = startchar + contract.instrumented.slice(startchar).indexOf('\n'); - const contractSnipped = contract.instrumented.slice(lastNewLine, nextNewLine); - const restOfLine = contract.instrumented.slice(endchar, nextNewLine); - - if (contract.instrumented.slice(lastNewLine, startchar).trim().length === 0 && - (restOfLine.replace(';', '').trim().length === 0 || restOfLine.replace(';', '').trim().substring(0, 2) === '//')) { - createOrAppendInjectionPoint(contract, lastNewLine + 1, { - type: 'callEvent', - }); - } else if (contract.instrumented.slice(lastNewLine, startchar).replace('{', '').trim().length === 0 && - contract.instrumented.slice(endchar, nextNewLine).replace(/[;}]/g, '').trim().length === 0) { - createOrAppendInjectionPoint(contract, expression.range[0], { - type: 'callEvent', - }); - } - // Is everything before us and after us on this line whitespace? -}; - -instrumenter.instrumentFunctionDeclaration = function instrumentFunctionDeclaration(contract, expression) { - contract.fnId += 1; - const startline = (contract.instrumented.slice(0, expression.range[0]).match(/\n/g) || []).length + 1; - // We need to work out the lines and columns the function declaration starts and ends - const startcol = expression.range[0] - contract.instrumented.slice(0, expression.range[0]).lastIndexOf('\n') - 1; - const endlineDelta = contract.instrumented.slice(expression.range[0]).indexOf('{'); - const functionDefinition = contract.instrumented.slice(expression.range[0], expression.range[0] + endlineDelta); - const endline = startline + (functionDefinition.match(/\n/g) || []).length; - const endcol = functionDefinition.length - functionDefinition.lastIndexOf('\n'); - contract.fnMap[contract.fnId] = { - name: expression.isConstructor ? 'constructor' : expression.name, - line: startline, - loc: { - start: { - line: startline, column: startcol, - }, - end: { - line: endline, column: endcol, - }, - }, - }; - createOrAppendInjectionPoint(contract, expression.range[0] + endlineDelta + 1, { - type: 'callFunctionEvent', fnId: contract.fnId, - }); -}; - -instrumenter.addNewBranch = function addNewBranch(contract, expression) { - contract.branchId += 1; - const startline = (contract.instrumented.slice(0, expression.range[0]).match(/\n/g) || []).length + 1; - const startcol = expression.range[0] - contract.instrumented.slice(0, expression.range[0]).lastIndexOf('\n') - 1; - // NB locations for if branches in istanbul are zero length and associated with the start of the if. - contract.branchMap[contract.branchId] = { - line: startline, - type: 'if', - locations: [{ - start: { - line: startline, column: startcol, - }, - end: { - line: startline, column: startcol, - }, - }, { - start: { - line: startline, column: startcol, - }, - end: { - line: startline, column: startcol, - }, - }], - }; -}; - -instrumenter.instrumentAssertOrRequire = function instrumentAssertOrRequire(contract, expression) { - instrumenter.addNewBranch(contract, expression); - createOrAppendInjectionPoint(contract, expression.range[0], { - type: 'callAssertPreEvent', branchId: contract.branchId, - }); - createOrAppendInjectionPoint(contract, expression.range[1] + 2, { - type: 'callAssertPostEvent', branchId: contract.branchId, - }); -}; - -instrumenter.instrumentIfStatement = function instrumentIfStatement(contract, expression) { - instrumenter.addNewBranch(contract, expression); - if (expression.trueBody.type === 'Block') { - createOrAppendInjectionPoint(contract, expression.trueBody.range[0] + 1, { - type: 'callBranchEvent', branchId: contract.branchId, locationIdx: 0, - }); - } - if (expression.falseBody && expression.falseBody.type === 'IfStatement') { - // Do nothing - we must be pre-preprocessor, so don't bother instrumenting - - // when we're actually instrumenting, this will never happen (we've wrapped it in - // a block statement) - } else if (expression.falseBody && expression.falseBody.type === 'Block') { - createOrAppendInjectionPoint(contract, expression.falseBody.range[0] + 1, { - type: 'callBranchEvent', branchId: contract.branchId, locationIdx: 1, - }); - } else { - createOrAppendInjectionPoint(contract, expression.trueBody.range[1] + 1, { - type: 'callEmptyBranchEvent', branchId: contract.branchId, locationIdx: 1, }); + + retValue.runnableLines = contract.runnableLines; + retValue.contract = contract.instrumented; + retValue.contractName = contract.contractName; + + return retValue; } -}; +} -module.exports = instrumenter; +module.exports = Instrumenter; diff --git a/lib/parse.js b/lib/parse.js index 8b9feb3..5923f07 100644 --- a/lib/parse.js +++ b/lib/parse.js @@ -1,39 +1,37 @@ -/* eslint no-unused-expressions: ["error", { "allowShortCircuit": true }] */ - /** * Methods in this file walk the AST and call the instrumenter * functions where appropriate, which determine where to inject events. * (Listed in alphabetical order) */ +const Registrar = require('./registrar'); +const register = new Registrar(); const parse = {}; -const instrumenter = require('./instrumenter'); -parse.AssignmentExpression = function parseAssignmentExpression(contract, expression) { - instrumenter.prePosition(expression); - instrumenter.instrumentStatement(contract, expression); - instrumenter.instrumentAssignmentExpression(contract, expression); +parse.AssignmentExpression = function(contract, expression) { + register.prePosition(expression); + register.statement(contract, expression); }; -parse.Block = function parseBlock(contract, expression) { +parse.Block = function(contract, expression) { for (let x = 0; x < expression.statements.length; x++) { - instrumenter.instrumentLine(contract, expression.statements[x]); + register.line(contract, expression.statements[x]); parse[expression.statements[x].type] && parse[expression.statements[x].type](contract, expression.statements[x]); } }; -parse.BinaryOperation = function parseBinaryOperation(contract, expression) { - instrumenter.instrumentStatement(contract, expression); +parse.BinaryOperation = function(contract, expression) { + register.statement(contract, expression); } -parse.FunctionCall = function parseCallExpression(contract, expression) { - // In any given chain of call expressions, only the last one will fail this check. This makes sure - // we don't instrument a chain of expressions multiple times. +parse.FunctionCall = function(contract, expression) { + // In any given chain of call expressions, only the last one will fail this check. + // This makes sure we don't instrument a chain of expressions multiple times. if (expression.expression.type !== 'FunctionCall') { - instrumenter.instrumentStatement(contract, expression); + register.statement(contract, expression); if (expression.expression.name === 'assert' || expression.expression.name === 'require') { - instrumenter.instrumentAssertOrRequire(contract, expression); + register.assertOrRequire(contract, expression); } parse[expression.expression.type] && parse[expression.expression.type](contract, expression.expression); @@ -43,28 +41,16 @@ parse.FunctionCall = function parseCallExpression(contract, expression) { } }; -parse.ConditionalExpression = function parseConditionalExpression(contract, expression) { - instrumenter.instrumentStatement(contract, expression); - instrumenter.instrumentConditionalExpression(contract, expression); +parse.ConditionalExpression = function(contract, expression) { + register.statement(contract, expression); + register.conditionalExpression(contract, expression); }; -parse.ContractDefinition = function ParseContractStatement(contract, expression) { +parse.ContractDefinition = function(contract, expression) { parse.ContractOrLibraryStatement(contract, expression); }; -parse.ContractOrLibraryStatement = function parseContractOrLibraryStatement(contract, expression) { - // From the start of this contract statement, find the first '{', and inject there. - const injectionPoint = expression.range[0] + contract.instrumented.slice(expression.range[0]).indexOf('{') + 1; - if (contract.injectionPoints[injectionPoint]) { - contract.injectionPoints[expression.range[0] + contract.instrumented.slice(expression.range[0]).indexOf('{') + 1].push({ - type: 'eventDefinition', - }); - } else { - contract.injectionPoints[expression.range[0] + contract.instrumented.slice(expression.range[0]).indexOf('{') + 1] = [{ - type: 'eventDefinition', - }]; - } - +parse.ContractOrLibraryStatement = function(contract, expression) { if (expression.subNodes) { expression.subNodes.forEach(construct => { parse[construct.type] && @@ -73,33 +59,33 @@ parse.ContractOrLibraryStatement = function parseContractOrLibraryStatement(cont } }; -parse.EmitStatement = function parseExpressionStatement(contract, expression){ - instrumenter.instrumentStatement(contract, expression); +parse.EmitStatement = function(contract, expression){ + register.statement(contract, expression); }; -parse.ExpressionStatement = function parseExpressionStatement(contract, content) { +parse.ExpressionStatement = function(contract, content) { parse[content.expression.type] && parse[content.expression.type](contract, content.expression); }; -parse.ForStatement = function parseForStatement(contract, expression) { - instrumenter.instrumentStatement(contract, expression); +parse.ForStatement = function(contract, expression) { + register.statement(contract, expression); parse[expression.body.type] && parse[expression.body.type](contract, expression.body); }; -parse.FunctionDefinition = function parseFunctionDefinition(contract, expression) { +parse.FunctionDefinition = function(contract, expression) { parse.Modifiers(contract, expression.modifiers); if (expression.body) { - instrumenter.instrumentFunctionDeclaration(contract, expression); + register.functionDeclaration(contract, expression); parse[expression.body.type] && parse[expression.body.type](contract, expression.body); } }; -parse.IfStatement = function parseIfStatement(contract, expression) { - instrumenter.instrumentStatement(contract, expression); - instrumenter.instrumentIfStatement(contract, expression); +parse.IfStatement = function(contract, expression) { + register.statement(contract, expression); + register.ifStatement(contract, expression); parse[expression.trueBody.type] && parse[expression.trueBody.type](contract, expression.trueBody); @@ -109,20 +95,20 @@ parse.IfStatement = function parseIfStatement(contract, expression) { } }; -parse.InterfaceStatement = function parseInterfaceStatement(contract, expression) { +parse.InterfaceStatement = function(contract, expression) { parse.ContractOrLibraryStatement(contract, expression); }; -parse.LibraryStatement = function parseLibraryStatement(contract, expression) { +parse.LibraryStatement = function(contract, expression) { parse.ContractOrLibraryStatement(contract, expression); }; -parse.MemberExpression = function parseMemberExpression(contract, expression) { +parse.MemberExpression = function(contract, expression) { parse[expression.object.type] && parse[expression.object.type](contract, expression.object); }; -parse.Modifiers = function parseModifier(contract, modifiers) { +parse.Modifiers = function(contract, modifiers) { if (modifiers) { modifiers.forEach(modifier => { parse[modifier.type] && parse[modifier.type](contract, modifier); @@ -130,52 +116,50 @@ parse.Modifiers = function parseModifier(contract, modifiers) { } }; -parse.ModifierDefinition = function parseModifierDefinition(contract, expression) { - instrumenter.instrumentFunctionDeclaration(contract, expression); +parse.ModifierDefinition = function(contract, expression) { + register.functionDeclaration(contract, expression); parse[expression.body.type] && parse[expression.body.type](contract, expression.body); }; -parse.NewExpression = function parseNewExpression(contract, expression) { +parse.NewExpression = function(contract, expression) { parse[expression.typeName.type] && parse[expression.typeName.type](contract, expression.typeName); }; -parse.SourceUnit = function parseSourceUnit(contract, expression) { +parse.SourceUnit = function(contract, expression) { expression.children.forEach(construct => { parse[construct.type] && parse[construct.type](contract, construct); }); }; -parse.ReturnStatement = function parseReturnStatement(contract, expression) { - instrumenter.instrumentStatement(contract, expression); +parse.ReturnStatement = function(contract, expression) { + register.statement(contract, expression); }; -parse.UnaryExpression = function parseUnaryExpression(contract, expression) { +parse.UnaryExpression = function(contract, expression) { parse[expression.argument.type] && parse[expression.argument.type](contract, expression.argument); }; -parse.UsingStatement = function parseUsingStatement(contract, expression) { +parse.UsingStatement = function (contract, expression) { parse[expression.for.type] && parse[expression.for.type](contract, expression.for); }; -parse.VariableDeclarationStatement = function parseVariableDeclarationStatement(contract, expression) { - instrumenter.instrumentStatement(contract, expression); - // parse[expression.declarations[0].id.type] && - // parse[expression.declarations[0].id.type](contract, expression.declarations[0].id); +parse.VariableDeclarationStatement = function (contract, expression) { + register.statement(contract, expression); }; -parse.VariableDeclarationTuple = function parseVariableDeclarationTuple(contract, expression) { - instrumenter.instrumentStatement(contract, expression); +parse.VariableDeclarationTuple = function (contract, expression) { + register.statement(contract, expression); parse[expression.declarations[0].id.type] && parse[expression.declarations[0].id.type](contract, expression.declarations[0].id); }; -parse.WhileStatement = function parseWhileStatement(contract, expression) { - instrumenter.instrumentStatement(contract, expression); +parse.WhileStatement = function (contract, expression) { + register.statement(contract, expression); parse[expression.body.type] && parse[expression.body.type](contract, expression.body); }; diff --git a/lib/preprocessor.js b/lib/preprocessor.js index 3ad34aa..b846351 100644 --- a/lib/preprocessor.js +++ b/lib/preprocessor.js @@ -1,4 +1,3 @@ -const SolExplore = require('sol-explore'); const SolidityParser = require('solidity-parser-antlr'); const crRegex = /[\r\n ]+$/g; @@ -6,52 +5,31 @@ const OPEN = '{'; const CLOSE = '}'; /** - * Splices enclosing brackets into `contract` around `expression`; + * Inserts an open or close brace e.g. `{` or `}` at specified position in solidity source + * * @param {String} contract solidity source - * @param {Object} node AST node to bracket + * @param {Object} item AST node to bracket + * @param {Number} offset tracks the number of previously inserted braces * @return {String} contract */ function insertBrace(contract, item, offset) { return contract.slice(0,item.pos + offset) + item.type + contract.slice(item.pos + offset) } -/** Remove 'pure' and 'view' from the function declaration. - * @param {String} contract solidity source - * @param {Object} function AST node - * @return {String} contract with the modifiers removed from the given function. -*/ -function removePureView(contract, node){ - let fDefStart = node.range[0]; - if (node.body){ - fDefEnd = node.body.range[0]; - } else if (node.returnParameters) { - fDefEnd = node.returnParameters.range[0]; - } else { - fDefEnd = node.range[1]; - } - let fDef = contract.slice(fDefStart, fDefEnd + 1); - fDef = fDef.replace(/\bview\b/i, ' '); - fDef = fDef.replace(/\bpure\b/i, ' '); - return contract.slice(0, fDefStart) + fDef + contract.slice(fDefEnd + 1); -} - /** * Locates unbracketed singleton statements attached to if, else, for and while statements * and brackets them. Instrumenter needs to inject events at these locations and having - * them pre-bracketed simplifies the process. Each time a modification is made the contract - * is passed back to the parser and re-walked because all the starts and ends get shifted. - * - * Also removes pure and view modifiers. + * them pre-bracketed simplifies the process. * - * @param {String} contract solidity code - * @return {String} contract + * @param {String} contract solidity source code + * @return {String} modified solidity source code */ -module.exports.run = function r(contract) { +function preprocess(contract) { try { const ast = SolidityParser.parse(contract, { range: true }); insertions = []; - viewPureToRemove = []; + SolidityParser.visit(ast, { IfStatement: function(node) { if (node.trueBody.type !== 'Block') { @@ -74,23 +52,18 @@ module.exports.run = function r(contract) { insertions.push({type: OPEN, pos: node.body.range[0]}); insertions.push({type: CLOSE, pos: node.body.range[1] + 1}); } - }, - FunctionDefinition: function(node){ - if (node.stateMutability === 'view' || node.stateMutability === 'pure'){ - viewPureToRemove.push(node); - } } }) - // Firstly, remove pures and views. Note that we replace 'pure' and 'view' with spaces, so - // character counts remain the same, so we can do this in any order - viewPureToRemove.forEach(node => contract = removePureView(contract, node)); + // Sort the insertion points. insertions.sort((a,b) => a.pos - b.pos); insertions.forEach((item, idx) => contract = insertBrace(contract, item, idx)); } catch (err) { contract = err; - keepRunning = false; } return contract; }; + + +module.exports = preprocess; diff --git a/lib/registrar.js b/lib/registrar.js new file mode 100644 index 0000000..e4bc5bd --- /dev/null +++ b/lib/registrar.js @@ -0,0 +1,251 @@ +/** + * Registers injections points (e.g source location, type) and their associated data with + * a contract / instrumentation target. Run during the `parse` step. This data is + * consumed by the Injector as it modifies the source code in instrumentation's final step. + */ +class Registrar { + + constructor(){} + + /** + * Adds injection point to injection points map + * @param {Object} contract instrumentation target + * @param {String} key injection point `type` + * @param {Number} value injection point `id` + */ + _createInjectionPoint(contract, key, value) { + (contract.injectionPoints[key]) + ? contract.injectionPoints[key].push(value) + : contract.injectionPoints[key] = [value]; + } + + /** + * TODO - idk what this is anymore + * @param {Object} expression AST node + */ + prePosition(expression) { + if ( + expression.right.type === 'ConditionalExpression' && + expression.left.type === 'MemberExpression' + ) { + expression.range[0] -= 2; + } + } + + /** + * Registers injections for statement measurements + * @param {Object} contract instrumentation target + * @param {Object} expression AST node + */ + statement(contract, expression) { + const startContract = contract.instrumented.slice(0, expression.range[0]); + const startline = ( startContract.match(/\n/g) || [] ).length + 1; + const startcol = expression.range[0] - startContract.lastIndexOf('\n') - 1; + + const expressionContent = contract.instrumented.slice( + expression.range[0], + expression.range[1] + 1 + ); + + const endline = startline + (contract, expressionContent.match('/\n/g') || []).length; + + let endcol; + if (expressionContent.lastIndexOf('\n') >= 0) { + + endcol = contract.instrumented.slice( + expressionContent.lastIndexOf('\n'), + expression.range[1] + ).length; + + } else endcol = startcol + (contract, expressionContent.length - 1); + + contract.statementId += 1; + contract.statementMap[contract.statementId] = { + start: { line: startline, column: startcol }, + end: { line: endline, column: endcol }, + }; + + this._createInjectionPoint(contract, expression.range[0], { + type: 'injectStatement', statementId: contract.statementId, + }); + }; + + /** + * Registers injections for line measurements + * @param {Object} contract instrumentation target + * @param {Object} expression AST node + */ + line(contract, expression) { + const startchar = expression.range[0]; + const endchar = expression.range[1] + 1; + const lastNewLine = contract.instrumented.slice(0, startchar).lastIndexOf('\n'); + const nextNewLine = startchar + contract.instrumented.slice(startchar).indexOf('\n'); + const contractSnipped = contract.instrumented.slice(lastNewLine, nextNewLine); + const restOfLine = contract.instrumented.slice(endchar, nextNewLine); + + if ( + contract.instrumented.slice(lastNewLine, startchar).trim().length === 0 && + ( + restOfLine.replace(';', '').trim().length === 0 || + restOfLine.replace(';', '').trim().substring(0, 2) === '//' + ) + ) + { + this._createInjectionPoint(contract, lastNewLine + 1, { type: 'injectLine' }); + + } else if ( + contract.instrumented.slice(lastNewLine, startchar).replace('{', '').trim().length === 0 && + contract.instrumented.slice(endchar, nextNewLine).replace(/[;}]/g, '').trim().length === 0) + { + this._createInjectionPoint(contract, expression.range[0], { type: 'injectLine' }); + } + }; + + /** + * Registers injections for function measurements + * @param {Object} contract instrumentation target + * @param {Object} expression AST node + */ + functionDeclaration(contract, expression) { + const startContract = contract.instrumented.slice(0, expression.range[0]); + const startline = ( startContract.match(/\n/g) || [] ).length + 1; + const startcol = expression.range[0] - startContract.lastIndexOf('\n') - 1; + + const endlineDelta = contract.instrumented.slice(expression.range[0]).indexOf('{'); + const functionDefinition = contract.instrumented.slice( + expression.range[0], + expression.range[0] + endlineDelta + ); + const endline = startline + (functionDefinition.match(/\n/g) || []).length; + const endcol = functionDefinition.length - functionDefinition.lastIndexOf('\n'); + + contract.fnId += 1; + contract.fnMap[contract.fnId] = { + name: expression.isConstructor ? 'constructor' : expression.name, + line: startline, + loc: { + start: { line: startline, column: startcol }, + end: { line: endline, column: endcol }, + }, + }; + + this._createInjectionPoint( + contract, + expression.range[0] + endlineDelta + 1, + { + type: 'injectFunction', + fnId: contract.fnId, + } + ); + }; + + /** + * Registers injections for branch measurements. This generic is consumed by + * the `assert/require` and `if` registration methods. + * @param {Object} contract instrumentation target + * @param {Object} expression AST node + */ + addNewBranch(contract, expression) { + const startContract = contract.instrumented.slice(0, expression.range[0]); + const startline = ( startContract.match(/\n/g) || [] ).length + 1; + const startcol = expression.range[0] - startContract.lastIndexOf('\n') - 1; + + contract.branchId += 1; + + // NB locations for if branches in istanbul are zero + // length and associated with the start of the if. + contract.branchMap[contract.branchId] = { + line: startline, + type: 'if', + locations: [{ + start: { + line: startline, column: startcol, + }, + end: { + line: startline, column: startcol, + }, + }, { + start: { + line: startline, column: startcol, + }, + end: { + line: startline, column: startcol, + }, + }], + }; + }; + + /** + * Registers injections for assert/require statement measurements (branches) + * @param {Object} contract instrumentation target + * @param {Object} expression AST node + */ + assertOrRequire(contract, expression) { + this.addNewBranch(contract, expression); + this._createInjectionPoint( + contract, + expression.range[0], + { + type: 'injectAssertPre', + branchId: contract.branchId, + } + ); + this._createInjectionPoint( + contract, + expression.range[1] + 2, + { + type: 'injectAssertPost', + branchId: contract.branchId, + } + ); + }; + + /** + * Registers injections for if statement measurements (branches) + * @param {Object} contract instrumentation target + * @param {Object} expression AST node + */ + ifStatement(contract, expression) { + this.addNewBranch(contract, expression); + + if (expression.trueBody.type === 'Block') { + this._createInjectionPoint( + contract, + expression.trueBody.range[0] + 1, + { + type: 'injectBranch', + branchId: contract.branchId, + locationIdx: 0, + } + ); + } + + if (expression.falseBody && expression.falseBody.type === 'IfStatement') { + + // Do nothing - we must be pre-preprocessing + + } else if (expression.falseBody && expression.falseBody.type === 'Block') { + this._createInjectionPoint( + contract, + expression.falseBody.range[0] + 1, + { + type: 'injectBranch', + branchId: contract.branchId, + locationIdx: 1, + } + ); + } else { + this._createInjectionPoint( + contract, + expression.trueBody.range[1] + 1, + { + type: 'injectEmptyBranch', + branchId: contract.branchId, + locationIdx: 1, + } + ); + } + } +} + +module.exports = Registrar; diff --git a/lib/ternary.js b/lib/ternary.js new file mode 100644 index 0000000..82ff304 --- /dev/null +++ b/lib/ternary.js @@ -0,0 +1,121 @@ +/** + * This is logic to instrument ternary conditional assignment statements. Preserving + * here for the time being, because instrumentation of these became impossible in + * solc >= 0.5.0 + */ + +function instrumentAssignmentExpression(contract, expression) { + + // This is suspended for 0.5.0 which tries to accomodate the new `emit` keyword. + // Solc is not allowing us to use the construction `emit SomeEvent()` within the parens :/ + return; + // -------------------------------------------------------------------------------------------- + + // The only time we instrument an assignment expression is if there's a conditional expression on + // the right + /*if (expression.right.type === 'ConditionalExpression') { + if (expression.left.type === 'DeclarativeExpression' || expression.left.type === 'Identifier') { + // Then we need to go from bytes32 varname = (conditional expression) + // to bytes32 varname; (,varname) = (conditional expression) + createOrAppendInjectionPoint(contract, expression.left.range[1], { + type: 'literal', string: '; (,' + expression.left.name + ')', + }); + instrumenter.instrumentConditionalExpression(contract, expression.right); + } else if (expression.left.type === 'MemberExpression') { + createOrAppendInjectionPoint(contract, expression.left.range[0], { + type: 'literal', string: '(,', + }); + createOrAppendInjectionPoint(contract, expression.left.range[1], { + type: 'literal', string: ')', + }); + instrumenter.instrumentConditionalExpression(contract, expression.right); + } else { + const err = 'Error instrumenting assignment expression @ solidity-coverage/lib/instrumenter.js'; + console.log(err, contract, expression.left); + process.exit(); + } + }*/ +}; + +function instrumentConditionalExpression(contract, expression) { + // ---------------------------------------------------------------------------------------------- + // This is suspended for 0.5.0 which tries to accomodate the new `emit` keyword. + // Solc is not allowing us to use the construction `emit SomeEvent()` within the parens :/ + // Very sad, this is the coolest thing in here. + return; + // ---------------------------------------------------------------------------------------------- + + /*contract.branchId += 1; + + const startline = (contract.instrumented.slice(0, expression.range[0]).match(/\n/g) || []).length + 1; + const startcol = expression.range[0] - contract.instrumented.slice(0, expression.range[0]).lastIndexOf('\n') - 1; + const consequentStartCol = startcol + (contract, expression.trueBody.range[0] - expression.range[0]); + const consequentEndCol = consequentStartCol + (contract, expression.trueBody.range[1] - expression.trueBody.range[0]); + const alternateStartCol = startcol + (contract, expression.falseBody.range[0] - expression.range[0]); + const alternateEndCol = alternateStartCol + (contract, expression.falseBody.range[1] - expression.falseBody.range[0]); + // NB locations for conditional branches in istanbul are length 1 and associated with the : and ?. + contract.branchMap[contract.branchId] = { + line: startline, + type: 'cond-expr', + locations: [{ + start: { + line: startline, column: consequentStartCol, + }, + end: { + line: startline, column: consequentEndCol, + }, + }, { + start: { + line: startline, column: alternateStartCol, + }, + end: { + line: startline, column: alternateEndCol, + }, + }], + }; + // Right, this could be being used just by itself or as an assignment. In the case of the latter, because + // the comma operator doesn't exist, we're going to have to get funky. + // if we're on a line by ourselves, this is easier + // + // Now if we've got to wrap the expression it's being set equal to, do that... + + + // Wrap the consequent + createOrAppendInjectionPoint(contract, expression.trueBody.range[0], { + type: 'openParen', + }); + createOrAppendInjectionPoint(contract, expression.trueBody.range[0], { + type: 'callBranchEvent', comma: true, branchId: contract.branchId, locationIdx: 0, + }); + createOrAppendInjectionPoint(contract, expression.trueBody.range[1], { + type: 'closeParen', + }); + + // Wrap the alternate + createOrAppendInjectionPoint(contract, expression.falseBody.range[0], { + type: 'openParen', + }); + createOrAppendInjectionPoint(contract, expression.falseBody.range[0], { + type: 'callBranchEvent', comma: true, branchId: contract.branchId, locationIdx: 1, + }); + createOrAppendInjectionPoint(contract, expression.falseBody.range[1], { + type: 'closeParen', + });*/ +}; + +// Paren / Literal injectors +/* + +injector.openParen = function injectOpenParen(contract, fileName, injectionPoint, injection) { + contract.instrumented = contract.instrumented.slice(0, injectionPoint) + '(' + contract.instrumented.slice(injectionPoint); +}; + +injector.closeParen = function injectCloseParen(contract, fileName, injectionPoint, injection) { + contract.instrumented = contract.instrumented.slice(0, injectionPoint) + ')' + contract.instrumented.slice(injectionPoint); +}; + +injector.literal = function injectLiteral(contract, fileName, injectionPoint, injection) { + contract.instrumented = contract.instrumented.slice(0, injectionPoint) + injection.string + contract.instrumented.slice(injectionPoint); +}; + +*/ \ No newline at end of file diff --git a/package.json b/package.json index 074effc..e677ea4 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,15 @@ { "name": "solidity-coverage", - "version": "0.6.4", + "version": "0.7.0-beta.0", "description": "", - "bin": { - "solidity-coverage": "./bin/exec.js" - }, + "main": "index.js", + "buidler": "dist/buidler.coverage.js", "directories": { "test": "test" }, "scripts": { - "test": "mocha --timeout 60000", - "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --timeout 60000 --exit" + "test": "mocha test/units --timeout 70000 --no-warnings", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --timeout 70000 --exit" }, "homepage": "https://github.com/sc-forks/solidity-coverage", "repository": { @@ -21,27 +20,22 @@ "license": "ISC", "dependencies": { "death": "^1.1.0", - "ethereumjs-testrpc-sc": "^6.5.1-sc.0", + "ganache-cli": "^6.5.0", + "ganache-core": "^2.6.0", "istanbul": "^0.4.5", - "keccakjs": "^0.2.1", "req-cwd": "^1.0.1", + "sha1": "^1.1.1", "shelljs": "^0.8.3", - "sol-explore": "^1.6.2", - "solidity-parser-antlr": "^0.4.7", - "tree-kill": "^1.2.0", - "web3": "1.0.0-beta.50", - "web3-eth-abi": "1.0.0-beta.50" + "solidity-parser-antlr": "0.4.5", + "web3-utils": "^1.0.0" }, "devDependencies": { - "crypto-js": "^3.1.9-1", - "ethereumjs-account": "~2.0.4", - "ethereumjs-tx": "^1.2.2", - "ethereumjs-util": "^5.0.1", - "ethereumjs-vm": "https://github.com/sc-forks/ethereumjs-vm-sc.git#336d8841ab2c37da079d290ea5c5af6b34f20495", - "merkle-patricia-tree": "~2.1.2", - "mocha": "^4.1.0", - "request": "^2.88.0", - "solc": "^0.5.3", - "truffle": "^5.0.30" + "@nomiclabs/buidler": "^1.0.0-beta.8", + "@nomiclabs/buidler-truffle5": "^1.0.0-beta.8", + "@nomiclabs/buidler-web3": "^1.0.0-beta.8", + "mocha": "5.2.0", + "solc": "^0.5.10", + "truffle": "^5.0.26", + "web3": "1.0.0-beta.37" } } diff --git a/test/cli/command-options.js b/test/cli/command-options.js deleted file mode 100644 index 8dad758..0000000 --- a/test/cli/command-options.js +++ /dev/null @@ -1,24 +0,0 @@ -/* eslint-env node, mocha */ - -const assert = require('assert'); -const fs = require('fs'); - -// Fake event for Simple.sol -const fakeEvent = {"address":"6d6cf716c2a7672047e15a255d4c9624db60f215","topics":["34b35f4b1a8c3eb2caa69f05fb5aadc827cedd2d8eb3bb3623b6c4bba3baec17"],"data":"00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003a2f55736572732f757365722f53697465732f73632d666f726b732f6d657461636f696e2f636f6e7472616374732f4d657461436f696e2e736f6c000000000000"} - -/* { - address: '7c548f8a5ba3a37774440587743bb50f58c7e91c', - topics: ['1accf53d733f86cbefdf38d52682bc905cf6715eb3d860be0b5b052e58b0741d'], - data: '0', -};*/ -// Tests whether or not the testCommand option is invoked by exec.js -// Mocha's default timeout is 2000 - here we fake the creation of -// allFiredEvents at 4000. -describe('Test uses mocha', () => { - it('should run "mocha --timeout 5000" successfully', done => { - setTimeout(() => { - fs.writeFileSync('./../allFiredEvents', JSON.stringify(fakeEvent) + '\n'); - done(); - }, 4000); - }); -}); \ No newline at end of file diff --git a/test/cli/events.js b/test/cli/events.js deleted file mode 100644 index 53b15b0..0000000 --- a/test/cli/events.js +++ /dev/null @@ -1,21 +0,0 @@ -/* eslint-env node, mocha */ -/* global artifacts, contract, assert */ - -const Events = artifacts.require('./Events.sol'); - -contract('Events', accounts => { - it('logs events correctly', done => { - const loggedEvents = []; - Events.deployed().then(instance => { - const allEvents = instance.allEvents(); - - allEvents.on("data", event => { loggedEvents.push(event); }); - - instance.test(5).then(() => { - const bad = loggedEvents.filter(e => e.event !== 'LogEventOne' && e.event !== 'LogEventTwo'); - assert(bad.length === 0, 'Did not filter events correctly'); - done(); - }); - }); - }); -}); \ No newline at end of file diff --git a/test/if.js b/test/if.js deleted file mode 100644 index 4ea0220..0000000 --- a/test/if.js +++ /dev/null @@ -1,274 +0,0 @@ -/* eslint-env node, mocha */ - -const solc = require('solc'); -const path = require('path'); -const getInstrumentedVersion = require('./../lib/instrumentSolidity.js'); -const util = require('./util/util.js'); -const CoverageMap = require('./../lib/coverageMap'); -const vm = require('./util/vm'); -const assert = require('assert'); - -describe('if, else, and else if statements', () => { - const filePath = path.resolve('./test.sol'); - const pathPrefix = './'; - - it('should compile after instrumenting multiple if-elses', () => { - const contract = util.getCode('if/else-if-unbracketed-multi.sol'); - const info = getInstrumentedVersion(contract, filePath); - const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); - util.report(output.errors); - }); - - it('should compile after instrumenting unbracketed if-elses', () => { - const contract = util.getCode('if/if-else-no-brackets.sol'); - const info = getInstrumentedVersion(contract, filePath); - const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); - util.report(output.errors); - }); - - - it('should cover an if statement with a bracketed consequent', done => { - const contract = util.getCode('if/if-with-brackets.sol'); - const info = getInstrumentedVersion(contract, filePath); - const coverage = new CoverageMap(); - coverage.addContract(info, filePath); - - // Runs: a(1) => if (x == 1) { x = 3; } - vm.execute(info.contract, 'a', [1]).then(events => { - const mapping = coverage.generate(events, pathPrefix); - assert.deepEqual(mapping[filePath].l, { - 5: 1, - }); - assert.deepEqual(mapping[filePath].b, { - 1: [1, 0], - }); - assert.deepEqual(mapping[filePath].s, { - 1: 1, 2: 1, - }); - assert.deepEqual(mapping[filePath].f, { - 1: 1, - }); - done(); - }).catch(done); - }); - - // Runs: a(1) => if (x == 1) x = 2; - it('should cover an unbracketed if consequent (single line)', done => { - const contract = util.getCode('if/if-no-brackets.sol'); - const info = getInstrumentedVersion(contract, filePath); - const coverage = new CoverageMap(); - coverage.addContract(info, filePath); - - // Same results as previous test - vm.execute(info.contract, 'a', [1]).then(events => { - const mapping = coverage.generate(events, pathPrefix); - assert.deepEqual(mapping[filePath].l, { - 5: 1, - }); - assert.deepEqual(mapping[filePath].b, { - 1: [1, 0], - }); - assert.deepEqual(mapping[filePath].s, { - 1: 1, 2: 1, - }); - assert.deepEqual(mapping[filePath].f, { - 1: 1, - }); - done(); - }).catch(done); - }); - - it('should cover an if statement with multiline bracketed consequent', done => { - const contract = util.getCode('if/if-with-brackets-multiline.sol'); - const info = getInstrumentedVersion(contract, filePath); - const coverage = new CoverageMap(); - coverage.addContract(info, filePath); - - // Runs: a(1) => if (x == 1){\n x = 3; } - vm.execute(info.contract, 'a', [1]).then(events => { - const mapping = coverage.generate(events, pathPrefix); - assert.deepEqual(mapping[filePath].l, { - 5: 1, 6: 1, - }); - assert.deepEqual(mapping[filePath].b, { - 1: [1, 0], - }); - assert.deepEqual(mapping[filePath].s, { - 1: 1, 2: 1, - }); - assert.deepEqual(mapping[filePath].f, { - 1: 1, - }); - done(); - }).catch(done); - }); - - // Runs: a(1) => if (x == 1)\n x = 3; - it('should cover an unbracketed if consequent (multi-line)', done => { - const contract = util.getCode('if/if-no-brackets-multiline.sol'); - const info = getInstrumentedVersion(contract, filePath); - const coverage = new CoverageMap(); - coverage.addContract(info, filePath); - // Same results as previous test - vm.execute(info.contract, 'a', [1]).then(events => { - const mapping = coverage.generate(events, pathPrefix); - assert.deepEqual(mapping[filePath].l, { - 5: 1, 6: 1, - }); - assert.deepEqual(mapping[filePath].b, { - 1: [1, 0], - }); - assert.deepEqual(mapping[filePath].s, { - 1: 1, 2: 1, - }); - assert.deepEqual(mapping[filePath].f, { - 1: 1, - }); - done(); - }).catch(done); - }); - - it('should cover a simple if statement with a failing condition', done => { - const contract = util.getCode('if/if-with-brackets.sol'); - const info = getInstrumentedVersion(contract, filePath); - const coverage = new CoverageMap(); - coverage.addContract(info, filePath); - - // Runs: a(2) => if (x == 1) { x = 3; } - vm.execute(info.contract, 'a', [2]).then(events => { - const mapping = coverage.generate(events, pathPrefix); - assert.deepEqual(mapping[filePath].l, { - 5: 1, - }); - assert.deepEqual(mapping[filePath].b, { - 1: [0, 1], - }); - assert.deepEqual(mapping[filePath].s, { - 1: 1, 2: 0, - }); - assert.deepEqual(mapping[filePath].f, { - 1: 1, - }); - done(); - }).catch(done); - }); - - // Runs: a(2) => if (x == 1){\n throw;\n }else{\n x = 5; \n} - it('should cover an if statement with a bracketed alternate', done => { - const contract = util.getCode('if/else-with-brackets.sol'); - const info = getInstrumentedVersion(contract, filePath); - const coverage = new CoverageMap(); - coverage.addContract(info, filePath); - - vm.execute(info.contract, 'a', [2]).then(events => { - const mapping = coverage.generate(events, pathPrefix); - assert.deepEqual(mapping[filePath].l, { - 5: 1, 6: 0, 8: 1, - }); - assert.deepEqual(mapping[filePath].b, { - 1: [0, 1], - }); - assert.deepEqual(mapping[filePath].s, { - 1: 1, 2: 0, 3: 1, - }); - assert.deepEqual(mapping[filePath].f, { - 1: 1, - }); - done(); - }).catch(done); - }); - - it('should cover an if statement with an unbracketed alternate', done => { - const contract = util.getCode('if/else-without-brackets.sol'); - const info = getInstrumentedVersion(contract, filePath); - const coverage = new CoverageMap(); - coverage.addContract(info, filePath); - - vm.execute(info.contract, 'a', [2]).then(events => { - const mapping = coverage.generate(events, pathPrefix); - assert.deepEqual(mapping[filePath].l, { - 5: 1, 6: 0, 8: 1, - }); - assert.deepEqual(mapping[filePath].b, { - 1: [0, 1], - }); - assert.deepEqual(mapping[filePath].s, { - 1: 1, 2: 0, 3: 1, - }); - assert.deepEqual(mapping[filePath].f, { - 1: 1, - }); - done(); - }).catch(done); - }); - - it('should cover an else if statement with an unbracketed alternate', done => { - const contract = util.getCode('if/else-if-without-brackets.sol'); - const info = getInstrumentedVersion(contract, filePath); - const coverage = new CoverageMap(); - coverage.addContract(info, filePath); - - vm.execute(info.contract, 'a', [2]).then(events => { - const mapping = coverage.generate(events, pathPrefix); - assert.deepEqual(mapping[filePath].l, { - 5: 1, 6: 0, 8: 0, - }); - assert.deepEqual(mapping[filePath].b, { - 1: [0, 1], 2: [0, 1] - }); - assert.deepEqual(mapping[filePath].s, { - 1: 1, 2: 0, 3: 1, 4: 0 - }); - assert.deepEqual(mapping[filePath].f, { - 1: 1, - }); - done(); - }).catch(done); - }); - - it('should cover nested if statements with missing else statements', done => { - const contract = util.getCode('if/nested-if-missing-else.sol'); - const info = getInstrumentedVersion(contract, filePath); - const coverage = new CoverageMap(); - coverage.addContract(info, filePath); - vm.execute(info.contract, 'a', [2, 3, 3]).then(events => { - const mapping = coverage.generate(events, pathPrefix); - assert.deepEqual(mapping[filePath].l, { - 5: 1, 7: 1, - }); - assert.deepEqual(mapping[filePath].b, { - 1: [0, 1], 2: [1, 0], 3: [1, 0], - }); - assert.deepEqual(mapping[filePath].s, { - 1: 1, 2: 1, 3: 1, - }); - assert.deepEqual(mapping[filePath].f, { - 1: 1, - }); - done(); - }).catch(done); - }); - - it('should cover if-elseif-else statements that are at the same depth as each other', done => { - const contract = util.getCode('if/if-elseif-else.sol'); - const info = getInstrumentedVersion(contract, filePath); - const coverage = new CoverageMap(); - coverage.addContract(info, filePath); - vm.execute(info.contract, 'a', [2, 3, 3]).then(events => { - const mapping = coverage.generate(events, pathPrefix); - assert.deepEqual(mapping[filePath].l, { - 5: 1, 6: 0, 8: 1, 10: 0, 13: 1, 14: 0, 16: 1, 18: 0, - }); - assert.deepEqual(mapping[filePath].b, { - 1: [0, 1], 2: [1, 0], 3: [0, 1], 4: [1, 0] - }); - assert.deepEqual(mapping[filePath].s, { - 1: 1, 2: 0, 3: 1, 4: 1, 5: 0, 6: 1, 7: 0, 8: 1, 9: 1, 10: 0, - }); - assert.deepEqual(mapping[filePath].f, { - 1: 1, - }); - done(); - }).catch(done); - }); -}); diff --git a/test/cli/block-gas-limit.js b/test/jsSources/block-gas-limit.js similarity index 100% rename from test/cli/block-gas-limit.js rename to test/jsSources/block-gas-limit.js diff --git a/test/cli/empty.js b/test/jsSources/empty.js similarity index 100% rename from test/cli/empty.js rename to test/jsSources/empty.js diff --git a/test/cli/inheritance.js b/test/jsSources/inheritance.js similarity index 85% rename from test/cli/inheritance.js rename to test/jsSources/inheritance.js index 91fba75..d254624 100644 --- a/test/cli/inheritance.js +++ b/test/jsSources/inheritance.js @@ -1,6 +1,3 @@ -/* eslint-env node, mocha */ -/* global artifacts, contract, assert */ - const Owned = artifacts.require('./Owned.sol'); const Proxy = artifacts.require('./Proxy.sol'); diff --git a/test/cli/only-call.js b/test/jsSources/only-call.js similarity index 100% rename from test/cli/only-call.js rename to test/jsSources/only-call.js diff --git a/test/cli/oraclize.js b/test/jsSources/oraclize.js similarity index 100% rename from test/cli/oraclize.js rename to test/jsSources/oraclize.js diff --git a/test/cli/pureview.js b/test/jsSources/pureview.js similarity index 100% rename from test/cli/pureview.js rename to test/jsSources/pureview.js diff --git a/test/cli/requires-externally.js b/test/jsSources/requires-externally.js similarity index 100% rename from test/cli/requires-externally.js rename to test/jsSources/requires-externally.js diff --git a/test/cli/sign.js b/test/jsSources/sign.js similarity index 100% rename from test/cli/sign.js rename to test/jsSources/sign.js diff --git a/test/cli/simple.js b/test/jsSources/simple.js similarity index 82% rename from test/cli/simple.js rename to test/jsSources/simple.js index 1fcf550..86bdcb8 100644 --- a/test/cli/simple.js +++ b/test/jsSources/simple.js @@ -1,6 +1,3 @@ -/* eslint-env node, mocha */ -/* global artifacts, contract, assert */ - const Simple = artifacts.require('./Simple.sol'); contract('Simple', () => { diff --git a/test/cli/sol-parse-fail.js b/test/jsSources/sol-parse-fail.js similarity index 100% rename from test/cli/sol-parse-fail.js rename to test/jsSources/sol-parse-fail.js diff --git a/test/cli/testrpc-options.js b/test/jsSources/testrpc-options.js similarity index 100% rename from test/cli/testrpc-options.js rename to test/jsSources/testrpc-options.js diff --git a/test/cli/totallyPure.js b/test/jsSources/totallyPure.js similarity index 100% rename from test/cli/totallyPure.js rename to test/jsSources/totallyPure.js diff --git a/test/cli/truffle-crash.js b/test/jsSources/truffle-crash.js similarity index 100% rename from test/cli/truffle-crash.js rename to test/jsSources/truffle-crash.js diff --git a/test/cli/truffle-test-fail.js b/test/jsSources/truffle-test-fail.js similarity index 100% rename from test/cli/truffle-test-fail.js rename to test/jsSources/truffle-test-fail.js diff --git a/test/cli/wallet.js b/test/jsSources/wallet.js similarity index 76% rename from test/cli/wallet.js rename to test/jsSources/wallet.js index f9eb70b..827a400 100644 --- a/test/cli/wallet.js +++ b/test/jsSources/wallet.js @@ -1,6 +1,3 @@ -/* eslint-env node, mocha */ -/* global artifacts, contract, assert, web3 */ - const Wallet = artifacts.require('./Wallet.sol'); contract('Wallet', accounts => { @@ -11,15 +8,15 @@ contract('Wallet', accounts => { await walletA.sendTransaction({ value: web3.utils.toBN(500), from: accounts[0], }); - console.log('transaction done') + await walletA.sendPayment(50, walletB.address, { from: accounts[0], }); - console.log('transaction done') + await walletA.transferPayment(50, walletB.address, { from: accounts[0], }); - console.log('transaction done') + const balance = await walletB.getBalance(); assert.equal(balance.toNumber(), 100); }); diff --git a/test/sources/assembly/if.sol b/test/soliditySources/contracts/assembly/if.sol similarity index 100% rename from test/sources/assembly/if.sol rename to test/soliditySources/contracts/assembly/if.sol diff --git a/test/sources/assembly/spaces-in-function.sol b/test/soliditySources/contracts/assembly/spaces-in-function.sol similarity index 100% rename from test/sources/assembly/spaces-in-function.sol rename to test/soliditySources/contracts/assembly/spaces-in-function.sol diff --git a/test/sources/assert/Assert.sol b/test/soliditySources/contracts/assert/Assert.sol similarity index 100% rename from test/sources/assert/Assert.sol rename to test/soliditySources/contracts/assert/Assert.sol diff --git a/test/soliditySources/contracts/assert/RequireMultiline.sol b/test/soliditySources/contracts/assert/RequireMultiline.sol new file mode 100644 index 0000000..2f7dc51 --- /dev/null +++ b/test/soliditySources/contracts/assert/RequireMultiline.sol @@ -0,0 +1,9 @@ +pragma solidity ^0.5.0; + +contract Test { + function a(bool _a, bool _b, bool _c) public { + require(_a && + _b && + _c); + } +} \ No newline at end of file diff --git a/test/sources/cli/CLibrary.sol b/test/soliditySources/contracts/cli/CLibrary.sol similarity index 100% rename from test/sources/cli/CLibrary.sol rename to test/soliditySources/contracts/cli/CLibrary.sol diff --git a/test/sources/cli/Empty.sol b/test/soliditySources/contracts/cli/Empty.sol similarity index 100% rename from test/sources/cli/Empty.sol rename to test/soliditySources/contracts/cli/Empty.sol diff --git a/test/sources/cli/Events.sol b/test/soliditySources/contracts/cli/Events.sol similarity index 100% rename from test/sources/cli/Events.sol rename to test/soliditySources/contracts/cli/Events.sol diff --git a/test/sources/cli/Expensive.sol b/test/soliditySources/contracts/cli/Expensive.sol similarity index 100% rename from test/sources/cli/Expensive.sol rename to test/soliditySources/contracts/cli/Expensive.sol diff --git a/test/sources/cli/Face.sol b/test/soliditySources/contracts/cli/Face.sol similarity index 100% rename from test/sources/cli/Face.sol rename to test/soliditySources/contracts/cli/Face.sol diff --git a/test/sources/cli/Migrations.sol b/test/soliditySources/contracts/cli/Migrations.sol similarity index 100% rename from test/sources/cli/Migrations.sol rename to test/soliditySources/contracts/cli/Migrations.sol diff --git a/test/sources/cli/OnlyCall.sol b/test/soliditySources/contracts/cli/OnlyCall.sol similarity index 100% rename from test/sources/cli/OnlyCall.sol rename to test/soliditySources/contracts/cli/OnlyCall.sol diff --git a/test/sources/cli/Owned.sol b/test/soliditySources/contracts/cli/Owned.sol similarity index 100% rename from test/sources/cli/Owned.sol rename to test/soliditySources/contracts/cli/Owned.sol diff --git a/test/sources/cli/Proxy.sol b/test/soliditySources/contracts/cli/Proxy.sol similarity index 100% rename from test/sources/cli/Proxy.sol rename to test/soliditySources/contracts/cli/Proxy.sol diff --git a/test/sources/cli/PureView.sol b/test/soliditySources/contracts/cli/PureView.sol similarity index 100% rename from test/sources/cli/PureView.sol rename to test/soliditySources/contracts/cli/PureView.sol diff --git a/test/sources/cli/Simple.sol b/test/soliditySources/contracts/cli/Simple.sol similarity index 100% rename from test/sources/cli/Simple.sol rename to test/soliditySources/contracts/cli/Simple.sol diff --git a/test/sources/cli/TotallyPure.sol b/test/soliditySources/contracts/cli/TotallyPure.sol similarity index 87% rename from test/sources/cli/TotallyPure.sol rename to test/soliditySources/contracts/cli/TotallyPure.sol index 008271c..5c6c826 100644 --- a/test/sources/cli/TotallyPure.sol +++ b/test/soliditySources/contracts/cli/TotallyPure.sol @@ -1,8 +1,8 @@ pragma solidity ^0.5.0; -import "./../assets/Face.sol"; -import "./../assets/PureView.sol"; -import "./../assets/CLibrary.sol"; +import "./../../externalSources/Face.sol"; +import "./../../externalSources/PureView.sol"; +import "./../../externalSources/CLibrary.sol"; contract TotallyPure is PureView, Face { uint onehundred = 99; diff --git a/test/sources/cli/Wallet.sol b/test/soliditySources/contracts/cli/Wallet.sol similarity index 100% rename from test/sources/cli/Wallet.sol rename to test/soliditySources/contracts/cli/Wallet.sol diff --git a/test/sources/comments/postContractComment.sol b/test/soliditySources/contracts/comments/postContractComment.sol similarity index 100% rename from test/sources/comments/postContractComment.sol rename to test/soliditySources/contracts/comments/postContractComment.sol diff --git a/test/sources/comments/postFunctionDeclarationComment.sol b/test/soliditySources/contracts/comments/postFunctionDeclarationComment.sol similarity index 100% rename from test/sources/comments/postFunctionDeclarationComment.sol rename to test/soliditySources/contracts/comments/postFunctionDeclarationComment.sol diff --git a/test/sources/comments/postIfStatementComment.sol b/test/soliditySources/contracts/comments/postIfStatementComment.sol similarity index 100% rename from test/sources/comments/postIfStatementComment.sol rename to test/soliditySources/contracts/comments/postIfStatementComment.sol diff --git a/test/sources/comments/postLineComment.sol b/test/soliditySources/contracts/comments/postLineComment.sol similarity index 100% rename from test/sources/comments/postLineComment.sol rename to test/soliditySources/contracts/comments/postLineComment.sol diff --git a/test/sources/conditional/declarative-exp-assignment-alternate.sol b/test/soliditySources/contracts/conditional/declarative-exp-assignment-alternate.sol similarity index 100% rename from test/sources/conditional/declarative-exp-assignment-alternate.sol rename to test/soliditySources/contracts/conditional/declarative-exp-assignment-alternate.sol diff --git a/test/sources/conditional/identifier-assignment-alternate.sol b/test/soliditySources/contracts/conditional/identifier-assignment-alternate.sol similarity index 100% rename from test/sources/conditional/identifier-assignment-alternate.sol rename to test/soliditySources/contracts/conditional/identifier-assignment-alternate.sol diff --git a/test/sources/conditional/mapping-assignment.sol b/test/soliditySources/contracts/conditional/mapping-assignment.sol similarity index 87% rename from test/sources/conditional/mapping-assignment.sol rename to test/soliditySources/contracts/conditional/mapping-assignment.sol index c8100a0..7e0faf6 100644 --- a/test/sources/conditional/mapping-assignment.sol +++ b/test/soliditySources/contracts/conditional/mapping-assignment.sol @@ -8,7 +8,7 @@ contract Test { Vote vote; function a() public { - var isYay = false; + bool isYay = false; vote.voted[msg.sender] = isYay ? 1 : 2; } } \ No newline at end of file diff --git a/test/sources/conditional/multiline-alternate.sol b/test/soliditySources/contracts/conditional/multiline-alternate.sol similarity index 100% rename from test/sources/conditional/multiline-alternate.sol rename to test/soliditySources/contracts/conditional/multiline-alternate.sol diff --git a/test/sources/conditional/multiline-consequent.sol b/test/soliditySources/contracts/conditional/multiline-consequent.sol similarity index 100% rename from test/sources/conditional/multiline-consequent.sol rename to test/soliditySources/contracts/conditional/multiline-consequent.sol diff --git a/test/sources/conditional/sameline-alternate.sol b/test/soliditySources/contracts/conditional/sameline-alternate.sol similarity index 100% rename from test/sources/conditional/sameline-alternate.sol rename to test/soliditySources/contracts/conditional/sameline-alternate.sol diff --git a/test/sources/conditional/sameline-consequent.sol b/test/soliditySources/contracts/conditional/sameline-consequent.sol similarity index 100% rename from test/sources/conditional/sameline-consequent.sol rename to test/soliditySources/contracts/conditional/sameline-consequent.sol diff --git a/test/sources/conditional/variable-decl-assignment-alternate.sol b/test/soliditySources/contracts/conditional/variable-decl-assignment-alternate.sol similarity index 100% rename from test/sources/conditional/variable-decl-assignment-alternate.sol rename to test/soliditySources/contracts/conditional/variable-decl-assignment-alternate.sol diff --git a/test/sources/expressions/new-expression.sol b/test/soliditySources/contracts/expressions/new-expression.sol similarity index 100% rename from test/sources/expressions/new-expression.sol rename to test/soliditySources/contracts/expressions/new-expression.sol diff --git a/test/sources/expressions/single-binary-expression.sol b/test/soliditySources/contracts/expressions/single-binary-expression.sol similarity index 100% rename from test/sources/expressions/single-binary-expression.sol rename to test/soliditySources/contracts/expressions/single-binary-expression.sol diff --git a/test/sources/function/abstract.sol b/test/soliditySources/contracts/function/abstract.sol similarity index 100% rename from test/sources/function/abstract.sol rename to test/soliditySources/contracts/function/abstract.sol diff --git a/test/sources/function/calldata.sol b/test/soliditySources/contracts/function/calldata.sol similarity index 100% rename from test/sources/function/calldata.sol rename to test/soliditySources/contracts/function/calldata.sol diff --git a/test/sources/function/chainable-new.sol b/test/soliditySources/contracts/function/chainable-new.sol similarity index 100% rename from test/sources/function/chainable-new.sol rename to test/soliditySources/contracts/function/chainable-new.sol diff --git a/test/sources/function/chainable-value.sol b/test/soliditySources/contracts/function/chainable-value.sol similarity index 100% rename from test/sources/function/chainable-value.sol rename to test/soliditySources/contracts/function/chainable-value.sol diff --git a/test/sources/function/chainable.sol b/test/soliditySources/contracts/function/chainable.sol similarity index 100% rename from test/sources/function/chainable.sol rename to test/soliditySources/contracts/function/chainable.sol diff --git a/test/sources/function/constructor-keyword.sol b/test/soliditySources/contracts/function/constructor-keyword.sol similarity index 100% rename from test/sources/function/constructor-keyword.sol rename to test/soliditySources/contracts/function/constructor-keyword.sol diff --git a/test/sources/function/empty-body.sol b/test/soliditySources/contracts/function/empty-body.sol similarity index 100% rename from test/sources/function/empty-body.sol rename to test/soliditySources/contracts/function/empty-body.sol diff --git a/test/sources/function/function-call.sol b/test/soliditySources/contracts/function/function-call.sol similarity index 100% rename from test/sources/function/function-call.sol rename to test/soliditySources/contracts/function/function-call.sol diff --git a/test/sources/function/function.sol b/test/soliditySources/contracts/function/function.sol similarity index 100% rename from test/sources/function/function.sol rename to test/soliditySources/contracts/function/function.sol diff --git a/test/sources/function/modifier.sol b/test/soliditySources/contracts/function/modifier.sol similarity index 100% rename from test/sources/function/modifier.sol rename to test/soliditySources/contracts/function/modifier.sol diff --git a/test/sources/function/multiple.sol b/test/soliditySources/contracts/function/multiple.sol similarity index 100% rename from test/sources/function/multiple.sol rename to test/soliditySources/contracts/function/multiple.sol diff --git a/test/sources/if/else-if-unbracketed-multi.sol b/test/soliditySources/contracts/if/else-if-unbracketed-multi.sol similarity index 100% rename from test/sources/if/else-if-unbracketed-multi.sol rename to test/soliditySources/contracts/if/else-if-unbracketed-multi.sol diff --git a/test/sources/if/else-if-without-brackets.sol b/test/soliditySources/contracts/if/else-if-without-brackets.sol similarity index 100% rename from test/sources/if/else-if-without-brackets.sol rename to test/soliditySources/contracts/if/else-if-without-brackets.sol diff --git a/test/sources/if/else-with-brackets.sol b/test/soliditySources/contracts/if/else-with-brackets.sol similarity index 100% rename from test/sources/if/else-with-brackets.sol rename to test/soliditySources/contracts/if/else-with-brackets.sol diff --git a/test/sources/if/else-without-brackets.sol b/test/soliditySources/contracts/if/else-without-brackets.sol similarity index 100% rename from test/sources/if/else-without-brackets.sol rename to test/soliditySources/contracts/if/else-without-brackets.sol diff --git a/test/sources/if/if-else-no-brackets.sol b/test/soliditySources/contracts/if/if-else-no-brackets.sol similarity index 100% rename from test/sources/if/if-else-no-brackets.sol rename to test/soliditySources/contracts/if/if-else-no-brackets.sol diff --git a/test/sources/if/if-elseif-else.sol b/test/soliditySources/contracts/if/if-elseif-else.sol similarity index 100% rename from test/sources/if/if-elseif-else.sol rename to test/soliditySources/contracts/if/if-elseif-else.sol diff --git a/test/sources/if/if-no-brackets-multiline.sol b/test/soliditySources/contracts/if/if-no-brackets-multiline.sol similarity index 100% rename from test/sources/if/if-no-brackets-multiline.sol rename to test/soliditySources/contracts/if/if-no-brackets-multiline.sol diff --git a/test/sources/if/if-no-brackets.sol b/test/soliditySources/contracts/if/if-no-brackets.sol similarity index 100% rename from test/sources/if/if-no-brackets.sol rename to test/soliditySources/contracts/if/if-no-brackets.sol diff --git a/test/sources/if/if-with-brackets-multiline.sol b/test/soliditySources/contracts/if/if-with-brackets-multiline.sol similarity index 100% rename from test/sources/if/if-with-brackets-multiline.sol rename to test/soliditySources/contracts/if/if-with-brackets-multiline.sol diff --git a/test/sources/if/if-with-brackets.sol b/test/soliditySources/contracts/if/if-with-brackets.sol similarity index 100% rename from test/sources/if/if-with-brackets.sol rename to test/soliditySources/contracts/if/if-with-brackets.sol diff --git a/test/sources/if/nested-if-missing-else.sol b/test/soliditySources/contracts/if/nested-if-missing-else.sol similarity index 100% rename from test/sources/if/nested-if-missing-else.sol rename to test/soliditySources/contracts/if/nested-if-missing-else.sol diff --git a/test/sources/loops/for-no-brackets.sol b/test/soliditySources/contracts/loops/for-no-brackets.sol similarity index 100% rename from test/sources/loops/for-no-brackets.sol rename to test/soliditySources/contracts/loops/for-no-brackets.sol diff --git a/test/sources/loops/for-with-brackets.sol b/test/soliditySources/contracts/loops/for-with-brackets.sol similarity index 100% rename from test/sources/loops/for-with-brackets.sol rename to test/soliditySources/contracts/loops/for-with-brackets.sol diff --git a/test/sources/loops/while-no-brackets.sol b/test/soliditySources/contracts/loops/while-no-brackets.sol similarity index 100% rename from test/sources/loops/while-no-brackets.sol rename to test/soliditySources/contracts/loops/while-no-brackets.sol diff --git a/test/sources/loops/while-with-brackets.sol b/test/soliditySources/contracts/loops/while-with-brackets.sol similarity index 100% rename from test/sources/loops/while-with-brackets.sol rename to test/soliditySources/contracts/loops/while-with-brackets.sol diff --git a/test/sources/return/return.sol b/test/soliditySources/contracts/return/return.sol similarity index 100% rename from test/sources/return/return.sol rename to test/soliditySources/contracts/return/return.sol diff --git a/test/sources/statements/emit-coverage.sol b/test/soliditySources/contracts/statements/emit-coverage.sol similarity index 100% rename from test/sources/statements/emit-coverage.sol rename to test/soliditySources/contracts/statements/emit-coverage.sol diff --git a/test/sources/statements/emit-instrument.sol b/test/soliditySources/contracts/statements/emit-instrument.sol similarity index 100% rename from test/sources/statements/emit-instrument.sol rename to test/soliditySources/contracts/statements/emit-instrument.sol diff --git a/test/sources/statements/empty-contract-ala-melonport.sol b/test/soliditySources/contracts/statements/empty-contract-ala-melonport.sol similarity index 100% rename from test/sources/statements/empty-contract-ala-melonport.sol rename to test/soliditySources/contracts/statements/empty-contract-ala-melonport.sol diff --git a/test/sources/statements/empty-contract-body.sol b/test/soliditySources/contracts/statements/empty-contract-body.sol similarity index 100% rename from test/sources/statements/empty-contract-body.sol rename to test/soliditySources/contracts/statements/empty-contract-body.sol diff --git a/test/sources/statements/fn-argument-multiline.sol b/test/soliditySources/contracts/statements/fn-argument-multiline.sol similarity index 100% rename from test/sources/statements/fn-argument-multiline.sol rename to test/soliditySources/contracts/statements/fn-argument-multiline.sol diff --git a/test/sources/statements/fn-argument.sol b/test/soliditySources/contracts/statements/fn-argument.sol similarity index 100% rename from test/sources/statements/fn-argument.sol rename to test/soliditySources/contracts/statements/fn-argument.sol diff --git a/test/sources/statements/fn-struct.sol b/test/soliditySources/contracts/statements/fn-struct.sol similarity index 86% rename from test/sources/statements/fn-struct.sol rename to test/soliditySources/contracts/statements/fn-struct.sol index 5af1f83..51487cd 100644 --- a/test/sources/statements/fn-struct.sol +++ b/test/soliditySources/contracts/statements/fn-struct.sol @@ -1,3 +1,5 @@ +pragma solidity ^0.5.0; + contract Test { struct Fn { function(bytes32) internal view returns(bool) startConditions; diff --git a/test/sources/statements/library.sol b/test/soliditySources/contracts/statements/library.sol similarity index 100% rename from test/sources/statements/library.sol rename to test/soliditySources/contracts/statements/library.sol diff --git a/test/sources/statements/multiple.sol b/test/soliditySources/contracts/statements/multiple.sol similarity index 100% rename from test/sources/statements/multiple.sol rename to test/soliditySources/contracts/statements/multiple.sol diff --git a/test/sources/statements/post-close-brace.sol b/test/soliditySources/contracts/statements/post-close-brace.sol similarity index 100% rename from test/sources/statements/post-close-brace.sol rename to test/soliditySources/contracts/statements/post-close-brace.sol diff --git a/test/sources/statements/single.sol b/test/soliditySources/contracts/statements/single.sol similarity index 100% rename from test/sources/statements/single.sol rename to test/soliditySources/contracts/statements/single.sol diff --git a/test/sources/statements/tuple.sol b/test/soliditySources/contracts/statements/tuple.sol similarity index 62% rename from test/sources/statements/tuple.sol rename to test/soliditySources/contracts/statements/tuple.sol index 54ff373..9912e65 100644 --- a/test/sources/statements/tuple.sol +++ b/test/soliditySources/contracts/statements/tuple.sol @@ -1,13 +1,13 @@ pragma solidity ^0.5.0; -contract Test { +contract Test { function returnTuple() public returns (uint x, uint y) { return (10, 20); } function a() public { - (uint a, uint b) = (10, 20); - (a, b) = returnTuple(); + (uint _a, uint _b) = (10, 20); + (_a, _b) = returnTuple(); } } \ No newline at end of file diff --git a/test/sources/cli/Oraclize.sol b/test/soliditySources/errors/Oraclize.sol similarity index 100% rename from test/sources/cli/Oraclize.sol rename to test/soliditySources/errors/Oraclize.sol diff --git a/test/sources/cli/SimpleError.sol b/test/soliditySources/errors/SimpleError.sol similarity index 100% rename from test/sources/cli/SimpleError.sol rename to test/soliditySources/errors/SimpleError.sol diff --git a/test/sources/statements/compilation-error.sol b/test/soliditySources/errors/compilation-error.sol similarity index 100% rename from test/sources/statements/compilation-error.sol rename to test/soliditySources/errors/compilation-error.sol diff --git a/test/soliditySources/external/CLibrary.sol b/test/soliditySources/external/CLibrary.sol new file mode 100644 index 0000000..3a34111 --- /dev/null +++ b/test/soliditySources/external/CLibrary.sol @@ -0,0 +1,8 @@ +pragma solidity ^0.5.0; + +library CLibrary { + uint constant x = 1; + function a() public view returns (uint) { + return x; + } +} \ No newline at end of file diff --git a/test/soliditySources/external/Face.sol b/test/soliditySources/external/Face.sol new file mode 100644 index 0000000..2e9d2a4 --- /dev/null +++ b/test/soliditySources/external/Face.sol @@ -0,0 +1,6 @@ +pragma solidity ^0.5.0; + +interface Face { + function stare(uint a, uint b) external; + function cry() external; +} \ No newline at end of file diff --git a/test/soliditySources/external/PureView.sol b/test/soliditySources/external/PureView.sol new file mode 100644 index 0000000..a66773f --- /dev/null +++ b/test/soliditySources/external/PureView.sol @@ -0,0 +1,19 @@ +pragma solidity ^0.5.0; + +contract PureView { + + // Make sure we aren't corrupting anything with the replace + uint notpureview = 5; + + // Abstract functions to inherit from an uninstrumented, imported file. + function bePure(uint a, uint b) public pure returns (uint); + function beView() public view returns (uint); + + function inheritedPure(uint a, uint b) public pure returns(uint){ + return a + b; + } + + function inheritedView() public view returns (uint){ + return notpureview; + } +} \ No newline at end of file diff --git a/test/sources/assert/RequireMultiline.sol b/test/sources/assert/RequireMultiline.sol deleted file mode 100644 index de1aead..0000000 --- a/test/sources/assert/RequireMultiline.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma solidity ^0.5.0; - -contract Test { - function a(bool a, bool b, bool c) public { - require(a && - b && - c); - } -} \ No newline at end of file diff --git a/test/app.js b/test/units/app.js similarity index 99% rename from test/app.js rename to test/units/app.js index 3b5354a..9c963a3 100644 --- a/test/app.js +++ b/test/units/app.js @@ -1,6 +1,6 @@ /* eslint-env node, mocha */ -const assert = require('assert'); +/*const assert = require('assert'); const shell = require('shelljs'); const fs = require('fs'); const childprocess = require('child_process'); @@ -465,4 +465,4 @@ describe('app', () => { assert(pathExists('./coverage.json') !== true, 'script should NOT gen coverage.json'); collectGarbage(); }); -}); +});*/ diff --git a/test/assembly.js b/test/units/assembly.js similarity index 90% rename from test/assembly.js rename to test/units/assembly.js index a41c7b8..e9021bd 100644 --- a/test/assembly.js +++ b/test/units/assembly.js @@ -1,16 +1,17 @@ /* eslint-env node, mocha */ -const solc = require('solc'); +/*const solc = require('solc'); const getInstrumentedVersion = require('./../lib/instrumentSolidity.js'); const util = require('./util/util.js'); -const path = require('path'); +const path = require('path');*/ /** * NB: passing '1' to solc as an option activates the optimiser * NB: solc will throw if there is a compilation error, causing the test to fail * and passing the error to mocha. */ -describe('generic expressions', () => { + +/*describe('generic expressions', () => { const filePath = path.resolve('./test.sol'); it('should compile after instrumenting an assembly function with spaces in parameters', () => { @@ -27,4 +28,4 @@ describe('generic expressions', () => { util.report(output.errors); }); -}); +});*/ diff --git a/test/assert.js b/test/units/assert.js similarity index 98% rename from test/assert.js rename to test/units/assert.js index 2f074c1..82be2f2 100644 --- a/test/assert.js +++ b/test/units/assert.js @@ -1,6 +1,6 @@ /* eslint-env node, mocha */ -const path = require('path'); +/*const path = require('path'); const getInstrumentedVersion = require('./../lib/instrumentSolidity.js'); const util = require('./util/util.js'); const CoverageMap = require('./../lib/coverageMap'); @@ -106,4 +106,4 @@ describe('asserts and requires', () => { done(); }).catch(done); }); -}); +});*/ diff --git a/test/comments.js b/test/units/comments.js similarity index 97% rename from test/comments.js rename to test/units/comments.js index 79ca305..3aeceb4 100644 --- a/test/comments.js +++ b/test/units/comments.js @@ -1,6 +1,6 @@ /* eslint-env node, mocha */ -const path = require('path'); +/*const path = require('path'); const getInstrumentedVersion = require('./../lib/instrumentSolidity.js'); const util = require('./util/util.js'); const solc = require('solc'); @@ -35,4 +35,4 @@ describe('comments', () => { const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); -}); +});*/ diff --git a/test/conditional.js b/test/units/conditional.js similarity index 85% rename from test/conditional.js rename to test/units/conditional.js index c6995ea..bf011ea 100644 --- a/test/conditional.js +++ b/test/units/conditional.js @@ -1,6 +1,6 @@ /* eslint-env node, mocha */ -const path = require('path'); +/*const path = require('path'); const getInstrumentedVersion = require('./../lib/instrumentSolidity.js'); const util = require('./util/util.js'); const CoverageMap = require('./../lib/coverageMap'); @@ -181,23 +181,5 @@ describe.skip('conditional statements', () => { }).catch(done); }); - // Solcover has trouble with this case. The conditional coverage strategy relies on being able to - // reference the left-hand variable before its value is assigned. Solidity doesn't allow this - // for 'var'. - - /* it('should cover a var decl assignment by conditional that reaches the alternate', (done) => { - const contract = util.getCode('conditional/variable-decl-assignment-alternate.sol'); - const info = getInstrumentedVersion(contract, filePath); - const coverage = new CoverageMap(); - coverage.addContract(info, filePath); - // Runs var z = (x) ? y = false : y = false; - vm.execute(info.contract, 'a', []).then(events => { - const mapping = coverage.generate(events, pathPrefix); - assert.deepEqual(mapping[filePath].l, {5: 1, 6: 1, 7: 1}); - assert.deepEqual(mapping[filePath].b, {'1': [0, 1]}); - assert.deepEqual(mapping[filePath].s, {1: 1, 2: 1, 3: 1}); - assert.deepEqual(mapping[filePath].f, {1: 1}); - done(); - }).catch(done); - }); */ }); +*/ diff --git a/test/expressions.js b/test/units/expressions.js similarity index 80% rename from test/expressions.js rename to test/units/expressions.js index 5723e22..8e24ec2 100644 --- a/test/expressions.js +++ b/test/units/expressions.js @@ -1,15 +1,10 @@ /* eslint-env node, mocha */ -const solc = require('solc'); +/*const solc = require('solc'); const getInstrumentedVersion = require('./../lib/instrumentSolidity.js'); const util = require('./util/util.js'); const path = require('path'); -/** - * NB: passing '1' to solc as an option activates the optimiser - * NB: solc will throw if there is a compilation error, causing the test to fail - * and passing the error to mocha. - */ describe('generic expressions', () => { const filePath = path.resolve('./test.sol'); @@ -26,4 +21,4 @@ describe('generic expressions', () => { const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); -}); +});*/ diff --git a/test/function.js b/test/units/function.js similarity index 96% rename from test/function.js rename to test/units/function.js index a5bb865..fd3c3c2 100644 --- a/test/function.js +++ b/test/units/function.js @@ -1,6 +1,4 @@ -/* eslint-env node, mocha */ - -const solc = require('solc'); +/*const solc = require('solc'); const getInstrumentedVersion = require('./../lib/instrumentSolidity.js'); const util = require('./util/util.js'); const path = require('path'); @@ -8,11 +6,6 @@ const CoverageMap = require('./../lib/coverageMap'); const vm = require('./util/vm'); const assert = require('assert'); -/** - * NB: passing '1' to solc as an option activates the optimiser - * NB: solc will throw if there is a compilation error, causing the test to fail - * and passing the error to mocha. - */ describe('function declarations', () => { const filePath = path.resolve('./test.sol'); const pathPrefix = './'; @@ -190,3 +183,4 @@ describe('function declarations', () => { }).catch(done); }); }); +*/ diff --git a/test/units/if.js b/test/units/if.js new file mode 100644 index 0000000..d9a62ba --- /dev/null +++ b/test/units/if.js @@ -0,0 +1,242 @@ +const assert = require('assert'); +const util = require('./../util/util.js'); + +const ganache = require('ganache-core'); +const Coverage = require('./../../lib/coverage'); +const DataCollector = require('./../../lib/collector'); + +describe.only('if, else, and else if statements', () => { + let coverage; + let provider; + let collector; + + before(async () => ({ provider, collector } = await util.initializeProvider(ganache))); + beforeEach(() => coverage = new Coverage()); + after((done) => provider.close(done)); + + it('should compile after instrumenting unbracketed if-elses', () => { + const info = util.instrumentAndCompile('if/if-else-no-brackets'); + util.report(info.solcOutput.errors); + }); + + it('should compile after instrumenting multiple unbracketed if-elses', () => { + const info = util.instrumentAndCompile('if/else-if-unbracketed-multi'); + util.report(info.solcOutput.errors); + }); + + it('should cover an if statement with a bracketed consequent', async function() { + const contract = await util.bootstrapCoverage('if/if-with-brackets', provider, collector); + coverage.addContract(contract.instrumented, util.filePath); + await contract.instance.a(1); + const mapping = coverage.generate(contract.data, util.pathPrefix); + + assert.deepEqual(mapping[util.filePath].l, { + 5: 1, + }); + assert.deepEqual(mapping[util.filePath].b, { + 1: [1, 0], + }); + assert.deepEqual(mapping[util.filePath].s, { + 1: 1, 2: 1, + }); + assert.deepEqual(mapping[util.filePath].f, { + 1: 1, + }); + }); + + // Runs: a(1) => if (x == 1) x = 2; + it('should cover an unbracketed if consequent (single line)', async function(){ + const contract = await util.bootstrapCoverage('if/if-no-brackets', provider, collector); + coverage.addContract(contract.instrumented, util.filePath); + await contract.instance.a(1); + const mapping = coverage.generate(contract.data, util.pathPrefix); + + assert.deepEqual(mapping[util.filePath].l, { + 5: 1, + }); + assert.deepEqual(mapping[util.filePath].b, { + 1: [1, 0], + }); + assert.deepEqual(mapping[util.filePath].s, { + 1: 1, 2: 1, + }); + assert.deepEqual(mapping[util.filePath].f, { + 1: 1, + }); + }); + + // Runs: a(1) => if (x == 1){\n x = 3; } + it('should cover an if statement with multiline bracketed consequent', async function() { + const contract = await util.bootstrapCoverage('if/if-with-brackets-multiline',provider,collector); + + coverage.addContract(contract.instrumented, util.filePath); + await contract.instance.a(1); + const mapping = coverage.generate(contract.data, util.pathPrefix); + + assert.deepEqual(mapping[util.filePath].l, { + 5: 1, 6: 1, + }); + assert.deepEqual(mapping[util.filePath].b, { + 1: [1, 0], + }); + assert.deepEqual(mapping[util.filePath].s, { + 1: 1, 2: 1, + }); + assert.deepEqual(mapping[util.filePath].f, { + 1: 1, + }); + + }); + + // Runs: a(1) => if (x == 1)\n x = 3; + it('should cover an unbracketed if consequent (multi-line)', async function() { + const contract = await util.bootstrapCoverage('if/if-no-brackets-multiline',provider,collector); + + coverage.addContract(contract.instrumented, util.filePath); + await contract.instance.a(1); + const mapping = coverage.generate(contract.data, util.pathPrefix); + + assert.deepEqual(mapping[util.filePath].l, { + 5: 1, 6: 1, + }); + assert.deepEqual(mapping[util.filePath].b, { + 1: [1, 0], + }); + assert.deepEqual(mapping[util.filePath].s, { + 1: 1, 2: 1, + }); + assert.deepEqual(mapping[util.filePath].f, { + 1: 1, + }); + }); + + // Runs: a(2) => if (x == 1) { x = 3; } + it('should cover a simple if statement with a failing condition', async function() { + const contract = await util.bootstrapCoverage('if/if-with-brackets',provider,collector); + + coverage.addContract(contract.instrumented, util.filePath); + await contract.instance.a(2); + const mapping = coverage.generate(contract.data, util.pathPrefix); + + assert.deepEqual(mapping[util.filePath].l, { + 5: 1, + }); + assert.deepEqual(mapping[util.filePath].b, { + 1: [0, 1], + }); + assert.deepEqual(mapping[util.filePath].s, { + 1: 1, 2: 0, + }); + assert.deepEqual(mapping[util.filePath].f, { + 1: 1, + }); + }); + + // Runs: a(2) => if (x == 1){\n throw;\n }else{\n x = 5; \n} + it('should cover an if statement with a bracketed alternate', async function() { + const contract = await util.bootstrapCoverage('if/else-with-brackets',provider,collector); + + coverage.addContract(contract.instrumented, util.filePath); + await contract.instance.a(2); + const mapping = coverage.generate(contract.data, util.pathPrefix); + + assert.deepEqual(mapping[util.filePath].l, { + 5: 1, 6: 0, 8: 1, + }); + assert.deepEqual(mapping[util.filePath].b, { + 1: [0, 1], + }); + assert.deepEqual(mapping[util.filePath].s, { + 1: 1, 2: 0, 3: 1, + }); + assert.deepEqual(mapping[util.filePath].f, { + 1: 1, + }); + }); + + it('should cover an if statement with an unbracketed alternate', async function() { + const contract = await util.bootstrapCoverage('if/else-without-brackets',provider,collector); + + coverage.addContract(contract.instrumented, util.filePath); + await contract.instance.a(2); + const mapping = coverage.generate(contract.data, util.pathPrefix); + + assert.deepEqual(mapping[util.filePath].l, { + 5: 1, 6: 0, 8: 1, + }); + assert.deepEqual(mapping[util.filePath].b, { + 1: [0, 1], + }); + assert.deepEqual(mapping[util.filePath].s, { + 1: 1, 2: 0, 3: 1, + }); + assert.deepEqual(mapping[util.filePath].f, { + 1: 1, + }); + + }); + + it('should cover an else if statement with an unbracketed alternate', async function() { + const contract = await util.bootstrapCoverage('if/else-if-without-brackets',provider,collector); + + coverage.addContract(contract.instrumented, util.filePath); + await contract.instance.a(2); + const mapping = coverage.generate(contract.data, util.pathPrefix); + + assert.deepEqual(mapping[util.filePath].l, { + 5: 1, 6: 0, 8: 0, + }); + assert.deepEqual(mapping[util.filePath].b, { + 1: [0, 1], 2: [0, 1] + }); + assert.deepEqual(mapping[util.filePath].s, { + 1: 1, 2: 0, 3: 1, 4: 0 + }); + assert.deepEqual(mapping[util.filePath].f, { + 1: 1, + }); + }); + + it('should cover nested if statements with missing else statements', async function() { + const contract = await util.bootstrapCoverage('if/nested-if-missing-else',provider,collector); + + coverage.addContract(contract.instrumented, util.filePath); + await contract.instance.a(2,3,3); + const mapping = coverage.generate(contract.data, util.pathPrefix); + + assert.deepEqual(mapping[util.filePath].l, { + 5: 1, 7: 1, + }); + assert.deepEqual(mapping[util.filePath].b, { + 1: [0, 1], 2: [1, 0], 3: [1, 0], + }); + assert.deepEqual(mapping[util.filePath].s, { + 1: 1, 2: 1, 3: 1, + }); + assert.deepEqual(mapping[util.filePath].f, { + 1: 1, + }); + + }); + + it('should cover if-elseif-else statements that are at the same depth as each other', async function() { + const contract = await util.bootstrapCoverage('if/if-elseif-else',provider,collector); + + coverage.addContract(contract.instrumented, util.filePath); + await contract.instance.a(2,3,3); + const mapping = coverage.generate(contract.data, util.pathPrefix); + + assert.deepEqual(mapping[util.filePath].l, { + 5: 1, 6: 0, 8: 1, 10: 0, 13: 1, 14: 0, 16: 1, 18: 0, + }); + assert.deepEqual(mapping[util.filePath].b, { + 1: [0, 1], 2: [1, 0], 3: [0, 1], 4: [1, 0] + }); + assert.deepEqual(mapping[util.filePath].s, { + 1: 1, 2: 0, 3: 1, 4: 1, 5: 0, 6: 1, 7: 0, 8: 1, 9: 1, 10: 0, + }); + assert.deepEqual(mapping[util.filePath].f, { + 1: 1, + }); + }); +}); diff --git a/test/loops.js b/test/units/loops.js similarity index 98% rename from test/loops.js rename to test/units/loops.js index 6cba5e5..961a5f1 100644 --- a/test/loops.js +++ b/test/units/loops.js @@ -1,6 +1,4 @@ -/* eslint-env node, mocha */ - -const path = require('path'); +/*const path = require('path'); const getInstrumentedVersion = require('./../lib/instrumentSolidity.js'); const util = require('./util/util.js'); const CoverageMap = require('./../lib/coverageMap'); @@ -102,4 +100,4 @@ describe('for and while statements', () => { done(); }).catch(done); }); -}); +});*/ diff --git a/test/return.js b/test/units/return.js similarity index 92% rename from test/return.js rename to test/units/return.js index 3df788a..b8bcaf8 100644 --- a/test/return.js +++ b/test/units/return.js @@ -1,6 +1,6 @@ /* eslint-env node, mocha */ -const solc = require('solc'); +/*const solc = require('solc'); const getInstrumentedVersion = require('./../lib/instrumentSolidity.js'); const util = require('./util/util.js'); @@ -11,4 +11,4 @@ describe('return statements', () => { const output = JSON.parse(solc.compile(util.codeToCompilerInput(info.contract))); util.report(output.errors); }); -}); +});*/ diff --git a/test/statements.js b/test/units/statements.js similarity index 96% rename from test/statements.js rename to test/units/statements.js index 2074675..ca9d465 100644 --- a/test/statements.js +++ b/test/units/statements.js @@ -1,6 +1,6 @@ /* eslint-env node, mocha */ -const solc = require('solc'); +/*const solc = require('solc'); const getInstrumentedVersion = require('./../lib/instrumentSolidity.js'); const util = require('./util/util.js'); const CoverageMap = require('./../lib/coverageMap'); @@ -8,11 +8,6 @@ const path = require('path'); const vm = require('./util/vm'); const assert = require('assert'); -/** - * NB: passing '1' to solc as an option activates the optimiser - * NB: solc will throw if there is a compilation error, causing the test to fail - * and passing the error to mocha. - */ describe('generic statements', () => { const filePath = path.resolve('./test.sol'); const pathPrefix = './'; @@ -190,4 +185,4 @@ describe('generic statements', () => { done(); }).catch(done); }); -}); +});*/ diff --git a/test/util/mockTestCommand.js b/test/util/mockTestCommand.js deleted file mode 100644 index d0abb34..0000000 --- a/test/util/mockTestCommand.js +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env node - -const fs = require('fs'); -const request = require('request'); -const fakeEvent = {"address":"6d6cf716c2a7672047e15a255d4c9624db60f215","topics":["34b35f4b1a8c3eb2caa69f05fb5aadc827cedd2d8eb3bb3623b6c4bba3baec17"],"data":"00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000003a2f55736572732f757365722f53697465732f73632d666f726b732f6d657461636f696e2f636f6e7472616374732f4d657461436f696e2e736f6c000000000000"} - -request({ - uri: 'http://localhost:8888', - body: { - jsonrpc: '2.0', - method: 'web3_clientVersion', - params: [], - id: 0, - }, - json: true, -}, (error, response, body) => { - if (error) { - console.error(error); - process.exit(1); - } - fs.writeFileSync('../allFiredEvents', JSON.stringify(fakeEvent) + '\n'); - process.exit(0); -}); diff --git a/test/util/util.js b/test/util/util.js index 921940f..d9dcf3a 100644 --- a/test/util/util.js +++ b/test/util/util.js @@ -1,39 +1,110 @@ const fs = require('fs'); const path = require('path'); +const solc = require('solc'); +const TruffleContract = require('truffle-contract'); -/** - * Retrieves code at source//.sol - * @param {String} _path path relative to `./source` - * @return {String} contents of a .sol file - */ -module.exports.getCode = function getCode(_path) { - return fs.readFileSync(path.join(__dirname, `./../sources/${_path}`), 'utf8'); +const Instrumenter = require('./../../lib/instrumenter'); +const DataCollector = require('./../../lib/collector') + +const filePath = path.resolve('./test.sol'); +const pathPrefix = './'; + +function getCode(_path) { + const pathToSources = `./../soliditySources/contracts/${_path}`; + return fs.readFileSync(path.join(__dirname, pathToSources), 'utf8'); }; -module.exports.report = function report(errors) { - if (errors) { - errors.forEach(error => { - if (error.severity === 'error') { - throw new Error(`Instrumented solidity invalid: ${JSON.stringify(errors)}`); - } - }); +function getABI(solcOutput, testFile="test.sol", testName="Test"){ + return solcOutput.contracts[testFile][testName].abi; +} + +function getBytecode(solcOutput, testFile="test.sol", testName="Test"){ + return `0x${solcOutput.contracts[testFile][testName].evm.bytecode.object}`; +} + +async function getDeployedContractInstance(info, provider){ + + const contract = TruffleContract({ + abi: getABI(info.solcOutput), + bytecode: getBytecode(info.solcOutput) + }) + + contract.setProvider(provider); + + const accounts = await contract.web3.eth.getAccounts(); + contract.defaults({ + gas: 5500000, + gasPrice: 1, + from: accounts[0] + }); + + return contract.new(); +} + +function compile(source){ + const compilerInput = codeToCompilerInput(source); + return JSON.parse(solc.compile(compilerInput)); +} + +function report(output=[]) { + output.forEach(item => { + if (item.severity === 'error') { + const errors = JSON.stringify(output, null, ' '); + throw new Error(`Instrumentation fault: ${errors}`); + } + }); +} + +function instrumentAndCompile(sourceName) { + const contract = getCode(`${sourceName}.sol`) + const instrumenter = new Instrumenter(); + const instrumented = instrumenter.instrument(contract, filePath); + return { + contract: contract, + instrumented: instrumented, + solcOutput: compile(instrumented.contract), + data: instrumenter.instrumentationData } -}; +} -module.exports.codeToCompilerInput = function codeToCompilerInput(code) { +function codeToCompilerInput(code) { return JSON.stringify({ language: 'Solidity', - sources: { - 'test.sol': { - content: code - } - }, - settings: { - outputSelection: { - '*': { - '*': [ '*' ] - } - } - } + sources: { 'test.sol': { content: code } }, + settings: { outputSelection: {'*': { '*': [ '*' ] }} } }); } + +async function bootstrapCoverage(file, provider, collector){ + const info = instrumentAndCompile(file); + info.instance = await getDeployedContractInstance(info, provider); + collector._setInstrumentationData(info.data); + return info; +} + +async function initializeProvider(ganache){ + const provider = ganache.provider(); + + return new Promise(resolve => { + const interval = setInterval(() => { + + if (provider.engine.manager.state.blockchain.vm !== undefined){ + clearInterval(interval); + + resolve({ + provider: provider, + collector: new DataCollector({provider: provider}) + }); + } + }); + }) +} + +module.exports = { + pathPrefix: pathPrefix, + filePath: filePath, + report: report, + instrumentAndCompile: instrumentAndCompile, + bootstrapCoverage: bootstrapCoverage, + initializeProvider: initializeProvider, +} diff --git a/test/util/vm.js b/test/util/vm.js deleted file mode 100644 index 46ef939..0000000 --- a/test/util/vm.js +++ /dev/null @@ -1,157 +0,0 @@ -const solc = require('solc'); -const shell = require('shelljs'); -const fs = require('fs'); -const VM = require('ethereumjs-vm'); -const Account = require('ethereumjs-account'); -const Transaction = require('ethereumjs-tx'); -const utils = require('ethereumjs-util'); -const CryptoJS = require('crypto-js'); -const Trie = require('merkle-patricia-tree'); -const { AbiCoder } = require('web3-eth-abi'); -const SolidityCoder = AbiCoder(); - -const codeToCompilerInput = require('./util').codeToCompilerInput; - -// Don't use this address for anything, obviously! -const secretKey = 'e81cb653c260ee12c72ec8750e6bfd8a4dc2c3d7e3ede68dd2f150d0a67263d8'; -const accountAddress = new Buffer('7caf6f9bc8b3ba5c7824f934c826bd6dc38c8467', 'hex'); - -/** - * Encodes function data - * Source: consensys/eth-lightwallet/lib/txutils.js (line 18) - */ -function encodeFunctionTxData(functionName, types, args) { - const fullName = `${functionName}(${types.join()})`; - const signature = CryptoJS.SHA3(fullName, { - outputLength: 256, - }).toString(CryptoJS.enc.Hex).slice(0, 8); - const dataHex = signature + SolidityCoder.encodeParameters(types, args).slice(2); - return `0x${dataHex}`; -} - -/** - * Extracts types from abi - * Source: consensys/eth-lightwallet/lib/txutils.js (line 27) - */ -function getTypesFromAbi(abi, functionName) { - function matchesFunctionName(json) { - return (json.name === functionName && json.type === 'function'); - } - function getTypes(json) { - return json.type; - } - const funcJson = abi.filter(matchesFunctionName)[0]; - - return funcJson ? (funcJson.inputs).map(getTypes) : []; -} - -/** - * Retrieves abi for contract - * Source: raineorshine/eth-new-contract/src/index.js (line 8) - * @param {String} source solidity contract - * @param {Object} compilation compiled `source` - * @return {Object} abi - */ -function getAbi(source, compilation) { - const contractNameMatch = source.match(/(?:contract)\s([^\s]*)\s*{/); - if (!contractNameMatch) { - throw new Error('Could not parse contract name from source.'); - } - const contractName = contractNameMatch[1]; - return compilation.contracts['test.sol'][contractName].abi; -} - -/** - * Creates, funds and publishes account to Trie - */ -function createAccount(trie) { - const account = new Account(); - account.balance = 'f00000000000000000'; - trie.put(accountAddress, account.serialize()); -} - -/** - * Deploys contract represented by `code` - * @param {String} code contract bytecode - */ - -function deploy(vm, code) { - const tx = new Transaction({ - gasPrice: '1', gasLimit: 'ffffff', data: code, - }); - tx.sign(new Buffer(secretKey, 'hex')); - - return new Promise((resolve, reject) => { - vm.runTx({ - tx, - }, (err, results) => { - if (err) { - reject(err); - } else { - resolve(results.createdAddress); - } - }); - }); -} - -/** - * Invokes `functionName` with `args` on contract at `address`. Tx construction logic - * is poached from consensys/eth-lightwallet/lib/txutils:functionTx - * @param {Array} abi contract abi - * @param {String} address deployed contract to invoke method on - * @param {String} functionName method to invoke - * @param {Array} args functionName's arguments - * @return {Promise} resolves array of logged events - */ -function callMethod(vm, abi, address, functionName, args) { - const types = getTypesFromAbi(abi, functionName); - const txData = encodeFunctionTxData(functionName, types, args); - const options = { - gasPrice: '0x1', - gasLimit: '0xffffff', - to: utils.bufferToHex(address), - data: txData, - nonce: '0x1', - }; - - const tx = new Transaction(options); - tx.sign(new Buffer(secretKey, 'hex')); - - return new Promise(resolve => { - vm.runTx({ - tx, - }, (err, results) => { - try { - const events = fs.readFileSync('./allFiredEvents').toString().split('\n'); - events.pop(); - shell.rm('./allFiredEvents'); - resolve(events); - } catch (e) { - resolve([]); - } - }); - }); -} - -/** - * Runs method `functionName` with parameters `args` on contract. Resolves a - * CR delimited list of logged events. - * @param {String} contract solidity to compile - * @param {String} functionName method to invoke on contract - * @param {Array} args parameter values to pass to method - * @return {Promise} resolves array of logged events. - */ -module.exports.execute = function ex(contract, functionName, args) { - const input = codeToCompilerInput(contract); - const output = JSON.parse(solc.compile(input)); - const code = new Buffer(output.contracts['test.sol']['Test'].evm.bytecode.object, 'hex'); - const abi = getAbi(contract, output); - const stateTrie = new Trie(); - const vm = new VM({ - state: stateTrie, - hardfork: "constantinople" - }); - - createAccount(stateTrie); - return deploy(vm, code).then(address => callMethod(vm, abi, address, functionName, args)); -}; diff --git a/yarn.lock b/yarn.lock index 5929714..717877b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,18 +2,54 @@ # yarn lockfile v1 -"@babel/runtime@^7.3.1": - version "7.5.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.5.2.tgz#98f584f4d03be5d8142c77107ffaedee4d5956f1" - integrity sha512-9M29wrrP7//JBGX70+IrDuD1w4iOYhUGpJNMQJVNAXue+cFeFlMTqBECouIziXPUphlgrfjcfiEpGX4t0WGK4g== - dependencies: - regenerator-runtime "^0.13.2" +"@nomiclabs/buidler-truffle5@^1.0.0-beta.8": + version "1.0.0-beta.8" + resolved "https://registry.yarnpkg.com/@nomiclabs/buidler-truffle5/-/buidler-truffle5-1.0.0-beta.8.tgz#d810b2c7d6de7cc58dddff2af227595be7b6e250" + integrity sha512-3v4SFcqWCH/aDRxgNTxhESLoCuHrC8CGBZIeeRwYOV6P2jdZBFkaCziW8QbpNd4hpOa3qAxHYzbE823T6A/p5A== + dependencies: + chai "^4.2.0" + truffle-contract "^4.0.14" + +"@nomiclabs/buidler-web3@^1.0.0-beta.8": + version "1.0.0-beta.8" + resolved "https://registry.yarnpkg.com/@nomiclabs/buidler-web3/-/buidler-web3-1.0.0-beta.8.tgz#75df7a2d5de6ec03d4c73cb1c7369be1e1021f46" + integrity sha512-ConceCb/qNV26HjFyWXxv0+kCmkPTpR10C6CS2aZpq6GuKybY4YO6Mks1YzhYdZWii3s/+laJzylDLpjXcwjcg== + +"@nomiclabs/buidler@^1.0.0-beta.8": + version "1.0.0-beta.8" + resolved "https://registry.yarnpkg.com/@nomiclabs/buidler/-/buidler-1.0.0-beta.8.tgz#31aaa351e5f3a15e9821738256417b98a7657665" + integrity sha512-qG348aP+kl4xJn1PG4pHgAeDlNOszvffRDS6H2yUJI7XiIgw8o1qkYEd4zFnLEJI+4PPrPtv2zhUg8tXpiaWWw== + dependencies: + ansi-colors "^3.2.4" + deepmerge "^2.1.0" + download "^7.1.0" + enquirer "^2.3.0" + ethereumjs-tx "^1.3.7" + ethereumjs-util "^6.1.0" + find-up "^2.1.0" + fs-extra "^7.0.1" + glob "^7.1.3" + io-ts "^1.8.6" + lodash "^4.17.11" + mocha "^5.2.0" + semver "^5.6.0" + solc "0.5.8" + solidity-parser-antlr "^0.4.2" + source-map-support "^0.5.12" + ts-essentials "^2.0.7" + tsort "0.0.1" + web3x "^2.0.0" "@sindresorhus/is@^0.14.0": version "0.14.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -21,22 +57,35 @@ dependencies: defer-to-connect "^1.0.1" -"@types/bn.js@^4.11.4": +"@types/bn.js@^4.11.2": version "4.11.5" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.5.tgz#40e36197433f78f807524ec623afcf0169ac81dc" integrity sha512-AEAZcIZga0JgVMHNtl1CprA/hXX7/wPt79AgR4XqaDt7jyj3QWYw6LPoOiznPtugDmlubUnAahMs2PFxGcQrng== dependencies: "@types/node" "*" +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + "@types/node@*": - version "12.6.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.1.tgz#d5544f6de0aae03eefbb63d5120f6c8be0691946" - integrity sha512-rp7La3m845mSESCgsJePNL/JQyhkOJA6G4vcwvVgkDAwHhGdq5GCumxmPjEk1MZf+8p5ZQAUE7tqgQRQTXN7uQ== + version "12.6.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.6.8.tgz#e469b4bf9d1c9832aee4907ba8a051494357c12c" + integrity sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg== + +"@types/node@^10.12.0", "@types/node@^10.3.2": + version "10.14.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.13.tgz#ac786d623860adf39a3f51d629480aacd6a6eec7" + integrity sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ== -"@types/node@^10.12.18", "@types/node@^10.3.2": - version "10.14.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.12.tgz#0eec3155a46e6c4db1f27c3e588a205f767d622f" - integrity sha512-QcAKpaO6nhHLlxWBvpc4WeLrTvPqlHOvaj0s5GriKkA1zq+bsFBPpfYCvQhLqLgYlIko8A9YrPdaMHCo5mBcpg== +"@types/ws@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-6.0.1.tgz#ca7a3f3756aa12f62a0a62145ed14c6db25d5a28" + integrity sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q== + dependencies: + "@types/events" "*" + "@types/node" "*" JSONStream@^1.3.4: version "1.3.5" @@ -56,6 +105,20 @@ abbrev@1.0.x: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= +abstract-leveldown@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-3.0.0.tgz#5cb89f958a44f526779d740d1440e743e0c30a57" + integrity sha512-KUWx9UWGQD12zsmLNj64/pndaz4iJh/Pj7nopgkfDG6RlCcbMZvT6+9l7dchK4idog2Is8VdC/PvNbFuFmalIQ== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@^2.4.1, abstract-leveldown@~2.7.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" + integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== + dependencies: + xtend "~4.0.0" + abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz#f7128e1f86ccabf7d2893077ce5d06d798e386c6" @@ -70,13 +133,6 @@ abstract-leveldown@~2.6.0: dependencies: xtend "~4.0.0" -abstract-leveldown@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" - integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== - dependencies: - xtend "~4.0.0" - accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -90,6 +146,11 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0= +aes-js@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.1.2.tgz#db9aabde85d5caabbfc0d4f2a4446960f627146a" + integrity sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ== + agent-base@4, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -111,10 +172,10 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" -ajv@^6.5.5: - version "6.10.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.1.tgz#ebf8d3af22552df9dd049bfbe50cc2390e823593" - integrity sha512-w1YQaVGNC6t2UCPjEawK/vo/dG8OOrVtUmhBT1uJJYxbl5kU2Tj3v6LGqBcsysN1yhuCStJCCA3GqdvKY8sqXQ== +ajv@^6.10.0, ajv@^6.5.5: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" @@ -133,6 +194,11 @@ ansi-align@^3.0.0: dependencies: string-width "^3.0.0" +ansi-colors@^3.2.1, ansi-colors@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -160,6 +226,11 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +any-promise@1.3.0, any-promise@^1.0.0, any-promise@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= + app-module-path@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" @@ -170,6 +241,13 @@ aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== +archive-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/archive-type/-/archive-type-4.0.0.tgz#f92e72233056dfc6969472749c267bdb046b1d70" + integrity sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA= + dependencies: + file-type "^4.2.0" + argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -203,6 +281,11 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + async-eventemitter@^0.2.2: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" @@ -220,7 +303,14 @@ async@1.x, async@^1.4.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.6.1: +async@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== + dependencies: + lodash "^4.17.10" + +async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.5.0: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== @@ -242,11 +332,544 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.14, babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= + dependencies: + babel-runtime "^6.22.0" + +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" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= + +babel-plugin-transform-async-to-generator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.23.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q== + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.23.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.22.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +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" + integrity sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg== + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^3.2.6" + invariant "^2.2.2" + semver "^5.3.0" + +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babelify@^7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/babelify/-/babelify-7.3.0.tgz#aa56aede7067fd7bd549666ee16dc285087e88e5" + integrity sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU= + dependencies: + babel-core "^6.0.14" + object-assign "^4.0.0" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + +backoff@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/backoff/-/backoff-2.5.0.tgz#f616eda9d3e4b66b8ca7fca79f695722c5f8e26f" + integrity sha1-9hbtqdPktmuMp/ynn2lXIsX44m8= + dependencies: + precond "0.2" + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base-x@^3.0.2: + version "3.0.6" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.6.tgz#de047ec95f5f7b99ae63d830a2a894c96538b2cd" + integrity sha512-4PaF8u2+AlViJxRVjurkLTxpp7CaFRD/jo5rPT9ONnKxyhQ8f59yzamEvq7EkriG56yn5On4ONyaG75HLqr46w== + dependencies: + safe-buffer "^5.0.1" + base64-js@^1.0.2: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" @@ -259,6 +882,11 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +bignumber.js@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" + integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== + bindings@^1.2.1, bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -266,6 +894,28 @@ bindings@^1.2.1, bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bip39@2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235" + integrity sha512-xwIx/8JKoT2+IPJpFEfXoWdYwP7UVAoUxxLNfGCfVowaJE7yg1Y5B1BVPqlUNsBq5/nGwmFkwRJ8xDW4sX8OdA== + dependencies: + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + randombytes "^2.0.1" + safe-buffer "^5.0.1" + unorm "^1.3.3" + +bip39@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.6.0.tgz#9e3a720b42ec8b3fbe4038f1e445317b6a99321c" + integrity sha512-RrnQRG2EgEoqO24ea+Q/fftuPUZLmrEM3qNhhGsA3PbaXaCW791LTzPuVyx/VprXQcTbPJ3K3UeTna8ZnVl2sg== + dependencies: + create-hash "^1.1.0" + pbkdf2 "^3.0.9" + randombytes "^2.0.1" + safe-buffer "^5.0.1" + unorm "^1.3.3" + bip66@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/bip66/-/bip66-1.1.5.tgz#01fa8748785ca70955d5011217d1b3139969ca22" @@ -281,6 +931,18 @@ bl@^1.0.0: readable-stream "^2.3.5" safe-buffer "^5.1.1" +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= + dependencies: + inherits "~2.0.0" + +bluebird@^2.9.34: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" + integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE= + bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: version "3.5.5" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" @@ -291,7 +953,7 @@ bn.js@4.11.6: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" integrity sha1-UzRK2xRhehP26N0s4okF0cC6MhU= -bn.js@4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.4.0, bn.js@^4.8.0: +bn.js@4.11.8, bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.10.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.4.0, bn.js@^4.8.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== @@ -339,17 +1001,12 @@ brorand@^1.0.1: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" - integrity sha1-81HTKWnTL6XXpVZxVCY9korjvR8= - browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6: +browserify-aes@^1.0.0, browserify-aes@^1.0.4, browserify-aes@^1.0.6, browserify-aes@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== @@ -409,6 +1066,35 @@ browserify-sign@^4.0.0: inherits "^2.0.1" parse-asn1 "^5.0.0" +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +bs58@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-2.0.1.tgz#55908d58f1982aba2008fa1bed8f91998a29bf8d" + integrity sha1-VZCNWPGYKrogCPob7Y+RmYopv40= + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + 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" @@ -465,16 +1151,32 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +bytewise-core@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bytewise-core/-/bytewise-core-1.2.3.tgz#3fb410c7e91558eb1ab22a82834577aa6bd61d42" + integrity sha1-P7QQx+kVWOsasiqCg0V3qmvWHUI= + dependencies: + typewise-core "^1.2" + +bytewise@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/bytewise/-/bytewise-1.1.0.tgz#1d13cbff717ae7158094aa881b35d081b387253e" + integrity sha1-HRPL/3F65xWAlKqIGzXQgbOHJT4= + dependencies: + bytewise-core "^1.2.2" + typewise "^1.0.3" + cacache@^12.0.0: - version "12.0.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.0.tgz#1ed91cc306312a53ad688b1563ce4c416faec564" - integrity sha512-0baf1FhCp16LhN+xDJsOrSiaPDCTD3JegZptVmLDoEbFcT5aT+BeFGt3wcDU3olCP5tpTCXU5sv0+TsKWT9WGQ== + version "12.0.2" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.2.tgz#8db03205e36089a3df6954c66ce92541441ac46c" + integrity sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg== dependencies: bluebird "^3.5.5" chownr "^1.1.1" figgy-pudding "^3.5.1" glob "^7.1.4" graceful-fs "^4.1.15" + infer-owner "^1.0.3" lru-cache "^5.1.1" mississippi "^3.0.0" mkdirp "^0.5.1" @@ -485,6 +1187,19 @@ cacache@^12.0.0: unique-filename "^1.1.1" y18n "^4.0.0" +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -498,6 +1213,14 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" +cachedown@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cachedown/-/cachedown-1.0.0.tgz#d43f036e4510696b31246d7db31ebf0f7ac32d15" + integrity sha1-1D8DbkUQaWsxJG19sx6/D3rDLRU= + dependencies: + abstract-leveldown "^2.4.1" + lru-cache "^3.2.0" + camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -508,12 +1231,39 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +caniuse-lite@^1.0.30000844: + version "1.0.30000985" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000985.tgz#0eb40f6c8a8c219155cbe43c4975c0efb4a0f77f" + integrity sha512-1ngiwkgqAYPG0JSSUp3PUDGPKKY59EK7NrGGX+VOxaKCNzRbNc7uXMny+c3VJfZxtoK3wSImTvG9T9sXiTw2+w== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@^1.1.1: +caw@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95" + integrity sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA== + dependencies: + get-proxy "^2.0.0" + isurl "^1.0.0-alpha5" + tunnel-agent "^0.6.0" + url-to-options "^1.0.1" + +chai@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" + integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.0" + type-detect "^4.0.5" + +chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -533,6 +1283,16 @@ chalk@^2.0.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + checkpoint-store@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06" @@ -584,27 +1344,31 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -clone-response@^1.0.2: +clone-response@1.0.2, clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= dependencies: mimic-response "^1.0.0" +clone@2.1.2, clone@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + 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" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +coinstring@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/coinstring/-/coinstring-2.3.0.tgz#cdb63363a961502404a25afb82c2e26d5ff627a4" + integrity sha1-zbYzY6lhUCQEolr7gsLibV/2J6Q= + dependencies: + bs58 "^2.0.1" + create-hash "^1.1.1" + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -634,17 +1398,12 @@ command-exists@^1.2.8: resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291" integrity sha512-PM54PkseWbiiD/mMsbvW351/u+dafwTJ0ye2qB60G1aGQP9j3xK2gmMDc+R34L3nDtx4qMCitXT75mkbkGJDLw== -commander@2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" - integrity sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ== - commander@2.15.1: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag== -commander@^2.20.0, commander@~2.20.0: +commander@^2.20.0, commander@^2.8.1, commander@~2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== @@ -661,7 +1420,7 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0: +concat-stream@^1.5.0, concat-stream@^1.5.1: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== @@ -671,6 +1430,14 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + configstore@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/configstore/-/configstore-4.0.0.tgz#5933311e95d3687efb592c528b922d9262d227e7" @@ -683,7 +1450,7 @@ configstore@^4.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" -content-disposition@0.5.3: +content-disposition@0.5.3, content-disposition@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== @@ -695,6 +1462,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.5.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -722,6 +1496,11 @@ copy-concurrently@^1.0.0: rimraf "^2.5.4" run-queue "^1.0.0" +core-js@^2.4.0, core-js@^2.5.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" + integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -743,7 +1522,7 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: +create-hash@^1.1.0, create-hash@^1.1.1, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== @@ -766,6 +1545,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +cross-fetch@^2.1.0, cross-fetch@^2.1.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.3.tgz#e8a0b3c54598136e037f8650f8e823ccdfac198e" + integrity sha512-PrWWNH3yL2NYIb/7WF/5vFG3DCQiXDOVf8k3ijatbrtnwNuhMWLC7YF7uqf53tbTFDzHIUD8oITw4Bxt8ST3Nw== + dependencies: + node-fetch "2.1.2" + whatwg-fetch "2.0.4" + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -775,16 +1562,10 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= crypto-browserify@3.12.0: version "3.12.0" @@ -830,7 +1611,7 @@ death@^1.1.0: resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" integrity sha1-AaqcQB7dknUFFEcLgmY5DGbGcxg= -debug@2.6.9, debug@^2.2.0: +debug@2.6.9, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -851,7 +1632,7 @@ debug@^3.1.0: dependencies: ms "^2.1.1" -debug@^4.1.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== @@ -914,7 +1695,7 @@ decompress-unzip@^4.0.1: pify "^2.3.0" yauzl "^2.4.2" -decompress@^4.0.0: +decompress@^4.0.0, decompress@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/decompress/-/decompress-4.2.0.tgz#7aedd85427e5a92dacfe55674a7c505e96d01f9d" integrity sha1-eu3YVCflqS2s/lVnSnxQXpbQH50= @@ -928,6 +1709,18 @@ decompress@^4.0.0: pify "^2.3.0" strip-dirs "^2.0.0" +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-equal@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -938,6 +1731,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@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + defer-to-connect@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.0.2.tgz#4bae758a314b034ae33902b5aac25a8dd6a8633e" @@ -965,6 +1763,11 @@ define-properties@^1.1.2: dependencies: object-keys "^1.0.12" +defined@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -988,10 +1791,12 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -diff@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" - integrity sha512-MKPHZDMB0o6yHyDryUOScqZibp914ksXwAMYMTHj6KO8UeKsRYNJD3oNCKjTqZon+V488P7N/HzXF8t7ZR95ww== +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" diff@3.5.0: version "3.5.0" @@ -1019,6 +1824,24 @@ dot-prop@^4.1.0: dependencies: is-obj "^1.0.0" +download@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/download/-/download-7.1.0.tgz#9059aa9d70b503ee76a132897be6dec8e5587233" + integrity sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ== + dependencies: + archive-type "^4.0.0" + caw "^2.0.1" + content-disposition "^0.5.2" + decompress "^4.2.0" + ext-name "^5.0.0" + file-type "^8.1.0" + filenamify "^2.0.0" + get-stream "^3.0.0" + got "^8.3.1" + make-dir "^1.2.0" + p-event "^2.1.0" + pify "^3.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" @@ -1056,6 +1879,11 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +electron-to-chromium@^1.3.47: + version "1.3.199" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.199.tgz#f9a62a74cda77854310a2abffde8b75591ea09a1" + integrity sha512-gachlDdHSK47s0N2e58GH9HMC6Z4ip0SfmYUa5iEbE50AKaOUXysaJnXMfKj0xB245jWbYcyFSH+th3rqsF8hA== + elliptic@6.3.3: version "6.3.3" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.3.3.tgz#5482d9646d54bcb89fd7d994fc9e2e9568876e3f" @@ -1089,7 +1917,7 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding-down@~5.0.0: +encoding-down@5.0.4: version "5.0.4" resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-5.0.4.tgz#1e477da8e9e9d0f7c8293d320044f8b2cd8e9614" integrity sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw== @@ -1114,6 +1942,13 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" +enquirer@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.1.tgz#f1bf52ea38470525f41412d723a62ba6868559c6" + integrity sha512-7slmHsJY+mvnIrzD0Z0FfTFLmVJuIzRNCW72X9s35BshOoC+MI4jLJ8aPyAC/BelAirXBZB+Mu1wSqP0wpW4Kg== + dependencies: + ansi-colors "^3.2.1" + err-code@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" @@ -1206,6 +2041,19 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= +eth-block-tracker@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/eth-block-tracker/-/eth-block-tracker-3.0.1.tgz#95cd5e763c7293e0b1b2790a2a39ac2ac188a5e1" + integrity sha512-WUVxWLuhMmsfenfZvFO5sbl1qFY2IqUlw/FPVmjjdElpqLsZtSG+wPe9Dz7W/sB6e80HgFKknOmKk2eNlznHug== + dependencies: + eth-query "^2.1.0" + ethereumjs-tx "^1.3.3" + ethereumjs-util "^5.1.3" + ethjs-util "^0.1.3" + json-rpc-engine "^3.6.0" + pify "^2.3.0" + tape "^4.6.3" + eth-ens-namehash@2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" @@ -1214,16 +2062,37 @@ eth-ens-namehash@2.0.8: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" -eth-lib@0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" - integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== +eth-json-rpc-infura@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-infura/-/eth-json-rpc-infura-3.2.0.tgz#62c3f516b51351038c32a548704467cec113ca8f" + integrity sha512-FLcpdxPRVBCUc7yoE+wHGvyYg2lATedP+/q7PsKvaSzQpJbgTG4ZjLnyrLanxDr6M1k/dSNa6V5QnILwjUKJcw== dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" + cross-fetch "^2.1.1" + eth-json-rpc-middleware "^1.5.0" + json-rpc-engine "^3.4.0" + json-rpc-error "^2.0.0" + tape "^4.8.0" -eth-lib@^0.1.26: +eth-json-rpc-middleware@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/eth-json-rpc-middleware/-/eth-json-rpc-middleware-1.6.0.tgz#5c9d4c28f745ccb01630f0300ba945f4bef9593f" + integrity sha512-tDVCTlrUvdqHKqivYMjtFZsdD7TtpNLBCfKAcOpaVs7orBMS/A8HWro6dIzNtTZIR05FAbJ3bioFOnZpuCew9Q== + dependencies: + async "^2.5.0" + eth-query "^2.1.2" + eth-tx-summary "^3.1.2" + ethereumjs-block "^1.6.0" + ethereumjs-tx "^1.3.3" + ethereumjs-util "^5.1.2" + ethereumjs-vm "^2.1.0" + fetch-ponyfill "^4.0.0" + json-rpc-engine "^3.6.0" + json-rpc-error "^2.0.0" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + tape "^4.6.3" + +eth-lib@0.1.27, eth-lib@^0.1.26: version "0.1.27" resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.27.tgz#f0b0fd144f865d2d6bf8257a40004f2e75ca1dd6" integrity sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA== @@ -1236,22 +2105,85 @@ eth-lib@^0.1.26: ws "^3.0.0" xhr-request-promise "^0.1.2" -ethashjs@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ethashjs/-/ethashjs-0.0.7.tgz#30bfe4196726690a0c59d3b8272e70d4d0c34bae" - integrity sha1-ML/kGWcmaQoMWdO4Jy5w1NDDS64= +eth-lib@0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.7.tgz#2f93f17b1e23aec3759cd4a3fe20c1286a3fc1ca" + integrity sha1-L5Pxex4jrsN1nNSj/iDBKGo/wco= dependencies: - async "^1.4.2" - buffer-xor "^1.0.3" - ethereumjs-util "^4.0.1" - miller-rabin "^4.0.0" + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-query@^2.0.2, eth-query@^2.1.0, eth-query@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eth-query/-/eth-query-2.1.2.tgz#d6741d9000106b51510c72db92d6365456a6da5e" + integrity sha1-1nQdkAAQa1FRDHLbktY2VFam2l4= + dependencies: + json-rpc-random-id "^1.0.0" + xtend "^4.0.1" + +eth-sig-util@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-2.1.2.tgz#9b357395b5ca07fae6b430d3e534cf0a0f1df118" + integrity sha512-bNgt7txkEmaNlLf+PrbwYIdp4KRkB3E7hW0/QwlBpgv920pVVyQnF0evoovfiRveNKM4OrtPYZTojjmsfuCUOw== + dependencies: + buffer "^5.2.1" + elliptic "^6.4.0" + ethereumjs-abi "0.6.5" + ethereumjs-util "^5.1.1" + tweetnacl "^1.0.0" + tweetnacl-util "^0.15.0" + +eth-sig-util@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/eth-sig-util/-/eth-sig-util-1.4.2.tgz#8d958202c7edbaae839707fba6f09ff327606210" + integrity sha1-jZWCAsftuq6Dlwf7pvCf8ydgYhA= + dependencies: + ethereumjs-abi "git+https://github.com/ethereumjs/ethereumjs-abi.git" + ethereumjs-util "^5.1.1" + +eth-tx-summary@^3.1.2: + version "3.2.4" + resolved "https://registry.yarnpkg.com/eth-tx-summary/-/eth-tx-summary-3.2.4.tgz#e10eb95eb57cdfe549bf29f97f1e4f1db679035c" + integrity sha512-NtlDnaVZah146Rm8HMRUNMgIwG/ED4jiqk0TME9zFheMl1jOp6jL1m0NKGjJwehXQ6ZKCPr16MTr+qspKpEXNg== + dependencies: + async "^2.1.2" + clone "^2.0.0" + concat-stream "^1.5.1" + end-of-stream "^1.1.0" + eth-query "^2.0.2" + ethereumjs-block "^1.4.1" + ethereumjs-tx "^1.1.1" + ethereumjs-util "^5.0.1" + ethereumjs-vm "^2.6.0" + through2 "^2.0.3" + +ethereum-common@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.2.0.tgz#13bf966131cce1eeade62a1b434249bb4cb120ca" + integrity sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA== ethereum-common@^0.0.18: version "0.0.18" resolved "https://registry.yarnpkg.com/ethereum-common/-/ethereum-common-0.0.18.tgz#2fdc3576f232903358976eb39da783213ff9523f" integrity sha1-L9w1dvIykDNYl26znaeDIT/5Uj8= -ethereumjs-account@^2.0.3, ethereumjs-account@~2.0.4: +ethereumjs-abi@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.5.tgz#5a637ef16ab43473fa72a29ad90871405b3f5241" + integrity sha1-WmN+8Wq0NHP6cqKa2QhxQFs/UkE= + dependencies: + bn.js "^4.10.0" + ethereumjs-util "^4.3.0" + +"ethereumjs-abi@git+https://github.com/ethereumjs/ethereumjs-abi.git": + version "0.6.7" + resolved "git+https://github.com/ethereumjs/ethereumjs-abi.git#8431eab7b3384e65e8126a4602520b78031666fb" + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-account@2.0.5, ethereumjs-account@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz#eeafc62de544cb07b0ee44b10f572c9c49e00a84" integrity sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA== @@ -1260,6 +2192,28 @@ ethereumjs-account@^2.0.3, ethereumjs-account@~2.0.4: rlp "^2.0.0" safe-buffer "^5.1.1" +ethereumjs-block@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.1.0.tgz#71d1b19e18061f14cf6371bf34ba31a359931360" + integrity sha512-ip+x4/7hUInX+TQfhEKsQh9MJK1Dbjp4AuPjf1UdX3udAV4beYD4EMCNIPzBLCsGS8WQZYXLpo83tVTISYNpow== + dependencies: + async "^2.0.1" + ethereumjs-common "^0.6.0" + ethereumjs-tx "^1.2.2" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + +ethereumjs-block@^1.2.2, ethereumjs-block@^1.4.1, ethereumjs-block@^1.6.0: + version "1.7.1" + resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz#78b88e6cc56de29a6b4884ee75379b6860333c3f" + integrity sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg== + dependencies: + async "^2.0.1" + ethereum-common "0.2.0" + ethereumjs-tx "^1.2.2" + ethereumjs-util "^5.0.0" + merkle-patricia-tree "^2.1.2" + ethereumjs-block@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.0.tgz#8c6c3ab4a5eff0a16d9785fbeedbe643f4dbcbef" @@ -1271,37 +2225,17 @@ ethereumjs-block@~2.2.0: ethereumjs-util "^5.0.0" merkle-patricia-tree "^2.1.2" -ethereumjs-blockchain@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/ethereumjs-blockchain/-/ethereumjs-blockchain-3.4.0.tgz#92240da6ecd86b3d8d324df69510b381f26c966b" - integrity sha512-wxPSmt6EQjhbywkFbftKcb0qRFIZWocHMuDa8/AB4eWL/UPYalNcDyLaxYbrDytmhHid3Uu8G/tA3C/TxZBuOQ== - dependencies: - async "^2.6.1" - ethashjs "~0.0.7" - ethereumjs-block "~2.2.0" - ethereumjs-common "^1.1.0" - ethereumjs-util "~6.0.0" - flow-stoplight "^1.0.0" - level-mem "^3.0.1" - lru-cache "^5.1.1" - safe-buffer "^5.1.2" - semaphore "^1.1.0" +ethereumjs-common@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-0.6.1.tgz#ec98edf315a7f107afb6acc48e937a8266979fae" + integrity sha512-4jOrfDu9qOBTTGGb3zrfT1tE1Hyc6a8LJpEk0Vk9AYlLkBY7crjVICyJpRvjNI+KLDMpMITMw3eWVZOLMtZdhw== ethereumjs-common@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.3.0.tgz#ca7d152b615d5e1851fcf184d062bf14c62c18e6" integrity sha512-/jdFHyHOIS3FiAnunwRZ+oNulFtNNSHyWii3PaNHReOUmBAxij7KMyZLKh0tE16JEsJtXOVz1ceYuq++ILzv+g== -ethereumjs-testrpc-sc@^6.5.1-sc.0: - version "6.5.1-sc.0" - resolved "https://registry.yarnpkg.com/ethereumjs-testrpc-sc/-/ethereumjs-testrpc-sc-6.5.1-sc.0.tgz#c5986af4548776ebea35581ae6ae2518afb72faa" - integrity sha512-ZWhg3Rd64hAWSMM7DygDs7wITH9hDYPCvFypHkiLTiKu42wfl6QVJtkouelhtdyufzv2TFe7Lo0uOWS9NEiOqw== - dependencies: - ethereumjs-util "6.1.0" - source-map-support "0.5.12" - yargs "13.2.4" - -ethereumjs-tx@^1.2.2: +ethereumjs-tx@1.3.7, ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@^1.3.3, ethereumjs-tx@^1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-1.3.7.tgz#88323a2d875b10549b8347e09f4862b546f3d89a" integrity sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA== @@ -1309,20 +2243,20 @@ ethereumjs-tx@^1.2.2: ethereum-common "^0.0.18" ethereumjs-util "^5.0.0" -ethereumjs-util@6.1.0, ethereumjs-util@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz#e9c51e5549e8ebd757a339cc00f5380507e799c8" - integrity sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q== +ethereumjs-util@5.2.0, ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.3, ethereumjs-util@^5.1.5: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz#3e0c0d1741471acf1036052d048623dee54ad642" + integrity sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA== dependencies: bn.js "^4.11.0" create-hash "^1.1.2" - ethjs-util "0.1.6" + ethjs-util "^0.1.3" keccak "^1.0.2" rlp "^2.0.0" safe-buffer "^5.1.1" secp256k1 "^3.0.1" -ethereumjs-util@^4.0.0, ethereumjs-util@^4.0.1: +ethereumjs-util@^4.3.0: version "4.5.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz#3e9428b317eebda3d7260d854fddda954b1f1bc6" integrity sha1-PpQosxfuvaPXJg2FT93alUsfG8Y= @@ -1333,23 +2267,10 @@ ethereumjs-util@^4.0.0, ethereumjs-util@^4.0.1: rlp "^2.0.0" secp256k1 "^3.0.1" -ethereumjs-util@^5.0.0, ethereumjs-util@^5.0.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz#3e0c0d1741471acf1036052d048623dee54ad642" - integrity sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA== - dependencies: - bn.js "^4.11.0" - create-hash "^1.1.2" - ethjs-util "^0.1.3" - keccak "^1.0.2" - rlp "^2.0.0" - safe-buffer "^5.1.1" - secp256k1 "^3.0.1" - -ethereumjs-util@~6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.0.0.tgz#f14841c182b918615afefd744207c7932c8536c0" - integrity sha512-E3yKUyl0Fs95nvTFQZe/ZSNcofhDzUsDlA5y2uoRmf1+Ec7gpGhNCsgKkZBRh7Br5op8mJcYF/jFbmjj909+nQ== +ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz#e9c51e5549e8ebd757a339cc00f5380507e799c8" + integrity sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q== dependencies: bn.js "^4.11.0" create-hash "^1.1.2" @@ -1359,9 +2280,10 @@ ethereumjs-util@~6.0.0: safe-buffer "^5.1.1" secp256k1 "^3.0.1" -"ethereumjs-vm@https://github.com/sc-forks/ethereumjs-vm-sc.git#336d8841ab2c37da079d290ea5c5af6b34f20495": - version "3.0.0" - resolved "https://github.com/sc-forks/ethereumjs-vm-sc.git#336d8841ab2c37da079d290ea5c5af6b34f20495" +ethereumjs-vm@2.6.0, ethereumjs-vm@^2.1.0, ethereumjs-vm@^2.3.4, ethereumjs-vm@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/ethereumjs-vm/-/ethereumjs-vm-2.6.0.tgz#76243ed8de031b408793ac33907fb3407fe400c6" + integrity sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw== dependencies: async "^2.1.2" async-eventemitter "^0.2.2" @@ -1376,10 +2298,41 @@ ethereumjs-util@~6.0.0: rustbn.js "~0.2.0" safe-buffer "^5.1.1" -ethers@^4.0.27: - version "4.0.32" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.32.tgz#46378864cb3bf29b57c2effd17508b560743abf6" - integrity sha512-r0k2tBNF6MYEsvwmINeP3VPppD/7eAZyiOk/ifDDawXGCKqr3iEQkPq6OZSDVD+4Jie38WPteS9thXzpn2+A5Q== +ethereumjs-wallet@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/ethereumjs-wallet/-/ethereumjs-wallet-0.6.3.tgz#b0eae6f327637c2aeb9ccb9047b982ac542e6ab1" + integrity sha512-qiXPiZOsStem+Dj/CQHbn5qex+FVkuPmGH7SvSnA9F3tdRDt8dLMyvIj3+U05QzVZNPYh4HXEdnzoYI4dZkr9w== + dependencies: + aes-js "^3.1.1" + bs58check "^2.1.2" + ethereumjs-util "^6.0.0" + hdkey "^1.1.0" + randombytes "^2.0.6" + safe-buffer "^5.1.2" + scrypt.js "^0.3.0" + utf8 "^3.0.0" + uuid "^3.3.2" + +ethers@4.0.0-beta.1: + version "4.0.0-beta.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.0-beta.1.tgz#0648268b83e0e91a961b1af971c662cdf8cbab6d" + integrity sha512-SoYhktEbLxf+fiux5SfCEwdzWENMvgIbMZD90I62s4GZD9nEjgEWy8ZboI3hck193Vs0bDoTohDISx84f2H2tw== + dependencies: + "@types/node" "^10.3.2" + aes-js "3.0.0" + bn.js "^4.4.0" + elliptic "6.3.3" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.3" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + +ethers@^4.0.0-beta.1, ethers@^4.0.32: + version "4.0.33" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.33.tgz#f7b88d2419d731a39aefc37843a3f293e396f918" + integrity sha512-lAHkSPzBe0Vj+JrhmkEHLtUEKEheVktIjGDyE9gbzF4zf1vibjYgB57LraDHu4/ItqWVkztgsm8GWqcDMN+6vQ== dependencies: "@types/node" "^10.3.2" aes-js "3.0.0" @@ -1392,7 +2345,7 @@ ethers@^4.0.27: uuid "2.0.1" xmlhttprequest "1.8.0" -ethjs-unit@^0.1.6: +ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" integrity sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk= @@ -1408,15 +2361,15 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3, ethjs-util@^0.1.6: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" -eventemitter3@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" - integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA== +eventemitter3@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.1.1.tgz#47786bdaa087caf7b1b75e73abc5c7d540158cd0" + integrity sha1-R3hr2qCHyvext15zq8XH1UAVjNA= -eventemitter3@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -1488,6 +2441,21 @@ express@^4.14.0: utils-merge "1.0.1" vary "~1.1.2" +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -1537,6 +2505,13 @@ fd-slicer@~1.1.0: dependencies: pend "~1.2.0" +fetch-ponyfill@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/fetch-ponyfill/-/fetch-ponyfill-4.1.0.tgz#ae3ce5f732c645eab87e4ae8793414709b239893" + integrity sha1-rjzl9zLGReq4fkroeTQUcJsjmJM= + dependencies: + node-fetch "~1.7.1" + figgy-pudding@^3.4.1, figgy-pudding@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" @@ -1547,6 +2522,11 @@ file-type@^3.8.0: resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9" integrity sha1-JXoHg4TR24CHvESdEH1SpSZyuek= +file-type@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-4.4.0.tgz#1b600e5fca1fbdc6e80c0a70c71c8dba5f7906c5" + integrity sha1-G2AOX8ofvcboDApwxxyNul95BsU= + file-type@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-5.2.0.tgz#2ddbea7c73ffe36368dfae49dc338c058c2b8ad6" @@ -1557,11 +2537,30 @@ file-type@^6.1.0: resolved "https://registry.yarnpkg.com/file-type/-/file-type-6.2.0.tgz#e50cd75d356ffed4e306dc4f5bcf52a79903a919" integrity sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg== +file-type@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-8.1.0.tgz#244f3b7ef641bbe0cca196c7276e4b332399f68c" + integrity sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ== + file-uri-to-path@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +filename-reserved-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" + integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik= + +filenamify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-2.1.0.tgz#88faf495fb1b47abfd612300002a16228c677ee9" + integrity sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA== + dependencies: + filename-reserved-regex "^2.0.0" + strip-outer "^1.0.0" + trim-repeated "^1.0.0" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -1610,7 +2609,7 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" -for-each@^0.3.3: +for-each@^0.3.3, for-each@~0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== @@ -1636,12 +2635,17 @@ forwarded@~0.1.2: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= -from2@^2.1.0: +from2@^2.1.0, from2@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= @@ -1665,6 +2669,14 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" +fs-extra@^2.0.0, fs-extra@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.1.2.tgz#046c70163cef9aad46b0e4a7fa467fb22d71de35" + integrity sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + fs-extra@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" @@ -1674,6 +2686,15 @@ fs-extra@^4.0.2: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.6" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" @@ -1681,6 +2702,16 @@ fs-minipass@^1.2.5: dependencies: minipass "^2.2.1" +fs-promise@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fs-promise/-/fs-promise-2.0.3.tgz#f64e4f854bcf689aa8bddcba268916db3db46854" + integrity sha1-9k5PhUvPaJqovdy6JokW2z20aFQ= + dependencies: + any-promise "^1.3.0" + fs-extra "^2.0.0" + mz "^2.6.0" + thenify-all "^1.6.0" + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -1696,7 +2727,17 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -function-bind@^1.0.2, function-bind@^1.1.1: +fstream@^1.0.12, fstream@^1.0.8: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== @@ -1706,6 +2747,50 @@ functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +ganache-cli@^6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.5.0.tgz#5b2198c2931d3f2d3a2e239943a7b7073f9df651" + integrity sha512-z0NAozUg/JFWhisIxYlRLyCoZfO+X2W2ao6BAyCkgwAON1Xvj1n+xSZb8YQm1ShOPQQXFrodsYasYGHwvf+PMQ== + dependencies: + bn.js "4.11.8" + source-map-support "0.5.9" + yargs "11.1.0" + +ganache-core@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/ganache-core/-/ganache-core-2.6.0.tgz#19001547893ff9f6d494fcaed66c52edd808f3c0" + integrity sha512-TAT8XCjORmRpWko9QWKWGbdZ8/3nblKgralUWdySHXZyGBVRoHyEzjygMYZoblSXXCWuYEmx+T1u73Di1tE0mA== + dependencies: + abstract-leveldown "3.0.0" + async "2.6.1" + bip39 "2.5.0" + bn.js "4.11.8" + cachedown "1.0.0" + clone "2.1.2" + debug "3.1.0" + encoding-down "5.0.4" + eth-sig-util "2.1.2" + ethereumjs-abi "0.6.5" + ethereumjs-account "2.0.5" + ethereumjs-block "2.1.0" + ethereumjs-tx "1.3.7" + ethereumjs-util "5.2.0" + ethereumjs-vm "2.6.0" + heap "0.2.6" + level-sublevel "6.6.4" + levelup "3.1.1" + lodash "4.17.11" + merkle-patricia-tree "2.3.1" + rlp "2.1.0" + seedrandom "2.4.4" + source-map-support "0.5.9" + tmp "0.0.33" + web3-provider-engine "14.1.0" + websocket "1.0.26" + optionalDependencies: + ethereumjs-wallet "0.6.3" + web3 "1.0.0-beta.35" + genfun@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" @@ -1716,16 +2801,28 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== -get-caller-file@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + +get-proxy@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93" + integrity sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw== + dependencies: + npm-conf "^1.1.0" get-stdin@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-7.0.0.tgz#8d5de98f15171a125c5e516643c7a6d0ea8a96f6" integrity sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ== +get-stream@3.0.0, get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= + get-stream@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-2.3.1.tgz#5f38f93f346009666ee0150a054167f91bdd95de" @@ -1734,12 +2831,7 @@ get-stream@^2.2.0: object-assign "^4.0.1" pinkie-promise "^2.0.0" -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -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" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== @@ -1783,7 +2875,7 @@ glob@^5.0.15: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.1.3, glob@^7.1.4: +glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@~7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== @@ -1810,7 +2902,12 @@ global@~4.3.0: min-document "^2.19.0" process "~0.5.1" -got@^7.1.0: +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + +got@7.1.0, got@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" integrity sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw== @@ -1830,7 +2927,30 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -got@^9.6.0: +got@^8.3.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + +got@^9.3.0, got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== @@ -1857,11 +2977,6 @@ graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1. resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" integrity sha1-TK+tdrxi8C+gObL5Tpo906ORpyU= -growl@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" - integrity sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q== - growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" @@ -1903,11 +3018,6 @@ has-flag@^1.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= -has-flag@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" - integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -1935,7 +3045,7 @@ has-yarn@^2.1.0: resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== -has@^1.0.1, has@^1.0.3: +has@^1.0.1, has@^1.0.3, has@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== @@ -1966,11 +3076,25 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" +hdkey@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/hdkey/-/hdkey-1.1.1.tgz#c2b3bfd5883ff9529b72f2f08b28be0972a9f64a" + integrity sha512-DvHZ5OuavsfWs5yfVJZestsnc3wzPvLWNk6c2nRUfo6X+OtxypGt20vDDf7Ba+MJzjL3KS1og2nw2eBbLCOUTA== + dependencies: + coinstring "^2.0.0" + safe-buffer "^5.1.1" + secp256k1 "^3.0.1" + he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= +heap@0.2.6: + version "0.2.6" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" + integrity sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw= + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -1980,12 +3104,20 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== -http-cache-semantics@^3.8.1: +http-cache-semantics@3.8.1, http-cache-semantics@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== @@ -2017,6 +3149,11 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs= + http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" @@ -2095,6 +3232,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -2103,7 +3245,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2123,15 +3265,32 @@ interpret@^1.0.0: resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= -invert-kv@^2.0.0: - version "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== +io-ts@^1.8.6: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" ip@^1.1.5: version "1.1.5" @@ -2160,6 +3319,18 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= +is-finite@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= + dependencies: + number-is-nan "^1.0.0" + +is-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fn/-/is-fn-1.0.0.tgz#9543d5de7bcf5b08a22ec8a20bae6e286d510d8c" + integrity sha1-lUPV3nvPWwiiLsiiC65uKG1RDYw= + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -2217,7 +3388,7 @@ is-path-inside@^1.0.0: dependencies: path-is-inside "^1.0.1" -is-plain-obj@^1.1.0: +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= @@ -2229,12 +3400,12 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-retry-allowed@^1.0.0: +is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= -is-stream@^1.0.0, is-stream@^1.1.0: +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -2271,6 +3442,11 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -2319,6 +3495,16 @@ js-sha3@^0.6.1: resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.6.1.tgz#5b89f77a7477679877f58c4a075240934b1f95c0" integrity sha1-W4n3enR3Z5h39YxKB1JAk0sflcA= +"js-tokens@^3.0.0 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + js-yaml@3.x, js-yaml@^3.12.0: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" @@ -2332,6 +3518,16 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +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@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" @@ -2349,6 +3545,30 @@ json-parse-helpfulerror@^1.0.3: dependencies: jju "^1.1.0" +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" + integrity sha512-6QNcvm2gFuuK4TKU1uwfH0Qd/cOSb9c1lls0gbnIhciktIUQJwz6NQNAW4B1KiGPenv7IKu97V222Yo1bNhGuA== + dependencies: + async "^2.0.1" + babel-preset-env "^1.7.0" + babelify "^7.3.0" + json-rpc-error "^2.0.0" + promise-to-callback "^1.0.0" + safe-event-emitter "^1.0.1" + +json-rpc-error@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/json-rpc-error/-/json-rpc-error-2.0.0.tgz#a7af9c202838b5e905c7250e547f1aff77258a02" + integrity sha1-p6+cICg4tekFxyUOVH8a/3cligI= + dependencies: + inherits "^2.0.1" + +json-rpc-random-id@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-rpc-random-id/-/json-rpc-random-id-1.0.1.tgz#ba49d96aded1444dbb8da3d203748acbbcdec8c8" + integrity sha1-uknZat7RRE27jaPSA3SKy7zeyMg= + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -2359,11 +3579,23 @@ json-schema@0.2.3: resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= + dependencies: + jsonify "~0.0.0" + json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + json5@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" @@ -2385,6 +3617,11 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" @@ -2418,6 +3655,13 @@ keccakjs@^0.2.0, keccakjs@^0.2.1: browserify-sha3 "^0.0.4" sha3 "^1.2.2" +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== + dependencies: + json-buffer "3.0.0" + keyv@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" @@ -2451,13 +3695,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" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - level-codec@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.1.tgz#042f4aa85e56d4328ace368c950811ba802b7247" @@ -2489,6 +3726,15 @@ level-errors@~1.0.3: dependencies: errno "~0.1.1" +level-iterator-stream@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-2.0.3.tgz#ccfff7c046dcf47955ae9a86f46dfa06a31688b4" + integrity sha512-I6Heg70nfF+e5Y3/qfthJFexhRw/Gi3bIymCoXAlijZdAcLaPuWSJs3KXyTYf23ID6g0o2QF62Yh+grOXY3Rig== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.5" + xtend "^4.0.0" + level-iterator-stream@~1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" @@ -2508,21 +3754,28 @@ level-iterator-stream@~3.0.0: readable-stream "^2.3.6" xtend "^4.0.0" -level-mem@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-3.0.1.tgz#7ce8cf256eac40f716eb6489654726247f5a89e5" - integrity sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg== +level-post@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/level-post/-/level-post-1.0.7.tgz#19ccca9441a7cc527879a0635000f06d5e8f27d0" + integrity sha512-PWYqG4Q00asOrLhX7BejSajByB4EmG2GaKHfj3h5UmmZ2duciXLPGYWIjBzLECFWUGOZWlm5B20h/n3Gs3HKew== dependencies: - level-packager "~4.0.0" - memdown "~3.0.0" + ltgt "^2.1.2" -level-packager@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6" - integrity sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q== +level-sublevel@6.6.4: + version "6.6.4" + resolved "https://registry.yarnpkg.com/level-sublevel/-/level-sublevel-6.6.4.tgz#f7844ae893919cd9d69ae19d7159499afd5352ba" + integrity sha512-pcCrTUOiO48+Kp6F1+UAzF/OtWqLcQVTVF39HLdZ3RO8XBoXt+XVPKZO1vVr1aUoxHZA9OtD2e1v7G+3S5KFDA== dependencies: - encoding-down "~5.0.0" - levelup "^3.0.0" + bytewise "~1.1.0" + level-codec "^9.0.0" + level-errors "^2.0.0" + level-iterator-stream "^2.0.3" + ltgt "~2.1.1" + pull-defer "^0.2.2" + pull-level "^2.0.3" + pull-stream "^3.6.8" + typewiselite "~1.0.0" + xtend "~4.0.0" level-ws@0.0.0: version "0.0.0" @@ -2532,6 +3785,16 @@ level-ws@0.0.0: readable-stream "~1.0.15" xtend "~2.1.1" +levelup@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.1.1.tgz#c2c0b3be2b4dc316647c53b42e2f559e232d2189" + integrity sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg== + dependencies: + deferred-leveldown "~4.0.0" + level-errors "~2.0.0" + level-iterator-stream "~3.0.0" + xtend "~4.0.0" + levelup@^1.2.1: version "1.3.9" resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" @@ -2595,15 +3858,37 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" -lodash@^4.17.11: +lodash@4.17.11: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== -lodash@^4.17.13, lodash@^4.2.0: - version "4.17.14" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.14.tgz#9ce487ae66c96254fe20b599f21b6816028078ba" - integrity sha512-mmKYbW3GLuJeX+iGP+Y7Gp1AiGHGbXHCOh/jZmrawMmsE7MS4znI3RL2FsjbqOyMayHInjOeykW7PEajUk1/xw== +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.4, lodash@^4.2.0: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +looper@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/looper/-/looper-2.0.0.tgz#66cd0c774af3d4fedac53794f742db56da8f09ec" + integrity sha1-Zs0Md0rz1P7axTeU90LbVtqPCew= + +looper@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/looper/-/looper-3.0.0.tgz#2efa54c3b1cbaba9b94aee2e5914b0be57fbb749" + integrity sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k= + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= lodash@^4.17.14: version "4.17.15" @@ -2620,6 +3905,13 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" + integrity sha1-cXibO39Tmb7IVl3aOKow0qCX7+4= + dependencies: + pseudomap "^1.0.1" + lru-cache@^4.0.1: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -2635,12 +3927,17 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" -ltgt@~2.2.0: +ltgt@^2.1.2, ltgt@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" integrity sha1-81ypHEk/e3PaDgdJUwTxezH4fuU= -make-dir@^1.0.0: +ltgt@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.1.3.tgz#10851a06d9964b971178441c23c9e52698eece34" + integrity sha1-EIUaBtmWS5cReEQcI8nlJpjuzjQ= + +make-dir@^1.0.0, make-dir@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== @@ -2735,10 +4032,10 @@ merge-descriptors@1.0.1: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= -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" - integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== +merkle-patricia-tree@2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.1.tgz#7d4e7263a9c85c1679187cad4a6d71f48d524c71" + integrity sha512-Qp9Mpb3xazznXzzGQBqHbqCpT2AR9joUOHYYPiQjYCarrdCPCnLWXo4BFv77y4xN26KR224xoU1n/qYY7RYYgw== dependencies: async "^1.4.2" ethereumjs-util "^5.0.0" @@ -2749,13 +4046,13 @@ merkle-patricia-tree@^2.1.2, merkle-patricia-tree@^2.3.2: rlp "^2.0.0" semaphore ">=1.0.1" -merkle-patricia-tree@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.1.2.tgz#724483d54b75631a48fedda55e114051706a7291" - integrity sha1-ckSD1Ut1YxpI/t2lXhFAUXBqcpE= +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" + integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== dependencies: async "^1.4.2" - ethereumjs-util "^4.0.0" + ethereumjs-util "^5.0.0" level-ws "0.0.0" levelup "^1.2.1" memdown "^1.0.0" @@ -2776,7 +4073,7 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.40.0: +mime-db@1.40.0, mime-db@^1.28.0: version "1.40.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== @@ -2837,7 +4134,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.0, minimist@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= @@ -2885,14 +4182,14 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@*, mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" -mocha@5.2.0: +mocha@5.2.0, mocha@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6" integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ== @@ -2909,27 +4206,16 @@ mocha@5.2.0: mkdirp "0.5.1" supports-color "5.4.0" -mocha@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794" - integrity sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA== - dependencies: - browser-stdout "1.3.0" - commander "2.11.0" - debug "3.1.0" - diff "3.3.1" - escape-string-regexp "1.0.5" - glob "7.1.2" - growl "1.10.3" - he "1.1.1" - mkdirp "0.5.1" - supports-color "4.4.0" - mock-fs@^4.1.0: version "4.10.1" resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.10.1.tgz#50a07a20114a6cdb119f35762f61f46266a1e323" integrity sha512-w22rOL5ZYu6HbUehB5deurghGM0hS/xBVyHMGKOuQctkk93J9z9VEOhDsiWrXOprVNQpP9uzGKdl8v9mFspKuw== +mout@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/mout/-/mout-0.11.1.tgz#ba3611df5f0e5b1ffbfd01166b8f02d1f5fa2b99" + integrity sha1-ujYR318OWx/7/QEWa48C0fX6K5k= + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -2957,6 +4243,15 @@ ms@^2.0.0, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +mz@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + nan@2.13.2: version "2.13.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" @@ -3009,6 +4304,24 @@ node-fetch-npm@^2.0.2: json-parse-better-errors "^1.0.0" safe-buffer "^5.1.1" +node-fetch@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.1.2.tgz#ab884e8e7e57e38a944753cec706f788d1768bb5" + integrity sha1-q4hOjn5X44qUR1POxwb3iNF2i7U= + +node-fetch@~1.7.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-http-xhr@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/node-http-xhr/-/node-http-xhr-1.3.4.tgz#0dbf827c2858f40c57a79375fc4be07c8ff46f55" + integrity sha512-0bA08/2RKWxw6pMkOVd3KP+0F5+ifQLMMTDxrCgxlgkoU1N8DhCbCSAYEqpgaVYM2smvbVVewiXjW+8AyoLfxQ== + nopt@3.x: version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" @@ -3026,6 +4339,15 @@ normalize-package-data@^2.4.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + normalize-url@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.3.0.tgz#9c49e10fc1876aeb76dba88bf1b2b5d9fa57b2ee" @@ -3062,6 +4384,14 @@ npm-check-updates@^3.1.11: spawn-please "^0.3.0" update-notifier "^3.0.1" +npm-conf@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" @@ -3126,11 +4456,16 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= +object-inspect@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== + object-keys@^1.0.12: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -3141,6 +4476,13 @@ object-keys@~0.4.0: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= +oboe@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.3.tgz#2b4865dbd46be81225713f4e9bfe4bcf4f680a4f" + integrity sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8= + dependencies: + http-https "^1.0.0" + on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -3194,16 +4536,7 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@^1.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" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -3221,25 +4554,32 @@ p-cancelable@^0.3.0: resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" integrity sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw== +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== + p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= +p-event@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-2.3.1.tgz#596279ef169ab2c3e0cae88c1cfbb08079993ef6" + integrity sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA== + dependencies: + p-timeout "^2.0.1" p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -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" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= p-limit@^1.1.0: version "1.3.0" @@ -3283,6 +4623,13 @@ p-timeout@^1.1.1: dependencies: p-finally "^1.0.0" +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== + dependencies: + p-finally "^1.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -3294,14 +4641,14 @@ p-try@^2.0.0: integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== package-json@^6.3.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.4.0.tgz#4f626976604f4a9a41723ce1792b204a60b1b61e" - integrity sha512-bd1T8OBG7hcvMd9c/udgv6u5v9wISP3Oyl9Cm7Weop8EFwrtcQDnS2sb6zhwqus2WslSr5wSTIPiTTpxxmPm7Q== + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== dependencies: got "^9.6.0" - registry-auth-token "^3.4.0" + registry-auth-token "^4.0.0" registry-url "^5.0.0" - semver "^6.1.1" + semver "^6.2.0" pacote@^9.5.1: version "9.5.4" @@ -3380,7 +4727,7 @@ path-exists@^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.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" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -3405,7 +4752,12 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -pbkdf2@^3.0.3: +pathval@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= + +pbkdf2@^3.0.17, pbkdf2@^3.0.3, pbkdf2@^3.0.9: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== @@ -3448,6 +4800,11 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +precond@0.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/precond/-/precond-0.2.3.tgz#aa9591bcaa24923f1e0f4849d240f47efc1075ac" + integrity sha1-qpWRvKokkj8eD0hJ0kD0fvwQdaw= + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -3463,6 +4820,11 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -3491,6 +4853,14 @@ promise-retry@^1.1.1: err-code "^1.0.0" retry "^0.10.0" +promise-to-callback@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/promise-to-callback/-/promise-to-callback-1.0.0.tgz#5d2a749010bfb67d963598fcd3960746a68feef7" + integrity sha1-XSp0kBC/tn2WNZj805YHRqaP7vc= + dependencies: + is-fn "^1.0.0" + set-immediate-shim "^1.0.1" + prompts@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.1.0.tgz#bf90bc71f6065d255ea2bdc0fe6520485c1b45db" @@ -3499,6 +4869,11 @@ prompts@^2.1.0: kleur "^3.0.2" sisteransi "^1.0.0" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + protoduck@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/protoduck/-/protoduck-5.0.1.tgz#03c3659ca18007b69a50fd82a7ebcc516261151f" @@ -3519,7 +4894,7 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -pseudomap@^1.0.2: +pseudomap@^1.0.1, pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= @@ -3541,6 +4916,54 @@ public-encrypt@^4.0.0: randombytes "^2.0.1" safe-buffer "^5.1.2" +pull-cat@^1.1.9: + version "1.1.11" + resolved "https://registry.yarnpkg.com/pull-cat/-/pull-cat-1.1.11.tgz#b642dd1255da376a706b6db4fa962f5fdb74c31b" + integrity sha1-tkLdElXaN2pwa220+pYvX9t0wxs= + +pull-defer@^0.2.2: + version "0.2.3" + resolved "https://registry.yarnpkg.com/pull-defer/-/pull-defer-0.2.3.tgz#4ee09c6d9e227bede9938db80391c3dac489d113" + integrity sha512-/An3KE7mVjZCqNhZsr22k1Tx8MACnUnHZZNPSJ0S62td8JtYr/AiRG42Vz7Syu31SoTLUzVIe61jtT/pNdjVYA== + +pull-level@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pull-level/-/pull-level-2.0.4.tgz#4822e61757c10bdcc7cf4a03af04c92734c9afac" + integrity sha512-fW6pljDeUThpq5KXwKbRG3X7Ogk3vc75d5OQU/TvXXui65ykm+Bn+fiktg+MOx2jJ85cd+sheufPL+rw9QSVZg== + dependencies: + level-post "^1.0.7" + pull-cat "^1.1.9" + pull-live "^1.0.1" + pull-pushable "^2.0.0" + pull-stream "^3.4.0" + pull-window "^2.1.4" + stream-to-pull-stream "^1.7.1" + +pull-live@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pull-live/-/pull-live-1.0.1.tgz#a4ecee01e330155e9124bbbcf4761f21b38f51f5" + integrity sha1-pOzuAeMwFV6RJLu89HYfIbOPUfU= + dependencies: + pull-cat "^1.1.9" + pull-stream "^3.4.0" + +pull-pushable@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/pull-pushable/-/pull-pushable-2.2.0.tgz#5f2f3aed47ad86919f01b12a2e99d6f1bd776581" + integrity sha1-Xy867UethpGfAbEqLpnW8b13ZYE= + +pull-stream@^3.2.3, pull-stream@^3.4.0, pull-stream@^3.6.8: + version "3.6.13" + resolved "https://registry.yarnpkg.com/pull-stream/-/pull-stream-3.6.13.tgz#181435322841b0397c7ed44ee5a3fae32662ac1b" + integrity sha512-enbnbnO+czsPuCq9s9HTTzDzzVQD5TSe60aO3nBioeJ9mevh8RzE4Hxbujo9TReg1fJlmNEL8uyQTUgn8+rSHg== + +pull-window@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/pull-window/-/pull-window-2.1.4.tgz#fc3b86feebd1920c7ae297691e23f705f88552f0" + integrity sha1-/DuG/uvRkgx64pdpHiP3BfiFUvA= + dependencies: + looper "^2.0.0" + pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" @@ -3600,12 +5023,7 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -querystringify@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" - integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.0.6: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== @@ -3653,7 +5071,7 @@ rc-config-loader@^2.0.4: path-exists "^3.0.0" require-from-string "^2.0.2" -rc@^1.1.6, rc@^1.2.8, rc@~1.2.7: +rc@^1.2.8, rc@~1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -3663,7 +5081,7 @@ rc@^1.1.6, rc@^1.2.8, rc@~1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.0, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== @@ -3703,17 +5121,40 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -regenerator-runtime@^0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz#32e59c9a6fb9b1a4aff09b4930ca2d4477343447" - integrity sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA== +regenerate@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" -registry-auth-token@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" - integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== +registry-auth-token@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.0.0.tgz#30e55961eec77379da551ea5c4cf43cbf03522be" + integrity sha512-lpQkHxd9UL6tb3k/aHAVfnVtn+Bcs9ob5InuFLLEDqSqeq+AljB8GZW9xY0x7F+xYwEcjKe07nyoxzEYz6yvkw== dependencies: - rc "^1.1.6" + rc "^1.2.8" safe-buffer "^5.0.1" registry-url@^5.0.0: @@ -3723,6 +5164,25 @@ registry-url@^5.0.0: dependencies: rc "^1.2.8" +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= + dependencies: + jsesc "~0.5.0" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + req-cwd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-1.0.1.tgz#0d73aeae9266e697a78f7976019677e76acf0fff" @@ -3737,7 +5197,7 @@ req-from@^1.0.1: dependencies: resolve-from "^2.0.0" -request@^2.79.0, request@^2.88.0: +request@^2.79.0, request@^2.85.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -3792,11 +5252,6 @@ requireg@^0.2.2: rc "~1.2.7" resolve "~1.7.1" -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" @@ -3807,7 +5262,7 @@ resolve@1.1.x: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.10.0: +resolve@^1.1.6, resolve@^1.10.0, resolve@~1.11.1: version "1.11.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== @@ -3821,19 +5276,26 @@ resolve@~1.7.1: dependencies: path-parse "^1.0.5" -responselike@^1.0.2: +responselike@1.0.2, responselike@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= dependencies: lowercase-keys "^1.0.0" +resumer@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" + integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= + dependencies: + through "~2.3.4" + retry@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -3848,6 +5310,13 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +rlp@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.1.0.tgz#e4f9886d5a982174f314543831e36e1a658460f9" + integrity sha512-93U7IKH5j7nmXFVg19MeNBGzQW5uXW1pmCuKY8veeKIhYTE32C2d0mOegfiIAfXcHOKJjjPlJisn8iHDF5AezA== + dependencies: + safe-buffer "^5.1.1" + rlp@^2.0.0: version "2.2.3" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.3.tgz#7f94aef86cec412df87d5ea1d8cb116a47d45f0e" @@ -3868,13 +5337,6 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== -rxjs@^6.4.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.2.tgz#2e35ce815cd46d84d02a209fb4e5921e051dbec7" - integrity sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg== - dependencies: - tslib "^1.9.0" - safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -3885,11 +5347,23 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== +safe-event-emitter@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-event-emitter/-/safe-event-emitter-1.0.1.tgz#5b692ef22329ed8f69fdce607e50ca734f6f20af" + integrity sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg== + dependencies: + events "^3.0.0" + "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +scrypt-js@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.3.tgz#bb0040be03043da9a012a2cea9fc9f852cfc87d4" + integrity sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q= + scrypt-js@2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" @@ -3903,6 +5377,15 @@ scrypt.js@0.2.0: scrypt "^6.0.2" scryptsy "^1.2.1" +scrypt.js@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/scrypt.js/-/scrypt.js-0.3.0.tgz#6c62d61728ad533c8c376a2e5e3e86d41a95c4c0" + integrity sha512-42LTc1nyFsyv/o0gcHtDztrn+aqpkaCNt5Qh7ATBZfhEZU7IC/0oT/qbBH+uRNoAPvs2fwiOId68FDEoSRA8/A== + dependencies: + scryptsy "^1.2.1" + optionalDependencies: + scrypt "^6.0.2" + scrypt@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/scrypt/-/scrypt-6.0.3.tgz#04e014a5682b53fa50c2d5cce167d719c06d870d" @@ -3931,6 +5414,11 @@ secp256k1@^3.0.1: nan "^2.14.0" safe-buffer "^5.1.2" +seedrandom@2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.4.tgz#b25ea98632c73e45f58b77cfaa931678df01f9ba" + integrity sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA== + seek-bzip@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" @@ -3938,7 +5426,7 @@ seek-bzip@^1.0.5: dependencies: commander "~2.8.1" -semaphore@>=1.0.1, semaphore@^1.1.0: +semaphore@>=1.0.1, semaphore@^1.0.3: version "1.1.0" resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== @@ -3955,15 +5443,15 @@ semver-utils@^1.1.4: resolved "https://registry.yarnpkg.com/semver-utils/-/semver-utils-1.1.4.tgz#cf0405e669a57488913909fc1c3f29bf2a4871e2" integrity sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA== -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: version "5.7.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== -semver@^6.1.1, semver@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" - integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== +semver@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@~5.4.1: version "5.4.1" @@ -4015,6 +5503,11 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + setimmediate@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" @@ -4038,6 +5531,14 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" + integrity sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg= + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.0.1" + sha3@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/sha3/-/sha3-1.2.3.tgz#ed5958fa8331df1b1b8529ca9fdf225a340c5418" @@ -4090,6 +5591,11 @@ sisteransi@^1.0.0: resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.2.tgz#ec57d64b6f25c4f26c0e2c7dd23f2d7f12f7e418" integrity sha512-ZcYcZcT69nSLAR2oLN2JwNmLkJEKGooFMCdvOkFrToUt/WfcRWqhIg4P4KwY4dmLbuyXIx4o4YmPsvMRJYJd/w== +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + smart-buffer@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.2.tgz#5207858c3815cc69110703c6b94e46c15634395d" @@ -4111,12 +5617,21 @@ socks@~2.3.2: ip "^1.1.5" smart-buffer "4.0.2" -sol-explore@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/sol-explore/-/sol-explore-1.6.2.tgz#43ae8c419fd3ac056a05f8a9d1fb1022cd41ecc2" - integrity sha1-Q66MQZ/TrAVqBfip0fsQIs1B7MI= +solc@0.5.8: + version "0.5.8" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.5.8.tgz#a0aa2714082fc406926f5cb384376d7408080611" + integrity sha512-RQ2SlwPBOBSV7ktNQJkvbiQks3t+3V9dsqD014EdstxnJzSxBuOvbt3P5QXpNPYW1DsEmF7dhOaT3JL7yEae/A== + dependencies: + command-exists "^1.2.8" + fs-extra "^0.30.0" + keccak "^1.0.2" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + yargs "^11.0.0" -solc@^0.5.3: +solc@^0.5.10: version "0.5.10" resolved "https://registry.yarnpkg.com/solc/-/solc-0.5.10.tgz#e57d789b1028f3d35f7989e5134d6ddc0e3b32aa" integrity sha512-Stdrh/MDkopsXYPRzPehTNYuV80Grr2CnQMuFvWj+EeRVbe3piGHxW47KebWn1sGdmK8FLaMfUehccqJP0KovQ== @@ -4130,14 +5645,55 @@ solc@^0.5.3: tmp "0.0.33" yargs "^11.0.0" -solidity-parser-antlr@^0.4.7: +solidity-parser-antlr@0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/solidity-parser-antlr/-/solidity-parser-antlr-0.4.5.tgz#4de1867f1a12df4553886209225bc80328aeb0c1" + integrity sha512-5GzhIs4hpY3XnGwMndgrOksD567O5WdUQPbpy2n2WA1m3algzUKYMf+Ne/QHd36TTUNvVV+iTWD5tKaCZfaOjg== + +solidity-parser-antlr@^0.4.2: version "0.4.7" resolved "https://registry.yarnpkg.com/solidity-parser-antlr/-/solidity-parser-antlr-0.4.7.tgz#8e18867c95a956958ed008371e43f9e571dee6af" integrity sha512-iVjNhgqkXw+o+0E+xoLcji+3KuXLe8Rm8omUuVGhsV14+ZsTwQ70nhBRXg8O3t9xwdS0iST1q9NJ5IqHnqpWkA== dependencies: npm-check-updates "^3.1.11" -source-map-support@0.5.12: +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" + integrity sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg= + dependencies: + sort-keys "^1.0.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= + dependencies: + is-plain-obj "^1.0.0" + +source-map-support@0.5.9: + version "0.5.9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" + integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.12: version "0.5.12" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== @@ -4145,6 +5701,11 @@ source-map-support@0.5.12: buffer-from "^1.0.0" source-map "^0.6.0" +source-map@^0.5.6, source-map@^0.5.7: + 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.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -4233,6 +5794,14 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= +stream-to-pull-stream@^1.7.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/stream-to-pull-stream/-/stream-to-pull-stream-1.7.3.tgz#4161aa2d2eb9964de60bfa1af7feaf917e874ece" + integrity sha512-6sNyqJpr5dIOQdgNy/xcDWwDuzAsAwVzhzrWlAPAQ7Lkjx/rv0wgvxEyKwTq6FmNd5rjTrELt/CLmaSw7crMGg== + dependencies: + looper "^3.0.0" + pull-stream "^3.2.3" + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -4264,7 +5833,7 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string.prototype.trim@^1.1.2: +string.prototype.trim@^1.1.2, string.prototype.trim@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" integrity sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo= @@ -4330,12 +5899,12 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -supports-color@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" - integrity sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ== +strip-outer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" + integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== dependencies: - has-flag "^2.0.0" + escape-string-regexp "^1.0.2" supports-color@5.4.0: version "5.4.0" @@ -4363,6 +5932,25 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +swarm-js@0.1.37: + version "0.1.37" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.37.tgz#27d485317a340bbeec40292af783cc10acfa4663" + integrity sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + decompress "^4.0.0" + eth-lib "^0.1.26" + fs-extra "^2.1.2" + fs-promise "^2.0.0" + got "^7.1.0" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar.gz "^1.0.5" + xhr-request-promise "^0.1.2" + swarm-js@^0.1.39: version "0.1.39" resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.39.tgz#79becb07f291d4b2a178c50fee7aa6e10342c0e8" @@ -4381,6 +5969,25 @@ swarm-js@^0.1.39: tar "^4.0.2" xhr-request-promise "^0.1.2" +tape@^4.6.3, tape@^4.8.0: + version "4.11.0" + resolved "https://registry.yarnpkg.com/tape/-/tape-4.11.0.tgz#63d41accd95e45a23a874473051c57fdbc58edc1" + integrity sha512-yixvDMX7q7JIs/omJSzSZrqulOV51EC9dK8dM0TzImTIkHWfe2/kFyL5v+d9C+SrCMaICk59ujsqFAVidDqDaA== + dependencies: + deep-equal "~1.0.1" + defined "~1.0.0" + for-each "~0.3.3" + function-bind "~1.1.1" + glob "~7.1.4" + has "~1.0.3" + inherits "~2.0.4" + minimist "~1.2.0" + object-inspect "~1.6.0" + resolve "~1.11.1" + resumer "~0.0.0" + string.prototype.trim "~1.1.2" + through "~2.3.8" + tar-stream@^1.5.2: version "1.6.2" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.6.2.tgz#8ea55dab37972253d9a9af90fdcd559ae435c555" @@ -4394,6 +6001,26 @@ tar-stream@^1.5.2: to-buffer "^1.1.1" xtend "^4.0.0" +tar.gz@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/tar.gz/-/tar.gz-1.0.7.tgz#577ef2c595faaa73452ef0415fed41113212257b" + integrity sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg== + dependencies: + bluebird "^2.9.34" + commander "^2.8.1" + fstream "^1.0.8" + mout "^0.11.0" + tar "^2.1.1" + +tar@^2.1.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" + integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== + dependencies: + block-stream "*" + fstream "^1.0.12" + inherits "2" + tar@^4.0.2, tar@^4.4.8: version "4.4.10" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" @@ -4414,7 +6041,21 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -through2@^2.0.0: +thenify-all@^1.0.0, thenify-all@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY= + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.0" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.0.tgz#e69e38a1babe969b0108207978b9f62b88604839" + integrity sha1-5p44obq+lpsBCCB5eLn2K4hgSDk= + dependencies: + any-promise "^1.0.0" + +through2@^2.0.0, through2@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== @@ -4422,7 +6063,7 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -"through@>=2.2.7 <3", through@^2.3.8: +"through@>=2.2.7 <3", through@^2.3.8, through@~2.3.4, through@~2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -4444,6 +6085,11 @@ to-buffer@^1.1.1: resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" @@ -4462,25 +6108,86 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" -tree-kill@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" - integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q== +trim-repeated@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" + integrity sha1-42RqLqTokTEr9+rObPsFOAvAHCE= + dependencies: + escape-string-regexp "^1.0.2" + +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= -truffle@^5.0.30: - version "5.0.30" - resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.0.30.tgz#13ac335939fc6c908c615c25cd94c7a56ba674d5" - integrity sha512-l13cUq5QUEPfW89b4dDBIahNmDWazpey4Y8UJXhNn+YTkHxVM5h8L8eNNIBTD1SiYerrXfw49QMIQubEcz3erA== +truffle-blockchain-utils@^0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.10.tgz#18b772673635a95a893f7083f7be6bd62227462b" + integrity sha512-gVvagLCvYD0QXfnkxy6I48P6O+d7TEY0smc2VFuwldl1/clLVWE+KfBO/jFMaAz+nupTQeKvPhNTeyh3JAsCeA== + +truffle-contract-schema@^3.0.11: + version "3.0.11" + resolved "https://registry.yarnpkg.com/truffle-contract-schema/-/truffle-contract-schema-3.0.11.tgz#202f6982b51bcad032b7ff2a8d5837853fb69301" + integrity sha512-YcgSOlrufi6VtnXg8LU5Ma7JHzHpnZQxzB1PSWnb+JOTc1nL02XRoCWTgEO7PkJnFgf6yrwOpW0ajSwHk3zQ7Q== + dependencies: + ajv "^6.10.0" + crypto-js "^3.1.9-1" + debug "^4.1.0" + +truffle-contract@^4.0.14: + version "4.0.25" + resolved "https://registry.yarnpkg.com/truffle-contract/-/truffle-contract-4.0.25.tgz#dc58c3ad20a4b1654efc0d55020e3bb8b9adac66" + integrity sha512-ngy+ljTCSs/Arv4/9xUjq6mBdAHvQjFvJGqMcBDoNZSXUdvuW4qmX9gu/cOFEt2hdsBcpt0sx7DrXGlY4O97ww== + dependencies: + bignumber.js "^7.2.1" + ethers "^4.0.0-beta.1" + truffle-blockchain-utils "^0.0.10" + truffle-contract-schema "^3.0.11" + truffle-error "^0.0.5" + truffle-interface-adapter "^0.2.0" + web3 "1.0.0-beta.37" + web3-core-promievent "1.0.0-beta.37" + web3-eth-abi "1.0.0-beta.37" + web3-utils "1.0.0-beta.37" + +truffle-error@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/truffle-error/-/truffle-error-0.0.5.tgz#6b5740c9f3aac74f47b85d654fff7fe2c1fc5e0e" + integrity sha512-JpzPLMPSCE0vaZ3vH5NO5u42GpMj/Y1SRBkQ6b69PSw3xMSH1umApN32cEcg1nnh8q5FNYc5FnKu0m4tiBffyQ== + +truffle-interface-adapter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/truffle-interface-adapter/-/truffle-interface-adapter-0.2.0.tgz#8f998dc27c039e5bb93b44c37726f8c32cfd026d" + integrity sha512-NMj2gGr96/Ny5P2CvVzvkMAYXFjZfkdLCLt0kOiYGltoTt7EVP+HVLpYUfvxHjmEYytGdjXjrt/1srCfbPbAsQ== + dependencies: + bn.js "^4.11.8" + ethers "^4.0.32" + web3 "1.0.0-beta.37" + +truffle@^5.0.26: + version "5.0.28" + resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.0.28.tgz#383c6c4ae082c52fe6dda6620f924ae3a0f5ac49" + integrity sha512-ccpvgrHW7EGfJ4cowMgh5dCAILG5Ie8q2QNBhnGtHxyPTDxb8o2/sgVIi5BZhaueijOPb47sYe2ojKlY6dk8+Q== dependencies: app-module-path "^2.2.0" mocha "5.2.0" original-require "1.0.1" -tslib@^1.9.0: +ts-essentials@^2.0.7: + version "2.0.12" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" + integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== + +tslib@^1.9.3: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y= + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -4488,11 +6195,21 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +tweetnacl-util@^0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.0.tgz#4576c1cee5e2d63d207fee52f1ba02819480bc75" + integrity sha1-RXbBzuXi1j0gf+5S8boCgZSAvHU= + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +tweetnacl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.1.tgz#2594d42da73cd036bd0d2a54683dd35a6b55ca17" + integrity sha512-kcoMoKTPYnoeS50tzoqjPY3Uv9axeuuFAZY9M/9zFnhoVvRfxz9K29IMPD7jGmt2c8SW7i3gT9WqDl2+nV7p4A== + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -4500,6 +6217,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-fest@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" @@ -4525,6 +6247,23 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typewise-core@^1.2, typewise-core@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/typewise-core/-/typewise-core-1.2.0.tgz#97eb91805c7f55d2f941748fa50d315d991ef195" + integrity sha1-l+uRgFx/VdL5QXSPpQ0xXZke8ZU= + +typewise@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typewise/-/typewise-1.0.3.tgz#1067936540af97937cc5dcf9922486e9fa284651" + integrity sha1-EGeTZUCvl5N8xdz5kiSG6fooRlE= + dependencies: + typewise-core "^1.2.0" + +typewiselite@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typewiselite/-/typewiselite-1.0.0.tgz#c8882fa1bb1092c06005a97f34ef5c8508e3664e" + integrity sha1-yIgvobsQksBgBal/NO9chQjjZk4= + uglify-js@^3.1.4: version "3.6.0" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" @@ -4546,6 +6285,16 @@ unbzip2-stream@^1.0.9: buffer "^5.2.1" through "^2.3.8" +underscore@1.8.3: + version "1.8.3" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI= + +underscore@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" + integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== + unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -4572,6 +6321,11 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +unorm@^1.3.3: + version "1.6.0" + resolved "https://registry.yarnpkg.com/unorm/-/unorm-1.6.0.tgz#029b289661fba714f1a9af439eb51d9b16c205af" + integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -4616,14 +6370,6 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" -url-parse@1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz#cac1556e95faa0303691fec5cf9d5a1bc34648f8" - integrity sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg== - dependencies: - querystringify "^2.0.0" - requires-port "^1.0.0" - url-set-query@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" @@ -4639,6 +6385,11 @@ utf8@2.1.1: resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.1.tgz#2e01db02f7d8d0944f77104f1609eb0c304cf768" integrity sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g= +utf8@3.0.0, utf8@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4654,7 +6405,7 @@ uuid@2.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" integrity sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w= -uuid@3.3.2, uuid@^3.3.2: +uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== @@ -4688,231 +6439,523 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -web3-bzz@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.0.0-beta.50.tgz#5e234eecf427b33f773c78c00e34d370b542f6b0" - integrity sha512-0jD4/g+apH7t87cA9gXoZpvvVW7OqQtbu+X+olFKPrS9pKbkwfaKPdRwc1BNbjqvrRYN0K7koT9xV+Lzvyah6w== +web3-bzz@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.0.0-beta.35.tgz#9d5e1362b3db2afd77d65619b7cd46dd5845c192" + integrity sha512-BhAU0qhlr8zltm4gs/+P1gki2VkxHJaM2Rrh4DGesDW0lzwufRoNvWFlwx1bKHoFPWNbSmm9PRkHOYOINL/Tgw== + dependencies: + got "7.1.0" + swarm-js "0.1.37" + underscore "1.8.3" + +web3-bzz@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.0.0-beta.37.tgz#59e3e4f5a9d732731008fe9165c3ec8bf85d502f" + integrity sha512-E+dho49Nsm/QpQvYWOF35YDsQrMvLB19AApENxhlQsu6HpWQt534DQul0t3Y/aAh8rlKD6Kanxt8LhHDG3vejQ== + dependencies: + got "7.1.0" + swarm-js "0.1.37" + underscore "1.8.3" + +web3-core-helpers@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.35.tgz#d681d218a0c6e3283ee1f99a078ab9d3eef037f1" + integrity sha512-APOu3sEsamyqWt//8o4yq9KF25/uqGm+pQShson/sC4gKzmfJB07fLo2ond0X30E8fIqAPeVCotPXQxGciGUmA== + dependencies: + underscore "1.8.3" + web3-eth-iban "1.0.0-beta.35" + web3-utils "1.0.0-beta.35" + +web3-core-helpers@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.37.tgz#04ec354b7f5c57234c309eea2bda9bf1f2fe68ba" + integrity sha512-efaLOzN28RMnbugnyelgLwPWWaSwElQzcAJ/x3PZu+uPloM/lE5x0YuBKvIh7/PoSMlHqtRWj1B8CpuQOUQ5Ew== + dependencies: + underscore "1.8.3" + web3-eth-iban "1.0.0-beta.37" + web3-utils "1.0.0-beta.37" + +web3-core-method@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.0.0-beta.35.tgz#fc10e2d546cf4886038e6130bd5726b0952a4e5f" + integrity sha512-jidImCide8q0GpfsO4L73qoHrbkeWgwU3uOH5DKtJtv0ccmG086knNMRgryb/o9ZgetDWLmDEsJnHjBSoIwcbA== + dependencies: + underscore "1.8.3" + web3-core-helpers "1.0.0-beta.35" + web3-core-promievent "1.0.0-beta.35" + web3-core-subscriptions "1.0.0-beta.35" + web3-utils "1.0.0-beta.35" + +web3-core-method@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.0.0-beta.37.tgz#53d148e63f818b23461b26307afdfbdaa9457744" + integrity sha512-pKWFUeqnVmzx3VrZg+CseSdrl/Yrk2ioid/HzolNXZE6zdoITZL0uRjnsbqXGEzgRRd1Oe/pFndpTlRsnxXloA== + dependencies: + underscore "1.8.3" + web3-core-helpers "1.0.0-beta.37" + web3-core-promievent "1.0.0-beta.37" + web3-core-subscriptions "1.0.0-beta.37" + web3-utils "1.0.0-beta.37" + +web3-core-promievent@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.35.tgz#4f1b24737520fa423fee3afee110fbe82bcb8691" + integrity sha512-GvqXqKq07OmHuVi5uNRg6k79a1/CI0ViCC+EtNv4CORHtDRmYEt5Bvdv6z6FJEiaaQkD0lKbFwNhLxutx7HItw== + dependencies: + any-promise "1.3.0" + eventemitter3 "1.1.1" + +web3-core-promievent@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.37.tgz#4e51c469d0a7ac0a969885a4dbcde8504abe5b02" + integrity sha512-GTF2r1lP8nJBeA5Gxq5yZpJy9l8Fb9CXGZPfF8jHvaRdQHtm2Z+NDhqYmF833lcdkokRSyfPcXlz1mlWeClFpg== + dependencies: + any-promise "1.3.0" + eventemitter3 "1.1.1" + +web3-core-requestmanager@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.35.tgz#2b77cbf6303720ad68899b39fa7f584dc03dbc8f" + integrity sha512-S+zW2h17ZZQU9oe3yaCJE0E7aJS4C3Kf4kGPDv+nXjW0gKhQQhgVhw1Doq/aYQGqNSWJp7f1VHkz5gQWwg6RRg== + dependencies: + underscore "1.8.3" + web3-core-helpers "1.0.0-beta.35" + web3-providers-http "1.0.0-beta.35" + web3-providers-ipc "1.0.0-beta.35" + web3-providers-ws "1.0.0-beta.35" + +web3-core-requestmanager@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.37.tgz#721a75df5920621bff42d9d74f7a64413675d56b" + integrity sha512-66VUqye5BGp1Zz1r8psCxdNH+GtTjaFwroum2Osx+wbC5oRjAiXkkadiitf6wRb+edodjEMPn49u7B6WGNuewQ== + dependencies: + underscore "1.8.3" + web3-core-helpers "1.0.0-beta.37" + web3-providers-http "1.0.0-beta.37" + web3-providers-ipc "1.0.0-beta.37" + web3-providers-ws "1.0.0-beta.37" + +web3-core-subscriptions@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.35.tgz#c1b76a2ad3c6e80f5d40b8ba560f01e0f4628758" + integrity sha512-gXzLrWvcGkGiWq1y33Z4Y80XI8XMrwowiQJkrPSjQ81K5PBKquOGwcMffLaKcwdmEy/NpsOXDeFo3eLE1Ghvvw== + dependencies: + eventemitter3 "1.1.1" + underscore "1.8.3" + web3-core-helpers "1.0.0-beta.35" + +web3-core-subscriptions@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.37.tgz#40de5e2490cc05b15faa8f935c97fd48d670cd9a" + integrity sha512-FdXl8so9kwkRRWziuCSpFsAuAdg9KvpXa1fQlT16uoGcYYfxwFO/nkwyBGQzkZt7emShI2IRugcazyPCZDwkOA== + dependencies: + eventemitter3 "1.1.1" + underscore "1.8.3" + web3-core-helpers "1.0.0-beta.37" + +web3-core@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.0.0-beta.35.tgz#0c44d3c50d23219b0b1531d145607a9bc7cd4b4f" + integrity sha512-ayGavbgVk4KL9Y88Uv411fBJ0SVgVfKhKEBweKYzmP0zOqneMzWt6YsyD1n6kRvjAbqA0AfUPEOKyMNjcx2tjw== + dependencies: + web3-core-helpers "1.0.0-beta.35" + web3-core-method "1.0.0-beta.35" + web3-core-requestmanager "1.0.0-beta.35" + web3-utils "1.0.0-beta.35" + +web3-core@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.0.0-beta.37.tgz#66c2c7000772c9db36d737ada31607ace09b7e90" + integrity sha512-cIwEqCj7OJyefQNauI0HOgW4sSaOQ98V99H2/HEIlnCZylsDzfw7gtQUdwnRFiIyIxjbWy3iWsjwDPoXNPZBYg== + dependencies: + web3-core-helpers "1.0.0-beta.37" + web3-core-method "1.0.0-beta.37" + web3-core-requestmanager "1.0.0-beta.37" + web3-utils "1.0.0-beta.37" + +web3-eth-abi@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.35.tgz#2eb9c1c7c7233db04010defcb192293e0db250e6" + integrity sha512-KUDC+EtFFYG8z01ZleKrASdjj327/rtWHzEt6RWsEj7bBa0bGp9nEh+nqdZx/Sdgz1O8tnfFzJlrRcXpfr1vGg== dependencies: - "@babel/runtime" "^7.3.1" - "@types/node" "^10.12.18" - lodash "^4.17.11" - swarm-js "^0.1.39" + bn.js "4.11.6" + underscore "1.8.3" + web3-core-helpers "1.0.0-beta.35" + web3-utils "1.0.0-beta.35" -web3-core-helpers@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.50.tgz#0de88656ffa5f13659141cc443ff8529f109deac" - integrity sha512-B1LMrlC9c5HEJYmBWUhsxHdJ78w5YGop/ptF1cFL8cHLwTCQqCFFKLgYUg+dax/554TP1xgJ2w/ArLpnPJ8dBg== +web3-eth-abi@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.37.tgz#55592fa9cd2427d9f0441d78f3b8d0c1359a2a24" + integrity sha512-g9DKZGM2OqwKp/tX3W/yihcj7mQCtJ6CXyZXEIZfuDyRBED/iSEIFfieDOd+yo16sokLMig6FG7ADhhu+19hdA== dependencies: - "@babel/runtime" "^7.3.1" - lodash "^4.17.11" - web3-eth-iban "1.0.0-beta.50" - web3-utils "1.0.0-beta.50" + ethers "4.0.0-beta.1" + underscore "1.8.3" + web3-utils "1.0.0-beta.37" -web3-core-method@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.0.0-beta.50.tgz#4f9b55699f6e46f49dc8ac6bde204f9ae877b513" - integrity sha512-0+L37KDT90DD1fcTye/ZWMyGOLiw0ZxX2vaC8qDSFvAV3scTEuZyEQuR+tCM2aGyUVihy8LdmZwioRwnTXgLwg== +web3-eth-accounts@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.35.tgz#7d0e5a69f510dc93874471599eb7abfa9ddf3e63" + integrity sha512-duIgRsfht/0kAW/eQ0X9lKtVIykbETrnM2H7EnvplCzPHtQLodpib4o9JXfh9n6ZDgdDC7cuJoiVB9QJg089ew== dependencies: - "@babel/runtime" "^7.3.1" - eventemitter3 "3.1.0" - lodash "^4.17.11" + any-promise "1.3.0" + crypto-browserify "3.12.0" + eth-lib "0.2.7" + scrypt.js "0.2.0" + underscore "1.8.3" + uuid "2.0.1" + web3-core "1.0.0-beta.35" + web3-core-helpers "1.0.0-beta.35" + web3-core-method "1.0.0-beta.35" + web3-utils "1.0.0-beta.35" -web3-core-subscriptions@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.50.tgz#73df7143062f915e02b153239af10974e350e20f" - integrity sha512-q2Jmuy/BCwcKCFjR6kc03hPbdC6sR0n3IhPVg98Sk7ewgRLur/v3lLDz0fQpY4xE6U0XOqrjxwzlqISkOcP5Kw== +web3-eth-accounts@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.37.tgz#0a5a9f14a6c3bd285e001c15eb3bb38ffa4b5204" + integrity sha512-uvbHL62/zwo4GDmwKdqH9c/EgYd8QVnAfpVw8D3epSISpgbONNY7Hr4MRMSd/CqAP12l2Ls9JVQGLhhC83bW6g== dependencies: - "@babel/runtime" "^7.3.1" - eventemitter3 "^3.1.0" - lodash "^4.17.11" + any-promise "1.3.0" + crypto-browserify "3.12.0" + eth-lib "0.2.7" + scrypt.js "0.2.0" + underscore "1.8.3" + uuid "2.0.1" + web3-core "1.0.0-beta.37" + web3-core-helpers "1.0.0-beta.37" + web3-core-method "1.0.0-beta.37" + web3-utils "1.0.0-beta.37" + +web3-eth-contract@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.35.tgz#5276242d8a3358d9f1ce92b71575c74f9015935c" + integrity sha512-foPohOg5O1UCGKGZOIs+kQK5IZdV2QQ7pAWwNxH8WHplUA+fre1MurXNpoxknUmH6mYplFhXjqgYq2MsrBpHrA== + dependencies: + underscore "1.8.3" + web3-core "1.0.0-beta.35" + web3-core-helpers "1.0.0-beta.35" + web3-core-method "1.0.0-beta.35" + web3-core-promievent "1.0.0-beta.35" + web3-core-subscriptions "1.0.0-beta.35" + web3-eth-abi "1.0.0-beta.35" + web3-utils "1.0.0-beta.35" + +web3-eth-contract@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.37.tgz#87f93c95ed16f320ba54943b7886890de6766013" + integrity sha512-h1B3A8Z/C7BlnTCHkrWbXZQTViDxfR12lKMeTkT8Sqj5phFmxrBlPE4ORy4lf1Dk5b23mZYE0r/IRACx4ThCrQ== + dependencies: + underscore "1.8.3" + web3-core "1.0.0-beta.37" + web3-core-helpers "1.0.0-beta.37" + web3-core-method "1.0.0-beta.37" + web3-core-promievent "1.0.0-beta.37" + web3-core-subscriptions "1.0.0-beta.37" + web3-eth-abi "1.0.0-beta.37" + web3-utils "1.0.0-beta.37" + +web3-eth-ens@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.37.tgz#714ecb01eb447ee3eb39b2b20a10ae96edb1f01f" + integrity sha512-dR3UkrVzdRrJhfP57xBPx0CMiVnCcYFvh+u2XMkGydrhHgupSUkjqGr89xry/j1T0BkuN9mikpbyhdCVMXqMbg== + dependencies: + eth-ens-namehash "2.0.8" + underscore "1.8.3" + web3-core "1.0.0-beta.37" + web3-core-helpers "1.0.0-beta.37" + web3-core-promievent "1.0.0-beta.37" + web3-eth-abi "1.0.0-beta.37" + web3-eth-contract "1.0.0-beta.37" + web3-utils "1.0.0-beta.37" + +web3-eth-iban@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.35.tgz#5aa10327a9abb26bcfc4ba79d7bad18a002b332c" + integrity sha512-H5wkcNcAIc+h/WoDIKv7ZYmrM2Xqu3O7jBQl1IWo73EDVQji+AoB2i3J8tuwI1yZRInRwrfpI3Zuwuf54hXHmQ== + dependencies: + bn.js "4.11.6" + web3-utils "1.0.0-beta.35" -web3-core@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.0.0-beta.50.tgz#385137b8c34257db2679e925dfe41b98a0f7fe37" - integrity sha512-edOHdSnkRREi0vUXXNUsrbkTvXftCDroiF2tEvbPVyiBv0U6/VDYClFdHuZKdrrTRUcn/rUbvBqw8qCt3xgcuQ== +web3-eth-iban@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.37.tgz#313a3f18ae2ab00ba98678ea1156b09ef32a3655" + integrity sha512-WQRniGJFxH/XCbd7miO6+jnUG+6bvuzfeufPIiOtCbeIC1ypp1kSqER8YVBDrTyinU1xnf1U5v0KBZ2yiWBJxQ== dependencies: - "@babel/runtime" "^7.3.1" - "@types/node" "^10.12.18" - lodash "^4.17.11" - web3-utils "1.0.0-beta.50" + bn.js "4.11.6" + web3-utils "1.0.0-beta.37" + +web3-eth-personal@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.35.tgz#ecac95b7a53d04a567447062d5cae5f49879e89f" + integrity sha512-AcM9nnlxu7ZRRxPvkrFB9eLxMM4A2cPfj2aCg21Wb2EpMnhR+b/O1cT33k7ApRowoMpM+T9M8vx2oPNwXfaCOQ== + dependencies: + web3-core "1.0.0-beta.35" + web3-core-helpers "1.0.0-beta.35" + web3-core-method "1.0.0-beta.35" + web3-net "1.0.0-beta.35" + web3-utils "1.0.0-beta.35" + +web3-eth-personal@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.37.tgz#187472f51861e2b6d45da43411801bc91a859f9a" + integrity sha512-B4dZpGbD+nGnn48i6nJBqrQ+HB7oDmd+Q3wGRKOsHSK5HRWO/KwYeA7wgwamMAElkut50lIsT9EJl4Apfk3G5Q== + dependencies: + web3-core "1.0.0-beta.37" + web3-core-helpers "1.0.0-beta.37" + web3-core-method "1.0.0-beta.37" + web3-net "1.0.0-beta.37" + web3-utils "1.0.0-beta.37" + +web3-eth@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.0.0-beta.35.tgz#c52c804afb95e6624b6f5e72a9af90fbf5005b68" + integrity sha512-04mcb2nGPXThawuuYICPOxv0xOHofvQKsjZeIq+89nyOC8DQMGTAErDkGyMHQYtjpth5XDhic0wuEsA80AmFZA== + dependencies: + underscore "1.8.3" + web3-core "1.0.0-beta.35" + web3-core-helpers "1.0.0-beta.35" + web3-core-method "1.0.0-beta.35" + web3-core-subscriptions "1.0.0-beta.35" + web3-eth-abi "1.0.0-beta.35" + web3-eth-accounts "1.0.0-beta.35" + web3-eth-contract "1.0.0-beta.35" + web3-eth-iban "1.0.0-beta.35" + web3-eth-personal "1.0.0-beta.35" + web3-net "1.0.0-beta.35" + web3-utils "1.0.0-beta.35" + +web3-eth@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.0.0-beta.37.tgz#0e8ffcd857a5f85ae4b5f052ad831ca5c56f4f74" + integrity sha512-Eb3aGtkz3G9q+Z9DKgSQNbn/u8RtcZQQ0R4sW9hy5KK47GoT6vab5c6DiD3QWzI0BzitHzR5Ji+3VHf/hPUGgw== + dependencies: + underscore "1.8.3" + web3-core "1.0.0-beta.37" + web3-core-helpers "1.0.0-beta.37" + web3-core-method "1.0.0-beta.37" + web3-core-subscriptions "1.0.0-beta.37" + web3-eth-abi "1.0.0-beta.37" + web3-eth-accounts "1.0.0-beta.37" + web3-eth-contract "1.0.0-beta.37" + web3-eth-ens "1.0.0-beta.37" + web3-eth-iban "1.0.0-beta.37" + web3-eth-personal "1.0.0-beta.37" + web3-net "1.0.0-beta.37" + web3-utils "1.0.0-beta.37" + +web3-net@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.0.0-beta.35.tgz#5c6688e0dea71fcd910ee9dc5437b94b7f6b3354" + integrity sha512-bbwaQ/KohGjIJ6HAKbZ6KrklCAaG6/B7hIbAbVLSFLxF+Yz9lmAgQYaDInpidpC/NLb3WOmcbRF+P77J4qMVIA== + dependencies: + web3-core "1.0.0-beta.35" + web3-core-method "1.0.0-beta.35" + web3-utils "1.0.0-beta.35" + +web3-net@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.0.0-beta.37.tgz#b494136043f3c6ba84fe4a47d4c028c2a63c9a8e" + integrity sha512-xG/uBtMdDa1UMXw9KjDUgf3fXA/fDEJUYUS0TDn+U9PMgngA+UVECHNNvQTrVVDxEky38V3sahwIDiopNsQdsw== + dependencies: + web3-core "1.0.0-beta.37" + web3-core-method "1.0.0-beta.37" + web3-utils "1.0.0-beta.37" + +web3-provider-engine@14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/web3-provider-engine/-/web3-provider-engine-14.1.0.tgz#91590020f8b8c1b65846321310cbfdb039090fc6" + integrity sha512-vGZtqhSUzGTiMGhJXNnB/aRDlrPZLhLnBZ2NPArkZtr8XSrwg9m08tw4+PuWg5za0TJuoE/vuPQc501HddZZWw== + dependencies: + async "^2.5.0" + backoff "^2.5.0" + clone "^2.0.0" + cross-fetch "^2.1.0" + eth-block-tracker "^3.0.0" + eth-json-rpc-infura "^3.1.0" + eth-sig-util "^1.4.2" + ethereumjs-block "^1.2.2" + ethereumjs-tx "^1.2.0" + ethereumjs-util "^5.1.5" + ethereumjs-vm "^2.3.4" + json-rpc-error "^2.0.0" + json-stable-stringify "^1.0.1" + promise-to-callback "^1.0.0" + readable-stream "^2.2.9" + request "^2.85.0" + semaphore "^1.0.3" + ws "^5.1.1" + xhr "^2.2.0" + xtend "^4.0.1" -web3-eth-abi@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.50.tgz#52ca509257648c6088aa9d8874d6ea5f249c6de7" - integrity sha512-Nwm1HL3xBbrs43j/9V3gH1CJWWR7jyTDSE7PIkjYVjwgygAjlHPMHzuzGffoFMp2tSQ2DywCGmXAY5I5+vznZw== +web3-providers-http@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.0.0-beta.35.tgz#92059d9d6de6e9f82f4fae30b743efd841afc1e1" + integrity sha512-DcIMFq52Fb08UpWyZ3ZlES6NsNqJnco4hBS/Ej6eOcASfuUayPI+GLkYVZsnF3cBYqlH+DOKuArcKSuIxK7jIA== dependencies: - "@babel/runtime" "^7.3.1" - ethers "^4.0.27" - lodash "^4.17.11" - web3-utils "1.0.0-beta.50" + web3-core-helpers "1.0.0-beta.35" + xhr2-cookies "1.1.0" -web3-eth-accounts@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.50.tgz#e405979db8d4dc0caccff576fa746cea3d87e3d1" - integrity sha512-cUuYxKhymob87zCUYgw7ieZY6aVStMhClocblI3FKNdI1I8dczhdhZ97qMj5iavOganN7/OxLzeji7ksAoNAhg== +web3-providers-http@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.0.0-beta.37.tgz#c06efd60e16e329e25bd268d2eefc68d82d13651" + integrity sha512-FM/1YDB1jtZuTo78habFj7S9tNHoqt0UipdyoQV29b8LkGKZV9Vs3is8L24hzuj1j/tbwkcAH+ewIseHwu0DTg== dependencies: - "@babel/runtime" "^7.3.1" - crypto-browserify "3.12.0" - eth-lib "0.2.8" - lodash "^4.17.11" - scrypt.js "0.2.0" - uuid "3.3.2" - web3-core "1.0.0-beta.50" - web3-core-helpers "1.0.0-beta.50" - web3-core-method "1.0.0-beta.50" - web3-providers "1.0.0-beta.50" - web3-utils "1.0.0-beta.50" - -web3-eth-contract@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.50.tgz#bc6d4523347e113c74c5e1c6c78219eeb61d9182" - integrity sha512-X8R1+qIeD4Dbz1RmQa5m3K1suVFigNgd7EFMp6vVC3ULDjt4R6T0cRmFw/x51v3MQoT7s6Yd1KiEWIAt9IYG6w== - dependencies: - "@babel/runtime" "^7.3.1" - lodash "^4.17.11" - web3-core "1.0.0-beta.50" - web3-core-helpers "1.0.0-beta.50" - web3-core-method "1.0.0-beta.50" - web3-core-subscriptions "1.0.0-beta.50" - web3-eth-abi "1.0.0-beta.50" - web3-eth-accounts "1.0.0-beta.50" - web3-providers "1.0.0-beta.50" - web3-utils "1.0.0-beta.50" - -web3-eth-ens@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.0.0-beta.50.tgz#29304e42e2671ea755a19ab3f1011ad197f115da" - integrity sha512-UnhYcNuSNRBOBcbD5y8cTyRh5ENn65/GfZkxCDXAKBY6sD4GzMZNkD7kq+37/34cnZEzzQPPGd9jLZNLXOklyg== - dependencies: - "@babel/runtime" "^7.3.1" - eth-ens-namehash "2.0.8" - lodash "^4.17.11" - web3-core "1.0.0-beta.50" - web3-core-helpers "1.0.0-beta.50" - web3-core-method "1.0.0-beta.50" - web3-eth-abi "1.0.0-beta.50" - web3-eth-contract "1.0.0-beta.50" - web3-net "1.0.0-beta.50" - web3-providers "1.0.0-beta.50" - web3-utils "1.0.0-beta.50" - -web3-eth-iban@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.50.tgz#311ea9422369ecbde6316e10a34de9fb07994cd6" - integrity sha512-rW5fpUUW3WaToPxBXNnqTfj5dh2BJ+9uognYAfThh2WWR1+EwWZethsKS/PyU6Jn9uA5p/kQoUIP0JKaeBm80Q== - dependencies: - "@babel/runtime" "^7.3.1" - bn.js "4.11.8" - web3-utils "1.0.0-beta.50" - -web3-eth-personal@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.50.tgz#891f55bb93c2e38918be085dcb295634a59b31b1" - integrity sha512-52dS24YfJxx/Uy21RKj2m5rjag1kktdy5rY/R9vDwWZRrJkxfDf058CvtRF+QsD7A6QVxkHCZ9YwEWnLCLW9Cw== - dependencies: - "@babel/runtime" "^7.3.1" - web3-core "1.0.0-beta.50" - web3-core-helpers "1.0.0-beta.50" - web3-core-method "1.0.0-beta.50" - web3-net "1.0.0-beta.50" - web3-providers "1.0.0-beta.50" - web3-utils "1.0.0-beta.50" - -web3-eth@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.0.0-beta.50.tgz#6da9246d36d65ba7ff03209419c571359eda0e0a" - integrity sha512-ojsddEclIdu+C3hfRrLVJK0rcxt2O+Yj7c3b4YEzZQ9+Kd/HaSZfeSpUgKojgmFhUUiCCRTEc2holWtQ+Lx4gQ== - dependencies: - "@babel/runtime" "^7.3.1" - eth-lib "0.2.8" - rxjs "^6.4.0" - web3-core "1.0.0-beta.50" - web3-core-helpers "1.0.0-beta.50" - web3-core-method "1.0.0-beta.50" - web3-core-subscriptions "1.0.0-beta.50" - web3-eth-abi "1.0.0-beta.50" - web3-eth-accounts "1.0.0-beta.50" - web3-eth-contract "1.0.0-beta.50" - web3-eth-ens "1.0.0-beta.50" - web3-eth-iban "1.0.0-beta.50" - web3-eth-personal "1.0.0-beta.50" - web3-net "1.0.0-beta.50" - web3-providers "1.0.0-beta.50" - web3-utils "1.0.0-beta.50" - -web3-net@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.0.0-beta.50.tgz#1ca188b9210da6ae560bbd35a2b6dea1d2e68da7" - integrity sha512-T9aBrWYzCeqZTTJlljonTm8x1tEjHT1uBqcdvEYZoyCS1Xxc+zCNBqP4SBfdcfwCeGohhI7bRx9qX1JjYH3cRA== - dependencies: - "@babel/runtime" "^7.3.1" - lodash "^4.17.11" - web3-core "1.0.0-beta.50" - web3-core-helpers "1.0.0-beta.50" - web3-core-method "1.0.0-beta.50" - web3-providers "1.0.0-beta.50" - web3-utils "1.0.0-beta.50" - -web3-providers@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-providers/-/web3-providers-1.0.0-beta.50.tgz#41d7cd3c38f3b12f721c115fea1972a3d1904d25" - integrity sha512-p2xtr6N72pdXvND5dLdK1G9T/9qCQiKC2EYDPmimnqvoHWixmM3tlBl042swkHspHHVL60vXPKxB4UDaQE2hWQ== - dependencies: - "@babel/runtime" "^7.3.1" - "@types/node" "^10.12.18" - eventemitter3 "3.1.0" - lodash "^4.17.11" - url-parse "1.4.4" - websocket "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible" + web3-core-helpers "1.0.0-beta.37" xhr2-cookies "1.1.0" -web3-shh@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.0.0-beta.50.tgz#e5a4a64b2308267b1635858e4adcc92eeee147f1" - integrity sha512-a46Gz/YQdF3HJ4XK7rZh6bJiP3IEq+BDAvdxD1jW54yKM2k3RGarOY8hanC1crxKE7E9Q1UUkrp1Vjrj8XSQuQ== - dependencies: - "@babel/runtime" "^7.3.1" - web3-core "1.0.0-beta.50" - web3-core-helpers "1.0.0-beta.50" - web3-core-method "1.0.0-beta.50" - web3-core-subscriptions "1.0.0-beta.50" - web3-net "1.0.0-beta.50" - web3-providers "1.0.0-beta.50" - web3-utils "1.0.0-beta.50" - -web3-utils@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.50.tgz#ed12454d3d2727d3b77695c1899ad3abbef303af" - integrity sha512-xGhM/YkepK2x0iMYUl/sws58LzTbodjMGlhZxrCZLZxJ0DoaDyk3UdmZ6aCSCwVTFg4hlVj3doaIhWnwGfhhpQ== - dependencies: - "@babel/runtime" "^7.3.1" - "@types/bn.js" "^4.11.4" - "@types/node" "^10.12.18" - bn.js "4.11.8" - eth-lib "0.2.8" - ethjs-unit "^0.1.6" - lodash "^4.17.11" +web3-providers-ipc@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.35.tgz#031afeb10fade2ebb0ef2fb82f5e58c04be842d9" + integrity sha512-iB0FG0HcpUnayfa8pn4guqEQ4Y1nrroi/jffdtQgFkrNt0sD3fMSwwC0AbmECqj3tDLl0e1slBR0RENll+ZF0g== + dependencies: + oboe "2.1.3" + underscore "1.8.3" + web3-core-helpers "1.0.0-beta.35" + +web3-providers-ipc@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.37.tgz#55d247e7197257ca0c3e4f4b0fe1561311b9d5b9" + integrity sha512-NdRPRxYMIU0C3u18NI8u4bwbhI9pCg5nRgDGYcmSAx5uOBxiYcQy+hb0WkJRRhBoyIXJmy+s26FoH8904+UnPg== + dependencies: + oboe "2.1.3" + underscore "1.8.3" + web3-core-helpers "1.0.0-beta.37" + +web3-providers-ws@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.35.tgz#5d38603fd450243a26aae0ff7f680644e77fa240" + integrity sha512-Cx64NgDStynKaUGDIIOfaCd0fZusL8h5avKTkdTjUu2aHhFJhZoVBGVLhoDtUaqZGWIZGcBJOoVf2JkGUOjDRQ== + dependencies: + underscore "1.8.3" + web3-core-helpers "1.0.0-beta.35" + websocket "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible" + +web3-providers-ws@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.37.tgz#77c15aebc00b75d760d22d063ac2e415bdbef72f" + integrity sha512-8p6ZLv+1JYa5Vs8oBn33Nn3VGFBbF+wVfO+b78RJS1Qf1uIOzjFVDk3XwYDD7rlz9G5BKpxhaQw+6EGQ7L02aw== + dependencies: + underscore "1.8.3" + web3-core-helpers "1.0.0-beta.37" + websocket "git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible" + +web3-shh@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.0.0-beta.35.tgz#7e4a585f8beee0c1927390937c6537748a5d1a58" + integrity sha512-8qSonk/x0xabERS9Sr6AIADN/Ty+5KwARkkGIfSYHKqFpdMDz+76F7cUCxtoCZoS8K04xgZlDKYe0TJXLYA0Fw== + dependencies: + web3-core "1.0.0-beta.35" + web3-core-method "1.0.0-beta.35" + web3-core-subscriptions "1.0.0-beta.35" + web3-net "1.0.0-beta.35" + +web3-shh@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.0.0-beta.37.tgz#3246ce5229601b525020828a56ee283307057105" + integrity sha512-h5STG/xqZNQWtCLYOu7NiMqwqPea8SfkKQUPUFxXKIPVCFVKpHuQEwW1qcPQRJMLhlQIv17xuoUe1A+RzDNbrw== + dependencies: + web3-core "1.0.0-beta.37" + web3-core-method "1.0.0-beta.37" + web3-core-subscriptions "1.0.0-beta.37" + web3-net "1.0.0-beta.37" + +web3-utils@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.35.tgz#ced9e1df47c65581c441c5f2af76b05a37a273d7" + integrity sha512-Dq6f0SOKj3BDFRgOPnE6ALbzBDCKVIW8mKWVf7tGVhTDHf+wQaWwQSC3aArFSqdExB75BPBPyDpuMTNszhljpA== + dependencies: + bn.js "4.11.6" + eth-lib "0.1.27" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randomhex "0.1.5" + underscore "1.8.3" + utf8 "2.1.1" + +web3-utils@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.0.0-beta.37.tgz#ab868a90fe5e649337e38bdaf72133fcbf4d414d" + integrity sha512-kA1fyhO8nKgU21wi30oJQ/ssvu+9srMdjOTKbHYbQe4ATPcr5YNwwrxG3Bcpbu1bEwRUVKHCkqi+wTvcAWBdlQ== + dependencies: + bn.js "4.11.6" + eth-lib "0.1.27" + ethjs-unit "0.1.6" number-to-bn "1.7.0" randomhex "0.1.5" + underscore "1.8.3" utf8 "2.1.1" -web3@1.0.0-beta.50: - version "1.0.0-beta.50" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.0.0-beta.50.tgz#a82db1ac519e68696363eee46d9b233f52f37eed" - integrity sha512-N4YqT1jl2tZYNWiLk5gA5BMchHJaG76d65z899DT9UTR4iI6mfqe1QIE+1YLII1x+uE8ohFzBq/aaZ8praLeoA== - dependencies: - "@babel/runtime" "^7.3.1" - "@types/node" "^10.12.18" - web3-bzz "1.0.0-beta.50" - web3-core "1.0.0-beta.50" - web3-core-helpers "1.0.0-beta.50" - web3-core-method "1.0.0-beta.50" - web3-eth "1.0.0-beta.50" - web3-eth-personal "1.0.0-beta.50" - web3-net "1.0.0-beta.50" - web3-providers "1.0.0-beta.50" - web3-shh "1.0.0-beta.50" - web3-utils "1.0.0-beta.50" +web3-utils@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.0.tgz#1f11b05d173b757d3f5ba32cb90b375a487d3bf0" + integrity sha512-tI1low8ICoaWU2c53cikH0rsksKuIskI2nycH5E5sEXxxl9/BOD3CeDDBFbxgNPQ+bpDevbR7gXNEDB7Ud4G9g== + dependencies: + bn.js "4.11.8" + eth-lib "0.2.7" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randomhex "0.1.5" + underscore "1.9.1" + utf8 "3.0.0" + +web3@1.0.0-beta.35: + version "1.0.0-beta.35" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.0.0-beta.35.tgz#6475095bd451a96e50a32b997ddee82279292f11" + integrity sha512-xwDmUhvTcHQvvNnOPcPZZgCxKUsI2e+GbHy7JkTK3/Rmnutazy8x7fsAXT9myw7V1qpi3GgLoZ3fkglSUbg1Mg== + dependencies: + web3-bzz "1.0.0-beta.35" + web3-core "1.0.0-beta.35" + web3-eth "1.0.0-beta.35" + web3-eth-personal "1.0.0-beta.35" + web3-net "1.0.0-beta.35" + web3-shh "1.0.0-beta.35" + web3-utils "1.0.0-beta.35" + +web3@1.0.0-beta.37: + version "1.0.0-beta.37" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.0.0-beta.37.tgz#b42c30e67195f816cd19d048fda872f70eca7083" + integrity sha512-8XLgUspdzicC/xHG82TLrcF/Fxzj2XYNJ1KTYnepOI77bj5rvpsxxwHYBWQ6/JOjk0HkZqoBfnXWgcIHCDhZhQ== + dependencies: + web3-bzz "1.0.0-beta.37" + web3-core "1.0.0-beta.37" + web3-eth "1.0.0-beta.37" + web3-eth-personal "1.0.0-beta.37" + web3-net "1.0.0-beta.37" + web3-shh "1.0.0-beta.37" + web3-utils "1.0.0-beta.37" + +web3x@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/web3x/-/web3x-2.0.4.tgz#0d5d0f1f08b394dca9a082ddb8e1715b11b78066" + integrity sha512-fyRgoSo3XtUWXApLxXb3ntUOoQ8aaRna3K7kr5iFPNLrhwzEbYihXeQTK9s0HV6Gf+NahQZpgOd61P4K4nORFA== + dependencies: + "@types/bn.js" "^4.11.2" + "@types/node" "^10.12.0" + "@types/ws" "^6.0.1" + bip39 "^2.5.0" + bn.js "^4.11.8" + browserify-aes "^1.2.0" + elliptic "^6.4.0" + got "^9.3.0" + hdkey "^1.1.0" + idna-uts46-hx "^2.3.1" + isomorphic-ws "^4.0.1" + mkdirp "^0.5.1" + node-http-xhr "^1.3.4" + pbkdf2 "^3.0.17" + randombytes "^2.0.6" + swarm-js "^0.1.39" + tslib "^1.9.3" + utf8 "^3.0.0" + ws "^6.1.0" + +websocket@1.0.26: + version "1.0.26" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.26.tgz#a03a01299849c35268c83044aa919c6374be8194" + integrity sha512-fjcrYDPIQxpTnqFQ9JjxUQcdvR89MFAOjPBlF+vjOt49w/XW4fJknUoMz/mDIn2eK1AdslVojcaOxOqyZZV8rw== + dependencies: + debug "^2.2.0" + nan "^2.3.3" + typedarray-to-buffer "^3.1.2" + yaeti "^0.0.6" "websocket@git://github.com/frozeman/WebSocket-Node.git#browserifyCompatible": version "1.0.26" @@ -4923,6 +6966,11 @@ web3@1.0.0-beta.50: typedarray-to-buffer "^3.1.2" yaeti "^0.0.6" +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== + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -4992,6 +7040,20 @@ ws@^3.0.0: safe-buffer "~5.1.0" ultron "~1.1.0" +ws@^5.1.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== + dependencies: + async-limiter "~1.0.0" + +ws@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" @@ -5024,7 +7086,7 @@ xhr2-cookies@1.1.0: dependencies: cookiejar "^2.1.1" -xhr@^2.0.4, xhr@^2.3.3: +xhr@^2.0.4, xhr@^2.2.0, xhr@^2.3.3: version "2.5.0" resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.5.0.tgz#bed8d1676d5ca36108667692b74b316c496e49dd" integrity sha512-4nlO/14t3BNUZRXIXfXe+3N6w3s1KoxcJUUURctd64BLRe67E4gRwp4PjywtDY72fXpZ1y6Ch0VZQRY/gMPzzQ==