diff --git a/.gitignore b/.gitignore index cbed741..5175023 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ coverage/* coverage.json .jsapi.json + +.DS_Store \ No newline at end of file diff --git a/contracts/DaoBase.sol b/contracts/DaoBase.sol index e0d9b47..e6b973e 100644 --- a/contracts/DaoBase.sol +++ b/contracts/DaoBase.sol @@ -127,7 +127,8 @@ contract DaoBase is IDaoBase, Ownable { * @dev this function add address _a to group na me with name _groupName into storage */ function addGroupMember(string _groupName, address _a) public isCanDoOrByOwner(MANAGE_GROUPS) { - emit DaoBaseAddGroupMember(_groupName, _a); + emit DaoBaseAddGroupMember(_groupName, _a); + require(bytes(_groupName).length>0); daoStorage.addGroupMember(stringHash(_groupName), _a); } diff --git a/contracts/DaoBaseAuto.sol b/contracts/DaoBaseAuto.sol index 2f11ecf..29c5cc9 100644 --- a/contracts/DaoBaseAuto.sol +++ b/contracts/DaoBaseAuto.sol @@ -16,8 +16,8 @@ import "./utils/UtilsLib.sol"; * Please see 'tests' folder for example. */ contract DaoBaseAuto is GenericCaller { - constructor(IDaoBase _dao)public - GenericCaller(_dao) + constructor(IDaoBase _daoBase)public + GenericCaller(_daoBase) { } @@ -34,8 +34,8 @@ contract DaoBaseAuto is GenericCaller { params[1] = bytes32(_a); return doAction( - DaoBase(address(dao)).MANAGE_GROUPS(), - dao, + DaoBase(address(daoBase)).MANAGE_GROUPS(), + daoBase, msg.sender, "addGroupMemberGeneric(bytes32[])", params @@ -56,8 +56,8 @@ contract DaoBaseAuto is GenericCaller { params[2] = bytes32(_amount); return doAction( - DaoBase(address(dao)).ISSUE_TOKENS(), - dao, + DaoBase(address(daoBase)).ISSUE_TOKENS(), + daoBase, msg.sender, "issueTokensGeneric(bytes32[])", params @@ -74,8 +74,8 @@ contract DaoBaseAuto is GenericCaller { params[0] = bytes32(_newMc); return doAction( - DaoBase(address(dao)).UPGRADE_DAO_CONTRACT(), - dao, + DaoBase(address(daoBase)).UPGRADE_DAO_CONTRACT(), + daoBase, msg.sender, "upgradeDaoContractGeneric(bytes32[])", params @@ -95,8 +95,8 @@ contract DaoBaseAuto is GenericCaller { params[1] = bytes32(_a); return doAction( - DaoBase(address(dao)).REMOVE_GROUP_MEMBER(), - dao, + DaoBase(address(daoBase)).REMOVE_GROUP_MEMBER(), + daoBase, msg.sender, "removeGroupMemberGeneric(bytes32[])", params @@ -115,8 +115,8 @@ contract DaoBaseAuto is GenericCaller { params[1] = bytes32(_tokenAddress); return doAction( - DaoBase(address(dao)).ALLOW_ACTION_BY_SHAREHOLDER(), - dao, + DaoBase(address(daoBase)).ALLOW_ACTION_BY_SHAREHOLDER(), + daoBase, msg.sender, "allowActionByShareholderGeneric(bytes32[])", params @@ -135,8 +135,8 @@ contract DaoBaseAuto is GenericCaller { params[1] = bytes32(_tokenAddress); return doAction( - DaoBase(address(dao)).ALLOW_ACTION_BY_VOTING(), - dao, + DaoBase(address(daoBase)).ALLOW_ACTION_BY_VOTING(), + daoBase, msg.sender, "allowActionByVotingGeneric(bytes32[])", params @@ -155,8 +155,8 @@ contract DaoBaseAuto is GenericCaller { params[1] = bytes32(_a); return doAction( - DaoBase(address(dao)).ALLOW_ACTION_BY_ADDRESS(), - dao, + DaoBase(address(daoBase)).ALLOW_ACTION_BY_ADDRESS(), + daoBase, msg.sender, "allowActionByAddressGeneric(bytes32[])", params @@ -175,8 +175,8 @@ contract DaoBaseAuto is GenericCaller { params[1] = UtilsLib.stringToBytes32(_groupName); return doAction( - DaoBase(address(dao)).ALLOW_ACTION_BY_ANY_MEMBER_OF_GROUP(), - dao, + DaoBase(address(daoBase)).ALLOW_ACTION_BY_ANY_MEMBER_OF_GROUP(), + daoBase, msg.sender, "allowActionByAnyMemberOfGroupGeneric(bytes32[])", params diff --git a/contracts/DaoBaseImpersonated.sol b/contracts/DaoBaseImpersonated.sol index 7401e5e..ea9ca9c 100644 --- a/contracts/DaoBaseImpersonated.sol +++ b/contracts/DaoBaseImpersonated.sol @@ -16,8 +16,8 @@ import "./utils/UtilsLib.sol"; * Please see 'tests' folder for example. */ contract DaoBaseImpersonated is ImpersonationCaller { - constructor(IDaoBase _dao)public - ImpersonationCaller(_dao) + constructor(IDaoBase _daoBase)public + ImpersonationCaller(_daoBase) { } @@ -38,7 +38,7 @@ contract DaoBaseImpersonated is ImpersonationCaller { doActionOnBehalfOf( _hash, _sig, - DaoBase(dao).ISSUE_TOKENS(), + DaoBase(daoBase).ISSUE_TOKENS(), "issueTokensGeneric(bytes32[])", params ); @@ -57,7 +57,7 @@ contract DaoBaseImpersonated is ImpersonationCaller { doActionOnBehalfOf( _hash, _sig, - DaoBase(dao).UPGRADE_DAO_CONTRACT(), + DaoBase(daoBase).UPGRADE_DAO_CONTRACT(), "upgradeDaoContractGeneric(bytes32[])", params ); @@ -78,7 +78,7 @@ contract DaoBaseImpersonated is ImpersonationCaller { doActionOnBehalfOf( _hash, _sig, - DaoBase(dao).MANAGE_GROUPS(), + DaoBase(daoBase).MANAGE_GROUPS(), "addGroupMemberGeneric(bytes32[])", params ); @@ -99,7 +99,7 @@ contract DaoBaseImpersonated is ImpersonationCaller { doActionOnBehalfOf( _hash, _sig, - DaoBase(dao).REMOVE_GROUP_MEMBER(), + DaoBase(daoBase).REMOVE_GROUP_MEMBER(), "removeGroupMemberGeneric(bytes32[])", params ); @@ -120,7 +120,7 @@ contract DaoBaseImpersonated is ImpersonationCaller { doActionOnBehalfOf( _hash, _sig, - DaoBase(dao).ALLOW_ACTION_BY_SHAREHOLDER(), + DaoBase(daoBase).ALLOW_ACTION_BY_SHAREHOLDER(), "allowActionByShareholderGeneric(bytes32[])", params ); @@ -141,7 +141,7 @@ contract DaoBaseImpersonated is ImpersonationCaller { doActionOnBehalfOf( _hash, _sig, - DaoBase(dao).ALLOW_ACTION_BY_VOTING(), + DaoBase(daoBase).ALLOW_ACTION_BY_VOTING(), "allowActionByVotingGeneric(bytes32[])", params ); @@ -162,7 +162,7 @@ contract DaoBaseImpersonated is ImpersonationCaller { doActionOnBehalfOf( _hash, _sig, - DaoBase(dao).ALLOW_ACTION_BY_ADDRESS(), + DaoBase(daoBase).ALLOW_ACTION_BY_ADDRESS(), "allowActionByAddressGeneric(bytes32[])", params ); @@ -183,7 +183,7 @@ contract DaoBaseImpersonated is ImpersonationCaller { doActionOnBehalfOf( _hash, _sig, - DaoBase(dao).ALLOW_ACTION_BY_ANY_MEMBER_OF_GROUP(), + DaoBase(daoBase).ALLOW_ACTION_BY_ANY_MEMBER_OF_GROUP(), "allowActionByAnyMemberOfGroupGeneric(bytes32[])", params ); diff --git a/contracts/DaoBaseLib.sol b/contracts/DaoBaseLib.sol index 6c92b1d..ef232dc 100644 --- a/contracts/DaoBaseLib.sol +++ b/contracts/DaoBaseLib.sol @@ -110,14 +110,6 @@ library DaoBaseLib { revert(); // if not found! } - /** - * @param _s string - * @return hash for string _s - */ - function stringHash(string _s) public pure returns(bytes32) { - return keccak256(abi.encodePacked(_s)); - } - /** * @param _daoStorage storage * @param _p address of the proposal diff --git a/contracts/DaoClient.sol b/contracts/DaoClient.sol index 575d139..ab2cd52 100644 --- a/contracts/DaoClient.sol +++ b/contracts/DaoClient.sol @@ -6,37 +6,37 @@ import "./IDaoObserver.sol"; /** * @title DaoClient, just an easy-to-use wrapper. - * @dev This contract provides you with internal 'dao' variable. - * Once your DAO controller is upgraded -> all DaoClients will be notified and 'dao' var will be updated automatically. + * @dev This contract provides you with internal 'daoBase' variable. + * Once your DAO controller is upgraded -> all DaoClients will be notified and 'daoBase' var will be updated automatically. * - * Some contracts like Votings or Auto-callers has 'dao' variable and don't use DaoClient. + * Some contracts like Votings or Auto-callers has 'daoBase' variable and don't use DaoClient. * In this case they will stop working if the controller (DAO) is upgraded (it is as inteded). */ contract DaoClient is IDaoObserver { - IDaoBase dao; + IDaoBase daoBase; modifier isCanDo(bytes32 _what) { - require(dao.isCanDoAction(msg.sender, _what)); + require(daoBase.isCanDoAction(msg.sender, _what)); _; } - constructor(IDaoBase _dao) public { - dao = _dao; - dao.addObserver(IDaoObserver(this)); + constructor(IDaoBase _daoBase) public { + daoBase = _daoBase; + daoBase.addObserver(IDaoObserver(this)); } /** - * @dev If your company is upgraded -> then this will automatically update the current dao. - * dao will point at NEW contract! + * @dev If your company is upgraded -> then this will automatically update the current daoBase. + * daoBase will point at NEW contract! * @param _newAddress New controller. */ function onUpgrade(address _newAddress) public { - require(msg.sender == address(dao)); + require(msg.sender == address(daoBase)); - dao = IDaoBase(_newAddress); + daoBase = IDaoBase(_newAddress); // this is not needed because we are already in the list of observers (in the store) // and the controller is upgraded only - //dao.addObserver(this); + //daoBase.addObserver(this); } } \ No newline at end of file diff --git a/contracts/ICO/SimpleICO.sol b/contracts/ICO/SimpleICO.sol index 9df2ac7..1659c7b 100644 --- a/contracts/ICO/SimpleICO.sol +++ b/contracts/ICO/SimpleICO.sol @@ -57,7 +57,7 @@ contract SimpleICO is DaoClient, Ownable { constructor( uint256 _rate, address _tokenAddress, - IDaoBase _dao, + IDaoBase _daoBase, uint256 _minPurchase, uint256 _maxPurchase, uint256 _startDate, @@ -65,7 +65,7 @@ contract SimpleICO is DaoClient, Ownable { uint256 _softCap, uint256 _hardCap ) public - DaoClient(_dao) + DaoClient(_daoBase) { require(_rate > 0); require(_tokenAddress != address(0)); @@ -101,7 +101,7 @@ contract SimpleICO is DaoClient, Ownable { uint256 tokens = _getTokenAmount(weiAmount); weiRaised = weiRaised.add(weiAmount); - dao.issueTokens(tokenAddress, _beneficiary, tokens); + daoBase.issueTokens(tokenAddress, _beneficiary, tokens); emit TokenPurchase( msg.sender, @@ -160,7 +160,7 @@ contract SimpleICO is DaoClient, Ownable { require(_addresses.length == _tokenAmounts.length); for(uint256 i = 0; i < _addresses.length; i++) { - dao.issueTokens(tokenAddress, _addresses[i], _tokenAmounts[i]); + daoBase.issueTokens(tokenAddress, _addresses[i], _tokenAmounts[i]); } } @@ -175,7 +175,7 @@ contract SimpleICO is DaoClient, Ownable { require (_addresses.length == _tokenAmounts.length); for(uint256 i = 0; i < _addresses.length; i++) { - dao.issueTokens(tokenAddress, _addresses[i], _tokenAmounts[i]); + daoBase.issueTokens(tokenAddress, _addresses[i], _tokenAmounts[i]); } } diff --git a/contracts/ImpersonationCaller.sol b/contracts/ImpersonationCaller.sol index ea3e999..ff28073 100644 --- a/contracts/ImpersonationCaller.sol +++ b/contracts/ImpersonationCaller.sol @@ -11,7 +11,7 @@ import "./IDaoBase.sol"; * @dev This is a convenient wrapper that is used by the contract below (see DaoBaseImpersonated). Do not use it directly. */ contract ImpersonationCaller is DaoClient { - constructor(IDaoBase _dao) public DaoClient(_dao) { + constructor(IDaoBase _daoBase) public DaoClient(_daoBase) { } /** @@ -27,10 +27,10 @@ contract ImpersonationCaller is DaoClient { address client = ECRecovery.recover(prefixedHash, _sig); // 2 - should be allowed to call action by a client - require(dao.isCanDoAction(client, _action)); + require(daoBase.isCanDoAction(client, _action)); // 3 - call - if(!address(dao).call( + if(!address(daoBase).call( bytes4(keccak256(abi.encodePacked(_methodSig))), uint256(32), // pointer to the length of the array uint256(_params.length), // length of the array diff --git a/contracts/governance/Voting.sol b/contracts/governance/Voting.sol index 69ad751..4cbc203 100644 --- a/contracts/governance/Voting.sol +++ b/contracts/governance/Voting.sol @@ -22,24 +22,24 @@ contract Voting is IVoting, Ownable { event DelegationRemoved(address _from, address _to); /* - * @param _dao – DAO where proposal was created. + * @param _daoBase – DAO where proposal was created. * @param _proposal – proposal, which create vote. * @param _origin – who create voting (group member). * @param _minutesToVote - if is zero -> voting until quorum reached, else voting finish after minutesToVote minutes * @param _quorumPercent - percent of group members to make quorum reached. If minutesToVote==0 and quorum reached -> voting is finished * @param _consensusPercent - percent of voters (not of group members!) to make consensus reached. If consensus reached -> voting is finished with YES result * @param _votingType – one of the voting type, see enum votingType - * @param _groupName – for votings that for dao group members only + * @param _groupName – for votings that for daoBase group members only * @param _tokenAddress – for votings that uses token amount of voter */ - constructor(IDaoBase _dao, IProposal _proposal, + constructor(IDaoBase _daoBase, IProposal _proposal, address _origin, VotingLib.VotingType _votingType, uint _minutesToVote, string _groupName, uint _quorumPercent, uint _consensusPercent, address _tokenAddress) public { store.generalConstructor( - _dao, + _daoBase, _proposal, _origin, _votingType, @@ -69,7 +69,7 @@ contract Voting is IVoting, Ownable { /** * @return name of group - * @dev for votings that for dao group members only + * @dev for votings that for daoBase group members only */ function groupName() public view returns(string) { return store.groupName; diff --git a/contracts/governance/VotingLib.sol b/contracts/governance/VotingLib.sol index 3752e87..d3c5a77 100644 --- a/contracts/governance/VotingLib.sol +++ b/contracts/governance/VotingLib.sol @@ -32,7 +32,7 @@ library VotingLib { } struct VotingStorage { - IDaoBase dao; + IDaoBase daoBase; IProposal proposal; address votingCreator; @@ -56,7 +56,7 @@ library VotingLib { function generalConstructor( VotingStorage storage store, - IDaoBase _dao, + IDaoBase _daoBase, IProposal _proposal, address _origin, VotingType _votingType, @@ -70,7 +70,7 @@ library VotingLib { require((_consensusPercent<=100)&&(_consensusPercent>0)); store.votingCreator = _origin; - store.dao = _dao; + store.daoBase = _daoBase; store.proposal = _proposal; store.minutesToVote = _minutesToVote; store.quorumPercent = _quorumPercent; @@ -91,17 +91,13 @@ library VotingLib { //libVote(store, _origin, true); } - function getNow() public view returns(uint) { - return block.timestamp; - } - /** * @param store storage instance address * @return number of total voters */ function getVotersTotal(VotingStorage storage store)public view returns(uint) { if(VotingType.Voting1p1v==store.votingType) { - return store.dao.getMembersCount(store.groupName); + return store.daoBase.getMembersCount(store.groupName); }else if(VotingType.VotingSimpleToken==store.votingType) { return StdDaoToken(store.tokenAddress).totalSupply(); }else if(VotingType.VotingQuadratic==store.votingType) { @@ -120,7 +116,7 @@ library VotingLib { */ function getPowerOf(VotingStorage storage store, address _voter)public view returns(uint) { if(VotingType.Voting1p1v==store.votingType) { - if(store.dao.isGroupMember(store.groupName, _voter)) { + if(store.daoBase.isGroupMember(store.groupName, _voter)) { return 1; }else { return 0; @@ -155,7 +151,7 @@ library VotingLib { require(!store.voted[msg.sender]); if(VotingType.Voting1p1v==store.votingType) { - require(store.dao.isGroupMember(store.groupName, _voter)); + require(store.daoBase.isGroupMember(store.groupName, _voter)); } store.votes[store.votesCount] = Vote(_voter, _isYes); diff --git a/contracts/moneyflow/DefaultMoneyflowScheme.sol b/contracts/moneyflow/DefaultMoneyflowScheme.sol index ec085af..719e6b0 100644 --- a/contracts/moneyflow/DefaultMoneyflowScheme.sol +++ b/contracts/moneyflow/DefaultMoneyflowScheme.sol @@ -48,10 +48,10 @@ contract DefaultMoneyflowScheme is DaoClient { ///// constructor( - IDaoBase _dao, + IDaoBase _daoBase, address _fundOutput, uint _percentsReserve, - uint _dividendsReserve) public DaoClient(_dao) + uint _dividendsReserve) public DaoClient(_daoBase) { require(0x0 != _fundOutput); @@ -109,7 +109,7 @@ contract DefaultMoneyflowScheme is DaoClient { // 0 - check if _employee is employee // TODO: WARNING!!!!!!!! Hard-coded type - require(dao.isGroupMember("Employees", _employee)); + require(daoBase.isGroupMember("Employees", _employee)); // 1 - employee already added? diff --git a/contracts/moneyflow/DefaultMoneyflowSchemeWithUnpackers.sol b/contracts/moneyflow/DefaultMoneyflowSchemeWithUnpackers.sol index 48f4400..31c8b57 100644 --- a/contracts/moneyflow/DefaultMoneyflowSchemeWithUnpackers.sol +++ b/contracts/moneyflow/DefaultMoneyflowSchemeWithUnpackers.sol @@ -6,11 +6,11 @@ import "./DefaultMoneyflowScheme.sol"; // TODO: contract DefaultMoneyflowSchemeWithUnpackers is DefaultMoneyflowScheme { constructor( - IDaoBase _dao, + IDaoBase _daoBase, address _fundOutput, uint _percentsReserve, uint _dividendsReserve) public - DefaultMoneyflowScheme(_dao,_fundOutput,_percentsReserve,_dividendsReserve) + DefaultMoneyflowScheme(_daoBase,_fundOutput,_percentsReserve,_dividendsReserve) { } diff --git a/contracts/moneyflow/Moneyflow.sol b/contracts/moneyflow/Moneyflow.sol index 169833f..83cfa94 100644 --- a/contracts/moneyflow/Moneyflow.sol +++ b/contracts/moneyflow/Moneyflow.sol @@ -36,8 +36,8 @@ contract MoneyFlow is IMoneyflow, DaoClient, Ownable { event MoneyFlowWithdrawDonations(address _by, address _to, uint _balance); event MoneyFlowSetRootWeiReceiver(address _sender, address _receiver); - constructor(IDaoBase _dao) public - DaoClient(_dao) + constructor(IDaoBase _daoBase) public + DaoClient(_daoBase) { // do not set output! donationEndpoint = new WeiRelativeExpenseWithPeriod(10000, 0, false); diff --git a/contracts/moneyflow/MoneyflowAuto.sol b/contracts/moneyflow/MoneyflowAuto.sol index 0ce2399..90bbf5d 100644 --- a/contracts/moneyflow/MoneyflowAuto.sol +++ b/contracts/moneyflow/MoneyflowAuto.sol @@ -25,8 +25,8 @@ contract MoneyflowAuto is GenericCaller { //bytes32 constant public SET_ROOT_WEI_RECEIVER = keccak256("setRootWeiReceiver"); bytes32 constant public SET_ROOT_WEI_RECEIVER = 0xcb02529cf7b85f6f804884cd47d35cf58a3ffbee0b87a019fe725b688923c627; - constructor(IDaoBase _dao, IMoneyflow _mf) public - GenericCaller(_dao) + constructor(IDaoBase _daoBase, IMoneyflow _mf) public + GenericCaller(_daoBase) { mf = _mf; } diff --git a/contracts/moneyflow/ether/WeiExpense.sol b/contracts/moneyflow/ether/WeiExpense.sol index 29f8db6..c096ad9 100644 --- a/contracts/moneyflow/ether/WeiExpense.sol +++ b/contracts/moneyflow/ether/WeiExpense.sol @@ -116,11 +116,6 @@ contract WeiExpense is IWeiReceiver, IDestination, Ownable { return percentsMul100; } - // TODO: remove from here - function getNow()public view returns(uint) { - return block.timestamp; - } - function flush()public onlyOwner { emit WeiExpenseFlush(owner, address(this).balance); owner.transfer(address(this).balance); diff --git a/contracts/tasks/TaskTable.sol b/contracts/tasks/TaskTable.sol index ffa9daa..ceb1d04 100644 --- a/contracts/tasks/TaskTable.sol +++ b/contracts/tasks/TaskTable.sol @@ -6,7 +6,7 @@ import "../IDaoBase.sol"; contract TaskTable { uint public elementsCount = 0; - IDaoBase dao; + IDaoBase daoBase; //bytes32 constant public START_TASK = keccak256("startTask"); bytes32 constant public START_TASK = 0x437e6b65d0608a0fe9c825ff4057ee9aef5baaa03f6eec7cf85e76e979099b12; @@ -85,12 +85,12 @@ contract TaskTable { } modifier isCanDo(bytes32 _what){ - require(dao.isCanDoAction(msg.sender,_what)); + require(daoBase.isCanDoAction(msg.sender,_what)); _; } - constructor(IDaoBase _dao) public { - dao = _dao; + constructor(IDaoBase _daoBase) public { + daoBase = _daoBase; } /** diff --git a/contracts/tasks/WeiBounty.sol b/contracts/tasks/WeiBounty.sol index f766dd9..8fc6900 100644 --- a/contracts/tasks/WeiBounty.sol +++ b/contracts/tasks/WeiBounty.sol @@ -12,8 +12,8 @@ contract WeiBounty is WeiGenericTask { bytes32 constant public START_BOUNTY = keccak256("startBounty"); - constructor(IDaoBase _dao, string _caption, string _desc, uint _neededWei, uint64 _deadlineTime, uint64 _timeToCancell) public - WeiGenericTask(_dao, _caption, _desc, false, false, _neededWei, _deadlineTime, _timeToCancell) + constructor(IDaoBase _daoBase, string _caption, string _desc, uint _neededWei, uint64 _deadlineTime, uint64 _timeToCancell) public + WeiGenericTask(_daoBase, _caption, _desc, false, false, _neededWei, _deadlineTime, _timeToCancell) { } diff --git a/contracts/tasks/WeiGenericTask.sol b/contracts/tasks/WeiGenericTask.sol index 29eb10a..0dc3fb8 100644 --- a/contracts/tasks/WeiGenericTask.sol +++ b/contracts/tasks/WeiGenericTask.sol @@ -26,7 +26,7 @@ import "../moneyflow/ether/WeiAbsoluteExpense.sol"; contract WeiGenericTask is WeiAbsoluteExpense { // use DaoClient instead? // (it will handle upgrades) - IDaoBase dao; + IDaoBase daoBase; address employee = 0x0; // who should complete this task and report on completion // this will be set later address output = 0x0; // where to send money (can be split later) @@ -89,19 +89,19 @@ contract WeiGenericTask is WeiAbsoluteExpense { /* modifier onlyAnyEmployeeOrOwner() { - require(dao.isEmployee(msg.sender) || msg.sender==owner); + require(daoBase.isEmployee(msg.sender) || msg.sender==owner); _; } */ modifier isCanDo(bytes32 _what) { - require(dao.isCanDoAction(msg.sender,_what)); + require(daoBase.isCanDoAction(msg.sender,_what)); _; } // if _neededWei==0 -> this is an 'Unknown cost' situation. use 'setNeededWei' method of WeiAbsoluteExpense constructor( - IDaoBase _dao, + IDaoBase _daoBase, string _caption, string _desc, bool _isPostpaid, @@ -123,7 +123,7 @@ contract WeiGenericTask is WeiAbsoluteExpense { } creationTime = block.timestamp; - dao = _dao; + daoBase = _daoBase; caption = _caption; desc = _desc; isPostpaid = _isPostpaid; diff --git a/contracts/tasks/WeiTask.sol b/contracts/tasks/WeiTask.sol index 2723f1e..2c815b0 100644 --- a/contracts/tasks/WeiTask.sol +++ b/contracts/tasks/WeiTask.sol @@ -11,8 +11,8 @@ contract WeiTask is WeiGenericTask { bytes32 constant public START_TASK = keccak256("startTask"); - constructor(IDaoBase _dao, string _caption, string _desc, bool _isPostpaid, bool _isDonation, uint _neededWei, uint64 _deadlineTime, uint64 _timeToCancell) public - WeiGenericTask(_dao, _caption, _desc, _isPostpaid, _isDonation, _neededWei, _deadlineTime, _timeToCancell) + constructor(IDaoBase _daoBase, string _caption, string _desc, bool _isPostpaid, bool _isDonation, uint _neededWei, uint64 _deadlineTime, uint64 _timeToCancell) public + WeiGenericTask(_daoBase, _caption, _desc, _isPostpaid, _isDonation, _neededWei, _deadlineTime, _timeToCancell) { } diff --git a/contracts/tokens/CopyOnWriteToken.sol b/contracts/tokens/CopyOnWriteToken.sol deleted file mode 100644 index 66aacca..0000000 --- a/contracts/tokens/CopyOnWriteToken.sol +++ /dev/null @@ -1,182 +0,0 @@ -pragma solidity ^0.4.21; - -import "zeppelin-solidity/contracts/token/ERC20/MintableToken.sol"; -import "zeppelin-solidity/contracts/token/ERC20/BurnableToken.sol"; - - -/** - * @title Copy-on-Write (CoW) token - * @dev Token that can preserve the balances after some EVENT happens (voting is started, didivends are calculated, etc) - * without blocking the transfers! - * - * Please notice that EVENT in this case has nothing to do with Ethereum events. - * - * Example of usage (pseudocode): - * token.mintFor(ADDRESS_A, 100); - * assert.equal(token.balanceOf(ADDRESS_A), 100); - * assert.equal(token.balanceOf(ADDRESS_B), 0); - * - * uint someEventID_1 = token.startEvent(); - * token.transfer(ADDRESS_A, ADDRESS_B, 30); - * - * assert.equal(token.balanceOf(ADDRESS_A), 70); - * assert.equal(token.balanceOf(ADDRESS_B), 30); - * - * assert.equal(token.getBalanceAtEvent(someEventID_1, ADDRESS_A), 100); - * assert.equal(token.getBalanceAtEvent(someEventID_1, ADDRESS_B), 0); -*/ -contract CopyOnWriteToken is MintableToken, BurnableToken { - struct Holder { - uint256 balance; - uint lastUpdateTime; - } - - struct Event { - mapping (address => Holder) holders; - - bool isEventInProgress; - uint eventStartTime; - } - - mapping (uint => Event) events; - - event EventStarted(address indexed _address, uint _eventID); - event EventFinished(address indexed _address, uint _eventID); - - // ERC20 interface overrides - /** - * @notice This function should be called only when token not paused - * @param _to address - * @param _value amount of tokens which will be transfered - * @return true - */ - function transfer(address _to, uint256 _value) public returns (bool) { - updateCopyOnWriteMaps(msg.sender, _to); - return super.transfer(_to, _value); - } - - /** - * @notice This function should be called only when token not paused - * @param _from address - * @param _to address - * @param _value amount of tokens which will be transfered - * @return true - */ - function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { - updateCopyOnWriteMaps(_from, _to); - return super.transferFrom(_from, _to, _value); - } - - // MintableToken override - /** - * @notice This function should be called only by owner - * @param _to address - * @param _amount amount of tokens which will be minted - * @return true - */ - function mint(address _to, uint256 _amount) canMint onlyOwner public returns(bool) { - updateCopyOnWriteMap(_to); - return super.mint(_to, _amount); - } - -// BurnableToken override - // @dev This is an override of internal method! public method burn() calls _burn() automatically - // (see BurnableToken implementation) - /** - * @notice This function should be called only by owner - * @param _who address - * @param _value amount of tokens which will be burned - */ - function _burn(address _who, uint256 _value) internal { - updateCopyOnWriteMap(_who); - super._burn(_who, _value); - } - -//// - // TODO: onlyOwner! - /** - * @return index of the new event - * @dev should be called when new voting created - */ - function startNewEvent() public returns(uint) { - for(uint i = 0; i < 20; i++) { - if(!events[i].isEventInProgress) { - events[i].isEventInProgress = true; - events[i].eventStartTime = block.timestamp; - - emit EventStarted(msg.sender, i); - return i; - } - } - revert(); //all slots busy at the moment - } - - // TODO: onlyOwner! - /** - * @dev should be called when voting finished and dont need slot anymore - */ - function finishEvent(uint _eventID) public { - require(events[_eventID].isEventInProgress); - events[_eventID].isEventInProgress = false; - - emit EventFinished(msg.sender, _eventID); - } - - /** - * @param _eventID id of voting - * @param _for account - * @return balance for account _for before starting voting - */ - function getBalanceAtEventStart(uint _eventID, address _for) public view returns(uint256) { - require(events[_eventID].isEventInProgress); - - if(!isBalanceWasChangedAfterEventStarted(_eventID, _for)) { - return balances[_for]; - } - - return events[_eventID].holders[_for].balance; - } - -// Internal methods: - /** - * @param _from account - * @param _to account - * @dev updates balances of the accounts before transfer - */ - function updateCopyOnWriteMaps(address _from, address _to) internal { - updateCopyOnWriteMap(_to); - updateCopyOnWriteMap(_from); - } - - /** - * @param _for account - * @dev updates balances of the accounts before transfer - */ - function updateCopyOnWriteMap(address _for) internal { - for(uint i = 0; i < 20; i++) { - bool res = isNeedToUpdateBalancesMap(i, _for); - if(res) { - events[i].holders[_for].balance = balances[_for]; - events[i].holders[_for].lastUpdateTime = block.timestamp; - } - } - } - - /** - * @param _eventID event(voting) id - * @param _for account - * @return true if balances map needs to be updated, when balances changed after voting started - */ - function isNeedToUpdateBalancesMap(uint _eventID, address _for) internal returns(bool) { - return events[_eventID].isEventInProgress && !isBalanceWasChangedAfterEventStarted(_eventID, _for); - } - - /** - * @param _eventID event(voting) id - * @param _for account - * @return true if balances changed after voting started - */ - function isBalanceWasChangedAfterEventStarted(uint _eventID, address _for) internal view returns(bool) { - return (events[_eventID].holders[_for].lastUpdateTime >= events[_eventID].eventStartTime); - } -} diff --git a/contracts/tokens/PreserveBalancesOnTransferToken.sol b/contracts/tokens/PreserveBalancesOnTransferToken.sol new file mode 100644 index 0000000..973181b --- /dev/null +++ b/contracts/tokens/PreserveBalancesOnTransferToken.sol @@ -0,0 +1,260 @@ +pragma solidity ^0.4.24; + +import "zeppelin-solidity/contracts/token/ERC20/MintableToken.sol"; +import "zeppelin-solidity/contracts/token/ERC20/BurnableToken.sol"; +import "./SnapshotToken.sol"; + + +/** + * @title PreserveBalancesOnTransferToken (Copy-on-Write) token + * @author Based on code by Thetta DAO Framework: https://github.com/Thetta/Thetta-DAO-Framework/ + * @dev Token that can preserve the balances after some EVENT happens (voting is started, didivends are calculated, etc) + * without blocking the transfers! Please notice that EVENT in this case has nothing to do with Ethereum events. + * + * Example of usage1 (pseudocode): + * PreserveBalancesOnTransferToken token; + * + * token.mint(ADDRESS_A, 100); + * assert.equal(token.balanceOf(ADDRESS_A), 100); + * assert.equal(token.balanceOf(ADDRESS_B), 0); + * + * SnapshotToken snapshot = token.createNewSnapshot(); + * token.transfer(ADDRESS_A, ADDRESS_B, 30); + * + * assert.equal(token.balanceOf(ADDRESS_A), 70); + * assert.equal(token.balanceOf(ADDRESS_B), 30); + * + * assert.equal(snapshot.balanceOf(ADDRESS_A), 100); + * assert.equal(snapshot.balanceOf(ADDRESS_B), 0); + * + * token.stopSnapshot(snapshot); + * + * Example of usage2 (pseudocode): + * PreserveBalancesOnTransferToken token; + * + * token.mint(ADDRESS_A, 100); + * assert.equal(token.balanceOf(ADDRESS_A), 100); + * assert.equal(token.balanceOf(ADDRESS_B), 0); + * + * uint someEventID_1 = token.startNewEvent(); + * token.transfer(ADDRESS_A, ADDRESS_B, 30); + * + * assert.equal(token.balanceOf(ADDRESS_A), 70); + * assert.equal(token.balanceOf(ADDRESS_B), 30); + * + * assert.equal(token.getBalanceAtEvent(someEventID_1, ADDRESS_A), 100); + * assert.equal(token.getBalanceAtEvent(someEventID_1, ADDRESS_B), 0); + * + * token.finishEvent(someEventID_1); +*/ +contract PreserveBalancesOnTransferToken is MintableToken, BurnableToken { + struct Holder { + uint256 balance; + uint lastUpdateTime; + } + + struct Event { + mapping (address => Holder) holders; + bool isEventInProgress; + uint eventStartTime; + } + Event[] events; + SnapshotToken[] snapshotTokens; + + event EventStarted(address indexed _address, uint _eventID); + event EventFinished(address indexed _address, uint _eventID); + event SnapshotCreated(address indexed _snapshotTokenAddress); + + modifier onlyFromSnapshotOrOwner() { + require((msg.sender == owner) || isFromSnapshot(msg.sender)); + _; + } + + // BasicToken overrides: + /** + * @dev Transfer token for a specified address + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) public returns (bool) { + updateCopyOnWriteMaps(msg.sender, _to); + return super.transfer(_to, _value); + } + + // StandardToken overrides: + /** + * @dev Transfer tokens from one address to another + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) + public returns (bool) + { + updateCopyOnWriteMaps(_from, _to); + return super.transferFrom(_from, _to, _value); + } + + // MintableToken overrides: + /** + * @dev Function to mint tokens + * @param _to The address that will receive the minted tokens. + * @param _amount The amount of tokens to mint. + * @return A boolean that indicates if the operation was successful. + */ + function mint(address _to, uint256 _amount) public canMint onlyOwner + returns(bool) + { + updateCopyOnWriteMap(_to); + return super.mint(_to, _amount); + } + + // PreserveBalancesOnTransferToken - new methods: + /** + * @dev Creates new ERC20 balances snapshot. + * In this case SnapshotToken is an easy way to get the balances + * using the standard 'balanceOf' method instead of getBalanceAtEventStart() + * @return Address of the new created snapshot ERC20 token. + */ + function createNewSnapshot() public onlyOwner returns(address) { + SnapshotToken st = new SnapshotToken(this); + + snapshotTokens.push(st); + // will call back this.startNewEvent(); + st.start(); + + emit SnapshotCreated(st); + return st; + } + + /** + * @dev End working with the ERC20 balances snapshot + * @param _st The SnapshotToken that was created with 'createNewSnapshot' + * method before + */ + function stopSnapshot(SnapshotToken _st) public onlyOwner { + // will call back this.finishEvent(); + _st.finish(); + } + + /** + * @dev Function to signal that some event happens (dividends are calculated, voting, etc) + * so we need to start preserving balances AT THE time this event happened. + * @return An index of the event started. + */ + function startNewEvent() external onlyFromSnapshotOrOwner returns(uint) { + return _startNewEvent(); + } + + function _startNewEvent() internal returns(uint) { + // check if we have empty slots + for (uint i = 0; i < events.length; ++i) { + if (!events[i].isEventInProgress) { + events[i].isEventInProgress = true; + events[i].eventStartTime = now; + + emit EventStarted(msg.sender, i); + return i; + } + } + + // create new event and add to the tail + Event e; + e.isEventInProgress = true; + e.eventStartTime = now; + events.push(e); + + emit EventStarted(msg.sender, events.length - 1); + return (events.length - 1); + } + + /** + * @dev Function to signal that some event is finished + * @param _eventID An index of the event that was previously returned by startNewEvent(). + */ + function finishEvent(uint _eventID) external onlyFromSnapshotOrOwner { + _finishEvent(_eventID); + } + + function _finishEvent(uint _eventID) internal { + require(_eventID < events.length); + require(events[_eventID].isEventInProgress); + + // TODO: check that we are from the snapshot + + events[_eventID].isEventInProgress = false; + + emit EventFinished(msg.sender, _eventID); + } + + /** + * @dev Returns the balance of the address _for at the time event _eventID happened + * !!! WARNING !!! + * We do not give STRONG guarantees. The return value is time-dependent: + * If startNewEvent() and then getBalanceAtEventStart() -> it CAN return wrong data + * In case time between these calls has passed -> the return value is ALWAYS correct. + * + * Please see tests. + * return Token balance (when the event started, but not a CURRENT balanceOf()!) + */ + function getBalanceAtEventStart(uint _eventID, address _for) + public view returns(uint256) + { + require(_eventID < events.length); + require(events[_eventID].isEventInProgress); + + if (!isBalanceWasChangedAfterEventStarted(_eventID, _for)) { + return balances[_for]; + } + + return events[_eventID].holders[_for].balance; + } + + // BurnableToken overrides: + /** @dev This is an override of internal method! Public method burn() calls _burn() automatically + * (see BurnableToken implementation) + */ + function _burn(address _who, uint256 _value) internal { + updateCopyOnWriteMap(_who); + super._burn(_who, _value); + } + + // Internal methods: + function updateCopyOnWriteMaps(address _from, address _to) internal { + updateCopyOnWriteMap(_to); + updateCopyOnWriteMap(_from); + } + + function updateCopyOnWriteMap(address _for) internal { + for (uint i = 0; i < events.length; ++i) { + bool res = isNeedToUpdateBalancesMap(i, _for); + if (res) { + events[i].holders[_for].balance = balances[_for]; + events[i].holders[_for].lastUpdateTime = now; + } + } + } + + function isNeedToUpdateBalancesMap(uint _eventID, address _for) + internal view returns(bool) + { + return (events[_eventID].isEventInProgress && + !isBalanceWasChangedAfterEventStarted(_eventID, _for)); + } + + function isBalanceWasChangedAfterEventStarted(uint _eventID, address _for) + internal view returns(bool) + { + return (events[_eventID].holders[_for].lastUpdateTime >= + events[_eventID].eventStartTime); + } + + function isFromSnapshot(address _a) internal view returns(bool) { + for (uint i = 0; i < snapshotTokens.length; ++i) { + if (snapshotTokens[i] == _a) { + return true; + } + } + return false; + } +} diff --git a/contracts/tokens/SnapshotToken.sol b/contracts/tokens/SnapshotToken.sol new file mode 100644 index 0000000..9d51f4f --- /dev/null +++ b/contracts/tokens/SnapshotToken.sol @@ -0,0 +1,80 @@ +pragma solidity ^0.4.24; + +import "zeppelin-solidity/contracts/token/ERC20/StandardToken.sol"; +import "zeppelin-solidity/contracts/ownership/Ownable.sol"; + +import "./PreserveBalancesOnTransferToken.sol"; + + +/** + * @title SnapshotToken + * @author Based on code by Thetta DAO Framework: https://github.com/Thetta/Thetta-DAO-Framework/ + * @dev Wapper to use snapshot.balanceOf() instead of token.getBalanceAtEventStart() + * Should not be created directly. Please use PreserveBalancesOnTransferToken.createNewSnapshot() method +*/ +contract SnapshotToken is StandardToken, Ownable { + PreserveBalancesOnTransferToken public pbott; + uint public snapshotID = 0; + bool isStarted = false; + + constructor(PreserveBalancesOnTransferToken _pbott) public { + pbott = _pbott; + } + + // BasicToken overrides: + /** + * @dev Gets the balance of the specified address. + * @param _owner The address to query the the balance of. + * @return An uint256 representing the amount owned by the passed address. + */ + function balanceOf(address _owner) public view returns (uint256) { + return pbott.getBalanceAtEventStart(snapshotID, _owner); + } + + /** + * @dev Transfer token for a specified address. Blocked! + * @param _to The address to transfer to. + * @param _value The amount to be transferred. + */ + function transfer(address _to, uint256 _value) public returns (bool) { + revert(); + return false; + } + + // StandardToken overrides: + /** + * @dev Transfer tokens from one address to another. Blocked! + * @param _from address The address which you want to send tokens from + * @param _to address The address which you want to transfer to + * @param _value uint256 the amount of tokens to be transferred + */ + function transferFrom(address _from, address _to, uint256 _value) + public returns (bool) + { + revert(); + return false; + } + + // New methods: + /** + * @dev Should be called automatically from the PreserveBalancesOnTransferToken + */ + function start() public { + require(pbott == msg.sender); + require(!isStarted); + + snapshotID = pbott.startNewEvent(); + isStarted = true; + } + + /** + * @dev Should be called automatically from the PreserveBalancesOnTransferToken + */ + function finish() public { + require(pbott == msg.sender); + require(isStarted); + + pbott.finishEvent(snapshotID); + } +} + diff --git a/contracts/tokens/StdDaoToken.sol b/contracts/tokens/StdDaoToken.sol index c9221a4..ca2ff04 100644 --- a/contracts/tokens/StdDaoToken.sol +++ b/contracts/tokens/StdDaoToken.sol @@ -3,7 +3,7 @@ pragma solidity ^0.4.22; import "zeppelin-solidity/contracts/token/ERC20/PausableToken.sol"; import "zeppelin-solidity/contracts/token/ERC20/DetailedERC20.sol"; -import "./CopyOnWriteToken.sol"; +import "./PreserveBalancesOnTransferToken.sol"; import "./ITokenVotingSupport.sol"; import "../utils/UtilsLib.sol"; @@ -26,7 +26,7 @@ import "../utils/UtilsLib.sol"; * finishVoting() * getBalanceAtVoting() */ -contract StdDaoToken is DetailedERC20, PausableToken, CopyOnWriteToken, ITokenVotingSupport { +contract StdDaoToken is DetailedERC20, PausableToken, PreserveBalancesOnTransferToken, ITokenVotingSupport { uint256 public cap; bool isBurnable; bool isPausable; @@ -66,7 +66,7 @@ contract StdDaoToken is DetailedERC20, PausableToken, CopyOnWriteToken, ITokenVo * @dev should be called when voting started for conservation balances during this voting */ function startNewVoting() public whenNotPaused returns(uint) { - uint idOut = super.startNewEvent(); + uint idOut = super._startNewEvent(); emit VotingStarted(msg.sender, idOut); return idOut; } @@ -79,7 +79,7 @@ contract StdDaoToken is DetailedERC20, PausableToken, CopyOnWriteToken, ITokenVo * @dev update balances from conservation after voting finish */ function finishVoting(uint _votingID) whenNotPaused public { - super.finishEvent(_votingID); + super._finishEvent(_votingID); emit VotingFinished(msg.sender, _votingID); } diff --git a/contracts/utils/GenericCaller.sol b/contracts/utils/GenericCaller.sol index d169661..575a21e 100644 --- a/contracts/utils/GenericCaller.sol +++ b/contracts/utils/GenericCaller.sol @@ -21,9 +21,9 @@ contract GenericCaller is DaoClient, Ownable { GenericCallerLib.GenericCallerStorage store; // DaoClient (for example) helps us to handle DaoBase upgrades - // and will automatically update the 'dao' to the new instance - constructor(IDaoBase _dao)public DaoClient(_dao) { - store.dao = _dao; + // and will automatically update the 'daoBase' to the new instance + constructor(IDaoBase _daoBase)public DaoClient(_daoBase) { + store.daoBase = _daoBase; } // _actionId is something like "issueTokens" diff --git a/contracts/utils/GenericCallerLib.sol b/contracts/utils/GenericCallerLib.sol index 13b50c4..7c19497 100644 --- a/contracts/utils/GenericCallerLib.sol +++ b/contracts/utils/GenericCallerLib.sol @@ -12,7 +12,7 @@ library GenericCallerLib { event GenericCallerCreateNewProposal(bytes32 _permissionId, address _target, address _origin, string _methodSig); struct GenericCallerStorage { - IDaoBase dao; + IDaoBase daoBase; mapping (bytes32=>VotingParams) votingParams; } @@ -33,7 +33,7 @@ library GenericCallerLib { string _methodSig, bytes32[] _params) internal returns(address proposalOut) { - if(store.dao.isCanDoAction(msg.sender, _permissionId)) { + if(store.daoBase.isCanDoAction(msg.sender, _permissionId)) { emit GenericCallerDoActionDirectly( _permissionId, _target, @@ -69,7 +69,7 @@ library GenericCallerLib { // 3 - add the proposal // WARNING: should be permitted to add new proposal by the current contract address!!! // check your permissions or see examples (tests) how to do that correctly - store.dao.addNewProposal(prop); + store.daoBase.addNewProposal(prop); // 4 - do first vote // voting can be finished immediately and action can be called right here -> @@ -108,7 +108,7 @@ library GenericCallerLib { VotingParams memory vp = store.votingParams[_permissionIdHash]; IVoting v = new Voting( - store.dao, + store.daoBase, _proposal, _origin, vp.votingType, @@ -121,8 +121,4 @@ library GenericCallerLib { return v; } - - function bytes32ToString(bytes32 x) public pure returns (string) { - return UtilsLib.bytes32ToString(x); - } } diff --git a/migrations/2_deploy_contracts_libraries.js b/migrations/2_deploy_contracts_libraries.js new file mode 100644 index 0000000..9edda36 --- /dev/null +++ b/migrations/2_deploy_contracts_libraries.js @@ -0,0 +1,5 @@ +var migrateLibs = require('../scripts/migrateLibs'); + +module.exports = function (deployer, network, accounts) { + return migrateLibs(artifacts, [], deployer, network, accounts); +}; diff --git a/migrations/2_deploy_contracts_utilsLib.js b/migrations/2_deploy_contracts_utilsLib.js deleted file mode 100644 index 4133db1..0000000 --- a/migrations/2_deploy_contracts_utilsLib.js +++ /dev/null @@ -1,32 +0,0 @@ -var UtilsLib = artifacts.require("./UtilsLib"); - -//var DaoBase = artifacts.require("./DaoBase"); -var DaoBaseImpersonated = artifacts.require("./DaoBaseImpersonated"); -var DaoBaseWithUnpackers = artifacts.require("./DaoBaseWithUnpackers"); -var GenericCaller = artifacts.require("./GenericCaller"); -var GenericCallerLib = artifacts.require("./GenericCallerLib"); -var MoneyflowAuto = artifacts.require("./MoneyflowAuto"); -var Voting = artifacts.require("./Voting"); -var VotingLib = artifacts.require("./VotingLib"); -var DaoBaseAuto = artifacts.require("./DaoBaseAuto"); -var DaoBaseWithUnpackersMock = artifacts.require("./DaoBaseWithUnpackersMock"); -var DaoStorage = artifacts.require("./DaoStorage"); -var DaoBaseMock = artifacts.require("./DaoBaseMock"); -var StdDaoToken = artifacts.require("./StdDaoToken"); - -module.exports = function (deployer) { - deployer.deploy(UtilsLib).then(() => { - deployer.link(UtilsLib, DaoBaseImpersonated); - deployer.link(UtilsLib, DaoBaseWithUnpackers); - deployer.link(UtilsLib, GenericCaller); - deployer.link(UtilsLib, VotingLib); - // deployer.link(UtilsLib, MoneyflowAuto); - deployer.link(UtilsLib, DaoBaseAuto); - deployer.link(UtilsLib, DaoBaseWithUnpackersMock); - deployer.link(UtilsLib, DaoBaseMock); - deployer.link(UtilsLib, DaoStorage); - deployer.link(UtilsLib, StdDaoToken); - // deployer.link(UtilsLib, Voting); - // deployer.link(UtilsLib, VotingLib); - }); -}; diff --git a/migrations/3_deploy_contracts_votingLib.js b/migrations/3_deploy_contracts_votingLib.js deleted file mode 100644 index ae6cefc..0000000 --- a/migrations/3_deploy_contracts_votingLib.js +++ /dev/null @@ -1,17 +0,0 @@ -var DaoBaseWithUnpackers = artifacts.require("./DaoBaseWithUnpackers"); -var GenericCaller = artifacts.require("./GenericCaller"); -var GenericCallerLib = artifacts.require("./GenericCallerLib"); -var MoneyflowAuto = artifacts.require("./MoneyflowAuto"); -var Voting = artifacts.require("./Voting"); -var VotingLib = artifacts.require("./VotingLib"); -var DaoBaseAuto = artifacts.require("./DaoBaseAuto"); - -module.exports = function (deployer) { - deployer.deploy(VotingLib).then(() => { - deployer.link(VotingLib, Voting); - deployer.link(VotingLib, GenericCaller); - deployer.link(VotingLib, GenericCallerLib); - deployer.link(VotingLib, MoneyflowAuto); - deployer.link(VotingLib, DaoBaseAuto); - }); -}; diff --git a/migrations/4_deploy_contracts_genericCallerLib.js b/migrations/4_deploy_contracts_genericCallerLib.js deleted file mode 100644 index 3687713..0000000 --- a/migrations/4_deploy_contracts_genericCallerLib.js +++ /dev/null @@ -1,19 +0,0 @@ - -//var DaoBase = artifacts.require("./DaoBase"); -var DaoBaseWithUnpackers = artifacts.require("./DaoBaseWithUnpackers"); -var GenericCaller = artifacts.require("./GenericCaller"); -var GenericCallerLib = artifacts.require("./GenericCallerLib"); -var MoneyflowAuto = artifacts.require("./MoneyflowAuto"); -var DaoBaseAuto = artifacts.require("./DaoBaseAuto"); -var Voting = artifacts.require("./Voting"); -var VotingLib = artifacts.require("./VotingLib"); - -module.exports = function (deployer) { - deployer.deploy(GenericCallerLib).then(() => { - //deployer.link(ConversionLib, DaoBase); - // deployer.link(ConversionLib, DaoBaseWithUnpackers) - deployer.link(GenericCallerLib, GenericCaller); - deployer.link(GenericCallerLib, MoneyflowAuto); - deployer.link(GenericCallerLib, DaoBaseAuto); - }); -}; diff --git a/migrations/5_deploy_contracts_daoLib.js b/migrations/5_deploy_contracts_daoLib.js deleted file mode 100644 index 9731181..0000000 --- a/migrations/5_deploy_contracts_daoLib.js +++ /dev/null @@ -1,15 +0,0 @@ -var DaoBaseLib = artifacts.require("./DaoBaseLib"); -var DaoBase = artifacts.require("./DaoBase"); -var DaoBaseWithUnpackers = artifacts.require("./DaoBaseWithUnpackers"); -var DaoBaseWithUnpackersMock = artifacts.require("./DaoBaseWithUnpackersMock"); -var DaoBaseMock = artifacts.require("./DaoBaseMock"); - -module.exports = function (deployer) { - deployer.deploy(DaoBaseLib).then(() => { - deployer.link(DaoBaseLib, DaoBase); - deployer.link(DaoBaseLib, DaoBaseWithUnpackers); - deployer.link(DaoBaseLib, DaoBaseWithUnpackersMock); - deployer.link(DaoBaseLib, DaoBaseMock); - }); -}; - diff --git a/package-lock.json b/package-lock.json index 96d4a79..81b26e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@thetta/core", - "version": "1.2.0", + "version": "1.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/code-frame": { "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", + "resolved": "http://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", "requires": { "@babel/highlight": "7.0.0-beta.44" @@ -14,7 +14,7 @@ }, "@babel/generator": { "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", + "resolved": "http://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", "requires": { "@babel/types": "7.0.0-beta.44", @@ -33,7 +33,7 @@ }, "@babel/helper-function-name": { "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", "requires": { "@babel/helper-get-function-arity": "7.0.0-beta.44", @@ -43,7 +43,7 @@ }, "@babel/helper-get-function-arity": { "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", "requires": { "@babel/types": "7.0.0-beta.44" @@ -51,7 +51,7 @@ }, "@babel/helper-split-export-declaration": { "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", + "resolved": "http://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", "requires": { "@babel/types": "7.0.0-beta.44" @@ -59,7 +59,7 @@ }, "@babel/highlight": { "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", + "resolved": "http://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", "requires": { "chalk": "^2.0.0", @@ -69,25 +69,18 @@ }, "@babel/template": { "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", + "resolved": "http://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", "requires": { "@babel/code-frame": "7.0.0-beta.44", "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", "lodash": "^4.2.0" - }, - "dependencies": { - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==" - } } }, "@babel/traverse": { "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", + "resolved": "http://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", "requires": { "@babel/code-frame": "7.0.0-beta.44", @@ -102,29 +95,29 @@ "lodash": "^4.2.0" }, "dependencies": { - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==" - }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz", + "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "globals": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz", - "integrity": "sha512-hYyf+kI8dm3nORsiiXUQigOU62hDLfJ9G01uyGMxhc6BKsircrUhC4uJPQPUSuq2GrTmiiEt7ewxlMdBewfmKQ==" + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", + "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==" + }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" } } }, "@babel/types": { "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", + "resolved": "http://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", "requires": { "esutils": "^2.0.2", @@ -139,20 +132,6 @@ } } }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", - "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" - } - }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" - }, "@types/concat-stream": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz", @@ -289,7 +268,8 @@ "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "optional": true }, "ansi-escapes": { "version": "3.1.0", @@ -309,11 +289,6 @@ "color-convert": "^1.9.0" } }, - "any-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.2.0.tgz", - "integrity": "sha1-xnhwBYADV5AJCD9UrAq6+1wz0kI=" - }, "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", @@ -420,11 +395,6 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=" - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -506,11 +476,6 @@ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, - "ast-types": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", - "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==" - }, "async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", @@ -612,23 +577,16 @@ } }, "babel-eslint": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.3.tgz", - "integrity": "sha512-0HeSTtaXg/Em7FCUWxwOT+KeFSO1O7LuRuzhk7g+1BjwdlQGlHq4OyMi3GqGxrNfEq8jEi6Hmt5ylEQUhurgiQ==", + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", + "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", "requires": { "@babel/code-frame": "7.0.0-beta.44", "@babel/traverse": "7.0.0-beta.44", "@babel/types": "7.0.0-beta.44", "babylon": "7.0.0-beta.44", - "eslint-scope": "~3.7.1", + "eslint-scope": "3.7.1", "eslint-visitor-keys": "^1.0.0" - }, - "dependencies": { - "babylon": { - "version": "7.0.0-beta.44", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", - "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==" - } } }, "babel-generator": { @@ -653,26 +611,6 @@ } } }, - "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.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "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.22.0", - "babel-types": "^6.24.1" - } - }, "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", @@ -695,27 +633,6 @@ "lodash": "^4.17.4" } }, - "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.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "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.22.0", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, "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", @@ -765,18 +682,6 @@ "lodash": "^4.17.4" } }, - "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.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, "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", @@ -844,114 +749,6 @@ "babel-runtime": "^6.22.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-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-flow": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz", - "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=" - }, - "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.5.0", - "babel-runtime": "^6.22.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.8.0", - "babel-runtime": "^6.22.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.22.0", - "babel-template": "^6.24.1" - } - }, - "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.8.0", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1" - } - }, - "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.22.0", - "babel-template": "^6.24.1", - "babel-types": "^6.24.1" - } - }, "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", @@ -1164,43 +961,6 @@ "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.8.0", - "babel-runtime": "^6.22.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.8.0", - "babel-runtime": "^6.22.0" - } - }, - "babel-plugin-transform-flow-strip-types": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz", - "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=", - "requires": { - "babel-plugin-syntax-flow": "^6.18.0", - "babel-runtime": "^6.22.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.8.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", @@ -1274,39 +1034,6 @@ "babel-plugin-transform-regenerator": "^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.22.0" - } - }, "babel-register": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", @@ -1394,9 +1121,9 @@ } }, "babylon": { - "version": "7.0.0-beta.46", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.46.tgz", - "integrity": "sha512-WFJlg2WatdkXRFMpk7BN/Uzzkjkcjk+WaqnrSCpay+RYl4ypW9ZetZyT9kNt22IH/BQNst3M6PaaBn9IXsUNrg==" + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==" }, "balanced-match": { "version": "1.0.0", @@ -1486,11 +1213,6 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" }, - "binaryextensions": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/binaryextensions/-/binaryextensions-2.1.1.tgz", - "integrity": "sha512-XBaoWE9RW8pPdPQNibZsW2zh8TW6gcarXp1FZPwT8Uop8ScSNldJEWf2k9l3HeTqdrEwsOsFcq74RiJECW34yA==" - }, "bn.js": { "version": "4.11.8", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", @@ -1661,32 +1383,6 @@ "unset-value": "^1.0.0" } }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" - } - } - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" - }, "caller-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", @@ -1761,9 +1457,9 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" } @@ -1771,9 +1467,9 @@ } }, "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "check-error": { "version": "1.0.2", @@ -1862,26 +1558,6 @@ "restore-cursor": "^2.0.0" } }, - "cli-spinners": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-0.1.2.tgz", - "integrity": "sha1-u3ZNiOGF+54eaiofGXcjGPYF4xw=" - }, - "cli-table": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cli-table/-/cli-table-0.3.1.tgz", - "integrity": "sha1-9TsFJmqLGguTSz0IIebi3FkUriM=", - "requires": { - "colors": "1.0.3" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=" - } - } - }, "cli-table3": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", @@ -1892,27 +1568,6 @@ "string-width": "^2.1.1" } }, - "cli-truncate": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", - "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=", - "requires": { - "slice-ansi": "0.0.4", - "string-width": "^1.0.1" - }, - "dependencies": { - "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.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - } - } - }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", @@ -1935,39 +1590,6 @@ } } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=" - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=" - }, - "cloneable-readable": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", - "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -1988,11 +1610,11 @@ } }, "color-convert": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", - "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "color-name": "^1.1.1" + "color-name": "1.1.3" } }, "color-name": { @@ -2137,11 +1759,13 @@ } }, "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "requires": { - "lru-cache": "^4.0.1", + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" } @@ -2169,11 +1793,6 @@ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.1.8.tgz", "integrity": "sha1-cV8HC/YBTyrpkqmLOSkli3E/CNU=" }, - "dargs": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-5.1.0.tgz", - "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=" - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -2182,21 +1801,11 @@ "assert-plus": "^1.0.0" } }, - "date-fns": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", - "integrity": "sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==" - }, "date-now": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=" }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==" - }, "death": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/death/-/death-1.1.0.tgz", @@ -2220,14 +1829,6 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, - "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" - } - }, "deep-eql": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", @@ -2236,25 +1837,11 @@ "type-detect": "^4.0.0" } }, - "deep-extend": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.5.1.tgz", - "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==" - }, "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=" }, - "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.8" - } - }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", @@ -2309,21 +1896,6 @@ "pify": "^2.0.0", "pinkie-promise": "^2.0.0", "rimraf": "^2.2.8" - }, - "dependencies": { - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "requires": { - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - } } }, "delayed-stream": { @@ -2340,11 +1912,6 @@ "minimalistic-assert": "^1.0.0" } }, - "detect-conflict": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/detect-conflict/-/detect-conflict-1.0.1.tgz", - "integrity": "sha1-CIZXpmqWHAUBnbfEIwiDsca0F24=" - }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", @@ -2368,30 +1935,6 @@ "randombytes": "^2.0.0" } }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - }, - "dependencies": { - "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=" - } - } - }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2400,16 +1943,20 @@ "esutils": "^2.0.2" } }, + "docusaurus-init": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/docusaurus-init/-/docusaurus-init-1.0.2.tgz", + "integrity": "sha512-vfGstxIL5gK8/PCcGS+gY8MG4iw3fvnzpb3zOsG1kxHTJRekvebKd2x2Y/SPFt38jX15ZjDezrwi7YZX7/DggA==", + "requires": { + "chalk": "^2.1.0", + "shelljs": "^0.7.8" + } + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" }, - "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", @@ -2419,21 +1966,6 @@ "jsbn": "~0.1.0" } }, - "editions": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", - "integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg==" - }, - "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==" - }, - "elegant-spinner": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz", - "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=" - }, "elliptic": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz", @@ -2464,10 +1996,10 @@ "tapable": "^0.2.7" } }, - "envinfo": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-4.4.2.tgz", - "integrity": "sha512-5rfRs+m+6pwoKRCFqpsA5+qsLngFms1aWPrxfKbrObCzQaPc3M3yPloZx+BL9UE3dK58cxw36XVQbFRSCCfGSQ==" + "eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==" }, "errno": { "version": "0.1.7", @@ -2477,15 +2009,6 @@ "prr": "~1.0.1" } }, - "error": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", - "integrity": "sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI=", - "requires": { - "string-template": "~0.2.1", - "xtend": "~4.0.0" - } - }, "error-ex": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", @@ -2494,28 +2017,6 @@ "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "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.1", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.1" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2555,12 +2056,12 @@ } }, "eslint": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.2.0.tgz", - "integrity": "sha512-zlggW1qp7/TBjwLfouRoY7eWXrXwJZFqCdIxxh0/LVB/QuuKuIMkzyUZEcDo6LBadsry5JcEMxIqd3H/66CXVg==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.6.0.tgz", + "integrity": "sha512-/eVYs9VVVboX286mBK7bbKnO1yamUy2UCRjiY6MryhQL2PaaXCExsCQ2aO83OeYRhU2eCU/FMFP+tVMoOrzNrA==", "requires": { - "ajv": "^6.5.0", - "babel-code-frame": "^6.26.0", + "@babel/code-frame": "^7.0.0", + "ajv": "^6.5.3", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^3.1.0", @@ -2575,11 +2076,11 @@ "functional-red-black-tree": "^1.0.1", "glob": "^7.1.2", "globals": "^11.7.0", - "ignore": "^4.0.2", + "ignore": "^4.0.6", "imurmurhash": "^0.1.4", - "inquirer": "^5.2.0", + "inquirer": "^6.1.0", "is-resolvable": "^1.1.0", - "js-yaml": "^3.11.0", + "js-yaml": "^3.12.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", "lodash": "^4.17.5", @@ -2590,50 +2091,55 @@ "path-is-inside": "^1.0.2", "pluralize": "^7.0.0", "progress": "^2.0.0", - "regexpp": "^1.1.0", + "regexpp": "^2.0.0", "require-uncached": "^1.0.3", - "semver": "^5.5.0", - "string.prototype.matchall": "^2.0.0", + "semver": "^5.5.1", "strip-ansi": "^4.0.0", "strip-json-comments": "^2.0.1", "table": "^4.0.3", "text-table": "^0.2.0" }, "dependencies": { - "ajv": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", - "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.1" + "@babel/highlight": "^7.0.0" } }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + "@babel/highlight": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", + "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^4.0.0" + } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "ajv": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.5.tgz", + "integrity": "sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg==", "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "eslint-scope": { @@ -2656,15 +2162,30 @@ "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==" }, "ignore": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.2.tgz", - "integrity": "sha512-uoxnT7PYpyEnsja+yX+7v49B7LXxmzDJ2JALqHH3oEGzpM2U1IGcbfnOr8Dt57z3B/UWs7/iAgPFbmye8m4I0g==" + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -2696,39 +2217,12 @@ "requires": { "debug": "^2.6.8", "pkg-dir": "^1.0.0" - }, - "dependencies": { - "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.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "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.0" - } - }, - "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.0.0" - } - } } }, "eslint-plugin-import": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.13.0.tgz", - "integrity": "sha512-t6hGKQDMIt9N8R7vLepsYXgDfeuhp6ZJSgtrLEDxonpSubyxUZHjhm6LsAaZX8q6GYVxkbT3kTsV9G5mBCFR6A==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", + "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", "requires": { "contains-path": "^0.1.0", "debug": "^2.6.8", @@ -2751,9 +2245,17 @@ "isarray": "^1.0.0" } }, + "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" + } + }, "load-json-file": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "requires": { "graceful-fs": "^4.1.2", @@ -2915,12 +2417,11 @@ } }, "ethereumjs-testrpc-sc": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ethereumjs-testrpc-sc/-/ethereumjs-testrpc-sc-6.1.2.tgz", - "integrity": "sha512-dBTav4AZQ7zuajmICv1k7bEesqS+8f0u0wciXNUJZb842RTBi0lgKEDF8WgZshzv4ThI+XVQSRNV/A+seiK4aA==", + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/ethereumjs-testrpc-sc/-/ethereumjs-testrpc-sc-6.1.6.tgz", + "integrity": "sha512-iv2qiGBFgk9mn5Nq2enX8dG5WQ7Lk+FCqpnxfPfH4Ns8KLPwttmNOy264nh3SXDJJvcQwz/XnlLteDQVILotbg==", "requires": { - "source-map-support": "^0.5.3", - "webpack-cli": "^2.0.9" + "source-map-support": "^0.5.3" } }, "events": { @@ -2949,13 +2450,20 @@ "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } } }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=" - }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -3026,14 +2534,6 @@ } } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, "extend": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", @@ -3059,12 +2559,12 @@ } }, "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", "tmp": "^0.0.33" } }, @@ -3142,18 +2642,6 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" }, - "fast-glob": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.1.tgz", - "integrity": "sha512-wSyW1TBK3ia5V+te0rGPXudeMHoUQW6O5Y9oATiaGhpENmEifPDlOdhpsnlj5HoG6ttIvGiY1DdCmI9X2xGMhg==", - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.1", - "micromatch": "^3.1.10" - } - }, "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", @@ -3245,19 +2733,12 @@ } }, "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" - } - }, - "first-chunk-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz", - "integrity": "sha1-G97NuOCDwGZLkZRVgVd6Q6nzHXA=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "requires": { - "readable-stream": "^2.0.2" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "flat-cache": { @@ -3271,11 +2752,6 @@ "write": "^0.2.1" } }, - "flow-parser": { - "version": "0.72.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.72.0.tgz", - "integrity": "sha512-kFaDtviKlD/rHi6NRp42KTbnPgz/nKcWUJQhqDnLDeKA8uGcRVSy0YlQjaf9M3pFo5PgC3SNFnCPpQGLtHjH2w==" - }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3289,11 +2765,6 @@ "for-in": "^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", @@ -3317,15 +2788,6 @@ "map-cache": "^0.2.2" } }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, "fs-extra": { "version": "0.30.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", @@ -3372,21 +2834,19 @@ "bundled": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { "version": "1.0.0", - "bundled": true, - "optional": true + "bundled": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, - "optional": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -3397,18 +2857,15 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true, - "optional": true + "bundled": true }, "concat-map": { "version": "0.0.1", - "bundled": true, - "optional": true + "bundled": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, - "optional": true + "bundled": true }, "core-util-is": { "version": "1.0.2", @@ -3456,14 +2913,14 @@ "bundled": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -3489,7 +2946,7 @@ "bundled": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -3497,7 +2954,7 @@ "bundled": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -3511,8 +2968,7 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, - "optional": true + "bundled": true }, "ini": { "version": "1.3.5", @@ -3522,9 +2978,8 @@ "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, - "optional": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -3535,9 +2990,8 @@ "minimatch": { "version": "3.0.4", "bundled": true, - "optional": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -3577,9 +3031,9 @@ "bundled": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -3604,8 +3058,8 @@ "bundled": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -3618,8 +3072,8 @@ "bundled": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -3627,16 +3081,15 @@ "bundled": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { "version": "1.0.1", - "bundled": true, - "optional": true + "bundled": true }, "object-assign": { "version": "4.1.1", @@ -3647,7 +3100,7 @@ "version": "1.4.0", "bundled": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -3665,8 +3118,8 @@ "bundled": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -3684,10 +3137,10 @@ "bundled": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -3702,13 +3155,13 @@ "bundled": true, "optional": true, "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.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -3751,11 +3204,10 @@ "string-width": { "version": "1.0.2", "bundled": true, - "optional": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -3763,14 +3215,14 @@ "bundled": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -3802,7 +3254,7 @@ "bundled": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -3826,12 +3278,11 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "ganache-cli": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.1.3.tgz", - "integrity": "sha512-6g/jPkhEMBlefOUQR0AXQooTCsLFD4iOvTDmsqi/B3XOktB9KGSioDaEy5lCcgzJczzUHT1YCZXhrZcUgtNkkg==", + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/ganache-cli/-/ganache-cli-6.1.8.tgz", + "integrity": "sha512-yXzteu4SIgUL31mnpm9j+x6dpHUw0p/nsRVkcySKq0w+1vDxH9jMErP1QhZAJuTVE6ni4nfvGSNkaQx5cD3jfg==", "requires": { - "source-map-support": "^0.5.3", - "webpack-cli": "^2.0.9" + "source-map-support": "^0.5.3" } }, "get-caller-file": { @@ -3867,72 +3318,6 @@ "assert-plus": "^1.0.0" } }, - "gh-got": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", - "integrity": "sha512-F/mS+fsWQMo1zfgG9MD8KWvTWPPzzhuVwY++fhQ5Ggd+0P+CAMHtzMZhNxG+TqGfHDChJKsbh6otfMGqO2AKBw==", - "requires": { - "got": "^7.0.0", - "is-plain-obj": "^1.1.0" - }, - "dependencies": { - "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.2.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-plain-obj": "^1.1.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "p-cancelable": "^0.3.0", - "p-timeout": "^1.1.1", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "url-parse-lax": "^1.0.0", - "url-to-options": "^1.0.1" - } - }, - "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-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" - } - }, - "prepend-http": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", - "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" - }, - "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.1" - } - } - } - }, - "github-username": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/github-username/-/github-username-4.1.0.tgz", - "integrity": "sha1-y+KABBiDIG2kISrp5LXxacML9Bc=", - "requires": { - "gh-got": "^6.0.0" - } - }, "glob": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", @@ -3946,30 +3331,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-all": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-all/-/glob-all-3.1.0.tgz", - "integrity": "sha1-iRPd+17hrHgSZWJBsD1SF8ZLAqs=", - "requires": { - "glob": "^7.0.5", - "yargs": "~1.2.6" - }, - "dependencies": { - "minimist": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz", - "integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=" - }, - "yargs": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz", - "integrity": "sha1-nHtKgv1dWVsr8Xq23MQxNUMv40s=", - "requires": { - "minimist": "^0.1.0" - } - } - } - }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", @@ -4021,126 +3382,64 @@ } } }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" }, "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "requires": { "array-union": "^1.0.1", + "arrify": "^1.0.0", "glob": "^7.0.3", "object-assign": "^4.0.1", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" } }, - "got": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.1.tgz", - "integrity": "sha512-tiLX+bnYm5A56T5N/n9Xo89vMaO1mrS9qoDqj3u/anVooqGozvY/HbXzEpDfbNeKsHCBpK40gSbz8wGYSp3i1w==", - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } - } - }, "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=" - }, - "grouped-queue": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/grouped-queue/-/grouped-queue-0.3.3.tgz", - "integrity": "sha1-wWfSpTGcWg4JZO9qJbfC34mWyFw=", - "requires": { - "lodash": "^4.17.2" - } - }, "growl": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.0.tgz", - "integrity": "sha512-ElsQbgadAZdhC8L+hx4RJu6fDe5uPCaRjdw8CvD39VYemGQT9CSiLdRAEYFWVIlCbPNlw+G4AbqBhQJF2qyHdg==" + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" }, "handlebars": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz", - "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", + "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", "requires": { - "async": "^1.4.0", + "async": "^2.5.0", "optimist": "^0.6.1", - "source-map": "^0.4.4", - "uglify-js": "^2.6" + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "optional": true }, "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "optional": true, "requires": { - "amdefine": ">=0.0.4" + "commander": "~2.17.1", + "source-map": "~0.6.1" } } } @@ -4175,34 +3474,11 @@ "ansi-regex": "^2.0.0" } }, - "has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=" - }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" }, - "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.1" - } - }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", @@ -4274,14 +3550,6 @@ "os-tmpdir": "^1.0.1" } }, - "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", - "requires": { - "parse-passwd": "^1.0.0" - } - }, "hosted-git-info": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", @@ -4300,11 +3568,6 @@ "parse-cache-control": "^1.0.1" } }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" - }, "http-response-object": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.1.tgz", @@ -4329,9 +3592,9 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -4346,28 +3609,11 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.8.tgz", "integrity": "sha512-pUh+xUQQhQzevjRHHFqqcTy0/dP/kS9I8HSrUydhihjuD09W6ldVWFtIrwhXdUJHis3i2rZNqEHpZH/cbinFbg==" }, - "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", - "requires": { - "pkg-dir": "^2.0.0", - "resolve-cwd": "^2.0.0" - } - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "requires": { - "repeating": "^2.0.0" - } - }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -4387,26 +3633,21 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, "inquirer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", - "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", + "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", "requires": { "ansi-escapes": "^3.0.0", "chalk": "^2.0.0", "cli-cursor": "^2.1.0", "cli-width": "^2.0.0", - "external-editor": "^2.1.0", + "external-editor": "^3.0.0", "figures": "^2.0.0", - "lodash": "^4.3.0", + "lodash": "^4.17.10", "mute-stream": "0.0.7", "run-async": "^2.2.0", - "rxjs": "^5.5.2", + "rxjs": "^6.1.0", "string-width": "^2.1.0", "strip-ansi": "^4.0.0", "through": "^2.3.6" @@ -4427,20 +3668,16 @@ } } }, + "install": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/install/-/install-0.12.1.tgz", + "integrity": "sha512-TvL+PMlxSo+uGMIBjgBdtBb3mOLa00R2cjtvExOCsKLDeGo/YlGjMkrMmgEUTkjIaGeELZzaktN9ljo3v+bBaA==" + }, "interpret": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" - } - }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -4488,11 +3725,6 @@ "builtin-modules": "^1.0.0" } }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" - }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -4501,11 +3733,6 @@ "kind-of": "^3.0.2" } }, - "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-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -4578,26 +3805,6 @@ "kind-of": "^3.0.2" } }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, - "is-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-0.2.0.tgz", - "integrity": "sha1-s2ExHYPG5dcmyr9eJQsCNxBvWuI=", - "requires": { - "symbol-observable": "^0.2.2" - }, - "dependencies": { - "symbol-observable": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-0.2.4.tgz", - "integrity": "sha1-lag9smGG1q9+ehjb2XYKL4bQj0A=" - } - } - }, "is-odd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", @@ -4634,11 +3841,6 @@ "path-is-inside": "^1.0.1" } }, - "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-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -4662,42 +3864,16 @@ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, - "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-scoped": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-scoped/-/is-scoped-1.0.0.tgz", - "integrity": "sha1-RJypgpnnEwOCViieyytUDcQ3yzA=", - "requires": { - "scoped-regex": "^1.0.0" - } - }, "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", @@ -4718,11 +3894,6 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isbinaryfile": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz", - "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=" - }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4788,25 +3959,6 @@ } } }, - "istextorbinary": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", - "integrity": "sha512-TS+hoFl8Z5FAFMK38nhBkdLt44CclNRgDHWeMgsV8ko3nDlr/9UI2Sf839sW7enijf8oKsZYXRvM8g0it9Zmcw==", - "requires": { - "binaryextensions": "2", - "editions": "^1.3.3", - "textextensions": "2" - } - }, - "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.2.0", - "is-object": "^1.0.1" - } - }, "js-sha3": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.3.1.tgz", @@ -4837,122 +3989,16 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "optional": true }, - "jscodeshift": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.0.tgz", - "integrity": "sha512-JAcQINNMFpdzzpKJN8k5xXjF3XDuckB1/48uScSzcnNyK199iWEc9AxKL9OoX5144M2w5zEx9Qs4/E/eBZZUlw==", - "requires": { - "babel-plugin-transform-flow-strip-types": "^6.8.0", - "babel-preset-es2015": "^6.9.0", - "babel-preset-stage-1": "^6.5.0", - "babel-register": "^6.9.0", - "babylon": "^7.0.0-beta.30", - "colors": "^1.1.2", - "flow-parser": "^0.*", - "lodash": "^4.13.1", - "micromatch": "^2.3.7", - "neo-async": "^2.5.0", - "node-dir": "0.1.8", - "nomnom": "^1.8.1", - "recast": "^0.14.1", - "temp": "^0.8.1", - "write-file-atomic": "^1.2.0" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - } - } - }, - "jsesc": { + "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, "json-loader": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==" }, - "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", @@ -4981,11 +4027,6 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=" - }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", @@ -4993,7 +4034,7 @@ }, "jsonfile": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "requires": { "graceful-fs": "^4.1.6" @@ -5024,14 +4065,6 @@ "sha3": "^1.1.0" } }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", - "requires": { - "json-buffer": "3.0.0" - } - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -5075,203 +4108,6 @@ "type-check": "~0.3.2" } }, - "listr": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/listr/-/listr-0.13.0.tgz", - "integrity": "sha1-ILsLowuuZg7oTMBQPfS+PVYjiH0=", - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "figures": "^1.7.0", - "indent-string": "^2.1.0", - "is-observable": "^0.2.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.4.0", - "listr-verbose-renderer": "^0.4.0", - "log-symbols": "^1.0.2", - "log-update": "^1.0.2", - "ora": "^0.2.3", - "p-map": "^1.1.1", - "rxjs": "^5.4.2", - "stream-to-observable": "^0.2.0", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "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.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.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.0" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "requires": { - "chalk": "^1.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "listr-silent-renderer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", - "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=" - }, - "listr-update-renderer": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz", - "integrity": "sha1-NE2YDaLKLosUW6MFkI8yrj9MyKc=", - "requires": { - "chalk": "^1.1.3", - "cli-truncate": "^0.2.1", - "elegant-spinner": "^1.0.1", - "figures": "^1.7.0", - "indent-string": "^3.0.0", - "log-symbols": "^1.0.2", - "log-update": "^1.0.2", - "strip-ansi": "^3.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "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.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.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.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "requires": { - "chalk": "^1.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, - "listr-verbose-renderer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz", - "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", - "requires": { - "chalk": "^1.1.3", - "cli-cursor": "^1.0.2", - "date-fns": "^1.27.2", - "figures": "^1.7.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "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.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "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" - } - }, - "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.0" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "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.0.0", - "onetime": "^1.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -5299,16 +4135,6 @@ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=" }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - } - }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", @@ -5316,6 +4142,13 @@ "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": { @@ -5323,168 +4156,43 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash.keys": "^3.0.0" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=" - }, - "lodash._basecreate": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", - "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=" - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=" - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=" - }, "lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" }, - "lodash.create": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", - "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "requires": { - "lodash._baseassign": "^3.0.0", - "lodash._basecreate": "^3.0.0", - "lodash._isiterateecall": "^3.0.0" - } - }, "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=" }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=" - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=" - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "requires": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, "log-driver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==" }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "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": { - "chalk": "^2.0.1" + "js-tokens": "^3.0.0" } }, - "log-update": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-1.0.2.tgz", - "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", - "requires": { - "ansi-escapes": "^1.0.0", - "cli-cursor": "^1.0.2" - }, - "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=" - }, - "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" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "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.0.0", - "onetime": "^1.0.0" - } - } - } - }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" - }, - "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.0" - } - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", - "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" } }, - "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-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -5520,83 +4228,6 @@ "mimic-fn": "^1.0.0" } }, - "mem-fs": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/mem-fs/-/mem-fs-1.1.3.tgz", - "integrity": "sha1-uK6NLj/Lb10/kWXBLUVRoGXZicw=", - "requires": { - "through2": "^2.0.0", - "vinyl": "^1.1.0", - "vinyl-file": "^2.0.0" - } - }, - "mem-fs-editor": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/mem-fs-editor/-/mem-fs-editor-4.0.2.tgz", - "integrity": "sha512-QHvdXLLNmwJXxKdf7x27aNUren6IoPxwcM8Sfd+S6/ddQQMcYdEtVKsh6ilpqMrU18VQuKZEaH0aCGt3JDbA0g==", - "requires": { - "commondir": "^1.0.1", - "deep-extend": "^0.5.1", - "ejs": "^2.5.9", - "glob": "^7.0.3", - "globby": "^8.0.0", - "isbinaryfile": "^3.0.2", - "mkdirp": "^0.5.0", - "multimatch": "^2.0.0", - "rimraf": "^2.2.8", - "through2": "^2.0.0", - "vinyl": "^2.0.1" - }, - "dependencies": { - "clone": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", - "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=" - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=" - }, - "globby": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", - "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" - }, - "vinyl": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", - "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -5611,11 +4242,6 @@ "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" }, - "merge2": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz", - "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==" - }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -5670,11 +4296,6 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, - "mimic-response": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz", - "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=" - }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -5780,16 +4401,10 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "requires": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" - } + "mustache": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-2.3.2.tgz", + "integrity": "sha512-KpMNwdQsYz3O/SBS1qJ/o3sqUJ5wSb8gb0pul8CO0S56b9Y2ALm8zCfsjPXsqGFfoNBkDwZuZIAjhsZI03gYVQ==" }, "mute-stream": { "version": "0.0.7", @@ -5838,14 +4453,9 @@ "integrity": "sha512-3KL3fvuRkZ7s4IFOMfztb7zJp3QaVWnBeGoJlgB38XnCRPj/0tLzzLG5IB8NYOHbJ8g8UGrgZv44GLDk6CxTxA==" }, "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==" - }, - "node-dir": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.8.tgz", - "integrity": "sha1-VfuN62mQcHB/tn+RpGDwRIKUx30=" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "node-libs-browser": { "version": "2.1.0", @@ -5877,37 +4487,6 @@ "vm-browserify": "0.0.4" } }, - "nomnom": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", - "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", - "requires": { - "chalk": "~0.4.0", - "underscore": "~1.6.0" - }, - "dependencies": { - "ansi-styles": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", - "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=" - }, - "chalk": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", - "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", - "requires": { - "ansi-styles": "~1.0.0", - "has-color": "~0.1.0", - "strip-ansi": "~0.1.0" - } - }, - "strip-ansi": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", - "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=" - } - } - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -5935,16 +4514,6 @@ "remove-trailing-separator": "^1.0.1" } }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - } - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", @@ -5988,11 +4557,6 @@ } } }, - "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==" - }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", @@ -6063,63 +4627,6 @@ "wordwrap": "~1.0.0" } }, - "ora": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/ora/-/ora-0.2.3.tgz", - "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", - "requires": { - "chalk": "^1.1.1", - "cli-cursor": "^1.0.2", - "cli-spinners": "^0.1.2", - "object-assign": "^4.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, - "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.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "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" - } - }, - "onetime": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=" - }, - "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.0.0", - "onetime": "^1.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - } - } - }, "original-require": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/original-require/-/original-require-1.0.1.tgz", @@ -6136,13 +4643,11 @@ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "version": "1.4.0", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "requires": { - "execa": "^0.7.0", - "lcid": "^1.0.0", - "mem": "^1.1.0" + "lcid": "^1.0.0" } }, "os-tmpdir": { @@ -6150,38 +4655,15 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" - }, - "p-each-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-1.0.0.tgz", - "integrity": "sha1-kw89Et0fUOdDRFeiLNbwSsatf3E=", - "requires": { - "p-reduce": "^1.0.0" - } - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" - }, - "p-lazy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-lazy/-/p-lazy-1.0.0.tgz", - "integrity": "sha1-7FPIAvLuOsKPFmzILQsrAt4nqDU=" - }, "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==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "requires": { "p-try": "^1.0.0" } @@ -6194,24 +4676,6 @@ "p-limit": "^1.1.0" } }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==" - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=" - }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", - "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", @@ -6273,11 +4737,6 @@ "error-ex": "^1.2.0" } }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" - }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -6294,9 +4753,12 @@ "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "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.0" + } }, "path-is-absolute": { "version": "1.0.1", @@ -6347,7 +4809,7 @@ }, "pegjs": { "version": "0.10.0", - "resolved": "https://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", + "resolved": "http://registry.npmjs.org/pegjs/-/pegjs-0.10.0.tgz", "integrity": "sha1-z4uvrm7d/0tafvsYUmnqr0YQ3b0=" }, "performance-now": { @@ -6374,11 +4836,11 @@ } }, "pkg-dir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", - "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "requires": { - "find-up": "^2.1.0" + "find-up": "^1.0.0" } }, "pluralize": { @@ -6396,26 +4858,11 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" }, - "prettier": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.12.1.tgz", - "integrity": "sha1-wa0g6APndJ+vkFpAnSNn4Gu+cyU=" - }, - "pretty-bytes": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", - "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=" - }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -6444,6 +4891,15 @@ "asap": "~2.0.3" } }, + "prop-types": { + "version": "15.6.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", + "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", + "requires": { + "loose-envify": "^1.3.1", + "object-assign": "^4.1.1" + } + }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -6476,16 +4932,6 @@ "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.0", - "strict-uri-encode": "^1.0.0" - } - }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -6497,9 +4943,9 @@ "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, "randomatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", - "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", + "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", "requires": { "is-number": "^4.0.0", "kind-of": "^6.0.0", @@ -6535,20 +4981,26 @@ "safe-buffer": "^5.1.0" } }, - "read-chunk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-2.1.0.tgz", - "integrity": "sha1-agTAkoAF7Z1C4aasVgDhnLx/9lU=", + "react": { + "version": "16.5.2", + "resolved": "https://registry.npmjs.org/react/-/react-16.5.2.tgz", + "integrity": "sha512-FDCSVd3DjVTmbEAjUNX6FgfAmQ+ypJfHUsqUJOYNCBUp1h8lqmtC+0mXJ+JjsWx4KAVTkk1vKd1hLQPvEviSuw==", "requires": { - "pify": "^3.0.0", - "safe-buffer": "^5.1.1" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" + } + }, + "react-dom": { + "version": "16.5.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.5.2.tgz", + "integrity": "sha512-RC8LDw8feuZOHVgzEf7f+cxBr/DnKdqp56VU0lAs1f4UfKc4cU8wU4fTq/mgnvynLQo8OtlPC19NUFh/zjZPuA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "schedule": "^0.5.0" } }, "read-pkg": { @@ -6614,24 +5066,6 @@ "set-immediate-shim": "^1.0.1" } }, - "recast": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.7.tgz", - "integrity": "sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A==", - "requires": { - "ast-types": "0.11.3", - "esprima": "~4.0.0", - "private": "~0.1.5", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, "rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -6677,18 +5111,10 @@ "safe-regex": "^1.1.0" } }, - "regexp.prototype.flags": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz", - "integrity": "sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA==", - "requires": { - "define-properties": "^1.1.2" - } - }, "regexpp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", - "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.0.tgz", + "integrity": "sha512-g2FAVtR8Uh8GO1Nv5wpxW7VFVwHcCEr4wyA8/MHiRkO8uHoR5ntAA8Uq3P1vvMTX/BeQiRVSpDGLd+Wn5HNOTA==" }, "regexpu-core": { "version": "2.0.0", @@ -6736,11 +5162,6 @@ "is-finite": "^1.0.0" } }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=" - }, "req-cwd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/req-cwd/-/req-cwd-1.0.1.tgz", @@ -6848,23 +5269,6 @@ "path-parse": "^1.0.5" } }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", - "requires": { - "resolve-from": "^3.0.0" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, "resolve-from": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", @@ -6875,14 +5279,6 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, "restore-cursor": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", @@ -6906,9 +5302,12 @@ } }, "rimraf": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", - "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "^7.0.5" + } }, "ripemd160": { "version": "2.0.2", @@ -6927,25 +5326,12 @@ "is-promise": "^2.1.0" } }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "requires": { - "rx-lite": "*" - } - }, "rxjs": { - "version": "5.5.10", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz", - "integrity": "sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==", + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.2.tgz", + "integrity": "sha512-hV7criqbR0pe7EeL3O66UYVg92IR0XsA97+9y+BWTePK9SKmEI5Qd3Zj6uPnGkNzXsBywBQWTvujPl+1Kn9Zjw==", "requires": { - "symbol-observable": "1.0.1" + "tslib": "^1.9.0" } }, "safe-buffer": { @@ -6966,10 +5352,13 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "scoped-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/scoped-regex/-/scoped-regex-1.0.0.tgz", - "integrity": "sha1-o0a7Gs1CB65wvXwMfKnlZra63bg=" + "schedule": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/schedule/-/schedule-0.5.0.tgz", + "integrity": "sha512-HUcJicG5Ou8xfR//c2rPT0lPIRR09vVvN81T9fqfVgBmhERUbDEQoYKjpBxbueJnCPpSu2ujXzOnRQt6x9o/jw==", + "requires": { + "object-assign": "^4.1.1" + } }, "semver": { "version": "5.5.0", @@ -7063,14 +5452,19 @@ "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=" - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "requires": { + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "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=" + } + } }, "snapdragon": { "version": "0.8.2", @@ -7175,9 +5569,9 @@ "integrity": "sha1-Q66MQZ/TrAVqBfip0fsQIs1B7MI=" }, "solc": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.23.tgz", - "integrity": "sha512-AT7anLHY6uIRg2It6N0UlCHeZ7YeecIkUhnlirrCgCPCUevtnoN48BxvgigN/4jJTRljv5oFhAJtI6gvHzT5DQ==", + "version": "0.4.25", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.25.tgz", + "integrity": "sha512-jU1YygRVy6zatgXrLY2rRm7HW1d7a8CkkEgNJwvH2VLpWhMFsMdWcJn6kUqZwcSz/Vm+w89dy7Z/aB5p6AFTrg==", "requires": { "fs-extra": "^0.30.0", "memorystream": "^0.3.1", @@ -7186,11 +5580,6 @@ "yargs": "^4.7.1" }, "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" - }, "cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", @@ -7201,72 +5590,6 @@ "wrap-ansi": "^2.0.0" } }, - "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.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "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.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "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" - } - }, - "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.0" - } - }, - "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.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.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.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "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.0.0", - "read-pkg": "^1.0.0" - } - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -7277,19 +5600,6 @@ "strip-ansi": "^3.0.0" } }, - "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.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", @@ -7297,7 +5607,7 @@ }, "yargs": { "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", "requires": { "cliui": "^3.2.0", @@ -7315,25 +5625,16 @@ "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.0.6" - } } } }, "solidity-coverage": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.5.5.tgz", - "integrity": "sha512-WexTLFZ3NBIWGYpNgWHtFLkASdoGP0i5Q/OJzwoCpHNtG1QrJO/mxUctc5BghP8srwMN8HxCtUJtu/eyGbIOJw==", + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/solidity-coverage/-/solidity-coverage-0.5.11.tgz", + "integrity": "sha512-qikdsSi6+9XbfvwA0aI7HUVpF9fIFNqRWTw23M89GMDY+b6Gj0wWU9IngJS0fimoZIAdEp3bfChxvpfVcrUesg==", "requires": { "death": "^1.1.0", - "ethereumjs-testrpc-sc": "6.1.2", + "ethereumjs-testrpc-sc": "6.1.6", "istanbul": "^0.4.5", "keccakjs": "^0.2.1", "req-cwd": "^1.0.1", @@ -7344,6 +5645,88 @@ "web3": "^0.18.4" } }, + "solidity-docgen": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/solidity-docgen/-/solidity-docgen-0.1.0.tgz", + "integrity": "sha512-F7ufNWmlP5c5hIi66Ijv9tc+HNosyO7ijWq6pRtyBR1WqyJBH/0DJkD6QZI8HkE8p6LEXiPKxGBWbAeVT9Nu9g==", + "requires": { + "commander": "^2.14.1", + "lodash": "^4.17.5", + "mocha": "^5.0.1", + "mustache": "^2.3.0", + "react": "^16.2.0", + "react-dom": "^16.2.0", + "shelljs": "^0.8.1" + }, + "dependencies": { + "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==" + }, + "commander": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.18.0.tgz", + "integrity": "sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ==" + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "mocha": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", + "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "requires": { + "browser-stdout": "1.3.1", + "commander": "2.15.1", + "debug": "3.1.0", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "glob": "7.1.2", + "growl": "1.10.5", + "he": "1.1.1", + "minimatch": "3.0.4", + "mkdirp": "0.5.1", + "supports-color": "5.4.0" + }, + "dependencies": { + "commander": { + "version": "2.15.1", + "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + } + } + }, + "shelljs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", + "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "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" + } + } + } + }, "solidity-parser-antlr": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/solidity-parser-antlr/-/solidity-parser-antlr-0.2.15.tgz", @@ -7369,14 +5752,6 @@ "wrap-ansi": "^2.0.0" } }, - "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" - } - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -7387,11 +5762,6 @@ "strip-ansi": "^3.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", @@ -7399,7 +5769,7 @@ }, "yargs": { "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", "requires": { "cliui": "^3.2.0", @@ -7421,14 +5791,15 @@ } }, "solium": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/solium/-/solium-1.1.7.tgz", - "integrity": "sha512-yYbalsrzJCU+QJ0HZvxAT4IQIqI1e6KPW2vop0NaHwdijqhQC9fJkVioCrL18NbO2Z8rdcnx8Y0JpvYJWrIjRg==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/solium/-/solium-1.1.8.tgz", + "integrity": "sha512-fn0lusM6of14CytIDDHK73SGjn6NsVTaCVJjaKCKJyqKhT00rH/hDtvnIeZ2ZTD9z/xaXd4Js2brW3az6AV9RA==", "requires": { "ajv": "^5.2.2", "chokidar": "^1.6.0", "colors": "^1.1.2", "commander": "^2.9.0", + "eol": "^0.9.1", "js-string-escape": "^1.0.1", "lodash": "^4.14.2", "sol-digger": "0.0.2", @@ -7458,6 +5829,24 @@ "wrap-ansi": "^2.0.0" } }, + "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" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, "sol-explore": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/sol-explore/-/sol-explore-1.6.1.tgz", @@ -7481,6 +5870,11 @@ "ansi-regex": "^3.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, "yargs": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-10.1.2.tgz", @@ -7515,14 +5909,6 @@ "resolved": "https://registry.npmjs.org/solium-plugin-security/-/solium-plugin-security-0.1.1.tgz", "integrity": "sha512-kpLirBwIq4mhxk0Y/nn5cQ6qdJTI+U1LO3gpoNIcqNaW+sI058moXBe2UiHs+9wvF9IzYD49jcKhFTxcR9u9SQ==" }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "requires": { - "is-plain-obj": "^1.0.0" - } - }, "source-list-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", @@ -7546,9 +5932,9 @@ } }, "source-map-support": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.5.tgz", - "integrity": "sha512-mR7/Nd5l1z6g99010shcXJiNEaf3fEtmLhRB/sBcQVJGodcHCULPp2y4Sfa43Kv2zq7T+Izmfp/WHCR6dYkQCA==", + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.9.tgz", + "integrity": "sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -7668,24 +6054,6 @@ "xtend": "^4.0.0" } }, - "stream-to-observable": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.2.0.tgz", - "integrity": "sha1-WdbqOT2HwsDdrBCqDVYbxrpvDhA=", - "requires": { - "any-observable": "^0.2.0" - } - }, - "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-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=" - }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -7715,18 +6083,6 @@ } } }, - "string.prototype.matchall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-2.0.0.tgz", - "integrity": "sha512-WoZ+B2ypng1dp4iFLF2kmZlwwlE19gmjgKuhL1FJfDgCREWb3ye3SDVHSzLH6bxfnvYmkCxbzkmWcQZHA4P//Q==", - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.10.0", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "regexp.prototype.flags": "^1.2.0" - } - }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -7748,25 +6104,6 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, - "strip-bom-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz", - "integrity": "sha1-+H217yYT9paKpUWr/h7HKLaoKco=", - "requires": { - "first-chunk-stream": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "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.0" - } - } - } - }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", @@ -7785,11 +6122,6 @@ "has-flag": "^1.0.0" } }, - "symbol-observable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.0.1.tgz", - "integrity": "sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=" - }, "sync-request": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.0.0.tgz", @@ -7810,7 +6142,7 @@ }, "table": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", + "resolved": "http://registry.npmjs.org/table/-/table-4.0.3.tgz", "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", "requires": { "ajv": "^6.0.1", @@ -7822,14 +6154,14 @@ }, "dependencies": { "ajv": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.2.tgz", - "integrity": "sha512-hOs7GfvI6tUI1LfZddH82ky6mOMyTuY0mk7kE2pWpmhhUSkumzaTO5vbVwij39MdwPQWCV4Zv57Eo06NtL/GVA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.1" + "uri-js": "^4.2.2" } }, "fast-deep-equal": { @@ -7837,23 +6169,10 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, - "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=" - }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "requires": { - "is-fullwidth-code-point": "^2.0.0" - } } } }, @@ -7862,25 +6181,11 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=" }, - "temp": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.3.tgz", - "integrity": "sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k=", - "requires": { - "os-tmpdir": "^1.0.0", - "rimraf": "~2.2.6" - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, - "textextensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/textextensions/-/textextensions-2.2.0.tgz", - "integrity": "sha512-j5EMxnryTvKxwH2Cq+Pb43tsf6sdEgw6Pdwxk83mPaq0ToeFJt6WE4J3s5BqY7vmjlLgkgXvhtXUxo80FyBhCA==" - }, "then-request": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.0.tgz", @@ -7908,23 +6213,9 @@ }, "through": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, - "through2": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", - "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", - "requires": { - "readable-stream": "^2.1.5", - "xtend": "~4.0.1" - } - }, - "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=" - }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", @@ -7998,97 +6289,87 @@ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, "truffle": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/truffle/-/truffle-4.1.8.tgz", - "integrity": "sha512-btDML3J9Ao+UDqR725ajTybcEqyXzxFzJDC/NAXOyOXoXf2HJwKq6VEvnjP9qc6owA+fJ50d87MmsPRXk+riCg==", + "version": "4.1.14", + "resolved": "https://registry.npmjs.org/truffle/-/truffle-4.1.14.tgz", + "integrity": "sha512-e7tTLvKP3bN9dE7MagfWyFjy4ZgoEGbeujECy1me1ENBzbj/aO/+45gs72qsL3+3IkCNNcWNOJjjrm8BYZZNNg==", "requires": { - "mocha": "^3.4.2", - "original-require": "^1.0.1", - "solc": "0.4.23" + "mocha": "^4.1.0", + "original-require": "1.0.1", + "solc": "0.4.24" }, "dependencies": { - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "requires": { - "graceful-readlink": ">= 1.0.0" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" } }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", + "solc": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.24.tgz", + "integrity": "sha512-2xd7Cf1HeVwrIb6Bu1cwY2/TaLRodrppCq3l7rhLimFQgmxptXhTC3+/wesVLpB09F1A2kZgvbMOgH7wvhFnBQ==", "requires": { - "ms": "2.0.0" + "fs-extra": "^0.30.0", + "memorystream": "^0.3.1", + "require-from-string": "^1.1.0", + "semver": "^5.3.0", + "yargs": "^4.7.1" } }, - "diff": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=" - }, - "glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.2", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=" - }, - "mocha": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", - "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", - "requires": { - "browser-stdout": "1.3.0", - "commander": "2.9.0", - "debug": "2.6.8", - "diff": "3.2.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.1", - "growl": "1.9.2", - "he": "1.1.1", - "json3": "3.3.2", - "lodash.create": "3.1.1", - "mkdirp": "0.5.1", - "supports-color": "3.1.2" - }, - "dependencies": { - "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=" - } - } + "window-size": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", + "integrity": "sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU=" }, - "supports-color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", + "yargs": { + "version": "4.8.1", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", + "integrity": "sha1-wMQpJMpKqmsObaFznfshZDn53cA=", "requires": { - "has-flag": "^1.0.0" - } - } - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" - }, - "tunnel-agent": { - "version": "0.6.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "lodash.assign": "^4.0.3", + "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.1", + "which-module": "^1.0.0", + "window-size": "^0.2.0", + "y18n": "^3.2.1", + "yargs-parser": "^2.4.1" + } + } + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "tunnel-agent": { + "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { @@ -8135,11 +6416,6 @@ "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", "optional": true }, - "underscore": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", - "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=" - }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -8208,11 +6484,6 @@ } } }, - "untildify": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.2.tgz", - "integrity": "sha1-fx8wIFWz/qDz6B3HjrNnZstl4/E=" - }, "upath": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", @@ -8254,19 +6525,6 @@ } } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" - } - }, - "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=" - }, "use": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/use/-/use-3.1.0.tgz", @@ -8305,11 +6563,6 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, - "v8-compile-cache": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", - "integrity": "sha512-ejdrifsIydN1XDH7EuR2hn8ZrkRKUYF7tUcBjBy/lhrCvs2K+zRlbW9UHc0IQ9RsYFZJFqJrieoIHfkCa0DBRA==" - }, "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", @@ -8329,39 +6582,6 @@ "extsprintf": "^1.2.0" } }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - }, - "vinyl-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-file/-/vinyl-file-2.0.0.tgz", - "integrity": "sha1-p+v1/779obfRjRQPyweyI++2dRo=", - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.3.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0", - "strip-bom-stream": "^2.0.0", - "vinyl": "^1.1.0" - }, - "dependencies": { - "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.0" - } - } - } - }, "vm-browserify": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", @@ -8544,272 +6764,6 @@ } } }, - "webpack-addons": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/webpack-addons/-/webpack-addons-1.1.5.tgz", - "integrity": "sha512-MGO0nVniCLFAQz1qv22zM02QPjcpAoJdy7ED0i3Zy7SY1IecgXCm460ib7H/Wq7e9oL5VL6S2BxaObxwIcag0g==", - "requires": { - "jscodeshift": "^0.4.0" - }, - "dependencies": { - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" - }, - "ast-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", - "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==" - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" - }, - "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - }, - "jscodeshift": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.1.tgz", - "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", - "requires": { - "async": "^1.5.0", - "babel-plugin-transform-flow-strip-types": "^6.8.0", - "babel-preset-es2015": "^6.9.0", - "babel-preset-stage-1": "^6.5.0", - "babel-register": "^6.9.0", - "babylon": "^6.17.3", - "colors": "^1.1.2", - "flow-parser": "^0.*", - "lodash": "^4.13.1", - "micromatch": "^2.3.7", - "node-dir": "0.1.8", - "nomnom": "^1.8.1", - "recast": "^0.12.5", - "temp": "^0.8.1", - "write-file-atomic": "^1.2.0" - } - }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } - }, - "recast": { - "version": "0.12.9", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", - "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", - "requires": { - "ast-types": "0.10.1", - "core-js": "^2.4.1", - "esprima": "~4.0.0", - "private": "~0.1.5", - "source-map": "~0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } - } - }, - "webpack-cli": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.1.3.tgz", - "integrity": "sha512-5AsKoL/Ccn8iTrwk3uErdyhetGH+c7VRQ7Itim2GL0IhBRq5rtojVDk00buMRmFmBpw1RvHXq97Gup965LbozA==", - "requires": { - "chalk": "^2.3.2", - "cross-spawn": "^6.0.5", - "diff": "^3.5.0", - "enhanced-resolve": "^4.0.0", - "envinfo": "^4.4.2", - "glob-all": "^3.1.0", - "global-modules": "^1.0.0", - "got": "^8.2.0", - "import-local": "^1.0.0", - "inquirer": "^5.1.0", - "interpret": "^1.0.4", - "jscodeshift": "^0.5.0", - "listr": "^0.13.0", - "loader-utils": "^1.1.0", - "lodash": "^4.17.5", - "log-symbols": "^2.2.0", - "mkdirp": "^0.5.1", - "p-each-series": "^1.0.0", - "p-lazy": "^1.0.0", - "prettier": "^1.5.3", - "supports-color": "^5.3.0", - "v8-compile-cache": "^1.1.2", - "webpack-addons": "^1.1.5", - "yargs": "^11.1.0", - "yeoman-environment": "^2.0.0", - "yeoman-generator": "^2.0.4" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", - "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - } - }, - "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.2.9" - } - }, - "enhanced-resolve": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz", - "integrity": "sha512-jox/62b2GofV1qTUQTMPEJSDIGycS43evqYzD/KVtEb9OCoki9cnacUPxCrZa7JfPzZSYOCZhu9O9luaMxAX8g==", - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "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" - } - }, - "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" - } - }, - "tapable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", - "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==" - }, - "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.1.1", - "find-up": "^2.1.0", - "get-caller-file": "^1.0.1", - "os-locale": "^2.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^9.0.2" - } - }, - "yargs-parser": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", - "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", - "requires": { - "camelcase": "^4.1.0" - } - } - } - }, "webpack-sources": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.1.0.tgz", @@ -8827,17 +6781,17 @@ } }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { "isexe": "^2.0.0" } }, "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "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.1.0", @@ -8883,16 +6837,6 @@ "mkdirp": "^0.5.1" } }, - "write-file-atomic": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", - "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "slide": "^1.1.5" - } - }, "xhr2": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.1.4.tgz", @@ -8945,203 +6889,10 @@ } } }, - "yeoman-environment": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-2.0.6.tgz", - "integrity": "sha512-jzHBTTy8EPI4ImV8dpUMt+Q5zELkSU5xvGpndHcHudQ4tqN6YgIWaCGmRFl+HDchwRUkcgyjQ+n6/w5zlJBCPg==", - "requires": { - "chalk": "^2.1.0", - "debug": "^3.1.0", - "diff": "^3.3.1", - "escape-string-regexp": "^1.0.2", - "globby": "^6.1.0", - "grouped-queue": "^0.3.3", - "inquirer": "^3.3.0", - "is-scoped": "^1.0.0", - "lodash": "^4.17.4", - "log-symbols": "^2.1.0", - "mem-fs": "^1.1.0", - "text-table": "^0.2.0", - "untildify": "^3.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "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" - } - } - } - }, - "yeoman-generator": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.5.tgz", - "integrity": "sha512-rV6tJ8oYzm4mmdF2T3wjY+Q42jKF2YiiD0VKfJ8/0ZYwmhCKC9Xs2346HVLPj/xE13i68psnFJv7iS6gWRkeAg==", - "requires": { - "async": "^2.6.0", - "chalk": "^2.3.0", - "cli-table": "^0.3.1", - "cross-spawn": "^6.0.5", - "dargs": "^5.1.0", - "dateformat": "^3.0.3", - "debug": "^3.1.0", - "detect-conflict": "^1.0.0", - "error": "^7.0.2", - "find-up": "^2.1.0", - "github-username": "^4.0.0", - "istextorbinary": "^2.2.1", - "lodash": "^4.17.10", - "make-dir": "^1.1.0", - "mem-fs-editor": "^4.0.0", - "minimist": "^1.2.0", - "pretty-bytes": "^4.0.2", - "read-chunk": "^2.1.0", - "read-pkg-up": "^3.0.0", - "rimraf": "^2.6.2", - "run-async": "^2.0.0", - "shelljs": "^0.8.0", - "text-table": "^0.2.0", - "through2": "^2.0.0", - "yeoman-environment": "^2.0.5" - }, - "dependencies": { - "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.2.9" - } - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "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.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "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.1" - } - }, - "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.3.2", - "path-type": "^3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "requires": { - "glob": "^7.0.5" - } - }, - "shelljs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.2.tgz", - "integrity": "sha512-pRXeNrCA2Wd9itwhvLp5LZQvPJ0wU6bcjaTMywHHGX5XWhVN2nzSu7WV0q+oUY7mGK3mgSkDDzP3MgjqdyIgbQ==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - } - } - }, "zeppelin-solidity": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/zeppelin-solidity/-/zeppelin-solidity-1.9.0.tgz", - "integrity": "sha512-pdyPVyjDq7cNqqLps9juDNDkKCa6hSafEm8KyzPw+gNYTiDyG1H4sYVFuBGp03iqxlGhsacrstbps5/AHTxBUg==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/zeppelin-solidity/-/zeppelin-solidity-1.12.0.tgz", + "integrity": "sha512-dgjPPnTmx14hAbTeOpTKemDeDCDdwglS0nquOAJG8h5o9zlb43FZafQSrMlIUUSp1EisDZfehrp5loGEYXHZBA==" } } } diff --git a/scripts/migrateLibs.js b/scripts/migrateLibs.js new file mode 100644 index 0000000..a31200c --- /dev/null +++ b/scripts/migrateLibs.js @@ -0,0 +1,58 @@ +function migrateLibs (artifacts, additionalContracts, deployer, network, accounts) { + + return deployer.then(async () => { + var UtilsLib = artifacts.require("./UtilsLib"); + var GenericCallerLib = artifacts.require("./GenericCallerLib"); + var VotingLib = artifacts.require("./VotingLib"); + var DaoBaseLib = artifacts.require("./DaoBaseLib"); + + async function linkIfExist(contractName){ + try { + await deployer.link(UtilsLib, artifacts.require(contractName)); + await deployer.link(VotingLib, artifacts.require(contractName)); + await deployer.link(GenericCallerLib, artifacts.require(contractName)); + await deployer.link(DaoBaseLib, artifacts.require(contractName)); + } catch(error) {} + } + + await deployer.deploy(UtilsLib); + await deployer.link(UtilsLib, VotingLib); + await deployer.deploy(VotingLib); + await deployer.link(VotingLib, GenericCallerLib); + await deployer.deploy(GenericCallerLib); + await deployer.deploy(DaoBaseLib); + + contractsArr = [ "./DaoBaseImpersonated" + , "./DaoBaseWithUnpackers" + , "./GenericCaller" + , "./VotingLib" + , "./DaoBaseAuto" + , "./DaoBaseWithUnpackersMock" + , "./DaoBaseMock" + , "./DaoStorage" + , "./StdDaoToken" + , "./Voting" + , "./GenericCallerLib" + , "./GenericCaller" + , "./MoneyflowAuto" + , "./DaoBaseAuto" + , "./GenericCaller" + , "./MoneyflowAuto" + , "./DaoBaseAuto" + , "./DaoBase" + , "./DaoBaseWithUnpackers" + , "./DaoBaseWithUnpackersMock" + , "./DaoBaseMock" + ] + + contractsArr = contractsArr.concat(additionalContracts); + + for(let contract of contractsArr){ + await linkIfExist(contract); + } + + + }); +}; + +module.exports = migrateLibs \ No newline at end of file diff --git a/test/daobase.tests.js b/test/daobase.tests.js index aff0ae3..ae76bbc 100644 --- a/test/daobase.tests.js +++ b/test/daobase.tests.js @@ -21,275 +21,284 @@ require('chai') .should(); contract('DaoBase', (accounts) => { - let token; - let daoBase; - let store; - let issueTokens; - let manageGroups; - let addNewProposal; - let upgradeDaoContract; - let addNewTask; - let startTask; - let startBounty; - let modifyMoneyscheme; - let withdrawDonations; - let setRootWeiReceiver; - let burnTokens; - let daoClient; - let proposal; - - const creator = accounts[0]; - const employee1 = accounts[1]; - const employee2 = accounts[2]; - const outsider = accounts[3]; - const employee3 = accounts[4]; - - before(async() => { - - }); - - beforeEach(async() => { - token = await StdDaoToken.new("StdToken","STDT",18, true, true, 1000000000); - await token.mintFor(creator, 1000); - store = await DaoStorage.new([token.address],{from: creator}); - daoBase = await DaoBaseWithUnpackers.new(store.address,{from: creator}); - - issueTokens = await daoBase.ISSUE_TOKENS(); - manageGroups = await daoBase.MANAGE_GROUPS(); - upgradeDaoContract = await daoBase.UPGRADE_DAO_CONTRACT(); - withdrawDonations = await daoBase.WITHDRAW_DONATIONS(); - addNewProposal = await daoBase.ADD_NEW_PROPOSAL(); - burnTokens = await daoBase.BURN_TOKENS(); - - await store.addGroupMember(web3.sha3("Employees"), creator); - - // do not forget to transfer ownership - await token.transferOwnership(daoBase.address); - await store.transferOwnership(daoBase.address); - - // Set permissions: - await daoBase.allowActionByAnyMemberOfGroup(addNewProposal, "Employees"); - await daoBase.allowActionByAnyMemberOfGroup(burnTokens, "Employees"); - await daoBase.allowActionByAnyMemberOfGroup(upgradeDaoContract, 'Employees'); - await daoBase.allowActionByAddress(withdrawDonations, creator); - await daoBase.allowActionByVoting(issueTokens, token.address); - await daoBase.allowActionByVoting(upgradeDaoContract, token.address); - }); - - describe('addObserver()', function () { - it('Should add observer to daoBase',async() => { - daoClient = await DaoClient.new(daoBase.address); - await daoBase.addObserver(daoClient.address); - await assert.equal(await daoBase.getObserversCount(), 2); - await assert.equal(await daoBase.getObserverAtIndex(0), daoClient.address); - }); - }); - - describe('getMembersCount()', function () { - it('Should return correct value',async() => { - await daoBase.addGroupMember("Employees", employee1); - assert.equal(await daoBase.getMembersCount("Employees"), 2); - }); - }); - - describe('getGroupMembers()', function () { - it('Should return correct value',async() => { - await daoBase.addGroupMember("Employees", employee2); - let members = await daoBase.getGroupMembers("Employees"); - assert.equal(members.length, 2); - }); - }); - - describe('removeGroupMember()', function () { - it('Should revert due to call whithout rights',async() => { - await daoBase.removeGroupMember("Employees", employee2, {from: outsider}).should.be.rejectedWith('revert'); - }); - - it('Should remove member from daoBase',async() => { - await daoBase.addGroupMember("Employees", employee1); - assert.equal(await daoBase.isGroupMember("Employees", employee1), true); - - await daoBase.removeGroupMember("Employees", employee1); - - let members = await daoBase.getGroupMembers("Employees"); - assert.equal(members.length, 1); - assert.equal(await daoBase.isGroupMember("Employees", employee1), false); - }); - }); - describe('isGroupMember()', function () { - it('Should return false',async() => { - assert.equal(await daoBase.isGroupMember("Employees", outsider), false); - }); - - it('Should return true',async() => { - assert.equal(await daoBase.isGroupMember("Employees", creator), true); - }); - }); - - describe('getMemberByIndex()', function () { - it('Should return creator',async() => { - assert.equal(await daoBase.getMemberByIndex("Employees", 0), creator); - }); - }); - - describe('allowActionByVoting()', function () { - it('Should not be able allow action by outsider before renounce ownership',async() => { - token = await StdDaoToken.new("StdToken","STDT",18, true, true, 1000000000); - await daoBase.allowActionByVoting(addNewProposal, token.address, {from: outsider}).should.be.rejectedWith('revert'); - }); - - it('Should not be able allow action by outsider after renounce ownership',async() => { - token = await StdDaoToken.new("StdToken","STDT",18, true, true, 1000000000); - await daoBase.renounceOwnership(); - await daoBase.allowActionByVoting(addNewProposal, token.address, {from: outsider}).should.be.rejectedWith('revert'); - }); - - it('Should be able allow action by creator before renounce ownership',async() => { - token = await StdDaoToken.new("StdToken","STDT",18, true, true, 1000000000); - await daoBase.allowActionByVoting(addNewProposal, token.address); - }); - - it('Should not be able allow action by creator after renounce ownership',async() => { - token = await StdDaoToken.new("StdToken","STDT",18, true, true, 1000000000); - await daoBase.renounceOwnership(); - await daoBase.allowActionByVoting(addNewProposal, token.address).should.be.rejectedWith('revert'); - }); - }); - - describe('allowActionByShareholder()', function () { - it('Should not be able allow action by shareholder by outsider before renounce ownership',async() => { - await daoBase.allowActionByShareholder(addNewProposal, token.address, {from: outsider}).should.be.rejectedWith('revert'); - }); - - it('Should not be able allow action by shareholder by outsider after renounce ownership',async() => { - await daoBase.renounceOwnership(); - await daoBase.allowActionByShareholder(addNewProposal, token.address, {from: outsider}).should.be.rejectedWith('revert'); - }); - - it('Should be able allow action by shareholder by creator before renounce ownership',async() => { - await daoBase.allowActionByShareholder(addNewProposal, token.address); - }); - - it('Should not be able allow action by shareholder by creator after renounce ownership',async() => { - await daoBase.renounceOwnership(); - await daoBase.allowActionByShareholder(addNewProposal, token.address).should.be.rejectedWith('revert'); - }); - }); - - describe('allowActionByAddress()', function () { - it('Should not be able allow action by shareholder by outsider before renounce ownership',async() => { - await daoBase.allowActionByAddress(addNewProposal, employee3, {from: outsider}).should.be.rejectedWith('revert'); - }); - - it('Should not be able allow action by outsider after renounce ownership',async() => { - await daoBase.renounceOwnership(); - await daoBase.allowActionByAddress(addNewProposal, employee3, {from: outsider}).should.be.rejectedWith('revert'); - }); - - it('Should be able allow action by creator before renounce ownership',async() => { - await daoBase.allowActionByAddress(addNewProposal, employee3); - }); - - it('Should not be able allow action by creator after renounce ownership',async() => { - await daoBase.renounceOwnership(); - await daoBase.allowActionByAddress(addNewProposal, employee3).should.be.rejectedWith('revert'); - }); - }); - - describe('allowActionByAnyMemberOfGroup()', function () { - it('Should not be able allow action by shareholder by outsider before renounce ownership',async() => { - await daoBase.allowActionByAnyMemberOfGroup(addNewProposal, "Employees", {from: outsider}).should.be.rejectedWith('revert'); - }); - - it('Should not be able allow action by outsider after renounce ownership',async() => { - await daoBase.renounceOwnership(); - await daoBase.allowActionByAnyMemberOfGroup(addNewProposal, "Employees", {from: outsider}).should.be.rejectedWith('revert'); - }); - - it('Should be able allow action by creator before renounce ownership',async() => { - await daoBase.addGroupMember("Employees", employee3); - assert.equal(await daoBase.isGroupMember("Employees", employee3), true); - await daoBase.allowActionByAnyMemberOfGroup(addNewProposal, "Employees"); - assert.equal(await daoBase.isCanDoAction(employee3, addNewProposal), true); - }); - - it('Should not be able allow action by creator after renounce ownership',async() => { - await daoBase.renounceOwnership(); - await daoBase.addGroupMember("Employees", employee3).should.be.rejectedWith('revert'); - assert.equal(await daoBase.isGroupMember("Employees", employee3), false); - await daoBase.allowActionByAnyMemberOfGroup(addNewProposal, "Employees").should.be.rejectedWith('revert'); - assert.equal(await daoBase.isCanDoAction(employee3, addNewProposal), false); - }); - }); - - describe('addNewProposal()', function () { - it('Should revert due to call allow action without outsider',async() => { - proposal = await GenericProposal.new(creator, creator, '', []); - await daoBase.addNewProposal(proposal.address, {from: outsider}).should.be.rejectedWith('revert'); - }); - - it('Should remove member from daoBase',async() => { - proposal = await GenericProposal.new(creator, creator, '', []); - await daoBase.addNewProposal(proposal.address); - }); - }); - - describe('getProposalAtIndex()', function () { - it('Should return correct value',async() => { - proposal = await GenericProposal.new(creator, creator, '', []); - await daoBase.addNewProposal(proposal.address); - assert.equal(await daoBase.getProposalAtIndex(0), proposal.address); - }); - }); - - describe('getProposalsCount()', function () { - it('Should return correct value',async() => { - proposal = await GenericProposal.new(creator, creator, '', []); - await daoBase.addNewProposal(proposal.address); - let amount = await daoBase.getProposalsCount(); - assert.equal(amount.toNumber(), 1); - }); - }); - - it('should set everything correctly',async() => { - const isMember = await daoBase.isGroupMember("Employees", creator); - assert.equal(isMember,true,'Permission should be set correctly'); - - const isMember2 = await daoBase.isGroupMember("Employees", employee1); - assert.equal(isMember2,false,'Permission should be set correctly'); - - const isCan = await daoBase.isCanDoByGroupMember(addNewProposal, creator); - assert.equal(isCan,true,'Any employee should be able to add new proposal'); - - const isCan2 = await daoBase.isCanDoAction(creator, addNewProposal); - assert.equal(isCan2,true,'Creator should be able to call addNewProposal directly'); - }); - - it('should return correct permissions for an outsider',async() => { - const isCanDo1 = await daoBase.isCanDoAction(outsider,addNewProposal); - assert.strictEqual(isCanDo1,false,'Outsider should not be able to do that '); - - const isCanDo2 = await daoBase.isCanDoAction(outsider,manageGroups); - const isCanDo3 = await daoBase.isCanDoAction(outsider,issueTokens); - assert.strictEqual(isCanDo2,false,'Outsider should not be able to do that because he is in majority'); - assert.strictEqual(isCanDo3,false,'Outsider should not be able to do that because he is in majority'); - }); - - it('should return correct permissions for creator',async() => { - const isCanDo1 = await daoBase.isCanDoAction(creator,addNewProposal); - assert.strictEqual(isCanDo1,true,'Creator should be able to do that '); - - const isCanDo2 = await daoBase.isCanDoAction(creator,manageGroups); - const isCanDo3 = await daoBase.isCanDoAction(creator,issueTokens); - assert.strictEqual(isCanDo2,false,'Creator should not be able to do that'); - assert.strictEqual(isCanDo3,true,'Creator should be able to do that because he is in majority'); - }); - - it('should not add new vote if not employee',async() => { - // employee1 is still not added to DaoBase as an employee - let newProposal = 0x123; - await daoBase.addNewProposal.sendTransaction(newProposal, {from: employee1}).should.be.rejectedWith('revert'); - }); + let token; + let daoBase; + let store; + let issueTokens; + let manageGroups; + let addNewProposal; + let upgradeDaoContract; + let addNewTask; + let startTask; + let startBounty; + let modifyMoneyscheme; + let withdrawDonations; + let setRootWeiReceiver; + let burnTokens; + let daoClient; + let proposal; + + const creator = accounts[0]; + const employee1 = accounts[1]; + const employee2 = accounts[2]; + const outsider = accounts[3]; + const employee3 = accounts[4]; + + before(async() => { + + }); + + beforeEach(async() => { + token = await StdDaoToken.new("StdToken","STDT",18, true, true, 1000000000); + await token.mintFor(creator, 1000); + store = await DaoStorage.new([token.address],{from: creator}); + daoBase = await DaoBaseWithUnpackers.new(store.address,{from: creator}); + + issueTokens = await daoBase.ISSUE_TOKENS(); + manageGroups = await daoBase.MANAGE_GROUPS(); + upgradeDaoContract = await daoBase.UPGRADE_DAO_CONTRACT(); + withdrawDonations = await daoBase.WITHDRAW_DONATIONS(); + addNewProposal = await daoBase.ADD_NEW_PROPOSAL(); + burnTokens = await daoBase.BURN_TOKENS(); + + await store.addGroupMember(web3.sha3("Employees"), creator); + + // do not forget to transfer ownership + await token.transferOwnership(daoBase.address); + await store.transferOwnership(daoBase.address); + + // Set permissions: + await daoBase.allowActionByAnyMemberOfGroup(addNewProposal, "Employees"); + await daoBase.allowActionByAnyMemberOfGroup(burnTokens, "Employees"); + await daoBase.allowActionByAnyMemberOfGroup(upgradeDaoContract, 'Employees'); + await daoBase.allowActionByAddress(withdrawDonations, creator); + await daoBase.allowActionByVoting(issueTokens, token.address); + await daoBase.allowActionByVoting(upgradeDaoContract, token.address); + }); + + describe('addObserver()', function () { + it('Should add observer to daoBase',async() => { + daoClient = await DaoClient.new(daoBase.address); + await daoBase.addObserver(daoClient.address); + await assert.equal(await daoBase.getObserversCount(), 2); + await assert.equal(await daoBase.getObserverAtIndex(0), daoClient.address); + }); + }); + + describe('onUpgrade()', function () { + it('Should revert if call is not from daoBase',async() => { + daoClient = await DaoClient.new(daoBase.address); + await daoBase.addObserver(daoClient.address); + await daoClient.onUpgrade(accounts[5],{from:creator}).should.be.rejectedWith('revert'); + }); + }); + + describe('getMembersCount()', function () { + it('Should return correct value',async() => { + await daoBase.addGroupMember("", employee1).should.be.rejectedWith('revert'); + await daoBase.addGroupMember("Employees", employee1); + assert.equal(await daoBase.getMembersCount("Employees"), 2); + }); + }); + + describe('getGroupMembers()', function () { + it('Should return correct value',async() => { + await daoBase.addGroupMember("Employees", employee2); + let members = await daoBase.getGroupMembers("Employees"); + assert.equal(members.length, 2); + }); + }); + + describe('removeGroupMember()', function () { + it('Should revert due to call whithout rights',async() => { + await daoBase.removeGroupMember("Employees", employee2, {from: outsider}).should.be.rejectedWith('revert'); + }); + + it('Should remove member from daoBase',async() => { + await daoBase.addGroupMember("Employees", employee1); + assert.equal(await daoBase.isGroupMember("Employees", employee1), true); + + await daoBase.removeGroupMember("Employees", employee1); + + let members = await daoBase.getGroupMembers("Employees"); + assert.equal(members.length, 1); + assert.equal(await daoBase.isGroupMember("Employees", employee1), false); + }); + }); + describe('isGroupMember()', function () { + it('Should return false',async() => { + assert.equal(await daoBase.isGroupMember("Employees", outsider), false); + }); + + it('Should return true',async() => { + assert.equal(await daoBase.isGroupMember("Employees", creator), true); + }); + }); + + describe('getMemberByIndex()', function () { + it('Should return creator',async() => { + assert.equal(await daoBase.getMemberByIndex("Employees", 0), creator); + }); + }); + + describe('allowActionByVoting()', function () { + it('Should not be able allow action by outsider before renounce ownership',async() => { + token = await StdDaoToken.new("StdToken","STDT",18, true, true, 1000000000); + await daoBase.allowActionByVoting(addNewProposal, token.address, {from: outsider}).should.be.rejectedWith('revert'); + }); + + it('Should not be able allow action by outsider after renounce ownership',async() => { + token = await StdDaoToken.new("StdToken","STDT",18, true, true, 1000000000); + await daoBase.renounceOwnership(); + await daoBase.allowActionByVoting(addNewProposal, token.address, {from: outsider}).should.be.rejectedWith('revert'); + }); + + it('Should be able allow action by creator before renounce ownership',async() => { + token = await StdDaoToken.new("StdToken","STDT",18, true, true, 1000000000); + await daoBase.allowActionByVoting(addNewProposal, token.address); + }); + + it('Should not be able allow action by creator after renounce ownership',async() => { + token = await StdDaoToken.new("StdToken","STDT",18, true, true, 1000000000); + await daoBase.renounceOwnership(); + await daoBase.allowActionByVoting(addNewProposal, token.address).should.be.rejectedWith('revert'); + }); + }); + + describe('allowActionByShareholder()', function () { + it('Should not be able allow action by shareholder by outsider before renounce ownership',async() => { + await daoBase.allowActionByShareholder(addNewProposal, token.address, {from: outsider}).should.be.rejectedWith('revert'); + }); + + it('Should not be able allow action by shareholder by outsider after renounce ownership',async() => { + await daoBase.renounceOwnership(); + await daoBase.allowActionByShareholder(addNewProposal, token.address, {from: outsider}).should.be.rejectedWith('revert'); + }); + + it('Should be able allow action by shareholder by creator before renounce ownership',async() => { + await daoBase.allowActionByShareholder(addNewProposal, token.address); + }); + + it('Should not be able allow action by shareholder by creator after renounce ownership',async() => { + await daoBase.renounceOwnership(); + await daoBase.allowActionByShareholder(addNewProposal, token.address).should.be.rejectedWith('revert'); + }); + }); + + describe('allowActionByAddress()', function () { + it('Should not be able allow action by shareholder by outsider before renounce ownership',async() => { + await daoBase.allowActionByAddress(addNewProposal, employee3, {from: outsider}).should.be.rejectedWith('revert'); + }); + + it('Should not be able allow action by outsider after renounce ownership',async() => { + await daoBase.renounceOwnership(); + await daoBase.allowActionByAddress(addNewProposal, employee3, {from: outsider}).should.be.rejectedWith('revert'); + }); + + it('Should be able allow action by creator before renounce ownership',async() => { + await daoBase.allowActionByAddress(addNewProposal, employee3); + }); + + it('Should not be able allow action by creator after renounce ownership',async() => { + await daoBase.renounceOwnership(); + await daoBase.allowActionByAddress(addNewProposal, employee3).should.be.rejectedWith('revert'); + }); + }); + + describe('allowActionByAnyMemberOfGroup()', function () { + it('Should not be able allow action by shareholder by outsider before renounce ownership',async() => { + await daoBase.allowActionByAnyMemberOfGroup(addNewProposal, "Employees", {from: outsider}).should.be.rejectedWith('revert'); + }); + + it('Should not be able allow action by outsider after renounce ownership',async() => { + await daoBase.renounceOwnership(); + await daoBase.allowActionByAnyMemberOfGroup(addNewProposal, "Employees", {from: outsider}).should.be.rejectedWith('revert'); + }); + + it('Should be able allow action by creator before renounce ownership',async() => { + await daoBase.addGroupMember("Employees", employee3); + assert.equal(await daoBase.isGroupMember("Employees", employee3), true); + await daoBase.allowActionByAnyMemberOfGroup(addNewProposal, "Employees"); + assert.equal(await daoBase.isCanDoAction(employee3, addNewProposal), true); + }); + + it('Should not be able allow action by creator after renounce ownership',async() => { + await daoBase.renounceOwnership(); + await daoBase.addGroupMember("Employees", employee3).should.be.rejectedWith('revert'); + assert.equal(await daoBase.isGroupMember("Employees", employee3), false); + await daoBase.allowActionByAnyMemberOfGroup(addNewProposal, "Employees").should.be.rejectedWith('revert'); + assert.equal(await daoBase.isCanDoAction(employee3, addNewProposal), false); + }); + }); + + describe('addNewProposal()', function () { + it('Should revert due to call allow action without outsider',async() => { + proposal = await GenericProposal.new(creator, creator, '', []); + await daoBase.addNewProposal(proposal.address, {from: outsider}).should.be.rejectedWith('revert'); + }); + + it('Should remove member from daoBase',async() => { + proposal = await GenericProposal.new(creator, creator, '', []); + await daoBase.addNewProposal(proposal.address); + }); + }); + + describe('getProposalAtIndex()', function () { + it('Should return correct value',async() => { + proposal = await GenericProposal.new(creator, creator, '', []); + await daoBase.addNewProposal(proposal.address); + assert.equal(await daoBase.getProposalAtIndex(0), proposal.address); + }); + }); + + describe('getProposalsCount()', function () { + it('Should return correct value',async() => { + proposal = await GenericProposal.new(creator, creator, '', []); + await daoBase.addNewProposal(proposal.address); + let amount = await daoBase.getProposalsCount(); + assert.equal(amount.toNumber(), 1); + }); + }); + + it('should set everything correctly',async() => { + const isMember = await daoBase.isGroupMember("Employees", creator); + assert.equal(isMember,true,'Permission should be set correctly'); + + const isMember2 = await daoBase.isGroupMember("Employees", employee1); + assert.equal(isMember2,false,'Permission should be set correctly'); + + const isCan = await daoBase.isCanDoByGroupMember(addNewProposal, creator); + assert.equal(isCan,true,'Any employee should be able to add new proposal'); + + const isCan2 = await daoBase.isCanDoAction(creator, addNewProposal); + assert.equal(isCan2,true,'Creator should be able to call addNewProposal directly'); + }); + + it('should return correct permissions for an outsider',async() => { + const isCanDo1 = await daoBase.isCanDoAction(outsider,addNewProposal); + assert.strictEqual(isCanDo1,false,'Outsider should not be able to do that '); + + const isCanDo2 = await daoBase.isCanDoAction(outsider,manageGroups); + const isCanDo3 = await daoBase.isCanDoAction(outsider,issueTokens); + assert.strictEqual(isCanDo2,false,'Outsider should not be able to do that because he is in majority'); + assert.strictEqual(isCanDo3,false,'Outsider should not be able to do that because he is in majority'); + }); + + it('should return correct permissions for creator',async() => { + const isCanDo1 = await daoBase.isCanDoAction(creator,addNewProposal); + assert.strictEqual(isCanDo1,true,'Creator should be able to do that '); + + const isCanDo2 = await daoBase.isCanDoAction(creator,manageGroups); + const isCanDo3 = await daoBase.isCanDoAction(creator,issueTokens); + assert.strictEqual(isCanDo2,false,'Creator should not be able to do that'); + assert.strictEqual(isCanDo3,true,'Creator should be able to do that because he is in majority'); + }); + + it('should not add new vote if not employee',async() => { + // employee1 is still not added to DaoBase as an employee + let newProposal = 0x123; + await daoBase.addNewProposal.sendTransaction(newProposal, {from: employee1}).should.be.rejectedWith('revert'); + }); it('should issue tokens to employee1 and employee2', async () => { // currently creator has 1000 tokens, he is in majority, so this should not fail @@ -313,6 +322,20 @@ contract('DaoBase', (accounts) => { assert.equal(balance3, 1000, 'employee2 balance'); }); + it('should not issue tokens to employee1', async () => { + // currently creator has 1000 tokens, he is in majority, so this should not fail + let falseToken = accounts[5]; + await daoBase.issueTokens(falseToken, employee1, 2000).should.be.rejectedWith('revert'); + }); + + it('should not burn tokens to employee1', async () => { + // currently creator has 1000 tokens, he is in majority, so this should not fail + let falseToken = accounts[5]; + await daoBase.issueTokens(token.address, employee1, 1000); + await daoBase.burnTokens(token.address, employee1, 500); + await daoBase.burnTokens(falseToken, employee1, 500).should.be.rejectedWith('revert'); + }); + it('should be able to upgrade', async () => { // one client of the IDaoBase (to test how upgrade works with it) let moneyflowInstance = await MoneyFlow.new(daoBase.address); diff --git a/test/daobase_auto.tests.js b/test/daobase_auto.tests.js index f80e269..8996a03 100644 --- a/test/daobase_auto.tests.js +++ b/test/daobase_auto.tests.js @@ -25,12 +25,10 @@ contract('DaoBaseAuto', (accounts) => { await token.mintFor(employee1, 1); await token.mintFor(employee2, 1); - // store = await DaoStorage.new([token.address], {from: creator}); store = await DaoStorage.new([token.address],{from: creator}); daoBase = await DaoBaseWithUnpackers.new(store.address, {from: creator}); daoBaseAuto = await DaoBaseAuto.new(daoBase.address, {from: creator}); const MANAGE_GROUPS = await daoBase.MANAGE_GROUPS(); - //await store.allowActionByAddress(MANAGE_GROUPS, creator); await token.transferOwnership(daoBase.address); await store.transferOwnership(daoBase.address); @@ -92,7 +90,7 @@ contract('DaoBaseAuto', (accounts) => { }); }); - /*describe('upgradeDaoContractAuto()', () => { + describe('upgradeDaoContractAuto()', () => { it('should return a proposal', async() => { const newDaoBase = await DaoBaseWithUnpackers.new([token.address], {from: creator}); await daoBaseAuto.upgradeDaoContractAuto(newDaoBase.address, {from: employee1}).should.be.fulfilled; @@ -110,7 +108,7 @@ contract('DaoBaseAuto', (accounts) => { assert.equal(params[0], padToBytes32(newDaoBase.address, 'left')); }); - });*/ + }); describe('removeGroupMemberAuto()', () => { it('should return a proposal', async() => { diff --git a/test/governance/voting.functional.tests.js b/test/governance/voting.functional.tests.js index 0de2dd9..1ce4804 100644 --- a/test/governance/voting.functional.tests.js +++ b/test/governance/voting.functional.tests.js @@ -143,10 +143,10 @@ contract('Voting (func)', (accounts) => { // await daoBase.addGroupMember("Employees", creator); }); - it('0. should create new voting', async () => { + it('0. should create new voting with 0 time to vote', async () => { let isGroupMember = await daoBase.isGroupMember('Employees', employee1); assert.equal(isGroupMember, true, 'Creator is ein the group'); - let voting = await Voting.new(daoBase.address, employee1, employee1, VOTING_TYPE_SIMPLE_TOKEN, 60, '', 51, 71, token.address); + let voting = await Voting.new(daoBase.address, employee1, employee1, VOTING_TYPE_SIMPLE_TOKEN, 0, '', 51, 71, token.address); await voting.vote(true, { from: employee1}); let quorumPercent = await voting.quorumPercent(); let consensusPercent = await voting.consensusPercent(); @@ -1586,8 +1586,8 @@ contract('Voting (func)', (accounts) => { let isGroupMember = await daoBase.isGroupMember('Employees', employee1); assert.equal(isGroupMember, true, 'Creator is ein the group'); let voting = await Voting.new(daoBase.address, employee1, employee1, VOTING_TYPE_1P1V, 60, 'Employees', 51, 71, token.address); + await voting.vote(true, { from: accounts[8]}).should.be.rejectedWith('revert'); await voting.vote(true, { from: employee1}); - let quorumPercent = await voting.quorumPercent(); let consensusPercent = await voting.consensusPercent(); let groupName = await voting.groupName(); diff --git a/test/moneyflow/moneyflow.tests.js b/test/moneyflow/moneyflow.tests.js index 5d57b7b..3760b02 100644 --- a/test/moneyflow/moneyflow.tests.js +++ b/test/moneyflow/moneyflow.tests.js @@ -308,12 +308,6 @@ contract('Moneyflow', (accounts) => { id: new Date().getTime(), }, function (err) { if (err) console.log('err:', err); }); - // let periodHours = await Employee1.periodHours(); - // let MomentReceived2 = await Employee1.momentReceived(); - let NOW2 = await Employee1.getNow(); - - // assert.equal ( Math.round((NOW2.toNumber() - MomentReceived2.toNumber())/(3600*1000)), 25 ) - let needsEmployee2 = await Employee1.isNeedsMoney({ from: creator }); assert.equal(needsEmployee2, true, 'Need money, because 24 hours passed'); @@ -359,7 +353,6 @@ contract('Moneyflow', (accounts) => { // let periodHours = await Employee1.periodHours(); // let MomentReceived2 = await Employee1.momentReceived(); - let NOW2 = await Employee1.getNow(); let multi2 = await Employee1.getDebtMultiplier(); assert.equal(multi2.toNumber(), 3, '75 hours => x3'); diff --git a/test/tokens/copy_on_write_token.tests.js b/test/tokens/preserve_balances_on_transfer_token.tests.js similarity index 85% rename from test/tokens/copy_on_write_token.tests.js rename to test/tokens/preserve_balances_on_transfer_token.tests.js index 32e19b1..2479184 100644 --- a/test/tokens/copy_on_write_token.tests.js +++ b/test/tokens/preserve_balances_on_transfer_token.tests.js @@ -2,7 +2,7 @@ const BigNumber = web3.BigNumber; var increaseTimeTo = require('../utils/increaseTime'); -const CopyOnWriteToken = artifacts.require('CopyOnWriteToken'); +const PreserveBalancesOnTransferToken = artifacts.require('PreserveBalancesOnTransferToken'); const duration = { seconds: function (val) { return val; }, @@ -18,7 +18,7 @@ require('chai') .use(require('chai-bignumber')(BigNumber)) .should(); -contract('CopyOnWriteToken', (accounts) => { +contract('PreserveBalancesOnTransferToken', (accounts) => { const creator = accounts[0]; const account3 = accounts[3]; const account4 = accounts[4]; @@ -29,23 +29,23 @@ contract('CopyOnWriteToken', (accounts) => { describe('mint()', function () { it('should fail due to not owner call', async function () { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(web3.eth.accounts[1], 1000, { from: web3.eth.accounts[1] }).should.be.rejectedWith('revert'); }); it('should fail with isMintable = false', async function () { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(web3.eth.accounts[1], 1000); }); it('should fail due to finishMinting() call', async function () { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.finishMinting(); await this.token.mint(web3.eth.accounts[1], 1000).should.be.rejectedWith('revert'); }); it('should pass', async function () { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(web3.eth.accounts[0], 1000); let balance = await this.token.balanceOf(web3.eth.accounts[0]); assert.equal(balance.toNumber(), 1000); @@ -54,18 +54,18 @@ contract('CopyOnWriteToken', (accounts) => { describe('burn()', function () { it('should fail due to not owner call', async function () { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(web3.eth.accounts[1], 1000); await this.token.burn(1000, { from: web3.eth.accounts[0] }).should.be.rejectedWith('revert'); }); it('should fail due to not enough tokens in the address provided', async function () { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.burn(1000).should.be.rejectedWith('revert'); }); it('should pass', async function () { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(web3.eth.accounts[0], 1000); await this.token.burn(1000); let balance = await this.token.balanceOf(web3.eth.accounts[0]); @@ -73,43 +73,9 @@ contract('CopyOnWriteToken', (accounts) => { }); }); - describe('startNewEvent()', function () { - it('should not allow to create > 20 separate events', async () => { - this.token = await CopyOnWriteToken.new(); - - await this.token.startNewEvent();// 1 - await this.token.startNewEvent();// 2 - await this.token.startNewEvent();// 3 - await this.token.startNewEvent();// 4 - await this.token.startNewEvent();// 5 - await this.token.startNewEvent();// 6 - await this.token.startNewEvent();// 7 - await this.token.startNewEvent();// 8 - await this.token.startNewEvent();// 9 - await this.token.startNewEvent();// 10 - await this.token.startNewEvent();// 11 - await this.token.startNewEvent();// 12 - await this.token.startNewEvent();// 13 - await this.token.startNewEvent();// 14 - await this.token.startNewEvent();// 15 - await this.token.startNewEvent();// 16 - await this.token.startNewEvent();// 17 - await this.token.startNewEvent();// 18 - await this.token.startNewEvent();// 19 - await this.token.startNewEvent();// 20 - await this.token.startNewEvent().should.be.rejectedWith('revert'); - }); - - it('should not be possible to call by non-owner', async () => { - this.token = await CopyOnWriteToken.new(); - // TODO: - // await this.token.startNewEvent({from: account3}).should.be.rejectedWith('revert'); - }); - }); - describe('getBalanceAtEventStart()', function () { it('should preserve balances if no transfers happened after event is started', async () => { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(account4, 1); let account4Balance = await this.token.balanceOf(account4); @@ -130,7 +96,7 @@ contract('CopyOnWriteToken', (accounts) => { }); it('should preserve balances after event is started', async () => { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(account4, 1); const tx = await this.token.startNewEvent(); @@ -153,7 +119,7 @@ contract('CopyOnWriteToken', (accounts) => { }); it('should preserve balances after event is started and mint called', async () => { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); const tx = await this.token.startNewEvent(); const events = tx.logs.filter(l => l.event == 'EventStarted'); @@ -171,7 +137,7 @@ contract('CopyOnWriteToken', (accounts) => { }); it('should throw exception when trying to check balancesAtVoting after event is ended', async () => { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(account4, 1); const tx = await this.token.startNewEvent(); @@ -198,7 +164,7 @@ contract('CopyOnWriteToken', (accounts) => { }); it('should preserve balances after event is started and transferFrom is called', async () => { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(account4, 1); const tx = await this.token.startNewEvent(); @@ -222,14 +188,14 @@ contract('CopyOnWriteToken', (accounts) => { }); it('should throw exception because event is not started yet', async function () { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(web3.eth.accounts[0], 1000); let balance1 = await this.token.getBalanceAtEventStart(0, web3.eth.accounts[0]).should.be.rejectedWith('revert'); }); it('should work correctly if time passed and new event is started', async () => { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(account3, 100); await this.token.mint(account4, 20); @@ -290,7 +256,7 @@ contract('CopyOnWriteToken', (accounts) => { // TODO: this is not working (absolutely same test as above, but increaseTimeTo is commented) // Is that a feature OR A BUG??? it('should work correctly if time NOT passed and new event is started',async() => { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(account3, 100); await this.token.mint(account4, 20); @@ -351,7 +317,7 @@ contract('CopyOnWriteToken', (accounts) => { describe('finishEvent()', function () { it('should not be possible to call by non-owner', async () => { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); const tx = await this.token.startNewEvent(); const events = tx.logs.filter(l => l.event == 'EventStarted'); @@ -362,7 +328,7 @@ contract('CopyOnWriteToken', (accounts) => { }); it('should throw revert() if VotingID is wrong', async () => { - this.token = await CopyOnWriteToken.new(); + this.token = await PreserveBalancesOnTransferToken.new(); await this.token.mint(account4, 1); const tx = await this.token.startNewEvent(); diff --git a/test/tokens/stddaotoken.tests.js b/test/tokens/stddaotoken.tests.js index 231c3ea..ea34e41 100644 --- a/test/tokens/stddaotoken.tests.js +++ b/test/tokens/stddaotoken.tests.js @@ -128,32 +128,6 @@ contract('StdDaoToken', (accounts) => { await this.token.pause(); await this.token.startNewVoting().should.be.rejectedWith('revert'); }); - - it('should not allow to create > 20 separate votings', async () => { - this.token = await StdDaoToken.new('StdToken', 'STDT', 18, false, true, ETH); - - await this.token.startNewVoting();// 1 - await this.token.startNewVoting();// 2 - await this.token.startNewVoting();// 3 - await this.token.startNewVoting();// 4 - await this.token.startNewVoting();// 5 - await this.token.startNewVoting();// 6 - await this.token.startNewVoting();// 7 - await this.token.startNewVoting();// 8 - await this.token.startNewVoting();// 9 - await this.token.startNewVoting();// 10 - await this.token.startNewVoting();// 11 - await this.token.startNewVoting();// 12 - await this.token.startNewVoting();// 13 - await this.token.startNewVoting();// 14 - await this.token.startNewVoting();// 15 - await this.token.startNewVoting();// 16 - await this.token.startNewVoting();// 17 - await this.token.startNewVoting();// 18 - await this.token.startNewVoting();// 19 - await this.token.startNewVoting();// 20 - await this.token.startNewVoting().should.be.rejectedWith('revert'); // should be revert(); - }); }); describe('getBalanceAtVoting()', function () {