From 6686a85cd91845130671f9c6c016803c0133a695 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Tue, 23 Jan 2018 13:39:47 -0500 Subject: [PATCH 001/105] first commit --- README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000000..3a6302abac --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# remix-tests From b150500e4788beea27deafa92b9c9ef1bccd7fbb Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Tue, 23 Jan 2018 13:42:54 -0500 Subject: [PATCH 002/105] add package.json --- package.json | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 package.json diff --git a/package.json b/package.json new file mode 100644 index 0000000000..ba41549657 --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "remix-tests", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ethereum/remix-tests.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/ethereum/remix-tests/issues" + }, + "homepage": "https://github.com/ethereum/remix-tests#readme" +} From 2ee0f59955a7c86c620a521d4a92337521056cd8 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Tue, 30 Jan 2018 13:28:19 -0500 Subject: [PATCH 003/105] first commit --- .gitignore | 2 + examples/simple_storage.sol | 17 ++++++++ examples/simple_storage_test.sol | 21 ++++++++++ examples/tests.sol | 10 +++++ index.js | 40 +++++++++++++++++++ package.json | 11 +++++- run.js | 13 +++++++ src/compiler.js | 21 ++++++++++ src/deployer.js | 66 ++++++++++++++++++++++++++++++++ src/testRunner.js | 47 +++++++++++++++++++++++ src/web3Instance.js | 22 +++++++++++ 11 files changed, 269 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 examples/simple_storage.sol create mode 100644 examples/simple_storage_test.sol create mode 100644 examples/tests.sol create mode 100644 index.js create mode 100644 run.js create mode 100644 src/compiler.js create mode 100644 src/deployer.js create mode 100644 src/testRunner.js create mode 100644 src/web3Instance.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..e002d0c249 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +TODO +node_modules/ diff --git a/examples/simple_storage.sol b/examples/simple_storage.sol new file mode 100644 index 0000000000..4f8a84a5b1 --- /dev/null +++ b/examples/simple_storage.sol @@ -0,0 +1,17 @@ +pragma solidity ^0.4.7; +contract SimpleStorage { + uint public storedData; + + function SimpleStorage() public { + storedData = 100; + } + + function set(uint x) public { + storedData = x; + } + + function get() public view returns (uint retVal) { + return storedData; + } + +} diff --git a/examples/simple_storage_test.sol b/examples/simple_storage_test.sol new file mode 100644 index 0000000000..8597a68230 --- /dev/null +++ b/examples/simple_storage_test.sol @@ -0,0 +1,21 @@ +pragma solidity ^0.4.7; +import "./tests.sol"; +import "./simple_storage.sol"; + +contract MyTest { + SimpleStorage foo; + + function beforeAll() { + foo = new SimpleStorage(); + } + + function initialValueShouldBe100() public constant returns (bool) { + return Assert.equal(foo.get(), 100, "initial value is not correct"); + } + + function initialValueShouldBe200() public constant returns (bool) { + return Assert.equal(foo.get(), 200, "initial value is not correct"); + } + +} + diff --git a/examples/tests.sol b/examples/tests.sol new file mode 100644 index 0000000000..ab51fe877a --- /dev/null +++ b/examples/tests.sol @@ -0,0 +1,10 @@ +pragma solidity ^0.4.7; + +library Assert { + + function equal(uint a, uint b, string text) { + //return a == b; + } + +} + diff --git a/index.js b/index.js new file mode 100644 index 0000000000..ea7c3bd48d --- /dev/null +++ b/index.js @@ -0,0 +1,40 @@ +var async = require('async'); +let remixLib = require('remix-lib'); + +let Compiler = require('./src/compiler.js'); +let Deployer = require('./src/deployer.js'); +let web3Instance = require('./src/web3Instance.js'); +let TestRunner = require('./src/testRunner.js'); + +var runTest = function(filename) { + let result, web3, accounts, contracts; + + async.waterfall([ + function compile(next) { + result = Compiler.compileAll(); + next(); + }, + function initWeb3(next) { + web3 = web3Instance(); + next(); + }, + function getAccountList(next) { + web3.eth.getAccounts((err, _accounts) => { + accounts = _accounts; + next(); + }); + }, + function deployAllContracts(next) { + Deployer.deployAll(result, web3, accounts, next); + }, + function runTests(contracts, next) { + let test = contracts.MyTest; + TestRunner.runTest("SimpleStorage", test, accounts, next); + } + ], function() { + }); +} + +module.exports = { + runTest: runTest +}; diff --git a/package.json b/package.json index ba41549657..47d81372c5 100644 --- a/package.json +++ b/package.json @@ -15,5 +15,14 @@ "bugs": { "url": "https://github.com/ethereum/remix-tests/issues" }, - "homepage": "https://github.com/ethereum/remix-tests#readme" + "homepage": "https://github.com/ethereum/remix-tests#readme", + "dependencies": { + "change-case": "^3.0.1", + "colors": "^1.1.2", + "commander": "^2.13.0", + "ethereumjs-vm": "^2.3.2", + "remix-lib": "^0.1.2", + "solc": "^0.4.17", + "web3": "^1.0.0-beta.27" + } } diff --git a/run.js b/run.js new file mode 100644 index 0000000000..f28adb2a2b --- /dev/null +++ b/run.js @@ -0,0 +1,13 @@ +const commander = require('commander'); +const RemixTests = require('./index.js'); + +commander.action(function (filename) { + RemixTests.runTest(filename); +}); + +if (!process.argv.slice(2).length) { + console.log("please specify filename"); +} + +commander.parse(process.argv); + diff --git a/src/compiler.js b/src/compiler.js new file mode 100644 index 0000000000..c92ddb11b5 --- /dev/null +++ b/src/compiler.js @@ -0,0 +1,21 @@ +let fs = require('fs'); +let solc = require('solc'); + +// TODO: replace this with remix's own compiler code +function compileAll() { + const input = { + "simple_storage.sol": fs.readFileSync("examples/simple_storage.sol").toString(), + "tests.sol": fs.readFileSync("examples/tests.sol").toString(), + "simple_storage_test.sol": fs.readFileSync("examples/simple_storage_test.sol").toString() + }; + + const optimize = 1; + result = solc.compile({sources: input}, optimize); + + return result.contracts; +} + +module.exports = { + compileAll: compileAll +} + diff --git a/src/deployer.js b/src/deployer.js new file mode 100644 index 0000000000..2b07005c07 --- /dev/null +++ b/src/deployer.js @@ -0,0 +1,66 @@ +var async = require('async'); + +// TODO: replace this with remix's own deployer code + +function deployAll(compileResult, web3, accounts, callback) { + let compiledObject = {}, contracts = {}; + for (let contractName in compileResult) { + let contract = compileResult[contractName]; + + const regex = /(.*):(.*)/; + const className = contractName.match(regex)[2]; + const filename = contractName.match(regex)[1]; + + let abi = JSON.parse(contract.interface); + let code = contract.bytecode; + + compiledObject[className] = {}; + compiledObject[className].abi = abi; + compiledObject[className].code = code; + compiledObject[className].filename = filename; + compiledObject[className].className = className; + } + + async.eachOfLimit(compiledObject, 1, function(contract, contractName, next) { + let contractObject = new web3.eth.Contract(contract.abi); + + let contractCode = "0x" + contract.code; + + // TODO: temporary code, and terrible if the contracts are not in order... + for (let name in compiledObject) { + let contractObj = compiledObject[name]; + let linkReference = '__' + contractObj.filename + ":" + contractObj.className; + let toReplace = linkReference + "_".repeat(40 - linkReference.length); + + if (contractCode.indexOf(linkReference) < 0) { + continue + } + + if (!contractObj.deployedAddress) { + throw new Error("linking not found for " + name + " when deploying " + contractName); + } + + contractCode = contractCode.replace(new RegExp(toReplace, "g"), contractObj.deployedAddress) + } + + contractObject.deploy({arguments: [], data: contractCode}).send({ + from: accounts[0], + gas: 4000 * 1000 + }).on('receipt', function(receipt) { + contractObject.options.address = receipt.contractAddress; + contractObject.options.from = accounts[0]; + contractObject.options.gas = 4000*1000; + compiledObject[contractName].deployedAddress = receipt.contractAddress; + + contracts[contractName] = contractObject; + + next(); + }); + }, function() { + callback(null, contracts); + }); +} + +module.exports = { + deployAll: deployAll +} diff --git a/src/testRunner.js b/src/testRunner.js new file mode 100644 index 0000000000..6ad7935124 --- /dev/null +++ b/src/testRunner.js @@ -0,0 +1,47 @@ +var async = require('async'); +var changeCase = require('change-case'); +require('colors'); + +function runTest(testName, testObject, accounts, callback) { + let runList = []; + let specialFunctions = ['beforeAll']; + let availableFunctions = testObject._jsonInterface.filter((x) => x.type === 'function').map((x) => x.name); + let testFunctions = testObject._jsonInterface.filter((x) => specialFunctions.indexOf(x.name) < 0 && x.type === 'function'); + + if (availableFunctions.indexOf("beforeAll")) { + runList.push({name: 'beforeAll', type: 'internal', constant: false}); + } + + for (let func of testFunctions) { + runList.push({name: func.name, type: 'test', constant: func.constant}); + } + + console.log("#" + testName); + async.eachOfLimit(runList, 1, function(func, index, next) { + let method = testObject.methods[func.name].apply(testObject.methods[func.name], []); + if (func.constant) { + method.call().then((result) => { + if (result) { + // TODO: should instead be returned in a callback, the caller can + // decide how to handle the output (so works both in console and + // browser) + console.log("\t✓ ".green.bold + changeCase.sentenceCase(func.name).grey); + } else { + console.log("\t✘ ".bold.red + changeCase.sentenceCase(func.name).red); + } + next(); + }); + } else { + method.send().then(() => { + next(); + }); + } + }, function() { + console.log("1 passing".green); + console.log("1 failing".red); + }); +} + +module.exports = { + runTest: runTest +} diff --git a/src/web3Instance.js b/src/web3Instance.js new file mode 100644 index 0000000000..d2445bc377 --- /dev/null +++ b/src/web3Instance.js @@ -0,0 +1,22 @@ +let Web3 = require('web3'); +var EthJSVM = require('ethereumjs-vm') + +// TODO: this whole file is temporary and should disapear one the code is +// refactored + +function web3Instance() { + let web3 = new Web3(); + web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); + //var vm = new EthJSVM({ + // enableHomestead: true, + // activatePrecompiles: true + //}); + // + //var Web3VMProvider = remixLib.vm.Web3VMProvider; + // + //let web3 = new Web3VMProvider(); + //web3.setVM(vm); + return web3; +} + +module.exports = web3Instance; From 191c5207ef87b37ba64cd256e132de9cca338edb Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 13:17:52 -0500 Subject: [PATCH 004/105] use compiler from remix-solidity --- examples/simple_storage_test.sol | 6 ++-- index.js | 6 ++-- package.json | 2 +- src/compiler.js | 53 ++++++++++++++++++++++++++------ src/deployer.js | 27 ++++++++-------- 5 files changed, 68 insertions(+), 26 deletions(-) diff --git a/examples/simple_storage_test.sol b/examples/simple_storage_test.sol index 8597a68230..0c5cdbaa17 100644 --- a/examples/simple_storage_test.sol +++ b/examples/simple_storage_test.sol @@ -10,11 +10,13 @@ contract MyTest { } function initialValueShouldBe100() public constant returns (bool) { - return Assert.equal(foo.get(), 100, "initial value is not correct"); + //return Assert.equal(foo.get(), 100, "initial value is not correct"); + return true; } function initialValueShouldBe200() public constant returns (bool) { - return Assert.equal(foo.get(), 200, "initial value is not correct"); + //return Assert.equal(foo.get(), 200, "initial value is not correct"); + return false; } } diff --git a/index.js b/index.js index ea7c3bd48d..7fe1c551ba 100644 --- a/index.js +++ b/index.js @@ -11,8 +11,10 @@ var runTest = function(filename) { async.waterfall([ function compile(next) { - result = Compiler.compileAll(); - next(); + Compiler.compileAll(function(err, compilationResult) { + result = compilationResult; + next(); + }); }, function initWeb3(next) { web3 = web3Instance(); diff --git a/package.json b/package.json index 47d81372c5..9cba4b8a7b 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "commander": "^2.13.0", "ethereumjs-vm": "^2.3.2", "remix-lib": "^0.1.2", - "solc": "^0.4.17", + "remix-solidity": "../remix/remix-solidity", "web3": "^1.0.0-beta.27" } } diff --git a/src/compiler.js b/src/compiler.js index c92ddb11b5..04cf86e73b 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -1,18 +1,53 @@ let fs = require('fs'); -let solc = require('solc'); +//let compiler = require('solc'); +var async = require('async'); + +let remixLib = require('remix-lib'); +let compilerInput = remixLib.helpers.compiler; +let RemixCompiler = require('remix-solidity').Compiler; // TODO: replace this with remix's own compiler code -function compileAll() { - const input = { - "simple_storage.sol": fs.readFileSync("examples/simple_storage.sol").toString(), - "tests.sol": fs.readFileSync("examples/tests.sol").toString(), - "simple_storage_test.sol": fs.readFileSync("examples/simple_storage_test.sol").toString() +function compileAll(cb) { + //const input = { + // "simple_storage.sol": fs.readFileSync("examples/simple_storage.sol").toString(), + // "tests.sol": fs.readFileSync("examples/tests.sol").toString(), + // "simple_storage_test.sol": fs.readFileSync("examples/simple_storage_test.sol").toString() + //}; + //const optimize = 1; + //result = compiler.compileStandardWrapper({sources: input}, optimize); + //cb(null, result.contracts); + + console.log("compile all"); + + let compiler; + const sources = { + "simple_storage.sol": {content: fs.readFileSync("examples/simple_storage.sol").toString()}, + "tests.sol": {content: fs.readFileSync("examples/tests.sol").toString()}, + "simple_storage_test.sol": {content: fs.readFileSync("examples/simple_storage_test.sol").toString()} }; - const optimize = 1; - result = solc.compile({sources: input}, optimize); + async.waterfall([ + function loadCompiler(next) { + console.log("loadCompiler"); + compiler = new RemixCompiler(); + compiler.onInternalCompilerLoaded(); + //compiler.event.register('compilerLoaded', this, function (version) { + next(); + //}); + }, + function doCompilation(next) { + compiler.event.register('compilationFinished', this, function (success, data, source) { + next(null, data); + }); + console.log("doCompilation"); + compiler.compile(sources, "examples/"); + } + ], function(err, result) { + console.dir("==== result ===="); + console.dir(result); + cb(null, result.contracts); + }); - return result.contracts; } module.exports = { diff --git a/src/deployer.js b/src/deployer.js index 2b07005c07..8716e6438b 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -4,21 +4,24 @@ var async = require('async'); function deployAll(compileResult, web3, accounts, callback) { let compiledObject = {}, contracts = {}; - for (let contractName in compileResult) { - let contract = compileResult[contractName]; - const regex = /(.*):(.*)/; - const className = contractName.match(regex)[2]; - const filename = contractName.match(regex)[1]; + for (let contractFile in compileResult) { + for (let contractName in compileResult[contractFile]) { + let contract = compileResult[contractFile][contractName]; - let abi = JSON.parse(contract.interface); - let code = contract.bytecode; + const className = contractName; + const filename = contractFile; - compiledObject[className] = {}; - compiledObject[className].abi = abi; - compiledObject[className].code = code; - compiledObject[className].filename = filename; - compiledObject[className].className = className; + + let abi = contract.abi; + let code = contract.evm.bytecode.object; + + compiledObject[className] = {}; + compiledObject[className].abi = abi; + compiledObject[className].code = code; + compiledObject[className].filename = filename; + compiledObject[className].className = className; + } } async.eachOfLimit(compiledObject, 1, function(contract, contractName, next) { From 30d67d66b0b404bc2eceaecfac2446bb29160c05 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 16:43:06 -0500 Subject: [PATCH 005/105] remove web3instance, passed it web3 instance as part of the tests --- index.js | 9 ++------- run.js | 5 ++++- src/web3Instance.js | 22 ---------------------- 3 files changed, 6 insertions(+), 30 deletions(-) delete mode 100644 src/web3Instance.js diff --git a/index.js b/index.js index 7fe1c551ba..76cebbcc8e 100644 --- a/index.js +++ b/index.js @@ -3,11 +3,10 @@ let remixLib = require('remix-lib'); let Compiler = require('./src/compiler.js'); let Deployer = require('./src/deployer.js'); -let web3Instance = require('./src/web3Instance.js'); let TestRunner = require('./src/testRunner.js'); -var runTest = function(filename) { - let result, web3, accounts, contracts; +var runTest = function(filename, web3) { + let result, accounts, contracts; async.waterfall([ function compile(next) { @@ -16,10 +15,6 @@ var runTest = function(filename) { next(); }); }, - function initWeb3(next) { - web3 = web3Instance(); - next(); - }, function getAccountList(next) { web3.eth.getAccounts((err, _accounts) => { accounts = _accounts; diff --git a/run.js b/run.js index f28adb2a2b..49e81f315d 100644 --- a/run.js +++ b/run.js @@ -1,8 +1,11 @@ const commander = require('commander'); +const Web3 = require('web3'); const RemixTests = require('./index.js'); commander.action(function (filename) { - RemixTests.runTest(filename); + let web3 = new Web3(); + web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); + RemixTests.runTest(filename, web3); }); if (!process.argv.slice(2).length) { diff --git a/src/web3Instance.js b/src/web3Instance.js deleted file mode 100644 index d2445bc377..0000000000 --- a/src/web3Instance.js +++ /dev/null @@ -1,22 +0,0 @@ -let Web3 = require('web3'); -var EthJSVM = require('ethereumjs-vm') - -// TODO: this whole file is temporary and should disapear one the code is -// refactored - -function web3Instance() { - let web3 = new Web3(); - web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); - //var vm = new EthJSVM({ - // enableHomestead: true, - // activatePrecompiles: true - //}); - // - //var Web3VMProvider = remixLib.vm.Web3VMProvider; - // - //let web3 = new Web3VMProvider(); - //web3.setVM(vm); - return web3; -} - -module.exports = web3Instance; From e14d029cf48901333ee014f1c17409530d129960 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 16:48:46 -0500 Subject: [PATCH 006/105] refactor deployer into a waterfall --- index.js | 2 +- src/deployer.js | 107 ++++++++++++++++++++++++---------------------- src/testRunner.js | 2 +- 3 files changed, 59 insertions(+), 52 deletions(-) diff --git a/index.js b/index.js index 76cebbcc8e..af3134b2a6 100644 --- a/index.js +++ b/index.js @@ -26,7 +26,7 @@ var runTest = function(filename, web3) { }, function runTests(contracts, next) { let test = contracts.MyTest; - TestRunner.runTest("SimpleStorage", test, accounts, next); + TestRunner.runTest("SimpleStorage", test, next); } ], function() { }); diff --git a/src/deployer.js b/src/deployer.js index 8716e6438b..4a58e4b538 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -5,63 +5,70 @@ var async = require('async'); function deployAll(compileResult, web3, accounts, callback) { let compiledObject = {}, contracts = {}; - for (let contractFile in compileResult) { - for (let contractName in compileResult[contractFile]) { - let contract = compileResult[contractFile][contractName]; + async.waterfall([ + function getContractData(next) { + for (let contractFile in compileResult) { + for (let contractName in compileResult[contractFile]) { + let contract = compileResult[contractFile][contractName]; - const className = contractName; - const filename = contractFile; + const className = contractName; + const filename = contractFile; - let abi = contract.abi; - let code = contract.evm.bytecode.object; + let abi = contract.abi; + let code = contract.evm.bytecode.object; - compiledObject[className] = {}; - compiledObject[className].abi = abi; - compiledObject[className].code = code; - compiledObject[className].filename = filename; - compiledObject[className].className = className; - } - } - - async.eachOfLimit(compiledObject, 1, function(contract, contractName, next) { - let contractObject = new web3.eth.Contract(contract.abi); - - let contractCode = "0x" + contract.code; - - // TODO: temporary code, and terrible if the contracts are not in order... - for (let name in compiledObject) { - let contractObj = compiledObject[name]; - let linkReference = '__' + contractObj.filename + ":" + contractObj.className; - let toReplace = linkReference + "_".repeat(40 - linkReference.length); - - if (contractCode.indexOf(linkReference) < 0) { - continue - } - - if (!contractObj.deployedAddress) { - throw new Error("linking not found for " + name + " when deploying " + contractName); + compiledObject[className] = {}; + compiledObject[className].abi = abi; + compiledObject[className].code = code; + compiledObject[className].filename = filename; + compiledObject[className].className = className; + } } - - contractCode = contractCode.replace(new RegExp(toReplace, "g"), contractObj.deployedAddress) + next(); + }, + function deployContracts(next) { + async.eachOfLimit(compiledObject, 1, function(contract, contractName, nextEach) { + let contractObject = new web3.eth.Contract(contract.abi); + + let contractCode = "0x" + contract.code; + + // TODO: temporary code, and terrible if the contracts are not in order... + for (let name in compiledObject) { + let contractObj = compiledObject[name]; + let linkReference = '__' + contractObj.filename + ":" + contractObj.className; + let toReplace = linkReference + "_".repeat(40 - linkReference.length); + + if (contractCode.indexOf(linkReference) < 0) { + continue + } + + if (!contractObj.deployedAddress) { + throw new Error("linking not found for " + name + " when deploying " + contractName); + } + + contractCode = contractCode.replace(new RegExp(toReplace, "g"), contractObj.deployedAddress) + } + + contractObject.deploy({arguments: [], data: contractCode}).send({ + from: accounts[0], + gas: 4000 * 1000 + }).on('receipt', function(receipt) { + contractObject.options.address = receipt.contractAddress; + contractObject.options.from = accounts[0]; + contractObject.options.gas = 4000*1000; + compiledObject[contractName].deployedAddress = receipt.contractAddress; + + contracts[contractName] = contractObject; + + nextEach(); + }); + }, function() { + next(null, contracts); + }); } + ], callback); - contractObject.deploy({arguments: [], data: contractCode}).send({ - from: accounts[0], - gas: 4000 * 1000 - }).on('receipt', function(receipt) { - contractObject.options.address = receipt.contractAddress; - contractObject.options.from = accounts[0]; - contractObject.options.gas = 4000*1000; - compiledObject[contractName].deployedAddress = receipt.contractAddress; - - contracts[contractName] = contractObject; - - next(); - }); - }, function() { - callback(null, contracts); - }); } module.exports = { diff --git a/src/testRunner.js b/src/testRunner.js index 6ad7935124..9eef74cd37 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -2,7 +2,7 @@ var async = require('async'); var changeCase = require('change-case'); require('colors'); -function runTest(testName, testObject, accounts, callback) { +function runTest(testName, testObject, callback) { let runList = []; let specialFunctions = ['beforeAll']; let availableFunctions = testObject._jsonInterface.filter((x) => x.type === 'function').map((x) => x.name); From 811067ec974548172cbc5a616f674e58ba2bc7aa Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 16:51:51 -0500 Subject: [PATCH 007/105] move get accounts into deployer --- index.js | 8 +------- src/deployer.js | 10 ++++++++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/index.js b/index.js index af3134b2a6..190fca76be 100644 --- a/index.js +++ b/index.js @@ -15,14 +15,8 @@ var runTest = function(filename, web3) { next(); }); }, - function getAccountList(next) { - web3.eth.getAccounts((err, _accounts) => { - accounts = _accounts; - next(); - }); - }, function deployAllContracts(next) { - Deployer.deployAll(result, web3, accounts, next); + Deployer.deployAll(result, web3, next); }, function runTests(contracts, next) { let test = contracts.MyTest; diff --git a/src/deployer.js b/src/deployer.js index 4a58e4b538..782368bce0 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -2,10 +2,16 @@ var async = require('async'); // TODO: replace this with remix's own deployer code -function deployAll(compileResult, web3, accounts, callback) { - let compiledObject = {}, contracts = {}; +function deployAll(compileResult, web3, callback) { + let compiledObject = {}, contracts = {}, accounts; async.waterfall([ + function getAccountList(next) { + web3.eth.getAccounts((err, _accounts) => { + accounts = _accounts; + next(); + }); + }, function getContractData(next) { for (let contractFile in compileResult) { for (let contractName in compileResult[contractFile]) { From 0b63eb68808916794b587380c3903de763b01554 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 17:21:34 -0500 Subject: [PATCH 008/105] refactor; separate runTestFile from runTest --- index.js | 12 ++++++++---- run.js | 2 +- src/compiler.js | 12 ------------ 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/index.js b/index.js index 190fca76be..82104888ff 100644 --- a/index.js +++ b/index.js @@ -5,7 +5,11 @@ let Compiler = require('./src/compiler.js'); let Deployer = require('./src/deployer.js'); let TestRunner = require('./src/testRunner.js'); -var runTest = function(filename, web3) { +var runTest = function(contractName, contractObj, cb) { + TestRunner.runTest(contractName, contractObj, cb); +} + +var runTestFile = function(filename, web3) { let result, accounts, contracts; async.waterfall([ @@ -19,13 +23,13 @@ var runTest = function(filename, web3) { Deployer.deployAll(result, web3, next); }, function runTests(contracts, next) { - let test = contracts.MyTest; - TestRunner.runTest("SimpleStorage", test, next); + runTest("SimpleStorage", contracts.MyTest, next); } ], function() { }); } + module.exports = { - runTest: runTest + runTestFile: runTestFile }; diff --git a/run.js b/run.js index 49e81f315d..2f1aa5ed8e 100644 --- a/run.js +++ b/run.js @@ -5,7 +5,7 @@ const RemixTests = require('./index.js'); commander.action(function (filename) { let web3 = new Web3(); web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); - RemixTests.runTest(filename, web3); + RemixTests.runTestFile(filename, web3); }); if (!process.argv.slice(2).length) { diff --git a/src/compiler.js b/src/compiler.js index 04cf86e73b..388f76ccb5 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -1,5 +1,4 @@ let fs = require('fs'); -//let compiler = require('solc'); var async = require('async'); let remixLib = require('remix-lib'); @@ -8,15 +7,6 @@ let RemixCompiler = require('remix-solidity').Compiler; // TODO: replace this with remix's own compiler code function compileAll(cb) { - //const input = { - // "simple_storage.sol": fs.readFileSync("examples/simple_storage.sol").toString(), - // "tests.sol": fs.readFileSync("examples/tests.sol").toString(), - // "simple_storage_test.sol": fs.readFileSync("examples/simple_storage_test.sol").toString() - //}; - //const optimize = 1; - //result = compiler.compileStandardWrapper({sources: input}, optimize); - //cb(null, result.contracts); - console.log("compile all"); let compiler; @@ -43,8 +33,6 @@ function compileAll(cb) { compiler.compile(sources, "examples/"); } ], function(err, result) { - console.dir("==== result ===="); - console.dir(result); cb(null, result.contracts); }); From 477c38bf36d0b06251235ae36b8df29b71d6c0ba Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 17:23:10 -0500 Subject: [PATCH 009/105] move tests lib to a separate folder --- {examples => sol}/tests.sol | 0 src/compiler.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename {examples => sol}/tests.sol (100%) diff --git a/examples/tests.sol b/sol/tests.sol similarity index 100% rename from examples/tests.sol rename to sol/tests.sol diff --git a/src/compiler.js b/src/compiler.js index 388f76ccb5..011968324b 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -12,7 +12,7 @@ function compileAll(cb) { let compiler; const sources = { "simple_storage.sol": {content: fs.readFileSync("examples/simple_storage.sol").toString()}, - "tests.sol": {content: fs.readFileSync("examples/tests.sol").toString()}, + "tests.sol": {content: fs.readFileSync("sol/tests.sol").toString()}, "simple_storage_test.sol": {content: fs.readFileSync("examples/simple_storage_test.sol").toString()} }; From d7669a2b5ba9d7db30ad7e5a355a0c1d9a20ab79 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 17:26:46 -0500 Subject: [PATCH 010/105] refactor waterfall and cleanup, pass file to compile module --- index.js | 16 +++++----------- src/compiler.js | 6 +++--- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/index.js b/index.js index 82104888ff..eaf3785691 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,4 @@ var async = require('async'); -let remixLib = require('remix-lib'); let Compiler = require('./src/compiler.js'); let Deployer = require('./src/deployer.js'); @@ -10,17 +9,12 @@ var runTest = function(contractName, contractObj, cb) { } var runTestFile = function(filename, web3) { - let result, accounts, contracts; - async.waterfall([ function compile(next) { - Compiler.compileAll(function(err, compilationResult) { - result = compilationResult; - next(); - }); + Compiler.compileFile(filename, next); }, - function deployAllContracts(next) { - Deployer.deployAll(result, web3, next); + function deployAllContracts(compilationResult, next) { + Deployer.deployAll(compilationResult, web3, next); }, function runTests(contracts, next) { runTest("SimpleStorage", contracts.MyTest, next); @@ -29,7 +23,7 @@ var runTestFile = function(filename, web3) { }); } - module.exports = { - runTestFile: runTestFile + runTestFile: runTestFile, + runTest: runTest }; diff --git a/src/compiler.js b/src/compiler.js index 011968324b..8a73ad22fd 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -6,13 +6,13 @@ let compilerInput = remixLib.helpers.compiler; let RemixCompiler = require('remix-solidity').Compiler; // TODO: replace this with remix's own compiler code -function compileAll(cb) { +function compileFile(filename, cb) { console.log("compile all"); let compiler; const sources = { - "simple_storage.sol": {content: fs.readFileSync("examples/simple_storage.sol").toString()}, "tests.sol": {content: fs.readFileSync("sol/tests.sol").toString()}, + "simple_storage.sol": {content: fs.readFileSync("examples/simple_storage.sol").toString()}, "simple_storage_test.sol": {content: fs.readFileSync("examples/simple_storage_test.sol").toString()} }; @@ -39,6 +39,6 @@ function compileAll(cb) { } module.exports = { - compileAll: compileAll + compileFile: compileFile } From 1f7b8229a5a6142104a7c5529cd2abf1eb556079 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 17:42:24 -0500 Subject: [PATCH 011/105] compile contracts in test dir --- src/compiler.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/compiler.js b/src/compiler.js index 8a73ad22fd..56e84f3809 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -1,5 +1,6 @@ let fs = require('fs'); var async = require('async'); +var path = require('path'); let remixLib = require('remix-lib'); let compilerInput = remixLib.helpers.compiler; @@ -12,9 +13,14 @@ function compileFile(filename, cb) { let compiler; const sources = { "tests.sol": {content: fs.readFileSync("sol/tests.sol").toString()}, - "simple_storage.sol": {content: fs.readFileSync("examples/simple_storage.sol").toString()}, - "simple_storage_test.sol": {content: fs.readFileSync("examples/simple_storage_test.sol").toString()} - }; + } + + // TODO: for now assumes filepath dir contains all tests, later all this + // should be replaced with remix's & browser solidity compiler code + let filepath = path.dirname(filename); + fs.readdirSync(filepath).forEach(file => { + sources[file] = {content: fs.readFileSync(path.join(filepath, file)).toString()} + }); async.waterfall([ function loadCompiler(next) { @@ -33,7 +39,7 @@ function compileFile(filename, cb) { compiler.compile(sources, "examples/"); } ], function(err, result) { - cb(null, result.contracts); + cb(err, result.contracts); }); } From d0ba2f34d31a613b50ed99a47a036ef9cdcb9179 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 18:01:26 -0500 Subject: [PATCH 012/105] add download json script (for now) --- .gitignore | 1 + package.json | 5 ++++- src/compiler.js | 4 ---- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index e002d0c249..31c57569ed 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ TODO node_modules/ +soljson.js diff --git a/package.json b/package.json index 9cba4b8a7b..dd89c16653 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "downloadsolc": "cd node_modules/solc && (test -e soljson.js || wget https://ethereum.github.io/solc-bin/soljson.js) && cd ..", + "prepublish": "npm-run-all -ls downloadsolc" }, "repository": { "type": "git", @@ -21,8 +22,10 @@ "colors": "^1.1.2", "commander": "^2.13.0", "ethereumjs-vm": "^2.3.2", + "npm-run-all": "^4.1.2", "remix-lib": "^0.1.2", "remix-solidity": "../remix/remix-solidity", + "solc": "https://github.com/ethereum/solc-js", "web3": "^1.0.0-beta.27" } } diff --git a/src/compiler.js b/src/compiler.js index 56e84f3809..96b5bb05fa 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -8,8 +8,6 @@ let RemixCompiler = require('remix-solidity').Compiler; // TODO: replace this with remix's own compiler code function compileFile(filename, cb) { - console.log("compile all"); - let compiler; const sources = { "tests.sol": {content: fs.readFileSync("sol/tests.sol").toString()}, @@ -24,7 +22,6 @@ function compileFile(filename, cb) { async.waterfall([ function loadCompiler(next) { - console.log("loadCompiler"); compiler = new RemixCompiler(); compiler.onInternalCompilerLoaded(); //compiler.event.register('compilerLoaded', this, function (version) { @@ -35,7 +32,6 @@ function compileFile(filename, cb) { compiler.event.register('compilationFinished', this, function (success, data, source) { next(null, data); }); - console.log("doCompilation"); compiler.compile(sources, "examples/"); } ], function(err, result) { From 0c6c94c0f6dd7466ae0372fdbb6723dc656e5134 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 18:06:20 -0500 Subject: [PATCH 013/105] track passing/failing tests --- src/testRunner.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/testRunner.js b/src/testRunner.js index 9eef74cd37..3c047a6d02 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -16,7 +16,9 @@ function runTest(testName, testObject, callback) { runList.push({name: func.name, type: 'test', constant: func.constant}); } - console.log("#" + testName); + let passingNum = 0, failureNum = 0; + + console.log(("#" + testName).green); async.eachOfLimit(runList, 1, function(func, index, next) { let method = testObject.methods[func.name].apply(testObject.methods[func.name], []); if (func.constant) { @@ -26,8 +28,10 @@ function runTest(testName, testObject, callback) { // decide how to handle the output (so works both in console and // browser) console.log("\t✓ ".green.bold + changeCase.sentenceCase(func.name).grey); + passingNum += 1; } else { console.log("\t✘ ".bold.red + changeCase.sentenceCase(func.name).red); + failureNum += 1; } next(); }); @@ -37,8 +41,12 @@ function runTest(testName, testObject, callback) { }); } }, function() { - console.log("1 passing".green); - console.log("1 failing".red); + if (passingNum > 0) { + console.log((passingNum + " passing").green); + } + if (failureNum > 0) { + console.log((failureNum + " failing").red); + } }); } From e525eaadcc2688dc57a84b4ad13ab20aa97be93f Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 18:18:06 -0500 Subject: [PATCH 014/105] abstract test results into callbacks --- index.js | 24 +++++++++++++++++++++++- src/testRunner.js | 21 ++++++++------------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/index.js b/index.js index eaf3785691..980b58eba6 100644 --- a/index.js +++ b/index.js @@ -5,7 +5,29 @@ let Deployer = require('./src/deployer.js'); let TestRunner = require('./src/testRunner.js'); var runTest = function(contractName, contractObj, cb) { - TestRunner.runTest(contractName, contractObj, cb); + var testCallback = function(result) { + if (result.type === 'contract') { + console.log(("#" + result.value).green); + } else if (result.type === 'testPass') { + console.log("\t✓ ".green.bold + result.value.grey); + } else if (result.type === 'testFailure') { + console.log("\t✘ ".bold.red + result.value.red); + } + } + var resultsCallback = function(err, result) { + if (err) { + return cb(err); + } + if (result.passingNum > 0) { + console.log((result.passingNum + " passing").green); + } + if (result.failureNum > 0) { + console.log((result.failureNum + " failing").red); + } + cb(); + } + + TestRunner.runTest(contractName, contractObj, testCallback, resultsCallback); } var runTestFile = function(filename, web3) { diff --git a/src/testRunner.js b/src/testRunner.js index 3c047a6d02..5bc69129a5 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -2,7 +2,7 @@ var async = require('async'); var changeCase = require('change-case'); require('colors'); -function runTest(testName, testObject, callback) { +function runTest(testName, testObject, testCallback, resultsCallback) { let runList = []; let specialFunctions = ['beforeAll']; let availableFunctions = testObject._jsonInterface.filter((x) => x.type === 'function').map((x) => x.name); @@ -18,19 +18,16 @@ function runTest(testName, testObject, callback) { let passingNum = 0, failureNum = 0; - console.log(("#" + testName).green); + testCallback({type: "contract", value: testName}); async.eachOfLimit(runList, 1, function(func, index, next) { let method = testObject.methods[func.name].apply(testObject.methods[func.name], []); if (func.constant) { method.call().then((result) => { if (result) { - // TODO: should instead be returned in a callback, the caller can - // decide how to handle the output (so works both in console and - // browser) - console.log("\t✓ ".green.bold + changeCase.sentenceCase(func.name).grey); + testCallback({type: "testPass", value: changeCase.sentenceCase(func.name)}); passingNum += 1; } else { - console.log("\t✘ ".bold.red + changeCase.sentenceCase(func.name).red); + testCallback({type: "testFailure", value: changeCase.sentenceCase(func.name)}); failureNum += 1; } next(); @@ -41,12 +38,10 @@ function runTest(testName, testObject, callback) { }); } }, function() { - if (passingNum > 0) { - console.log((passingNum + " passing").green); - } - if (failureNum > 0) { - console.log((failureNum + " failing").red); - } + resultsCallback(null, { + passingNum: passingNum, + failureNum: failureNum + }); }); } From 2ee6ec8a0e4248dd0a606886bb179315efba9693 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 18:23:51 -0500 Subject: [PATCH 015/105] support beforeEach; if condition for adding special functions --- src/testRunner.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/testRunner.js b/src/testRunner.js index 5bc69129a5..cb9e0ae4ab 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -8,11 +8,14 @@ function runTest(testName, testObject, testCallback, resultsCallback) { let availableFunctions = testObject._jsonInterface.filter((x) => x.type === 'function').map((x) => x.name); let testFunctions = testObject._jsonInterface.filter((x) => specialFunctions.indexOf(x.name) < 0 && x.type === 'function'); - if (availableFunctions.indexOf("beforeAll")) { + if (availableFunctions.indexOf("beforeAll") >= 0) { runList.push({name: 'beforeAll', type: 'internal', constant: false}); } for (let func of testFunctions) { + if (availableFunctions.indexOf("beforeEach") >= 0) { + runList.push({name: 'beforeEach', type: 'internal', constant: false}); + } runList.push({name: func.name, type: 'test', constant: func.constant}); } From 7396ff66957803857bfed94dae4ab112fc9fde74 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 1 Feb 2018 18:33:51 -0500 Subject: [PATCH 016/105] move console printing test callbacks into runFile method --- index.js | 49 ++++++++++++++++++++++++----------------------- src/testRunner.js | 1 - 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/index.js b/index.js index 980b58eba6..a11967be6c 100644 --- a/index.js +++ b/index.js @@ -1,32 +1,11 @@ var async = require('async'); +require('colors'); let Compiler = require('./src/compiler.js'); let Deployer = require('./src/deployer.js'); let TestRunner = require('./src/testRunner.js'); -var runTest = function(contractName, contractObj, cb) { - var testCallback = function(result) { - if (result.type === 'contract') { - console.log(("#" + result.value).green); - } else if (result.type === 'testPass') { - console.log("\t✓ ".green.bold + result.value.grey); - } else if (result.type === 'testFailure') { - console.log("\t✘ ".bold.red + result.value.red); - } - } - var resultsCallback = function(err, result) { - if (err) { - return cb(err); - } - if (result.passingNum > 0) { - console.log((result.passingNum + " passing").green); - } - if (result.failureNum > 0) { - console.log((result.failureNum + " failing").red); - } - cb(); - } - +var runTest = function(contractName, contractObj, testCallback, resultsCallback) { TestRunner.runTest(contractName, contractObj, testCallback, resultsCallback); } @@ -39,7 +18,29 @@ var runTestFile = function(filename, web3) { Deployer.deployAll(compilationResult, web3, next); }, function runTests(contracts, next) { - runTest("SimpleStorage", contracts.MyTest, next); + var testCallback = function(result) { + if (result.type === 'contract') { + console.log(("#" + result.value).green); + } else if (result.type === 'testPass') { + console.log("\t✓ ".green.bold + result.value.grey); + } else if (result.type === 'testFailure') { + console.log("\t✘ ".bold.red + result.value.red); + } + } + var resultsCallback = function(err, result) { + if (err) { + return cb(err); + } + if (result.passingNum > 0) { + console.log((result.passingNum + " passing").green); + } + if (result.failureNum > 0) { + console.log((result.failureNum + " failing").red); + } + next(); + } + + runTest(filename, contracts.MyTest, testCallback, resultsCallback); } ], function() { }); diff --git a/src/testRunner.js b/src/testRunner.js index cb9e0ae4ab..014047a133 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -1,6 +1,5 @@ var async = require('async'); var changeCase = require('change-case'); -require('colors'); function runTest(testName, testObject, testCallback, resultsCallback) { let runList = []; From 349080c98feef5c184572dee9049c846e697cb5b Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 15:25:37 -0500 Subject: [PATCH 017/105] add tests --- index.js | 1 + tests/testRunner.js | 56 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 tests/testRunner.js diff --git a/index.js b/index.js index a11967be6c..0cdb73c640 100644 --- a/index.js +++ b/index.js @@ -40,6 +40,7 @@ var runTestFile = function(filename, web3) { next(); } + // TODO: MyTest should be determined from filename runTest(filename, contracts.MyTest, testCallback, resultsCallback); } ], function() { diff --git a/tests/testRunner.js b/tests/testRunner.js new file mode 100644 index 0000000000..550f626d17 --- /dev/null +++ b/tests/testRunner.js @@ -0,0 +1,56 @@ +const async = require('async'); +const Web3 = require('web3'); +const assert = require('assert'); + +let Compiler = require('../src/compiler.js'); +let Deployer = require('../src/deployer.js'); +let TestRunner = require('../src/testRunner.js'); + +function compileAndDeploy(filename, callback) { + let web3 = new Web3(); + web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); + + async.waterfall([ + function compile(next) { + Compiler.compileFile(filename, next); + }, + function deployAllContracts(compilationResult, next) { + Deployer.deployAll(compilationResult, web3, next); + } + ], function(_err, contracts) { + callback(null, contracts); + }); +} + +describe('testRunner', function() { + describe("simple test", function() { + let filename = 'examples/simple_storage_test.sol' + let tests = [], results = {}; + + before(function(done) { + compileAndDeploy(filename, function(_err, contracts) { + var testCallback = function() { + console.log("testCallback"); + console.dir(arguments); + tests.push(arguments); + } + var resultsCallback = function(_err, _results) { + console.log("resultsCallback"); + console.dir(_results); + results = _results; + done(); + } + TestRunner.runTest(filename, contracts.MyTest, testCallback, resultsCallback); + }); + }); + + it('should 1 passing test', function() { + assert.equal(results.passingNum, 1) + }); + + it('should 1 passing test', function() { + assert.equal(results.failureNum, 1) + }); + + }); +}); From 490db5a7d72f656db8e195cd48d771f68205b036 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 15:54:38 -0500 Subject: [PATCH 018/105] add beforeEach; update tests --- src/testRunner.js | 4 +- tests/examples_1/simple_storage.sol | 17 +++++++ tests/examples_1/simple_storage_test.sol | 23 ++++++++++ tests/examples_2/simple_storage.sol | 17 +++++++ tests/examples_2/simple_storage_test.sol | 28 ++++++++++++ tests/testRunner.js | 58 ++++++++++++++++++++---- 6 files changed, 136 insertions(+), 11 deletions(-) create mode 100644 tests/examples_1/simple_storage.sol create mode 100644 tests/examples_1/simple_storage_test.sol create mode 100644 tests/examples_2/simple_storage.sol create mode 100644 tests/examples_2/simple_storage_test.sol diff --git a/src/testRunner.js b/src/testRunner.js index 014047a133..110fc32ac2 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -3,8 +3,8 @@ var changeCase = require('change-case'); function runTest(testName, testObject, testCallback, resultsCallback) { let runList = []; - let specialFunctions = ['beforeAll']; - let availableFunctions = testObject._jsonInterface.filter((x) => x.type === 'function').map((x) => x.name); + let specialFunctions = ['beforeAll', 'beforeEach']; + let availableFunctions = testObject._jsonInterface.reverse().filter((x) => x.type === 'function').map((x) => x.name); let testFunctions = testObject._jsonInterface.filter((x) => specialFunctions.indexOf(x.name) < 0 && x.type === 'function'); if (availableFunctions.indexOf("beforeAll") >= 0) { diff --git a/tests/examples_1/simple_storage.sol b/tests/examples_1/simple_storage.sol new file mode 100644 index 0000000000..4f8a84a5b1 --- /dev/null +++ b/tests/examples_1/simple_storage.sol @@ -0,0 +1,17 @@ +pragma solidity ^0.4.7; +contract SimpleStorage { + uint public storedData; + + function SimpleStorage() public { + storedData = 100; + } + + function set(uint x) public { + storedData = x; + } + + function get() public view returns (uint retVal) { + return storedData; + } + +} diff --git a/tests/examples_1/simple_storage_test.sol b/tests/examples_1/simple_storage_test.sol new file mode 100644 index 0000000000..2bab305c4f --- /dev/null +++ b/tests/examples_1/simple_storage_test.sol @@ -0,0 +1,23 @@ +pragma solidity ^0.4.7; +import "./tests.sol"; +import "./simple_storage.sol"; + +contract MyTest { + SimpleStorage foo; + + function beforeAll() { + foo = new SimpleStorage(); + } + + function initialValueShouldBe100() public constant returns (bool) { + //return Assert.equal(foo.get(), 100, "initial value is not correct"); + return foo.get() == 100; + } + + function initialValueShouldBe200() public constant returns (bool) { + //return Assert.equal(foo.get(), 200, "initial value is not correct"); + return foo.get() == 200; + } + +} + diff --git a/tests/examples_2/simple_storage.sol b/tests/examples_2/simple_storage.sol new file mode 100644 index 0000000000..4f8a84a5b1 --- /dev/null +++ b/tests/examples_2/simple_storage.sol @@ -0,0 +1,17 @@ +pragma solidity ^0.4.7; +contract SimpleStorage { + uint public storedData; + + function SimpleStorage() public { + storedData = 100; + } + + function set(uint x) public { + storedData = x; + } + + function get() public view returns (uint retVal) { + return storedData; + } + +} diff --git a/tests/examples_2/simple_storage_test.sol b/tests/examples_2/simple_storage_test.sol new file mode 100644 index 0000000000..016b3c7f5d --- /dev/null +++ b/tests/examples_2/simple_storage_test.sol @@ -0,0 +1,28 @@ +pragma solidity ^0.4.7; +import "./tests.sol"; +import "./simple_storage.sol"; + +contract MyTest { + SimpleStorage foo; + uint i = 0; + + function beforeEach() { + foo = new SimpleStorage(); + if (i == 1) { + foo.set(200); + } + i += 1; + } + + function initialValueShouldBe100() public constant returns (bool) { + //return Assert.equal(foo.get(), 100, "initial value is not correct"); + return foo.get() == 100; + } + + function initialValueShouldBe200() public constant returns (bool) { + //return Assert.equal(foo.get(), 200, "initial value is not correct"); + return foo.get() == 200; + } + +} + diff --git a/tests/testRunner.js b/tests/testRunner.js index 550f626d17..b645bd2ba3 100644 --- a/tests/testRunner.js +++ b/tests/testRunner.js @@ -23,20 +23,16 @@ function compileAndDeploy(filename, callback) { } describe('testRunner', function() { - describe("simple test", function() { - let filename = 'examples/simple_storage_test.sol' + describe("test with beforeAll", function() { + let filename = 'tests/examples_1/simple_storage_test.sol' let tests = [], results = {}; before(function(done) { compileAndDeploy(filename, function(_err, contracts) { - var testCallback = function() { - console.log("testCallback"); - console.dir(arguments); - tests.push(arguments); + var testCallback = function(test) { + tests.push(test); } var resultsCallback = function(_err, _results) { - console.log("resultsCallback"); - console.dir(_results); results = _results; done(); } @@ -48,9 +44,53 @@ describe('testRunner', function() { assert.equal(results.passingNum, 1) }); - it('should 1 passing test', function() { + it('should 1 failing test', function() { assert.equal(results.failureNum, 1) }); + it('should returns 3 messages', function() { + assert.deepEqual(tests, [ + { type: 'contract', value: 'tests/examples_1/simple_storage_test.sol' }, + { type: 'testPass', value: 'Initial value should be100' }, + { type: 'testFailure', value: 'Initial value should be200' } + ]); + }); + }); + + describe("test with beforeEach", function() { + let filename = 'tests/examples_2/simple_storage_test.sol' + let tests = [], results = {}; + + before(function(done) { + compileAndDeploy(filename, function(_err, contracts) { + var testCallback = function(test) { + tests.push(test); + } + var resultsCallback = function(_err, _results) { + results = _results; + done(); + } + TestRunner.runTest(filename, contracts.MyTest, testCallback, resultsCallback); + }); + }); + + it('should 2 passing tests', function() { + assert.equal(results.passingNum, 2) + }); + + it('should 0 failing tests', function() { + assert.equal(results.failureNum, 0) + }); + + it('should returns 3 messages', function() { + assert.deepEqual(tests, [ + { type: 'contract', value: 'tests/examples_2/simple_storage_test.sol' }, + { type: 'testPass', value: 'Initial value should be100' }, + { type: 'testPass', value: 'Initial value should be200' } + ]); + }); + + }); + }); From e2fb6464ca5e26865e54fc5f1901cfcb8ce646c5 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 16:02:44 -0500 Subject: [PATCH 019/105] update test --- tests/testRunner.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/testRunner.js b/tests/testRunner.js index b645bd2ba3..0016f2d3d0 100644 --- a/tests/testRunner.js +++ b/tests/testRunner.js @@ -36,7 +36,7 @@ describe('testRunner', function() { results = _results; done(); } - TestRunner.runTest(filename, contracts.MyTest, testCallback, resultsCallback); + TestRunner.runTest('MyTest', contracts.MyTest, testCallback, resultsCallback); }); }); @@ -50,7 +50,7 @@ describe('testRunner', function() { it('should returns 3 messages', function() { assert.deepEqual(tests, [ - { type: 'contract', value: 'tests/examples_1/simple_storage_test.sol' }, + { type: 'contract', value: 'MyTest' }, { type: 'testPass', value: 'Initial value should be100' }, { type: 'testFailure', value: 'Initial value should be200' } ]); @@ -71,7 +71,7 @@ describe('testRunner', function() { results = _results; done(); } - TestRunner.runTest(filename, contracts.MyTest, testCallback, resultsCallback); + TestRunner.runTest("MyTest", contracts.MyTest, testCallback, resultsCallback); }); }); @@ -85,7 +85,7 @@ describe('testRunner', function() { it('should returns 3 messages', function() { assert.deepEqual(tests, [ - { type: 'contract', value: 'tests/examples_2/simple_storage_test.sol' }, + { type: 'contract', value: 'MyTest' }, { type: 'testPass', value: 'Initial value should be100' }, { type: 'testPass', value: 'Initial value should be200' } ]); From 25d308438c888723a96120128e62983fd0998ca3 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 16:23:18 -0500 Subject: [PATCH 020/105] run all contracts in test file; determine contractName --- index.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index 0cdb73c640..132850a63f 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,5 @@ -var async = require('async'); +const async = require('async'); +const path = require('path'); require('colors'); let Compiler = require('./src/compiler.js'); @@ -15,9 +16,16 @@ var runTestFile = function(filename, web3) { Compiler.compileFile(filename, next); }, function deployAllContracts(compilationResult, next) { - Deployer.deployAll(compilationResult, web3, next); + Deployer.deployAll(compilationResult, web3, function(err, contracts) { + if (err) { + next(err); + } + + let contractsToTest = Object.keys(compilationResult[path.basename(filename)]); + next(null, contractsToTest, contracts); + }); }, - function runTests(contracts, next) { + function runTests(contractsToTest, contracts, next) { var testCallback = function(result) { if (result.type === 'contract') { console.log(("#" + result.value).green); @@ -37,11 +45,11 @@ var runTestFile = function(filename, web3) { if (result.failureNum > 0) { console.log((result.failureNum + " failing").red); } - next(); } - // TODO: MyTest should be determined from filename - runTest(filename, contracts.MyTest, testCallback, resultsCallback); + async.eachLimit(contractsToTest, 1, (contractName, cb) => { + runTest(contractName, contracts[contractName], testCallback, resultsCallback); + }, next); } ], function() { }); From 5c64c6c5b60a6004efd0a78d168834f278ef200e Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 17:02:36 -0500 Subject: [PATCH 021/105] look directory for tests and run each one; update log output --- examples/simple_storage2_test.sol | 29 +++++++++++++++ examples/simple_storage_test.sol | 4 +- index.js | 61 ++++++++++++++++++++++++++++++- run.js | 8 +++- src/compiler.js | 40 +++++++++++++++++++- 5 files changed, 136 insertions(+), 6 deletions(-) create mode 100644 examples/simple_storage2_test.sol diff --git a/examples/simple_storage2_test.sol b/examples/simple_storage2_test.sol new file mode 100644 index 0000000000..d0e1a2b13e --- /dev/null +++ b/examples/simple_storage2_test.sol @@ -0,0 +1,29 @@ +pragma solidity ^0.4.7; +import "./tests.sol"; +import "./simple_storage.sol"; + +contract MyTest2 { + SimpleStorage foo; + uint i = 0; + + function beforeEach() { + foo = new SimpleStorage(); + if (i == 1) { + foo.set(200); + } + i += 1; + } + + function initialValueShouldBe100() public constant returns (bool) { + //return Assert.equal(foo.get(), 100, "initial value is not correct"); + return foo.get() == 100; + } + + function initialValueShouldBe200() public constant returns (bool) { + //return Assert.equal(foo.get(), 200, "initial value is not correct"); + return foo.get() == 200; + } + +} + + diff --git a/examples/simple_storage_test.sol b/examples/simple_storage_test.sol index 0c5cdbaa17..2bab305c4f 100644 --- a/examples/simple_storage_test.sol +++ b/examples/simple_storage_test.sol @@ -11,12 +11,12 @@ contract MyTest { function initialValueShouldBe100() public constant returns (bool) { //return Assert.equal(foo.get(), 100, "initial value is not correct"); - return true; + return foo.get() == 100; } function initialValueShouldBe200() public constant returns (bool) { //return Assert.equal(foo.get(), 200, "initial value is not correct"); - return false; + return foo.get() == 200; } } diff --git a/index.js b/index.js index 132850a63f..eeae90067d 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,6 @@ const async = require('async'); const path = require('path'); +const fs = require('fs'); require('colors'); let Compiler = require('./src/compiler.js'); @@ -28,7 +29,7 @@ var runTestFile = function(filename, web3) { function runTests(contractsToTest, contracts, next) { var testCallback = function(result) { if (result.type === 'contract') { - console.log(("#" + result.value).green); + console.log(("\t " + result.value).green); } else if (result.type === 'testPass') { console.log("\t✓ ".green.bold + result.value.grey); } else if (result.type === 'testFailure') { @@ -55,7 +56,65 @@ var runTestFile = function(filename, web3) { }); } +var runTestFiles = function(directory, web3) { + async.waterfall([ + function compile(next) { + Compiler.compileFiles(directory, next); + }, + function deployAllContracts(compilationResult, next) { + Deployer.deployAll(compilationResult, web3, function(err, contracts) { + if (err) { + next(err); + } + + let contractsToTest = []; + fs.readdirSync(directory).forEach(filename => { + if (filename.indexOf('_test.sol') < 0) { + return; + } + Object.keys(compilationResult[path.basename(filename)]).forEach(contractName => { + contractsToTest.push(contractName) + }) + }) + + next(null, contractsToTest, contracts); + }); + }, + function runTests(contractsToTest, contracts, next) { + var testCallback = function(result) { + if (result.type === 'contract') { + console.log("\n " + result.value); + } else if (result.type === 'testPass') { + console.log("\t✓ ".green.bold + result.value.grey); + } else if (result.type === 'testFailure') { + console.log("\t✘ ".bold.red + result.value.red); + } + } + var resultsCallback = function(_err, result, cb) { + if (result.passingNum > 0) { + console.log((result.passingNum + " passing").green); + } + if (result.failureNum > 0) { + console.log((result.failureNum + " failing").red); + } + cb(); + } + + async.eachOfLimit(contractsToTest, 1, (contractName, index, cb) => { + runTest(contractName, contracts[contractName], testCallback, (err, result) => { + if (err) { + return cb(err); + } + resultsCallback(null, result, cb); + }); + }, next); + } + ], function() { + }); +} + module.exports = { runTestFile: runTestFile, + runTestFiles: runTestFiles, runTest: runTest }; diff --git a/run.js b/run.js index 2f1aa5ed8e..878db99033 100644 --- a/run.js +++ b/run.js @@ -1,11 +1,17 @@ const commander = require('commander'); const Web3 = require('web3'); const RemixTests = require('./index.js'); +const fs = require('fs'); commander.action(function (filename) { let web3 = new Web3(); web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); - RemixTests.runTestFile(filename, web3); + + if (fs.lstatSync(filename).isDirectory()) { + RemixTests.runTestFiles(filename, web3); + } else { + RemixTests.runTestFile(filename, web3); + } }); if (!process.argv.slice(2).length) { diff --git a/src/compiler.js b/src/compiler.js index 96b5bb05fa..16c20a5164 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -7,6 +7,7 @@ let compilerInput = remixLib.helpers.compiler; let RemixCompiler = require('remix-solidity').Compiler; // TODO: replace this with remix's own compiler code + function compileFile(filename, cb) { let compiler; const sources = { @@ -32,7 +33,7 @@ function compileFile(filename, cb) { compiler.event.register('compilationFinished', this, function (success, data, source) { next(null, data); }); - compiler.compile(sources, "examples/"); + compiler.compile(sources, filepath); } ], function(err, result) { cb(err, result.contracts); @@ -40,7 +41,42 @@ function compileFile(filename, cb) { } +function compileFiles(directory, cb) { + let compiler; + const sources = { + "tests.sol": {content: fs.readFileSync("sol/tests.sol").toString()}, + } + + // TODO: for now assumes filepath dir contains all tests, later all this + // should be replaced with remix's & browser solidity compiler code + fs.readdirSync(directory).forEach(file => { + sources[file] = {content: fs.readFileSync(path.join(directory, file)).toString()} + }); + + async.waterfall([ + function loadCompiler(next) { + compiler = new RemixCompiler(); + compiler.onInternalCompilerLoaded(); + //compiler.event.register('compilerLoaded', this, function (version) { + next(); + //}); + }, + function doCompilation(next) { + compiler.event.register('compilationFinished', this, function (success, data, source) { + next(null, data); + }); + compiler.compile(sources, directory); + } + ], function(err, result) { + cb(err, result.contracts); + }); + +} + + + module.exports = { - compileFile: compileFile + compileFile: compileFile, + compileFiles: compileFiles } From 5ceb83a597315e2054694d4093bf14c59526cba6 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 17:10:16 -0500 Subject: [PATCH 022/105] add npm tasks --- package.json | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index dd89c16653..d932ef47bd 100644 --- a/package.json +++ b/package.json @@ -3,15 +3,27 @@ "version": "1.0.0", "description": "", "main": "index.js", + "contributors": [ + { + "name": "Iuri Matias", + "email": "iuri.matias@gmail.com" + }, + { + "name": "Yann Levreau", + "email": "yann@ethdev.com" + } + ], "scripts": { "downloadsolc": "cd node_modules/solc && (test -e soljson.js || wget https://ethereum.github.io/solc-bin/soljson.js) && cd ..", - "prepublish": "npm-run-all -ls downloadsolc" + "prepublish": "npm-run-all -ls downloadsolc", + "lint": "standard", + "test": "standard && mocha tests/ -t 300000" }, "repository": { "type": "git", "url": "git+https://github.com/ethereum/remix-tests.git" }, - "author": "", + "author": "Remix Team", "license": "ISC", "bugs": { "url": "https://github.com/ethereum/remix-tests/issues" @@ -22,10 +34,10 @@ "colors": "^1.1.2", "commander": "^2.13.0", "ethereumjs-vm": "^2.3.2", - "npm-run-all": "^4.1.2", "remix-lib": "^0.1.2", "remix-solidity": "../remix/remix-solidity", "solc": "https://github.com/ethereum/solc-js", + "standard": "^10.0.3", "web3": "^1.0.0-beta.27" } } From 8a7e58c36677263d9284fe926c678f39658fef94 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 17:11:53 -0500 Subject: [PATCH 023/105] comply with linter --- index.js | 114 +++++++++++++++++++++--------------------- run.js | 23 ++++----- src/compiler.js | 87 +++++++++++++++----------------- src/deployer.js | 86 ++++++++++++++++---------------- src/testRunner.js | 54 ++++++++++---------- tests/testRunner.js | 119 +++++++++++++++++++++----------------------- 6 files changed, 236 insertions(+), 247 deletions(-) diff --git a/index.js b/index.js index eeae90067d..90d3ea10aa 100644 --- a/index.js +++ b/index.js @@ -1,120 +1,120 @@ -const async = require('async'); -const path = require('path'); -const fs = require('fs'); -require('colors'); +const async = require('async') +const path = require('path') +const fs = require('fs') +require('colors') -let Compiler = require('./src/compiler.js'); -let Deployer = require('./src/deployer.js'); -let TestRunner = require('./src/testRunner.js'); +let Compiler = require('./src/compiler.js') +let Deployer = require('./src/deployer.js') +let TestRunner = require('./src/testRunner.js') -var runTest = function(contractName, contractObj, testCallback, resultsCallback) { - TestRunner.runTest(contractName, contractObj, testCallback, resultsCallback); +var runTest = function (contractName, contractObj, testCallback, resultsCallback) { + TestRunner.runTest(contractName, contractObj, testCallback, resultsCallback) } -var runTestFile = function(filename, web3) { +var runTestFile = function (filename, web3) { async.waterfall([ - function compile(next) { - Compiler.compileFile(filename, next); + function compile (next) { + Compiler.compileFile(filename, next) }, - function deployAllContracts(compilationResult, next) { - Deployer.deployAll(compilationResult, web3, function(err, contracts) { + function deployAllContracts (compilationResult, next) { + Deployer.deployAll(compilationResult, web3, function (err, contracts) { if (err) { - next(err); + next(err) } - let contractsToTest = Object.keys(compilationResult[path.basename(filename)]); - next(null, contractsToTest, contracts); - }); + let contractsToTest = Object.keys(compilationResult[path.basename(filename)]) + next(null, contractsToTest, contracts) + }) }, - function runTests(contractsToTest, contracts, next) { - var testCallback = function(result) { + function runTests (contractsToTest, contracts, next) { + var testCallback = function (result) { if (result.type === 'contract') { - console.log(("\t " + result.value).green); + console.log(('\t ' + result.value).green) } else if (result.type === 'testPass') { - console.log("\t✓ ".green.bold + result.value.grey); + console.log('\t✓ '.green.bold + result.value.grey) } else if (result.type === 'testFailure') { - console.log("\t✘ ".bold.red + result.value.red); + console.log('\t✘ '.bold.red + result.value.red) } } - var resultsCallback = function(err, result) { + var resultsCallback = function (err, result) { if (err) { - return cb(err); + return cb(err) } if (result.passingNum > 0) { - console.log((result.passingNum + " passing").green); + console.log((result.passingNum + ' passing').green) } if (result.failureNum > 0) { - console.log((result.failureNum + " failing").red); + console.log((result.failureNum + ' failing').red) } } async.eachLimit(contractsToTest, 1, (contractName, cb) => { - runTest(contractName, contracts[contractName], testCallback, resultsCallback); - }, next); + runTest(contractName, contracts[contractName], testCallback, resultsCallback) + }, next) } - ], function() { - }); + ], function () { + }) } -var runTestFiles = function(directory, web3) { +var runTestFiles = function (directory, web3) { async.waterfall([ - function compile(next) { - Compiler.compileFiles(directory, next); + function compile (next) { + Compiler.compileFiles(directory, next) }, - function deployAllContracts(compilationResult, next) { - Deployer.deployAll(compilationResult, web3, function(err, contracts) { + function deployAllContracts (compilationResult, next) { + Deployer.deployAll(compilationResult, web3, function (err, contracts) { if (err) { - next(err); + next(err) } - let contractsToTest = []; + let contractsToTest = [] fs.readdirSync(directory).forEach(filename => { if (filename.indexOf('_test.sol') < 0) { - return; + return } Object.keys(compilationResult[path.basename(filename)]).forEach(contractName => { contractsToTest.push(contractName) }) }) - next(null, contractsToTest, contracts); - }); + next(null, contractsToTest, contracts) + }) }, - function runTests(contractsToTest, contracts, next) { - var testCallback = function(result) { + function runTests (contractsToTest, contracts, next) { + var testCallback = function (result) { if (result.type === 'contract') { - console.log("\n " + result.value); + console.log('\n ' + result.value) } else if (result.type === 'testPass') { - console.log("\t✓ ".green.bold + result.value.grey); + console.log('\t✓ '.green.bold + result.value.grey) } else if (result.type === 'testFailure') { - console.log("\t✘ ".bold.red + result.value.red); + console.log('\t✘ '.bold.red + result.value.red) } } - var resultsCallback = function(_err, result, cb) { + var resultsCallback = function (_err, result, cb) { if (result.passingNum > 0) { - console.log((result.passingNum + " passing").green); + console.log((result.passingNum + ' passing').green) } if (result.failureNum > 0) { - console.log((result.failureNum + " failing").red); + console.log((result.failureNum + ' failing').red) } - cb(); + cb() } async.eachOfLimit(contractsToTest, 1, (contractName, index, cb) => { runTest(contractName, contracts[contractName], testCallback, (err, result) => { if (err) { - return cb(err); + return cb(err) } - resultsCallback(null, result, cb); - }); - }, next); + resultsCallback(null, result, cb) + }) + }, next) } - ], function() { - }); + ], function () { + }) } module.exports = { runTestFile: runTestFile, runTestFiles: runTestFiles, runTest: runTest -}; +} diff --git a/run.js b/run.js index 878db99033..94f1815f1d 100644 --- a/run.js +++ b/run.js @@ -1,22 +1,21 @@ -const commander = require('commander'); -const Web3 = require('web3'); -const RemixTests = require('./index.js'); -const fs = require('fs'); +const commander = require('commander') +const Web3 = require('web3') +const RemixTests = require('./index.js') +const fs = require('fs') commander.action(function (filename) { - let web3 = new Web3(); - web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); + let web3 = new Web3() + web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')) if (fs.lstatSync(filename).isDirectory()) { - RemixTests.runTestFiles(filename, web3); + RemixTests.runTestFiles(filename, web3) } else { - RemixTests.runTestFile(filename, web3); + RemixTests.runTestFile(filename, web3) } -}); +}) if (!process.argv.slice(2).length) { - console.log("please specify filename"); + console.log('please specify filename') } -commander.parse(process.argv); - +commander.parse(process.argv) diff --git a/src/compiler.js b/src/compiler.js index 16c20a5164..c5f2f6ba18 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -1,82 +1,77 @@ -let fs = require('fs'); -var async = require('async'); -var path = require('path'); +let fs = require('fs') +var async = require('async') +var path = require('path') -let remixLib = require('remix-lib'); -let compilerInput = remixLib.helpers.compiler; -let RemixCompiler = require('remix-solidity').Compiler; +let remixLib = require('remix-lib') +let compilerInput = remixLib.helpers.compiler +let RemixCompiler = require('remix-solidity').Compiler // TODO: replace this with remix's own compiler code -function compileFile(filename, cb) { - let compiler; +function compileFile (filename, cb) { + let compiler const sources = { - "tests.sol": {content: fs.readFileSync("sol/tests.sol").toString()}, + 'tests.sol': {content: fs.readFileSync('sol/tests.sol').toString()} } // TODO: for now assumes filepath dir contains all tests, later all this // should be replaced with remix's & browser solidity compiler code - let filepath = path.dirname(filename); + let filepath = path.dirname(filename) fs.readdirSync(filepath).forEach(file => { sources[file] = {content: fs.readFileSync(path.join(filepath, file)).toString()} - }); + }) async.waterfall([ - function loadCompiler(next) { - compiler = new RemixCompiler(); - compiler.onInternalCompilerLoaded(); - //compiler.event.register('compilerLoaded', this, function (version) { - next(); - //}); + function loadCompiler (next) { + compiler = new RemixCompiler() + compiler.onInternalCompilerLoaded() + // compiler.event.register('compilerLoaded', this, function (version) { + next() + // }); }, - function doCompilation(next) { + function doCompilation (next) { compiler.event.register('compilationFinished', this, function (success, data, source) { - next(null, data); - }); - compiler.compile(sources, filepath); + next(null, data) + }) + compiler.compile(sources, filepath) } - ], function(err, result) { - cb(err, result.contracts); - }); - + ], function (err, result) { + cb(err, result.contracts) + }) } -function compileFiles(directory, cb) { - let compiler; +function compileFiles (directory, cb) { + let compiler const sources = { - "tests.sol": {content: fs.readFileSync("sol/tests.sol").toString()}, + 'tests.sol': {content: fs.readFileSync('sol/tests.sol').toString()} } // TODO: for now assumes filepath dir contains all tests, later all this // should be replaced with remix's & browser solidity compiler code fs.readdirSync(directory).forEach(file => { sources[file] = {content: fs.readFileSync(path.join(directory, file)).toString()} - }); + }) async.waterfall([ - function loadCompiler(next) { - compiler = new RemixCompiler(); - compiler.onInternalCompilerLoaded(); - //compiler.event.register('compilerLoaded', this, function (version) { - next(); - //}); + function loadCompiler (next) { + compiler = new RemixCompiler() + compiler.onInternalCompilerLoaded() + // compiler.event.register('compilerLoaded', this, function (version) { + next() + // }); }, - function doCompilation(next) { + function doCompilation (next) { compiler.event.register('compilationFinished', this, function (success, data, source) { - next(null, data); - }); - compiler.compile(sources, directory); + next(null, data) + }) + compiler.compile(sources, directory) } - ], function(err, result) { - cb(err, result.contracts); - }); - + ], function (err, result) { + cb(err, result.contracts) + }) } - - module.exports = { compileFile: compileFile, compileFiles: compileFiles } - diff --git a/src/deployer.js b/src/deployer.js index 782368bce0..b550cc343e 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -1,80 +1,78 @@ -var async = require('async'); +var async = require('async') // TODO: replace this with remix's own deployer code -function deployAll(compileResult, web3, callback) { - let compiledObject = {}, contracts = {}, accounts; +function deployAll (compileResult, web3, callback) { + let compiledObject = {}, contracts = {}, accounts async.waterfall([ - function getAccountList(next) { + function getAccountList (next) { web3.eth.getAccounts((err, _accounts) => { - accounts = _accounts; - next(); - }); + accounts = _accounts + next() + }) }, - function getContractData(next) { + function getContractData (next) { for (let contractFile in compileResult) { for (let contractName in compileResult[contractFile]) { - let contract = compileResult[contractFile][contractName]; + let contract = compileResult[contractFile][contractName] - const className = contractName; - const filename = contractFile; + const className = contractName + const filename = contractFile + let abi = contract.abi + let code = contract.evm.bytecode.object - let abi = contract.abi; - let code = contract.evm.bytecode.object; - - compiledObject[className] = {}; - compiledObject[className].abi = abi; - compiledObject[className].code = code; - compiledObject[className].filename = filename; - compiledObject[className].className = className; + compiledObject[className] = {} + compiledObject[className].abi = abi + compiledObject[className].code = code + compiledObject[className].filename = filename + compiledObject[className].className = className } } - next(); + next() }, - function deployContracts(next) { - async.eachOfLimit(compiledObject, 1, function(contract, contractName, nextEach) { - let contractObject = new web3.eth.Contract(contract.abi); + function deployContracts (next) { + async.eachOfLimit(compiledObject, 1, function (contract, contractName, nextEach) { + let contractObject = new web3.eth.Contract(contract.abi) - let contractCode = "0x" + contract.code; + let contractCode = '0x' + contract.code // TODO: temporary code, and terrible if the contracts are not in order... for (let name in compiledObject) { - let contractObj = compiledObject[name]; - let linkReference = '__' + contractObj.filename + ":" + contractObj.className; - let toReplace = linkReference + "_".repeat(40 - linkReference.length); + let contractObj = compiledObject[name] + let linkReference = '__' + contractObj.filename + ':' + contractObj.className + let toReplace = linkReference + '_'.repeat(40 - linkReference.length) if (contractCode.indexOf(linkReference) < 0) { continue } if (!contractObj.deployedAddress) { - throw new Error("linking not found for " + name + " when deploying " + contractName); + throw new Error('linking not found for ' + name + ' when deploying ' + contractName) } - contractCode = contractCode.replace(new RegExp(toReplace, "g"), contractObj.deployedAddress) + contractCode = contractCode.replace(new RegExp(toReplace, 'g'), contractObj.deployedAddress) } contractObject.deploy({arguments: [], data: contractCode}).send({ from: accounts[0], gas: 4000 * 1000 - }).on('receipt', function(receipt) { - contractObject.options.address = receipt.contractAddress; - contractObject.options.from = accounts[0]; - contractObject.options.gas = 4000*1000; - compiledObject[contractName].deployedAddress = receipt.contractAddress; - - contracts[contractName] = contractObject; - - nextEach(); - }); - }, function() { - next(null, contracts); - }); + }).on('receipt', function (receipt) { + contractObject.options.address = receipt.contractAddress + contractObject.options.from = accounts[0] + contractObject.options.gas = 4000 * 1000 + compiledObject[contractName].deployedAddress = receipt.contractAddress + + contracts[contractName] = contractObject + + nextEach() + }) + }, function () { + next(null, contracts) + }) } - ], callback); - + ], callback) } module.exports = { diff --git a/src/testRunner.js b/src/testRunner.js index 110fc32ac2..324ed035a0 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -1,50 +1,50 @@ -var async = require('async'); -var changeCase = require('change-case'); +var async = require('async') +var changeCase = require('change-case') -function runTest(testName, testObject, testCallback, resultsCallback) { - let runList = []; - let specialFunctions = ['beforeAll', 'beforeEach']; - let availableFunctions = testObject._jsonInterface.reverse().filter((x) => x.type === 'function').map((x) => x.name); - let testFunctions = testObject._jsonInterface.filter((x) => specialFunctions.indexOf(x.name) < 0 && x.type === 'function'); +function runTest (testName, testObject, testCallback, resultsCallback) { + let runList = [] + let specialFunctions = ['beforeAll', 'beforeEach'] + let availableFunctions = testObject._jsonInterface.reverse().filter((x) => x.type === 'function').map((x) => x.name) + let testFunctions = testObject._jsonInterface.filter((x) => specialFunctions.indexOf(x.name) < 0 && x.type === 'function') - if (availableFunctions.indexOf("beforeAll") >= 0) { - runList.push({name: 'beforeAll', type: 'internal', constant: false}); + if (availableFunctions.indexOf('beforeAll') >= 0) { + runList.push({name: 'beforeAll', type: 'internal', constant: false}) } for (let func of testFunctions) { - if (availableFunctions.indexOf("beforeEach") >= 0) { - runList.push({name: 'beforeEach', type: 'internal', constant: false}); + if (availableFunctions.indexOf('beforeEach') >= 0) { + runList.push({name: 'beforeEach', type: 'internal', constant: false}) } - runList.push({name: func.name, type: 'test', constant: func.constant}); + runList.push({name: func.name, type: 'test', constant: func.constant}) } - let passingNum = 0, failureNum = 0; + let passingNum = 0, failureNum = 0 - testCallback({type: "contract", value: testName}); - async.eachOfLimit(runList, 1, function(func, index, next) { - let method = testObject.methods[func.name].apply(testObject.methods[func.name], []); + testCallback({type: 'contract', value: testName}) + async.eachOfLimit(runList, 1, function (func, index, next) { + let method = testObject.methods[func.name].apply(testObject.methods[func.name], []) if (func.constant) { method.call().then((result) => { if (result) { - testCallback({type: "testPass", value: changeCase.sentenceCase(func.name)}); - passingNum += 1; + testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name)}) + passingNum += 1 } else { - testCallback({type: "testFailure", value: changeCase.sentenceCase(func.name)}); - failureNum += 1; + testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name)}) + failureNum += 1 } - next(); - }); + next() + }) } else { method.send().then(() => { - next(); - }); + next() + }) } - }, function() { + }, function () { resultsCallback(null, { passingNum: passingNum, failureNum: failureNum - }); - }); + }) + }) } module.exports = { diff --git a/tests/testRunner.js b/tests/testRunner.js index 0016f2d3d0..8b1a76d375 100644 --- a/tests/testRunner.js +++ b/tests/testRunner.js @@ -1,96 +1,93 @@ -const async = require('async'); -const Web3 = require('web3'); -const assert = require('assert'); +const async = require('async') +const Web3 = require('web3') +const assert = require('assert') -let Compiler = require('../src/compiler.js'); -let Deployer = require('../src/deployer.js'); -let TestRunner = require('../src/testRunner.js'); +let Compiler = require('../src/compiler.js') +let Deployer = require('../src/deployer.js') +let TestRunner = require('../src/testRunner.js') -function compileAndDeploy(filename, callback) { - let web3 = new Web3(); - web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')); +function compileAndDeploy (filename, callback) { + let web3 = new Web3() + web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')) async.waterfall([ - function compile(next) { - Compiler.compileFile(filename, next); + function compile (next) { + Compiler.compileFile(filename, next) }, - function deployAllContracts(compilationResult, next) { - Deployer.deployAll(compilationResult, web3, next); + function deployAllContracts (compilationResult, next) { + Deployer.deployAll(compilationResult, web3, next) } - ], function(_err, contracts) { - callback(null, contracts); - }); + ], function (_err, contracts) { + callback(null, contracts) + }) } -describe('testRunner', function() { - describe("test with beforeAll", function() { +describe('testRunner', function () { + describe('test with beforeAll', function () { let filename = 'tests/examples_1/simple_storage_test.sol' - let tests = [], results = {}; + let tests = [], results = {} - before(function(done) { - compileAndDeploy(filename, function(_err, contracts) { - var testCallback = function(test) { - tests.push(test); + before(function (done) { + compileAndDeploy(filename, function (_err, contracts) { + var testCallback = function (test) { + tests.push(test) } - var resultsCallback = function(_err, _results) { - results = _results; - done(); + var resultsCallback = function (_err, _results) { + results = _results + done() } - TestRunner.runTest('MyTest', contracts.MyTest, testCallback, resultsCallback); - }); - }); + TestRunner.runTest('MyTest', contracts.MyTest, testCallback, resultsCallback) + }) + }) - it('should 1 passing test', function() { + it('should 1 passing test', function () { assert.equal(results.passingNum, 1) - }); + }) - it('should 1 failing test', function() { + it('should 1 failing test', function () { assert.equal(results.failureNum, 1) - }); + }) - it('should returns 3 messages', function() { + it('should returns 3 messages', function () { assert.deepEqual(tests, [ { type: 'contract', value: 'MyTest' }, { type: 'testPass', value: 'Initial value should be100' }, { type: 'testFailure', value: 'Initial value should be200' } - ]); - }); + ]) + }) + }) - }); - - describe("test with beforeEach", function() { + describe('test with beforeEach', function () { let filename = 'tests/examples_2/simple_storage_test.sol' - let tests = [], results = {}; + let tests = [], results = {} - before(function(done) { - compileAndDeploy(filename, function(_err, contracts) { - var testCallback = function(test) { - tests.push(test); + before(function (done) { + compileAndDeploy(filename, function (_err, contracts) { + var testCallback = function (test) { + tests.push(test) } - var resultsCallback = function(_err, _results) { - results = _results; - done(); + var resultsCallback = function (_err, _results) { + results = _results + done() } - TestRunner.runTest("MyTest", contracts.MyTest, testCallback, resultsCallback); - }); - }); + TestRunner.runTest('MyTest', contracts.MyTest, testCallback, resultsCallback) + }) + }) - it('should 2 passing tests', function() { + it('should 2 passing tests', function () { assert.equal(results.passingNum, 2) - }); + }) - it('should 0 failing tests', function() { + it('should 0 failing tests', function () { assert.equal(results.failureNum, 0) - }); + }) - it('should returns 3 messages', function() { + it('should returns 3 messages', function () { assert.deepEqual(tests, [ { type: 'contract', value: 'MyTest' }, { type: 'testPass', value: 'Initial value should be100' }, { type: 'testPass', value: 'Initial value should be200' } - ]); - }); - - }); - -}); + ]) + }) + }) +}) From 9d7b7ce9f4dd5180b284359cef55693d2cc61d9b Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 17:15:32 -0500 Subject: [PATCH 024/105] fix callback call in resultsCallback --- index.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/index.js b/index.js index 90d3ea10aa..4e229fd357 100644 --- a/index.js +++ b/index.js @@ -36,20 +36,23 @@ var runTestFile = function (filename, web3) { console.log('\t✘ '.bold.red + result.value.red) } } - var resultsCallback = function (err, result) { - if (err) { - return cb(err) - } + var resultsCallback = function (_err, result, cb) { if (result.passingNum > 0) { console.log((result.passingNum + ' passing').green) } if (result.failureNum > 0) { console.log((result.failureNum + ' failing').red) } + cb() } async.eachLimit(contractsToTest, 1, (contractName, cb) => { - runTest(contractName, contracts[contractName], testCallback, resultsCallback) + runTest(contractName, contracts[contractName], testCallback, (err, result) => { + if (err) { + return cb(err) + } + resultsCallback(null, result, cb) + }) }, next) } ], function () { From 9a3df247f5189264fc1c3e870bc24263d07ee042 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 17:16:59 -0500 Subject: [PATCH 025/105] remove unnecessary requires --- src/compiler.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/compiler.js b/src/compiler.js index c5f2f6ba18..0db951a6b9 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -2,8 +2,6 @@ let fs = require('fs') var async = require('async') var path = require('path') -let remixLib = require('remix-lib') -let compilerInput = remixLib.helpers.compiler let RemixCompiler = require('remix-solidity').Compiler // TODO: replace this with remix's own compiler code From 14dd2a8d66a20fb626bb8ca9a9d5fa7851ef7960 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 17:26:01 -0500 Subject: [PATCH 026/105] comply with linter; ignore tests dir --- package.json | 5 +++++ src/deployer.js | 6 ++++-- src/testRunner.js | 3 ++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index d932ef47bd..55c43c4e66 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,11 @@ "bugs": { "url": "https://github.com/ethereum/remix-tests/issues" }, + "standard": { + "ignore": [ + "tests/" + ] + }, "homepage": "https://github.com/ethereum/remix-tests#readme", "dependencies": { "change-case": "^3.0.1", diff --git a/src/deployer.js b/src/deployer.js index b550cc343e..33b2225d21 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -3,11 +3,13 @@ var async = require('async') // TODO: replace this with remix's own deployer code function deployAll (compileResult, web3, callback) { - let compiledObject = {}, contracts = {}, accounts + let compiledObject = {} + let contracts = {} + let accounts = [] async.waterfall([ function getAccountList (next) { - web3.eth.getAccounts((err, _accounts) => { + web3.eth.getAccounts((_err, _accounts) => { accounts = _accounts next() }) diff --git a/src/testRunner.js b/src/testRunner.js index 324ed035a0..799435d16e 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -18,7 +18,8 @@ function runTest (testName, testObject, testCallback, resultsCallback) { runList.push({name: func.name, type: 'test', constant: func.constant}) } - let passingNum = 0, failureNum = 0 + let passingNum = 0 + let failureNum = 0 testCallback({type: 'contract', value: testName}) async.eachOfLimit(runList, 1, function (func, index, next) { From 84a4d593a2fb3f91975a361480ff545a3fec2d3a Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 17:46:00 -0500 Subject: [PATCH 027/105] refactor: rejoin runTestFiles and runTestFile --- index.js | 81 +++++++++++++------------------------------------------- run.js | 7 ++--- 2 files changed, 20 insertions(+), 68 deletions(-) diff --git a/index.js b/index.js index 4e229fd357..a7ba1499ae 100644 --- a/index.js +++ b/index.js @@ -7,62 +7,14 @@ let Compiler = require('./src/compiler.js') let Deployer = require('./src/deployer.js') let TestRunner = require('./src/testRunner.js') -var runTest = function (contractName, contractObj, testCallback, resultsCallback) { - TestRunner.runTest(contractName, contractObj, testCallback, resultsCallback) -} - -var runTestFile = function (filename, web3) { +var runTestFiles = function(filepath, is_directory, web3) { async.waterfall([ function compile (next) { - Compiler.compileFile(filename, next) - }, - function deployAllContracts (compilationResult, next) { - Deployer.deployAll(compilationResult, web3, function (err, contracts) { - if (err) { - next(err) - } - - let contractsToTest = Object.keys(compilationResult[path.basename(filename)]) - next(null, contractsToTest, contracts) - }) - }, - function runTests (contractsToTest, contracts, next) { - var testCallback = function (result) { - if (result.type === 'contract') { - console.log(('\t ' + result.value).green) - } else if (result.type === 'testPass') { - console.log('\t✓ '.green.bold + result.value.grey) - } else if (result.type === 'testFailure') { - console.log('\t✘ '.bold.red + result.value.red) - } - } - var resultsCallback = function (_err, result, cb) { - if (result.passingNum > 0) { - console.log((result.passingNum + ' passing').green) - } - if (result.failureNum > 0) { - console.log((result.failureNum + ' failing').red) - } - cb() + if (is_directory) { + Compiler.compileFiles(filepath, next) + } else { + Compiler.compileFile(filepath, next) } - - async.eachLimit(contractsToTest, 1, (contractName, cb) => { - runTest(contractName, contracts[contractName], testCallback, (err, result) => { - if (err) { - return cb(err) - } - resultsCallback(null, result, cb) - }) - }, next) - } - ], function () { - }) -} - -var runTestFiles = function (directory, web3) { - async.waterfall([ - function compile (next) { - Compiler.compileFiles(directory, next) }, function deployAllContracts (compilationResult, next) { Deployer.deployAll(compilationResult, web3, function (err, contracts) { @@ -71,14 +23,18 @@ var runTestFiles = function (directory, web3) { } let contractsToTest = [] - fs.readdirSync(directory).forEach(filename => { - if (filename.indexOf('_test.sol') < 0) { - return - } - Object.keys(compilationResult[path.basename(filename)]).forEach(contractName => { - contractsToTest.push(contractName) + if (is_directory) { + fs.readdirSync(filepath).forEach(filename => { + if (filename.indexOf('_test.sol') < 0) { + return + } + Object.keys(compilationResult[path.basename(filename)]).forEach(contractName => { + contractsToTest.push(contractName) + }) }) - }) + } else { + contractsToTest = Object.keys(compilationResult[path.basename(filepath)]) + } next(null, contractsToTest, contracts) }) @@ -104,7 +60,7 @@ var runTestFiles = function (directory, web3) { } async.eachOfLimit(contractsToTest, 1, (contractName, index, cb) => { - runTest(contractName, contracts[contractName], testCallback, (err, result) => { + TestRunner.runTest(contractName, contracts[contractName], testCallback, (err, result) => { if (err) { return cb(err) } @@ -117,7 +73,6 @@ var runTestFiles = function (directory, web3) { } module.exports = { - runTestFile: runTestFile, runTestFiles: runTestFiles, - runTest: runTest + runTest: TestRunner.runTest } diff --git a/run.js b/run.js index 94f1815f1d..5f1cba96b7 100644 --- a/run.js +++ b/run.js @@ -7,11 +7,8 @@ commander.action(function (filename) { let web3 = new Web3() web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')) - if (fs.lstatSync(filename).isDirectory()) { - RemixTests.runTestFiles(filename, web3) - } else { - RemixTests.runTestFile(filename, web3) - } + let isDirectory = fs.lstatSync(filename).isDirectory() + RemixTests.runTestFiles(filename, isDirectory, web3) }) if (!process.argv.slice(2).length) { From 3275f1b06b6082d37de0413b6f52af2a05c4b0e6 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 17:57:33 -0500 Subject: [PATCH 028/105] refactor compiler: rejoin compileFile and compileFiles --- index.js | 10 +++------ src/compiler.js | 54 +++++++++++++-------------------------------- tests/testRunner.js | 2 +- 3 files changed, 19 insertions(+), 47 deletions(-) diff --git a/index.js b/index.js index a7ba1499ae..a9ca3245a6 100644 --- a/index.js +++ b/index.js @@ -7,14 +7,10 @@ let Compiler = require('./src/compiler.js') let Deployer = require('./src/deployer.js') let TestRunner = require('./src/testRunner.js') -var runTestFiles = function(filepath, is_directory, web3) { +var runTestFiles = function(filepath, isDirectory, web3) { async.waterfall([ function compile (next) { - if (is_directory) { - Compiler.compileFiles(filepath, next) - } else { - Compiler.compileFile(filepath, next) - } + Compiler.compileFileOrFiles(filepath, isDirectory, next) }, function deployAllContracts (compilationResult, next) { Deployer.deployAll(compilationResult, web3, function (err, contracts) { @@ -23,7 +19,7 @@ var runTestFiles = function(filepath, is_directory, web3) { } let contractsToTest = [] - if (is_directory) { + if (isDirectory) { fs.readdirSync(filepath).forEach(filename => { if (filename.indexOf('_test.sol') < 0) { return diff --git a/src/compiler.js b/src/compiler.js index 0db951a6b9..55d7f13147 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -6,49 +6,26 @@ let RemixCompiler = require('remix-solidity').Compiler // TODO: replace this with remix's own compiler code -function compileFile (filename, cb) { - let compiler - const sources = { - 'tests.sol': {content: fs.readFileSync('sol/tests.sol').toString()} - } - - // TODO: for now assumes filepath dir contains all tests, later all this - // should be replaced with remix's & browser solidity compiler code - let filepath = path.dirname(filename) - fs.readdirSync(filepath).forEach(file => { - sources[file] = {content: fs.readFileSync(path.join(filepath, file)).toString()} - }) +function compileFileOrFiles (filename, isDirectory, cb) { + let compiler, filepath - async.waterfall([ - function loadCompiler (next) { - compiler = new RemixCompiler() - compiler.onInternalCompilerLoaded() - // compiler.event.register('compilerLoaded', this, function (version) { - next() - // }); - }, - function doCompilation (next) { - compiler.event.register('compilationFinished', this, function (success, data, source) { - next(null, data) - }) - compiler.compile(sources, filepath) - } - ], function (err, result) { - cb(err, result.contracts) - }) -} - -function compileFiles (directory, cb) { - let compiler const sources = { 'tests.sol': {content: fs.readFileSync('sol/tests.sol').toString()} } // TODO: for now assumes filepath dir contains all tests, later all this // should be replaced with remix's & browser solidity compiler code - fs.readdirSync(directory).forEach(file => { - sources[file] = {content: fs.readFileSync(path.join(directory, file)).toString()} - }) + if (isDirectory) { + filepath = filename + fs.readdirSync(filename).forEach(file => { + sources[file] = {content: fs.readFileSync(path.join(filename, file)).toString()} + }) + } else { + filepath = path.dirname(filename) + fs.readdirSync(filepath).forEach(file => { + sources[file] = {content: fs.readFileSync(path.join(filepath, file)).toString()} + }) + } async.waterfall([ function loadCompiler (next) { @@ -62,7 +39,7 @@ function compileFiles (directory, cb) { compiler.event.register('compilationFinished', this, function (success, data, source) { next(null, data) }) - compiler.compile(sources, directory) + compiler.compile(sources, filepath) } ], function (err, result) { cb(err, result.contracts) @@ -70,6 +47,5 @@ function compileFiles (directory, cb) { } module.exports = { - compileFile: compileFile, - compileFiles: compileFiles + compileFileOrFiles: compileFileOrFiles } diff --git a/tests/testRunner.js b/tests/testRunner.js index 8b1a76d375..065117f4c0 100644 --- a/tests/testRunner.js +++ b/tests/testRunner.js @@ -12,7 +12,7 @@ function compileAndDeploy (filename, callback) { async.waterfall([ function compile (next) { - Compiler.compileFile(filename, next) + Compiler.compileFileOrFiles(filename, false, next) }, function deployAllContracts (compilationResult, next) { Deployer.deployAll(compilationResult, web3, next) From 7409c3aaacd87635c7c7c37e1bb9ca7558de077d Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 18:02:41 -0500 Subject: [PATCH 029/105] move determine test contracts into own method in waterfall --- index.js | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/index.js b/index.js index a9ca3245a6..93259b7d00 100644 --- a/index.js +++ b/index.js @@ -18,22 +18,25 @@ var runTestFiles = function(filepath, isDirectory, web3) { next(err) } - let contractsToTest = [] - if (isDirectory) { - fs.readdirSync(filepath).forEach(filename => { - if (filename.indexOf('_test.sol') < 0) { - return - } - Object.keys(compilationResult[path.basename(filename)]).forEach(contractName => { - contractsToTest.push(contractName) - }) + next(null, compilationResult, contracts) + }) + }, + function determineTestContractsToRun(compilationResult, contracts, next) { + let contractsToTest = [] + if (isDirectory) { + fs.readdirSync(filepath).forEach(filename => { + if (filename.indexOf('_test.sol') < 0) { + return + } + Object.keys(compilationResult[path.basename(filename)]).forEach(contractName => { + contractsToTest.push(contractName) }) - } else { - contractsToTest = Object.keys(compilationResult[path.basename(filepath)]) - } + }) + } else { + contractsToTest = Object.keys(compilationResult[path.basename(filepath)]) + } - next(null, contractsToTest, contracts) - }) + next(null, contractsToTest, contracts) }, function runTests (contractsToTest, contracts, next) { var testCallback = function (result) { From e29ea30e1a5427b04164ef9be71c1cd50611c150 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 18:09:56 -0500 Subject: [PATCH 030/105] refactor condition --- src/compiler.js | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/compiler.js b/src/compiler.js index 55d7f13147..a4a86a65e4 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -15,17 +15,11 @@ function compileFileOrFiles (filename, isDirectory, cb) { // TODO: for now assumes filepath dir contains all tests, later all this // should be replaced with remix's & browser solidity compiler code - if (isDirectory) { - filepath = filename - fs.readdirSync(filename).forEach(file => { - sources[file] = {content: fs.readFileSync(path.join(filename, file)).toString()} - }) - } else { - filepath = path.dirname(filename) - fs.readdirSync(filepath).forEach(file => { - sources[file] = {content: fs.readFileSync(path.join(filepath, file)).toString()} - }) - } + filepath = (isDirectory ? filename : path.dirname(filename)) + + fs.readdirSync(filepath).forEach(file => { + sources[file] = {content: fs.readFileSync(path.join(filepath, file)).toString()} + }) async.waterfall([ function loadCompiler (next) { From cf62c35cb70fcc7a23a36b1f5caf07a8715558c2 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 18:10:56 -0500 Subject: [PATCH 031/105] comply with linter --- index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index 93259b7d00..66500e9f2f 100644 --- a/index.js +++ b/index.js @@ -7,7 +7,7 @@ let Compiler = require('./src/compiler.js') let Deployer = require('./src/deployer.js') let TestRunner = require('./src/testRunner.js') -var runTestFiles = function(filepath, isDirectory, web3) { +var runTestFiles = function (filepath, isDirectory, web3) { async.waterfall([ function compile (next) { Compiler.compileFileOrFiles(filepath, isDirectory, next) @@ -21,7 +21,7 @@ var runTestFiles = function(filepath, isDirectory, web3) { next(null, compilationResult, contracts) }) }, - function determineTestContractsToRun(compilationResult, contracts, next) { + function determineTestContractsToRun (compilationResult, contracts, next) { let contractsToTest = [] if (isDirectory) { fs.readdirSync(filepath).forEach(filename => { From 1dd1dc3cb8f24fc5cf4f911d64c23d837a2358e2 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 18:25:05 -0500 Subject: [PATCH 032/105] track passing/failures for all the tests --- index.js | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/index.js b/index.js index 66500e9f2f..1d7cf5b759 100644 --- a/index.js +++ b/index.js @@ -39,6 +39,9 @@ var runTestFiles = function (filepath, isDirectory, web3) { next(null, contractsToTest, contracts) }, function runTests (contractsToTest, contracts, next) { + let totalPassing = 0 + let totalFailing = 0 + var testCallback = function (result) { if (result.type === 'contract') { console.log('\n ' + result.value) @@ -49,12 +52,8 @@ var runTestFiles = function (filepath, isDirectory, web3) { } } var resultsCallback = function (_err, result, cb) { - if (result.passingNum > 0) { - console.log((result.passingNum + ' passing').green) - } - if (result.failureNum > 0) { - console.log((result.failureNum + ' failing').red) - } + totalPassing += result.passingNum + totalFailing += result.failureNum cb() } @@ -65,7 +64,22 @@ var runTestFiles = function (filepath, isDirectory, web3) { } resultsCallback(null, result, cb) }) - }, next) + }, function(err, _results) { + if (err) { + return next(err) + } + + console.log("\n") + if (totalPassing > 0) { + console.log((" " + totalPassing + ' passing').green) + } + if (totalFailing > 0) { + console.log((" " + totalFailing + ' failing').red) + } + console.log("") + + next(); + }) } ], function () { }) From 11ab327882cf616ed87133fbfd5ec38d210df486 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 18:34:10 -0500 Subject: [PATCH 033/105] track time for succeful tests --- index.js | 4 +++- src/testRunner.js | 11 ++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index 1d7cf5b759..542d1d5b38 100644 --- a/index.js +++ b/index.js @@ -41,6 +41,7 @@ var runTestFiles = function (filepath, isDirectory, web3) { function runTests (contractsToTest, contracts, next) { let totalPassing = 0 let totalFailing = 0 + let totalTime = 0 var testCallback = function (result) { if (result.type === 'contract') { @@ -54,6 +55,7 @@ var runTestFiles = function (filepath, isDirectory, web3) { var resultsCallback = function (_err, result, cb) { totalPassing += result.passingNum totalFailing += result.failureNum + totalTime += result.timePassed cb() } @@ -71,7 +73,7 @@ var runTestFiles = function (filepath, isDirectory, web3) { console.log("\n") if (totalPassing > 0) { - console.log((" " + totalPassing + ' passing').green) + console.log((" " + totalPassing + ' passing ').green + ('(' + totalTime + 's)').grey) } if (totalFailing > 0) { console.log((" " + totalFailing + ' failing').red) diff --git a/src/testRunner.js b/src/testRunner.js index 799435d16e..a02872cec7 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -20,17 +20,21 @@ function runTest (testName, testObject, testCallback, resultsCallback) { let passingNum = 0 let failureNum = 0 + let timePassed = 0 testCallback({type: 'contract', value: testName}) async.eachOfLimit(runList, 1, function (func, index, next) { let method = testObject.methods[func.name].apply(testObject.methods[func.name], []) + let startTime = Date.now() if (func.constant) { method.call().then((result) => { + let time = Math.ceil((Date.now() - startTime) / 1000.0) if (result) { - testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name)}) + testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name), time: time}) passingNum += 1 + timePassed += time; } else { - testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name)}) + testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time}) failureNum += 1 } next() @@ -43,7 +47,8 @@ function runTest (testName, testObject, testCallback, resultsCallback) { }, function () { resultsCallback(null, { passingNum: passingNum, - failureNum: failureNum + failureNum: failureNum, + timePassed: timePassed }) }) } From 0971b1018abf372eff5bde5154d211645585b72e Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 18:35:47 -0500 Subject: [PATCH 034/105] comply with linter --- index.js | 12 ++++++------ src/testRunner.js | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/index.js b/index.js index 542d1d5b38..0e0776ddad 100644 --- a/index.js +++ b/index.js @@ -66,21 +66,21 @@ var runTestFiles = function (filepath, isDirectory, web3) { } resultsCallback(null, result, cb) }) - }, function(err, _results) { + }, function (err, _results) { if (err) { return next(err) } - console.log("\n") + console.log('\n') if (totalPassing > 0) { - console.log((" " + totalPassing + ' passing ').green + ('(' + totalTime + 's)').grey) + console.log((' ' + totalPassing + ' passing ').green + ('(' + totalTime + 's)').grey) } if (totalFailing > 0) { - console.log((" " + totalFailing + ' failing').red) + console.log((' ' + totalFailing + ' failing').red) } - console.log("") + console.log('') - next(); + next() }) } ], function () { diff --git a/src/testRunner.js b/src/testRunner.js index a02872cec7..0c68c681c7 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -32,7 +32,7 @@ function runTest (testName, testObject, testCallback, resultsCallback) { if (result) { testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name), time: time}) passingNum += 1 - timePassed += time; + timePassed += time } else { testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time}) failureNum += 1 From 87a7f9fbb0b4aaf11fc1cbf37dc6540f0b1d53b9 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 18:51:32 -0500 Subject: [PATCH 035/105] refactor runTests --- src/testRunner.js | 22 ++++++++++++++++++---- tests/testRunner.js | 10 +++++----- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/testRunner.js b/src/testRunner.js index 0c68c681c7..1e94188e31 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -1,11 +1,19 @@ var async = require('async') var changeCase = require('change-case') -function runTest (testName, testObject, testCallback, resultsCallback) { - let runList = [] +function getAvailableFunctions (jsonInterface) { + return jsonInterface.reverse().filter((x) => x.type === 'function').map((x) => x.name) +} + +function getTestFunctions (jsonInterface) { let specialFunctions = ['beforeAll', 'beforeEach'] - let availableFunctions = testObject._jsonInterface.reverse().filter((x) => x.type === 'function').map((x) => x.name) - let testFunctions = testObject._jsonInterface.filter((x) => specialFunctions.indexOf(x.name) < 0 && x.type === 'function') + return jsonInterface.filter((x) => specialFunctions.indexOf(x.name) < 0 && x.type === 'function') +} + +function createRunList (jsonInterface) { + let availableFunctions = getAvailableFunctions(jsonInterface) + let testFunctions = getTestFunctions(jsonInterface) + let runList = [] if (availableFunctions.indexOf('beforeAll') >= 0) { runList.push({name: 'beforeAll', type: 'internal', constant: false}) @@ -18,6 +26,12 @@ function runTest (testName, testObject, testCallback, resultsCallback) { runList.push({name: func.name, type: 'test', constant: func.constant}) } + return runList +} + +function runTest (testName, testObject, testCallback, resultsCallback) { + let runList = createRunList(testObject._jsonInterface) + let passingNum = 0 let failureNum = 0 let timePassed = 0 diff --git a/tests/testRunner.js b/tests/testRunner.js index 065117f4c0..e9e502ae1d 100644 --- a/tests/testRunner.js +++ b/tests/testRunner.js @@ -50,9 +50,9 @@ describe('testRunner', function () { it('should returns 3 messages', function () { assert.deepEqual(tests, [ - { type: 'contract', value: 'MyTest' }, - { type: 'testPass', value: 'Initial value should be100' }, - { type: 'testFailure', value: 'Initial value should be200' } + { type: 'contract', value: 'MyTest' }, + { type: 'testPass', value: 'Initial value should be100', time: 1 }, + { type: 'testFailure', value: 'Initial value should be200', time: 1 } ]) }) }) @@ -85,8 +85,8 @@ describe('testRunner', function () { it('should returns 3 messages', function () { assert.deepEqual(tests, [ { type: 'contract', value: 'MyTest' }, - { type: 'testPass', value: 'Initial value should be100' }, - { type: 'testPass', value: 'Initial value should be200' } + { type: 'testPass', value: 'Initial value should be100', time: 1 }, + { type: 'testPass', value: 'Initial value should be200', time: 1 } ]) }) }) From a23965a2709bb4a6b4b9a8b41c73951fb74aa6a2 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 2 Feb 2018 18:54:43 -0500 Subject: [PATCH 036/105] add another describe to the test to reflect the method being tested --- tests/testRunner.js | 108 ++++++++++++++++++++++---------------------- 1 file changed, 55 insertions(+), 53 deletions(-) diff --git a/tests/testRunner.js b/tests/testRunner.js index e9e502ae1d..70c74e75cf 100644 --- a/tests/testRunner.js +++ b/tests/testRunner.js @@ -23,71 +23,73 @@ function compileAndDeploy (filename, callback) { } describe('testRunner', function () { - describe('test with beforeAll', function () { - let filename = 'tests/examples_1/simple_storage_test.sol' - let tests = [], results = {} + describe('#runTest', function() { + describe('test with beforeAll', function () { + let filename = 'tests/examples_1/simple_storage_test.sol' + let tests = [], results = {} - before(function (done) { - compileAndDeploy(filename, function (_err, contracts) { - var testCallback = function (test) { - tests.push(test) - } - var resultsCallback = function (_err, _results) { - results = _results - done() - } - TestRunner.runTest('MyTest', contracts.MyTest, testCallback, resultsCallback) + before(function (done) { + compileAndDeploy(filename, function (_err, contracts) { + var testCallback = function (test) { + tests.push(test) + } + var resultsCallback = function (_err, _results) { + results = _results + done() + } + TestRunner.runTest('MyTest', contracts.MyTest, testCallback, resultsCallback) + }) }) - }) - it('should 1 passing test', function () { - assert.equal(results.passingNum, 1) - }) + it('should 1 passing test', function () { + assert.equal(results.passingNum, 1) + }) - it('should 1 failing test', function () { - assert.equal(results.failureNum, 1) - }) + it('should 1 failing test', function () { + assert.equal(results.failureNum, 1) + }) - it('should returns 3 messages', function () { - assert.deepEqual(tests, [ - { type: 'contract', value: 'MyTest' }, - { type: 'testPass', value: 'Initial value should be100', time: 1 }, - { type: 'testFailure', value: 'Initial value should be200', time: 1 } - ]) + it('should returns 3 messages', function () { + assert.deepEqual(tests, [ + { type: 'contract', value: 'MyTest' }, + { type: 'testPass', value: 'Initial value should be100', time: 1 }, + { type: 'testFailure', value: 'Initial value should be200', time: 1 } + ]) + }) }) - }) - describe('test with beforeEach', function () { - let filename = 'tests/examples_2/simple_storage_test.sol' - let tests = [], results = {} + describe('test with beforeEach', function () { + let filename = 'tests/examples_2/simple_storage_test.sol' + let tests = [], results = {} - before(function (done) { - compileAndDeploy(filename, function (_err, contracts) { - var testCallback = function (test) { - tests.push(test) - } - var resultsCallback = function (_err, _results) { - results = _results - done() - } - TestRunner.runTest('MyTest', contracts.MyTest, testCallback, resultsCallback) + before(function (done) { + compileAndDeploy(filename, function (_err, contracts) { + var testCallback = function (test) { + tests.push(test) + } + var resultsCallback = function (_err, _results) { + results = _results + done() + } + TestRunner.runTest('MyTest', contracts.MyTest, testCallback, resultsCallback) + }) }) - }) - it('should 2 passing tests', function () { - assert.equal(results.passingNum, 2) - }) + it('should 2 passing tests', function () { + assert.equal(results.passingNum, 2) + }) - it('should 0 failing tests', function () { - assert.equal(results.failureNum, 0) - }) + it('should 0 failing tests', function () { + assert.equal(results.failureNum, 0) + }) - it('should returns 3 messages', function () { - assert.deepEqual(tests, [ - { type: 'contract', value: 'MyTest' }, - { type: 'testPass', value: 'Initial value should be100', time: 1 }, - { type: 'testPass', value: 'Initial value should be200', time: 1 } - ]) + it('should returns 3 messages', function () { + assert.deepEqual(tests, [ + { type: 'contract', value: 'MyTest' }, + { type: 'testPass', value: 'Initial value should be100', time: 1 }, + { type: 'testPass', value: 'Initial value should be200', time: 1 } + ]) + }) }) }) }) From 8a0697dc7368a05f6bba1d4259501f1bae8de7a5 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 5 Feb 2018 10:46:37 -0500 Subject: [PATCH 037/105] fix linking issue --- examples/simple_storage_test.sol | 8 ++--- sol/tests.sol | 10 ++++-- src/compiler.js | 5 +++ src/deployer.js | 56 ++++++++++++++++++++++++-------- 4 files changed, 60 insertions(+), 19 deletions(-) diff --git a/examples/simple_storage_test.sol b/examples/simple_storage_test.sol index 2bab305c4f..347ca02d6f 100644 --- a/examples/simple_storage_test.sol +++ b/examples/simple_storage_test.sol @@ -10,13 +10,13 @@ contract MyTest { } function initialValueShouldBe100() public constant returns (bool) { - //return Assert.equal(foo.get(), 100, "initial value is not correct"); - return foo.get() == 100; + return Assert.equal(foo.get(), 100, "initial value is not correct"); + //return foo.get() == 100; } function initialValueShouldBe200() public constant returns (bool) { - //return Assert.equal(foo.get(), 200, "initial value is not correct"); - return foo.get() == 200; + return Assert.equal(foo.get(), 200, "initial value is not correct"); + //return foo.get() == 200; } } diff --git a/sol/tests.sol b/sol/tests.sol index ab51fe877a..65398f7d80 100644 --- a/sol/tests.sol +++ b/sol/tests.sol @@ -2,8 +2,14 @@ pragma solidity ^0.4.7; library Assert { - function equal(uint a, uint b, string text) { - //return a == b; + event AssertionEvent( + bool indexed passed, + string message + ); + + function equal(uint a, uint b, string message) public returns (bool result) { + result = (a == b); + AssertionEvent(result, message); } } diff --git a/src/compiler.js b/src/compiler.js index a4a86a65e4..230b8ace7f 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -36,6 +36,11 @@ function compileFileOrFiles (filename, isDirectory, cb) { compiler.compile(sources, filepath) } ], function (err, result) { + let errors = result.errors.filter((e) => e.type === 'Error'); + if (errors.length > 0) { + console.dir(errors); + return cb("errors compiling"); + } cb(err, result.contracts) }) } diff --git a/src/deployer.js b/src/deployer.js index 33b2225d21..10646e4ffe 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -30,12 +30,32 @@ function deployAll (compileResult, web3, callback) { compiledObject[className].code = code compiledObject[className].filename = filename compiledObject[className].className = className + + if (contractFile.indexOf("_test.sol") >=0 ) { + compiledObject[className].isTest = true + } } } next() }, - function deployContracts (next) { - async.eachOfLimit(compiledObject, 1, function (contract, contractName, nextEach) { + function determineContractsToDeploy (next) { + let contractsToDeploy = ['Assert']; + let allContracts = Object.keys(compiledObject); + + for (let contractName of allContracts) { + if (contractName === 'Assert') { + continue; + } + if (compiledObject[contractName].isTest) { + contractsToDeploy.push(contractName) + } + } + next(null, contractsToDeploy); + }, + function deployContracts (contractsToDeploy, next) { + async.eachOfLimit(contractsToDeploy, 1, function (contractName, index, nextEach) { + let contract = compiledObject[contractName]; + console.dir('deploying... ' + contractName); let contractObject = new web3.eth.Contract(contract.abi) let contractCode = '0x' + contract.code @@ -54,22 +74,32 @@ function deployAll (compileResult, web3, callback) { throw new Error('linking not found for ' + name + ' when deploying ' + contractName) } - contractCode = contractCode.replace(new RegExp(toReplace, 'g'), contractObj.deployedAddress) + console.dir("replacing " + toReplace + " with " + contractObj.deployedAddress); + contractCode = contractCode.replace(new RegExp(toReplace, 'g'), contractObj.deployedAddress.slice(2)) } - contractObject.deploy({arguments: [], data: contractCode}).send({ - from: accounts[0], - gas: 4000 * 1000 - }).on('receipt', function (receipt) { - contractObject.options.address = receipt.contractAddress - contractObject.options.from = accounts[0] - contractObject.options.gas = 4000 * 1000 - compiledObject[contractName].deployedAddress = receipt.contractAddress + console.dir(contractCode); + + let deployObject = contractObject.deploy({arguments: [], data: contractCode}); - contracts[contractName] = contractObject + console.dir("estimating gas..."); + deployObject.estimateGas().then((gasValue) => { + console.dir("gas value is " + gasValue); + deployObject.send({ + from: accounts[0], + gas: 5000 * 1000 + }).on('receipt', function (receipt) { + contractObject.options.address = receipt.contractAddress + contractObject.options.from = accounts[0] + contractObject.options.gas = 5000 * 1000 + compiledObject[contractName].deployedAddress = receipt.contractAddress - nextEach() + contracts[contractName] = contractObject + + nextEach() + }) }) + }, function () { next(null, contracts) }) From 4f71abbccd878502e05a5114b7487d3894623bcc Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 5 Feb 2018 13:56:31 -0500 Subject: [PATCH 038/105] point to latest remix packages; remove unnecessary logs --- examples/simple_storage_test.sol | 2 -- package.json | 5 ++--- src/deployer.js | 8 +------- 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/examples/simple_storage_test.sol b/examples/simple_storage_test.sol index 347ca02d6f..8597a68230 100644 --- a/examples/simple_storage_test.sol +++ b/examples/simple_storage_test.sol @@ -11,12 +11,10 @@ contract MyTest { function initialValueShouldBe100() public constant returns (bool) { return Assert.equal(foo.get(), 100, "initial value is not correct"); - //return foo.get() == 100; } function initialValueShouldBe200() public constant returns (bool) { return Assert.equal(foo.get(), 200, "initial value is not correct"); - //return foo.get() == 200; } } diff --git a/package.json b/package.json index 55c43c4e66..1f897da018 100644 --- a/package.json +++ b/package.json @@ -39,9 +39,8 @@ "colors": "^1.1.2", "commander": "^2.13.0", "ethereumjs-vm": "^2.3.2", - "remix-lib": "^0.1.2", - "remix-solidity": "../remix/remix-solidity", - "solc": "https://github.com/ethereum/solc-js", + "remix-lib": "latest", + "remix-solidity": "latest", "standard": "^10.0.3", "web3": "^1.0.0-beta.27" } diff --git a/src/deployer.js b/src/deployer.js index 10646e4ffe..c8cff20e71 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -55,7 +55,6 @@ function deployAll (compileResult, web3, callback) { function deployContracts (contractsToDeploy, next) { async.eachOfLimit(contractsToDeploy, 1, function (contractName, index, nextEach) { let contract = compiledObject[contractName]; - console.dir('deploying... ' + contractName); let contractObject = new web3.eth.Contract(contract.abi) let contractCode = '0x' + contract.code @@ -74,20 +73,15 @@ function deployAll (compileResult, web3, callback) { throw new Error('linking not found for ' + name + ' when deploying ' + contractName) } - console.dir("replacing " + toReplace + " with " + contractObj.deployedAddress); contractCode = contractCode.replace(new RegExp(toReplace, 'g'), contractObj.deployedAddress.slice(2)) } - console.dir(contractCode); - let deployObject = contractObject.deploy({arguments: [], data: contractCode}); - console.dir("estimating gas..."); deployObject.estimateGas().then((gasValue) => { - console.dir("gas value is " + gasValue); deployObject.send({ from: accounts[0], - gas: 5000 * 1000 + gas: Math.ceil(gasValue * 1.1) }).on('receipt', function (receipt) { contractObject.options.address = receipt.contractAddress contractObject.options.from = accounts[0] From 091576fd38910e63e86d80d47d0d66bfbea83a45 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 5 Feb 2018 15:06:09 -0500 Subject: [PATCH 039/105] add other assert methods to lib --- sol/tests.sol | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/sol/tests.sol b/sol/tests.sol index 65398f7d80..47e2e96aa8 100644 --- a/sol/tests.sol +++ b/sol/tests.sol @@ -7,10 +7,93 @@ library Assert { string message ); + function ok(bool a, string message) public returns (bool result) { + result = a; + AssertionEvent(result, message); + } + function equal(uint a, uint b, string message) public returns (bool result) { result = (a == b); AssertionEvent(result, message); } + function equal(int a, int b, string message) public returns (bool result) { + result = (a == b); + AssertionEvent(result, message); + } + + function equal(bool a, bool b, string message) public returns (bool result) { + result = (a == b); + AssertionEvent(result, message); + } + + //function equal(fixed a, fixed b, string message) public returns (bool result) { + // result = (a == b); + // AssertionEvent(result, message); + //} + + //function equal(ufixed a, ufixed b, string message) public returns (bool result) { + // result = (a == b); + // AssertionEvent(result, message); + //} + + function equal(address a, address b, string message) public returns (bool result) { + result = (a == b); + AssertionEvent(result, message); + } + + function equal(bytes32 a, bytes32 b, string message) public returns (bool result) { + result = (a == b); + AssertionEvent(result, message); + } + + // probably need to convert to bytes first + //function equal(string a, string b, string message) public returns (bool result) { + // result = (a == b); + // AssertionEvent(result, message); + //} + + function notEqual(uint a, uint b, string message) public returns (bool result) { + result = (a != b); + AssertionEvent(result, message); + } + + function notEqual(int a, int b, string message) public returns (bool result) { + result = (a != b); + AssertionEvent(result, message); + } + + function notEqual(bool a, bool b, string message) public returns (bool result) { + result = (a != b); + AssertionEvent(result, message); + } + + //function notEqual(fixed a, fixed b, string message) public returns (bool result) { + // result = (a != b); + // AssertionEvent(result, message); + //} + + //function notEqual(ufixed a, ufixed b, string message) public returns (bool result) { + // result = (a != b); + // AssertionEvent(result, message); + //} + + function notEqual(address a, address b, string message) public returns (bool result) { + result = (a != b); + AssertionEvent(result, message); + } + + function notEqual(bytes32 a, bytes32 b, string message) public returns (bool result) { + result = (a != b); + AssertionEvent(result, message); + } + + // probably need to convert to bytes first + //function notEqual(string a, string b, string message) public returns (bool result) { + // result = (a != b); + // AssertionEvent(result, message); + //} + + } From e2f1d7407d6407830e677763a57754cf9ee96851 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 5 Feb 2018 15:20:59 -0500 Subject: [PATCH 040/105] clarify comments --- examples/simple_storage2_test.sol | 6 ++---- sol/tests.sol | 8 ++++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/examples/simple_storage2_test.sol b/examples/simple_storage2_test.sol index d0e1a2b13e..a87fb90f33 100644 --- a/examples/simple_storage2_test.sol +++ b/examples/simple_storage2_test.sol @@ -15,13 +15,11 @@ contract MyTest2 { } function initialValueShouldBe100() public constant returns (bool) { - //return Assert.equal(foo.get(), 100, "initial value is not correct"); - return foo.get() == 100; + return Assert.equal(foo.get(), 100, "initial value is not correct"); } function initialValueShouldBe200() public constant returns (bool) { - //return Assert.equal(foo.get(), 200, "initial value is not correct"); - return foo.get() == 200; + return Assert.equal(foo.get(), 200, "initial value is not correct"); } } diff --git a/sol/tests.sol b/sol/tests.sol index 47e2e96aa8..74ad6768ac 100644 --- a/sol/tests.sol +++ b/sol/tests.sol @@ -27,11 +27,13 @@ library Assert { AssertionEvent(result, message); } + // TODO: only for certain versions of solc //function equal(fixed a, fixed b, string message) public returns (bool result) { // result = (a == b); // AssertionEvent(result, message); //} + // TODO: only for certain versions of solc //function equal(ufixed a, ufixed b, string message) public returns (bool result) { // result = (a == b); // AssertionEvent(result, message); @@ -47,7 +49,7 @@ library Assert { AssertionEvent(result, message); } - // probably need to convert to bytes first + // TODO: needs to be convert to bytes first to be comparable //function equal(string a, string b, string message) public returns (bool result) { // result = (a == b); // AssertionEvent(result, message); @@ -68,11 +70,13 @@ library Assert { AssertionEvent(result, message); } + // TODO: only for certain versions of solc //function notEqual(fixed a, fixed b, string message) public returns (bool result) { // result = (a != b); // AssertionEvent(result, message); //} + // TODO: only for certain versions of solc //function notEqual(ufixed a, ufixed b, string message) public returns (bool result) { // result = (a != b); // AssertionEvent(result, message); @@ -88,7 +92,7 @@ library Assert { AssertionEvent(result, message); } - // probably need to convert to bytes first + // TODO: needs to be convert to bytes first to be comparable //function notEqual(string a, string b, string message) public returns (bool result) { // result = (a != b); // AssertionEvent(result, message); From dc7741e9a8e73f39b53a53f110daaa15d6d58e6f Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 5 Feb 2018 15:37:27 -0500 Subject: [PATCH 041/105] comply with linter --- src/compiler.js | 6 +++--- src/deployer.js | 15 +++++++-------- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/compiler.js b/src/compiler.js index 230b8ace7f..dc74d2d1a4 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -36,10 +36,10 @@ function compileFileOrFiles (filename, isDirectory, cb) { compiler.compile(sources, filepath) } ], function (err, result) { - let errors = result.errors.filter((e) => e.type === 'Error'); + let errors = result.errors.filter((e) => e.type === 'Error') if (errors.length > 0) { - console.dir(errors); - return cb("errors compiling"); + console.dir(errors) + return cb(new Error('errors compiling')) } cb(err, result.contracts) }) diff --git a/src/deployer.js b/src/deployer.js index c8cff20e71..32dd34ba9d 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -31,7 +31,7 @@ function deployAll (compileResult, web3, callback) { compiledObject[className].filename = filename compiledObject[className].className = className - if (contractFile.indexOf("_test.sol") >=0 ) { + if (contractFile.indexOf('_test.sol') >= 0) { compiledObject[className].isTest = true } } @@ -39,22 +39,22 @@ function deployAll (compileResult, web3, callback) { next() }, function determineContractsToDeploy (next) { - let contractsToDeploy = ['Assert']; - let allContracts = Object.keys(compiledObject); + let contractsToDeploy = ['Assert'] + let allContracts = Object.keys(compiledObject) for (let contractName of allContracts) { if (contractName === 'Assert') { - continue; + continue } if (compiledObject[contractName].isTest) { contractsToDeploy.push(contractName) } } - next(null, contractsToDeploy); + next(null, contractsToDeploy) }, function deployContracts (contractsToDeploy, next) { async.eachOfLimit(contractsToDeploy, 1, function (contractName, index, nextEach) { - let contract = compiledObject[contractName]; + let contract = compiledObject[contractName] let contractObject = new web3.eth.Contract(contract.abi) let contractCode = '0x' + contract.code @@ -76,7 +76,7 @@ function deployAll (compileResult, web3, callback) { contractCode = contractCode.replace(new RegExp(toReplace, 'g'), contractObj.deployedAddress.slice(2)) } - let deployObject = contractObject.deploy({arguments: [], data: contractCode}); + let deployObject = contractObject.deploy({arguments: [], data: contractCode}) deployObject.estimateGas().then((gasValue) => { deployObject.send({ @@ -93,7 +93,6 @@ function deployAll (compileResult, web3, callback) { nextEach() }) }) - }, function () { next(null, contracts) }) From a4e522aacfc1438d694807691614a3c1778a54fa Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Wed, 7 Feb 2018 12:24:46 -0500 Subject: [PATCH 042/105] check transaction for assertion even and add to testCallback --- examples/simple_storage_test.sol | 8 ++++---- index.js | 2 +- run.js | 1 + sol/tests.sol | 2 +- src/testRunner.js | 32 +++++++++++++++++++++++++++++--- 5 files changed, 36 insertions(+), 9 deletions(-) diff --git a/examples/simple_storage_test.sol b/examples/simple_storage_test.sol index 8597a68230..f95df21cc0 100644 --- a/examples/simple_storage_test.sol +++ b/examples/simple_storage_test.sol @@ -9,12 +9,12 @@ contract MyTest { foo = new SimpleStorage(); } - function initialValueShouldBe100() public constant returns (bool) { - return Assert.equal(foo.get(), 100, "initial value is not correct"); + function initialValueShouldBe100() public { + Assert.equal(foo.get(), 100, "initial value is not correct"); } - function initialValueShouldBe200() public constant returns (bool) { - return Assert.equal(foo.get(), 200, "initial value is not correct"); + function initialValueShouldBe200() public { + Assert.equal(foo.get(), 200, "initial value is not correct"); } } diff --git a/index.js b/index.js index 0e0776ddad..733b01deb4 100644 --- a/index.js +++ b/index.js @@ -60,7 +60,7 @@ var runTestFiles = function (filepath, isDirectory, web3) { } async.eachOfLimit(contractsToTest, 1, (contractName, index, cb) => { - TestRunner.runTest(contractName, contracts[contractName], testCallback, (err, result) => { + TestRunner.runTest(web3, contractName, contracts[contractName], testCallback, (err, result) => { if (err) { return cb(err) } diff --git a/run.js b/run.js index 5f1cba96b7..5751bbd656 100644 --- a/run.js +++ b/run.js @@ -6,6 +6,7 @@ const fs = require('fs') commander.action(function (filename) { let web3 = new Web3() web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')) + //web3.setProvider(new web3.providers.WebsocketProvider('http://localhost:8546')) let isDirectory = fs.lstatSync(filename).isDirectory() RemixTests.runTestFiles(filename, isDirectory, web3) diff --git a/sol/tests.sol b/sol/tests.sol index 74ad6768ac..d4a3975b8a 100644 --- a/sol/tests.sol +++ b/sol/tests.sol @@ -3,7 +3,7 @@ pragma solidity ^0.4.7; library Assert { event AssertionEvent( - bool indexed passed, + bool passed, string message ); diff --git a/src/testRunner.js b/src/testRunner.js index 1e94188e31..3435e8c5cc 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -29,7 +29,7 @@ function createRunList (jsonInterface) { return runList } -function runTest (testName, testObject, testCallback, resultsCallback) { +function runTest (web3, testName, testObject, testCallback, resultsCallback) { let runList = createRunList(testObject._jsonInterface) let passingNum = 0 @@ -48,13 +48,39 @@ function runTest (testName, testObject, testCallback, resultsCallback) { passingNum += 1 timePassed += time } else { - testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time}) + testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time, errMsg: 'function returned false'}) failureNum += 1 } next() }) } else { - method.send().then(() => { + method.send().on('receipt', function(receipt) { + let time = Math.ceil((Date.now() - startTime) / 1000.0) + if (func.type === 'test') { + let topic = web3.utils.sha3('AssertionEvent(bool,string)') + + let matchingEvents = [] + for (let i in receipt.events) { + let event = receipt.events[i] + if (event.raw.topics.indexOf(topic) >= 0) { + matchingEvents.push(web3.eth.abi.decodeParameters(['bool', 'string'], event.raw.data)) + } + } + + if (matchingEvents.length === 0) { + return next(); + } + + let result = matchingEvents[0]; + + if (result[0]) { + testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name), time: time}) + passingNum += 1 + } else { + testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time, errMsg: result[1]}) + failureNum += 1 + } + } next() }) } From 89208da9308d89e5d086b9edf8cdb5140705b844 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Wed, 7 Feb 2018 12:51:37 -0500 Subject: [PATCH 043/105] print errors at the end; get context information into test callback --- index.js | 9 +++++++++ src/testRunner.js | 8 ++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index 733b01deb4..494566a7cf 100644 --- a/index.js +++ b/index.js @@ -42,6 +42,7 @@ var runTestFiles = function (filepath, isDirectory, web3) { let totalPassing = 0 let totalFailing = 0 let totalTime = 0 + let errors = [] var testCallback = function (result) { if (result.type === 'contract') { @@ -50,6 +51,7 @@ var runTestFiles = function (filepath, isDirectory, web3) { console.log('\t✓ '.green.bold + result.value.grey) } else if (result.type === 'testFailure') { console.log('\t✘ '.bold.red + result.value.red) + errors.push(result) } } var resultsCallback = function (_err, result, cb) { @@ -80,6 +82,13 @@ var runTestFiles = function (filepath, isDirectory, web3) { } console.log('') + errors.forEach((error, index) => { + console.log(" " + (index+1) + ") " + error.context + " " + error.value) + console.log('') + console.log(("\t error: " + error.errMsg).red); + }); + console.log('') + next() }) } diff --git a/src/testRunner.js b/src/testRunner.js index 3435e8c5cc..e15010e206 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -44,11 +44,11 @@ function runTest (web3, testName, testObject, testCallback, resultsCallback) { method.call().then((result) => { let time = Math.ceil((Date.now() - startTime) / 1000.0) if (result) { - testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name), time: time}) + testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name), time: time, context: testName}) passingNum += 1 timePassed += time } else { - testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time, errMsg: 'function returned false'}) + testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time, errMsg: 'function returned false', context: testName}) failureNum += 1 } next() @@ -74,10 +74,10 @@ function runTest (web3, testName, testObject, testCallback, resultsCallback) { let result = matchingEvents[0]; if (result[0]) { - testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name), time: time}) + testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name), time: time, context: testName}) passingNum += 1 } else { - testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time, errMsg: result[1]}) + testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time, errMsg: result[1], context: testName}) failureNum += 1 } } From e7aec5def71d02b867518d183cedd5380f5dc04d Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Wed, 7 Feb 2018 14:09:00 -0500 Subject: [PATCH 044/105] comply with linter --- index.js | 6 +++--- run.js | 2 +- src/testRunner.js | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/index.js b/index.js index 494566a7cf..51bcb0808e 100644 --- a/index.js +++ b/index.js @@ -83,10 +83,10 @@ var runTestFiles = function (filepath, isDirectory, web3) { console.log('') errors.forEach((error, index) => { - console.log(" " + (index+1) + ") " + error.context + " " + error.value) + console.log(' ' + (index + 1) + ') ' + error.context + ' ' + error.value) console.log('') - console.log(("\t error: " + error.errMsg).red); - }); + console.log(('\t error: ' + error.errMsg).red) + }) console.log('') next() diff --git a/run.js b/run.js index 5751bbd656..11cee33472 100644 --- a/run.js +++ b/run.js @@ -6,7 +6,7 @@ const fs = require('fs') commander.action(function (filename) { let web3 = new Web3() web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')) - //web3.setProvider(new web3.providers.WebsocketProvider('http://localhost:8546')) + // web3.setProvider(new web3.providers.WebsocketProvider('http://localhost:8546')) let isDirectory = fs.lstatSync(filename).isDirectory() RemixTests.runTestFiles(filename, isDirectory, web3) diff --git a/src/testRunner.js b/src/testRunner.js index e15010e206..9265fe325b 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -54,7 +54,7 @@ function runTest (web3, testName, testObject, testCallback, resultsCallback) { next() }) } else { - method.send().on('receipt', function(receipt) { + method.send().on('receipt', function (receipt) { let time = Math.ceil((Date.now() - startTime) / 1000.0) if (func.type === 'test') { let topic = web3.utils.sha3('AssertionEvent(bool,string)') @@ -68,10 +68,10 @@ function runTest (web3, testName, testObject, testCallback, resultsCallback) { } if (matchingEvents.length === 0) { - return next(); + return next() } - let result = matchingEvents[0]; + let result = matchingEvents[0] if (result[0]) { testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name), time: time, context: testName}) From 0379528f64b97fbb838fbaedfe81f69250b42350 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Wed, 7 Feb 2018 16:17:43 -0500 Subject: [PATCH 045/105] update tests --- tests/testRunner.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/tests/testRunner.js b/tests/testRunner.js index 70c74e75cf..72e216fa45 100644 --- a/tests/testRunner.js +++ b/tests/testRunner.js @@ -18,18 +18,20 @@ function compileAndDeploy (filename, callback) { Deployer.deployAll(compilationResult, web3, next) } ], function (_err, contracts) { - callback(null, contracts) + callback(null, contracts, web3) }) } describe('testRunner', function () { + let web3; describe('#runTest', function() { describe('test with beforeAll', function () { let filename = 'tests/examples_1/simple_storage_test.sol' let tests = [], results = {} before(function (done) { - compileAndDeploy(filename, function (_err, contracts) { + compileAndDeploy(filename, function (_err, contracts, _web3) { + web3 = _web3; var testCallback = function (test) { tests.push(test) } @@ -37,7 +39,7 @@ describe('testRunner', function () { results = _results done() } - TestRunner.runTest('MyTest', contracts.MyTest, testCallback, resultsCallback) + TestRunner.runTest(web3, 'MyTest', contracts.MyTest, testCallback, resultsCallback) }) }) @@ -52,8 +54,8 @@ describe('testRunner', function () { it('should returns 3 messages', function () { assert.deepEqual(tests, [ { type: 'contract', value: 'MyTest' }, - { type: 'testPass', value: 'Initial value should be100', time: 1 }, - { type: 'testFailure', value: 'Initial value should be200', time: 1 } + { type: 'testPass', value: 'Initial value should be100', time: 1, context: 'MyTest' }, + { type: 'testFailure', value: 'Initial value should be200', time: 1, context: 'MyTest', errMsg: 'function returned false' } ]) }) }) @@ -71,7 +73,7 @@ describe('testRunner', function () { results = _results done() } - TestRunner.runTest('MyTest', contracts.MyTest, testCallback, resultsCallback) + TestRunner.runTest(web3, 'MyTest', contracts.MyTest, testCallback, resultsCallback) }) }) @@ -86,8 +88,8 @@ describe('testRunner', function () { it('should returns 3 messages', function () { assert.deepEqual(tests, [ { type: 'contract', value: 'MyTest' }, - { type: 'testPass', value: 'Initial value should be100', time: 1 }, - { type: 'testPass', value: 'Initial value should be200', time: 1 } + { type: 'testPass', value: 'Initial value should be100', time: 1, context: 'MyTest' }, + { type: 'testPass', value: 'Initial value should be200', time: 1, context: 'MyTest' } ]) }) }) From 4e97e98c43c454d08ae5eaae2877aa5927aa1dcf Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 12 Feb 2018 09:28:16 -0500 Subject: [PATCH 046/105] remove web3 param from runTest params, simply use Web3 directly --- index.js | 2 +- src/testRunner.js | 7 ++++--- tests/testRunner.js | 10 ++++------ 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/index.js b/index.js index 51bcb0808e..9b1d66dc92 100644 --- a/index.js +++ b/index.js @@ -62,7 +62,7 @@ var runTestFiles = function (filepath, isDirectory, web3) { } async.eachOfLimit(contractsToTest, 1, (contractName, index, cb) => { - TestRunner.runTest(web3, contractName, contracts[contractName], testCallback, (err, result) => { + TestRunner.runTest(contractName, contracts[contractName], testCallback, (err, result) => { if (err) { return cb(err) } diff --git a/src/testRunner.js b/src/testRunner.js index 9265fe325b..fe868c1c2d 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -1,5 +1,6 @@ var async = require('async') var changeCase = require('change-case') +var Web3 = require('web3') function getAvailableFunctions (jsonInterface) { return jsonInterface.reverse().filter((x) => x.type === 'function').map((x) => x.name) @@ -29,7 +30,7 @@ function createRunList (jsonInterface) { return runList } -function runTest (web3, testName, testObject, testCallback, resultsCallback) { +function runTest (testName, testObject, testCallback, resultsCallback) { let runList = createRunList(testObject._jsonInterface) let passingNum = 0 @@ -57,13 +58,13 @@ function runTest (web3, testName, testObject, testCallback, resultsCallback) { method.send().on('receipt', function (receipt) { let time = Math.ceil((Date.now() - startTime) / 1000.0) if (func.type === 'test') { - let topic = web3.utils.sha3('AssertionEvent(bool,string)') + let topic = Web3.utils.sha3('AssertionEvent(bool,string)') let matchingEvents = [] for (let i in receipt.events) { let event = receipt.events[i] if (event.raw.topics.indexOf(topic) >= 0) { - matchingEvents.push(web3.eth.abi.decodeParameters(['bool', 'string'], event.raw.data)) + matchingEvents.push(Web3.eth.abi.decodeParameters(['bool', 'string'], event.raw.data)) } } diff --git a/tests/testRunner.js b/tests/testRunner.js index 72e216fa45..750984b710 100644 --- a/tests/testRunner.js +++ b/tests/testRunner.js @@ -18,20 +18,18 @@ function compileAndDeploy (filename, callback) { Deployer.deployAll(compilationResult, web3, next) } ], function (_err, contracts) { - callback(null, contracts, web3) + callback(null, contracts) }) } describe('testRunner', function () { - let web3; describe('#runTest', function() { describe('test with beforeAll', function () { let filename = 'tests/examples_1/simple_storage_test.sol' let tests = [], results = {} before(function (done) { - compileAndDeploy(filename, function (_err, contracts, _web3) { - web3 = _web3; + compileAndDeploy(filename, function (_err, contracts) { var testCallback = function (test) { tests.push(test) } @@ -39,7 +37,7 @@ describe('testRunner', function () { results = _results done() } - TestRunner.runTest(web3, 'MyTest', contracts.MyTest, testCallback, resultsCallback) + TestRunner.runTest('MyTest', contracts.MyTest, testCallback, resultsCallback) }) }) @@ -73,7 +71,7 @@ describe('testRunner', function () { results = _results done() } - TestRunner.runTest(web3, 'MyTest', contracts.MyTest, testCallback, resultsCallback) + TestRunner.runTest('MyTest', contracts.MyTest, testCallback, resultsCallback) }) }) From 27b42ae0ff43a3641cb5ad92a19b705698ba49b4 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Wed, 28 Feb 2018 10:34:05 -0500 Subject: [PATCH 047/105] add remix-tests binary --- bin/remix-tests | 4 ++++ package.json | 3 +++ 2 files changed, 7 insertions(+) create mode 100755 bin/remix-tests diff --git a/bin/remix-tests b/bin/remix-tests new file mode 100755 index 0000000000..9d3d91885b --- /dev/null +++ b/bin/remix-tests @@ -0,0 +1,4 @@ +#!/usr/bin/env node + +require('../run.js'); + diff --git a/package.json b/package.json index 1f897da018..5f84f100be 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,9 @@ "email": "yann@ethdev.com" } ], + "bin": { + "remix-tests": "./bin/remix-tests" + }, "scripts": { "downloadsolc": "cd node_modules/solc && (test -e soljson.js || wget https://ethereum.github.io/solc-bin/soljson.js) && cd ..", "prepublish": "npm-run-all -ls downloadsolc", From 457d3eefc1e07a2ea3fcc0ec5c37181eb6d5b5c0 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 30 Mar 2018 15:08:18 -0400 Subject: [PATCH 048/105] add simple provider --- package.json | 3 +- run.js | 5 +- src/deployer.js | 10 +++ src/provider.js | 163 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 179 insertions(+), 2 deletions(-) create mode 100644 src/provider.js diff --git a/package.json b/package.json index 5f84f100be..56de257bf7 100644 --- a/package.json +++ b/package.json @@ -41,10 +41,11 @@ "change-case": "^3.0.1", "colors": "^1.1.2", "commander": "^2.13.0", + "ethereumjs-util": "^5.1.5", "ethereumjs-vm": "^2.3.2", "remix-lib": "latest", "remix-solidity": "latest", "standard": "^10.0.3", - "web3": "^1.0.0-beta.27" + "web3": "1.0.0-beta.27" } } diff --git a/run.js b/run.js index 11cee33472..7205c5a1e2 100644 --- a/run.js +++ b/run.js @@ -3,9 +3,12 @@ const Web3 = require('web3') const RemixTests = require('./index.js') const fs = require('fs') +const Provider = require('./src/provider.js') + commander.action(function (filename) { let web3 = new Web3() - web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')) + //web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')) + web3.setProvider(new Provider()) // web3.setProvider(new web3.providers.WebsocketProvider('http://localhost:8546')) let isDirectory = fs.lstatSync(filename).isDirectory() diff --git a/src/deployer.js b/src/deployer.js index 32dd34ba9d..1bae8cd9d8 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -79,10 +79,16 @@ function deployAll (compileResult, web3, callback) { let deployObject = contractObject.deploy({arguments: [], data: contractCode}) deployObject.estimateGas().then((gasValue) => { + console.dir("got gas estimation " + gasValue); + console.dir(accounts); deployObject.send({ from: accounts[0], gas: Math.ceil(gasValue * 1.1) }).on('receipt', function (receipt) { + + console.dir("==== got the receipt"); + console.dir(receipt); + contractObject.options.address = receipt.contractAddress contractObject.options.from = accounts[0] contractObject.options.gas = 5000 * 1000 @@ -91,6 +97,10 @@ function deployAll (compileResult, web3, callback) { contracts[contractName] = contractObject nextEach() + }).on('error', function(err) { + console.dir("==============="); + console.dir("error"); + console.dir(err); }) }) }, function () { diff --git a/src/provider.js b/src/provider.js new file mode 100644 index 0000000000..cda7e2b954 --- /dev/null +++ b/src/provider.js @@ -0,0 +1,163 @@ +var Web3 = require('web3') +var utils = require('ethereumjs-util') +var RemixLib = require('remix-lib') +var TxExecution = RemixLib.execution.txExecution +var TxRunner = RemixLib.execution.txRunner +var executionContext = RemixLib.execution.executionContext + +function jsonRPCResponse(id, result) { + let json = {"id":id,"jsonrpc":"2.0","result":result}; + console.dir(json); + return json; +} + +// TODO: fix me; this is a temporary and very hackish thing just to get the receipts working for now +var deployedContracts = { +} + +function processTx(accounts, payload, callback) { + let api = { + logMessage: (msg) => { + //self._components.editorpanel.log({ type: 'log', value: msg }) + }, + logHtmlMessage: (msg) => { + //self._components.editorpanel.log({ type: 'html', value: msg }) + }, + //config: self._api.config, + config: { + getUnpersistedProperty: (key) => { + console.dir("== getUnpersistedProperty ==") + console.dir(key) + if (key === 'settings/always-use-vm') { + return true + } + return true + }, + get: () => { + return true + } + }, + detectNetwork: (cb) => { + //executionContext.detectNetwork(cb) + cb() + }, + personalMode: () => { + //return self._api.config.get('settings/personal-mode') + return false + } + } + + executionContext.init(api.config); + + console.dir(accounts); + let txRunner = new TxRunner(accounts, api); + + if (payload.params[0].to) { + // tx + } else { + console.dir("== contract creation"); + // contract creation + let from = payload.params[0].from; + let data = payload.params[0].data; + let value = payload.params[0].value; + let gasLimit = payload.params[0].gasLimit || 800000; + + let callbacks = { + confirmationCb: (network, tx, gasEstimation, continueTxExecution, cancelCb) => { + console.dir("confirmationCb"); + continueTxExecution(null); + }, + gasEstimationForceSend: (error, continueTxExecution, cancelCb) => { + console.dir("gasEstimationForceSend"); + continueTxExecution(); + }, + promptCb: (okCb, cancelCb) => { + console.dir("promptCb"); + okCb(); + } + } + + let finalCallback = function(err, result) { + console.dir(arguments) + console.log("called final callback") + //console.dir(result) + let contractAddress = ('0x' + result.result.createdAddress.toString('hex')) + //console.dir(contractAddress) + console.dir(result.transactionHash) + + // TODO: fix me; this is a temporary and very hackish thing just to get the receipts working for now + // deployedContracts[contractAddress] = contractAddress; + callback(null, jsonRPCResponse(payload.id, result.transactionHash)) + } + + TxExecution.createContract(from, data, value, gasLimit, txRunner, callbacks, finalCallback); + } +} + +Provider = function() { + this.web3 = new Web3(); + this.accounts = [this.web3.eth.accounts.create(["abcd"])] +} + +//Provider.prototype.send = function(payload) { +// console.log("=========== send"); +// console.dir(payload); +// //return this.manager.request(payload); +//} + +Provider.prototype.sendAsync = function(payload, callback) { + console.log("=========== sendAsync"); + console.dir(payload); + + if (payload.method === 'eth_accounts') { + return callback(null, jsonRPCResponse(payload.id, this.accounts.map((x) => x.address))) + } + if (payload.method === 'eth_estimateGas') { + //return callback(null, jsonRPCResponseutils.bufferToInt(this.web3.utils.toHex(800000))) + callback(null, jsonRPCResponse(payload.id, 800000)) + } + if (payload.method === 'eth_gasPrice') { + //return callback(null, jsonRPCResponseutils.bufferToInt(this.web3.utils.toHex(800000))) + callback(null, jsonRPCResponse(payload.id, 1)) + } + if (payload.method === 'eth_sendTransaction') { + let _accounts = {}; + _accounts[this.accounts[0].address.toLowerCase()] = this.accounts[0]; + //_accounts[this.accounts[0].address.toLowerCase()].privateKey = Buffer(_accounts[this.accounts[0].address.toLowerCase()].privateKey); + _accounts[this.accounts[0].address.toLowerCase()].privateKey = Buffer.from(_accounts[this.accounts[0].address.toLowerCase()].privateKey.slice(2), 'hex'); + processTx(_accounts, payload, callback) + } + if (payload.method === 'eth_getTransactionReceipt') { + executionContext.web3().eth.getTransactionReceipt(payload.params[0], (error, receipt) => { + console.dir(receipt); + + var r = { + "transactionHash": receipt.hash, + "transactionIndex": "0x00", + "blockHash": "0x766d18646a06cf74faeabf38597314f84a82c3851859d9da9d94fc8d037269e5", + "blockNumber": "0x06", + "gasUsed": "0x06345f", + "cumulativeGasUsed": "0x06345f", + "contractAddress": receipt.contractAddress, + "logs": [], + "status": 1 + } + + callback(null, jsonRPCResponse(payload.id, r)); + }); + } + if (payload.method === 'eth_getCode') { + let address = payload.params[0]; + let block = payload.params[1]; + let data = "0x6060604052341561000f57600080fd5b610ee18061001e6000396000f3006060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806339df137f146100b457806344781a00146101295780634e3e4035146101a9578063556fe56214610225578063561015e2146102a9578063767392b314610325578063abcd7960146103a5578063b8f2853114610421578063bfba5dd6146104c9578063ea79dd7914610571578063f5bae6b6146105f5575b600080fd5b61010f6004808035151590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610671565b604051808215151515815260200191505060405180910390f35b61018f60048080351515906020019091908035151590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610724565b604051808215151515815260200191505060405180910390f35b61020b600480803590602001909190803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506107df565b604051808215151515815260200191505060405180910390f35b61028f6004808035600019169060200190919080356000191690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610896565b604051808215151515815260200191505060405180910390f35b61030b600480803590602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610955565b604051808215151515815260200191505060405180910390f35b61038b60048080351515906020019091908035151590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610a0c565b604051808215151515815260200191505060405180910390f35b610407600480803590602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610ac6565b604051808215151515815260200191505060405180910390f35b6104af600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610b7c565b604051808215151515815260200191505060405180910390f35b610557600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610c5f565b604051808215151515815260200191505060405180910390f35b6105db6004808035600019169060200190919080356000191690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610d41565b604051808215151515815260200191505060405180910390f35b610657600480803590602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610dff565b604051808215151515815260200191505060405180910390f35b60008290507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106e35780820151818401526020810190506106c8565b50505050905090810190601f1680156107105780820380516001836020036101000a031916815260200191505b50935050505060405180910390a192915050565b6000821515841515141590507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561079d578082015181840152602081019050610782565b50505050905090810190601f1680156107ca5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b60008284141590507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610854578082015181840152602081019050610839565b50505050905090810190601f1680156108815780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b600082600019168460001916141590507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156109135780820151818401526020810190506108f8565b50505050905090810190601f1680156109405780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b60008284141590507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156109ca5780820151818401526020810190506109af565b50505050905090810190601f1680156109f75780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b60008215158415151490507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a84578082015181840152602081019050610a69565b50505050905090810190601f168015610ab15780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b600082841490507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b3a578082015181840152602081019050610b1f565b50505050905090810190601f168015610b675780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141590507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c1d578082015181840152602081019050610c02565b50505050905090810190601f168015610c4a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610cff578082015181840152602081019050610ce4565b50505050905090810190601f168015610d2c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b6000826000191684600019161490507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610dbd578082015181840152602081019050610da2565b50505050905090810190601f168015610dea5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b600082841490507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610e73578082015181840152602081019050610e58565b50505050905090810190601f168015610ea05780820380516001836020036101000a031916815260200191505b50935050505060405180910390a193925050505600a165627a7a723058200e3acac7a73f7bae3ab373cf9bc370676181158c3238de70fb8eaaa3dbd2f4a30029" + + callback(null, jsonRPCResponse(payload.id, data)); + } + //return this.manager.request(payload, callback); +} + +Provider.prototype.isConnected = function() { + return true; +} + +module.exports = Provider; From 76a9368642c93ab97710f51e4bc3f8c1897f21d4 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 30 Mar 2018 16:03:58 -0400 Subject: [PATCH 049/105] fix accounts private key conversion --- src/provider.js | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/provider.js b/src/provider.js index cda7e2b954..af286b065e 100644 --- a/src/provider.js +++ b/src/provider.js @@ -7,11 +7,12 @@ var executionContext = RemixLib.execution.executionContext function jsonRPCResponse(id, result) { let json = {"id":id,"jsonrpc":"2.0","result":result}; + console.dir("== response"); console.dir(json); return json; } -// TODO: fix me; this is a temporary and very hackish thing just to get the receipts working for now +// TODO: fix me; this is a temporary and very hackish thing just to get the getCode working for now var deployedContracts = { } @@ -49,10 +50,11 @@ function processTx(accounts, payload, callback) { executionContext.init(api.config); - console.dir(accounts); + //console.dir(accounts); let txRunner = new TxRunner(accounts, api); if (payload.params[0].to) { + throw new Error("not implemented"); // tx } else { console.dir("== contract creation"); @@ -80,7 +82,7 @@ function processTx(accounts, payload, callback) { let finalCallback = function(err, result) { console.dir(arguments) console.log("called final callback") - //console.dir(result) + console.dir(result) let contractAddress = ('0x' + result.result.createdAddress.toString('hex')) //console.dir(contractAddress) console.dir(result.transactionHash) @@ -97,6 +99,10 @@ function processTx(accounts, payload, callback) { Provider = function() { this.web3 = new Web3(); this.accounts = [this.web3.eth.accounts.create(["abcd"])] + + this.accounts[this.accounts[0].address.toLowerCase()] = this.accounts[0]; + //_accounts[this.accounts[0].address.toLowerCase()].privateKey = Buffer(_accounts[this.accounts[0].address.toLowerCase()].privateKey); + this.accounts[this.accounts[0].address.toLowerCase()].privateKey = Buffer.from(this.accounts[this.accounts[0].address.toLowerCase()].privateKey.slice(2), 'hex'); } //Provider.prototype.send = function(payload) { @@ -121,15 +127,12 @@ Provider.prototype.sendAsync = function(payload, callback) { callback(null, jsonRPCResponse(payload.id, 1)) } if (payload.method === 'eth_sendTransaction') { - let _accounts = {}; - _accounts[this.accounts[0].address.toLowerCase()] = this.accounts[0]; - //_accounts[this.accounts[0].address.toLowerCase()].privateKey = Buffer(_accounts[this.accounts[0].address.toLowerCase()].privateKey); - _accounts[this.accounts[0].address.toLowerCase()].privateKey = Buffer.from(_accounts[this.accounts[0].address.toLowerCase()].privateKey.slice(2), 'hex'); - processTx(_accounts, payload, callback) + processTx(this.accounts, payload, callback) } if (payload.method === 'eth_getTransactionReceipt') { executionContext.web3().eth.getTransactionReceipt(payload.params[0], (error, receipt) => { - console.dir(receipt); + //console.dir(receipt); + deployedContracts[receipt.contractAddress] = receipt.data var r = { "transactionHash": receipt.hash, @@ -149,9 +152,8 @@ Provider.prototype.sendAsync = function(payload, callback) { if (payload.method === 'eth_getCode') { let address = payload.params[0]; let block = payload.params[1]; - let data = "0x6060604052341561000f57600080fd5b610ee18061001e6000396000f3006060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806339df137f146100b457806344781a00146101295780634e3e4035146101a9578063556fe56214610225578063561015e2146102a9578063767392b314610325578063abcd7960146103a5578063b8f2853114610421578063bfba5dd6146104c9578063ea79dd7914610571578063f5bae6b6146105f5575b600080fd5b61010f6004808035151590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610671565b604051808215151515815260200191505060405180910390f35b61018f60048080351515906020019091908035151590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610724565b604051808215151515815260200191505060405180910390f35b61020b600480803590602001909190803590602001909190803590602001908201803590602001908080601f016020809104026020016040519081016040528093929190818152602001838380828437820191505050505050919050506107df565b604051808215151515815260200191505060405180910390f35b61028f6004808035600019169060200190919080356000191690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610896565b604051808215151515815260200191505060405180910390f35b61030b600480803590602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610955565b604051808215151515815260200191505060405180910390f35b61038b60048080351515906020019091908035151590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610a0c565b604051808215151515815260200191505060405180910390f35b610407600480803590602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610ac6565b604051808215151515815260200191505060405180910390f35b6104af600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610b7c565b604051808215151515815260200191505060405180910390f35b610557600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610c5f565b604051808215151515815260200191505060405180910390f35b6105db6004808035600019169060200190919080356000191690602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610d41565b604051808215151515815260200191505060405180910390f35b610657600480803590602001909190803590602001909190803590602001908201803590602001908080601f01602080910402602001604051908101604052809392919081815260200183838082843782019150505050505091905050610dff565b604051808215151515815260200191505060405180910390f35b60008290507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156106e35780820151818401526020810190506106c8565b50505050905090810190601f1680156107105780820380516001836020036101000a031916815260200191505b50935050505060405180910390a192915050565b6000821515841515141590507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561079d578082015181840152602081019050610782565b50505050905090810190601f1680156107ca5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b60008284141590507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610854578082015181840152602081019050610839565b50505050905090810190601f1680156108815780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b600082600019168460001916141590507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156109135780820151818401526020810190506108f8565b50505050905090810190601f1680156109405780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b60008284141590507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b838110156109ca5780820151818401526020810190506109af565b50505050905090810190601f1680156109f75780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b60008215158415151490507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a84578082015181840152602081019050610a69565b50505050905090810190601f168015610ab15780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b600082841490507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610b3a578082015181840152602081019050610b1f565b50505050905090810190601f168015610b675780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141590507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c1d578082015181840152602081019050610c02565b50505050905090810190601f168015610c4a5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b60008273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610cff578082015181840152602081019050610ce4565b50505050905090810190601f168015610d2c5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b6000826000191684600019161490507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610dbd578082015181840152602081019050610da2565b50505050905090810190601f168015610dea5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a19392505050565b600082841490507fe81a864f5996ae49db556bf6540209c15b8077395a85ede9dfa17ad07d9ff3668183604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610e73578082015181840152602081019050610e58565b50505050905090810190601f168015610ea05780820380516001836020036101000a031916815260200191505b50935050505060405180910390a193925050505600a165627a7a723058200e3acac7a73f7bae3ab373cf9bc370676181158c3238de70fb8eaaa3dbd2f4a30029" - callback(null, jsonRPCResponse(payload.id, data)); + callback(null, jsonRPCResponse(payload.id, deployedContracts[address])); } //return this.manager.request(payload, callback); } From e20da90c4d720ff614a8ef334e6f5b27f2dca4c5 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 30 Mar 2018 16:55:19 -0400 Subject: [PATCH 050/105] process tx --- src/provider.js | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/src/provider.js b/src/provider.js index af286b065e..06ed226a54 100644 --- a/src/provider.js +++ b/src/provider.js @@ -54,8 +54,40 @@ function processTx(accounts, payload, callback) { let txRunner = new TxRunner(accounts, api); if (payload.params[0].to) { - throw new Error("not implemented"); + console.log("== processing transaction"); // tx + + let from = payload.params[0].from; + let to = payload.params[0].to; + let data = payload.params[0].data; + let value = payload.params[0].value; + let gasLimit = payload.params[0].gasLimit || 800000; + + let callbacks = { + confirmationCb: (network, tx, gasEstimation, continueTxExecution, cancelCb) => { + console.dir("confirmationCb"); + continueTxExecution(null); + }, + gasEstimationForceSend: (error, continueTxExecution, cancelCb) => { + console.dir("gasEstimationForceSend"); + continueTxExecution(); + }, + promptCb: (okCb, cancelCb) => { + console.dir("promptCb"); + okCb(); + } + } + + let finalCallback = function(err, result) { + console.dir(arguments) + console.log("called final callback") + console.dir(result) + + //callback(null, jsonRPCResponse(payload.id, result.transactionHash)) + } + + //TxExecution.createContract(from, data, value, gasLimit, txRunner, callbacks, finalCallback); + TxExecution.callFunction(from, to, data, value, gasLimit, null, txRunner, callbacks, finalCallback) } else { console.dir("== contract creation"); // contract creation From 9fe1b16c592dfe6bfaba151a8cc1cd6badfed1ed Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 30 Mar 2018 17:10:10 -0400 Subject: [PATCH 051/105] return transaction hash when processing a transaction --- src/provider.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/provider.js b/src/provider.js index 06ed226a54..0caf7674c3 100644 --- a/src/provider.js +++ b/src/provider.js @@ -83,10 +83,9 @@ function processTx(accounts, payload, callback) { console.log("called final callback") console.dir(result) - //callback(null, jsonRPCResponse(payload.id, result.transactionHash)) + callback(null, jsonRPCResponse(payload.id, result.transactionHash)) } - //TxExecution.createContract(from, data, value, gasLimit, txRunner, callbacks, finalCallback); TxExecution.callFunction(from, to, data, value, gasLimit, null, txRunner, callbacks, finalCallback) } else { console.dir("== contract creation"); From 5cf49ef3ed4b59bd59a74d9958f240420b9942e1 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 30 Mar 2018 18:33:51 -0400 Subject: [PATCH 052/105] process eth_call --- src/provider.js | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/provider.js b/src/provider.js index 0caf7674c3..bd163fa2b9 100644 --- a/src/provider.js +++ b/src/provider.js @@ -16,7 +16,7 @@ function jsonRPCResponse(id, result) { var deployedContracts = { } -function processTx(accounts, payload, callback) { +function processTx(accounts, payload, isCall, callback) { let api = { logMessage: (msg) => { //self._components.editorpanel.log({ type: 'log', value: msg }) @@ -81,9 +81,20 @@ function processTx(accounts, payload, callback) { let finalCallback = function(err, result) { console.dir(arguments) console.log("called final callback") - console.dir(result) - callback(null, jsonRPCResponse(payload.id, result.transactionHash)) + let toReturn; + if (isCall) { + console.dir(result.result.vm.return); + toReturn = "0x" + result.result.vm.return.toString('hex') + if (toReturn === '0x') { + toReturn = '0x0' + } + } else { + toReturn = result.transactionHash + } + console.dir("isCall is " + isCall); + + callback(null, jsonRPCResponse(payload.id, toReturn)) } TxExecution.callFunction(from, to, data, value, gasLimit, null, txRunner, callbacks, finalCallback) @@ -158,7 +169,7 @@ Provider.prototype.sendAsync = function(payload, callback) { callback(null, jsonRPCResponse(payload.id, 1)) } if (payload.method === 'eth_sendTransaction') { - processTx(this.accounts, payload, callback) + processTx(this.accounts, payload, false, callback) } if (payload.method === 'eth_getTransactionReceipt') { executionContext.web3().eth.getTransactionReceipt(payload.params[0], (error, receipt) => { @@ -186,6 +197,9 @@ Provider.prototype.sendAsync = function(payload, callback) { callback(null, jsonRPCResponse(payload.id, deployedContracts[address])); } + if (payload.method === 'eth_call') { + processTx(this.accounts, payload, true, callback) + } //return this.manager.request(payload, callback); } From 9d419856e8372b8d0fbe744a7f254522c0d27fd6 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Tue, 3 Apr 2018 13:15:00 -0400 Subject: [PATCH 053/105] refactor & clean up code a bit --- src/provider.js | 159 ++++------------------------------------------- src/txProcess.js | 95 ++++++++++++++++++++++++++++ 2 files changed, 107 insertions(+), 147 deletions(-) create mode 100644 src/txProcess.js diff --git a/src/provider.js b/src/provider.js index bd163fa2b9..ff2b85cf45 100644 --- a/src/provider.js +++ b/src/provider.js @@ -1,171 +1,38 @@ var Web3 = require('web3') var utils = require('ethereumjs-util') var RemixLib = require('remix-lib') -var TxExecution = RemixLib.execution.txExecution -var TxRunner = RemixLib.execution.txRunner var executionContext = RemixLib.execution.executionContext -function jsonRPCResponse(id, result) { - let json = {"id":id,"jsonrpc":"2.0","result":result}; - console.dir("== response"); - console.dir(json); - return json; -} - -// TODO: fix me; this is a temporary and very hackish thing just to get the getCode working for now -var deployedContracts = { -} - -function processTx(accounts, payload, isCall, callback) { - let api = { - logMessage: (msg) => { - //self._components.editorpanel.log({ type: 'log', value: msg }) - }, - logHtmlMessage: (msg) => { - //self._components.editorpanel.log({ type: 'html', value: msg }) - }, - //config: self._api.config, - config: { - getUnpersistedProperty: (key) => { - console.dir("== getUnpersistedProperty ==") - console.dir(key) - if (key === 'settings/always-use-vm') { - return true - } - return true - }, - get: () => { - return true - } - }, - detectNetwork: (cb) => { - //executionContext.detectNetwork(cb) - cb() - }, - personalMode: () => { - //return self._api.config.get('settings/personal-mode') - return false - } - } - - executionContext.init(api.config); - - //console.dir(accounts); - let txRunner = new TxRunner(accounts, api); - - if (payload.params[0].to) { - console.log("== processing transaction"); - // tx - - let from = payload.params[0].from; - let to = payload.params[0].to; - let data = payload.params[0].data; - let value = payload.params[0].value; - let gasLimit = payload.params[0].gasLimit || 800000; - - let callbacks = { - confirmationCb: (network, tx, gasEstimation, continueTxExecution, cancelCb) => { - console.dir("confirmationCb"); - continueTxExecution(null); - }, - gasEstimationForceSend: (error, continueTxExecution, cancelCb) => { - console.dir("gasEstimationForceSend"); - continueTxExecution(); - }, - promptCb: (okCb, cancelCb) => { - console.dir("promptCb"); - okCb(); - } - } +var processTx = require('./txProcess.js') - let finalCallback = function(err, result) { - console.dir(arguments) - console.log("called final callback") - - let toReturn; - if (isCall) { - console.dir(result.result.vm.return); - toReturn = "0x" + result.result.vm.return.toString('hex') - if (toReturn === '0x') { - toReturn = '0x0' - } - } else { - toReturn = result.transactionHash - } - console.dir("isCall is " + isCall); - - callback(null, jsonRPCResponse(payload.id, toReturn)) - } - - TxExecution.callFunction(from, to, data, value, gasLimit, null, txRunner, callbacks, finalCallback) - } else { - console.dir("== contract creation"); - // contract creation - let from = payload.params[0].from; - let data = payload.params[0].data; - let value = payload.params[0].value; - let gasLimit = payload.params[0].gasLimit || 800000; - - let callbacks = { - confirmationCb: (network, tx, gasEstimation, continueTxExecution, cancelCb) => { - console.dir("confirmationCb"); - continueTxExecution(null); - }, - gasEstimationForceSend: (error, continueTxExecution, cancelCb) => { - console.dir("gasEstimationForceSend"); - continueTxExecution(); - }, - promptCb: (okCb, cancelCb) => { - console.dir("promptCb"); - okCb(); - } - } - - let finalCallback = function(err, result) { - console.dir(arguments) - console.log("called final callback") - console.dir(result) - let contractAddress = ('0x' + result.result.createdAddress.toString('hex')) - //console.dir(contractAddress) - console.dir(result.transactionHash) - - // TODO: fix me; this is a temporary and very hackish thing just to get the receipts working for now - // deployedContracts[contractAddress] = contractAddress; - callback(null, jsonRPCResponse(payload.id, result.transactionHash)) - } - - TxExecution.createContract(from, data, value, gasLimit, txRunner, callbacks, finalCallback); - } +function jsonRPCResponse(id, result) { + return {"id":id,"jsonrpc":"2.0","result":result}; } Provider = function() { this.web3 = new Web3(); + // TODO: make it random this.accounts = [this.web3.eth.accounts.create(["abcd"])] this.accounts[this.accounts[0].address.toLowerCase()] = this.accounts[0]; - //_accounts[this.accounts[0].address.toLowerCase()].privateKey = Buffer(_accounts[this.accounts[0].address.toLowerCase()].privateKey); this.accounts[this.accounts[0].address.toLowerCase()].privateKey = Buffer.from(this.accounts[this.accounts[0].address.toLowerCase()].privateKey.slice(2), 'hex'); -} -//Provider.prototype.send = function(payload) { -// console.log("=========== send"); -// console.dir(payload); -// //return this.manager.request(payload); -//} + // TODO: fix me; this is a temporary and very hackish thing just to get the getCode working for now + this.deployedContracts = {}; +} Provider.prototype.sendAsync = function(payload, callback) { - console.log("=========== sendAsync"); - console.dir(payload); + const self = this; + //console.log("=========== sendAsync"); + //console.dir(payload); if (payload.method === 'eth_accounts') { return callback(null, jsonRPCResponse(payload.id, this.accounts.map((x) => x.address))) } if (payload.method === 'eth_estimateGas') { - //return callback(null, jsonRPCResponseutils.bufferToInt(this.web3.utils.toHex(800000))) callback(null, jsonRPCResponse(payload.id, 800000)) } if (payload.method === 'eth_gasPrice') { - //return callback(null, jsonRPCResponseutils.bufferToInt(this.web3.utils.toHex(800000))) callback(null, jsonRPCResponse(payload.id, 1)) } if (payload.method === 'eth_sendTransaction') { @@ -173,8 +40,7 @@ Provider.prototype.sendAsync = function(payload, callback) { } if (payload.method === 'eth_getTransactionReceipt') { executionContext.web3().eth.getTransactionReceipt(payload.params[0], (error, receipt) => { - //console.dir(receipt); - deployedContracts[receipt.contractAddress] = receipt.data + self.deployedContracts[receipt.contractAddress] = receipt.data var r = { "transactionHash": receipt.hash, @@ -195,12 +61,11 @@ Provider.prototype.sendAsync = function(payload, callback) { let address = payload.params[0]; let block = payload.params[1]; - callback(null, jsonRPCResponse(payload.id, deployedContracts[address])); + callback(null, jsonRPCResponse(payload.id, self.deployedContracts[address])); } if (payload.method === 'eth_call') { processTx(this.accounts, payload, true, callback) } - //return this.manager.request(payload, callback); } Provider.prototype.isConnected = function() { diff --git a/src/txProcess.js b/src/txProcess.js new file mode 100644 index 0000000000..89a421f277 --- /dev/null +++ b/src/txProcess.js @@ -0,0 +1,95 @@ +var RemixLib = require('remix-lib') +var TxExecution = RemixLib.execution.txExecution +var TxRunner = RemixLib.execution.txRunner +var executionContext = RemixLib.execution.executionContext + +function jsonRPCResponse(id, result) { + return {"id":id,"jsonrpc":"2.0","result":result}; +} + +function runTx(payload, from, to, data, value, gasLimit, txRunner, callbacks, isCall, callback) { + console.log('-- runTx'); + let finalCallback = function(err, result) { + let toReturn; + if (isCall) { + console.dir(result.result.vm.return); + console.dir(result.result.vm); + toReturn = "0x" + result.result.vm.return.toString('hex') + if (toReturn === '0x') { + toReturn = '0x0' + } + } else { + toReturn = result.transactionHash + } + + callback(null, jsonRPCResponse(payload.id, toReturn)) + } + + TxExecution.callFunction(from, to, data, value, gasLimit, null, txRunner, callbacks, finalCallback) +} + +function createContract(payload, from, data, value, gasLimit, txRunner, callbacks, callback) { + console.log('-- createContract'); + console.dir(arguments); + let finalCallback = function(err, result) { + let contractAddress = ('0x' + result.result.createdAddress.toString('hex')) + callback(null, jsonRPCResponse(payload.id, result.transactionHash)) + } + + TxExecution.createContract(from, data, value, gasLimit, txRunner, callbacks, finalCallback); +} + +function processTx(accounts, payload, isCall, callback) { + console.log('-- processTx'); + let api = { + logMessage: (msg) => { + }, + logHtmlMessage: (msg) => { + }, + //config: self._api.config, + config: { + getUnpersistedProperty: (key) => { + //if (key === 'settings/always-use-vm') { + // return true + //} + return true + }, + get: () => { + return true + } + }, + detectNetwork: (cb) => { + cb() + }, + personalMode: () => { + //return self._api.config.get('settings/personal-mode') + return false + } + } + + executionContext.init(api.config); + + let txRunner = new TxRunner(accounts, api); + let { from: from, to: to, data: data, value: value, gasLimit: gasLimit } = payload.params[0]; + gasLimit = gasLimit || 800000; + + let callbacks = { + confirmationCb: (network, tx, gasEstimation, continueTxExecution, cancelCb) => { + continueTxExecution(null); + }, + gasEstimationForceSend: (error, continueTxExecution, cancelCb) => { + continueTxExecution(); + }, + promptCb: (okCb, cancelCb) => { + okCb(); + } + } + + if (to) { + runTx(payload, from, to, data, value, gasLimit, txRunner, callbacks, isCall, callback); + } else { + createContract(payload, from, data, value, gasLimit, txRunner, callbacks, callback); + } +} + +module.exports = processTx; From 23a35cf7463978029da54bee4e11cd489bb7a578 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Wed, 11 Apr 2018 09:45:59 -0400 Subject: [PATCH 054/105] add test poc to attempt to replicate/fix tx issue --- examples2/simple_storage.sol | 17 +++++++ examples2/simple_storage2_test.sol | 26 ++++++++++ examples2/simple_storage_test.sol | 44 +++++++++++++++++ mytest.sol | 20 ++++++++ sol/tests.sol | 76 +++++++++++++++--------------- src/compiler.js | 6 ++- src/txProcess.js | 3 +- test.js | 62 ++++++++++++++++++++++++ test.sol | 22 +++++++++ 9 files changed, 237 insertions(+), 39 deletions(-) create mode 100644 examples2/simple_storage.sol create mode 100644 examples2/simple_storage2_test.sol create mode 100644 examples2/simple_storage_test.sol create mode 100644 mytest.sol create mode 100644 test.js create mode 100644 test.sol diff --git a/examples2/simple_storage.sol b/examples2/simple_storage.sol new file mode 100644 index 0000000000..4f8a84a5b1 --- /dev/null +++ b/examples2/simple_storage.sol @@ -0,0 +1,17 @@ +pragma solidity ^0.4.7; +contract SimpleStorage { + uint public storedData; + + function SimpleStorage() public { + storedData = 100; + } + + function set(uint x) public { + storedData = x; + } + + function get() public view returns (uint retVal) { + return storedData; + } + +} diff --git a/examples2/simple_storage2_test.sol b/examples2/simple_storage2_test.sol new file mode 100644 index 0000000000..f1095bb0d1 --- /dev/null +++ b/examples2/simple_storage2_test.sol @@ -0,0 +1,26 @@ +pragma solidity ^0.4.7; +import "./tests.sol"; +import "./simple_storage.sol"; + +contract MyTest2 { + SimpleStorage foo; + uint i = 0; + + function beforeEach() { + foo = new SimpleStorage(); + //if (i == 1) { + // foo.set(200); + //} + //i += 1; + } + + function initialValueShouldBe100() public constant returns (bool) { + return Assert.equal(foo.get(), 100, "initial value is not correct"); + //return foo.get() == 100; + } + + //function initialValueShouldBe200() public constant returns (bool) { + // return Assert.equal(foo.get(), 200, "initial value is not correct"); + //} + +} diff --git a/examples2/simple_storage_test.sol b/examples2/simple_storage_test.sol new file mode 100644 index 0000000000..e6900d7d0f --- /dev/null +++ b/examples2/simple_storage_test.sol @@ -0,0 +1,44 @@ +pragma solidity ^0.4.7; +import "./tests.sol"; +import "./simple_storage.sol"; + +//contract MyTest { +// SimpleStorage foo; +// +// function beforeAll() { +// foo = new SimpleStorage(); +// } +// +// function initialValueShouldBe100() public { +// Assert.equal(foo.get(), 100, "initial value is not correct"); +// } +// +// function initialValueShouldBe200() public { +// Assert.equal(foo.get(), 200, "initial value is not correct"); +// } +// +//} + +contract MyTest { + SimpleStorage foo; + uint i = 0; + + function beforeEach() { + foo = new SimpleStorage(); + //if (i == 1) { + // foo.set(200); + //} + //i += 1; + } + + function initialValueShouldBe100() public constant returns (bool) { + return Assert.equal(foo.get(), 100, "initial value is not correct"); + } + + //function initialValueShouldBe200() public constant returns (bool) { + // return Assert.equal(foo.get(), 200, "initial value is not correct"); + //} + +} + + diff --git a/mytest.sol b/mytest.sol new file mode 100644 index 0000000000..3b1c4fb2fe --- /dev/null +++ b/mytest.sol @@ -0,0 +1,20 @@ +pragma solidity ^0.4.7; +import "./tests.sol"; + +contract MyTest { + SimpleStorage foo; + + function beforeAll() { + foo = new SimpleStorage(); + } + + function initialValueShouldBe100() public { + Assert.equal(foo.get(), 100, "initial value is not correct"); + } + + function initialValueShouldBe200() public { + Assert.equal(foo.get(), 200, "initial value is not correct"); + } + +} + diff --git a/sol/tests.sol b/sol/tests.sol index d4a3975b8a..c439054b12 100644 --- a/sol/tests.sol +++ b/sol/tests.sol @@ -15,6 +15,8 @@ library Assert { function equal(uint a, uint b, string message) public returns (bool result) { result = (a == b); AssertionEvent(result, message); + //result = true; + //return true; } function equal(int a, int b, string message) public returns (bool result) { @@ -60,43 +62,43 @@ library Assert { AssertionEvent(result, message); } - function notEqual(int a, int b, string message) public returns (bool result) { - result = (a != b); - AssertionEvent(result, message); - } - - function notEqual(bool a, bool b, string message) public returns (bool result) { - result = (a != b); - AssertionEvent(result, message); - } - - // TODO: only for certain versions of solc - //function notEqual(fixed a, fixed b, string message) public returns (bool result) { - // result = (a != b); - // AssertionEvent(result, message); - //} - - // TODO: only for certain versions of solc - //function notEqual(ufixed a, ufixed b, string message) public returns (bool result) { - // result = (a != b); - // AssertionEvent(result, message); - //} - - function notEqual(address a, address b, string message) public returns (bool result) { - result = (a != b); - AssertionEvent(result, message); - } - - function notEqual(bytes32 a, bytes32 b, string message) public returns (bool result) { - result = (a != b); - AssertionEvent(result, message); - } - - // TODO: needs to be convert to bytes first to be comparable - //function notEqual(string a, string b, string message) public returns (bool result) { - // result = (a != b); - // AssertionEvent(result, message); - //} +// function notEqual(int a, int b, string message) public returns (bool result) { +// result = (a != b); +// AssertionEvent(result, message); +// } + +// function notEqual(bool a, bool b, string message) public returns (bool result) { +// result = (a != b); +// AssertionEvent(result, message); +// } +// +// // TODO: only for certain versions of solc +// //function notEqual(fixed a, fixed b, string message) public returns (bool result) { +// // result = (a != b); +// // AssertionEvent(result, message); +// //} +// +// // TODO: only for certain versions of solc +// //function notEqual(ufixed a, ufixed b, string message) public returns (bool result) { +// // result = (a != b); +// // AssertionEvent(result, message); +// //} +// +// function notEqual(address a, address b, string message) public returns (bool result) { +// result = (a != b); +// AssertionEvent(result, message); +// } +// +// function notEqual(bytes32 a, bytes32 b, string message) public returns (bool result) { +// result = (a != b); +// AssertionEvent(result, message); +// } +// +// // TODO: needs to be convert to bytes first to be comparable +// //function notEqual(string a, string b, string message) public returns (bool result) { +// // result = (a != b); +// // AssertionEvent(result, message); +// //} } diff --git a/src/compiler.js b/src/compiler.js index dc74d2d1a4..b3c73008b0 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -17,6 +17,8 @@ function compileFileOrFiles (filename, isDirectory, cb) { // should be replaced with remix's & browser solidity compiler code filepath = (isDirectory ? filename : path.dirname(filename)) + //sources[filename] = {content: fs.readFileSync(path.join(filepath, filename)).toString()} + //console.dir(sources); fs.readdirSync(filepath).forEach(file => { sources[file] = {content: fs.readFileSync(path.join(filepath, file)).toString()} }) @@ -36,7 +38,9 @@ function compileFileOrFiles (filename, isDirectory, cb) { compiler.compile(sources, filepath) } ], function (err, result) { - let errors = result.errors.filter((e) => e.type === 'Error') + console.dir(err); + console.dir(result); + let errors = (result.errors || []).filter((e) => e.type === 'Error') if (errors.length > 0) { console.dir(errors) return cb(new Error('errors compiling')) diff --git a/src/txProcess.js b/src/txProcess.js index 89a421f277..b7bb1ab21f 100644 --- a/src/txProcess.js +++ b/src/txProcess.js @@ -12,6 +12,7 @@ function runTx(payload, from, to, data, value, gasLimit, txRunner, callbacks, is let finalCallback = function(err, result) { let toReturn; if (isCall) { + console.dir('---- result is '); console.dir(result.result.vm.return); console.dir(result.result.vm); toReturn = "0x" + result.result.vm.return.toString('hex') @@ -25,7 +26,7 @@ function runTx(payload, from, to, data, value, gasLimit, txRunner, callbacks, is callback(null, jsonRPCResponse(payload.id, toReturn)) } - TxExecution.callFunction(from, to, data, value, gasLimit, null, txRunner, callbacks, finalCallback) + TxExecution.callFunction(from, to, data, value, gasLimit, null, txRunner, callbacks, finalCallback, isCall) } function createContract(payload, from, data, value, gasLimit, txRunner, callbacks, callback) { diff --git a/test.js b/test.js new file mode 100644 index 0000000000..4dcdc56680 --- /dev/null +++ b/test.js @@ -0,0 +1,62 @@ +var async = require('async') +const Web3 = require('web3') +const Provider = require('./src/provider.js') +const Compiler = require('./src/compiler.js') + +let web3 = new Web3() +web3.setProvider(new Provider()) +let accounts = []; + +async.waterfall([ + function compileContract(next) { + Compiler.compileFileOrFiles('test.sol', false, next); + }, + function getAccounts(contracts, next) { + web3.eth.getAccounts((err, _accounts) => { + accounts = _accounts; + next(null, contracts); + }); + }, + function deployContract(contracts, next) { + let contract = contracts['test.sol'].SimpleStorage; + let abi = contract.abi; + let code = contract.evm.bytecode.object; + + console.dir(contracts); + + let contractObject = new web3.eth.Contract(abi) + let deployObject = contractObject.deploy({arguments: [], data: code}) + + deployObject.send({ + from: accounts[0], + gas: 1200000 + }).on('receipt', function (receipt) { + console.dir("==== got the receipt"); + console.dir(receipt); + + contractObject.options.address = receipt.contractAddress + contractObject.options.from = accounts[0] + contractObject.options.gas = 5000 * 1000 + //next(null, receipt.contractAddress); + next(null, contractObject); + }) + }, + function callContract(contract, next) { + console.dir('=============='); + console.dir(contract); + + //contract.methods.storedData().call(console.dir); + //contract.methods.get().call(console.dir); + contract.methods.set(50).send({from: accounts[0]}).then(() => { + console.dir('value was set'); + next(null, contract); + }); + }, + function callContract2(contract, next) { + contract.methods.get2().call(console.dir); + next(null, contract); + } +], function(err, results) { + //console.dir(arguments); +}); + diff --git a/test.sol b/test.sol new file mode 100644 index 0000000000..807ecdecd4 --- /dev/null +++ b/test.sol @@ -0,0 +1,22 @@ +pragma solidity ^0.4.7; +contract SimpleStorage { + uint public storedData; + + function SimpleStorage() public { + storedData = 100; + } + + function set(uint x) public { + storedData = x; + } + + function get() public view returns (uint retVal) { + return storedData; + } + + function get2() public constant returns (bool) { + return storedData != 2; + } + +} + From b80e3dc8f80474555be853ec5124254ffcd7588a Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 13 Apr 2018 16:58:56 -0400 Subject: [PATCH 055/105] fix gas var; set high enough value --- sol/tests.sol | 64 ++++++++++++++++++++++++------------------------ src/deployer.js | 3 ++- src/provider.js | 2 +- src/txProcess.js | 11 ++++++--- 4 files changed, 42 insertions(+), 38 deletions(-) diff --git a/sol/tests.sol b/sol/tests.sol index c439054b12..ea57c834c8 100644 --- a/sol/tests.sol +++ b/sol/tests.sol @@ -62,38 +62,38 @@ library Assert { AssertionEvent(result, message); } -// function notEqual(int a, int b, string message) public returns (bool result) { -// result = (a != b); -// AssertionEvent(result, message); -// } - -// function notEqual(bool a, bool b, string message) public returns (bool result) { -// result = (a != b); -// AssertionEvent(result, message); -// } -// -// // TODO: only for certain versions of solc -// //function notEqual(fixed a, fixed b, string message) public returns (bool result) { -// // result = (a != b); -// // AssertionEvent(result, message); -// //} -// -// // TODO: only for certain versions of solc -// //function notEqual(ufixed a, ufixed b, string message) public returns (bool result) { -// // result = (a != b); -// // AssertionEvent(result, message); -// //} -// -// function notEqual(address a, address b, string message) public returns (bool result) { -// result = (a != b); -// AssertionEvent(result, message); -// } -// -// function notEqual(bytes32 a, bytes32 b, string message) public returns (bool result) { -// result = (a != b); -// AssertionEvent(result, message); -// } -// + function notEqual(int a, int b, string message) public returns (bool result) { + result = (a != b); + AssertionEvent(result, message); + } + + function notEqual(bool a, bool b, string message) public returns (bool result) { + result = (a != b); + AssertionEvent(result, message); + } + + // TODO: only for certain versions of solc + //function notEqual(fixed a, fixed b, string message) public returns (bool result) { + // result = (a != b); + // AssertionEvent(result, message); + //} + + // TODO: only for certain versions of solc + //function notEqual(ufixed a, ufixed b, string message) public returns (bool result) { + // result = (a != b); + // AssertionEvent(result, message); + //} + + function notEqual(address a, address b, string message) public returns (bool result) { + result = (a != b); + AssertionEvent(result, message); + } + + function notEqual(bytes32 a, bytes32 b, string message) public returns (bool result) { + result = (a != b); + AssertionEvent(result, message); + } + // // TODO: needs to be convert to bytes first to be comparable // //function notEqual(string a, string b, string message) public returns (bool result) { // // result = (a != b); diff --git a/src/deployer.js b/src/deployer.js index 1bae8cd9d8..7f8d07ed31 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -83,7 +83,8 @@ function deployAll (compileResult, web3, callback) { console.dir(accounts); deployObject.send({ from: accounts[0], - gas: Math.ceil(gasValue * 1.1) + //gas: Math.ceil(gasValue * 1.2) + gas: 1200000 }).on('receipt', function (receipt) { console.dir("==== got the receipt"); diff --git a/src/provider.js b/src/provider.js index ff2b85cf45..785ac31a80 100644 --- a/src/provider.js +++ b/src/provider.js @@ -30,7 +30,7 @@ Provider.prototype.sendAsync = function(payload, callback) { return callback(null, jsonRPCResponse(payload.id, this.accounts.map((x) => x.address))) } if (payload.method === 'eth_estimateGas') { - callback(null, jsonRPCResponse(payload.id, 800000)) + callback(null, jsonRPCResponse(payload.id, 1200000)) } if (payload.method === 'eth_gasPrice') { callback(null, jsonRPCResponse(payload.id, 1)) diff --git a/src/txProcess.js b/src/txProcess.js index b7bb1ab21f..334a01e80d 100644 --- a/src/txProcess.js +++ b/src/txProcess.js @@ -33,6 +33,9 @@ function createContract(payload, from, data, value, gasLimit, txRunner, callback console.log('-- createContract'); console.dir(arguments); let finalCallback = function(err, result) { + if (err) { + return callback(err); + } let contractAddress = ('0x' + result.result.createdAddress.toString('hex')) callback(null, jsonRPCResponse(payload.id, result.transactionHash)) } @@ -71,8 +74,8 @@ function processTx(accounts, payload, isCall, callback) { executionContext.init(api.config); let txRunner = new TxRunner(accounts, api); - let { from: from, to: to, data: data, value: value, gasLimit: gasLimit } = payload.params[0]; - gasLimit = gasLimit || 800000; + let { from: from, to: to, data: data, value: value, gas: gas } = payload.params[0]; + gas = gas || 1200000; let callbacks = { confirmationCb: (network, tx, gasEstimation, continueTxExecution, cancelCb) => { @@ -87,9 +90,9 @@ function processTx(accounts, payload, isCall, callback) { } if (to) { - runTx(payload, from, to, data, value, gasLimit, txRunner, callbacks, isCall, callback); + runTx(payload, from, to, data, value, gas, txRunner, callbacks, isCall, callback); } else { - createContract(payload, from, data, value, gasLimit, txRunner, callbacks, callback); + createContract(payload, from, data, value, gas, txRunner, callbacks, callback); } } From c702e153d60ee874b10be17b5222c170128f3d65 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 13 Apr 2018 17:12:24 -0400 Subject: [PATCH 056/105] cleanup --- src/compiler.js | 2 -- src/deployer.js | 12 ++---------- src/provider.js | 4 +--- src/txProcess.js | 9 +-------- 4 files changed, 4 insertions(+), 23 deletions(-) diff --git a/src/compiler.js b/src/compiler.js index b3c73008b0..6dfb321abe 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -38,8 +38,6 @@ function compileFileOrFiles (filename, isDirectory, cb) { compiler.compile(sources, filepath) } ], function (err, result) { - console.dir(err); - console.dir(result); let errors = (result.errors || []).filter((e) => e.type === 'Error') if (errors.length > 0) { console.dir(errors) diff --git a/src/deployer.js b/src/deployer.js index 7f8d07ed31..ec65d991cf 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -79,17 +79,11 @@ function deployAll (compileResult, web3, callback) { let deployObject = contractObject.deploy({arguments: [], data: contractCode}) deployObject.estimateGas().then((gasValue) => { - console.dir("got gas estimation " + gasValue); - console.dir(accounts); deployObject.send({ from: accounts[0], - //gas: Math.ceil(gasValue * 1.2) - gas: 1200000 + gas: Math.ceil(gasValue * 1.2) + //gas: 1200000 }).on('receipt', function (receipt) { - - console.dir("==== got the receipt"); - console.dir(receipt); - contractObject.options.address = receipt.contractAddress contractObject.options.from = accounts[0] contractObject.options.gas = 5000 * 1000 @@ -99,8 +93,6 @@ function deployAll (compileResult, web3, callback) { nextEach() }).on('error', function(err) { - console.dir("==============="); - console.dir("error"); console.dir(err); }) }) diff --git a/src/provider.js b/src/provider.js index 785ac31a80..428c66269a 100644 --- a/src/provider.js +++ b/src/provider.js @@ -23,14 +23,12 @@ Provider = function() { Provider.prototype.sendAsync = function(payload, callback) { const self = this; - //console.log("=========== sendAsync"); - //console.dir(payload); if (payload.method === 'eth_accounts') { return callback(null, jsonRPCResponse(payload.id, this.accounts.map((x) => x.address))) } if (payload.method === 'eth_estimateGas') { - callback(null, jsonRPCResponse(payload.id, 1200000)) + callback(null, jsonRPCResponse(payload.id, 3000000)) } if (payload.method === 'eth_gasPrice') { callback(null, jsonRPCResponse(payload.id, 1)) diff --git a/src/txProcess.js b/src/txProcess.js index 334a01e80d..830cc56cef 100644 --- a/src/txProcess.js +++ b/src/txProcess.js @@ -8,13 +8,9 @@ function jsonRPCResponse(id, result) { } function runTx(payload, from, to, data, value, gasLimit, txRunner, callbacks, isCall, callback) { - console.log('-- runTx'); let finalCallback = function(err, result) { let toReturn; if (isCall) { - console.dir('---- result is '); - console.dir(result.result.vm.return); - console.dir(result.result.vm); toReturn = "0x" + result.result.vm.return.toString('hex') if (toReturn === '0x') { toReturn = '0x0' @@ -30,8 +26,6 @@ function runTx(payload, from, to, data, value, gasLimit, txRunner, callbacks, is } function createContract(payload, from, data, value, gasLimit, txRunner, callbacks, callback) { - console.log('-- createContract'); - console.dir(arguments); let finalCallback = function(err, result) { if (err) { return callback(err); @@ -44,7 +38,6 @@ function createContract(payload, from, data, value, gasLimit, txRunner, callback } function processTx(accounts, payload, isCall, callback) { - console.log('-- processTx'); let api = { logMessage: (msg) => { }, @@ -75,7 +68,7 @@ function processTx(accounts, payload, isCall, callback) { let txRunner = new TxRunner(accounts, api); let { from: from, to: to, data: data, value: value, gas: gas } = payload.params[0]; - gas = gas || 1200000; + gas = gas || 3000000; let callbacks = { confirmationCb: (network, tx, gasEstimation, continueTxExecution, cancelCb) => { From 4126ff1c1c40217b4b7b3a19dfd0774389abf0de Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 16 Apr 2018 16:55:11 -0400 Subject: [PATCH 057/105] handle error from receipt; add todo regarding orgder of tests; fix ws provider --- examples/simple_storage2_test.sol | 11 +++++++++-- run.js | 2 +- src/compiler.js | 2 -- src/testRunner.js | 4 ++++ 4 files changed, 14 insertions(+), 5 deletions(-) diff --git a/examples/simple_storage2_test.sol b/examples/simple_storage2_test.sol index a87fb90f33..9c5765efce 100644 --- a/examples/simple_storage2_test.sol +++ b/examples/simple_storage2_test.sol @@ -6,8 +6,11 @@ contract MyTest2 { SimpleStorage foo; uint i = 0; - function beforeEach() { + function beforeAll() { foo = new SimpleStorage(); + } + + function beforeEach() { if (i == 1) { foo.set(200); } @@ -22,6 +25,10 @@ contract MyTest2 { return Assert.equal(foo.get(), 200, "initial value is not correct"); } -} + // TODO: the tests don't necessarily run in order + //function initialValueShouldBe400() public constant returns (bool) { + // return Assert.equal(foo.get(), 400, "initial value is not correct"); + //} +} diff --git a/run.js b/run.js index 7205c5a1e2..d39756ba1f 100644 --- a/run.js +++ b/run.js @@ -9,7 +9,7 @@ commander.action(function (filename) { let web3 = new Web3() //web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')) web3.setProvider(new Provider()) - // web3.setProvider(new web3.providers.WebsocketProvider('http://localhost:8546')) + //web3.setProvider(new web3.providers.WebsocketProvider('ws://localhost:8546')) let isDirectory = fs.lstatSync(filename).isDirectory() RemixTests.runTestFiles(filename, isDirectory, web3) diff --git a/src/compiler.js b/src/compiler.js index 6dfb321abe..886b8ca18c 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -17,8 +17,6 @@ function compileFileOrFiles (filename, isDirectory, cb) { // should be replaced with remix's & browser solidity compiler code filepath = (isDirectory ? filename : path.dirname(filename)) - //sources[filename] = {content: fs.readFileSync(path.join(filepath, filename)).toString()} - //console.dir(sources); fs.readdirSync(filepath).forEach(file => { sources[file] = {content: fs.readFileSync(path.join(filepath, file)).toString()} }) diff --git a/src/testRunner.js b/src/testRunner.js index fe868c1c2d..e2fa95eeda 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -83,6 +83,10 @@ function runTest (testName, testObject, testCallback, resultsCallback) { } } next() + }).on('error', function(err) { + console.dir("======== error ========"); + console.dir(err); + next(err); }) } }, function () { From 8259f67950dace1de85b2edf68164aa1b7d92428 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 16 Apr 2018 18:28:49 -0400 Subject: [PATCH 058/105] remove no longer needed files --- examples2/simple_storage.sol | 17 -------- examples2/simple_storage2_test.sol | 26 ------------- examples2/simple_storage_test.sol | 44 --------------------- mytest.sol | 20 ---------- test.js | 62 ------------------------------ test.sol | 22 ----------- 6 files changed, 191 deletions(-) delete mode 100644 examples2/simple_storage.sol delete mode 100644 examples2/simple_storage2_test.sol delete mode 100644 examples2/simple_storage_test.sol delete mode 100644 mytest.sol delete mode 100644 test.js delete mode 100644 test.sol diff --git a/examples2/simple_storage.sol b/examples2/simple_storage.sol deleted file mode 100644 index 4f8a84a5b1..0000000000 --- a/examples2/simple_storage.sol +++ /dev/null @@ -1,17 +0,0 @@ -pragma solidity ^0.4.7; -contract SimpleStorage { - uint public storedData; - - function SimpleStorage() public { - storedData = 100; - } - - function set(uint x) public { - storedData = x; - } - - function get() public view returns (uint retVal) { - return storedData; - } - -} diff --git a/examples2/simple_storage2_test.sol b/examples2/simple_storage2_test.sol deleted file mode 100644 index f1095bb0d1..0000000000 --- a/examples2/simple_storage2_test.sol +++ /dev/null @@ -1,26 +0,0 @@ -pragma solidity ^0.4.7; -import "./tests.sol"; -import "./simple_storage.sol"; - -contract MyTest2 { - SimpleStorage foo; - uint i = 0; - - function beforeEach() { - foo = new SimpleStorage(); - //if (i == 1) { - // foo.set(200); - //} - //i += 1; - } - - function initialValueShouldBe100() public constant returns (bool) { - return Assert.equal(foo.get(), 100, "initial value is not correct"); - //return foo.get() == 100; - } - - //function initialValueShouldBe200() public constant returns (bool) { - // return Assert.equal(foo.get(), 200, "initial value is not correct"); - //} - -} diff --git a/examples2/simple_storage_test.sol b/examples2/simple_storage_test.sol deleted file mode 100644 index e6900d7d0f..0000000000 --- a/examples2/simple_storage_test.sol +++ /dev/null @@ -1,44 +0,0 @@ -pragma solidity ^0.4.7; -import "./tests.sol"; -import "./simple_storage.sol"; - -//contract MyTest { -// SimpleStorage foo; -// -// function beforeAll() { -// foo = new SimpleStorage(); -// } -// -// function initialValueShouldBe100() public { -// Assert.equal(foo.get(), 100, "initial value is not correct"); -// } -// -// function initialValueShouldBe200() public { -// Assert.equal(foo.get(), 200, "initial value is not correct"); -// } -// -//} - -contract MyTest { - SimpleStorage foo; - uint i = 0; - - function beforeEach() { - foo = new SimpleStorage(); - //if (i == 1) { - // foo.set(200); - //} - //i += 1; - } - - function initialValueShouldBe100() public constant returns (bool) { - return Assert.equal(foo.get(), 100, "initial value is not correct"); - } - - //function initialValueShouldBe200() public constant returns (bool) { - // return Assert.equal(foo.get(), 200, "initial value is not correct"); - //} - -} - - diff --git a/mytest.sol b/mytest.sol deleted file mode 100644 index 3b1c4fb2fe..0000000000 --- a/mytest.sol +++ /dev/null @@ -1,20 +0,0 @@ -pragma solidity ^0.4.7; -import "./tests.sol"; - -contract MyTest { - SimpleStorage foo; - - function beforeAll() { - foo = new SimpleStorage(); - } - - function initialValueShouldBe100() public { - Assert.equal(foo.get(), 100, "initial value is not correct"); - } - - function initialValueShouldBe200() public { - Assert.equal(foo.get(), 200, "initial value is not correct"); - } - -} - diff --git a/test.js b/test.js deleted file mode 100644 index 4dcdc56680..0000000000 --- a/test.js +++ /dev/null @@ -1,62 +0,0 @@ -var async = require('async') -const Web3 = require('web3') -const Provider = require('./src/provider.js') -const Compiler = require('./src/compiler.js') - -let web3 = new Web3() -web3.setProvider(new Provider()) -let accounts = []; - -async.waterfall([ - function compileContract(next) { - Compiler.compileFileOrFiles('test.sol', false, next); - }, - function getAccounts(contracts, next) { - web3.eth.getAccounts((err, _accounts) => { - accounts = _accounts; - next(null, contracts); - }); - }, - function deployContract(contracts, next) { - let contract = contracts['test.sol'].SimpleStorage; - let abi = contract.abi; - let code = contract.evm.bytecode.object; - - console.dir(contracts); - - let contractObject = new web3.eth.Contract(abi) - let deployObject = contractObject.deploy({arguments: [], data: code}) - - deployObject.send({ - from: accounts[0], - gas: 1200000 - }).on('receipt', function (receipt) { - console.dir("==== got the receipt"); - console.dir(receipt); - - contractObject.options.address = receipt.contractAddress - contractObject.options.from = accounts[0] - contractObject.options.gas = 5000 * 1000 - //next(null, receipt.contractAddress); - next(null, contractObject); - }) - }, - function callContract(contract, next) { - console.dir('=============='); - console.dir(contract); - - //contract.methods.storedData().call(console.dir); - //contract.methods.get().call(console.dir); - contract.methods.set(50).send({from: accounts[0]}).then(() => { - console.dir('value was set'); - next(null, contract); - }); - }, - function callContract2(contract, next) { - contract.methods.get2().call(console.dir); - next(null, contract); - } -], function(err, results) { - //console.dir(arguments); -}); - diff --git a/test.sol b/test.sol deleted file mode 100644 index 807ecdecd4..0000000000 --- a/test.sol +++ /dev/null @@ -1,22 +0,0 @@ -pragma solidity ^0.4.7; -contract SimpleStorage { - uint public storedData; - - function SimpleStorage() public { - storedData = 100; - } - - function set(uint x) public { - storedData = x; - } - - function get() public view returns (uint retVal) { - return storedData; - } - - function get2() public constant returns (bool) { - return storedData != 2; - } - -} - From ec53df3876aa626dcae3c7ffc0a9069b0783f099 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 16 Apr 2018 18:35:29 -0400 Subject: [PATCH 059/105] cleanup --- sol/tests.sol | 13 +++++-------- src/deployer.js | 4 ++-- src/provider.js | 2 +- src/testRunner.js | 2 -- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/sol/tests.sol b/sol/tests.sol index ea57c834c8..4fafe85392 100644 --- a/sol/tests.sol +++ b/sol/tests.sol @@ -15,8 +15,6 @@ library Assert { function equal(uint a, uint b, string message) public returns (bool result) { result = (a == b); AssertionEvent(result, message); - //result = true; - //return true; } function equal(int a, int b, string message) public returns (bool result) { @@ -94,12 +92,11 @@ library Assert { AssertionEvent(result, message); } -// // TODO: needs to be convert to bytes first to be comparable -// //function notEqual(string a, string b, string message) public returns (bool result) { -// // result = (a != b); -// // AssertionEvent(result, message); -// //} - + // TODO: needs to be convert to bytes first to be comparable + //function notEqual(string a, string b, string message) public returns (bool result) { + // result = (a != b); + // AssertionEvent(result, message); + //} } diff --git a/src/deployer.js b/src/deployer.js index ec65d991cf..3d453ea08a 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -82,7 +82,6 @@ function deployAll (compileResult, web3, callback) { deployObject.send({ from: accounts[0], gas: Math.ceil(gasValue * 1.2) - //gas: 1200000 }).on('receipt', function (receipt) { contractObject.options.address = receipt.contractAddress contractObject.options.from = accounts[0] @@ -93,7 +92,8 @@ function deployAll (compileResult, web3, callback) { nextEach() }).on('error', function(err) { - console.dir(err); + console.dir(err) + nextEach(err) }) }) }, function () { diff --git a/src/provider.js b/src/provider.js index 428c66269a..454ad65599 100644 --- a/src/provider.js +++ b/src/provider.js @@ -40,7 +40,7 @@ Provider.prototype.sendAsync = function(payload, callback) { executionContext.web3().eth.getTransactionReceipt(payload.params[0], (error, receipt) => { self.deployedContracts[receipt.contractAddress] = receipt.data - var r = { + var r = { "transactionHash": receipt.hash, "transactionIndex": "0x00", "blockHash": "0x766d18646a06cf74faeabf38597314f84a82c3851859d9da9d94fc8d037269e5", diff --git a/src/testRunner.js b/src/testRunner.js index e2fa95eeda..605aa5b050 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -84,8 +84,6 @@ function runTest (testName, testObject, testCallback, resultsCallback) { } next() }).on('error', function(err) { - console.dir("======== error ========"); - console.dir(err); next(err); }) } From 06a1155271f9150a23d73dd699c9b13eab4fe66c Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 16 Apr 2018 19:36:37 -0400 Subject: [PATCH 060/105] address linting issues --- run.js | 4 ++-- src/deployer.js | 2 +- src/provider.js | 58 +++++++++++++++++++++++---------------------- src/testRunner.js | 4 ++-- src/txProcess.js | 60 ++++++++++++++++++++++++++--------------------- 5 files changed, 68 insertions(+), 60 deletions(-) diff --git a/run.js b/run.js index d39756ba1f..6c55180e2c 100644 --- a/run.js +++ b/run.js @@ -7,9 +7,9 @@ const Provider = require('./src/provider.js') commander.action(function (filename) { let web3 = new Web3() - //web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')) + // web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')) web3.setProvider(new Provider()) - //web3.setProvider(new web3.providers.WebsocketProvider('ws://localhost:8546')) + // web3.setProvider(new web3.providers.WebsocketProvider('ws://localhost:8546')) let isDirectory = fs.lstatSync(filename).isDirectory() RemixTests.runTestFiles(filename, isDirectory, web3) diff --git a/src/deployer.js b/src/deployer.js index 3d453ea08a..e769030179 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -91,7 +91,7 @@ function deployAll (compileResult, web3, callback) { contracts[contractName] = contractObject nextEach() - }).on('error', function(err) { + }).on('error', function (err) { console.dir(err) nextEach(err) }) diff --git a/src/provider.js b/src/provider.js index 454ad65599..31f3f99fee 100644 --- a/src/provider.js +++ b/src/provider.js @@ -1,28 +1,27 @@ var Web3 = require('web3') -var utils = require('ethereumjs-util') var RemixLib = require('remix-lib') var executionContext = RemixLib.execution.executionContext var processTx = require('./txProcess.js') -function jsonRPCResponse(id, result) { - return {"id":id,"jsonrpc":"2.0","result":result}; +function jsonRPCResponse (id, result) { + return {'id': id, 'jsonrpc': '2.0', 'result': result} } -Provider = function() { - this.web3 = new Web3(); +var Provider = function () { + this.web3 = new Web3() // TODO: make it random - this.accounts = [this.web3.eth.accounts.create(["abcd"])] + this.accounts = [this.web3.eth.accounts.create(['abcd'])] - this.accounts[this.accounts[0].address.toLowerCase()] = this.accounts[0]; - this.accounts[this.accounts[0].address.toLowerCase()].privateKey = Buffer.from(this.accounts[this.accounts[0].address.toLowerCase()].privateKey.slice(2), 'hex'); + this.accounts[this.accounts[0].address.toLowerCase()] = this.accounts[0] + this.accounts[this.accounts[0].address.toLowerCase()].privateKey = Buffer.from(this.accounts[this.accounts[0].address.toLowerCase()].privateKey.slice(2), 'hex') // TODO: fix me; this is a temporary and very hackish thing just to get the getCode working for now - this.deployedContracts = {}; + this.deployedContracts = {} } -Provider.prototype.sendAsync = function(payload, callback) { - const self = this; +Provider.prototype.sendAsync = function (payload, callback) { + const self = this if (payload.method === 'eth_accounts') { return callback(null, jsonRPCResponse(payload.id, this.accounts.map((x) => x.address))) @@ -38,36 +37,39 @@ Provider.prototype.sendAsync = function(payload, callback) { } if (payload.method === 'eth_getTransactionReceipt') { executionContext.web3().eth.getTransactionReceipt(payload.params[0], (error, receipt) => { + if (error) { + return callback(error) + } self.deployedContracts[receipt.contractAddress] = receipt.data var r = { - "transactionHash": receipt.hash, - "transactionIndex": "0x00", - "blockHash": "0x766d18646a06cf74faeabf38597314f84a82c3851859d9da9d94fc8d037269e5", - "blockNumber": "0x06", - "gasUsed": "0x06345f", - "cumulativeGasUsed": "0x06345f", - "contractAddress": receipt.contractAddress, - "logs": [], - "status": 1 + 'transactionHash': receipt.hash, + 'transactionIndex': '0x00', + 'blockHash': '0x766d18646a06cf74faeabf38597314f84a82c3851859d9da9d94fc8d037269e5', + 'blockNumber': '0x06', + 'gasUsed': '0x06345f', + 'cumulativeGasUsed': '0x06345f', + 'contractAddress': receipt.contractAddress, + 'logs': [], + 'status': 1 } - callback(null, jsonRPCResponse(payload.id, r)); - }); + callback(null, jsonRPCResponse(payload.id, r)) + }) } if (payload.method === 'eth_getCode') { - let address = payload.params[0]; - let block = payload.params[1]; + let address = payload.params[0] + // let block = payload.params[1] - callback(null, jsonRPCResponse(payload.id, self.deployedContracts[address])); + callback(null, jsonRPCResponse(payload.id, self.deployedContracts[address])) } if (payload.method === 'eth_call') { processTx(this.accounts, payload, true, callback) } } -Provider.prototype.isConnected = function() { - return true; +Provider.prototype.isConnected = function () { + return true } -module.exports = Provider; +module.exports = Provider diff --git a/src/testRunner.js b/src/testRunner.js index 605aa5b050..cc8ebf7a3c 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -83,8 +83,8 @@ function runTest (testName, testObject, testCallback, resultsCallback) { } } next() - }).on('error', function(err) { - next(err); + }).on('error', function (err) { + next(err) }) } }, function () { diff --git a/src/txProcess.js b/src/txProcess.js index 830cc56cef..702fb9d713 100644 --- a/src/txProcess.js +++ b/src/txProcess.js @@ -3,15 +3,18 @@ var TxExecution = RemixLib.execution.txExecution var TxRunner = RemixLib.execution.txRunner var executionContext = RemixLib.execution.executionContext -function jsonRPCResponse(id, result) { - return {"id":id,"jsonrpc":"2.0","result":result}; +function jsonRPCResponse (id, result) { + return {'id': id, 'jsonrpc': '2.0', 'result': result} } -function runTx(payload, from, to, data, value, gasLimit, txRunner, callbacks, isCall, callback) { - let finalCallback = function(err, result) { - let toReturn; +function runTx (payload, from, to, data, value, gasLimit, txRunner, callbacks, isCall, callback) { + let finalCallback = function (err, result) { + if (err) { + return callback(err) + } + let toReturn if (isCall) { - toReturn = "0x" + result.result.vm.return.toString('hex') + toReturn = '0x' + result.result.vm.return.toString('hex') if (toReturn === '0x') { toReturn = '0x0' } @@ -25,30 +28,30 @@ function runTx(payload, from, to, data, value, gasLimit, txRunner, callbacks, is TxExecution.callFunction(from, to, data, value, gasLimit, null, txRunner, callbacks, finalCallback, isCall) } -function createContract(payload, from, data, value, gasLimit, txRunner, callbacks, callback) { - let finalCallback = function(err, result) { +function createContract (payload, from, data, value, gasLimit, txRunner, callbacks, callback) { + let finalCallback = function (err, result) { if (err) { - return callback(err); + return callback(err) } - let contractAddress = ('0x' + result.result.createdAddress.toString('hex')) + // let contractAddress = ('0x' + result.result.createdAddress.toString('hex')) callback(null, jsonRPCResponse(payload.id, result.transactionHash)) } - TxExecution.createContract(from, data, value, gasLimit, txRunner, callbacks, finalCallback); + TxExecution.createContract(from, data, value, gasLimit, txRunner, callbacks, finalCallback) } -function processTx(accounts, payload, isCall, callback) { +function processTx (accounts, payload, isCall, callback) { let api = { logMessage: (msg) => { }, logHtmlMessage: (msg) => { }, - //config: self._api.config, + // config: self._api.config, config: { getUnpersistedProperty: (key) => { - //if (key === 'settings/always-use-vm') { - // return true - //} + // if (key === 'settings/always-use-vm') { + // return true + // } return true }, get: () => { @@ -59,34 +62,37 @@ function processTx(accounts, payload, isCall, callback) { cb() }, personalMode: () => { - //return self._api.config.get('settings/personal-mode') + // return self._api.config.get('settings/personal-mode') return false } } - executionContext.init(api.config); + executionContext.init(api.config) - let txRunner = new TxRunner(accounts, api); - let { from: from, to: to, data: data, value: value, gas: gas } = payload.params[0]; - gas = gas || 3000000; + let txRunner = new TxRunner(accounts, api) + let { from, to, data, value, gas } = payload.params[0] + gas = gas || 3000000 let callbacks = { confirmationCb: (network, tx, gasEstimation, continueTxExecution, cancelCb) => { - continueTxExecution(null); + continueTxExecution(null) }, gasEstimationForceSend: (error, continueTxExecution, cancelCb) => { - continueTxExecution(); + if (error) { + continueTxExecution(error) + } + continueTxExecution() }, promptCb: (okCb, cancelCb) => { - okCb(); + okCb() } } if (to) { - runTx(payload, from, to, data, value, gas, txRunner, callbacks, isCall, callback); + runTx(payload, from, to, data, value, gas, txRunner, callbacks, isCall, callback) } else { - createContract(payload, from, data, value, gas, txRunner, callbacks, callback); + createContract(payload, from, data, value, gas, txRunner, callbacks, callback) } } -module.exports = processTx; +module.exports = processTx From 0b4a235c100f449ebb5edb7f9ecd25cab46ea049 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 16 Apr 2018 19:41:35 -0400 Subject: [PATCH 061/105] switch to vm provider --- tests/testRunner.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/testRunner.js b/tests/testRunner.js index 750984b710..43f02dc1c1 100644 --- a/tests/testRunner.js +++ b/tests/testRunner.js @@ -5,10 +5,11 @@ const assert = require('assert') let Compiler = require('../src/compiler.js') let Deployer = require('../src/deployer.js') let TestRunner = require('../src/testRunner.js') +let Provider = require('../src/provider.js') function compileAndDeploy (filename, callback) { let web3 = new Web3() - web3.setProvider(new web3.providers.HttpProvider('http://localhost:8545')) + web3.setProvider(new Provider()) async.waterfall([ function compile (next) { From 5364e7f6f11854a5d6574eb845e8aba3d814ea0c Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 16 Apr 2018 19:45:26 -0400 Subject: [PATCH 062/105] add travis file --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..98e69d2bc2 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "7" +script: + - npm run test From a51293ba985dc0e94cd1900bec187f951c9f486f Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 16 Apr 2018 20:00:09 -0400 Subject: [PATCH 063/105] add mocha to dev dependencies --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index 56de257bf7..7f902716ec 100644 --- a/package.json +++ b/package.json @@ -47,5 +47,8 @@ "remix-solidity": "latest", "standard": "^10.0.3", "web3": "1.0.0-beta.27" + }, + "devDependencies": { + "mocha": "^5.1.0" } } From 3d51abfdbd0b29c10daabee62345591c6e00ec9a Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 16 Apr 2018 20:07:07 -0400 Subject: [PATCH 064/105] add travis badge --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 3a6302abac..36bb5d4901 100644 --- a/README.md +++ b/README.md @@ -1 +1,3 @@ +[![Build Status](https://travis-ci.org/ethereum/remix-tests.svg?branch=master)](https://travis-ci.org/ethereum/remix-tests) + # remix-tests From a38192b234e22c0697ae785eec53c8c62eea290c Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 19 Apr 2018 16:28:07 -0400 Subject: [PATCH 065/105] use remix-simulator package --- package.json | 3 +- run.js | 2 +- src/provider.js | 75 ------------------------------------ src/txProcess.js | 98 ------------------------------------------------ 4 files changed, 3 insertions(+), 175 deletions(-) delete mode 100644 src/provider.js delete mode 100644 src/txProcess.js diff --git a/package.json b/package.json index 7f902716ec..387e4f28ab 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "contributors": [ { "name": "Iuri Matias", - "email": "iuri.matias@gmail.com" + "email": "iuri@ethereum.org" }, { "name": "Yann Levreau", @@ -45,6 +45,7 @@ "ethereumjs-vm": "^2.3.2", "remix-lib": "latest", "remix-solidity": "latest", + "remix-simulator": "latest", "standard": "^10.0.3", "web3": "1.0.0-beta.27" }, diff --git a/run.js b/run.js index 6c55180e2c..11dfdf3e50 100644 --- a/run.js +++ b/run.js @@ -3,7 +3,7 @@ const Web3 = require('web3') const RemixTests = require('./index.js') const fs = require('fs') -const Provider = require('./src/provider.js') +const Provider = require('remix-simulator').Provider; commander.action(function (filename) { let web3 = new Web3() diff --git a/src/provider.js b/src/provider.js deleted file mode 100644 index 31f3f99fee..0000000000 --- a/src/provider.js +++ /dev/null @@ -1,75 +0,0 @@ -var Web3 = require('web3') -var RemixLib = require('remix-lib') -var executionContext = RemixLib.execution.executionContext - -var processTx = require('./txProcess.js') - -function jsonRPCResponse (id, result) { - return {'id': id, 'jsonrpc': '2.0', 'result': result} -} - -var Provider = function () { - this.web3 = new Web3() - // TODO: make it random - this.accounts = [this.web3.eth.accounts.create(['abcd'])] - - this.accounts[this.accounts[0].address.toLowerCase()] = this.accounts[0] - this.accounts[this.accounts[0].address.toLowerCase()].privateKey = Buffer.from(this.accounts[this.accounts[0].address.toLowerCase()].privateKey.slice(2), 'hex') - - // TODO: fix me; this is a temporary and very hackish thing just to get the getCode working for now - this.deployedContracts = {} -} - -Provider.prototype.sendAsync = function (payload, callback) { - const self = this - - if (payload.method === 'eth_accounts') { - return callback(null, jsonRPCResponse(payload.id, this.accounts.map((x) => x.address))) - } - if (payload.method === 'eth_estimateGas') { - callback(null, jsonRPCResponse(payload.id, 3000000)) - } - if (payload.method === 'eth_gasPrice') { - callback(null, jsonRPCResponse(payload.id, 1)) - } - if (payload.method === 'eth_sendTransaction') { - processTx(this.accounts, payload, false, callback) - } - if (payload.method === 'eth_getTransactionReceipt') { - executionContext.web3().eth.getTransactionReceipt(payload.params[0], (error, receipt) => { - if (error) { - return callback(error) - } - self.deployedContracts[receipt.contractAddress] = receipt.data - - var r = { - 'transactionHash': receipt.hash, - 'transactionIndex': '0x00', - 'blockHash': '0x766d18646a06cf74faeabf38597314f84a82c3851859d9da9d94fc8d037269e5', - 'blockNumber': '0x06', - 'gasUsed': '0x06345f', - 'cumulativeGasUsed': '0x06345f', - 'contractAddress': receipt.contractAddress, - 'logs': [], - 'status': 1 - } - - callback(null, jsonRPCResponse(payload.id, r)) - }) - } - if (payload.method === 'eth_getCode') { - let address = payload.params[0] - // let block = payload.params[1] - - callback(null, jsonRPCResponse(payload.id, self.deployedContracts[address])) - } - if (payload.method === 'eth_call') { - processTx(this.accounts, payload, true, callback) - } -} - -Provider.prototype.isConnected = function () { - return true -} - -module.exports = Provider diff --git a/src/txProcess.js b/src/txProcess.js deleted file mode 100644 index 702fb9d713..0000000000 --- a/src/txProcess.js +++ /dev/null @@ -1,98 +0,0 @@ -var RemixLib = require('remix-lib') -var TxExecution = RemixLib.execution.txExecution -var TxRunner = RemixLib.execution.txRunner -var executionContext = RemixLib.execution.executionContext - -function jsonRPCResponse (id, result) { - return {'id': id, 'jsonrpc': '2.0', 'result': result} -} - -function runTx (payload, from, to, data, value, gasLimit, txRunner, callbacks, isCall, callback) { - let finalCallback = function (err, result) { - if (err) { - return callback(err) - } - let toReturn - if (isCall) { - toReturn = '0x' + result.result.vm.return.toString('hex') - if (toReturn === '0x') { - toReturn = '0x0' - } - } else { - toReturn = result.transactionHash - } - - callback(null, jsonRPCResponse(payload.id, toReturn)) - } - - TxExecution.callFunction(from, to, data, value, gasLimit, null, txRunner, callbacks, finalCallback, isCall) -} - -function createContract (payload, from, data, value, gasLimit, txRunner, callbacks, callback) { - let finalCallback = function (err, result) { - if (err) { - return callback(err) - } - // let contractAddress = ('0x' + result.result.createdAddress.toString('hex')) - callback(null, jsonRPCResponse(payload.id, result.transactionHash)) - } - - TxExecution.createContract(from, data, value, gasLimit, txRunner, callbacks, finalCallback) -} - -function processTx (accounts, payload, isCall, callback) { - let api = { - logMessage: (msg) => { - }, - logHtmlMessage: (msg) => { - }, - // config: self._api.config, - config: { - getUnpersistedProperty: (key) => { - // if (key === 'settings/always-use-vm') { - // return true - // } - return true - }, - get: () => { - return true - } - }, - detectNetwork: (cb) => { - cb() - }, - personalMode: () => { - // return self._api.config.get('settings/personal-mode') - return false - } - } - - executionContext.init(api.config) - - let txRunner = new TxRunner(accounts, api) - let { from, to, data, value, gas } = payload.params[0] - gas = gas || 3000000 - - let callbacks = { - confirmationCb: (network, tx, gasEstimation, continueTxExecution, cancelCb) => { - continueTxExecution(null) - }, - gasEstimationForceSend: (error, continueTxExecution, cancelCb) => { - if (error) { - continueTxExecution(error) - } - continueTxExecution() - }, - promptCb: (okCb, cancelCb) => { - okCb() - } - } - - if (to) { - runTx(payload, from, to, data, value, gas, txRunner, callbacks, isCall, callback) - } else { - createContract(payload, from, data, value, gas, txRunner, callbacks, callback) - } -} - -module.exports = processTx From 7f50a98be0443799f91cf537073c77b501e5f30e Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Sat, 21 Apr 2018 05:46:06 -0400 Subject: [PATCH 066/105] remove unused packages --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index 387e4f28ab..99fbdfee70 100644 --- a/package.json +++ b/package.json @@ -41,9 +41,6 @@ "change-case": "^3.0.1", "colors": "^1.1.2", "commander": "^2.13.0", - "ethereumjs-util": "^5.1.5", - "ethereumjs-vm": "^2.3.2", - "remix-lib": "latest", "remix-solidity": "latest", "remix-simulator": "latest", "standard": "^10.0.3", From 7c3dc342fb1ead8b9831c8b5beb5c89d3b2f0f80 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Sat, 21 Apr 2018 05:56:21 -0400 Subject: [PATCH 067/105] update tests --- tests/testRunner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testRunner.js b/tests/testRunner.js index 43f02dc1c1..66a784e960 100644 --- a/tests/testRunner.js +++ b/tests/testRunner.js @@ -5,7 +5,7 @@ const assert = require('assert') let Compiler = require('../src/compiler.js') let Deployer = require('../src/deployer.js') let TestRunner = require('../src/testRunner.js') -let Provider = require('../src/provider.js') +const Provider = require('remix-simulator').Provider function compileAndDeploy (filename, callback) { let web3 = new Web3() From 9fdb4acfa88834b8b968ec543d3b2fbca776f528 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Sat, 21 Apr 2018 05:58:13 -0400 Subject: [PATCH 068/105] move index and run files --- bin/remix-tests | 2 +- package.json | 2 +- index.js => src/index.js | 6 +++--- run.js => src/run.js | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) rename index.js => src/index.js (95%) rename run.js => src/run.js (92%) diff --git a/bin/remix-tests b/bin/remix-tests index 9d3d91885b..3c14572035 100755 --- a/bin/remix-tests +++ b/bin/remix-tests @@ -1,4 +1,4 @@ #!/usr/bin/env node -require('../run.js'); +require('../src/run.js'); diff --git a/package.json b/package.json index 99fbdfee70..8a62a15cac 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "remix-tests", "version": "1.0.0", "description": "", - "main": "index.js", + "main": "./src/index.js", "contributors": [ { "name": "Iuri Matias", diff --git a/index.js b/src/index.js similarity index 95% rename from index.js rename to src/index.js index 9b1d66dc92..a904ad0860 100644 --- a/index.js +++ b/src/index.js @@ -3,9 +3,9 @@ const path = require('path') const fs = require('fs') require('colors') -let Compiler = require('./src/compiler.js') -let Deployer = require('./src/deployer.js') -let TestRunner = require('./src/testRunner.js') +let Compiler = require('./compiler.js') +let Deployer = require('./deployer.js') +let TestRunner = require('./testRunner.js') var runTestFiles = function (filepath, isDirectory, web3) { async.waterfall([ diff --git a/run.js b/src/run.js similarity index 92% rename from run.js rename to src/run.js index 11dfdf3e50..6eb4aa2655 100644 --- a/run.js +++ b/src/run.js @@ -3,7 +3,7 @@ const Web3 = require('web3') const RemixTests = require('./index.js') const fs = require('fs') -const Provider = require('remix-simulator').Provider; +const Provider = require('remix-simulator').Provider commander.action(function (filename) { let web3 = new Web3() From af8c91b181b223120bfed26fe601b442a68a751d Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Sat, 21 Apr 2018 06:28:03 -0400 Subject: [PATCH 069/105] change version to 0.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8a62a15cac..97abefcf15 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "remix-tests", - "version": "1.0.0", + "version": "0.0.1", "description": "", "main": "./src/index.js", "contributors": [ From 88a01f07421ec7d3785ef011ff61770f7429562b Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 27 Apr 2018 18:28:01 -0400 Subject: [PATCH 070/105] update to 0.0.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 97abefcf15..d1f402745e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "remix-tests", - "version": "0.0.1", + "version": "0.0.2", "description": "", "main": "./src/index.js", "contributors": [ From 184115aaae136eba85c1b64215f2faaf873b13a9 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Sat, 19 May 2018 08:54:10 -0400 Subject: [PATCH 071/105] add interface to compile from sources --- src/compiler.js | 30 ++++++++++++++- src/index.js | 98 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+), 1 deletion(-) diff --git a/src/compiler.js b/src/compiler.js index 886b8ca18c..29647863d6 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -45,6 +45,34 @@ function compileFileOrFiles (filename, isDirectory, cb) { }) } +function compileContractSources (sources, cb) { + let compiler, filepath + + async.waterfall([ + function loadCompiler (next) { + compiler = new RemixCompiler() + compiler.onInternalCompilerLoaded() + // compiler.event.register('compilerLoaded', this, function (version) { + next() + // }); + }, + function doCompilation (next) { + compiler.event.register('compilationFinished', this, function (success, data, source) { + next(null, data) + }) + compiler.compile(sources, filepath) + } + ], function (err, result) { + let errors = (result.errors || []).filter((e) => e.type === 'Error') + if (errors.length > 0) { + console.dir(errors) + return cb(new Error('errors compiling')) + } + cb(err, result.contracts) + }) +} + module.exports = { - compileFileOrFiles: compileFileOrFiles + compileFileOrFiles: compileFileOrFiles, + compileContractSources: compileContractSources } diff --git a/src/index.js b/src/index.js index a904ad0860..2b8f0355fa 100644 --- a/src/index.js +++ b/src/index.js @@ -7,6 +7,103 @@ let Compiler = require('./compiler.js') let Deployer = require('./deployer.js') let TestRunner = require('./testRunner.js') +const Web3 = require('web3') +const Provider = require('remix-simulator').Provider + +var createWeb3Provider = function() { + let web3 = new Web3() + web3.setProvider(new Provider()) + return web3 +} + +var runTestSources = function (contractSources) { + async.waterfall([ + function compile (next) { + Compiler.compileContractSources(contractSources, next) + }, + function deployAllContracts (compilationResult, next) { + let web3 = createWeb3Provider(); + Deployer.deployAll(compilationResult, web3, function (err, contracts) { + if (err) { + next(err) + } + + next(null, compilationResult, contracts) + }) + }, + function determineTestContractsToRun (compilationResult, contracts, next) { + let contractsToTest = [] + + for (let filename in compilationResult) { + let contract = compilationResult[filename]; + if (filename.indexOf('_test.sol') < 0) { + continue + } + Object.keys(compilationResult[filename]).forEach(contractName => { + contractsToTest.push(contractName) + }) + } + + next(null, contractsToTest, contracts) + }, + function runTests (contractsToTest, contracts, next) { + let totalPassing = 0 + let totalFailing = 0 + let totalTime = 0 + let errors = [] + + var testCallback = function (result) { + if (result.type === 'contract') { + console.log('\n ' + result.value) + } else if (result.type === 'testPass') { + console.log('\t✓ '.green.bold + result.value.grey) + } else if (result.type === 'testFailure') { + console.log('\t✘ '.bold.red + result.value.red) + errors.push(result) + } + } + var resultsCallback = function (_err, result, cb) { + totalPassing += result.passingNum + totalFailing += result.failureNum + totalTime += result.timePassed + cb() + } + + async.eachOfLimit(contractsToTest, 1, (contractName, index, cb) => { + TestRunner.runTest(contractName, contracts[contractName], testCallback, (err, result) => { + if (err) { + return cb(err) + } + resultsCallback(null, result, cb) + }) + }, function (err, _results) { + if (err) { + return next(err) + } + + console.log('\n') + if (totalPassing > 0) { + console.log((' ' + totalPassing + ' passing ').green + ('(' + totalTime + 's)').grey) + } + if (totalFailing > 0) { + console.log((' ' + totalFailing + ' failing').red) + } + console.log('') + + errors.forEach((error, index) => { + console.log(' ' + (index + 1) + ') ' + error.context + ' ' + error.value) + console.log('') + console.log(('\t error: ' + error.errMsg).red) + }) + console.log('') + + next() + }) + } + ], function () { + }) +} + var runTestFiles = function (filepath, isDirectory, web3) { async.waterfall([ function compile (next) { @@ -98,5 +195,6 @@ var runTestFiles = function (filepath, isDirectory, web3) { module.exports = { runTestFiles: runTestFiles, + runTestSources: runTestSources, runTest: TestRunner.runTest } From 18b31dccd2ba9e43f899252a944f66242bfb84a1 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Sat, 19 May 2018 10:14:01 -0400 Subject: [PATCH 072/105] update callbacks to just pass data --- src/index.js | 46 +++++++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/src/index.js b/src/index.js index 2b8f0355fa..e484b1ba01 100644 --- a/src/index.js +++ b/src/index.js @@ -16,7 +16,7 @@ var createWeb3Provider = function() { return web3 } -var runTestSources = function (contractSources) { +var runTestSources = function (contractSources, testCallback, resultCallback, finalCallback) { async.waterfall([ function compile (next) { Compiler.compileContractSources(contractSources, next) @@ -52,17 +52,15 @@ var runTestSources = function (contractSources) { let totalTime = 0 let errors = [] - var testCallback = function (result) { - if (result.type === 'contract') { - console.log('\n ' + result.value) - } else if (result.type === 'testPass') { - console.log('\t✓ '.green.bold + result.value.grey) - } else if (result.type === 'testFailure') { - console.log('\t✘ '.bold.red + result.value.red) + var _testCallback = function (result) { + if (result.type === 'testFailure') { errors.push(result) } + testCallback(result); } - var resultsCallback = function (_err, result, cb) { + + var _resultsCallback = function (_err, result, cb) { + resultCallback(_err, result, () => {}); totalPassing += result.passingNum totalFailing += result.failureNum totalTime += result.timePassed @@ -70,38 +68,32 @@ var runTestSources = function (contractSources) { } async.eachOfLimit(contractsToTest, 1, (contractName, index, cb) => { - TestRunner.runTest(contractName, contracts[contractName], testCallback, (err, result) => { + TestRunner.runTest(contractName, contracts[contractName], _testCallback, (err, result) => { if (err) { return cb(err) } - resultsCallback(null, result, cb) + _resultsCallback(null, result, cb) }) }, function (err, _results) { if (err) { return next(err) } - console.log('\n') - if (totalPassing > 0) { - console.log((' ' + totalPassing + ' passing ').green + ('(' + totalTime + 's)').grey) - } - if (totalFailing > 0) { - console.log((' ' + totalFailing + ' failing').red) - } - console.log('') + let finalResults = {}; - errors.forEach((error, index) => { - console.log(' ' + (index + 1) + ') ' + error.context + ' ' + error.value) - console.log('') - console.log(('\t error: ' + error.errMsg).red) + finalResults.totalPassing = totalPassing || 0; + finalResults.totalFailing = totalFailing || 0; + finalResults.totalTime = totalTime || 0; + finalResults.errors = []; + + errors.forEach((error, _index) => { + finalResults.errors.push({context: error.context, value: error.value, message: error.errMsg}); }) - console.log('') - next() + next(null, finalResults); }) } - ], function () { - }) + ], finalCallback); } var runTestFiles = function (filepath, isDirectory, web3) { From 4cf14e0a3a98cf3e09c84fe18d7ba3bed9047adb Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Sat, 19 May 2018 10:42:35 -0400 Subject: [PATCH 073/105] update to 0.0.3 --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d1f402745e..35d9ff036f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "remix-tests", - "version": "0.0.2", + "version": "0.0.3", "description": "", "main": "./src/index.js", "contributors": [ @@ -38,11 +38,13 @@ }, "homepage": "https://github.com/ethereum/remix-tests#readme", "dependencies": { + "async": "^2.6.0", + "babel-preset-es2017": "^6.24.1", "change-case": "^3.0.1", "colors": "^1.1.2", "commander": "^2.13.0", - "remix-solidity": "latest", "remix-simulator": "latest", + "remix-solidity": "latest", "standard": "^10.0.3", "web3": "1.0.0-beta.27" }, From 20975418d31588a189059c92e8c10671fe6c83f2 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Sat, 19 May 2018 10:47:36 -0400 Subject: [PATCH 074/105] update to 0.0.4 --- package-lock.json | 6981 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 5 +- 2 files changed, 6983 insertions(+), 3 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..6ee5262b4b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6981 @@ +{ + "name": "remix-tests", + "version": "0.0.4", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "abstract-leveldown": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", + "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", + "requires": { + "xtend": "4.0.1" + } + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" + }, + "acorn-es7-plugin": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz", + "integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s=" + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "requires": { + "acorn": "3.3.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + } + } + }, + "aes-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", + "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" + }, + "ajv": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", + "requires": { + "co": "4.6.0", + "json-stable-stringify": "1.0.1" + } + }, + "ajv-keywords": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=" + }, + "ansi-escapes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "1.0.3" + } + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "1.0.3" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array.prototype.find": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", + "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.11.0" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "4.11.8", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "async": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", + "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", + "requires": { + "lodash": "4.17.10" + } + }, + "async-eventemitter": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", + "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", + "requires": { + "async": "2.6.0" + } + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", + "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "requires": { + "babel-code-frame": "6.26.0", + "babel-generator": "6.26.1", + "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.10", + "minimatch": "3.0.4", + "path-is-absolute": "1.0.1", + "private": "0.1.8", + "slash": "1.0.0", + "source-map": "0.5.7" + } + }, + "babel-eslint": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", + "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0" + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "requires": { + "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.10", + "source-map": "0.5.7", + "trim-right": "1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" + } + } + }, + "babel-helper-bindify-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", + "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "requires": { + "babel-helper-explode-assignable-expression": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.10" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-explode-class": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", + "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", + "requires": { + "babel-helper-bindify-decorators": "6.24.1", + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.10" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "requires": { + "babel-helper-optimise-call-expression": "6.24.1", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" + }, + "babel-plugin-syntax-async-generators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", + "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=" + }, + "babel-plugin-syntax-class-constructor-call": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", + "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=" + }, + "babel-plugin-syntax-class-properties": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", + "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=" + }, + "babel-plugin-syntax-decorators": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", + "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=" + }, + "babel-plugin-syntax-do-expressions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", + "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=" + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=" + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=" + }, + "babel-plugin-syntax-export-extensions": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", + "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=" + }, + "babel-plugin-syntax-function-bind": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", + "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=" + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" + }, + "babel-plugin-transform-async-generator-functions": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", + "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-generators": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "requires": { + "babel-helper-remap-async-to-generator": "6.24.1", + "babel-plugin-syntax-async-functions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-class-constructor-call": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", + "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", + "requires": { + "babel-plugin-syntax-class-constructor-call": "6.18.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-class-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", + "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-plugin-syntax-class-properties": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-decorators": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", + "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", + "requires": { + "babel-helper-explode-class": "6.24.1", + "babel-plugin-syntax-decorators": "6.13.0", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-do-expressions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz", + "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", + "requires": { + "babel-plugin-syntax-do-expressions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "lodash": "4.17.10" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "requires": { + "babel-helper-define-map": "6.26.0", + "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.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "requires": { + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "requires": { + "babel-helper-function-name": "6.24.1", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "requires": { + "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": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "requires": { + "babel-helper-hoist-variables": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "requires": { + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "requires": { + "babel-helper-replace-supers": "6.24.1", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "requires": { + "babel-helper-call-delegate": "6.24.1", + "babel-helper-get-function-arity": "6.24.1", + "babel-runtime": "6.26.0", + "babel-template": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "requires": { + "babel-helper-regex": "6.26.0", + "babel-runtime": "6.26.0", + "regexpu-core": "2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", + "babel-plugin-syntax-exponentiation-operator": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-export-extensions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", + "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", + "requires": { + "babel-plugin-syntax-export-extensions": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-function-bind": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz", + "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", + "requires": { + "babel-plugin-syntax-function-bind": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-assign": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", + "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "requires": { + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "requires": { + "regenerator-transform": "0.10.1" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "requires": { + "babel-plugin-check-es2015-constants": "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.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "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.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, + "babel-preset-es2017": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz", + "integrity": "sha1-WXvq37n38gi8/YoS6bKym4svFNE=", + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1" + } + }, + "babel-preset-stage-1": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", + "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", + "requires": { + "babel-plugin-transform-class-constructor-call": "6.24.1", + "babel-plugin-transform-export-extensions": "6.22.0", + "babel-preset-stage-2": "6.24.1" + } + }, + "babel-preset-stage-2": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", + "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", + "requires": { + "babel-plugin-syntax-dynamic-import": "6.18.0", + "babel-plugin-transform-class-properties": "6.24.1", + "babel-plugin-transform-decorators": "6.24.1", + "babel-preset-stage-3": "6.24.1" + } + }, + "babel-preset-stage-3": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", + "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", + "requires": { + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-generator-functions": "6.24.1", + "babel-plugin-transform-async-to-generator": "6.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-object-rest-spread": "6.26.0" + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "requires": { + "babel-core": "6.26.3", + "babel-runtime": "6.26.0", + "core-js": "2.5.6", + "home-or-tmp": "2.0.0", + "lodash": "4.17.10", + "mkdirp": "0.5.1", + "source-map-support": "0.4.18" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.6", + "regenerator-runtime": "0.11.1" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "requires": { + "babel-runtime": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "lodash": "4.17.10" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "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.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.10" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.10", + "to-fast-properties": "1.0.3" + } + }, + "babelify": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", + "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", + "requires": { + "babel-core": "6.26.3", + "object-assign": "4.1.1" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "bignumber.js": { + "version": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2" + }, + "bindings": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", + "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" + }, + "bip66": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", + "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "bl": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "requires": { + "readable-stream": "2.3.6", + "safe-buffer": "5.1.2" + } + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "requires": { + "inherits": "2.0.3" + } + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + }, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "1.6.16" + } + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "requires": { + "hoek": "4.2.1" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.1", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", + "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "4.11.8", + "randombytes": "2.0.6" + } + }, + "browserify-sha3": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.1.tgz", + "integrity": "sha1-P/NKMAbvFcD7NWflQbkaI0ASPRE=", + "requires": { + "js-sha3": "0.3.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.0", + "inherits": "2.0.3", + "parse-asn1": "5.1.1" + } + }, + "browserslist": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.7.tgz", + "integrity": "sha512-oYVLxFVqpX9uMhOIQBLtZL+CX4uY8ZpWcjNTaxyWl5rO8yA9SSNikFnAfvk8J3P/7z3BZwNmEqFKaJoYltj3MQ==", + "requires": { + "caniuse-lite": "1.0.30000843", + "electron-to-chromium": "1.3.47" + } + }, + "buffer": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", + "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", + "requires": { + "base64-js": "1.3.0", + "ieee754": "1.1.11" + } + }, + "buffer-alloc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz", + "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=", + "requires": { + "buffer-alloc-unsafe": "0.1.1", + "buffer-fill": "0.1.1" + } + }, + "buffer-alloc-unsafe": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz", + "integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo=" + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "buffer-fill": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz", + "integrity": "sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q==" + }, + "buffer-from": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", + "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" + }, + "buffer-to-arraybuffer": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", + "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "requires": { + "callsites": "0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "caniuse-lite": { + "version": "1.0.30000843", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000843.tgz", + "integrity": "sha512-1ntiW826MhRBmM0CeI7w1cQr16gxwOoM8doJWh3BFalPZoKWdZXs27Bc04xth/3NR1/wNXn9cpP4F92lVenCvg==" + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "change-case": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", + "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", + "requires": { + "camel-case": "3.0.0", + "constant-case": "2.0.0", + "dot-case": "2.1.1", + "header-case": "1.0.1", + "is-lower-case": "1.1.3", + "is-upper-case": "1.1.2", + "lower-case": "1.1.4", + "lower-case-first": "1.0.2", + "no-case": "2.3.2", + "param-case": "2.1.1", + "pascal-case": "2.0.1", + "path-case": "2.1.1", + "sentence-case": "2.1.1", + "snake-case": "2.1.0", + "swap-case": "1.1.2", + "title-case": "2.1.1", + "upper-case": "1.1.3", + "upper-case-first": "1.1.2" + } + }, + "checkpoint-store": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", + "integrity": "sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=", + "requires": { + "functional-red-black-tree": "1.0.1" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" + }, + "cli-cursor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", + "requires": { + "restore-cursor": "1.0.1" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, + "colors": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", + "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==" + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "1.0.0" + } + }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "1.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" + } + }, + "constant-case": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", + "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", + "requires": { + "snake-case": "2.1.0", + "upper-case": "1.1.3" + } + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "core-js": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", + "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cors": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", + "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", + "requires": { + "object-assign": "4.1.1", + "vary": "1.1.2" + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.4", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "1.0.4", + "path-key": "2.0.1", + "semver": "5.5.0", + "shebang-command": "1.2.0", + "which": "1.3.0" + }, + "dependencies": { + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + } + } + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "requires": { + "hoek": "4.2.1" + } + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "requires": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.16", + "public-encrypt": "4.0.2", + "randombytes": "2.0.6", + "randomfill": "1.0.4" + } + }, + "crypto-js": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", + "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=" + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "requires": { + "es5-ext": "0.10.42" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "debug-log": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", + "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=" + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + }, + "decompress": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", + "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "requires": { + "decompress-tar": "4.1.1", + "decompress-tarbz2": "4.1.1", + "decompress-targz": "4.1.1", + "decompress-unzip": "4.0.1", + "graceful-fs": "4.1.11", + "make-dir": "1.3.0", + "pify": "2.3.0", + "strip-dirs": "2.1.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "1.0.0" + } + }, + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "requires": { + "file-type": "5.2.0", + "is-stream": "1.1.0", + "tar-stream": "1.6.1" + } + }, + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "requires": { + "decompress-tar": "4.1.1", + "file-type": "6.2.0", + "is-stream": "1.1.0", + "seek-bzip": "1.0.5", + "unbzip2-stream": "1.2.5" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" + } + } + }, + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "requires": { + "decompress-tar": "4.1.1", + "file-type": "5.2.0", + "is-stream": "1.1.0" + } + }, + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", + "requires": { + "file-type": "3.9.0", + "get-stream": "2.3.1", + "pify": "2.3.0", + "yauzl": "2.9.1" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + }, + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + } + } + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "requires": { + "clone": "1.0.4" + } + }, + "deferred-leveldown": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", + "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", + "requires": { + "abstract-leveldown": "2.6.3" + } + }, + "define-properties": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", + "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", + "requires": { + "foreach": "2.0.5", + "object-keys": "1.0.11" + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + }, + "deglob": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz", + "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=", + "requires": { + "find-root": "1.1.0", + "glob": "7.1.2", + "ignore": "3.3.8", + "pkg-config": "1.1.1", + "run-parallel": "1.1.9", + "uniq": "1.0.1" + } + }, + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "requires": { + "globby": "5.0.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "rimraf": "2.6.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "requires": { + "repeating": "2.0.1" + } + }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.0.6" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "requires": { + "esutils": "2.0.2" + } + }, + "dom-walk": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", + "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + }, + "dot-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", + "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", + "requires": { + "no-case": "2.3.2" + } + }, + "drbg.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", + "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", + "requires": { + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "create-hmac": "1.1.7" + } + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "electron-to-chromium": { + "version": "1.3.47", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.47.tgz", + "integrity": "sha1-dk6IfKkQTQGgrI6r7n38DizhQQQ=" + }, + "elliptic": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", + "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "1.4.0" + } + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es-abstract": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", + "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", + "requires": { + "es-to-primitive": "1.1.1", + "function-bind": "1.1.1", + "has": "1.0.1", + "is-callable": "1.1.3", + "is-regex": "1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "requires": { + "is-callable": "1.1.3", + "is-date-object": "1.0.1", + "is-symbol": "1.0.1" + } + }, + "es5-ext": { + "version": "0.10.42", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", + "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", + "requires": { + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "next-tick": "1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.42", + "es6-symbol": "3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.42", + "es6-iterator": "2.0.3", + "es6-set": "0.1.5", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.42", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1", + "event-emitter": "0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.42" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.42", + "es6-iterator": "2.0.3", + "es6-symbol": "3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "requires": { + "es6-map": "0.1.5", + "es6-weak-map": "2.0.2", + "esrecurse": "4.2.1", + "estraverse": "4.2.0" + } + }, + "eslint": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", + "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", + "requires": { + "babel-code-frame": "6.26.0", + "chalk": "1.1.3", + "concat-stream": "1.6.2", + "debug": "2.6.9", + "doctrine": "2.1.0", + "escope": "3.6.0", + "espree": "3.5.4", + "esquery": "1.0.1", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "2.0.0", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.8", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.17.2", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", + "json-stable-stringify": "1.0.1", + "levn": "0.3.0", + "lodash": "4.17.10", + "mkdirp": "0.5.1", + "natural-compare": "1.4.0", + "optionator": "0.8.2", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.7.8", + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" + } + }, + "eslint-config-standard": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", + "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=" + }, + "eslint-config-standard-jsx": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz", + "integrity": "sha512-F8fRh2WFnTek7dZH9ZaE0PCBwdVGkwVWZmizla/DDNOmg7Tx6B/IlK5+oYpiX29jpu73LszeJj5i1axEZv6VMw==" + }, + "eslint-import-resolver-node": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", + "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", + "requires": { + "debug": "2.6.9", + "object-assign": "4.1.1", + "resolve": "1.7.1" + } + }, + "eslint-module-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "requires": { + "debug": "2.6.9", + "pkg-dir": "1.0.0" + } + }, + "eslint-plugin-import": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz", + "integrity": "sha1-crowb60wXWfEgWNIpGmaQimsi04=", + "requires": { + "builtin-modules": "1.1.1", + "contains-path": "0.1.0", + "debug": "2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "0.2.3", + "eslint-module-utils": "2.2.0", + "has": "1.0.1", + "lodash.cond": "4.5.2", + "minimatch": "3.0.4", + "pkg-up": "1.0.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + } + } + }, + "eslint-plugin-node": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz", + "integrity": "sha512-vIUQPuwbVYdz/CYnlTLsJrRy7iXHQjdEe5wz0XhhdTym3IInM/zZLlPf9nZ2mThsH0QcsieCOWs2vOeCy/22LQ==", + "requires": { + "ignore": "3.3.8", + "minimatch": "3.0.4", + "object-assign": "4.1.1", + "resolve": "1.7.1", + "semver": "5.3.0" + } + }, + "eslint-plugin-promise": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz", + "integrity": "sha1-ePu2/+BHIBYnVp6FpsU3OvKmj8o=" + }, + "eslint-plugin-react": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", + "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", + "requires": { + "array.prototype.find": "2.0.4", + "doctrine": "1.5.0", + "has": "1.0.1", + "jsx-ast-utils": "1.4.1", + "object.assign": "4.1.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + } + } + }, + "eslint-plugin-standard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", + "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=" + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "requires": { + "acorn": "5.5.3", + "acorn-jsx": "3.0.1" + } + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "requires": { + "estraverse": "4.2.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "requires": { + "estraverse": "4.2.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eth-lib": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", + "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0", + "keccakjs": "0.2.1", + "nano-json-stream-parser": "0.1.2", + "servify": "0.1.12", + "ws": "3.3.3", + "xhr-request-promise": "0.1.2" + } + }, + "ethereum-common": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", + "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" + }, + "ethereumjs-account": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", + "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", + "requires": { + "ethereumjs-util": "5.2.0", + "rlp": "2.0.0", + "safe-buffer": "5.1.2" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.4", + "keccak": "1.4.0", + "rlp": "2.0.0", + "safe-buffer": "5.1.2", + "secp256k1": "3.5.0" + } + } + } + }, + "ethereumjs-block": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", + "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", + "requires": { + "async": "2.6.0", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "1.3.4", + "ethereumjs-util": "5.2.0", + "merkle-patricia-tree": "2.3.1" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.4", + "keccak": "1.4.0", + "rlp": "2.0.0", + "safe-buffer": "5.1.2", + "secp256k1": "3.5.0" + } + } + } + }, + "ethereumjs-tx": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.4.tgz", + "integrity": "sha512-kOgUd5jC+0tgV7t52UDECMMz9Uf+Lro+6fSpCvzWemtXfMEcwI3EOxf5mVPMRbTFkMMhuERokNNVF3jItAjidg==", + "requires": { + "ethereum-common": "0.0.18", + "ethereumjs-util": "5.2.0" + }, + "dependencies": { + "ethereum-common": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", + "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" + }, + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.4", + "keccak": "1.4.0", + "rlp": "2.0.0", + "safe-buffer": "5.1.2", + "secp256k1": "3.5.0" + } + } + } + }, + "ethereumjs-util": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz", + "integrity": "sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "keccakjs": "0.2.1", + "rlp": "2.0.0", + "secp256k1": "3.5.0" + } + }, + "ethereumjs-vm": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.3.5.tgz", + "integrity": "sha512-AJ7x44+xqyE5+UO3Nns19WkTdZfyqFZ+sEjIEpvme7Ipbe3iBU1uwCcHEdiu/yY9bdhr3IfSa/NfIKNeXPaRVQ==", + "requires": { + "async": "2.6.0", + "async-eventemitter": "0.2.4", + "ethereum-common": "0.2.0", + "ethereumjs-account": "2.0.5", + "ethereumjs-block": "1.7.1", + "ethereumjs-util": "5.2.0", + "fake-merkle-patricia-tree": "1.0.1", + "functional-red-black-tree": "1.0.1", + "merkle-patricia-tree": "2.3.1", + "rustbn.js": "0.1.2", + "safe-buffer": "5.1.2" + }, + "dependencies": { + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.4", + "keccak": "1.4.0", + "rlp": "2.0.0", + "safe-buffer": "5.1.2", + "secp256k1": "3.5.0" + } + } + } + }, + "ethjs-unit": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", + "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", + "requires": { + "bn.js": "4.11.6", + "number-to-bn": "1.7.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "ethjs-util": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.4.tgz", + "integrity": "sha1-HItoeSV0RO9NPz+7rC3tEs2ZfZM=", + "requires": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + } + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "requires": { + "d": "1.0.0", + "es5-ext": "0.10.42" + } + }, + "event-stream": { + "version": "3.3.4", + "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", + "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "requires": { + "duplexer": "0.1.1", + "from": "0.1.7", + "map-stream": "0.1.0", + "pause-stream": "0.0.11", + "split": "0.3.3", + "stream-combiner": "0.0.4", + "through": "2.3.8" + } + }, + "eventemitter3": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", + "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=" + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "1.3.4", + "safe-buffer": "5.1.2" + } + }, + "exit-hook": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" + }, + "express": { + "version": "4.16.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "requires": { + "accepts": "1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.3", + "qs": "6.5.1", + "range-parser": "1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "1.4.0", + "type-is": "1.6.16", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "requires": { + "bytes": "3.0.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.6.3", + "iconv-lite": "0.4.19", + "on-finished": "2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "1.6.16" + } + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": "1.4.0" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" + } + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fake-merkle-patricia-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", + "integrity": "sha1-S4w6z7Ugr635hgsfFM2M40As3dM=", + "requires": { + "checkpoint-store": "1.1.0" + } + }, + "fast-async": { + "version": "6.3.7", + "resolved": "https://registry.npmjs.org/fast-async/-/fast-async-6.3.7.tgz", + "integrity": "sha512-sF8kZ9Qv1dkg2zcYaYhMY0tS/Qbr1mqciIr2QEaiWI1RrF2udOZ7baXl/FOLoiMx5U3iFLuwNpW0QNQvox3Rmw==", + "requires": { + "nodent-compiler": "3.2.6", + "nodent-runtime": "3.2.1" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "requires": { + "pend": "1.2.0" + } + }, + "figures": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", + "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", + "requires": { + "escape-string-regexp": "1.0.5", + "object-assign": "4.1.1" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.4.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "requires": { + "circular-json": "0.3.3", + "del": "2.2.2", + "graceful-fs": "4.1.11", + "write": "0.2.1" + } + }, + "for-each": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.2.tgz", + "integrity": "sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=", + "requires": { + "is-function": "1.0.1" + } + }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.6", + "mime-types": "2.1.18" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "fs-extra": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", + "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0" + } + }, + "fs-promise": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz", + "integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=", + "requires": { + "any-promise": "1.3.0", + "fs-extra": "2.1.2", + "mz": "2.7.0", + "thenify-all": "1.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "requires": { + "graceful-fs": "4.1.11", + "inherits": "2.0.3", + "mkdirp": "0.5.1", + "rimraf": "2.6.2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, + "generate-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", + "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" + }, + "generate-object-property": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", + "requires": { + "is-property": "1.0.2" + } + }, + "get-caller-file": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + }, + "get-stdin": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", + "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "global": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", + "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", + "requires": { + "min-document": "2.19.0", + "process": "0.5.2" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "requires": { + "array-union": "1.0.2", + "arrify": "1.0.1", + "glob": "7.1.2", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "got": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", + "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", + "requires": { + "decompress-response": "3.3.0", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-plain-obj": "1.1.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "isurl": "1.0.0", + "lowercase-keys": "1.0.1", + "p-cancelable": "0.3.0", + "p-timeout": "1.2.1", + "safe-buffer": "5.1.2", + "timed-out": "4.0.1", + "url-parse-lax": "1.0.0", + "url-to-options": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, + "growl": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", + "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.1.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + } + } + }, + "has": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", + "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + }, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" + }, + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "requires": { + "has-symbol-support-x": "1.4.2" + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "hash.js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", + "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", + "requires": { + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.1", + "sntp": "2.1.0" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "header-case": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", + "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "1.1.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoek": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", + "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "hosted-git-info": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + } + }, + "http-https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", + "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.14.1" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ieee754": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", + "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==" + }, + "ignore": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", + "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==" + }, + "immediate": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", + "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inquirer": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", + "requires": { + "ansi-escapes": "1.4.0", + "ansi-regex": "2.1.1", + "chalk": "1.1.3", + "cli-cursor": "1.0.2", + "cli-width": "2.2.0", + "figures": "1.7.0", + "lodash": "4.17.10", + "readline2": "1.0.1", + "run-async": "0.1.0", + "rx-lite": "3.1.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "through": "2.3.8" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "ipaddr.js": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", + "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-callable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", + "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=" + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-function": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", + "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + }, + "is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" + }, + "is-lower-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", + "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", + "requires": { + "lower-case": "1.1.4" + } + }, + "is-my-ip-valid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", + "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==" + }, + "is-my-json-valid": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", + "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", + "requires": { + "generate-function": "2.0.0", + "generate-object-property": "1.2.0", + "is-my-ip-valid": "1.0.0", + "jsonpointer": "4.0.1", + "xtend": "4.0.1" + } + }, + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" + }, + "is-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", + "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "requires": { + "is-path-inside": "1.0.1" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "requires": { + "path-is-inside": "1.0.2" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" + }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "requires": { + "has": "1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "is-retry-allowed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", + "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-upper-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", + "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", + "requires": { + "upper-case": "1.1.3" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "requires": { + "has-to-string-tag-x": "1.4.1", + "is-object": "1.0.1" + } + }, + "js-sha3": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", + "integrity": "sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM=" + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "requires": { + "jsonify": "0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" + }, + "jsonpointer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", + "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", + "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=" + }, + "keccak": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", + "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", + "requires": { + "bindings": "1.3.0", + "inherits": "2.0.3", + "nan": "2.10.0", + "safe-buffer": "5.1.2" + } + }, + "keccakjs": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.1.tgz", + "integrity": "sha1-HWM6+QfvMFu/ny+mFtVsRFYd+k0=", + "requires": { + "browserify-sha3": "0.0.1", + "sha3": "1.2.2" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "requires": { + "graceful-fs": "4.1.11" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "1.0.0" + } + }, + "level-codec": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", + "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" + }, + "level-errors": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", + "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", + "requires": { + "errno": "0.1.7" + } + }, + "level-iterator-stream": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", + "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", + "requires": { + "inherits": "2.0.3", + "level-errors": "1.0.5", + "readable-stream": "1.1.14", + "xtend": "4.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, + "level-ws": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", + "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", + "requires": { + "readable-stream": "1.0.34", + "xtend": "2.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "requires": { + "object-keys": "0.4.0" + } + } + } + }, + "levelup": { + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", + "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", + "requires": { + "deferred-leveldown": "1.2.2", + "level-codec": "7.0.1", + "level-errors": "1.0.5", + "level-iterator-stream": "1.3.1", + "prr": "1.0.1", + "semver": "5.4.1", + "xtend": "4.0.1" + }, + "dependencies": { + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + } + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "1.1.2", + "type-check": "0.3.2" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "4.0.0", + "pify": "3.0.0", + "strip-bom": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "requires": { + "p-locate": "2.0.0", + "path-exists": "3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + } + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + }, + "lodash.cond": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=" + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "lower-case-first": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", + "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", + "requires": { + "lower-case": "1.1.4" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "requires": { + "pify": "3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + } + } + }, + "map-stream": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", + "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memdown": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", + "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=", + "requires": { + "abstract-leveldown": "2.7.2", + "functional-red-black-tree": "1.0.1", + "immediate": "3.2.3", + "inherits": "2.0.3", + "ltgt": "2.2.1", + "safe-buffer": "5.1.2" + }, + "dependencies": { + "abstract-leveldown": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", + "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", + "requires": { + "xtend": "4.0.1" + } + } + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" + }, + "merge": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", + "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merkle-patricia-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.1.tgz", + "integrity": "sha512-Qp9Mpb3xazznXzzGQBqHbqCpT2AR9joUOHYYPiQjYCarrdCPCnLWXo4BFv77y4xN26KR224xoU1n/qYY7RYYgw==", + "requires": { + "async": "1.5.2", + "ethereumjs-util": "5.2.0", + "level-ws": "0.0.0", + "levelup": "1.3.9", + "memdown": "1.4.1", + "readable-stream": "2.3.6", + "rlp": "2.0.0", + "semaphore": "1.1.0" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + }, + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.4", + "keccak": "1.4.0", + "rlp": "2.0.0", + "safe-buffer": "5.1.2", + "secp256k1": "3.5.0" + } + } + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, + "mimic-response": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", + "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=" + }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "requires": { + "dom-walk": "0.1.1" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "mkdirp-promise": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", + "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", + "requires": { + "mkdirp": "0.5.1" + } + }, + "mocha": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz", + "integrity": "sha512-kKKs/H1KrMMQIEsWNxGmb4/BGsmj0dkeyotEvbrAuQ01FcWRLssUNXCEUZk6SZtyJBi6EE7SL0zDDtItw1rGhw==", + "dev": true, + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.11.0", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.3", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "4.4.0" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "supports-color": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", + "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", + "dev": true, + "requires": { + "has-flag": "2.0.0" + } + } + } + }, + "mock-fs": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.5.0.tgz", + "integrity": "sha512-qqudNfOX7ZmX9vm1WIAU+gWlmxVNAnwY6UG3RkFutNywmRCUGP83tujP6IxX2DS1TmcaEZBOhYwDuYEmJYE+3w==" + }, + "mout": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", + "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multiline": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz", + "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=", + "requires": { + "strip-indent": "1.0.1" + } + }, + "mute-stream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=" + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "1.3.0", + "object-assign": "4.1.1", + "thenify-all": "1.6.0" + } + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" + }, + "nano-json-stream-parser": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", + "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" + }, + "nice-try": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", + "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "1.1.4" + } + }, + "nodent-compiler": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/nodent-compiler/-/nodent-compiler-3.2.6.tgz", + "integrity": "sha512-6Zu15pXyMZgWUCp1xZMb+iUexFAUnixeAn3x4U+mqLAnOskWq8/fiBG03vn/pbHl9ZS61LTWSbYtHRzNkZS8ow==", + "requires": { + "acorn": "5.5.3", + "acorn-es7-plugin": "1.1.7", + "nodent-transform": "3.2.6", + "source-map": "0.5.7" + } + }, + "nodent-runtime": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/nodent-runtime/-/nodent-runtime-3.2.1.tgz", + "integrity": "sha512-7Ws63oC+215smeKJQCxzrK21VFVlCFBkwl0MOObt0HOpVQXs3u483sAmtkF33nNqZ5rSOQjB76fgyPBmAUrtCA==" + }, + "nodent-transform": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/nodent-transform/-/nodent-transform-3.2.6.tgz", + "integrity": "sha512-CMa5JFCWhfv6SbG7GPNwxww9dyZuxHdC1vzGELodIPIklecH5FJzvB/gS5jb62jAnNqeQWPEoPY7AJcxvzmz2A==" + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "requires": { + "hosted-git-info": "2.6.0", + "is-builtin-module": "1.0.0", + "semver": "5.3.0", + "validate-npm-package-license": "3.0.3" + } + }, + "npm-run-all": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.3.tgz", + "integrity": "sha512-aOG0N3Eo/WW+q6sUIdzcV2COS8VnTZCmdji0VQIAZF3b+a3YWb0AD0vFIyjKec18A7beLGbaQ5jFTNI2bPt9Cg==", + "requires": { + "ansi-styles": "3.2.1", + "chalk": "2.4.1", + "cross-spawn": "6.0.5", + "memorystream": "0.3.1", + "minimatch": "3.0.4", + "ps-tree": "1.1.0", + "read-pkg": "3.0.0", + "shell-quote": "1.6.1", + "string.prototype.padend": "3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "1.9.1" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "requires": { + "pify": "3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "requires": { + "load-json-file": "4.0.0", + "normalize-package-data": "2.4.0", + "path-type": "3.0.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "number-to-bn": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", + "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", + "requires": { + "bn.js": "4.11.6", + "strip-hex-prefix": "1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-inspect": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.5.0.tgz", + "integrity": "sha512-UmOFbHbwvv+XHj7BerrhVq+knjceBdkvU5AriwLMvhv2qi+e7DJzxfBeFpILEjVzCp+xA+W/pIf06RGPWlZNfw==" + }, + "object-keys": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", + "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "requires": { + "define-properties": "1.1.2", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.0.11" + } + }, + "oboe": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.3.tgz", + "integrity": "sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=", + "requires": { + "http-https": "1.0.0" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "1.1.0", + "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "requires": { + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", + "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "requires": { + "p-limit": "1.2.0" + } + }, + "p-timeout": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", + "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", + "requires": { + "p-finally": "1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "requires": { + "no-case": "2.3.2" + } + }, + "parse-asn1": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "requires": { + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.16" + } + }, + "parse-headers": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", + "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", + "requires": { + "for-each": "0.3.2", + "trim": "0.0.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "requires": { + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.2" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "pascal-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", + "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", + "requires": { + "camel-case": "3.0.0", + "upper-case-first": "1.1.2" + } + }, + "path-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", + "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", + "requires": { + "no-case": "2.3.2" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pause-stream": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", + "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "requires": { + "through": "2.3.8" + } + }, + "pbkdf2": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", + "requires": { + "find-up": "2.1.0", + "load-json-file": "4.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "2.0.0" + } + } + } + }, + "pkg-config": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", + "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", + "requires": { + "debug-log": "1.0.1", + "find-root": "1.1.0", + "xtend": "4.0.1" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "requires": { + "find-up": "1.1.2" + } + }, + "pkg-up": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", + "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=", + "requires": { + "find-up": "1.1.2" + } + }, + "pluralize": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=" + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" + }, + "process": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", + "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", + "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" + }, + "proxy-addr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", + "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.6.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "ps-tree": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", + "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", + "requires": { + "event-stream": "3.3.4" + } + }, + "public-encrypt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "requires": { + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.1", + "randombytes": "2.0.6" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + }, + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "requires": { + "decode-uri-component": "0.2.0", + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "2.0.6", + "safe-buffer": "5.1.2" + } + }, + "randomhex": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", + "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + }, + "dependencies": { + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "1.3.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "0.2.1" + } + } + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readline2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "mute-stream": "0.0.5" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "1.7.1" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "requires": { + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "private": "0.1.8" + } + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "requires": { + "regenerate": "1.4.0", + "regjsgen": "0.2.0", + "regjsparser": "0.1.5" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "requires": { + "jsesc": "0.5.0" + } + }, + "remix-core": { + "version": "0.0.11", + "resolved": "https://registry.npmjs.org/remix-core/-/remix-core-0.0.11.tgz", + "integrity": "sha512-aFgQv9aSIr4NLgk4cJXmCLUL4pyRNw7ERrkvFOTF4T760ex+eHTS/ytj70w6SVtVpwD+eUy0dncelwtuPeFe4w==", + "requires": { + "babel-eslint": "7.2.3", + "babel-plugin-transform-object-assign": "6.22.0", + "babel-preset-es2015": "6.24.1", + "babelify": "7.3.0", + "fast-async": "6.3.7", + "remix-lib": "0.2.5", + "standard": "7.1.2", + "tape": "4.9.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + }, + "deglob": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", + "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=", + "requires": { + "find-root": "1.1.0", + "glob": "7.1.2", + "ignore": "3.3.8", + "pkg-config": "1.1.1", + "run-parallel": "1.1.9", + "uniq": "1.0.1", + "xtend": "4.0.1" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "eslint": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.10.2.tgz", + "integrity": "sha1-sjCUgv7wQ9MgM2WjIShebM4Bw9c=", + "requires": { + "chalk": "1.1.3", + "concat-stream": "1.6.2", + "debug": "2.6.9", + "doctrine": "1.5.0", + "es6-map": "0.1.5", + "escope": "3.6.0", + "espree": "3.1.4", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "1.3.1", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.8", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.17.2", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", + "json-stable-stringify": "1.0.1", + "lodash": "4.17.10", + "mkdirp": "0.5.1", + "optionator": "0.8.2", + "path-is-absolute": "1.0.1", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.6.1", + "strip-json-comments": "1.0.4", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" + } + }, + "eslint-config-standard": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz", + "integrity": "sha1-WRyWkVF0QTL1YdO5FagS6kE/5JA=" + }, + "eslint-config-standard-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.1.tgz", + "integrity": "sha1-DRmxcF8K1INj7yqLv6cd8BLZibM=" + }, + "eslint-plugin-promise": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz", + "integrity": "sha1-/OMy1vX/UjIApTdwSGPsPCQiunw=" + }, + "eslint-plugin-react": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz", + "integrity": "sha1-fbBo4fVIf2hx5N7vNqOBwwPqwWE=", + "requires": { + "doctrine": "1.5.0", + "jsx-ast-utils": "1.4.1" + } + }, + "eslint-plugin-standard": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", + "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=" + }, + "espree": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.4.tgz", + "integrity": "sha1-BybXrIOvl6fISY2ps2OjYJ0qaKE=", + "requires": { + "acorn": "3.3.0", + "acorn-jsx": "3.0.1" + } + }, + "file-entry-cache": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", + "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "shelljs": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", + "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=" + }, + "standard": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/standard/-/standard-7.1.2.tgz", + "integrity": "sha1-QBZu7sJAUGXRpPDj8VurxuJ0YH4=", + "requires": { + "eslint": "2.10.2", + "eslint-config-standard": "5.3.1", + "eslint-config-standard-jsx": "1.2.1", + "eslint-plugin-promise": "1.3.2", + "eslint-plugin-react": "5.2.2", + "eslint-plugin-standard": "1.3.3", + "standard-engine": "4.1.3" + } + }, + "standard-engine": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-4.1.3.tgz", + "integrity": "sha1-ejGq1U8D2fOTVfQzic4GlPQJQVU=", + "requires": { + "defaults": "1.0.3", + "deglob": "1.1.2", + "find-root": "1.1.0", + "get-stdin": "5.0.1", + "minimist": "1.2.0", + "multiline": "1.0.2", + "pkg-config": "1.1.1", + "xtend": "4.0.1" + } + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" + } + } + }, + "remix-lib": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/remix-lib/-/remix-lib-0.2.5.tgz", + "integrity": "sha512-13JJPV/JNJEdR9TVNUWrNNHU5u+lUAJSPzKzBurXTAB3ZbfLj5PB3NSNWiP3/3+a7Va15jGQc6/2tc2KNlNN8Q==", + "requires": { + "async": "2.6.0", + "babel-eslint": "7.2.3", + "babel-plugin-transform-object-assign": "6.22.0", + "babel-preset-env": "1.7.0", + "babel-preset-es2015": "6.24.1", + "babel-preset-stage-0": "6.24.1", + "babelify": "7.3.0", + "ethereumjs-block": "1.7.1", + "ethereumjs-tx": "1.3.4", + "ethereumjs-util": "5.2.0", + "ethereumjs-vm": "2.3.5", + "ethers": "3.0.17", + "fast-async": "6.3.7", + "solc": "0.4.24", + "standard": "7.1.2", + "tape": "4.9.0", + "web3": "0.18.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + }, + "babel-eslint": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", + "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0" + } + }, + "babel-plugin-transform-object-assign": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", + "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "requires": { + "babel-plugin-check-es2015-constants": "6.22.0", + "babel-plugin-syntax-trailing-function-commas": "6.22.0", + "babel-plugin-transform-async-to-generator": "6.24.1", + "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.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "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.24.1", + "babel-plugin-transform-exponentiation-operator": "6.24.1", + "babel-plugin-transform-regenerator": "6.26.0", + "browserslist": "3.2.7", + "invariant": "2.2.4", + "semver": "5.3.0" + } + }, + "babel-preset-es2015": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", + "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", + "requires": { + "babel-plugin-check-es2015-constants": "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.26.0", + "babel-plugin-transform-es2015-classes": "6.24.1", + "babel-plugin-transform-es2015-computed-properties": "6.24.1", + "babel-plugin-transform-es2015-destructuring": "6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", + "babel-plugin-transform-es2015-for-of": "6.23.0", + "babel-plugin-transform-es2015-function-name": "6.24.1", + "babel-plugin-transform-es2015-literals": "6.22.0", + "babel-plugin-transform-es2015-modules-amd": "6.24.1", + "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", + "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", + "babel-plugin-transform-es2015-modules-umd": "6.24.1", + "babel-plugin-transform-es2015-object-super": "6.24.1", + "babel-plugin-transform-es2015-parameters": "6.24.1", + "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", + "babel-plugin-transform-es2015-spread": "6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "6.24.1", + "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.24.1", + "babel-plugin-transform-regenerator": "6.26.0" + } + }, + "babel-preset-stage-0": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz", + "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", + "requires": { + "babel-plugin-transform-do-expressions": "6.22.0", + "babel-plugin-transform-function-bind": "6.22.0", + "babel-preset-stage-1": "6.24.1" + } + }, + "babelify": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", + "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", + "requires": { + "babel-core": "6.26.3", + "object-assign": "4.1.1" + } + }, + "deglob": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", + "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=", + "requires": { + "find-root": "1.1.0", + "glob": "7.1.2", + "ignore": "3.3.8", + "pkg-config": "1.1.1", + "run-parallel": "1.1.9", + "uniq": "1.0.1", + "xtend": "4.0.1" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "elliptic": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", + "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", + "requires": { + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.3", + "inherits": "2.0.1" + } + }, + "eslint": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.10.2.tgz", + "integrity": "sha1-sjCUgv7wQ9MgM2WjIShebM4Bw9c=", + "requires": { + "chalk": "1.1.3", + "concat-stream": "1.6.2", + "debug": "2.6.9", + "doctrine": "1.5.0", + "es6-map": "0.1.5", + "escope": "3.6.0", + "espree": "3.1.4", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "1.3.1", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.8", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.17.2", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", + "json-stable-stringify": "1.0.1", + "lodash": "4.17.10", + "mkdirp": "0.5.1", + "optionator": "0.8.2", + "path-is-absolute": "1.0.1", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.6.1", + "strip-json-comments": "1.0.4", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" + } + }, + "eslint-config-standard": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz", + "integrity": "sha1-WRyWkVF0QTL1YdO5FagS6kE/5JA=" + }, + "eslint-config-standard-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.1.tgz", + "integrity": "sha1-DRmxcF8K1INj7yqLv6cd8BLZibM=" + }, + "eslint-plugin-promise": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz", + "integrity": "sha1-/OMy1vX/UjIApTdwSGPsPCQiunw=" + }, + "eslint-plugin-react": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz", + "integrity": "sha1-fbBo4fVIf2hx5N7vNqOBwwPqwWE=", + "requires": { + "doctrine": "1.5.0", + "jsx-ast-utils": "1.4.1" + } + }, + "eslint-plugin-standard": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", + "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=" + }, + "espree": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.4.tgz", + "integrity": "sha1-BybXrIOvl6fISY2ps2OjYJ0qaKE=", + "requires": { + "acorn": "3.3.0", + "acorn-jsx": "3.0.1" + } + }, + "ethereumjs-block": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", + "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", + "requires": { + "async": "2.6.0", + "ethereum-common": "0.2.0", + "ethereumjs-tx": "1.3.4", + "ethereumjs-util": "5.2.0", + "merkle-patricia-tree": "2.3.1" + } + }, + "ethereumjs-tx": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.4.tgz", + "integrity": "sha512-kOgUd5jC+0tgV7t52UDECMMz9Uf+Lro+6fSpCvzWemtXfMEcwI3EOxf5mVPMRbTFkMMhuERokNNVF3jItAjidg==", + "requires": { + "ethereum-common": "0.0.18", + "ethereumjs-util": "5.2.0" + }, + "dependencies": { + "ethereum-common": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", + "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" + } + } + }, + "ethereumjs-util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", + "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", + "requires": { + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "ethjs-util": "0.1.4", + "keccak": "1.4.0", + "rlp": "2.0.0", + "safe-buffer": "5.1.2", + "secp256k1": "3.5.0" + } + }, + "ethereumjs-vm": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.3.5.tgz", + "integrity": "sha512-AJ7x44+xqyE5+UO3Nns19WkTdZfyqFZ+sEjIEpvme7Ipbe3iBU1uwCcHEdiu/yY9bdhr3IfSa/NfIKNeXPaRVQ==", + "requires": { + "async": "2.6.0", + "async-eventemitter": "0.2.4", + "ethereum-common": "0.2.0", + "ethereumjs-account": "2.0.5", + "ethereumjs-block": "1.7.1", + "ethereumjs-util": "5.2.0", + "fake-merkle-patricia-tree": "1.0.1", + "functional-red-black-tree": "1.0.1", + "merkle-patricia-tree": "2.3.1", + "rustbn.js": "0.1.2", + "safe-buffer": "5.1.2" + } + }, + "ethers": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-3.0.17.tgz", + "integrity": "sha512-aIhNY2xlONbSRvBTA9TKYgPGocUGlPKNy/6weV0URweEtHWVHgVARTVdhw345UZ56T0j7FMnT7wQaUO7v/o1iQ==", + "requires": { + "aes-js": "3.0.0", + "bn.js": "4.11.8", + "elliptic": "6.3.3", + "hash.js": "1.1.3", + "inherits": "2.0.1", + "js-sha3": "0.5.7", + "scrypt-js": "2.0.3", + "setimmediate": "1.0.4", + "uuid": "2.0.1", + "xmlhttprequest": "1.8.0" + } + }, + "fast-async": { + "version": "6.3.7", + "resolved": "https://registry.npmjs.org/fast-async/-/fast-async-6.3.7.tgz", + "integrity": "sha512-sF8kZ9Qv1dkg2zcYaYhMY0tS/Qbr1mqciIr2QEaiWI1RrF2udOZ7baXl/FOLoiMx5U3iFLuwNpW0QNQvox3Rmw==", + "requires": { + "nodent-compiler": "3.2.6", + "nodent-runtime": "3.2.1" + } + }, + "file-entry-cache": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", + "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + }, + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "js-sha3": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", + "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "resolve": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "requires": { + "path-parse": "1.0.5" + } + }, + "setimmediate": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", + "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" + }, + "shelljs": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", + "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=" + }, + "solc": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.24.tgz", + "integrity": "sha512-2xd7Cf1HeVwrIb6Bu1cwY2/TaLRodrppCq3l7rhLimFQgmxptXhTC3+/wesVLpB09F1A2kZgvbMOgH7wvhFnBQ==", + "requires": { + "fs-extra": "0.30.0", + "memorystream": "0.3.1", + "require-from-string": "1.2.1", + "semver": "5.3.0", + "yargs": "4.8.1" + } + }, + "standard": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/standard/-/standard-7.1.2.tgz", + "integrity": "sha1-QBZu7sJAUGXRpPDj8VurxuJ0YH4=", + "requires": { + "eslint": "2.10.2", + "eslint-config-standard": "5.3.1", + "eslint-config-standard-jsx": "1.2.1", + "eslint-plugin-promise": "1.3.2", + "eslint-plugin-react": "5.2.2", + "eslint-plugin-standard": "1.3.3", + "standard-engine": "4.1.3" + } + }, + "standard-engine": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-4.1.3.tgz", + "integrity": "sha1-ejGq1U8D2fOTVfQzic4GlPQJQVU=", + "requires": { + "defaults": "1.0.3", + "deglob": "1.1.2", + "find-root": "1.1.0", + "get-stdin": "5.0.1", + "minimist": "1.2.0", + "multiline": "1.0.2", + "pkg-config": "1.1.1", + "xtend": "4.0.1" + } + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" + }, + "tape": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.9.0.tgz", + "integrity": "sha512-j0jO9BiScfqtPBb9QmPLL0qvxXMz98xjkMb7x8lKipFlJZwNJkqkWPou+NU4V6T9RnVh1kuSthLE8gLrN8bBfw==", + "requires": { + "deep-equal": "1.0.1", + "defined": "1.0.0", + "for-each": "0.3.2", + "function-bind": "1.1.1", + "glob": "7.1.2", + "has": "1.0.1", + "inherits": "2.0.3", + "minimist": "1.2.0", + "object-inspect": "1.5.0", + "resolve": "1.5.0", + "resumer": "0.0.0", + "string.prototype.trim": "1.1.2", + "through": "2.3.8" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" + }, + "web3": { + "version": "0.18.4", + "resolved": "https://registry.npmjs.org/web3/-/web3-0.18.4.tgz", + "integrity": "sha1-gewXhBRUkfLqqJVbMcBgSeB8Xn0=", + "requires": { + "bignumber.js": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", + "crypto-js": "3.1.8", + "utf8": "2.1.1", + "xhr2": "0.1.4", + "xmlhttprequest": "1.8.0" + } + } + } + }, + "remix-simulator": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/remix-simulator/-/remix-simulator-0.0.2.tgz", + "integrity": "sha512-xQdzSMPdUEDycX8cCSQ9ghR0jMsx1IJYSbSeWy9L5ZnIHk6wO2TwwQmn5wUwRnIUsLzFB5rIRVxQ908V9SYq6w==", + "requires": { + "ansi-gray": "0.1.1", + "babel-preset-es2017": "6.24.1", + "body-parser": "1.18.3", + "color-support": "1.1.3", + "express": "4.16.3", + "merge": "1.2.0", + "remix-lib": "0.2.5", + "standard": "10.0.3", + "time-stamp": "2.0.0", + "web3": "1.0.0-beta.27" + } + }, + "remix-solidity": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/remix-solidity/-/remix-solidity-0.1.7.tgz", + "integrity": "sha512-cesnLF6VisxfALqHo7IIjijdmQOhNWGCR1+fqaFU/JtWhXnVOWnWXGZjMVV5f+23/bdtUf1h0yfpcoBnfIDADw==", + "requires": { + "babel-eslint": "7.2.3", + "babel-plugin-transform-object-assign": "6.22.0", + "babel-preset-es2015": "6.24.1", + "babelify": "7.3.0", + "ethereumjs-util": "4.5.0", + "ethereumjs-vm": "2.3.5", + "fast-async": "6.3.7", + "npm-run-all": "4.1.3", + "remix-core": "0.0.11", + "remix-lib": "0.2.5", + "solc": "git+https://github.com/ethereum/solc-js.git#c3b0d91fb0030f15dbc578f76c762f2cf092f813", + "standard": "7.1.2", + "tape": "4.9.0", + "webworkify": "1.5.0" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" + }, + "deglob": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", + "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=", + "requires": { + "find-root": "1.1.0", + "glob": "7.1.2", + "ignore": "3.3.8", + "pkg-config": "1.1.1", + "run-parallel": "1.1.9", + "uniq": "1.0.1", + "xtend": "4.0.1" + } + }, + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "requires": { + "esutils": "2.0.2", + "isarray": "1.0.0" + } + }, + "eslint": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.10.2.tgz", + "integrity": "sha1-sjCUgv7wQ9MgM2WjIShebM4Bw9c=", + "requires": { + "chalk": "1.1.3", + "concat-stream": "1.6.2", + "debug": "2.6.9", + "doctrine": "1.5.0", + "es6-map": "0.1.5", + "escope": "3.6.0", + "espree": "3.1.4", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "file-entry-cache": "1.3.1", + "glob": "7.1.2", + "globals": "9.18.0", + "ignore": "3.3.8", + "imurmurhash": "0.1.4", + "inquirer": "0.12.0", + "is-my-json-valid": "2.17.2", + "is-resolvable": "1.1.0", + "js-yaml": "3.11.0", + "json-stable-stringify": "1.0.1", + "lodash": "4.17.10", + "mkdirp": "0.5.1", + "optionator": "0.8.2", + "path-is-absolute": "1.0.1", + "path-is-inside": "1.0.2", + "pluralize": "1.2.1", + "progress": "1.1.8", + "require-uncached": "1.0.3", + "shelljs": "0.6.1", + "strip-json-comments": "1.0.4", + "table": "3.8.3", + "text-table": "0.2.0", + "user-home": "2.0.0" + } + }, + "eslint-config-standard": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz", + "integrity": "sha1-WRyWkVF0QTL1YdO5FagS6kE/5JA=" + }, + "eslint-config-standard-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.1.tgz", + "integrity": "sha1-DRmxcF8K1INj7yqLv6cd8BLZibM=" + }, + "eslint-plugin-promise": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz", + "integrity": "sha1-/OMy1vX/UjIApTdwSGPsPCQiunw=" + }, + "eslint-plugin-react": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz", + "integrity": "sha1-fbBo4fVIf2hx5N7vNqOBwwPqwWE=", + "requires": { + "doctrine": "1.5.0", + "jsx-ast-utils": "1.4.1" + } + }, + "eslint-plugin-standard": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", + "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=" + }, + "espree": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.4.tgz", + "integrity": "sha1-BybXrIOvl6fISY2ps2OjYJ0qaKE=", + "requires": { + "acorn": "3.3.0", + "acorn-jsx": "3.0.1" + } + }, + "file-entry-cache": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", + "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", + "requires": { + "flat-cache": "1.3.0", + "object-assign": "4.1.1" + } + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "shelljs": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", + "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=" + }, + "solc": { + "version": "git+https://github.com/ethereum/solc-js.git#c3b0d91fb0030f15dbc578f76c762f2cf092f813", + "requires": { + "fs-extra": "0.30.0", + "memorystream": "0.3.1", + "require-from-string": "1.2.1", + "semver": "5.3.0", + "yargs": "4.8.1" + } + }, + "standard": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/standard/-/standard-7.1.2.tgz", + "integrity": "sha1-QBZu7sJAUGXRpPDj8VurxuJ0YH4=", + "requires": { + "eslint": "2.10.2", + "eslint-config-standard": "5.3.1", + "eslint-config-standard-jsx": "1.2.1", + "eslint-plugin-promise": "1.3.2", + "eslint-plugin-react": "5.2.2", + "eslint-plugin-standard": "1.3.3", + "standard-engine": "4.1.3" + } + }, + "standard-engine": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-4.1.3.tgz", + "integrity": "sha1-ejGq1U8D2fOTVfQzic4GlPQJQVU=", + "requires": { + "defaults": "1.0.3", + "deglob": "1.1.2", + "find-root": "1.1.0", + "get-stdin": "5.0.1", + "minimist": "1.2.0", + "multiline": "1.0.2", + "pkg-config": "1.1.1", + "xtend": "4.0.1" + } + }, + "strip-json-comments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" + } + } + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.86.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.86.0.tgz", + "integrity": "sha512-BQZih67o9r+Ys94tcIW4S7Uu8pthjrQVxhsZ/weOwHbDfACxvIyvnAbzFQxjy1jMtvFSzv5zf4my6cZsJBbVzw==", + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.7.0", + "caseless": "0.12.0", + "combined-stream": "1.0.6", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.2", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.18", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.3.4", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=" + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "requires": { + "caller-path": "0.1.0", + "resolve-from": "1.0.1" + } + }, + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "requires": { + "path-parse": "1.0.5" + } + }, + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" + }, + "restore-cursor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", + "requires": { + "exit-hook": "1.1.1", + "onetime": "1.1.0" + } + }, + "resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "requires": { + "through": "2.3.8" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "7.1.2" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "3.0.4", + "inherits": "2.0.3" + } + }, + "rlp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz", + "integrity": "sha1-nbOE/0uJqPYVY9kjldhiWxjzr7A=" + }, + "run-async": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", + "requires": { + "once": "1.4.0" + } + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + }, + "rustbn.js": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.1.2.tgz", + "integrity": "sha512-bAkNqSHYdJdFsBC7Z11JgzYktL31HIpB2o70jZcGiL1U1TVtPyvaVhDrGWwS8uZtaqwW2k6NOPGZCqW/Dgh5Lg==" + }, + "rx-lite": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "scrypt": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", + "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", + "requires": { + "nan": "2.10.0" + } + }, + "scrypt-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", + "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" + }, + "scrypt.js": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", + "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", + "requires": { + "scrypt": "6.0.3", + "scryptsy": "1.2.1" + } + }, + "scryptsy": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", + "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", + "requires": { + "pbkdf2": "3.0.16" + } + }, + "secp256k1": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz", + "integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==", + "requires": { + "bindings": "1.3.0", + "bip66": "1.1.5", + "bn.js": "4.11.8", + "create-hash": "1.2.0", + "drbg.js": "1.0.1", + "elliptic": "6.4.0", + "nan": "2.10.0", + "safe-buffer": "5.1.2" + } + }, + "seek-bzip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", + "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", + "requires": { + "commander": "2.8.1" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "requires": { + "graceful-readlink": "1.0.1" + } + } + } + }, + "semaphore": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", + "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "sentence-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", + "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=", + "requires": { + "no-case": "2.3.2", + "upper-case-first": "1.1.2" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "servify": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", + "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", + "requires": { + "body-parser": "1.18.3", + "cors": "2.8.4", + "express": "4.16.3", + "request": "2.86.0", + "xhr": "2.4.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "2.0.3", + "safe-buffer": "5.1.2" + } + }, + "sha3": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", + "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", + "requires": { + "nan": "2.10.0" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "requires": { + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" + } + }, + "shelljs": { + "version": "0.7.8", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", + "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "requires": { + "glob": "7.1.2", + "interpret": "1.1.0", + "rechoir": "0.6.2" + } + }, + "simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "requires": { + "decompress-response": "3.3.0", + "once": "1.4.0", + "simple-concat": "1.0.0" + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" + }, + "snake-case": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", + "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=", + "requires": { + "no-case": "2.3.2" + } + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "requires": { + "hoek": "4.2.1" + } + }, + "solc": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.24.tgz", + "integrity": "sha512-2xd7Cf1HeVwrIb6Bu1cwY2/TaLRodrppCq3l7rhLimFQgmxptXhTC3+/wesVLpB09F1A2kZgvbMOgH7wvhFnBQ==", + "requires": { + "fs-extra": "0.30.0", + "memorystream": "0.3.1", + "require-from-string": "1.2.1", + "semver": "5.3.0", + "yargs": "4.8.1" + }, + "dependencies": { + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "requires": { + "source-map": "0.5.7" + } + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "requires": { + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "2.1.0", + "spdx-license-ids": "3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" + }, + "split": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", + "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "requires": { + "through": "2.3.8" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", + "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + } + }, + "standard": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/standard/-/standard-10.0.3.tgz", + "integrity": "sha512-JURZ+85ExKLQULckDFijdX5WHzN6RC7fgiZNSV4jFQVo+3tPoQGHyBrGekye/yf0aOfb4210EM5qPNlc2cRh4w==", + "requires": { + "eslint": "3.19.0", + "eslint-config-standard": "10.2.1", + "eslint-config-standard-jsx": "4.0.2", + "eslint-plugin-import": "2.2.0", + "eslint-plugin-node": "4.2.3", + "eslint-plugin-promise": "3.5.0", + "eslint-plugin-react": "6.10.3", + "eslint-plugin-standard": "3.0.1", + "standard-engine": "7.0.0" + } + }, + "standard-engine": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-7.0.0.tgz", + "integrity": "sha1-67d7nI/CyBZf+jU72Rug3/Qa9pA=", + "requires": { + "deglob": "2.1.0", + "get-stdin": "5.0.1", + "minimist": "1.2.0", + "pkg-conf": "2.1.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "stream-combiner": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", + "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "requires": { + "duplexer": "0.1.1" + } + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string.prototype.padend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", + "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.11.0", + "function-bind": "1.1.1" + } + }, + "string.prototype.trim": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", + "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", + "requires": { + "define-properties": "1.1.2", + "es-abstract": "1.11.0", + "function-bind": "1.1.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + }, + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "requires": { + "is-natural-number": "4.0.1" + } + }, + "strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", + "requires": { + "is-hex-prefixed": "1.0.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "4.0.1" + }, + "dependencies": { + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + } + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "swap-case": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", + "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", + "requires": { + "lower-case": "1.1.4", + "upper-case": "1.1.3" + } + }, + "swarm-js": { + "version": "0.1.37", + "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.37.tgz", + "integrity": "sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==", + "requires": { + "bluebird": "3.5.1", + "buffer": "5.1.0", + "decompress": "4.2.0", + "eth-lib": "0.1.27", + "fs-extra": "2.1.2", + "fs-promise": "2.0.3", + "got": "7.1.0", + "mime-types": "2.1.18", + "mkdirp-promise": "5.0.1", + "mock-fs": "4.5.0", + "setimmediate": "1.0.5", + "tar.gz": "1.0.7", + "xhr-request-promise": "0.1.2" + } + }, + "table": { + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", + "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", + "requires": { + "ajv": "4.11.8", + "ajv-keywords": "1.5.1", + "chalk": "1.1.3", + "lodash": "4.17.10", + "slice-ansi": "0.0.4", + "string-width": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + } + } + }, + "tape": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.9.0.tgz", + "integrity": "sha512-j0jO9BiScfqtPBb9QmPLL0qvxXMz98xjkMb7x8lKipFlJZwNJkqkWPou+NU4V6T9RnVh1kuSthLE8gLrN8bBfw==", + "requires": { + "deep-equal": "1.0.1", + "defined": "1.0.0", + "for-each": "0.3.2", + "function-bind": "1.1.1", + "glob": "7.1.2", + "has": "1.0.1", + "inherits": "2.0.3", + "minimist": "1.2.0", + "object-inspect": "1.5.0", + "resolve": "1.5.0", + "resumer": "0.0.0", + "string.prototype.trim": "1.1.2", + "through": "2.3.8" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "resolve": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", + "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", + "requires": { + "path-parse": "1.0.5" + } + } + } + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "requires": { + "block-stream": "0.0.9", + "fstream": "1.0.11", + "inherits": "2.0.3" + } + }, + "tar-stream": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", + "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", + "requires": { + "bl": "1.2.2", + "buffer-alloc": "1.1.0", + "end-of-stream": "1.4.1", + "fs-constants": "1.0.0", + "readable-stream": "2.3.6", + "to-buffer": "1.1.1", + "xtend": "4.0.1" + } + }, + "tar.gz": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.7.tgz", + "integrity": "sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==", + "requires": { + "bluebird": "2.11.0", + "commander": "2.15.1", + "fstream": "1.0.11", + "mout": "0.11.1", + "tar": "2.2.1" + }, + "dependencies": { + "bluebird": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", + "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "requires": { + "any-promise": "1.3.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "requires": { + "thenify": "3.3.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "time-stamp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", + "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=" + }, + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" + }, + "title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "to-buffer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "1.4.1" + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.18" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "1.0.0" + } + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "unbzip2-stream": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", + "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", + "requires": { + "buffer": "3.6.0", + "through": "2.3.8" + }, + "dependencies": { + "base64-js": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", + "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" + }, + "buffer": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", + "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", + "requires": { + "base64-js": "0.0.8", + "ieee754": "1.1.11", + "isarray": "1.0.0" + } + } + } + }, + "underscore": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", + "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "upper-case-first": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", + "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", + "requires": { + "upper-case": "1.1.3" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "requires": { + "prepend-http": "1.0.4" + } + }, + "url-set-query": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", + "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" + }, + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" + }, + "user-home": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", + "requires": { + "os-homedir": "1.0.2" + } + }, + "utf8": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", + "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" + }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", + "requires": { + "spdx-correct": "3.0.0", + "spdx-expression-parse": "3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "web3": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.27.tgz", + "integrity": "sha1-2afJVr7JgbC6knvbkd0PEnXrNHk=", + "requires": { + "web3-bzz": "1.0.0-beta.27", + "web3-core": "1.0.0-beta.27", + "web3-eth": "1.0.0-beta.27", + "web3-eth-personal": "1.0.0-beta.27", + "web3-net": "1.0.0-beta.27", + "web3-shh": "1.0.0-beta.27", + "web3-utils": "1.0.0-beta.27" + } + }, + "web3-bzz": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.27.tgz", + "integrity": "sha1-Tmggpc/nOqsG2CV59FBFD76YIqM=", + "requires": { + "got": "7.1.0", + "swarm-js": "0.1.37", + "underscore": "1.8.3" + } + }, + "web3-core": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.27.tgz", + "integrity": "sha1-TQCb9x5Yt5F2E0EpF+/5ERO0N8M=", + "requires": { + "web3-core-helpers": "1.0.0-beta.27", + "web3-core-method": "1.0.0-beta.27", + "web3-core-requestmanager": "1.0.0-beta.27", + "web3-utils": "1.0.0-beta.27" + } + }, + "web3-core-helpers": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.27.tgz", + "integrity": "sha1-6wlPrTfJ3B1wZt11Zimi1u+6B6I=", + "requires": { + "underscore": "1.8.3", + "web3-eth-iban": "1.0.0-beta.27", + "web3-utils": "1.0.0-beta.27" + } + }, + "web3-core-method": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.27.tgz", + "integrity": "sha1-3hTlQL1qdTfXBGcLSeY/BSYgG6o=", + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.27", + "web3-core-promievent": "1.0.0-beta.27", + "web3-core-subscriptions": "1.0.0-beta.27", + "web3-utils": "1.0.0-beta.27" + } + }, + "web3-core-promievent": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.27.tgz", + "integrity": "sha1-0lx9e75NU9+/3KBJ+e1LCmlUvrw=", + "requires": { + "bluebird": "3.3.1", + "eventemitter3": "1.1.1" + }, + "dependencies": { + "bluebird": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.3.1.tgz", + "integrity": "sha1-+Xrhlw9B2FF3KDBT6aEgFg5mxh0=" + } + } + }, + "web3-core-requestmanager": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.27.tgz", + "integrity": "sha1-Vk7uJEoxCq5abGgyzeLA49wwHpg=", + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.27", + "web3-providers-http": "1.0.0-beta.27", + "web3-providers-ipc": "1.0.0-beta.27", + "web3-providers-ws": "1.0.0-beta.27" + } + }, + "web3-core-subscriptions": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.27.tgz", + "integrity": "sha1-VvKRy1Sn7PgNRzTXL1Sky8uJdzc=", + "requires": { + "eventemitter3": "1.1.1", + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.27" + } + }, + "web3-eth": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.27.tgz", + "integrity": "sha1-hV3Q4BqU1Xhx/9j0n22eyqMXIas=", + "requires": { + "underscore": "1.8.3", + "web3-core": "1.0.0-beta.27", + "web3-core-helpers": "1.0.0-beta.27", + "web3-core-method": "1.0.0-beta.27", + "web3-core-subscriptions": "1.0.0-beta.27", + "web3-eth-abi": "1.0.0-beta.27", + "web3-eth-accounts": "1.0.0-beta.27", + "web3-eth-contract": "1.0.0-beta.27", + "web3-eth-iban": "1.0.0-beta.27", + "web3-eth-personal": "1.0.0-beta.27", + "web3-net": "1.0.0-beta.27", + "web3-utils": "1.0.0-beta.27" + } + }, + "web3-eth-abi": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.27.tgz", + "integrity": "sha1-RS6dk3YVYL4yNE7juJddD7JLvb4=", + "requires": { + "bn.js": "4.11.6", + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.27", + "web3-utils": "1.0.0-beta.27" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "web3-eth-accounts": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.27.tgz", + "integrity": "sha1-mUDCjl48kg1nz2iH6pxS8c3Re3k=", + "requires": { + "bluebird": "3.3.1", + "crypto-browserify": "3.12.0", + "eth-lib": "0.2.5", + "scrypt.js": "0.2.0", + "underscore": "1.8.3", + "uuid": "2.0.1", + "web3-core": "1.0.0-beta.27", + "web3-core-helpers": "1.0.0-beta.27", + "web3-core-method": "1.0.0-beta.27", + "web3-utils": "1.0.0-beta.27" + }, + "dependencies": { + "bluebird": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.3.1.tgz", + "integrity": "sha1-+Xrhlw9B2FF3KDBT6aEgFg5mxh0=" + }, + "eth-lib": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.5.tgz", + "integrity": "sha512-pXs4ryU+7S8MPpkQpNqG4JlXEec87kbXowQbYzRVV+c5XUccrO6WOxVPDicxql1AXSBzfmBSFVkvvG+H4htuxg==", + "requires": { + "bn.js": "4.11.8", + "elliptic": "6.4.0", + "xhr-request-promise": "0.1.2" + } + }, + "uuid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" + } + } + }, + "web3-eth-contract": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.27.tgz", + "integrity": "sha1-AS96XVnaZ+KWxzWo8pcK7N0gfn0=", + "requires": { + "underscore": "1.8.3", + "web3-core": "1.0.0-beta.27", + "web3-core-helpers": "1.0.0-beta.27", + "web3-core-method": "1.0.0-beta.27", + "web3-core-promievent": "1.0.0-beta.27", + "web3-core-subscriptions": "1.0.0-beta.27", + "web3-eth-abi": "1.0.0-beta.27", + "web3-utils": "1.0.0-beta.27" + } + }, + "web3-eth-iban": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.27.tgz", + "integrity": "sha1-RDPCj0F8Oa+WMzoGpK+h/NSqaEI=", + "requires": { + "bn.js": "4.11.8", + "web3-utils": "1.0.0-beta.27" + } + }, + "web3-eth-personal": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.27.tgz", + "integrity": "sha1-ukiaNIdkpKswOItcwcblm9bq7Ks=", + "requires": { + "web3-core": "1.0.0-beta.27", + "web3-core-helpers": "1.0.0-beta.27", + "web3-core-method": "1.0.0-beta.27", + "web3-net": "1.0.0-beta.27", + "web3-utils": "1.0.0-beta.27" + } + }, + "web3-net": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.27.tgz", + "integrity": "sha1-eulTbsOf7Rou6zjALm48jt/oq30=", + "requires": { + "web3-core": "1.0.0-beta.27", + "web3-core-method": "1.0.0-beta.27", + "web3-utils": "1.0.0-beta.27" + } + }, + "web3-providers-http": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.27.tgz", + "integrity": "sha1-LwrhYJvF5KNb4lgYzX/HfeBitqY=", + "requires": { + "web3-core-helpers": "1.0.0-beta.27", + "xhr2": "0.1.4" + } + }, + "web3-providers-ipc": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.27.tgz", + "integrity": "sha1-oFwkIe/+TEfxX0efeSUTWtCUJ2I=", + "requires": { + "oboe": "2.1.3", + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.27" + } + }, + "web3-providers-ws": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.27.tgz", + "integrity": "sha1-bUZ4Geoi3foba6FJjTHZVU4rBt0=", + "requires": { + "underscore": "1.8.3", + "web3-core-helpers": "1.0.0-beta.27", + "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" + } + }, + "web3-shh": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.27.tgz", + "integrity": "sha1-b3bW6yoma769zwqjDFo62J82e38=", + "requires": { + "web3-core": "1.0.0-beta.27", + "web3-core-method": "1.0.0-beta.27", + "web3-core-subscriptions": "1.0.0-beta.27", + "web3-net": "1.0.0-beta.27" + } + }, + "web3-utils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.27.tgz", + "integrity": "sha1-0JfVwzaha59sqbYK9o3RXAZDIUs=", + "requires": { + "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" + }, + "dependencies": { + "bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" + } + } + }, + "websocket": { + "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", + "requires": { + "debug": "2.6.9", + "nan": "2.10.0", + "typedarray-to-buffer": "3.1.5", + "yaeti": "0.0.6" + } + }, + "webworkify": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/webworkify/-/webworkify-1.5.0.tgz", + "integrity": "sha512-AMcUeyXAhbACL8S2hqqdqOLqvJ8ylmIbNwUIqQujRSouf4+eUFaXbG6F1Rbu+srlJMmxQWsiU7mOJi0nMBfM1g==" + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=" + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "requires": { + "mkdirp": "0.5.1" + } + }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.2", + "ultron": "1.1.1" + } + }, + "xhr": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.4.1.tgz", + "integrity": "sha512-pAIU5vBr9Hiy5cpFIbPnwf0C18ZF86DBsZKrlsf87N5De/JbA6RJ83UP/cv+aljl4S40iRVMqP4pr4sF9Dnj0A==", + "requires": { + "global": "4.3.2", + "is-function": "1.0.1", + "parse-headers": "2.0.1", + "xtend": "4.0.1" + } + }, + "xhr-request": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", + "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", + "requires": { + "buffer-to-arraybuffer": "0.0.5", + "object-assign": "4.1.1", + "query-string": "5.1.1", + "simple-get": "2.8.1", + "timed-out": "4.0.1", + "url-set-query": "1.0.0", + "xhr": "2.4.1" + } + }, + "xhr-request-promise": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", + "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", + "requires": { + "xhr-request": "1.1.0" + } + }, + "xhr2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", + "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" + }, + "yargs": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", + "requires": { + "cliui": "3.2.0", + "decamelize": "1.2.0", + "get-caller-file": "1.0.2", + "lodash.assign": "4.2.0", + "os-locale": "1.4.0", + "read-pkg-up": "1.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "1.0.2", + "which-module": "1.0.0", + "window-size": "0.2.0", + "y18n": "3.2.1", + "yargs-parser": "2.4.1" + } + }, + "yargs-parser": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", + "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", + "requires": { + "camelcase": "3.0.0", + "lodash.assign": "4.2.0" + } + }, + "yauzl": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", + "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", + "requires": { + "buffer-crc32": "0.2.13", + "fd-slicer": "1.0.1" + } + } + } +} diff --git a/package.json b/package.json index 35d9ff036f..71365a0ed4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "remix-tests", - "version": "0.0.3", + "version": "0.0.4", "description": "", "main": "./src/index.js", "contributors": [ @@ -17,8 +17,6 @@ "remix-tests": "./bin/remix-tests" }, "scripts": { - "downloadsolc": "cd node_modules/solc && (test -e soljson.js || wget https://ethereum.github.io/solc-bin/soljson.js) && cd ..", - "prepublish": "npm-run-all -ls downloadsolc", "lint": "standard", "test": "standard && mocha tests/ -t 300000" }, @@ -45,6 +43,7 @@ "commander": "^2.13.0", "remix-simulator": "latest", "remix-solidity": "latest", + "solc": "^0.4.24", "standard": "^10.0.3", "web3": "1.0.0-beta.27" }, From 6c6434a48f9b92cd845ecf9711941e6551c28729 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 25 May 2018 10:54:51 -0400 Subject: [PATCH 075/105] update example tests --- examples/simple_storage2_test.sol | 5 ----- examples/simple_storage_test.sol | 8 ++++++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/examples/simple_storage2_test.sol b/examples/simple_storage2_test.sol index 9c5765efce..0c199f9b03 100644 --- a/examples/simple_storage2_test.sol +++ b/examples/simple_storage2_test.sol @@ -25,10 +25,5 @@ contract MyTest2 { return Assert.equal(foo.get(), 200, "initial value is not correct"); } - // TODO: the tests don't necessarily run in order - //function initialValueShouldBe400() public constant returns (bool) { - // return Assert.equal(foo.get(), 400, "initial value is not correct"); - //} - } diff --git a/examples/simple_storage_test.sol b/examples/simple_storage_test.sol index f95df21cc0..ec780ae85d 100644 --- a/examples/simple_storage_test.sol +++ b/examples/simple_storage_test.sol @@ -4,11 +4,19 @@ import "./simple_storage.sol"; contract MyTest { SimpleStorage foo; + uint i = 0; function beforeAll() { foo = new SimpleStorage(); } + function beforeEach() { + if (i == 1) { + foo.set(200); + } + i += 1; + } + function initialValueShouldBe100() public { Assert.equal(foo.get(), 100, "initial value is not correct"); } From 12b36e4000f8058dc50f7c9b14b276b1d5b4c5ff Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 25 May 2018 10:56:37 -0400 Subject: [PATCH 076/105] update error filtering so it checks for severity instead of just type --- src/compiler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler.js b/src/compiler.js index 29647863d6..1a414470cd 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -36,7 +36,7 @@ function compileFileOrFiles (filename, isDirectory, cb) { compiler.compile(sources, filepath) } ], function (err, result) { - let errors = (result.errors || []).filter((e) => e.type === 'Error') + let errors = (result.errors || []).filter((e) => e.type === 'Error' || e.severity === 'error') if (errors.length > 0) { console.dir(errors) return cb(new Error('errors compiling')) From 4ced2fbfc96ded50d582613313a4001cfd04a6e8 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 25 May 2018 10:58:30 -0400 Subject: [PATCH 077/105] error when the contract being attempted to deploy is not found --- src/deployer.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/deployer.js b/src/deployer.js index e769030179..3b51e1e48a 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -55,6 +55,10 @@ function deployAll (compileResult, web3, callback) { function deployContracts (contractsToDeploy, next) { async.eachOfLimit(contractsToDeploy, 1, function (contractName, index, nextEach) { let contract = compiledObject[contractName] + if (!contract) { + console.error("Contract not found: " + contractName); + return nextEach(new Error("Contract not found: " + contractName)); + } let contractObject = new web3.eth.Contract(contract.abi) let contractCode = '0x' + contract.code From 704c36fea2899e8c5267b17773742987caa12a69 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 25 May 2018 11:03:51 -0400 Subject: [PATCH 078/105] fix web3 reference; catch errors --- src/testRunner.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/testRunner.js b/src/testRunner.js index cc8ebf7a3c..070d99122d 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -36,6 +36,7 @@ function runTest (testName, testObject, testCallback, resultsCallback) { let passingNum = 0 let failureNum = 0 let timePassed = 0 + let web3 = new Web3(); testCallback({type: 'contract', value: testName}) async.eachOfLimit(runList, 1, function (func, index, next) { @@ -56,15 +57,16 @@ function runTest (testName, testObject, testCallback, resultsCallback) { }) } else { method.send().on('receipt', function (receipt) { - let time = Math.ceil((Date.now() - startTime) / 1000.0) - if (func.type === 'test') { + try { + let time = Math.ceil((Date.now() - startTime) / 1000.0) + //if (func.type === 'test') { let topic = Web3.utils.sha3('AssertionEvent(bool,string)') let matchingEvents = [] for (let i in receipt.events) { let event = receipt.events[i] if (event.raw.topics.indexOf(topic) >= 0) { - matchingEvents.push(Web3.eth.abi.decodeParameters(['bool', 'string'], event.raw.data)) + matchingEvents.push(web3.eth.abi.decodeParameters(['bool', 'string'], event.raw.data)) } } @@ -81,6 +83,11 @@ function runTest (testName, testObject, testCallback, resultsCallback) { testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time, errMsg: result[1], context: testName}) failureNum += 1 } + //} + } catch(err) { + console.log("error!"); + console.dir(err); + return next(err) } next() }).on('error', function (err) { From 9b67d8861ec9c5718461796bd1ce934bf5c8ffb6 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Wed, 30 May 2018 18:05:21 -0400 Subject: [PATCH 079/105] export tests lib sol code --- sol/{tests.sol => tests.sol.js} | 3 ++- src/index.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) rename sol/{tests.sol => tests.sol.js} (99%) diff --git a/sol/tests.sol b/sol/tests.sol.js similarity index 99% rename from sol/tests.sol rename to sol/tests.sol.js index 4fafe85392..2356f09100 100644 --- a/sol/tests.sol +++ b/sol/tests.sol.js @@ -1,3 +1,4 @@ +module.exports = ` pragma solidity ^0.4.7; library Assert { @@ -99,4 +100,4 @@ library Assert { //} } - +`; diff --git a/src/index.js b/src/index.js index e484b1ba01..8ae7143d06 100644 --- a/src/index.js +++ b/src/index.js @@ -188,5 +188,6 @@ var runTestFiles = function (filepath, isDirectory, web3) { module.exports = { runTestFiles: runTestFiles, runTestSources: runTestSources, - runTest: TestRunner.runTest + runTest: TestRunner.runTest, + assertLibCode: require('../sol/tests.sol.js') } From 82361713520c9c8ab22a35198f3b3373d99df874 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Wed, 30 May 2018 18:05:45 -0400 Subject: [PATCH 080/105] support remix_tests.sol reference --- src/compiler.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/compiler.js b/src/compiler.js index 1a414470cd..48d7a1f65a 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -10,7 +10,8 @@ function compileFileOrFiles (filename, isDirectory, cb) { let compiler, filepath const sources = { - 'tests.sol': {content: fs.readFileSync('sol/tests.sol').toString()} + 'tests.sol': {content: require('../sol/tests.sol.js') }, + 'remix_tests.sol': {content: require('../sol/tests.sol.js') } } // TODO: for now assumes filepath dir contains all tests, later all this @@ -48,6 +49,10 @@ function compileFileOrFiles (filename, isDirectory, cb) { function compileContractSources (sources, cb) { let compiler, filepath + if(!sources['remix_tests.sol']) { + sources['remix_tests.sol'] = {content: require('../sol/tests.sol.js')} + } + async.waterfall([ function loadCompiler (next) { compiler = new RemixCompiler() From 618a22cab557274906e6943fee89964127f80a25 Mon Sep 17 00:00:00 2001 From: yann300 Date: Fri, 1 Jun 2018 09:19:12 +0200 Subject: [PATCH 081/105] Add importFileCb to index.js --- src/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 8ae7143d06..92cdb87637 100644 --- a/src/index.js +++ b/src/index.js @@ -16,10 +16,10 @@ var createWeb3Provider = function() { return web3 } -var runTestSources = function (contractSources, testCallback, resultCallback, finalCallback) { +var runTestSources = function (contractSources, testCallback, resultCallback, finalCallback, importFileCb) { async.waterfall([ function compile (next) { - Compiler.compileContractSources(contractSources, next) + Compiler.compileContractSources(contractSources, importFileCb, next) }, function deployAllContracts (compilationResult, next) { let web3 = createWeb3Provider(); From c5aeca5d305cde277e11e79210af16e9b65cb9b9 Mon Sep 17 00:00:00 2001 From: yann300 Date: Fri, 1 Jun 2018 09:20:43 +0200 Subject: [PATCH 082/105] add importFileCb to compiler.js --- src/compiler.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler.js b/src/compiler.js index 48d7a1f65a..6be9bc1002 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -46,7 +46,7 @@ function compileFileOrFiles (filename, isDirectory, cb) { }) } -function compileContractSources (sources, cb) { +function compileContractSources (sources, importFileCb, cb) { let compiler, filepath if(!sources['remix_tests.sol']) { @@ -55,7 +55,7 @@ function compileContractSources (sources, cb) { async.waterfall([ function loadCompiler (next) { - compiler = new RemixCompiler() + compiler = new RemixCompiler(importFileCb) compiler.onInternalCompilerLoaded() // compiler.event.register('compilerLoaded', this, function (version) { next() From 5e5fba2b493ea52f9cf49bf2804a52aad2f4dbba Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Tue, 5 Jun 2018 11:27:07 -0400 Subject: [PATCH 083/105] update to 0.0.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 71365a0ed4..439d08033d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "remix-tests", - "version": "0.0.4", + "version": "0.0.5", "description": "", "main": "./src/index.js", "contributors": [ From 942a2288278dfb76e4cda5530d949e611b40c49b Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 21 Jun 2018 11:28:28 +0200 Subject: [PATCH 084/105] fix linting --- sol/tests.sol.js | 2 +- src/compiler.js | 6 +++--- src/deployer.js | 4 ++-- src/index.js | 25 ++++++++++++------------- src/testRunner.js | 12 ++++++------ 5 files changed, 24 insertions(+), 25 deletions(-) diff --git a/sol/tests.sol.js b/sol/tests.sol.js index 2356f09100..2fa6821bbe 100644 --- a/sol/tests.sol.js +++ b/sol/tests.sol.js @@ -100,4 +100,4 @@ library Assert { //} } -`; +` diff --git a/src/compiler.js b/src/compiler.js index 6be9bc1002..f6fc4698a9 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -10,8 +10,8 @@ function compileFileOrFiles (filename, isDirectory, cb) { let compiler, filepath const sources = { - 'tests.sol': {content: require('../sol/tests.sol.js') }, - 'remix_tests.sol': {content: require('../sol/tests.sol.js') } + 'tests.sol': { content: require('../sol/tests.sol.js') }, + 'remix_tests.sol': { content: require('../sol/tests.sol.js') } } // TODO: for now assumes filepath dir contains all tests, later all this @@ -49,7 +49,7 @@ function compileFileOrFiles (filename, isDirectory, cb) { function compileContractSources (sources, importFileCb, cb) { let compiler, filepath - if(!sources['remix_tests.sol']) { + if (!sources['remix_tests.sol']) { sources['remix_tests.sol'] = {content: require('../sol/tests.sol.js')} } diff --git a/src/deployer.js b/src/deployer.js index 3b51e1e48a..969f529610 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -56,8 +56,8 @@ function deployAll (compileResult, web3, callback) { async.eachOfLimit(contractsToDeploy, 1, function (contractName, index, nextEach) { let contract = compiledObject[contractName] if (!contract) { - console.error("Contract not found: " + contractName); - return nextEach(new Error("Contract not found: " + contractName)); + console.error('Contract not found: ' + contractName) + return nextEach(new Error('Contract not found: ' + contractName)) } let contractObject = new web3.eth.Contract(contract.abi) diff --git a/src/index.js b/src/index.js index 92cdb87637..f8019f1dfa 100644 --- a/src/index.js +++ b/src/index.js @@ -10,7 +10,7 @@ let TestRunner = require('./testRunner.js') const Web3 = require('web3') const Provider = require('remix-simulator').Provider -var createWeb3Provider = function() { +var createWeb3Provider = function () { let web3 = new Web3() web3.setProvider(new Provider()) return web3 @@ -22,7 +22,7 @@ var runTestSources = function (contractSources, testCallback, resultCallback, fi Compiler.compileContractSources(contractSources, importFileCb, next) }, function deployAllContracts (compilationResult, next) { - let web3 = createWeb3Provider(); + let web3 = createWeb3Provider() Deployer.deployAll(compilationResult, web3, function (err, contracts) { if (err) { next(err) @@ -35,7 +35,6 @@ var runTestSources = function (contractSources, testCallback, resultCallback, fi let contractsToTest = [] for (let filename in compilationResult) { - let contract = compilationResult[filename]; if (filename.indexOf('_test.sol') < 0) { continue } @@ -56,11 +55,11 @@ var runTestSources = function (contractSources, testCallback, resultCallback, fi if (result.type === 'testFailure') { errors.push(result) } - testCallback(result); + testCallback(result) } var _resultsCallback = function (_err, result, cb) { - resultCallback(_err, result, () => {}); + resultCallback(_err, result, () => {}) totalPassing += result.passingNum totalFailing += result.failureNum totalTime += result.timePassed @@ -79,21 +78,21 @@ var runTestSources = function (contractSources, testCallback, resultCallback, fi return next(err) } - let finalResults = {}; + let finalResults = {} - finalResults.totalPassing = totalPassing || 0; - finalResults.totalFailing = totalFailing || 0; - finalResults.totalTime = totalTime || 0; - finalResults.errors = []; + finalResults.totalPassing = totalPassing || 0 + finalResults.totalFailing = totalFailing || 0 + finalResults.totalTime = totalTime || 0 + finalResults.errors = [] errors.forEach((error, _index) => { - finalResults.errors.push({context: error.context, value: error.value, message: error.errMsg}); + finalResults.errors.push({context: error.context, value: error.value, message: error.errMsg}) }) - next(null, finalResults); + next(null, finalResults) }) } - ], finalCallback); + ], finalCallback) } var runTestFiles = function (filepath, isDirectory, web3) { diff --git a/src/testRunner.js b/src/testRunner.js index 070d99122d..c83c989697 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -36,7 +36,7 @@ function runTest (testName, testObject, testCallback, resultsCallback) { let passingNum = 0 let failureNum = 0 let timePassed = 0 - let web3 = new Web3(); + let web3 = new Web3() testCallback({type: 'contract', value: testName}) async.eachOfLimit(runList, 1, function (func, index, next) { @@ -59,7 +59,7 @@ function runTest (testName, testObject, testCallback, resultsCallback) { method.send().on('receipt', function (receipt) { try { let time = Math.ceil((Date.now() - startTime) / 1000.0) - //if (func.type === 'test') { + // if (func.type === 'test') { let topic = Web3.utils.sha3('AssertionEvent(bool,string)') let matchingEvents = [] @@ -83,10 +83,10 @@ function runTest (testName, testObject, testCallback, resultsCallback) { testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time, errMsg: result[1], context: testName}) failureNum += 1 } - //} - } catch(err) { - console.log("error!"); - console.dir(err); + // } + } catch (err) { + console.log('error!') + console.dir(err) return next(err) } next() From 9fa9f775014992819f6923f28b621f6e2aabc284 Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 21 Jun 2018 11:14:42 +0200 Subject: [PATCH 085/105] Allow returning more than one Assert per function --- src/testRunner.js | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/src/testRunner.js b/src/testRunner.js index c83c989697..94c0d53dde 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -59,37 +59,27 @@ function runTest (testName, testObject, testCallback, resultsCallback) { method.send().on('receipt', function (receipt) { try { let time = Math.ceil((Date.now() - startTime) / 1000.0) - // if (func.type === 'test') { let topic = Web3.utils.sha3('AssertionEvent(bool,string)') - let matchingEvents = [] for (let i in receipt.events) { let event = receipt.events[i] if (event.raw.topics.indexOf(topic) >= 0) { - matchingEvents.push(web3.eth.abi.decodeParameters(['bool', 'string'], event.raw.data)) + var testEvent = web3.eth.abi.decodeParameters(['bool', 'string'], event.raw.data) + if (testEvent[0]) { + testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name), time: time, context: testName}) + passingNum += 1 + } else { + testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time, errMsg: testEvent[1], context: testName}) + failureNum += 1 + } } } - - if (matchingEvents.length === 0) { - return next() - } - - let result = matchingEvents[0] - - if (result[0]) { - testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name), time: time, context: testName}) - passingNum += 1 - } else { - testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time, errMsg: result[1], context: testName}) - failureNum += 1 - } - // } + return next() } catch (err) { console.log('error!') console.dir(err) return next(err) } - next() }).on('error', function (err) { next(err) }) From e6519af9f90b0808b17878ae64a51bafeb9fadac Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 20 Jun 2018 18:42:29 +0200 Subject: [PATCH 086/105] Fix Deploy Libraries --- src/deployer.js | 62 +++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/src/deployer.js b/src/deployer.js index 969f529610..e79e9e7eca 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -1,6 +1,5 @@ var async = require('async') - -// TODO: replace this with remix's own deployer code +var remixLib = require('remix-lib') function deployAll (compileResult, web3, callback) { let compiledObject = {} @@ -30,6 +29,7 @@ function deployAll (compileResult, web3, callback) { compiledObject[className].code = code compiledObject[className].filename = filename compiledObject[className].className = className + compiledObject[className].raw = contract if (contractFile.indexOf('_test.sol') >= 0) { compiledObject[className].isTest = true @@ -53,35 +53,7 @@ function deployAll (compileResult, web3, callback) { next(null, contractsToDeploy) }, function deployContracts (contractsToDeploy, next) { - async.eachOfLimit(contractsToDeploy, 1, function (contractName, index, nextEach) { - let contract = compiledObject[contractName] - if (!contract) { - console.error('Contract not found: ' + contractName) - return nextEach(new Error('Contract not found: ' + contractName)) - } - let contractObject = new web3.eth.Contract(contract.abi) - - let contractCode = '0x' + contract.code - - // TODO: temporary code, and terrible if the contracts are not in order... - for (let name in compiledObject) { - let contractObj = compiledObject[name] - let linkReference = '__' + contractObj.filename + ':' + contractObj.className - let toReplace = linkReference + '_'.repeat(40 - linkReference.length) - - if (contractCode.indexOf(linkReference) < 0) { - continue - } - - if (!contractObj.deployedAddress) { - throw new Error('linking not found for ' + name + ' when deploying ' + contractName) - } - - contractCode = contractCode.replace(new RegExp(toReplace, 'g'), contractObj.deployedAddress.slice(2)) - } - - let deployObject = contractObject.deploy({arguments: [], data: contractCode}) - + var deployRunner = (deployObject, contractObject, contractName, callback) => { deployObject.estimateGas().then((gasValue) => { deployObject.send({ from: accounts[0], @@ -94,12 +66,36 @@ function deployAll (compileResult, web3, callback) { contracts[contractName] = contractObject - nextEach() + callback(null, { result: { createdAddress: receipt.contractAddress } }) // TODO this will only work with JavaScriptV VM }).on('error', function (err) { console.dir(err) - nextEach(err) + callback(err) }) }) + } + + async.eachOfLimit(contractsToDeploy, 1, function (contractName, index, nextEach) { + let contract = compiledObject[contractName] + let encodeDataFinalCallback = (error, contractDeployData) => { + if (error) return nextEach(error) + let contractObject = new web3.eth.Contract(contract.abi) + let deployObject = contractObject.deploy({arguments: [], data: '0x' + contractDeployData.dataHex}) + deployRunner(deployObject, contractObject, contractName, (error) => { nextEach(error) }) + } + + let encodeDataStepCallback = (msg) => { console.dir(msg) } + + let encodeDataDeployLibraryCallback = (libData, callback) => { + let abi = compiledObject[libData.data.contractName].abi + let code = compiledObject[libData.data.contractName].code + let libraryObject = new web3.eth.Contract(abi) + let deployObject = libraryObject.deploy({arguments: [], data: '0x' + code}) + deployRunner(deployObject, libraryObject, libData.data.contractName, callback) + } + + let funAbi = null // no need to set the abi for encoding the constructor + let params = '' // we suppose that the test contract does not have any param in the constructor + remixLib.execution.txFormat.encodeConstructorCallAndDeployLibraries(contractName, contract.raw, compileResult, params, funAbi, encodeDataFinalCallback, encodeDataStepCallback, encodeDataDeployLibraryCallback) }, function () { next(null, contracts) }) From f0970e44860e96782ebd9989e33ecc9e1330e5bb Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 21 Jun 2018 11:26:55 -0400 Subject: [PATCH 087/105] include filename in contract callback --- src/deployer.js | 7 ++++--- src/testRunner.js | 2 +- tests/testRunner.js | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/deployer.js b/src/deployer.js index e79e9e7eca..d91438f697 100644 --- a/src/deployer.js +++ b/src/deployer.js @@ -53,7 +53,7 @@ function deployAll (compileResult, web3, callback) { next(null, contractsToDeploy) }, function deployContracts (contractsToDeploy, next) { - var deployRunner = (deployObject, contractObject, contractName, callback) => { + var deployRunner = (deployObject, contractObject, contractName, filename, callback) => { deployObject.estimateGas().then((gasValue) => { deployObject.send({ from: accounts[0], @@ -65,6 +65,7 @@ function deployAll (compileResult, web3, callback) { compiledObject[contractName].deployedAddress = receipt.contractAddress contracts[contractName] = contractObject + contracts[contractName].filename = filename callback(null, { result: { createdAddress: receipt.contractAddress } }) // TODO this will only work with JavaScriptV VM }).on('error', function (err) { @@ -80,7 +81,7 @@ function deployAll (compileResult, web3, callback) { if (error) return nextEach(error) let contractObject = new web3.eth.Contract(contract.abi) let deployObject = contractObject.deploy({arguments: [], data: '0x' + contractDeployData.dataHex}) - deployRunner(deployObject, contractObject, contractName, (error) => { nextEach(error) }) + deployRunner(deployObject, contractObject, contractName, contract.filename, (error) => { nextEach(error) }) } let encodeDataStepCallback = (msg) => { console.dir(msg) } @@ -90,7 +91,7 @@ function deployAll (compileResult, web3, callback) { let code = compiledObject[libData.data.contractName].code let libraryObject = new web3.eth.Contract(abi) let deployObject = libraryObject.deploy({arguments: [], data: '0x' + code}) - deployRunner(deployObject, libraryObject, libData.data.contractName, callback) + deployRunner(deployObject, libraryObject, libData.data.contractName, contract.filename, callback) } let funAbi = null // no need to set the abi for encoding the constructor diff --git a/src/testRunner.js b/src/testRunner.js index 94c0d53dde..6b2444fd3e 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -38,7 +38,7 @@ function runTest (testName, testObject, testCallback, resultsCallback) { let timePassed = 0 let web3 = new Web3() - testCallback({type: 'contract', value: testName}) + testCallback({type: 'contract', value: testName, filename: testObject.filename}) async.eachOfLimit(runList, 1, function (func, index, next) { let method = testObject.methods[func.name].apply(testObject.methods[func.name], []) let startTime = Date.now() diff --git a/tests/testRunner.js b/tests/testRunner.js index 66a784e960..d5529050d0 100644 --- a/tests/testRunner.js +++ b/tests/testRunner.js @@ -52,7 +52,7 @@ describe('testRunner', function () { it('should returns 3 messages', function () { assert.deepEqual(tests, [ - { type: 'contract', value: 'MyTest' }, + { type: 'contract', value: 'MyTest', filename: 'simple_storage_test.sol' }, { type: 'testPass', value: 'Initial value should be100', time: 1, context: 'MyTest' }, { type: 'testFailure', value: 'Initial value should be200', time: 1, context: 'MyTest', errMsg: 'function returned false' } ]) @@ -86,7 +86,7 @@ describe('testRunner', function () { it('should returns 3 messages', function () { assert.deepEqual(tests, [ - { type: 'contract', value: 'MyTest' }, + { type: 'contract', value: 'MyTest', filename: 'simple_storage_test.sol' }, { type: 'testPass', value: 'Initial value should be100', time: 1, context: 'MyTest' }, { type: 'testPass', value: 'Initial value should be200', time: 1, context: 'MyTest' } ]) From 2d131aa205f54a5ded875b1a14b4113805c87420 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Tue, 26 Jun 2018 09:18:20 -0400 Subject: [PATCH 088/105] update to 0.0.6 --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6ee5262b4b..7cfed24cad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "remix-tests", - "version": "0.0.4", + "version": "0.0.6", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -5296,9 +5296,9 @@ } }, "remix-simulator": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/remix-simulator/-/remix-simulator-0.0.2.tgz", - "integrity": "sha512-xQdzSMPdUEDycX8cCSQ9ghR0jMsx1IJYSbSeWy9L5ZnIHk6wO2TwwQmn5wUwRnIUsLzFB5rIRVxQ908V9SYq6w==", + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/remix-simulator/-/remix-simulator-0.0.3.tgz", + "integrity": "sha512-TOHDubQt4kxqLFdUqgeJSReCAl3QHm1kghABFrHJdPMq6VRkg9nGL2noZscpR4XmHtSV1R0CtIZIAKgRRDlHog==", "requires": { "ansi-gray": "0.1.1", "babel-preset-es2017": "6.24.1", diff --git a/package.json b/package.json index 439d08033d..7fa2e106b6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "remix-tests", - "version": "0.0.5", + "version": "0.0.6", "description": "", "main": "./src/index.js", "contributors": [ From 2e80ab18cdfaff2d5705dfe7bd03bcf7a9f71129 Mon Sep 17 00:00:00 2001 From: 0mkar <0mkar@protonmail.com> Date: Fri, 29 Jun 2018 21:43:39 +0530 Subject: [PATCH 089/105] use my remix-solidity --- package-lock.json | 6981 --------------------------------------------- package.json | 2 +- 2 files changed, 1 insertion(+), 6982 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 7cfed24cad..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,6981 +0,0 @@ -{ - "name": "remix-tests", - "version": "0.0.6", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "abstract-leveldown": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz", - "integrity": "sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==", - "requires": { - "xtend": "4.0.1" - } - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "2.1.18", - "negotiator": "0.6.1" - } - }, - "acorn": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", - "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==" - }, - "acorn-es7-plugin": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/acorn-es7-plugin/-/acorn-es7-plugin-1.1.7.tgz", - "integrity": "sha1-8u4fMiipDurRJF+asZIusucdM2s=" - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" - } - } - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha1-4h3xCtbCBTKVvLuNq0Cwnb6ofk0=" - }, - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=" - }, - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=" - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "1.0.3" - } - }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=" - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=" - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" - }, - "array.prototype.find": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.0.4.tgz", - "integrity": "sha1-VWpcU2LAhkgyPdrrnenRS8GGTJA=", - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.11.0" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" - }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=" - }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", - "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", - "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==", - "requires": { - "lodash": "4.17.10" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "requires": { - "async": "2.6.0" - } - }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", - "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==" - }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" - } - }, - "babel-core": { - "version": "6.26.3", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", - "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", - "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "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.10", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" - } - }, - "babel-eslint": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", - "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", - "requires": { - "babel-code-frame": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0" - } - }, - "babel-generator": { - "version": "6.26.1", - "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", - "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", - "requires": { - "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.10", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "jsesc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", - "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=" - } - } - }, - "babel-helper-bindify-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz", - "integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=", - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-builder-binary-assignment-operator-visitor": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", - "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", - "requires": { - "babel-helper-explode-assignable-expression": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-call-delegate": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", - "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-define-map": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", - "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" - } - }, - "babel-helper-explode-assignable-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", - "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-explode-class": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz", - "integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=", - "requires": { - "babel-helper-bindify-decorators": "6.24.1", - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "requires": { - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-get-function-arity": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-hoist-variables": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", - "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-optimise-call-expression": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", - "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-regex": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", - "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" - } - }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helper-replace-supers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", - "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", - "requires": { - "babel-helper-optimise-call-expression": "6.24.1", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-helpers": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", - "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-messages": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-check-es2015-constants": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", - "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" - }, - "babel-plugin-syntax-async-generators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz", - "integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=" - }, - "babel-plugin-syntax-class-constructor-call": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz", - "integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=" - }, - "babel-plugin-syntax-class-properties": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", - "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=" - }, - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=" - }, - "babel-plugin-syntax-do-expressions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz", - "integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=" - }, - "babel-plugin-syntax-dynamic-import": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", - "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=" - }, - "babel-plugin-syntax-exponentiation-operator": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", - "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=" - }, - "babel-plugin-syntax-export-extensions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz", - "integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=" - }, - "babel-plugin-syntax-function-bind": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz", - "integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=" - }, - "babel-plugin-syntax-object-rest-spread": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", - "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=" - }, - "babel-plugin-syntax-trailing-function-commas": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" - }, - "babel-plugin-transform-async-generator-functions": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz", - "integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=", - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-generators": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "requires": { - "babel-helper-remap-async-to-generator": "6.24.1", - "babel-plugin-syntax-async-functions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-class-constructor-call": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz", - "integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=", - "requires": { - "babel-plugin-syntax-class-constructor-call": "6.18.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-class-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz", - "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=", - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-plugin-syntax-class-properties": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-decorators": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz", - "integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=", - "requires": { - "babel-helper-explode-class": "6.24.1", - "babel-plugin-syntax-decorators": "6.13.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-do-expressions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz", - "integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=", - "requires": { - "babel-plugin-syntax-do-expressions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-arrow-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", - "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoped-functions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", - "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-block-scoping": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", - "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "lodash": "4.17.10" - } - }, - "babel-plugin-transform-es2015-classes": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", - "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", - "requires": { - "babel-helper-define-map": "6.26.0", - "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.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-computed-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", - "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", - "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-destructuring": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", - "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-duplicate-keys": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", - "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-for-of": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", - "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-function-name": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", - "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", - "requires": { - "babel-helper-function-name": "6.24.1", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", - "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-amd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", - "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-commonjs": { - "version": "6.26.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", - "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", - "requires": { - "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": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", - "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", - "requires": { - "babel-helper-hoist-variables": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-modules-umd": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", - "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", - "requires": { - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" - } - }, - "babel-plugin-transform-es2015-object-super": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", - "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", - "requires": { - "babel-helper-replace-supers": "6.24.1", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-parameters": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", - "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", - "requires": { - "babel-helper-call-delegate": "6.24.1", - "babel-helper-get-function-arity": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-shorthand-properties": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", - "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-spread": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", - "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-sticky-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", - "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-plugin-transform-es2015-template-literals": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", - "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-typeof-symbol": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", - "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-es2015-unicode-regex": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", - "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", - "requires": { - "babel-helper-regex": "6.26.0", - "babel-runtime": "6.26.0", - "regexpu-core": "2.0.0" - } - }, - "babel-plugin-transform-exponentiation-operator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", - "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", - "requires": { - "babel-helper-builder-binary-assignment-operator-visitor": "6.24.1", - "babel-plugin-syntax-exponentiation-operator": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-export-extensions": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz", - "integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=", - "requires": { - "babel-plugin-syntax-export-extensions": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-function-bind": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz", - "integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=", - "requires": { - "babel-plugin-syntax-function-bind": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-object-assign": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", - "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-object-rest-spread": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", - "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", - "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "babel-runtime": "6.26.0" - } - }, - "babel-plugin-transform-regenerator": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", - "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", - "requires": { - "regenerator-transform": "0.10.1" - } - }, - "babel-plugin-transform-strict-mode": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", - "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" - } - }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "requires": { - "babel-plugin-check-es2015-constants": "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.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "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.24.1", - "babel-plugin-transform-regenerator": "6.26.0" - } - }, - "babel-preset-es2017": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2017/-/babel-preset-es2017-6.24.1.tgz", - "integrity": "sha1-WXvq37n38gi8/YoS6bKym4svFNE=", - "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1" - } - }, - "babel-preset-stage-1": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz", - "integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=", - "requires": { - "babel-plugin-transform-class-constructor-call": "6.24.1", - "babel-plugin-transform-export-extensions": "6.22.0", - "babel-preset-stage-2": "6.24.1" - } - }, - "babel-preset-stage-2": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz", - "integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=", - "requires": { - "babel-plugin-syntax-dynamic-import": "6.18.0", - "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators": "6.24.1", - "babel-preset-stage-3": "6.24.1" - } - }, - "babel-preset-stage-3": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz", - "integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=", - "requires": { - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-generator-functions": "6.24.1", - "babel-plugin-transform-async-to-generator": "6.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-object-rest-spread": "6.26.0" - } - }, - "babel-register": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", - "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", - "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.5.6", - "home-or-tmp": "2.0.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "2.5.6", - "regenerator-runtime": "0.11.1" - } - }, - "babel-template": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", - "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", - "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.10" - } - }, - "babel-traverse": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", - "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", - "requires": { - "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.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.10" - } - }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", - "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.10", - "to-fast-properties": "1.0.3" - } - }, - "babelify": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", - "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", - "requires": { - "babel-core": "6.26.3", - "object-assign": "4.1.1" - } - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "bignumber.js": { - "version": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2" - }, - "bindings": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.0.tgz", - "integrity": "sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw==" - }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", - "requires": { - "readable-stream": "2.3.6", - "safe-buffer": "5.1.2" - } - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", - "requires": { - "inherits": "2.0.3" - } - }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" - }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "1.6.16" - } - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "requires": { - "hoek": "4.2.1" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.1", - "evp_bytestokey": "1.0.3" - } - }, - "browserify-des": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.1.tgz", - "integrity": "sha512-zy0Cobe3hhgpiOM32Tj7KQ3Vl91m0njwsjzZQK1L+JDf11dzP9qIvjreVinsvXrgfjhStXwUWAEpB9D7Gwmayw==", - "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3" - } - }, - "browserify-rsa": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", - "requires": { - "bn.js": "4.11.8", - "randombytes": "2.0.6" - } - }, - "browserify-sha3": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/browserify-sha3/-/browserify-sha3-0.0.1.tgz", - "integrity": "sha1-P/NKMAbvFcD7NWflQbkaI0ASPRE=", - "requires": { - "js-sha3": "0.3.1" - } - }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.0", - "inherits": "2.0.3", - "parse-asn1": "5.1.1" - } - }, - "browserslist": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.7.tgz", - "integrity": "sha512-oYVLxFVqpX9uMhOIQBLtZL+CX4uY8ZpWcjNTaxyWl5rO8yA9SSNikFnAfvk8J3P/7z3BZwNmEqFKaJoYltj3MQ==", - "requires": { - "caniuse-lite": "1.0.30000843", - "electron-to-chromium": "1.3.47" - } - }, - "buffer": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.1.0.tgz", - "integrity": "sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw==", - "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.11" - } - }, - "buffer-alloc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.1.0.tgz", - "integrity": "sha1-BVFNM78WVtNUDGhPZbEgLpDsowM=", - "requires": { - "buffer-alloc-unsafe": "0.1.1", - "buffer-fill": "0.1.1" - } - }, - "buffer-alloc-unsafe": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-0.1.1.tgz", - "integrity": "sha1-/+H2dVHdBVc33iUzN7/oU9+rGmo=" - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" - }, - "buffer-fill": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-0.1.1.tgz", - "integrity": "sha512-YgBMBzdRLEfgxJIGu2wrvI2E03tMCFU1p7d1KhB4BOoMN0VxmTFjSyN5JtKt9z8Z9JajMHruI6SE25W96wNv7Q==" - }, - "buffer-from": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.0.0.tgz", - "integrity": "sha512-83apNb8KK0Se60UE1+4Ukbe3HbfELJ6UlI4ldtOGs7So4KD26orJM8hIY9lxdzP+UpItH1Yh/Y8GUvNFWFFRxA==" - }, - "buffer-to-arraybuffer": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz", - "integrity": "sha1-YGSkD6dutDxyOrqe+PbhIW0QURo=" - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "requires": { - "callsites": "0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" - }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", - "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" - } - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - }, - "caniuse-lite": { - "version": "1.0.30000843", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000843.tgz", - "integrity": "sha512-1ntiW826MhRBmM0CeI7w1cQr16gxwOoM8doJWh3BFalPZoKWdZXs27Bc04xth/3NR1/wNXn9cpP4F92lVenCvg==" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "change-case": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-3.0.2.tgz", - "integrity": "sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==", - "requires": { - "camel-case": "3.0.0", - "constant-case": "2.0.0", - "dot-case": "2.1.1", - "header-case": "1.0.1", - "is-lower-case": "1.1.3", - "is-upper-case": "1.1.2", - "lower-case": "1.1.4", - "lower-case-first": "1.0.2", - "no-case": "2.3.2", - "param-case": "2.1.1", - "pascal-case": "2.0.1", - "path-case": "2.1.1", - "sentence-case": "2.1.1", - "snake-case": "2.1.0", - "swap-case": "1.1.2", - "title-case": "2.1.1", - "upper-case": "1.1.3", - "upper-case-first": "1.1.2" - } - }, - "checkpoint-store": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/checkpoint-store/-/checkpoint-store-1.1.0.tgz", - "integrity": "sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY=", - "requires": { - "functional-red-black-tree": "1.0.1" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "requires": { - "restore-cursor": "1.0.1" - } - }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" - }, - "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - }, - "colors": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.5.tgz", - "integrity": "sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==" - }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "requires": { - "delayed-stream": "1.0.0" - } - }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "1.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" - } - }, - "constant-case": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/constant-case/-/constant-case-2.0.0.tgz", - "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=", - "requires": { - "snake-case": "2.1.0", - "upper-case": "1.1.3" - } - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", - "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=" - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "core-js": { - "version": "2.5.6", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.6.tgz", - "integrity": "sha512-lQUVfQi0aLix2xpyjrrJEvfuYCqPc/HwmTKsC/VNf8q0zsjX7SQZtp4+oRONN5Tsur9GDETPjj+Ub2iDiGZfSQ==" - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cors": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", - "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", - "requires": { - "object-assign": "4.1.1", - "vary": "1.1.2" - } - }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.4", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "requires": { - "nice-try": "1.0.4", - "path-key": "2.0.1", - "semver": "5.5.0", - "shebang-command": "1.2.0", - "which": "1.3.0" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" - } - } - }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "requires": { - "hoek": "4.2.1" - } - } - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.16", - "public-encrypt": "4.0.2", - "randombytes": "2.0.6", - "randomfill": "1.0.4" - } - }, - "crypto-js": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", - "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=" - }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "requires": { - "es5-ext": "0.10.42" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "1.0.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "debug-log": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=" - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" - }, - "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", - "requires": { - "decompress-tar": "4.1.1", - "decompress-tarbz2": "4.1.1", - "decompress-targz": "4.1.1", - "decompress-unzip": "4.0.1", - "graceful-fs": "4.1.11", - "make-dir": "1.3.0", - "pify": "2.3.0", - "strip-dirs": "2.1.0" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "1.0.0" - } - }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", - "requires": { - "file-type": "5.2.0", - "is-stream": "1.1.0", - "tar-stream": "1.6.1" - } - }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", - "requires": { - "decompress-tar": "4.1.1", - "file-type": "6.2.0", - "is-stream": "1.1.0", - "seek-bzip": "1.0.5", - "unbzip2-stream": "1.2.5" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==" - } - } - }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", - "requires": { - "decompress-tar": "4.1.1", - "file-type": "5.2.0", - "is-stream": "1.1.0" - } - }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "requires": { - "file-type": "3.9.0", - "get-stream": "2.3.1", - "pify": "2.3.0", - "yauzl": "2.9.1" - }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "requires": { - "object-assign": "4.1.1", - "pinkie-promise": "2.0.1" - } - } - } - }, - "deep-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "requires": { - "clone": "1.0.4" - } - }, - "deferred-leveldown": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz", - "integrity": "sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==", - "requires": { - "abstract-leveldown": "2.6.3" - } - }, - "define-properties": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.2.tgz", - "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", - "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" - } - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" - }, - "deglob": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.0.tgz", - "integrity": "sha1-TUSr4W7zLHebSXK9FBqAMlApoUo=", - "requires": { - "find-root": "1.1.0", - "glob": "7.1.2", - "ignore": "3.3.8", - "pkg-config": "1.1.1", - "run-parallel": "1.1.9", - "uniq": "1.0.1" - } - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.2" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "des.js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", - "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", - "requires": { - "repeating": "2.0.1" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.0.6" - } - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "requires": { - "esutils": "2.0.2" - } - }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" - }, - "dot-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-2.1.1.tgz", - "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=", - "requires": { - "no-case": "2.3.2" - } - }, - "drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", - "requires": { - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "create-hmac": "1.1.7" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "electron-to-chromium": { - "version": "1.3.47", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.47.tgz", - "integrity": "sha1-dk6IfKkQTQGgrI6r7n38DizhQQQ=" - }, - "elliptic": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", - "integrity": "sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8=", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "1.4.0" - } - }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "requires": { - "prr": "1.0.1" - } - }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "requires": { - "is-arrayish": "0.2.1" - } - }, - "es-abstract": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", - "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", - "requires": { - "es-to-primitive": "1.1.1", - "function-bind": "1.1.1", - "has": "1.0.1", - "is-callable": "1.1.3", - "is-regex": "1.0.4" - } - }, - "es-to-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", - "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", - "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" - } - }, - "es5-ext": { - "version": "0.10.42", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", - "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", - "requires": { - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "next-tick": "1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-symbol": "3.1.1" - } - }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-set": "0.1.5", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1", - "event-emitter": "0.3.5" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42" - } - }, - "es6-weak-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", - "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42", - "es6-iterator": "2.0.3", - "es6-symbol": "3.1.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "escope": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", - "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", - "requires": { - "es6-map": "0.1.5", - "es6-weak-map": "2.0.2", - "esrecurse": "4.2.1", - "estraverse": "4.2.0" - } - }, - "eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", - "requires": { - "babel-code-frame": "6.26.0", - "chalk": "1.1.3", - "concat-stream": "1.6.2", - "debug": "2.6.9", - "doctrine": "2.1.0", - "escope": "3.6.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.8", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.17.2", - "is-resolvable": "1.1.0", - "js-yaml": "3.11.0", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.7.8", - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - } - }, - "eslint-config-standard": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz", - "integrity": "sha1-wGHk0GbzedwXzVYsZOgZtN1FRZE=" - }, - "eslint-config-standard-jsx": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.2.tgz", - "integrity": "sha512-F8fRh2WFnTek7dZH9ZaE0PCBwdVGkwVWZmizla/DDNOmg7Tx6B/IlK5+oYpiX29jpu73LszeJj5i1axEZv6VMw==" - }, - "eslint-import-resolver-node": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", - "integrity": "sha1-Wt2BBujJKNssuiMrzZ76hG49oWw=", - "requires": { - "debug": "2.6.9", - "object-assign": "4.1.1", - "resolve": "1.7.1" - } - }, - "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", - "requires": { - "debug": "2.6.9", - "pkg-dir": "1.0.0" - } - }, - "eslint-plugin-import": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz", - "integrity": "sha1-crowb60wXWfEgWNIpGmaQimsi04=", - "requires": { - "builtin-modules": "1.1.1", - "contains-path": "0.1.0", - "debug": "2.6.9", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.2.3", - "eslint-module-utils": "2.2.0", - "has": "1.0.1", - "lodash.cond": "4.5.2", - "minimatch": "3.0.4", - "pkg-up": "1.0.0" - }, - "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - } - } - }, - "eslint-plugin-node": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-4.2.3.tgz", - "integrity": "sha512-vIUQPuwbVYdz/CYnlTLsJrRy7iXHQjdEe5wz0XhhdTym3IInM/zZLlPf9nZ2mThsH0QcsieCOWs2vOeCy/22LQ==", - "requires": { - "ignore": "3.3.8", - "minimatch": "3.0.4", - "object-assign": "4.1.1", - "resolve": "1.7.1", - "semver": "5.3.0" - } - }, - "eslint-plugin-promise": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz", - "integrity": "sha1-ePu2/+BHIBYnVp6FpsU3OvKmj8o=" - }, - "eslint-plugin-react": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz", - "integrity": "sha1-xUNb6wZ3ThLH2y9qut3L+QDNP3g=", - "requires": { - "array.prototype.find": "2.0.4", - "doctrine": "1.5.0", - "has": "1.0.1", - "jsx-ast-utils": "1.4.1", - "object.assign": "4.1.0" - }, - "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - } - } - }, - "eslint-plugin-standard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz", - "integrity": "sha1-NNDJFbRe3G8BA5PH7vOCOwhWXPI=" - }, - "espree": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", - "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", - "requires": { - "acorn": "5.5.3", - "acorn-jsx": "3.0.1" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "requires": { - "estraverse": "4.2.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "eth-lib": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.1.27.tgz", - "integrity": "sha512-B8czsfkJYzn2UIEMwjc7Mbj+Cy72V+/OXH/tb44LV8jhrjizQJJ325xMOMyk3+ETa6r6oi0jsUY14+om8mQMWA==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0", - "keccakjs": "0.2.1", - "nano-json-stream-parser": "0.1.2", - "servify": "0.1.12", - "ws": "3.3.3", - "xhr-request-promise": "0.1.2" - } - }, - "ethereum-common": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.2.0.tgz", - "integrity": "sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==" - }, - "ethereumjs-account": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/ethereumjs-account/-/ethereumjs-account-2.0.5.tgz", - "integrity": "sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==", - "requires": { - "ethereumjs-util": "5.2.0", - "rlp": "2.0.0", - "safe-buffer": "5.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.4", - "keccak": "1.4.0", - "rlp": "2.0.0", - "safe-buffer": "5.1.2", - "secp256k1": "3.5.0" - } - } - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "requires": { - "async": "2.6.0", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "1.3.4", - "ethereumjs-util": "5.2.0", - "merkle-patricia-tree": "2.3.1" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.4", - "keccak": "1.4.0", - "rlp": "2.0.0", - "safe-buffer": "5.1.2", - "secp256k1": "3.5.0" - } - } - } - }, - "ethereumjs-tx": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.4.tgz", - "integrity": "sha512-kOgUd5jC+0tgV7t52UDECMMz9Uf+Lro+6fSpCvzWemtXfMEcwI3EOxf5mVPMRbTFkMMhuERokNNVF3jItAjidg==", - "requires": { - "ethereum-common": "0.0.18", - "ethereumjs-util": "5.2.0" - }, - "dependencies": { - "ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" - }, - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.4", - "keccak": "1.4.0", - "rlp": "2.0.0", - "safe-buffer": "5.1.2", - "secp256k1": "3.5.0" - } - } - } - }, - "ethereumjs-util": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-4.5.0.tgz", - "integrity": "sha1-PpQosxfuvaPXJg2FT93alUsfG8Y=", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "keccakjs": "0.2.1", - "rlp": "2.0.0", - "secp256k1": "3.5.0" - } - }, - "ethereumjs-vm": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.3.5.tgz", - "integrity": "sha512-AJ7x44+xqyE5+UO3Nns19WkTdZfyqFZ+sEjIEpvme7Ipbe3iBU1uwCcHEdiu/yY9bdhr3IfSa/NfIKNeXPaRVQ==", - "requires": { - "async": "2.6.0", - "async-eventemitter": "0.2.4", - "ethereum-common": "0.2.0", - "ethereumjs-account": "2.0.5", - "ethereumjs-block": "1.7.1", - "ethereumjs-util": "5.2.0", - "fake-merkle-patricia-tree": "1.0.1", - "functional-red-black-tree": "1.0.1", - "merkle-patricia-tree": "2.3.1", - "rustbn.js": "0.1.2", - "safe-buffer": "5.1.2" - }, - "dependencies": { - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.4", - "keccak": "1.4.0", - "rlp": "2.0.0", - "safe-buffer": "5.1.2", - "secp256k1": "3.5.0" - } - } - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha1-xmWSHkduh7ziqdWIpv4EBbLEFpk=", - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "ethjs-util": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.4.tgz", - "integrity": "sha1-HItoeSV0RO9NPz+7rC3tEs2ZfZM=", - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1.0.0", - "es5-ext": "0.10.42" - } - }, - "event-stream": { - "version": "3.3.4", - "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", - "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", - "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" - } - }, - "eventemitter3": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-1.1.1.tgz", - "integrity": "sha1-R3hr2qCHyvext15zq8XH1UAVjNA=" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "1.3.4", - "safe-buffer": "5.1.2" - } - }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" - }, - "express": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", - "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", - "requires": { - "accepts": "1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.2", - "content-disposition": "0.5.2", - "content-type": "1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", - "qs": "6.5.1", - "range-parser": "1.2.0", - "safe-buffer": "5.1.1", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", - "utils-merge": "1.0.1", - "vary": "1.1.2" - }, - "dependencies": { - "body-parser": { - "version": "1.18.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", - "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", - "requires": { - "bytes": "3.0.0", - "content-type": "1.0.4", - "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.3", - "iconv-lite": "0.4.19", - "on-finished": "2.3.0", - "qs": "6.5.1", - "raw-body": "2.3.2", - "type-is": "1.6.16" - } - }, - "iconv-lite": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" - }, - "raw-body": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", - "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.2", - "iconv-lite": "0.4.19", - "unpipe": "1.0.0" - }, - "dependencies": { - "depd": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", - "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" - }, - "http-errors": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", - "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", - "requires": { - "depd": "1.1.1", - "inherits": "2.0.3", - "setprototypeof": "1.0.3", - "statuses": "1.4.0" - } - }, - "setprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", - "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" - } - } - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fake-merkle-patricia-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz", - "integrity": "sha1-S4w6z7Ugr635hgsfFM2M40As3dM=", - "requires": { - "checkpoint-store": "1.1.0" - } - }, - "fast-async": { - "version": "6.3.7", - "resolved": "https://registry.npmjs.org/fast-async/-/fast-async-6.3.7.tgz", - "integrity": "sha512-sF8kZ9Qv1dkg2zcYaYhMY0tS/Qbr1mqciIr2QEaiWI1RrF2udOZ7baXl/FOLoiMx5U3iFLuwNpW0QNQvox3Rmw==", - "requires": { - "nodent-compiler": "3.2.6", - "nodent-runtime": "3.2.1" - } - }, - "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "requires": { - "pend": "1.2.0" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=" - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" - } - }, - "flat-cache": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", - "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", - "requires": { - "circular-json": "0.3.3", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, - "for-each": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.2.tgz", - "integrity": "sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=", - "requires": { - "is-function": "1.0.1" - } - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", - "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=" - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-2.1.2.tgz", - "integrity": "sha1-BGxwFjzvmq1GsOSn+kZ/si1x3jU=", - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0" - } - }, - "fs-promise": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/fs-promise/-/fs-promise-2.0.3.tgz", - "integrity": "sha1-9k5PhUvPaJqovdy6JokW2z20aFQ=", - "requires": { - "any-promise": "1.3.0", - "fs-extra": "2.1.2", - "mz": "2.7.0", - "thenify-all": "1.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "requires": { - "graceful-fs": "4.1.11", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, - "generate-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz", - "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=" - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "requires": { - "is-property": "1.0.2" - } - }, - "get-caller-file": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" - }, - "get-stdin": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz", - "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=" - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "1.0.0" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "requires": { - "min-document": "2.19.0", - "process": "0.5.2" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "got": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/got/-/got-7.1.0.tgz", - "integrity": "sha512-Y5WMo7xKKq1muPsxD+KmrR8DH5auG7fBdDVueZwETwV6VytKyU9OX/ddpq2/1hp1vIPvVb4T81dKQz3BivkNLw==", - "requires": { - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "is-plain-obj": "1.1.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.1", - "p-cancelable": "0.3.0", - "p-timeout": "1.2.1", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "url-parse-lax": "1.0.0", - "url-to-options": "1.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" - }, - "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha512-hKlsbA5Vu3xsh1Cg3J7jSmX/WaW6A5oBeqzM88oNbCRQFz+zUaXm6yxS4RVytp1scBoJzSYl4YAEOQIt6O8V1Q==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "requires": { - "ajv": "5.5.2", - "har-schema": "2.0.0" - }, - "dependencies": { - "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" - } - } - } - }, - "has": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", - "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", - "requires": { - "function-bind": "1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" - }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", - "requires": { - "has-symbol-support-x": "1.4.2" - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "hash.js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.3.tgz", - "integrity": "sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==", - "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" - } - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.1", - "sntp": "2.1.0" - } - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - }, - "header-case": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/header-case/-/header-case-1.0.1.tgz", - "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=", - "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "1.1.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" - } - }, - "hoek": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", - "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==" - }, - "home-or-tmp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", - "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": "1.5.0" - } - }, - "http-https": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz", - "integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs=" - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" - } - }, - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ieee754": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.11.tgz", - "integrity": "sha512-VhDzCKN7K8ufStx/CLj5/PDTMgph+qwN5Pkd5i0sGnVwk56zJ0lkT8Qzi1xqWLS0Wp29DgDtNeS7v8/wMoZeHg==" - }, - "ignore": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", - "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==" - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw=" - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.1.1", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "figures": "1.7.0", - "lodash": "4.17.10", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - } - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "1.3.1" - } - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" - }, - "ipaddr.js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", - "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "1.1.1" - } - }, - "is-callable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.3.tgz", - "integrity": "sha1-hut1OSgF3cM69xySoO7fdO52BLI=" - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "1.0.1" - } - }, - "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha1-fY035q135dEnFIkTxXPggtd39VQ=" - }, - "is-lower-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-lower-case/-/is-lower-case-1.1.3.tgz", - "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=", - "requires": { - "lower-case": "1.1.4" - } - }, - "is-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==" - }, - "is-my-json-valid": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz", - "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", - "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" - } - }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" - }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", - "requires": { - "is-path-inside": "1.0.1" - } - }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=" - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "requires": { - "has": "1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" - }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=" - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-symbol": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", - "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-upper-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-upper-case/-/is-upper-case-1.1.2.tgz", - "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=", - "requires": { - "upper-case": "1.1.3" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" - } - }, - "js-sha3": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", - "integrity": "sha1-hhIoAhQvCChQKg0d7h2V4lO7AkM=" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "js-yaml": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", - "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "optional": true - }, - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", - "requires": { - "graceful-fs": "4.1.11" - } - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=" - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jsx-ast-utils": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", - "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=" - }, - "keccak": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-1.4.0.tgz", - "integrity": "sha512-eZVaCpblK5formjPjeTBik7TAg+pqnDrMHIffSvi9Lh7PQgM1+hSzakUeZFCk9DVVG0dacZJuaz2ntwlzZUIBw==", - "requires": { - "bindings": "1.3.0", - "inherits": "2.0.3", - "nan": "2.10.0", - "safe-buffer": "5.1.2" - } - }, - "keccakjs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/keccakjs/-/keccakjs-0.2.1.tgz", - "integrity": "sha1-HWM6+QfvMFu/ny+mFtVsRFYd+k0=", - "requires": { - "browserify-sha3": "0.0.1", - "sha3": "1.2.2" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", - "requires": { - "graceful-fs": "4.1.11" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "requires": { - "invert-kv": "1.0.0" - } - }, - "level-codec": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-7.0.1.tgz", - "integrity": "sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==" - }, - "level-errors": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-1.0.5.tgz", - "integrity": "sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==", - "requires": { - "errno": "0.1.7" - } - }, - "level-iterator-stream": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz", - "integrity": "sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0=", - "requires": { - "inherits": "2.0.3", - "level-errors": "1.0.5", - "readable-stream": "1.1.14", - "xtend": "4.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "level-ws": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-0.0.0.tgz", - "integrity": "sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos=", - "requires": { - "readable-stream": "1.0.34", - "xtend": "2.1.2" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "object-keys": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", - "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=" - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "xtend": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", - "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", - "requires": { - "object-keys": "0.4.0" - } - } - } - }, - "levelup": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-1.3.9.tgz", - "integrity": "sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==", - "requires": { - "deferred-leveldown": "1.2.2", - "level-codec": "7.0.1", - "level-errors": "1.0.5", - "level-iterator-stream": "1.3.1", - "prr": "1.0.1", - "semver": "5.4.1", - "xtend": "4.0.1" - }, - "dependencies": { - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" - } - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" - } - } - }, - "lodash": { - "version": "4.17.10", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", - "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" - }, - "lodash.cond": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.cond/-/lodash.cond-4.5.2.tgz", - "integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=" - }, - "loose-envify": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "requires": { - "js-tokens": "3.0.2" - } - }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" - }, - "lower-case-first": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/lower-case-first/-/lower-case-first-1.0.2.tgz", - "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=", - "requires": { - "lower-case": "1.1.4" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha1-81ypHEk/e3PaDgdJUwTxezH4fuU=" - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "requires": { - "pify": "3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=" - }, - "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "memdown": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-1.4.1.tgz", - "integrity": "sha1-tOThkhdGZP+65BNhqlAPMRnv4hU=", - "requires": { - "abstract-leveldown": "2.7.2", - "functional-red-black-tree": "1.0.1", - "immediate": "3.2.3", - "inherits": "2.0.3", - "ltgt": "2.2.1", - "safe-buffer": "5.1.2" - }, - "dependencies": { - "abstract-leveldown": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz", - "integrity": "sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==", - "requires": { - "xtend": "4.0.1" - } - } - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" - }, - "merge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.0.tgz", - "integrity": "sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "merkle-patricia-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-2.3.1.tgz", - "integrity": "sha512-Qp9Mpb3xazznXzzGQBqHbqCpT2AR9joUOHYYPiQjYCarrdCPCnLWXo4BFv77y4xN26KR224xoU1n/qYY7RYYgw==", - "requires": { - "async": "1.5.2", - "ethereumjs-util": "5.2.0", - "level-ws": "0.0.0", - "levelup": "1.3.9", - "memdown": "1.4.1", - "readable-stream": "2.3.6", - "rlp": "2.0.0", - "semaphore": "1.1.0" - }, - "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.4", - "keccak": "1.4.0", - "rlp": "2.0.0", - "safe-buffer": "5.1.2", - "secp256k1": "3.5.0" - } - } - } - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" - } - }, - "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" - }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "1.33.0" - } - }, - "mimic-response": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", - "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "0.1.1" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "mkdirp-promise": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz", - "integrity": "sha1-6bj2jlUsaKnBcTuEiD96HdA5uKE=", - "requires": { - "mkdirp": "0.5.1" - } - }, - "mocha": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz", - "integrity": "sha512-kKKs/H1KrMMQIEsWNxGmb4/BGsmj0dkeyotEvbrAuQ01FcWRLssUNXCEUZk6SZtyJBi6EE7SL0zDDtItw1rGhw==", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" - }, - "dependencies": { - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - } - } - }, - "mock-fs": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.5.0.tgz", - "integrity": "sha512-qqudNfOX7ZmX9vm1WIAU+gWlmxVNAnwY6UG3RkFutNywmRCUGP83tujP6IxX2DS1TmcaEZBOhYwDuYEmJYE+3w==" - }, - "mout": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/mout/-/mout-0.11.1.tgz", - "integrity": "sha1-ujYR318OWx/7/QEWa48C0fX6K5k=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multiline": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz", - "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=", - "requires": { - "strip-indent": "1.0.1" - } - }, - "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=" - }, - "mz": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", - "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", - "requires": { - "any-promise": "1.3.0", - "object-assign": "4.1.1", - "thenify-all": "1.6.0" - } - }, - "nan": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - }, - "nano-json-stream-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz", - "integrity": "sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18=" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "negotiator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", - "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "nice-try": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", - "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==" - }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", - "requires": { - "lower-case": "1.1.4" - } - }, - "nodent-compiler": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/nodent-compiler/-/nodent-compiler-3.2.6.tgz", - "integrity": "sha512-6Zu15pXyMZgWUCp1xZMb+iUexFAUnixeAn3x4U+mqLAnOskWq8/fiBG03vn/pbHl9ZS61LTWSbYtHRzNkZS8ow==", - "requires": { - "acorn": "5.5.3", - "acorn-es7-plugin": "1.1.7", - "nodent-transform": "3.2.6", - "source-map": "0.5.7" - } - }, - "nodent-runtime": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/nodent-runtime/-/nodent-runtime-3.2.1.tgz", - "integrity": "sha512-7Ws63oC+215smeKJQCxzrK21VFVlCFBkwl0MOObt0HOpVQXs3u483sAmtkF33nNqZ5rSOQjB76fgyPBmAUrtCA==" - }, - "nodent-transform": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/nodent-transform/-/nodent-transform-3.2.6.tgz", - "integrity": "sha512-CMa5JFCWhfv6SbG7GPNwxww9dyZuxHdC1vzGELodIPIklecH5FJzvB/gS5jb62jAnNqeQWPEoPY7AJcxvzmz2A==" - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "5.3.0", - "validate-npm-package-license": "3.0.3" - } - }, - "npm-run-all": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.3.tgz", - "integrity": "sha512-aOG0N3Eo/WW+q6sUIdzcV2COS8VnTZCmdji0VQIAZF3b+a3YWb0AD0vFIyjKec18A7beLGbaQ5jFTNI2bPt9Cg==", - "requires": { - "ansi-styles": "3.2.1", - "chalk": "2.4.1", - "cross-spawn": "6.0.5", - "memorystream": "0.3.1", - "minimatch": "3.0.4", - "ps-tree": "1.1.0", - "read-pkg": "3.0.0", - "shell-quote": "1.6.1", - "string.prototype.padend": "3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "1.9.1" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.4.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "requires": { - "pify": "3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" - } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "3.0.0" - } - } - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha1-uzYjWS9+X54AMLGXe9QaDFP+HqA=", - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-inspect": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.5.0.tgz", - "integrity": "sha512-UmOFbHbwvv+XHj7BerrhVq+knjceBdkvU5AriwLMvhv2qi+e7DJzxfBeFpILEjVzCp+xA+W/pIf06RGPWlZNfw==" - }, - "object-keys": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz", - "integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=" - }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "requires": { - "define-properties": "1.1.2", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.0.11" - } - }, - "oboe": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.3.tgz", - "integrity": "sha1-K0hl29Rr6BIlcT9Om/5Lz09oCk8=", - "requires": { - "http-https": "1.0.0" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1.0.2" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "requires": { - "lcid": "1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-limit": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", - "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", - "requires": { - "p-try": "1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "requires": { - "p-limit": "1.2.0" - } - }, - "p-timeout": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", - "integrity": "sha1-XrOzU7f86Z8QGhA4iAuwVOu+o4Y=", - "requires": { - "p-finally": "1.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", - "requires": { - "no-case": "2.3.2" - } - }, - "parse-asn1": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", - "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", - "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.16" - } - }, - "parse-headers": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz", - "integrity": "sha1-aug6eqJanZtwCswoaYzR8e1+lTY=", - "requires": { - "for-each": "0.3.2", - "trim": "0.0.1" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.2" - } - }, - "parseurl": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", - "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" - }, - "pascal-case": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-2.0.1.tgz", - "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=", - "requires": { - "camel-case": "3.0.0", - "upper-case-first": "1.1.2" - } - }, - "path-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/path-case/-/path-case-2.1.1.tgz", - "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=", - "requires": { - "no-case": "2.3.2" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "requires": { - "pinkie-promise": "2.0.1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", - "requires": { - "through": "2.3.8" - } - }, - "pbkdf2": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", - "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", - "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { - "pinkie": "2.0.4" - } - }, - "pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", - "requires": { - "find-up": "2.1.0", - "load-json-file": "4.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "requires": { - "locate-path": "2.0.0" - } - } - } - }, - "pkg-config": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", - "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=", - "requires": { - "debug-log": "1.0.1", - "find-root": "1.1.0", - "xtend": "4.0.1" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "requires": { - "find-up": "1.1.2" - } - }, - "pkg-up": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-1.0.0.tgz", - "integrity": "sha1-Pgj7RhUlxEIWJKM7n35tCvWwWiY=", - "requires": { - "find-up": "1.1.2" - } - }, - "pluralize": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz", - "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=" - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==" - }, - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=" - }, - "proxy-addr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", - "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", - "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.6.0" - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" - }, - "ps-tree": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", - "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", - "requires": { - "event-stream": "3.3.4" - } - }, - "public-encrypt": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", - "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.1", - "randombytes": "2.0.6" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", - "requires": { - "decode-uri-component": "0.2.0", - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" - } - }, - "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "requires": { - "randombytes": "2.0.6", - "safe-buffer": "5.1.2" - } - }, - "randomhex": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/randomhex/-/randomhex-0.1.5.tgz", - "integrity": "sha1-us7vmCMpCRQA8qKRLGzQLxCU9YU=" - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" - }, - "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", - "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", - "unpipe": "1.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - }, - "dependencies": { - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "1.3.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "requires": { - "is-utf8": "0.2.1" - } - } - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { - "resolve": "1.7.1" - } - }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - }, - "regenerator-transform": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", - "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", - "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "private": "0.1.8" - } - }, - "regexpu-core": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", - "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", - "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=" - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "requires": { - "jsesc": "0.5.0" - } - }, - "remix-core": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/remix-core/-/remix-core-0.0.11.tgz", - "integrity": "sha512-aFgQv9aSIr4NLgk4cJXmCLUL4pyRNw7ERrkvFOTF4T760ex+eHTS/ytj70w6SVtVpwD+eUy0dncelwtuPeFe4w==", - "requires": { - "babel-eslint": "7.2.3", - "babel-plugin-transform-object-assign": "6.22.0", - "babel-preset-es2015": "6.24.1", - "babelify": "7.3.0", - "fast-async": "6.3.7", - "remix-lib": "0.2.5", - "standard": "7.1.2", - "tape": "4.9.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" - }, - "deglob": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", - "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=", - "requires": { - "find-root": "1.1.0", - "glob": "7.1.2", - "ignore": "3.3.8", - "pkg-config": "1.1.1", - "run-parallel": "1.1.9", - "uniq": "1.0.1", - "xtend": "4.0.1" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "eslint": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.10.2.tgz", - "integrity": "sha1-sjCUgv7wQ9MgM2WjIShebM4Bw9c=", - "requires": { - "chalk": "1.1.3", - "concat-stream": "1.6.2", - "debug": "2.6.9", - "doctrine": "1.5.0", - "es6-map": "0.1.5", - "escope": "3.6.0", - "espree": "3.1.4", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "1.3.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.8", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.17.2", - "is-resolvable": "1.1.0", - "js-yaml": "3.11.0", - "json-stable-stringify": "1.0.1", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "optionator": "0.8.2", - "path-is-absolute": "1.0.1", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.6.1", - "strip-json-comments": "1.0.4", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - } - }, - "eslint-config-standard": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz", - "integrity": "sha1-WRyWkVF0QTL1YdO5FagS6kE/5JA=" - }, - "eslint-config-standard-jsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.1.tgz", - "integrity": "sha1-DRmxcF8K1INj7yqLv6cd8BLZibM=" - }, - "eslint-plugin-promise": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz", - "integrity": "sha1-/OMy1vX/UjIApTdwSGPsPCQiunw=" - }, - "eslint-plugin-react": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz", - "integrity": "sha1-fbBo4fVIf2hx5N7vNqOBwwPqwWE=", - "requires": { - "doctrine": "1.5.0", - "jsx-ast-utils": "1.4.1" - } - }, - "eslint-plugin-standard": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", - "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=" - }, - "espree": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.4.tgz", - "integrity": "sha1-BybXrIOvl6fISY2ps2OjYJ0qaKE=", - "requires": { - "acorn": "3.3.0", - "acorn-jsx": "3.0.1" - } - }, - "file-entry-cache": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", - "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "shelljs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=" - }, - "standard": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/standard/-/standard-7.1.2.tgz", - "integrity": "sha1-QBZu7sJAUGXRpPDj8VurxuJ0YH4=", - "requires": { - "eslint": "2.10.2", - "eslint-config-standard": "5.3.1", - "eslint-config-standard-jsx": "1.2.1", - "eslint-plugin-promise": "1.3.2", - "eslint-plugin-react": "5.2.2", - "eslint-plugin-standard": "1.3.3", - "standard-engine": "4.1.3" - } - }, - "standard-engine": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-4.1.3.tgz", - "integrity": "sha1-ejGq1U8D2fOTVfQzic4GlPQJQVU=", - "requires": { - "defaults": "1.0.3", - "deglob": "1.1.2", - "find-root": "1.1.0", - "get-stdin": "5.0.1", - "minimist": "1.2.0", - "multiline": "1.0.2", - "pkg-config": "1.1.1", - "xtend": "4.0.1" - } - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" - } - } - }, - "remix-lib": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/remix-lib/-/remix-lib-0.2.5.tgz", - "integrity": "sha512-13JJPV/JNJEdR9TVNUWrNNHU5u+lUAJSPzKzBurXTAB3ZbfLj5PB3NSNWiP3/3+a7Va15jGQc6/2tc2KNlNN8Q==", - "requires": { - "async": "2.6.0", - "babel-eslint": "7.2.3", - "babel-plugin-transform-object-assign": "6.22.0", - "babel-preset-env": "1.7.0", - "babel-preset-es2015": "6.24.1", - "babel-preset-stage-0": "6.24.1", - "babelify": "7.3.0", - "ethereumjs-block": "1.7.1", - "ethereumjs-tx": "1.3.4", - "ethereumjs-util": "5.2.0", - "ethereumjs-vm": "2.3.5", - "ethers": "3.0.17", - "fast-async": "6.3.7", - "solc": "0.4.24", - "standard": "7.1.2", - "tape": "4.9.0", - "web3": "0.18.4" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" - }, - "babel-eslint": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", - "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", - "requires": { - "babel-code-frame": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0" - } - }, - "babel-plugin-transform-object-assign": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-assign/-/babel-plugin-transform-object-assign-6.22.0.tgz", - "integrity": "sha1-+Z0vZvGgsNSY40bFNZaEdAyqILo=", - "requires": { - "babel-runtime": "6.26.0" - } - }, - "babel-preset-env": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", - "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", - "requires": { - "babel-plugin-check-es2015-constants": "6.22.0", - "babel-plugin-syntax-trailing-function-commas": "6.22.0", - "babel-plugin-transform-async-to-generator": "6.24.1", - "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.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "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.24.1", - "babel-plugin-transform-exponentiation-operator": "6.24.1", - "babel-plugin-transform-regenerator": "6.26.0", - "browserslist": "3.2.7", - "invariant": "2.2.4", - "semver": "5.3.0" - } - }, - "babel-preset-es2015": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz", - "integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=", - "requires": { - "babel-plugin-check-es2015-constants": "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.26.0", - "babel-plugin-transform-es2015-classes": "6.24.1", - "babel-plugin-transform-es2015-computed-properties": "6.24.1", - "babel-plugin-transform-es2015-destructuring": "6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "6.24.1", - "babel-plugin-transform-es2015-for-of": "6.23.0", - "babel-plugin-transform-es2015-function-name": "6.24.1", - "babel-plugin-transform-es2015-literals": "6.22.0", - "babel-plugin-transform-es2015-modules-amd": "6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "6.24.1", - "babel-plugin-transform-es2015-modules-umd": "6.24.1", - "babel-plugin-transform-es2015-object-super": "6.24.1", - "babel-plugin-transform-es2015-parameters": "6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "6.24.1", - "babel-plugin-transform-es2015-spread": "6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "6.24.1", - "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.24.1", - "babel-plugin-transform-regenerator": "6.26.0" - } - }, - "babel-preset-stage-0": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz", - "integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=", - "requires": { - "babel-plugin-transform-do-expressions": "6.22.0", - "babel-plugin-transform-function-bind": "6.22.0", - "babel-preset-stage-1": "6.24.1" - } - }, - "babelify": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/babelify/-/babelify-7.3.0.tgz", - "integrity": "sha1-qlau3nBn/XvVSWZu4W3ChQh+iOU=", - "requires": { - "babel-core": "6.26.3", - "object-assign": "4.1.1" - } - }, - "deglob": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", - "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=", - "requires": { - "find-root": "1.1.0", - "glob": "7.1.2", - "ignore": "3.3.8", - "pkg-config": "1.1.1", - "run-parallel": "1.1.9", - "uniq": "1.0.1", - "xtend": "4.0.1" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "elliptic": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz", - "integrity": "sha1-VILZZG1UvLif19mU/J4ulWiHbj8=", - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.3", - "inherits": "2.0.1" - } - }, - "eslint": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.10.2.tgz", - "integrity": "sha1-sjCUgv7wQ9MgM2WjIShebM4Bw9c=", - "requires": { - "chalk": "1.1.3", - "concat-stream": "1.6.2", - "debug": "2.6.9", - "doctrine": "1.5.0", - "es6-map": "0.1.5", - "escope": "3.6.0", - "espree": "3.1.4", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "1.3.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.8", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.17.2", - "is-resolvable": "1.1.0", - "js-yaml": "3.11.0", - "json-stable-stringify": "1.0.1", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "optionator": "0.8.2", - "path-is-absolute": "1.0.1", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.6.1", - "strip-json-comments": "1.0.4", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - } - }, - "eslint-config-standard": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz", - "integrity": "sha1-WRyWkVF0QTL1YdO5FagS6kE/5JA=" - }, - "eslint-config-standard-jsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.1.tgz", - "integrity": "sha1-DRmxcF8K1INj7yqLv6cd8BLZibM=" - }, - "eslint-plugin-promise": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz", - "integrity": "sha1-/OMy1vX/UjIApTdwSGPsPCQiunw=" - }, - "eslint-plugin-react": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz", - "integrity": "sha1-fbBo4fVIf2hx5N7vNqOBwwPqwWE=", - "requires": { - "doctrine": "1.5.0", - "jsx-ast-utils": "1.4.1" - } - }, - "eslint-plugin-standard": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", - "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=" - }, - "espree": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.4.tgz", - "integrity": "sha1-BybXrIOvl6fISY2ps2OjYJ0qaKE=", - "requires": { - "acorn": "3.3.0", - "acorn-jsx": "3.0.1" - } - }, - "ethereumjs-block": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/ethereumjs-block/-/ethereumjs-block-1.7.1.tgz", - "integrity": "sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==", - "requires": { - "async": "2.6.0", - "ethereum-common": "0.2.0", - "ethereumjs-tx": "1.3.4", - "ethereumjs-util": "5.2.0", - "merkle-patricia-tree": "2.3.1" - } - }, - "ethereumjs-tx": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-1.3.4.tgz", - "integrity": "sha512-kOgUd5jC+0tgV7t52UDECMMz9Uf+Lro+6fSpCvzWemtXfMEcwI3EOxf5mVPMRbTFkMMhuERokNNVF3jItAjidg==", - "requires": { - "ethereum-common": "0.0.18", - "ethereumjs-util": "5.2.0" - }, - "dependencies": { - "ethereum-common": { - "version": "0.0.18", - "resolved": "https://registry.npmjs.org/ethereum-common/-/ethereum-common-0.0.18.tgz", - "integrity": "sha1-L9w1dvIykDNYl26znaeDIT/5Uj8=" - } - } - }, - "ethereumjs-util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-5.2.0.tgz", - "integrity": "sha512-CJAKdI0wgMbQFLlLRtZKGcy/L6pzVRgelIZqRqNbuVFM3K9VEnyfbcvz0ncWMRNCe4kaHWjwRYQcYMucmwsnWA==", - "requires": { - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "ethjs-util": "0.1.4", - "keccak": "1.4.0", - "rlp": "2.0.0", - "safe-buffer": "5.1.2", - "secp256k1": "3.5.0" - } - }, - "ethereumjs-vm": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/ethereumjs-vm/-/ethereumjs-vm-2.3.5.tgz", - "integrity": "sha512-AJ7x44+xqyE5+UO3Nns19WkTdZfyqFZ+sEjIEpvme7Ipbe3iBU1uwCcHEdiu/yY9bdhr3IfSa/NfIKNeXPaRVQ==", - "requires": { - "async": "2.6.0", - "async-eventemitter": "0.2.4", - "ethereum-common": "0.2.0", - "ethereumjs-account": "2.0.5", - "ethereumjs-block": "1.7.1", - "ethereumjs-util": "5.2.0", - "fake-merkle-patricia-tree": "1.0.1", - "functional-red-black-tree": "1.0.1", - "merkle-patricia-tree": "2.3.1", - "rustbn.js": "0.1.2", - "safe-buffer": "5.1.2" - } - }, - "ethers": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-3.0.17.tgz", - "integrity": "sha512-aIhNY2xlONbSRvBTA9TKYgPGocUGlPKNy/6weV0URweEtHWVHgVARTVdhw345UZ56T0j7FMnT7wQaUO7v/o1iQ==", - "requires": { - "aes-js": "3.0.0", - "bn.js": "4.11.8", - "elliptic": "6.3.3", - "hash.js": "1.1.3", - "inherits": "2.0.1", - "js-sha3": "0.5.7", - "scrypt-js": "2.0.3", - "setimmediate": "1.0.4", - "uuid": "2.0.1", - "xmlhttprequest": "1.8.0" - } - }, - "fast-async": { - "version": "6.3.7", - "resolved": "https://registry.npmjs.org/fast-async/-/fast-async-6.3.7.tgz", - "integrity": "sha512-sF8kZ9Qv1dkg2zcYaYhMY0tS/Qbr1mqciIr2QEaiWI1RrF2udOZ7baXl/FOLoiMx5U3iFLuwNpW0QNQvox3Rmw==", - "requires": { - "nodent-compiler": "3.2.6", - "nodent-runtime": "3.2.1" - } - }, - "file-entry-cache": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", - "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" - } - }, - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" - }, - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha1-DU/9gALVMzqrr0oj7tL2N0yfKOc=" - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", - "requires": { - "path-parse": "1.0.5" - } - }, - "setimmediate": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.4.tgz", - "integrity": "sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48=" - }, - "shelljs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=" - }, - "solc": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.24.tgz", - "integrity": "sha512-2xd7Cf1HeVwrIb6Bu1cwY2/TaLRodrppCq3l7rhLimFQgmxptXhTC3+/wesVLpB09F1A2kZgvbMOgH7wvhFnBQ==", - "requires": { - "fs-extra": "0.30.0", - "memorystream": "0.3.1", - "require-from-string": "1.2.1", - "semver": "5.3.0", - "yargs": "4.8.1" - } - }, - "standard": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/standard/-/standard-7.1.2.tgz", - "integrity": "sha1-QBZu7sJAUGXRpPDj8VurxuJ0YH4=", - "requires": { - "eslint": "2.10.2", - "eslint-config-standard": "5.3.1", - "eslint-config-standard-jsx": "1.2.1", - "eslint-plugin-promise": "1.3.2", - "eslint-plugin-react": "5.2.2", - "eslint-plugin-standard": "1.3.3", - "standard-engine": "4.1.3" - } - }, - "standard-engine": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-4.1.3.tgz", - "integrity": "sha1-ejGq1U8D2fOTVfQzic4GlPQJQVU=", - "requires": { - "defaults": "1.0.3", - "deglob": "1.1.2", - "find-root": "1.1.0", - "get-stdin": "5.0.1", - "minimist": "1.2.0", - "multiline": "1.0.2", - "pkg-config": "1.1.1", - "xtend": "4.0.1" - } - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" - }, - "tape": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.9.0.tgz", - "integrity": "sha512-j0jO9BiScfqtPBb9QmPLL0qvxXMz98xjkMb7x8lKipFlJZwNJkqkWPou+NU4V6T9RnVh1kuSthLE8gLrN8bBfw==", - "requires": { - "deep-equal": "1.0.1", - "defined": "1.0.0", - "for-each": "0.3.2", - "function-bind": "1.1.1", - "glob": "7.1.2", - "has": "1.0.1", - "inherits": "2.0.3", - "minimist": "1.2.0", - "object-inspect": "1.5.0", - "resolve": "1.5.0", - "resumer": "0.0.0", - "string.prototype.trim": "1.1.2", - "through": "2.3.8" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - } - } - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - }, - "web3": { - "version": "0.18.4", - "resolved": "https://registry.npmjs.org/web3/-/web3-0.18.4.tgz", - "integrity": "sha1-gewXhBRUkfLqqJVbMcBgSeB8Xn0=", - "requires": { - "bignumber.js": "git+https://github.com/debris/bignumber.js.git#94d7146671b9719e00a09c29b01a691bc85048c2", - "crypto-js": "3.1.8", - "utf8": "2.1.1", - "xhr2": "0.1.4", - "xmlhttprequest": "1.8.0" - } - } - } - }, - "remix-simulator": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/remix-simulator/-/remix-simulator-0.0.3.tgz", - "integrity": "sha512-TOHDubQt4kxqLFdUqgeJSReCAl3QHm1kghABFrHJdPMq6VRkg9nGL2noZscpR4XmHtSV1R0CtIZIAKgRRDlHog==", - "requires": { - "ansi-gray": "0.1.1", - "babel-preset-es2017": "6.24.1", - "body-parser": "1.18.3", - "color-support": "1.1.3", - "express": "4.16.3", - "merge": "1.2.0", - "remix-lib": "0.2.5", - "standard": "10.0.3", - "time-stamp": "2.0.0", - "web3": "1.0.0-beta.27" - } - }, - "remix-solidity": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/remix-solidity/-/remix-solidity-0.1.7.tgz", - "integrity": "sha512-cesnLF6VisxfALqHo7IIjijdmQOhNWGCR1+fqaFU/JtWhXnVOWnWXGZjMVV5f+23/bdtUf1h0yfpcoBnfIDADw==", - "requires": { - "babel-eslint": "7.2.3", - "babel-plugin-transform-object-assign": "6.22.0", - "babel-preset-es2015": "6.24.1", - "babelify": "7.3.0", - "ethereumjs-util": "4.5.0", - "ethereumjs-vm": "2.3.5", - "fast-async": "6.3.7", - "npm-run-all": "4.1.3", - "remix-core": "0.0.11", - "remix-lib": "0.2.5", - "solc": "git+https://github.com/ethereum/solc-js.git#c3b0d91fb0030f15dbc578f76c762f2cf092f813", - "standard": "7.1.2", - "tape": "4.9.0", - "webworkify": "1.5.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" - }, - "deglob": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-1.1.2.tgz", - "integrity": "sha1-dtV3wl/j9zKUEqK1nq3qV6xQDj8=", - "requires": { - "find-root": "1.1.0", - "glob": "7.1.2", - "ignore": "3.3.8", - "pkg-config": "1.1.1", - "run-parallel": "1.1.9", - "uniq": "1.0.1", - "xtend": "4.0.1" - } - }, - "doctrine": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "eslint": { - "version": "2.10.2", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-2.10.2.tgz", - "integrity": "sha1-sjCUgv7wQ9MgM2WjIShebM4Bw9c=", - "requires": { - "chalk": "1.1.3", - "concat-stream": "1.6.2", - "debug": "2.6.9", - "doctrine": "1.5.0", - "es6-map": "0.1.5", - "escope": "3.6.0", - "espree": "3.1.4", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "1.3.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.8", - "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.17.2", - "is-resolvable": "1.1.0", - "js-yaml": "3.11.0", - "json-stable-stringify": "1.0.1", - "lodash": "4.17.10", - "mkdirp": "0.5.1", - "optionator": "0.8.2", - "path-is-absolute": "1.0.1", - "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", - "require-uncached": "1.0.3", - "shelljs": "0.6.1", - "strip-json-comments": "1.0.4", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" - } - }, - "eslint-config-standard": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz", - "integrity": "sha1-WRyWkVF0QTL1YdO5FagS6kE/5JA=" - }, - "eslint-config-standard-jsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.1.tgz", - "integrity": "sha1-DRmxcF8K1INj7yqLv6cd8BLZibM=" - }, - "eslint-plugin-promise": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz", - "integrity": "sha1-/OMy1vX/UjIApTdwSGPsPCQiunw=" - }, - "eslint-plugin-react": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz", - "integrity": "sha1-fbBo4fVIf2hx5N7vNqOBwwPqwWE=", - "requires": { - "doctrine": "1.5.0", - "jsx-ast-utils": "1.4.1" - } - }, - "eslint-plugin-standard": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz", - "integrity": "sha1-owhUUVI0MedvQJxwy4+U4yvw7H8=" - }, - "espree": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.1.4.tgz", - "integrity": "sha1-BybXrIOvl6fISY2ps2OjYJ0qaKE=", - "requires": { - "acorn": "3.3.0", - "acorn-jsx": "3.0.1" - } - }, - "file-entry-cache": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", - "integrity": "sha1-RMYepgeuS+nBQC9B9EJwy/4zT/g=", - "requires": { - "flat-cache": "1.3.0", - "object-assign": "4.1.1" - } - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "shelljs": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.6.1.tgz", - "integrity": "sha1-7GIRvtGSBEIIj+D3Cyg3Iy7SyKg=" - }, - "solc": { - "version": "git+https://github.com/ethereum/solc-js.git#c3b0d91fb0030f15dbc578f76c762f2cf092f813", - "requires": { - "fs-extra": "0.30.0", - "memorystream": "0.3.1", - "require-from-string": "1.2.1", - "semver": "5.3.0", - "yargs": "4.8.1" - } - }, - "standard": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/standard/-/standard-7.1.2.tgz", - "integrity": "sha1-QBZu7sJAUGXRpPDj8VurxuJ0YH4=", - "requires": { - "eslint": "2.10.2", - "eslint-config-standard": "5.3.1", - "eslint-config-standard-jsx": "1.2.1", - "eslint-plugin-promise": "1.3.2", - "eslint-plugin-react": "5.2.2", - "eslint-plugin-standard": "1.3.3", - "standard-engine": "4.1.3" - } - }, - "standard-engine": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-4.1.3.tgz", - "integrity": "sha1-ejGq1U8D2fOTVfQzic4GlPQJQVU=", - "requires": { - "defaults": "1.0.3", - "deglob": "1.1.2", - "find-root": "1.1.0", - "get-stdin": "5.0.1", - "minimist": "1.2.0", - "multiline": "1.0.2", - "pkg-config": "1.1.1", - "xtend": "4.0.1" - } - }, - "strip-json-comments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", - "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=" - } - } - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "requires": { - "is-finite": "1.0.2" - } - }, - "request": { - "version": "2.86.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.86.0.tgz", - "integrity": "sha512-BQZih67o9r+Ys94tcIW4S7Uu8pthjrQVxhsZ/weOwHbDfACxvIyvnAbzFQxjy1jMtvFSzv5zf4my6cZsJBbVzw==", - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.7.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.3.2", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=" - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "requires": { - "path-parse": "1.0.5" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "resumer": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", - "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", - "requires": { - "through": "2.3.8" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "7.1.2" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" - } - }, - "rlp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.0.0.tgz", - "integrity": "sha1-nbOE/0uJqPYVY9kjldhiWxjzr7A=" - }, - "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "requires": { - "once": "1.4.0" - } - }, - "run-parallel": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", - "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" - }, - "rustbn.js": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.1.2.tgz", - "integrity": "sha512-bAkNqSHYdJdFsBC7Z11JgzYktL31HIpB2o70jZcGiL1U1TVtPyvaVhDrGWwS8uZtaqwW2k6NOPGZCqW/Dgh5Lg==" - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=" - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "scrypt": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/scrypt/-/scrypt-6.0.3.tgz", - "integrity": "sha1-BOAUpWgrU/pQwtXM4WfXGcBthw0=", - "requires": { - "nan": "2.10.0" - } - }, - "scrypt-js": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-2.0.3.tgz", - "integrity": "sha1-uwBAvgMEPamgEqLOqfyfhSz8h9Q=" - }, - "scrypt.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/scrypt.js/-/scrypt.js-0.2.0.tgz", - "integrity": "sha1-r40UZbcemZARC+38WTuUeeA6ito=", - "requires": { - "scrypt": "6.0.3", - "scryptsy": "1.2.1" - } - }, - "scryptsy": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/scryptsy/-/scryptsy-1.2.1.tgz", - "integrity": "sha1-oyJfpLJST4AnAHYeKFW987LZIWM=", - "requires": { - "pbkdf2": "3.0.16" - } - }, - "secp256k1": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.0.tgz", - "integrity": "sha512-e5QIJl8W7Y4tT6LHffVcZAxJjvpgE5Owawv6/XCYPQljE9aP2NFFddQ8OYMKhdLshNu88FfL3qCN3/xYkXGRsA==", - "requires": { - "bindings": "1.3.0", - "bip66": "1.1.5", - "bn.js": "4.11.8", - "create-hash": "1.2.0", - "drbg.js": "1.0.1", - "elliptic": "6.4.0", - "nan": "2.10.0", - "safe-buffer": "5.1.2" - } - }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "requires": { - "commander": "2.8.1" - }, - "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", - "requires": { - "graceful-readlink": "1.0.1" - } - } - } - }, - "semaphore": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semaphore/-/semaphore-1.1.0.tgz", - "integrity": "sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==" - }, - "semver": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" - }, - "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", - "requires": { - "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "fresh": "0.5.2", - "http-errors": "1.6.3", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" - }, - "dependencies": { - "statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" - } - } - }, - "sentence-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-2.1.1.tgz", - "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=", - "requires": { - "no-case": "2.3.2", - "upper-case-first": "1.1.2" - } - }, - "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", - "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", - "send": "0.16.2" - } - }, - "servify": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/servify/-/servify-0.1.12.tgz", - "integrity": "sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==", - "requires": { - "body-parser": "1.18.3", - "cors": "2.8.4", - "express": "4.16.3", - "request": "2.86.0", - "xhr": "2.4.1" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" - } - }, - "sha3": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/sha3/-/sha3-1.2.2.tgz", - "integrity": "sha1-pmxQmN5MJbyIM27ItIF9AFvKe6k=", - "requires": { - "nan": "2.10.0" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" - } - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "requires": { - "glob": "7.1.2", - "interpret": "1.1.0", - "rechoir": "0.6.2" - } - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "requires": { - "decompress-response": "3.3.0", - "once": "1.4.0", - "simple-concat": "1.0.0" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=" - }, - "snake-case": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-2.1.0.tgz", - "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=", - "requires": { - "no-case": "2.3.2" - } - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "requires": { - "hoek": "4.2.1" - } - }, - "solc": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.24.tgz", - "integrity": "sha512-2xd7Cf1HeVwrIb6Bu1cwY2/TaLRodrppCq3l7rhLimFQgmxptXhTC3+/wesVLpB09F1A2kZgvbMOgH7wvhFnBQ==", - "requires": { - "fs-extra": "0.30.0", - "memorystream": "0.3.1", - "require-from-string": "1.2.1", - "semver": "5.3.0", - "yargs": "4.8.1" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", - "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - }, - "source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "requires": { - "source-map": "0.5.7" - } - }, - "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" - }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", - "requires": { - "through": "2.3.8" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sshpk": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz", - "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - } - }, - "standard": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/standard/-/standard-10.0.3.tgz", - "integrity": "sha512-JURZ+85ExKLQULckDFijdX5WHzN6RC7fgiZNSV4jFQVo+3tPoQGHyBrGekye/yf0aOfb4210EM5qPNlc2cRh4w==", - "requires": { - "eslint": "3.19.0", - "eslint-config-standard": "10.2.1", - "eslint-config-standard-jsx": "4.0.2", - "eslint-plugin-import": "2.2.0", - "eslint-plugin-node": "4.2.3", - "eslint-plugin-promise": "3.5.0", - "eslint-plugin-react": "6.10.3", - "eslint-plugin-standard": "3.0.1", - "standard-engine": "7.0.0" - } - }, - "standard-engine": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-7.0.0.tgz", - "integrity": "sha1-67d7nI/CyBZf+jU72Rug3/Qa9pA=", - "requires": { - "deglob": "2.1.0", - "get-stdin": "5.0.1", - "minimist": "1.2.0", - "pkg-conf": "2.1.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" - }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", - "requires": { - "duplexer": "0.1.1" - } - }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string.prototype.padend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", - "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.11.0", - "function-bind": "1.1.1" - } - }, - "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", - "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.11.0", - "function-bind": "1.1.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "requires": { - "is-natural-number": "4.0.1" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha1-DF8VX+8RUTczd96du1iNoFUA428=", - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "requires": { - "get-stdin": "4.0.1" - }, - "dependencies": { - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" - } - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, - "swap-case": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/swap-case/-/swap-case-1.1.2.tgz", - "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=", - "requires": { - "lower-case": "1.1.4", - "upper-case": "1.1.3" - } - }, - "swarm-js": { - "version": "0.1.37", - "resolved": "https://registry.npmjs.org/swarm-js/-/swarm-js-0.1.37.tgz", - "integrity": "sha512-G8gi5fcXP/2upwiuOShJ258sIufBVztekgobr3cVgYXObZwJ5AXLqZn52AI+/ffft29pJexF9WNdUxjlkVehoQ==", - "requires": { - "bluebird": "3.5.1", - "buffer": "5.1.0", - "decompress": "4.2.0", - "eth-lib": "0.1.27", - "fs-extra": "2.1.2", - "fs-promise": "2.0.3", - "got": "7.1.0", - "mime-types": "2.1.18", - "mkdirp-promise": "5.0.1", - "mock-fs": "4.5.0", - "setimmediate": "1.0.5", - "tar.gz": "1.0.7", - "xhr-request-promise": "0.1.2" - } - }, - "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.10", - "slice-ansi": "0.0.4", - "string-width": "2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "3.0.0" - } - } - } - }, - "tape": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/tape/-/tape-4.9.0.tgz", - "integrity": "sha512-j0jO9BiScfqtPBb9QmPLL0qvxXMz98xjkMb7x8lKipFlJZwNJkqkWPou+NU4V6T9RnVh1kuSthLE8gLrN8bBfw==", - "requires": { - "deep-equal": "1.0.1", - "defined": "1.0.0", - "for-each": "0.3.2", - "function-bind": "1.1.1", - "glob": "7.1.2", - "has": "1.0.1", - "inherits": "2.0.3", - "minimist": "1.2.0", - "object-inspect": "1.5.0", - "resolve": "1.5.0", - "resumer": "0.0.0", - "string.prototype.trim": "1.1.2", - "through": "2.3.8" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "resolve": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", - "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", - "requires": { - "path-parse": "1.0.5" - } - } - } - }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.11", - "inherits": "2.0.3" - } - }, - "tar-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.1.tgz", - "integrity": "sha512-IFLM5wp3QrJODQFPm6/to3LJZrONdBY/otxcvDIQzu217zKye6yVR3hhi9lAjrC2Z+m/j5oDxMPb1qcd8cIvpA==", - "requires": { - "bl": "1.2.2", - "buffer-alloc": "1.1.0", - "end-of-stream": "1.4.1", - "fs-constants": "1.0.0", - "readable-stream": "2.3.6", - "to-buffer": "1.1.1", - "xtend": "4.0.1" - } - }, - "tar.gz": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/tar.gz/-/tar.gz-1.0.7.tgz", - "integrity": "sha512-uhGatJvds/3diZrETqMj4RxBR779LKlIE74SsMcn5JProZsfs9j0QBwWO1RW+IWNJxS2x8Zzra1+AW6OQHWphg==", - "requires": { - "bluebird": "2.11.0", - "commander": "2.15.1", - "fstream": "1.0.11", - "mout": "0.11.1", - "tar": "2.2.1" - }, - "dependencies": { - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=" - } - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", - "requires": { - "any-promise": "1.3.0" - } - }, - "thenify-all": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", - "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", - "requires": { - "thenify": "3.3.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "time-stamp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz", - "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=" - }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, - "title-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", - "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", - "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" - } - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" - }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "requires": { - "punycode": "1.4.1" - } - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" - }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "5.1.2" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "optional": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "1.1.2" - } - }, - "type-is": { - "version": "1.6.16", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", - "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "2.1.18" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { - "is-typedarray": "1.0.0" - } - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "unbzip2-stream": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.2.5.tgz", - "integrity": "sha512-izD3jxT8xkzwtXRUZjtmRwKnZoeECrfZ8ra/ketwOcusbZEp4mjULMnJOCfTDZBgGQAAY1AJ/IgxcwkavcX9Og==", - "requires": { - "buffer": "3.6.0", - "through": "2.3.8" - }, - "dependencies": { - "base64-js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" - }, - "buffer": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-3.6.0.tgz", - "integrity": "sha1-pyyTb3e5a/UvX357RnGAYoVR3vs=", - "requires": { - "base64-js": "0.0.8", - "ieee754": "1.1.11", - "isarray": "1.0.0" - } - } - } - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" - }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" - }, - "upper-case-first": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upper-case-first/-/upper-case-first-1.1.2.tgz", - "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=", - "requires": { - "upper-case": "1.1.3" - } - }, - "url-parse-lax": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", - "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", - "requires": { - "prepend-http": "1.0.4" - } - }, - "url-set-query": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/url-set-query/-/url-set-query-1.0.0.tgz", - "integrity": "sha1-AW6M/Xwg7gXK/neV6JK9BwL6ozk=" - }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "requires": { - "os-homedir": "1.0.2" - } - }, - "utf8": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.1.tgz", - "integrity": "sha1-LgHbAvfY0JRPdxBPFgnrDDBM92g=" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" - }, - "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", - "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, - "web3": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3/-/web3-1.0.0-beta.27.tgz", - "integrity": "sha1-2afJVr7JgbC6knvbkd0PEnXrNHk=", - "requires": { - "web3-bzz": "1.0.0-beta.27", - "web3-core": "1.0.0-beta.27", - "web3-eth": "1.0.0-beta.27", - "web3-eth-personal": "1.0.0-beta.27", - "web3-net": "1.0.0-beta.27", - "web3-shh": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-bzz": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-bzz/-/web3-bzz-1.0.0-beta.27.tgz", - "integrity": "sha1-Tmggpc/nOqsG2CV59FBFD76YIqM=", - "requires": { - "got": "7.1.0", - "swarm-js": "0.1.37", - "underscore": "1.8.3" - } - }, - "web3-core": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-1.0.0-beta.27.tgz", - "integrity": "sha1-TQCb9x5Yt5F2E0EpF+/5ERO0N8M=", - "requires": { - "web3-core-helpers": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-core-requestmanager": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-core-helpers": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core-helpers/-/web3-core-helpers-1.0.0-beta.27.tgz", - "integrity": "sha1-6wlPrTfJ3B1wZt11Zimi1u+6B6I=", - "requires": { - "underscore": "1.8.3", - "web3-eth-iban": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-core-method": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core-method/-/web3-core-method-1.0.0-beta.27.tgz", - "integrity": "sha1-3hTlQL1qdTfXBGcLSeY/BSYgG6o=", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.27", - "web3-core-promievent": "1.0.0-beta.27", - "web3-core-subscriptions": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-core-promievent": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core-promievent/-/web3-core-promievent-1.0.0-beta.27.tgz", - "integrity": "sha1-0lx9e75NU9+/3KBJ+e1LCmlUvrw=", - "requires": { - "bluebird": "3.3.1", - "eventemitter3": "1.1.1" - }, - "dependencies": { - "bluebird": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.3.1.tgz", - "integrity": "sha1-+Xrhlw9B2FF3KDBT6aEgFg5mxh0=" - } - } - }, - "web3-core-requestmanager": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core-requestmanager/-/web3-core-requestmanager-1.0.0-beta.27.tgz", - "integrity": "sha1-Vk7uJEoxCq5abGgyzeLA49wwHpg=", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.27", - "web3-providers-http": "1.0.0-beta.27", - "web3-providers-ipc": "1.0.0-beta.27", - "web3-providers-ws": "1.0.0-beta.27" - } - }, - "web3-core-subscriptions": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-core-subscriptions/-/web3-core-subscriptions-1.0.0-beta.27.tgz", - "integrity": "sha1-VvKRy1Sn7PgNRzTXL1Sky8uJdzc=", - "requires": { - "eventemitter3": "1.1.1", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.27" - } - }, - "web3-eth": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-1.0.0-beta.27.tgz", - "integrity": "sha1-hV3Q4BqU1Xhx/9j0n22eyqMXIas=", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.27", - "web3-core-helpers": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-core-subscriptions": "1.0.0-beta.27", - "web3-eth-abi": "1.0.0-beta.27", - "web3-eth-accounts": "1.0.0-beta.27", - "web3-eth-contract": "1.0.0-beta.27", - "web3-eth-iban": "1.0.0-beta.27", - "web3-eth-personal": "1.0.0-beta.27", - "web3-net": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-eth-abi": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-1.0.0-beta.27.tgz", - "integrity": "sha1-RS6dk3YVYL4yNE7juJddD7JLvb4=", - "requires": { - "bn.js": "4.11.6", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "web3-eth-accounts": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-1.0.0-beta.27.tgz", - "integrity": "sha1-mUDCjl48kg1nz2iH6pxS8c3Re3k=", - "requires": { - "bluebird": "3.3.1", - "crypto-browserify": "3.12.0", - "eth-lib": "0.2.5", - "scrypt.js": "0.2.0", - "underscore": "1.8.3", - "uuid": "2.0.1", - "web3-core": "1.0.0-beta.27", - "web3-core-helpers": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - }, - "dependencies": { - "bluebird": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.3.1.tgz", - "integrity": "sha1-+Xrhlw9B2FF3KDBT6aEgFg5mxh0=" - }, - "eth-lib": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/eth-lib/-/eth-lib-0.2.5.tgz", - "integrity": "sha512-pXs4ryU+7S8MPpkQpNqG4JlXEec87kbXowQbYzRVV+c5XUccrO6WOxVPDicxql1AXSBzfmBSFVkvvG+H4htuxg==", - "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.0", - "xhr-request-promise": "0.1.2" - } - }, - "uuid": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" - } - } - }, - "web3-eth-contract": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-1.0.0-beta.27.tgz", - "integrity": "sha1-AS96XVnaZ+KWxzWo8pcK7N0gfn0=", - "requires": { - "underscore": "1.8.3", - "web3-core": "1.0.0-beta.27", - "web3-core-helpers": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-core-promievent": "1.0.0-beta.27", - "web3-core-subscriptions": "1.0.0-beta.27", - "web3-eth-abi": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-eth-iban": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-1.0.0-beta.27.tgz", - "integrity": "sha1-RDPCj0F8Oa+WMzoGpK+h/NSqaEI=", - "requires": { - "bn.js": "4.11.8", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-eth-personal": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-1.0.0-beta.27.tgz", - "integrity": "sha1-ukiaNIdkpKswOItcwcblm9bq7Ks=", - "requires": { - "web3-core": "1.0.0-beta.27", - "web3-core-helpers": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-net": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-net": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-1.0.0-beta.27.tgz", - "integrity": "sha1-eulTbsOf7Rou6zjALm48jt/oq30=", - "requires": { - "web3-core": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-utils": "1.0.0-beta.27" - } - }, - "web3-providers-http": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-1.0.0-beta.27.tgz", - "integrity": "sha1-LwrhYJvF5KNb4lgYzX/HfeBitqY=", - "requires": { - "web3-core-helpers": "1.0.0-beta.27", - "xhr2": "0.1.4" - } - }, - "web3-providers-ipc": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-1.0.0-beta.27.tgz", - "integrity": "sha1-oFwkIe/+TEfxX0efeSUTWtCUJ2I=", - "requires": { - "oboe": "2.1.3", - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.27" - } - }, - "web3-providers-ws": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-1.0.0-beta.27.tgz", - "integrity": "sha1-bUZ4Geoi3foba6FJjTHZVU4rBt0=", - "requires": { - "underscore": "1.8.3", - "web3-core-helpers": "1.0.0-beta.27", - "websocket": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2" - } - }, - "web3-shh": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-shh/-/web3-shh-1.0.0-beta.27.tgz", - "integrity": "sha1-b3bW6yoma769zwqjDFo62J82e38=", - "requires": { - "web3-core": "1.0.0-beta.27", - "web3-core-method": "1.0.0-beta.27", - "web3-core-subscriptions": "1.0.0-beta.27", - "web3-net": "1.0.0-beta.27" - } - }, - "web3-utils": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.0.0-beta.27.tgz", - "integrity": "sha1-0JfVwzaha59sqbYK9o3RXAZDIUs=", - "requires": { - "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" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha1-UzRK2xRhehP26N0s4okF0cC6MhU=" - } - } - }, - "websocket": { - "version": "git://github.com/frozeman/WebSocket-Node.git#6c72925e3f8aaaea8dc8450f97627e85263999f2", - "requires": { - "debug": "2.6.9", - "nan": "2.10.0", - "typedarray-to-buffer": "3.1.5", - "yaeti": "0.0.6" - } - }, - "webworkify": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/webworkify/-/webworkify-1.5.0.tgz", - "integrity": "sha512-AMcUeyXAhbACL8S2hqqdqOLqvJ8ylmIbNwUIqQujRSouf4+eUFaXbG6F1Rbu+srlJMmxQWsiU7mOJi0nMBfM1g==" - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "requires": { - "isexe": "2.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" - }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=" - }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "requires": { - "mkdirp": "0.5.1" - } - }, - "ws": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", - "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.2", - "ultron": "1.1.1" - } - }, - "xhr": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.4.1.tgz", - "integrity": "sha512-pAIU5vBr9Hiy5cpFIbPnwf0C18ZF86DBsZKrlsf87N5De/JbA6RJ83UP/cv+aljl4S40iRVMqP4pr4sF9Dnj0A==", - "requires": { - "global": "4.3.2", - "is-function": "1.0.1", - "parse-headers": "2.0.1", - "xtend": "4.0.1" - } - }, - "xhr-request": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/xhr-request/-/xhr-request-1.1.0.tgz", - "integrity": "sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==", - "requires": { - "buffer-to-arraybuffer": "0.0.5", - "object-assign": "4.1.1", - "query-string": "5.1.1", - "simple-get": "2.8.1", - "timed-out": "4.0.1", - "url-set-query": "1.0.0", - "xhr": "2.4.1" - } - }, - "xhr-request-promise": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/xhr-request-promise/-/xhr-request-promise-0.1.2.tgz", - "integrity": "sha1-NDxE0e53JrhkgGloLQ+EDIO0Jh0=", - "requires": { - "xhr-request": "1.1.0" - } - }, - "xhr2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", - "integrity": "sha1-f4dliEdxbbUCYyOBL4GMras4el8=" - }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" - }, - "xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" - }, - "yaeti": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", - "integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=" - }, - "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", - "requires": { - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.2", - "lodash.assign": "4.2.0", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "window-size": "0.2.0", - "y18n": "3.2.1", - "yargs-parser": "2.4.1" - } - }, - "yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ=", - "requires": { - "camelcase": "3.0.0", - "lodash.assign": "4.2.0" - } - }, - "yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha1-qBmB6nCleUYTOIPwKcWCGok1mn8=", - "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.0.1" - } - } - } -} diff --git a/package.json b/package.json index 7fa2e106b6..ffee15ffc4 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "colors": "^1.1.2", "commander": "^2.13.0", "remix-simulator": "latest", - "remix-solidity": "latest", + "remix-solidity": "https://github.com/0mkara/remix-solidity", "solc": "^0.4.24", "standard": "^10.0.3", "web3": "1.0.0-beta.27" From 018cef9534f7e30bf700d84689a0b53382caa06c Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Thu, 21 Jun 2018 12:11:41 -0400 Subject: [PATCH 090/105] fix to avoiding duplicate passing or failing tests due to multiple asserts --- src/testRunner.js | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/testRunner.js b/src/testRunner.js index 6b2444fd3e..e1ffac490f 100644 --- a/src/testRunner.js +++ b/src/testRunner.js @@ -61,19 +61,26 @@ function runTest (testName, testObject, testCallback, resultsCallback) { let time = Math.ceil((Date.now() - startTime) / 1000.0) let topic = Web3.utils.sha3('AssertionEvent(bool,string)') + let testPassed = false + for (let i in receipt.events) { let event = receipt.events[i] if (event.raw.topics.indexOf(topic) >= 0) { var testEvent = web3.eth.abi.decodeParameters(['bool', 'string'], event.raw.data) - if (testEvent[0]) { - testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name), time: time, context: testName}) - passingNum += 1 - } else { + if (!testEvent[0]) { testCallback({type: 'testFailure', value: changeCase.sentenceCase(func.name), time: time, errMsg: testEvent[1], context: testName}) failureNum += 1 + return next() } + testPassed = true } } + + if (testPassed) { + testCallback({type: 'testPass', value: changeCase.sentenceCase(func.name), time: time, context: testName}) + passingNum += 1 + } + return next() } catch (err) { console.log('error!') From cbeda1f3dce69d4de11ffc5433c903dd26185c50 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Mon, 30 Jul 2018 17:05:34 -0400 Subject: [PATCH 091/105] add test case --- tests/examples_1/simple_storage_test.sol | 11 ++++++++++- tests/testRunner.js | 6 ++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/tests/examples_1/simple_storage_test.sol b/tests/examples_1/simple_storage_test.sol index 2bab305c4f..896970933f 100644 --- a/tests/examples_1/simple_storage_test.sol +++ b/tests/examples_1/simple_storage_test.sol @@ -1,5 +1,5 @@ pragma solidity ^0.4.7; -import "./tests.sol"; +import "remix_tests.sol"; import "./simple_storage.sol"; contract MyTest { @@ -19,5 +19,14 @@ contract MyTest { return foo.get() == 200; } + function shouldTriggerOneFail() public { + Assert.equal(uint(1), uint(2), "the test 1 fails"); + Assert.equal(uint(1), uint(2), "the test 2 fails"); + } + + function shouldTriggerOnePass() public { + Assert.equal(uint(1), uint(1), "the test 3 fails"); + } + } diff --git a/tests/testRunner.js b/tests/testRunner.js index d5529050d0..b6426f5ce5 100644 --- a/tests/testRunner.js +++ b/tests/testRunner.js @@ -43,16 +43,18 @@ describe('testRunner', function () { }) it('should 1 passing test', function () { - assert.equal(results.passingNum, 1) + assert.equal(results.passingNum, 2) }) it('should 1 failing test', function () { - assert.equal(results.failureNum, 1) + assert.equal(results.failureNum, 2) }) it('should returns 3 messages', function () { assert.deepEqual(tests, [ { type: 'contract', value: 'MyTest', filename: 'simple_storage_test.sol' }, + { type: 'testFailure', value: 'Should trigger one fail', time: 1, context: 'MyTest', errMsg: 'the test 1 fails' }, + { type: 'testPass', value: 'Should trigger one pass', time: 1, context: 'MyTest'}, { type: 'testPass', value: 'Initial value should be100', time: 1, context: 'MyTest' }, { type: 'testFailure', value: 'Initial value should be200', time: 1, context: 'MyTest', errMsg: 'function returned false' } ]) From b1eb2c489d391cd700a06811ddef1380a1776ceb Mon Sep 17 00:00:00 2001 From: yann300 Date: Thu, 2 Aug 2018 11:02:48 +0200 Subject: [PATCH 092/105] Update compiler.js --- src/compiler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler.js b/src/compiler.js index f6fc4698a9..e7de72c36f 100644 --- a/src/compiler.js +++ b/src/compiler.js @@ -68,7 +68,7 @@ function compileContractSources (sources, importFileCb, cb) { compiler.compile(sources, filepath) } ], function (err, result) { - let errors = (result.errors || []).filter((e) => e.type === 'Error') + let errors = (result.errors || []).filter((e) => e.type === 'Error' || e.severity === 'error') if (errors.length > 0) { console.dir(errors) return cb(new Error('errors compiling')) From 57a8037cba81434b410052268ff9f00d29357a5f Mon Sep 17 00:00:00 2001 From: Matt Gucci Date: Sat, 18 Aug 2018 23:48:22 +0900 Subject: [PATCH 093/105] Suppress warnings about events without "emit" When I first start the Remix IDE, the following warnings are shown in the Compile tab. ``` remix_tests.sol:13:5: Warning: Invoking events without "emit" prefix is deprecated. AssertionEvent(result, message); ^-----------------------------^ ``` To avoid this, add `emit` in front. --- sol/tests.sol.js | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/sol/tests.sol.js b/sol/tests.sol.js index 2fa6821bbe..8cc903f86f 100644 --- a/sol/tests.sol.js +++ b/sol/tests.sol.js @@ -10,93 +10,93 @@ library Assert { function ok(bool a, string message) public returns (bool result) { result = a; - AssertionEvent(result, message); + emit AssertionEvent(result, message); } function equal(uint a, uint b, string message) public returns (bool result) { result = (a == b); - AssertionEvent(result, message); + emit AssertionEvent(result, message); } function equal(int a, int b, string message) public returns (bool result) { result = (a == b); - AssertionEvent(result, message); + emit AssertionEvent(result, message); } function equal(bool a, bool b, string message) public returns (bool result) { result = (a == b); - AssertionEvent(result, message); + emit AssertionEvent(result, message); } // TODO: only for certain versions of solc //function equal(fixed a, fixed b, string message) public returns (bool result) { // result = (a == b); - // AssertionEvent(result, message); + // emit AssertionEvent(result, message); //} // TODO: only for certain versions of solc //function equal(ufixed a, ufixed b, string message) public returns (bool result) { // result = (a == b); - // AssertionEvent(result, message); + // emit AssertionEvent(result, message); //} function equal(address a, address b, string message) public returns (bool result) { result = (a == b); - AssertionEvent(result, message); + emit AssertionEvent(result, message); } function equal(bytes32 a, bytes32 b, string message) public returns (bool result) { result = (a == b); - AssertionEvent(result, message); + emit AssertionEvent(result, message); } // TODO: needs to be convert to bytes first to be comparable //function equal(string a, string b, string message) public returns (bool result) { // result = (a == b); - // AssertionEvent(result, message); + // emit AssertionEvent(result, message); //} function notEqual(uint a, uint b, string message) public returns (bool result) { result = (a != b); - AssertionEvent(result, message); + emit AssertionEvent(result, message); } function notEqual(int a, int b, string message) public returns (bool result) { result = (a != b); - AssertionEvent(result, message); + emit AssertionEvent(result, message); } function notEqual(bool a, bool b, string message) public returns (bool result) { result = (a != b); - AssertionEvent(result, message); + emit AssertionEvent(result, message); } // TODO: only for certain versions of solc //function notEqual(fixed a, fixed b, string message) public returns (bool result) { // result = (a != b); - // AssertionEvent(result, message); + // emit AssertionEvent(result, message); //} // TODO: only for certain versions of solc //function notEqual(ufixed a, ufixed b, string message) public returns (bool result) { // result = (a != b); - // AssertionEvent(result, message); + // emit AssertionEvent(result, message); //} function notEqual(address a, address b, string message) public returns (bool result) { result = (a != b); - AssertionEvent(result, message); + emit AssertionEvent(result, message); } function notEqual(bytes32 a, bytes32 b, string message) public returns (bool result) { result = (a != b); - AssertionEvent(result, message); + emit AssertionEvent(result, message); } // TODO: needs to be convert to bytes first to be comparable //function notEqual(string a, string b, string message) public returns (bool result) { // result = (a != b); - // AssertionEvent(result, message); + // emit AssertionEvent(result, message); //} } From 760a30eb2e2512f00df01d799dfdc2a6c32baf2a Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Tue, 21 Aug 2018 13:31:14 -0400 Subject: [PATCH 094/105] update readme --- README.md | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 105 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 36bb5d4901..25e83a72b0 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,107 @@ [![Build Status](https://travis-ci.org/ethereum/remix-tests.svg?branch=master)](https://travis-ci.org/ethereum/remix-tests) -# remix-tests +Remix-Tests +--- + +### Installation + +`npm -g install remix-tests` + +### Test structure + +Example test file: +```Javascript +pragma solidity ^0.4.7; +import "remix_tests.sol"; // injected by remix-tests +import "./simple_storage.sol"; + +contract MyTest { + SimpleStorage foo; + uint i = 0; + + function beforeAll() { + foo = new SimpleStorage(); + } + + function beforeEach() { + if (i == 1) { + foo.set(200); + } + i += 1; + } + + function initialValueShouldBe100() public { + Assert.equal(foo.get(), 100, "initial value is not correct"); + } + + function initialValueShouldBe200() public constant returns { + return Assert.equal(foo.get(), 200, "initial value is not correct"); + } + +} +``` + +Available special functions: +* `beforeEach` - runs before each test +* `beforeAll` - runs before all tests + +#### Assert library + +Available functions: +`Assert.ok(value, message)` +`Assert.equal(value1, value2, message)` +`Assert.notEqual(value1, value2, message)` + +supported values currently are: `bool` `uint` `int` `address` `bytes32` + +### Command Line + +Usage: + +* A directory with tests files `remix-tests examples/` +* A test file `remix-tests examples/simple_storage_test.sol` + +### Library + +Importing the library: +```Javascript +const RemixTests = require('remix-tests'); +``` + +Running a single test object: +```Javascript +remixTests.runTest(contractName, contractObj, testCallback, resultsCallback) +``` +params: +`testName` - `string` name of the test +`testObj` - web3.js 1.0 contract instance of the test +`testCallback(object)` - called each time there is a test event. 3 possible type of objects: +* `{ type: 'contract', value: '', filename: '' }` +* `{ type: 'testPass', value: '', time: